diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40fdcc0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +*~ +*.DS_Store +*.swp +__pycache__ + +*.o +*.a +*.so +*.bc +*.dylib +*.pyc +*.out +*.err +*.exec +*.dat +*.csv +*.hdf +*.pdf +*.eps + +src/config_schema.h +src/*-desugared.rg diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..48ccd75 --- /dev/null +++ b/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) "2019, by Stanford University + Developer: Mario Di Renzo + Affiliation: Center for Turbulence Research, Stanford University + URL: https://ctr.stanford.edu + Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). + HTR solver: An open-source exascale-oriented task-based + multi-GPU high-order code for hypersonic aerothermodynamics. + Computer Physics Communications (In Press), 107262" +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * 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. + +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 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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a8181c6 --- /dev/null +++ b/README.md @@ -0,0 +1,378 @@ +Organization of the repository +============================== + +./ + > [src/](src/) + > > [prometeo.rg](src/prometeo.rg): Main tasks of the solver + > > [prometeo_const.rg](src/prometeo_const.rg): Module that contains constants used by the solver + > > [prometeo_macro.rg](src/prometeo_macro.rg): Module that contains simple macros used by the solver + > > [prometeo_init.rg](src/prometeo_init.rg): Module that contains initialization tasks + > > [prometeo_grid.rg](src/prometeo_grid.rg): Module that contains the tasks to generate the computational grid + > > [prometeo_cfl.rg](src/prometeo_cfl.rg): Module that contains the tasks to compute the CFL number + > > [prometeo_chem.rg](src/prometeo_chem.rg): Module that contains the tasks to advance chemistry + > > [prometeo_bc.rg](src/prometeo_bc.rg): Module that contains the tasks that handle boundary conditions + > > [prometeo_profiles.rg](src/prometeo_profiles.rg): Module that contains the tasks that handle external profiles provided to the solver + > > [prometeo_rk.rg](src/prometeo_rk.rg): Module that contains the tasks for Runge-Kutta algorithm + > > [prometeo_stat.rg](src/prometeo_stat.rg): Module that contains the tasks that extract integral quantities from the solution + > > [prometeo_flux.rg](src/prometeo_flux.rg): Module that contains the tasks that compute the fluxes + > > [prometeo_rhs.rg](src/prometeo_rhs.rg): Module that contains the tasks that operate on the right-hand side of the equations + > > [prometeo_operators.rg](src/prometeo_operators.rg): Module that contains the tasks corresponding to some differential operators + > > [prometeo_variables.rg](src/prometeo_variables.rg): Module that contains the tasks that compute auxiliary variables from the unknowns and the other way around + > > [prometeo_IO.rg](src/prometeo_IO.rg): Module that contains the tasks that perform I/O operations + > > [prometeo_average.rg](src/prometeo_average.rg): Module that contains the tasks that perform 2D averages of the solution + > > [prometeo_metric.rg](src/prometeo_metric.rg): Module that contains the tasks that compute the metric of the solver + > > [prometeo_mapper.h](src/prometeo_mapper.h) [prometeo_mapper.cc](src/prometeo_mapper.cc): Source files for the mapper of the solver + > > [desugar.py](src/desugar.py): Script that substitutes some macros used for metaprogramming + > > [Makefile](src/Makefile): Builds the solver + > > [prometeo.sh](src/prometeo.sh): Script to run a calculation + > > [run.sh](src/run.sh): Script called by [prometeo.sh](src/prometeo.sh) to generate the execution command (modify this script using the provided templates to add a new machine) + > > [jobscript_shared.sh](src/jobscript_shared.sh): Script called by [run.sh](src/run.sh) + > > [json.h](src/json.h) [json.c](src/json.c): Source files to interpret `*.json` files + > > [Reaction.rg](src/Reaction.rg): Tasks and data structures related to chemical reactions + > > [Species.rg](src/Species.rg): Tasks and data structures related to chemical species + > > [ConstPropMix.rg](src/ConstPropMix.rg): Tasks and data structures describing a calorically perfect gas + > > [AirMix.rg](src/AirMix.rg): Tasks and data structures describing a non-equilibrium dissociating air + > > [config_schema.lua](src/config_schema.lua): Lua file descibing the fields of the input file + > > [process_schema.rg](src/process_schema.rg): Interpreter for [config_schema.lua](src/config_schema.lua) + > > [util.rg ](src/util.rg): Various Regent tasks and Lua functions deployed throughout the solver + > > [math_utils.rg](src/math_utils.rg): Basic mathematical operations deployed in the solver + > > [hdf_helper.rg](src/hdf_helper.rg): Scripts to read and write HDF5 files + > > [certainty.slurm](src/certainty.slurm): Submission script for Certainty (@ Stanford) (use as a template script for slurm system) + > > [quartz.slurm](src/quartz.slurm): Submission script for Quartz (@ LLNL) (use as a template script for slurm system) + > > [lassen.lsf](src/lassen.lsf): Submission script for Lassen (@ LLNL) (use as a template script for IBM Spectrum LSF system) + > > [blacklist](src/blacklist): Folder containing potential blacklists of nodes that should not be used + + > [scripts/](scripts/) + > > [viz_fluid.py](scripts/viz_fluid.py): Script to produce Xdmf files for visualiztion + > > [compare_hdf.py](scripts/compare_hdf.py): Script to compare two HDF5 files + > > [merge.py](scripts/merge.py): Script to merge multiple HDF5 files into a single file + > > [makeVirtualLayout.py](scripts/makeVirtualLayout.py): Script to merge multiple HDF5 files into a single file using a virtual layout + > > [interpolate.py](scripts/interpolate.py): Script to interpolate a solution on a new grid + > > [convert_output_for_viz.py](scripts/convert_output_for_viz.py): Script that automates the production of visualization files for multiple snapshots + > > [modules/](scripts/modules/): Various utility modules used by the python scripts + + > [testcases/](testcases/) + > > [README.md](testcases/README.md): Instructions on how to run the provided testcases + > > [SodProblem/](testcases/SodProblem/): Contains the setup and postporcessing files needed to run Sod's shock tube + > > [LaxProblem/](testcases/LaxProblem/): Contains the setup and postporcessing files needed to run Lax's shock tube + > > [ShuOsherProblem/](testcases/ShuOsherProblem/): Contains the setup and postporcessing files needed to run Shu-Osher's shock tube + > > [GrossmanCinnellaProblem/](testcases/GrossmanCinnellaProblem/): Contains the setup and postporcessing files needed to run Grossman-Cinnella's shock tube + > > [Blasius/](testcases/Blasius/): Contains the setup and postporcessing files needed to run an incompressible boundary layer + > > [CompressibleBL/](testcases/CompressibleBL/): Contains the setup and postporcessing files needed to run a compressible boundary layer + > > [VortexAdvection2D/](testcases/VortexAdvection2D/): Contains the setup and postporcessing files needed to run the inviscid vortex advection + > > [TaylorGreen2D/](testcases/TaylorGreen2D/): Contains the setup and postporcessing files needed to run the 2D Taylor-Green vortex + > > [Coleman/](testcases/Coleman/): Contains the setup and postporcessing files needed to run Coleman's channel flow + > > [Sciacovelli/](testcases/Sciacovelli/): Contains the setup and postporcessing files needed to run Sciacovelli's channel flow + > > [Franko/](testcases/Franko/): Contains the setup and postporcessing files needed to run Franko's boundary layer + > > [MultispeciesTBL/](testcases/MultispeciesTBL/): Contains the setup and postporcessing files needed to run Multispecies hypersonic boundary layer + > > [scalingTest/WS](testcases/scalingTest/WS): Contains the setup and postporcessing files needed to run the weak saling test + + +Setup (generic) +=============== + +See below for instructions targeting specific systems. + +### Prerequisites + +* Legion (latest version) +* GCC 4.9+ (we need a working `std::regex` library) +* CUDA 7.5+ +* Python 2.X + +The following are automatically installed during Legion installation: + +* LLVM 3.8 (for CUDA 8.0+) or 3.5 (for CUDA 7.5, and better debug info) +* GASNET (custom version) +* Terra (custom version -- we need to use LuaJIT2.1 instead of the default LuaJIT2.0, because the latter exhibits a spurious out-of-memory error when compiling large Regent programs) +* HDF5 (any recent version) + +### Add to shell startup + +Normally you'd need to edit file `~/.bashrc`. Replace the `???` depending on your system. + +``` +# Module loads (if necessary) +... +# Build config (if necessary, for Legion or Prometeo) +... +# Path setup (mandatory) +export LEGION_DIR=??? +export HDF_ROOT="$LEGION_DIR"/language/hdf/install +export HTR_DIR=??? +[export SCRATCH=???] +# CUDA config (if using CUDA code generation) +export CUDA_HOME=??? +export CUDA="$CUDA_HOME" +export GPU_ARCH=??? +``` + +### Download software + +``` +git clone -b htr-release https://gitlab.com/mario.direnzo/legion.git "$LEGION_DIR" +git clone https://github.com/stanfordhpccenter/HTR-solver.git "$HTR_DIR" +``` + +### Install Legion + +Replace the `?` depending on your system's capabilities. + +``` +cd "$LEGION_DIR"/language +USE_CUDA=? USE_OPENMP=? USE_GASNET=? USE_HDF=? MAX_DIM=4 scripts/setup_env.py --llvm-version 38 --terra-url 'https://github.com/StanfordLegion/terra.git' --terra-branch 'luajit2.1' +``` + +See [Elliott's instructions](https://docs.google.com/document/d/1Qkl6r-1ZIb8WyH1f_WZbKgjp3due_Q8UiWKLh_nG1ec/edit) for more help. + +### Compile the HTR solver + +NOTE: This step may take up to 2 hrs depending on the system + +``` +cd "$HTR_DIR"/src +[USE_CUDA=0] [USE_HDF=0] make +``` + +Running +======= + +``` +cd "$HTR_DIR"/src +./prometeo.sh ... +``` + +The [src/prometeo.sh](src/prometeo.sh) script accepts some options through the environment (see the top of that file for details), and forwards all command-line arguments to the HTR solver executable and the Legion runtime (each will ignore options it doesn't recognize). + +Currently, the solver reads the following options: + +* `-i .json`: Provide a case configuration file, to be run as an additional sample. See [src/config_schema.lua](src/config_schema.lua) for documentation on the available options (`Config` struct). +* `-o `: Specify an output directory for the executable (default is current directory). + +Setup (local Ubuntu machine w/o GPU) +==================================== + +### Add to shell startup + +``` +# Build config +export CC=gcc +export CXX=g++ +# Path setup +export LEGION_DIR=??? +export HDF_ROOT="$LEGION_DIR"/language/hdf/install +export HTR_DIR=??? +``` + +### Download software + +``` +git clone -b htr-release https://gitlab.com/mario.direnzo/legion.git "$LEGION_DIR" +git clone https://github.com/stanfordhpccenter/HTR-solver.git "$HTR_DIR" +``` + +### Install Legion + +``` +cd "$LEGION_DIR"/language +USE_CUDA=0 USE_OPENMP=1 USE_GASNET=0 USE_HDF=1 MAX_DIM=4 scripts/setup_env.py --llvm-version 38 --terra-url 'https://github.com/StanfordLegion/terra.git' --terra-branch 'luajit2.1' +``` + +### Compile the HTR solver + +``` +cd "$HTR_DIR"/src +USE_CUDA=0 make +``` + +Setup (Sapling @ Stanford) +========================== + +### Add to shell startup + +``` +# Module loads +module load mpi/openmpi/1.8.2 +module load cuda/7.0 +# Build config +export CONDUIT=ibv +export CC=gcc-4.9 +export CXX=g++-4.9 +# Path setup +export LEGION_DIR=??? +export HDF_ROOT="$LEGION_DIR"/language/hdf/install +export HTR_DIR=??? +export SCRATCH=/scratch/oldhome/`whoami` +# CUDA config +export CUDA_HOME=/usr/local/cuda-7.0 +export CUDA="$CUDA_HOME" +export GPU_ARCH=fermi +``` + +### Download software + +``` +git clone -b htr-release https://gitlab.com/mario.direnzo/legion.git "$LEGION_DIR" +git clone https://github.com/stanfordhpccenter/HTR-solver.git "$HTR_DIR" +``` + +### Install Legion + +``` +cd "$LEGION_DIR"/language +USE_CUDA=1 USE_OPENMP=1 USE_GASNET=1 USE_HDF=1 MAX_DIM=4 scripts/setup_env.py --llvm-version 35 --terra-url 'https://github.com/StanfordLegion/terra.git' --terra-branch 'luajit2.1' +``` + +### Compile the HTR solver + +``` +cd "$HTR_DIR"/src +make +``` + +Setup (Certainty @ Stanford) +============================ + +### Add to shell startup + +``` +# Module loads +module load gnu7/7.2.0 +module load cuda/8.0 +module load openmpi3/3.0.0 +# Build config +export CONDUIT=ibv +export CC=gcc +export CXX=g++ +# Path setup +export LEGION_DIR=??? +export HDF_ROOT="$LEGION_DIR"/language/hdf/install +export HTR_DIR=??? +# CUDA config +export CUDA_HOME=/usr/local/cuda-8.0 +export CUDA="$CUDA_HOME" +export GPU_ARCH=fermi +``` + +### Download software + +``` +git clone -b htr-release https://gitlab.com/mario.direnzo/legion.git "$LEGION_DIR" +git clone https://github.com/stanfordhpccenter/HTR-solver.git "$HTR_DIR" +``` + +### Install Legion + +``` +# Disable PMI in GASnet, because the PMI library is missing on Certainty. +git clone https://github.com/StanfordLegion/gasnet.git $LEGION_DIR/language/gasnet +cd "$LEGION_DIR"/language/gasnet +sed -i 's|$(GASNET_VERSION)/configure --prefix=|$(GASNET_VERSION)/configure --disable-pmi --prefix=|g' Makefile +make +# Rest of compilation as normal +cd "$LEGION_DIR"/language +USE_CUDA=1 USE_OPENMP=1 USE_GASNET=1 USE_HDF=1 MAX_DIM=4 scripts/setup_env.py --llvm-version 38 --terra-url 'https://github.com/StanfordLegion/terra.git' --terra-branch 'luajit2.1' +``` + +### Compile the HTR solver + +``` +cd "$HTR_DIR"/src +make +``` + +Setup (Quartz @ LLNL) +============================ + +### Add to shell startup + +``` +# Module loads +module load gcc/4.9.3 +module load openmpi/2.0.0 +module load python +module load paraview/5.4 +# Build config +export CC=gcc +export CXX=g++ +# Path setup +export LEGION_DIR=??? +export HDF_ROOT="$LEGION_DIR"/language/hdf/install +export HTR_DIR=??? +export SCRATCH=??? +``` + +### Download software + +``` +git clone -b htr-release https://gitlab.com/mario.direnzo/legion.git "$LEGION_DIR" +git clone https://github.com/stanfordhpccenter/HTR-solver.git "$HTR_DIR" +``` + +### Install Legion + +``` +cd "$LEGION_DIR"/language +USE_CUDA=0 USE_OPENMP=1 USE_GASNET=1 USE_HDF=1 MAX_DIM=4 scripts/setup_env.py --llvm-version 38 --terra-url 'https://github.com/StanfordLegion/terra.git' --terra-branch 'luajit2.1' +``` + +### Compile the HTR solver + +``` +cd "$HTR_DIR"/src +make +``` + +Setup (Lassen @ LLNL) +============================ + +### Add to shell startup + +``` +# Module loads +module load gcc/7.3.1 +module load cuda/9.2.148 +module load python +# Build config +export CC=gcc +export CXX=g++ +export CONDUIT=ibv +# Path setup +export LEGION_DIR=??? +export HDF_ROOT="$LEGION_DIR"/language/hdf/install +export HTR_DIR=??? +export SCRATCH=??? +# CUDA config +export CUDA_HOME=/usr/tce/packages/cuda/cuda-9.2.148 +export CUDA="$CUDA_HOME" +export GPU_ARCH=volta + +export USE_CUDA=1 +export USE_OPENMP=1 +export USE_GASNET=1 +export USE_HDF=1 +export MAX_DIM=4 +export TERRA_USE_PUC_LUA=1 + +``` + +### Download software + +``` +git clone -b htr-release https://gitlab.com/mario.direnzo/legion.git "$LEGION_DIR" +git clone https://github.com/stanfordhpccenter/HTR-solver.git "$HTR_DIR" +``` + +### Install Legion + +``` +cd "$LEGION_DIR"/language +lalloc 1 scripts/setup_env.py --llvm-version 38 --terra-branch 'puc_lua_master' +``` + +### Compile the HTR solver + +``` +cd "$HTR_DIR"/src +lalloc 1 -W 120 make +``` diff --git a/scripts/compare_hdf.py b/scripts/compare_hdf.py new file mode 100755 index 0000000..de34601 --- /dev/null +++ b/scripts/compare_hdf.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python2 + +import argparse +import h5py +import itertools +import numpy as np + +parser = argparse.ArgumentParser() +parser.add_argument('f1') +parser.add_argument('f2') +args = parser.parse_args() + +f1 = h5py.File(args.f1, 'r') +f2 = h5py.File(args.f2, 'r') + +for fld in f1: + assert fld in f2 and f1[fld].shape == f2[fld].shape +for fld in f2: + assert fld in f1 and f1[fld].shape == f2[fld].shape +for fld in f1: + diff = np.absolute(f1[fld][:] - f2[fld][:]) + max_diff = np.max(diff) + max_loc = np.unravel_index(np.argmax(diff), diff.shape) + print('%s: max diff = %s at %s' % (fld, max_diff, max_loc)) + +f2.close() +f1.close() diff --git a/scripts/convert_output_for_viz.py b/scripts/convert_output_for_viz.py new file mode 100755 index 0000000..bd4ad5d --- /dev/null +++ b/scripts/convert_output_for_viz.py @@ -0,0 +1,81 @@ +import os +import shutil +import sys +import subprocess +import argparse +import glob + +parser = argparse.ArgumentParser() +#parser.add_argument('-s', '--section', choices=['1','2'], +# help='which section to visualize (if multi-section sim)') +parser.add_argument('json_file', + help='original simulation configuration file') +parser.add_argument('--sampledir', nargs='?', const='.', default='.', + help='directory with all the simulation output') +args = parser.parse_args() + +sample_dir = args.sampledir +merge_dir = os.path.join(sample_dir,'merged_data') +out_dir = os.path.join(sample_dir,'viz_ready_data') + +print('##############################################################################') +print(' Merge parallel HDF files') +print('##############################################################################') + +if not os.path.exists(merge_dir): + os.makedirs(merge_dir) + +snapshots = glob.glob(os.path.join(sample_dir,"fluid_iter*")) + +for i, sn in enumerate(snapshots): + filename = sn.split('/')[-1]+".hdf" + + if not(os.path.isfile(os.path.join(merge_dir,filename))): + tiles = glob.glob(os.path.join(sn,"*hdf")) + merge_fluid_command = 'python {} {}'.format( + os.path.expandvars('$HTR_DIR/scripts/makeVirtualLayout.py'), + " ".join(str(x) for x in tiles)) + try: + subprocess.call(merge_fluid_command, shell=True) + except OSError: + print("Failed command: {}".format(merge_fluid_command)) + else: + print("Successfully ran command: {}".format(merge_fluid_command)) + + # Move the generated files to the output directory + try: + subprocess.call('mv *.hdf {}'.format(os.path.join(merge_dir, filename)), shell=True) + except OSError: + print("Failed to move hdf file to: {}".format(merge_dir)) + sys.exit() + else: + print("Successfully moved hdf file to: {}".format(merge_dir)) + +print('##############################################################################') +print(' Generate fluid viz files ') +print('##############################################################################') + +if not os.path.exists(out_dir): + os.makedirs(out_dir) + +viz_fluid_command = 'python {} {} {}'.format(os.path.expandvars('$HTR_DIR/scripts/viz_fluid.py'), + args.json_file, + os.path.join(merge_dir,'*.hdf')) +try: + subprocess.call(viz_fluid_command, shell=True) +except OSError: + print("Failed command: {}".format(viz_fluid_command)) + sys.exit() +else: + print("Successfully ran command: {}".format(viz_fluid_command)) + +# Move the generated files to the output directory +try: + subprocess.call('mv out_fluid.xmf out*.hdf {}'.format(out_dir), shell=True) +except OSError: + print("Failed to move fluid xmf and hdf files to: {}".format(out_dir)) + sys.exit() +else: + print("Successfully moved fluid xmf and hdf files to: {}".format(out_dir)) + +print('') diff --git a/scripts/interpolate.py b/scripts/interpolate.py new file mode 100755 index 0000000..066b8a3 --- /dev/null +++ b/scripts/interpolate.py @@ -0,0 +1,225 @@ +#!/usr/bin/env python2 + +import argparse +import h5py +import json +import sys +import os +import re +import numpy as np +from joblib import Parallel, delayed + +# load local modules +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen + +parser = argparse.ArgumentParser() +parser.add_argument('json_file', type=argparse.FileType('r'), + help='original simulation configuration file') +parser.add_argument('--np', nargs='?', default=1, type=int, + help='number of cores') +parser.add_argument('--outputdir', nargs='?', const='.', default='.', + help='directory where output will be saved') +parser.add_argument('--inputfile', nargs='?', const='.', default='.', + help='input file saved') +parser.add_argument('--Xper', nargs='?', default=False, const=True, + help="Activate periodic grid in X-direction.") +parser.add_argument('--Yper', nargs='?', default=False, const=True, + help="Activate periodic grid in Y-direction.") +parser.add_argument('--Zper', nargs='?', default=False, const=True, + help="Activate periodic grid in Z-direction.") +parser.add_argument('--Xscale', nargs=1, default=1.0, type=float, + help="Activate grid scaling in X-direction.") +parser.add_argument('--Yscale', nargs=1, default=1.0, type=float, + help="Activate grid scaling in Y-direction.") +parser.add_argument('--Zscale', nargs=1, default=1.0, type=float, + help="Activate grid scaling in Z-direction.") +args = parser.parse_args() + +############################################################################## +# Linear interpolation # +############################################################################## + +def interp(values, i, j, k, w1, w2, w3): + return(values[i-1,j-1,k-1] * w1 * w2 * w3 + + values[i-1,j-1,k ] * w1 * w2 * (1.0-w3) + + values[i-1,j ,k-1] * w1 * (1.0-w2) * w3 + + values[i ,j-1,k-1] * (1.0-w1) * w2 * w3 + + values[i-1,j ,k ] * w1 * (1.0-w2) * (1.0-w3) + + values[i ,j-1,k ] * (1.0-w1) * w2 * (1.0-w3) + + values[i ,j ,k-1] * (1.0-w1) * (1.0-w2) * w3 + + values[i ,j ,k ] * (1.0-w1) * (1.0-w2) * (1.0-w3)) + +############################################################################## +# Read Input files # +############################################################################## + +fin = h5py.File(args.inputfile, 'r') +config = json.load(args.json_file) + +xIn = fin["centerCoordinates"][:][0,0,:,0]*args.Xscale +yIn = fin["centerCoordinates"][:][0,:,0,1]*args.Yscale +zIn = fin["centerCoordinates"][:][:,0,0,2]*args.Zscale + +velocityIn = fin["velocity"][:] +pressureIn = fin["pressure"][:] +rhoIn = fin["rho"][:] +temperatureIn = fin["temperature"][:] +MolarFracsIn = fin["MolarFracs"][:] +temperatureIn = fin["temperature"][:] + +channelForcing = fin.attrs["channelForcing"] + +nSpec = MolarFracsIn.shape[3] + +############################################################################## +# New Generate Grid # +############################################################################## + +xGrid, dx = gridGen.GetGrid(config["Grid"]["origin"][0], + config["Grid"]["xWidth"], + config["Grid"]["xNum"], + config["Grid"]["xType"], + config["Grid"]["yStretching"], + args.Xper) + +yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + config["Grid"]["yWidth"], + config["Grid"]["yNum"], + config["Grid"]["yType"], + config["Grid"]["yStretching"], + args.Yper) + +zGrid, dz = gridGen.GetGrid(config["Grid"]["origin"][2], + config["Grid"]["zWidth"], + config["Grid"]["zNum"], + config["Grid"]["zType"], + config["Grid"]["zStretching"], + args.Zper) + +# Load mapping +Ntiles = config["Mapping"]["tiles"] + +assert config["Grid"]["xNum"] % Ntiles[0] == 0 +assert config["Grid"]["yNum"] % Ntiles[1] == 0 +assert config["Grid"]["zNum"] % Ntiles[2] == 0 + +NxTile = int(config["Grid"]["xNum"]/Ntiles[0]) +NyTile = int(config["Grid"]["yNum"]/Ntiles[1]) +NzTile = int(config["Grid"]["zNum"]/Ntiles[2]) + +halo = [int(0.5*(xGrid.size-config["Grid"]["xNum"])), + int(0.5*(yGrid.size-config["Grid"]["yNum"])), + int(0.5*(zGrid.size-config["Grid"]["zNum"]))] + +############################################################################## +# Produce restart file # +############################################################################## +if not os.path.exists(args.outputdir): + os.makedirs(args.outputdir) + +def writeTile(xt, yt, zt): + lo_bound = [(xt )*NxTile +halo[0], (yt )*NyTile +halo[1], (zt )*NzTile +halo[2]] + hi_bound = [(xt+1)*NxTile-1+halo[0], (yt+1)*NyTile-1+halo[1], (zt+1)*NzTile-1+halo[2]] + if (xt == 0): lo_bound[0] -= halo[0] + if (yt == 0): lo_bound[1] -= halo[1] + if (zt == 0): lo_bound[2] -= halo[2] + if (xt == Ntiles[0]-1): hi_bound[0] += halo[0] + if (yt == Ntiles[1]-1): hi_bound[1] += halo[1] + if (zt == Ntiles[2]-1): hi_bound[2] += halo[2] + filename = ('%s,%s,%s-%s,%s,%s.hdf' + % (lo_bound[0], lo_bound[1], lo_bound[2], + hi_bound[0], hi_bound[1], hi_bound[2])) + print("Working on: ", filename) + + shape = [hi_bound[2] - lo_bound[2] +1, + hi_bound[1] - lo_bound[1] +1, + hi_bound[0] - lo_bound[0] +1] + + centerCoordinates = np.ndarray(shape, dtype=np.dtype("(3,)f8")) + cellWidth = np.ndarray(shape, dtype=np.dtype("(3,)f8")) + rho = np.ndarray(shape) + pressure = np.ndarray(shape) + temperature = np.ndarray(shape) + MolarFracs = np.ndarray(shape, dtype=np.dtype("("+str(nSpec)+",)f8")) + velocity = np.ndarray(shape, dtype=np.dtype("(3,)f8")) + dudtBoundary = np.ndarray(shape) + dTdtBoundary = np.ndarray(shape) + + for (k,kc) in enumerate(centerCoordinates): + kIn = np.searchsorted(zIn, zGrid[k+lo_bound[2]]) + if (kIn == 0): + kIn = 1 + zweight = 0.0 + elif (kIn > zIn.size-1): + kIn = zIn.size-1 + zweight = 1.0 + else: + zweight = (zIn[kIn] - zGrid[k+lo_bound[2]])/(zIn[kIn] - zIn[kIn-1]) + + for (j,jc) in enumerate(kc): + jIn = np.searchsorted(yIn, yGrid[j+lo_bound[1]]) + if (jIn == 0): + jIn = 1 + yweight = 0.0 + elif (jIn > yIn.size-1): + jIn = yIn.size-1 + yweight = 1.0 + else: + yweight = (yIn[jIn] - yGrid[j+lo_bound[1]])/(yIn[jIn] - yIn[jIn-1]) + + for (i,ic) in enumerate(jc): + iIn = np.searchsorted(xIn, xGrid[i+lo_bound[0]]) + if (iIn == 0): + iIn = 1 + xweight = 0.0 + elif (iIn > xIn.size-1): + iIn = xIn.size-1 + xweight = 1.0 + else: + xweight = (xIn[iIn] - xGrid[i+lo_bound[0]])/(xIn[iIn] - xIn[iIn-1]) + + centerCoordinates[k,j,i] = [xGrid[i+lo_bound[0]], yGrid[j+lo_bound[1]], zGrid[k+lo_bound[2]]] + cellWidth [k,j,i] = [ dx[i+lo_bound[0]], dy[j+lo_bound[1]], dz[k+lo_bound[2]]] + temperature [k,j,i] = interp(temperatureIn, kIn, jIn, iIn, zweight, yweight, xweight) + pressure [k,j,i] = interp( pressureIn, kIn, jIn, iIn, zweight, yweight, xweight) + rho [k,j,i] = interp( rhoIn, kIn, jIn, iIn, zweight, yweight, xweight) + for sp in range(nSpec): + MolarFracs [k,j,i,sp] = interp(MolarFracsIn[:,:,:,sp], kIn, jIn, iIn, zweight, yweight, xweight) + velocity [k,j,i] = [ interp(velocityIn[:,:,:,0], kIn, jIn, iIn, zweight, yweight, xweight), + interp(velocityIn[:,:,:,1], kIn, jIn, iIn, zweight, yweight, xweight), + interp(velocityIn[:,:,:,2], kIn, jIn, iIn, zweight, yweight, xweight)] + dudtBoundary [k,j,i] = 0.0 + dTdtBoundary [k,j,i] = 0.0 + + with h5py.File(os.path.join(args.outputdir, filename), 'w') as fout: + fout.attrs.create("SpeciesNames", ["MIX".encode()], dtype="S20") + fout.attrs.create("timeStep", 0) + fout.attrs.create("simTime", 0.0) + fout.attrs.create("channelForcing", channelForcing) + + fout.create_dataset("centerCoordinates", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("cellWidth", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("rho", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("pressure", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("temperature", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("MolarFracs", shape=shape, dtype = np.dtype("("+str(nSpec)+",)f8")) + fout.create_dataset("velocity", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("dudtBoundary", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("dTdtBoundary", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("velocity_old_NSCBC", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("temperature_old_NSCBC", shape=shape, dtype = np.dtype("f8")) + + fout["centerCoordinates"][:] = centerCoordinates + fout["cellWidth"][:] = cellWidth + fout["rho"][:] = rho + fout["pressure"][:] = pressure + fout["temperature"][:] = temperature + fout["MolarFracs"][:] = MolarFracs + fout["velocity"][:] = velocity + fout["dudtBoundary"][:] = dudtBoundary + fout["dTdtBoundary"][:] = dTdtBoundary + fout["velocity_old_NSCBC"][:] = velocity + fout["temperature_old_NSCBC"][:] = temperature + +Parallel(n_jobs=args.np)(delayed(writeTile)(x, y, z) for x, y, z in np.ndindex((Ntiles[0], Ntiles[1], Ntiles[2]))) diff --git a/scripts/makeVirtualLayout.py b/scripts/makeVirtualLayout.py new file mode 100755 index 0000000..a6b2590 --- /dev/null +++ b/scripts/makeVirtualLayout.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python2 + +import argparse +import h5py +import os +import re + +parser = argparse.ArgumentParser() +parser.add_argument('hdf_file', nargs='+') +args = parser.parse_args() + +# Read input metadata +num_files = len(args.hdf_file) +lo_bound = [] # array(num_files, array(3,int)) +hi_bound = [] # array(num_files, array(3,int)) +for i in range(num_files): + base = os.path.basename(args.hdf_file[i]) + pat = r'([0-9]+),([0-9]+),([0-9]+)-([0-9]+),([0-9]+),([0-9]+).hdf' + m = re.match(pat, base) + assert(m is not None) + lo_bound.append([int(m.group(1)), int(m.group(2)), int(m.group(3))]) + hi_bound.append([int(m.group(4)), int(m.group(5)), int(m.group(6))]) + +# Sanity checks +all_lo = [None, None, None] # array(3, array(num_files,int)) +all_hi = [None, None, None] # array(3, array(num_files,int)) +for k in range(3): + all_lo[k] = sorted(set([c[k] for c in lo_bound])) + all_hi[k] = sorted(set([c[k] for c in hi_bound])) + assert len(all_lo[k]) == len(all_hi[k]) + for (prev_hi,next_lo) in zip(all_hi[k][:-1],all_lo[k][1:]): + assert prev_hi == next_lo - 1 +for (x_lo,x_hi) in zip(all_lo[0],all_hi[0]): + for (y_lo,y_hi) in zip(all_lo[1],all_hi[1]): + for (z_lo,z_hi) in zip(all_lo[2],all_hi[2]): + found = False + for i in range(num_files): + if (lo_bound[i][0] == x_lo and hi_bound[i][0] == x_hi and + lo_bound[i][1] == y_lo and hi_bound[i][1] == y_hi and + lo_bound[i][2] == z_lo and hi_bound[i][2] == z_hi): + found = True + break + assert found + +# Combine actual data into output HDF file +# NOTE: The X and Z dimensions are flipped in the actual data, because Legion +# dumps data in column-major order. +shape = (all_hi[2][-1] - all_lo[2][0] + 1, + all_hi[1][-1] - all_lo[1][0] + 1, + all_hi[0][-1] - all_lo[0][0] + 1) +name = ('%s,%s,%s-%s,%s,%s.hdf' + % (all_lo[0][0], all_lo[1][0], all_lo[2][0], + all_hi[0][-1], all_hi[1][-1], all_hi[2][-1])) + +# Generate the virtual layout +layout = [] +with h5py.File(name, 'w') as fout: + with h5py.File(args.hdf_file[0], 'r') as fin: + for key,val in fin.attrs.items(): + fout.attrs.create(key, val) + for fld in fin: + layout.append(h5py.VirtualLayout(shape=shape, dtype=fin[fld].dtype)) + + for i in range(num_files): + with h5py.File(args.hdf_file[i], 'r') as fin: + for key,val in fin.attrs.items(): + assert (val == fin.attrs.get(key)).all() + for (j,fld) in enumerate(fin): + vsource = h5py.VirtualSource(os.path.abspath(args.hdf_file[i]), fld, shape=fin[fld].shape) + layout[j][lo_bound[i][2]:hi_bound[i][2]+1, + lo_bound[i][1]:hi_bound[i][1]+1, + lo_bound[i][0]:hi_bound[i][0]+1] = vsource + + with h5py.File(args.hdf_file[0], 'r') as fin: + for (i,fld) in enumerate(fin): + fout.create_virtual_dataset(fld, layout[i]) + diff --git a/scripts/merge.py b/scripts/merge.py new file mode 100755 index 0000000..95aaffd --- /dev/null +++ b/scripts/merge.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python2 + +import argparse +import h5py +import os +import re + +parser = argparse.ArgumentParser() +parser.add_argument('hdf_file', nargs='+') +args = parser.parse_args() + +# Read input metadata +num_files = len(args.hdf_file) +lo_bound = [] # array(num_files, array(3,int)) +hi_bound = [] # array(num_files, array(3,int)) +for i in range(num_files): + base = os.path.basename(args.hdf_file[i]) + pat = r'([0-9]+),([0-9]+),([0-9]+)-([0-9]+),([0-9]+),([0-9]+).hdf' + m = re.match(pat, base) + assert(m is not None) + lo_bound.append([int(m.group(1)), int(m.group(2)), int(m.group(3))]) + hi_bound.append([int(m.group(4)), int(m.group(5)), int(m.group(6))]) + +# Sanity checks +all_lo = [None, None, None] # array(3, array(num_files,int)) +all_hi = [None, None, None] # array(3, array(num_files,int)) +for k in range(3): + all_lo[k] = sorted(set([c[k] for c in lo_bound])) + all_hi[k] = sorted(set([c[k] for c in hi_bound])) + assert len(all_lo[k]) == len(all_hi[k]) + for (prev_hi,next_lo) in zip(all_hi[k][:-1],all_lo[k][1:]): + assert prev_hi == next_lo - 1 +for (x_lo,x_hi) in zip(all_lo[0],all_hi[0]): + for (y_lo,y_hi) in zip(all_lo[1],all_hi[1]): + for (z_lo,z_hi) in zip(all_lo[2],all_hi[2]): + found = False + for i in range(num_files): + if (lo_bound[i][0] == x_lo and hi_bound[i][0] == x_hi and + lo_bound[i][1] == y_lo and hi_bound[i][1] == y_hi and + lo_bound[i][2] == z_lo and hi_bound[i][2] == z_hi): + found = True + break + assert found + +# Combine actual data into output HDF file +# NOTE: The X and Z dimensions are flipped in the actual data, because Legion +# dumps data in column-major order. +shape = (all_hi[2][-1] - all_lo[2][0] + 1, + all_hi[1][-1] - all_lo[1][0] + 1, + all_hi[0][-1] - all_lo[0][0] + 1) +name = ('%s,%s,%s-%s,%s,%s.hdf' + % (all_lo[0][0], all_lo[1][0], all_lo[2][0], + all_hi[0][-1], all_hi[1][-1], all_hi[2][-1])) +with h5py.File(name, 'w') as fout: + with h5py.File(args.hdf_file[0], 'r') as fin: + for key,val in fin.attrs.items(): + fout.attrs.create(key, val) + for fld in fin: + fout.create_dataset(fld, shape, dtype=fin[fld].dtype) + for i in range(num_files): + with h5py.File(args.hdf_file[i], 'r') as fin: + for key,val in fin.attrs.items(): + assert (val == fin.attrs.get(key)).all() + for fld in fout: + fout[fld][lo_bound[i][2]:hi_bound[i][2]+1, + lo_bound[i][1]:hi_bound[i][1]+1, + lo_bound[i][0]:hi_bound[i][0]+1] = fin[fld][:] + diff --git a/scripts/modules/Averages.py b/scripts/modules/Averages.py new file mode 100755 index 0000000..0a44989 --- /dev/null +++ b/scripts/modules/Averages.py @@ -0,0 +1,210 @@ +#!/usr/bin/env python2 + +import numpy as np +import h5py + +class avg: + def __init__(self, filename, symmetric = False): + + f = h5py.File(filename, "r") + + # Get the data + weight = f["weight"][:][0,:] + self.pressure_avg = f["pressure_avg"][:][0,:] + self.pressure_rms = f["pressure_rms"][:][0,:] + self.temperature_avg = f["temperature_avg"][:][0,:] + self.temperature_rms = f["temperature_rms"][:][0,:] + self.MolarFracs_avg = f["MolarFracs_avg"][:][0,:,:] + self.MolarFracs_rms = f["MolarFracs_rms"][:][0,:,:] + self.velocity_avg = f["velocity_avg"][:][0,:,:] + self.velocity_rms = f["velocity_rms"][:][0,:,:] + self.velocity_rey = f["velocity_rey"][:][0,:,:] + + self.rho_avg = f["rho_avg"][:][0,:] + self.rho_rms = f["rho_rms"][:][0,:] + self.mu_avg = f["mu_avg"][:][0,:] + self.mu_rms = f["mu_rms"][:][0,:] + self.lam_avg = f["lam_avg"][:][0,:] + self.lam_rms = f["lam_rms"][:][0,:] + self.Di_avg = f["Di_avg"][:][0,:,:] + self.Di_rms = f["Di_rms"][:][0,:,:] + self.SoS_avg = f["SoS_avg"][:][0,:] + self.SoS_rms = f["SoS_rms"][:][0,:] + + self.temperature_favg = f["temperature_favg"][:][0,:] + self.temperature_frms = f["temperature_frms"][:][0,:] + self.MolarFracs_favg = f["MolarFracs_favg"][:][0,:,:] + self.MolarFracs_frms = f["MolarFracs_frms"][:][0,:,:] + self.velocity_favg = f["velocity_favg"][:][0,:,:] + self.velocity_frms = f["velocity_frms"][:][0,:,:] + self.velocity_frey = f["velocity_frey"][:][0,:,:] + + self.rhoUUv = f["rhoUUv"][:][0,:,:] + self.Up = f["Up"][:][0,:,:] + self.tau = f["tau"][:][0,:,:] + self.utau_y = f["utau_y"][:][0,:,:] + self.tauGradU = f["tauGradU"][:][0,:,:] + self.pGradU = f["pGradU"][:][0,:,:] + + self.q = f["q"][:][0,:,:] + + self.Pr = f["Pr"][:][0,:] + self.Pr_rms = f["Pr_rms"][:][0,:] + self.Ec = f["Ec"][:][0,:] + self.Ec_rms = f["Ec_rms"][:][0,:] + + self.SpeciesNames = f.attrs.get("SpeciesNames") + + if symmetric : self.avgYSymmetric() + + # Complete average process + self.pressure_avg /= weight + self.pressure_rms /= weight + self.temperature_avg /= weight + self.temperature_rms /= weight + for i in range(3): + self.velocity_avg[:,i] /= weight + self.velocity_rms[:,i] /= weight + self.velocity_rey[:,i] /= weight + + for isp, sp in enumerate(self.SpeciesNames): + self.MolarFracs_avg[:,isp] /= weight + self.MolarFracs_rms[:,isp] /= weight + + #self.pressure_rms = np.sqrt(np.maximum( self.pressure_rms - self.pressure_avg**2, 0.0)) + #self.temperature_rms = np.sqrt(np.maximum(self.temperature_rms - self.temperature_avg**2, 0.0)) + #self.MolarFracs_rms = np.sqrt(np.maximum( self.MolarFracs_rms - self.MolarFracs_avg**2, 0.0)) + #self.velocity_rms = np.sqrt(np.maximum( self.velocity_rms - self.velocity_avg**2, 0.0)) + self.pressure_rms = self.pressure_rms - self.pressure_avg**2 + self.temperature_rms = self.temperature_rms - self.temperature_avg**2 + self.MolarFracs_rms = self.MolarFracs_rms - self.MolarFracs_avg**2 + self.velocity_rms = self.velocity_rms - self.velocity_avg**2 + + self.rho_avg /= weight + self.rho_rms /= weight + self.mu_avg /= weight + self.mu_rms /= weight + self.lam_avg /= weight + self.lam_rms /= weight + self.SoS_avg /= weight + self.SoS_rms /= weight + for isp, sp in enumerate(self.SpeciesNames): + self.Di_avg[:,isp] /= weight + self.Di_rms[:,isp] /= weight + + self.mu_rms = np.sqrt(np.maximum( self.mu_rms - self.mu_avg**2, 0.0)) + self.lam_rms = np.sqrt(np.maximum(self.lam_rms - self.lam_avg**2, 0.0)) + self.Di_rms = np.sqrt(np.maximum( self.Di_rms - self.Di_avg**2, 0.0)) + self.SoS_rms = np.sqrt(np.maximum(self.SoS_rms - self.SoS_avg**2, 0.0)) + + self.temperature_favg /= weight + self.temperature_frms /= weight + for i in range(3): + self.velocity_favg[:,i] /= weight + self.velocity_frms[:,i] /= weight + self.velocity_frey[:,i] /= weight + + for isp, sp in enumerate(self.SpeciesNames): + self.MolarFracs_favg[:,isp] /= weight + self.MolarFracs_frms[:,isp] /= weight + + #self.temperature_frms = np.sqrt(np.maximum(self.temperature_frms - self.temperature_favg**2, 0.0)) + #self.MolarFracs_frms = np.sqrt(np.maximum( self.MolarFracs_frms - self.MolarFracs_favg**2, 0.0)) + #self.velocity_frms = np.sqrt(np.maximum( self.velocity_rms - self.velocity_avg**2, 0.0)) + self.temperature_frms = self.temperature_frms - self.temperature_favg**2//self.rho_avg[:] + for isp, sp in enumerate(self.SpeciesNames): + self.MolarFracs_frms[:,isp] = self.MolarFracs_frms[:,isp] - self.MolarFracs_favg[:,isp]**2/self.rho_avg[:] + for i in range(3): + self.velocity_frms[:,i] = self.velocity_frms[:,i] - self.velocity_favg[:,i]**2/self.rho_avg[:] + + for i in range(3): + self.rhoUUv[:,i] /= weight + self.Up[:,i] /= weight + self.utau_y[:,i] /= weight + self.tauGradU[:,i] /= weight + self.pGradU[:,i] /= weight + + for i in range(6): + self.tau[:,i] /= weight + + for i in range(3): + self.q[:,i] /= weight + + self.Pr /= weight + self.Pr_rms /= weight + self.Ec /= weight + self.Ec_rms /= weight + + def avgYSymmetric(self): + self.pressure_avg = 0.5*(self.pressure_avg + self.pressure_avg[::-1]) + self.pressure_rms = 0.5*(self.pressure_rms + self.pressure_rms[::-1]) + self.temperature_avg = 0.5*(self.temperature_avg + self.temperature_avg[::-1]) + self.temperature_rms = 0.5*(self.temperature_rms + self.temperature_rms[::-1]) + for isp, sp in enumerate(self.SpeciesNames): + self.MolarFracs_avg[:, isp] = 0.5*(self.MolarFracs_avg[:, isp] + self.MolarFracs_avg[::-1, isp]) + self.MolarFracs_rms[:, isp] = 0.5*(self.MolarFracs_rms[:, isp] + self.MolarFracs_rms[::-1, isp]) + self.velocity_avg[:,0] = 0.5*(self.velocity_avg[:,0] + self.velocity_avg[::-1,0]) + self.velocity_avg[:,1] = 0.5*(self.velocity_avg[:,1] - self.velocity_avg[::-1,1]) + self.velocity_avg[:,2] = 0.5*(self.velocity_avg[:,2] + self.velocity_avg[::-1,2]) + self.velocity_rms = 0.5*(self.velocity_rms[:] + self.velocity_rms[::-1]) + self.velocity_rey[:,0] = 0.5*(self.velocity_rey[:,0] - self.velocity_rey[::-1,0]) + self.velocity_rey[:,1] = 0.5*(self.velocity_rey[:,1] + self.velocity_rey[::-1,1]) + self.velocity_rey[:,2] = 0.5*(self.velocity_rey[:,2] - self.velocity_rey[::-1,2]) + + self.rho_avg = 0.5*(self.rho_avg + self.rho_avg[::-1]) + self.rho_rms = 0.5*(self.rho_rms + self.rho_rms[::-1]) + self.mu_avg = 0.5*(self.mu_avg + self.mu_avg [::-1]) + self.mu_rms = 0.5*(self.mu_rms + self.mu_rms [::-1]) + self.lam_avg = 0.5*(self.lam_avg + self.lam_avg[::-1]) + self.lam_rms = 0.5*(self.lam_rms + self.lam_rms[::-1]) + for isp, sp in enumerate(self.SpeciesNames): + self.Di_avg[:, isp] = 0.5*(self.Di_avg[:, isp] + self.Di_avg [::-1, isp]) + self.Di_rms[:, isp] = 0.5*(self.Di_rms[:, isp] + self.Di_rms [::-1, isp]) + self.SoS_avg = 0.5*(self.SoS_avg + self.SoS_avg[::-1]) + self.SoS_rms = 0.5*(self.SoS_rms + self.SoS_rms[::-1]) + + self.temperature_favg = 0.5*(self.temperature_favg + self.temperature_favg[::-1]) + self.temperature_frms = 0.5*(self.temperature_frms + self.temperature_frms[::-1]) + for isp, sp in enumerate(self.SpeciesNames): + self.MolarFracs_favg[:, isp] = 0.5*(self.MolarFracs_favg[:, isp] + self.MolarFracs_favg[::-1, isp]) + self.MolarFracs_frms[:, isp] = 0.5*(self.MolarFracs_frms[:, isp] + self.MolarFracs_frms[::-1, isp]) + self.velocity_favg[:,0] = 0.5*(self.velocity_favg[:,0] + self.velocity_favg[::-1,0]) + self.velocity_favg[:,1] = 0.5*(self.velocity_favg[:,1] - self.velocity_favg[::-1,1]) + self.velocity_favg[:,2] = 0.5*(self.velocity_favg[:,2] + self.velocity_favg[::-1,2]) + self.velocity_frms = 0.5*(self.velocity_frms[:] + self.velocity_frms[::-1]) + self.velocity_frey[:,0] = 0.5*(self.velocity_frey[:,0] - self.velocity_frey[::-1,0]) + self.velocity_frey[:,1] = 0.5*(self.velocity_frey[:,1] + self.velocity_frey[::-1,1]) + self.velocity_frey[:,2] = 0.5*(self.velocity_frey[:,2] - self.velocity_frey[::-1,2]) + + self.rhoUUv[:,:] = 0.5*( self.rhoUUv[:,:] - self.rhoUUv[::-1,:]) + self.Up[:,0] = 0.5*( self.Up[:,0] + self.Up[::-1,0]) + self.Up[:,1] = 0.5*( self.Up[:,1] - self.Up[::-1,1]) + self.Up[:,2] = 0.5*( self.Up[:,2] + self.Up[::-1,2]) + self.tau[:,0] = 0.5*( self.tau[:,0] + self.tau[::-1,0]) + self.tau[:,1] = 0.5*( self.tau[:,1] + self.tau[::-1,1]) + self.tau[:,2] = 0.5*( self.tau[:,2] + self.tau[::-1,2]) + self.tau[:,3] = 0.5*( self.tau[:,3] - self.tau[::-1,3]) + self.tau[:,4] = 0.5*( self.tau[:,4] - self.tau[::-1,4]) + self.tau[:,5] = 0.5*( self.tau[:,5] + self.tau[::-1,5]) + self.utau_y[:,0] = 0.5*( self.utau_y[:,0] - self.utau_y[::-1,0]) + self.utau_y[:,1] = 0.5*( self.utau_y[:,1] - self.utau_y[::-1,1]) + self.utau_y[:,2] = 0.5*( self.utau_y[:,2] - self.utau_y[::-1,2]) + self.tauGradU[:,0] = 0.5*(self.tauGradU[:,0] + self.tauGradU[::-1,0]) + self.tauGradU[:,1] = 0.5*(self.tauGradU[:,1] + self.tauGradU[::-1,1]) + self.tauGradU[:,2] = 0.5*(self.tauGradU[:,2] + self.tauGradU[::-1,2]) + self.pGradU[:,0] = 0.5*( self.pGradU[:,0] + self.pGradU[::-1,0]) + self.pGradU[:,1] = 0.5*( self.pGradU[:,1] - self.pGradU[::-1,1]) + self.pGradU[:,2] = 0.5*( self.pGradU[:,2] + self.pGradU[::-1,2]) + + self.q[:,0] = 0.5*(self.q[:,0] + self.q[::-1,0]) + self.q[:,1] = 0.5*(self.q[:,1] - self.q[::-1,1]) + self.q[:,2] = 0.5*(self.q[:,2] + self.q[::-1,2]) + + self.Pr = 0.5*(self.Pr + self.Pr ) + self.Pr_rms = 0.5*(self.Pr_rms + self.Pr_rms) + self.Ec = 0.5*(self.Ec + self.Ec ) + self.Ec_rms = 0.5*(self.Ec_rms + self.Ec_rms) + + return + + diff --git a/scripts/modules/ConstPropMix.py b/scripts/modules/ConstPropMix.py new file mode 100755 index 0000000..3a22537 --- /dev/null +++ b/scripts/modules/ConstPropMix.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python2 + +def GetDensity(T, P, config): + return P/(T*config["Flow"]["gasConstant"]) + +def GetViscosity(T, config): + if (config["Flow"]["viscosityModel"] == "Constant"): + viscosity = config["Flow"]["constantVisc"] + elif (config["Flow"]["viscosityModel"] == "PowerLaw"): + viscosity = config["Flow"]["powerlawViscRef"]*(T/config["Flow"]["powerlawTempRef"])**0.7 + elif (config["Flow"]["viscosityModel"] == "Sutherland"): + viscosity = (config["Flow"]["sutherlandViscRef"]*(T/config["Flow"]["sutherlandTempRef"])**1.5)*(config["Flow"]["sutherlandTempRef"]+config["Flow"]["sutherlandSRef"])/(T+config["Flow"]["sutherlandSRef"]) + else: + assert False + return viscosity + diff --git a/scripts/modules/gridGen.py b/scripts/modules/gridGen.py new file mode 100755 index 0000000..2911217 --- /dev/null +++ b/scripts/modules/gridGen.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python2 + +import numpy as np +from scipy.integrate import odeint +from scipy.optimize import fsolve + +############################################################################## +# Compute grid # +############################################################################## +def GetGridFaces(Origin, Width, Num, Type, stretching, dx=1, xswitch=1, switch=1): + if (Type == 'Uniform'): + x = np.linspace(0.0, 1.0, Num+1) + x *= Width + x += Origin + elif (Type == 'TanhMinus'): + x = np.linspace(-1.0, 0.0, Num+1) + x = np.tanh(stretching*x)/np.tanh(stretching) + x = Width*(x+1.0)+Origin + elif (Type == 'TanhPlus'): + x = np.linspace( 0.0, 1.0, Num+1) + x = np.tanh(stretching*x)/np.tanh(stretching) + x = Width*x+Origin + elif (Type == 'GeometricMinus'): + assert dx xswitch: my_dx *= stretch*switch + else : my_dx *= stretch + return x + def objectiveDoubleGeomMinus(Stretching): + x = GenDoubleGeomMinus(Stretching) + return x[Num]-(Width+Origin) + stretch, = fsolve(objectiveDoubleGeomMinus, stretching) + x = GenDoubleGeomMinus(stretch) + return x + +def GetGrid(Origin, Width, Num, Type, stretching, periodic, dx=1, xswitch=1, switch=1): + x = GetGridFaces(Origin, Width, Num, Type, stretching, dx, xswitch, switch) + if periodic: + xc = np.zeros(Num) + dx = np.zeros(Num) + for i in range(0,Num): + xc[i] = 0.5*(x[i+1]+x[i]) + dx[i] = (x[i+1]-x[i]) + else: + xc = np.zeros(Num+2) + dx = np.zeros(Num+2) + for i in range(1,Num+1): + xc[i] = 0.5*(x[i]+x[i-1]) + dx[i] = (x[i]-x[i-1]) + xc[0] = xc[1] - dx[1] + dx[0] = dx[1] + xc[Num+1] = xc[Num] + dx[Num] + dx[Num+1] = dx[Num] + return xc, dx + +def GetGridBL(origin, n1, n2, n3, x1, x2, x3): + nx = n1+n2+n3 + width = x1+x2+x3 + + xf = np.zeros(nx+1) + + xf[n1:n1+n2+1] = GetGridFaces(origin+x1, x2, n2, 'Uniform', 1.0) + xf[0:n1+1] = GetGridFaces(origin, x1, n1, 'GeometricPlus', 1.1, (xf[n1+1]-xf[n1])) + xf[n1+n2:nx+1] = GetGridFaces(origin+x1+x2, x3, n3, "GeometricMinus", 1.1, xf[n1+n2]-xf[n1+n2-1]) + + dx = np.zeros(nx+2) + for i in range(1,nx+1): + dx[i] = xf[i]-xf[i-1] + dx[0] = dx[1] + dx[nx+1] = dx[nx] + + xc = np.zeros(nx+2) + for i in range(1,nx+1): + xc[i] = 0.5*(xf[i-1]+xf[i]) + xc[0] = xc[1] - dx[1] + xc[nx+1] = xc[nx] + dx[nx] + + return xc, dx, nx, width + diff --git a/scripts/viz_fluid.py b/scripts/viz_fluid.py new file mode 100755 index 0000000..dec3908 --- /dev/null +++ b/scripts/viz_fluid.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python2 + +import argparse +import h5py +import itertools +import json + +XMF_HEADER = """ + + + + +""" + +XMF_SOLUTION_HEADER = """ + + +""" + +XMF_FOOTER = """ + + + +""" + +parser = argparse.ArgumentParser() +parser.add_argument('json_file', + help='original simulation configuration file') +parser.add_argument('-s', '--section', choices=['1','2'], + help='which section to visualize (if multi-section sim)') +parser.add_argument('hdf_file', nargs='+', + help='fluid restart file(s) to visualize') +args = parser.parse_args() + +nx = None +ny = None +nz = None + +simTime = {} +for (f, i) in zip(args.hdf_file, itertools.count()): + hdf_in = h5py.File(f, 'r') + # Extract domain size. + if nx is None: + nx = hdf_in['pressure'].shape[0] + ny = hdf_in['pressure'].shape[1] + nz = hdf_in['pressure'].shape[2] + else: + assert nx == hdf_in['pressure'].shape[0] + assert ny == hdf_in['pressure'].shape[1] + assert nz == hdf_in['pressure'].shape[2] + hdf_out = h5py.File('out%010d.hdf' % i, 'w') + # Load attributes + simTime[i] = hdf_in.attrs.get("simTime") + SpeciesNames = hdf_in.attrs.get("SpeciesNames") + # Build face coordinates. + centerCoordinates = hdf_in['centerCoordinates'][:][:,:,:,:] + cellWidth = hdf_in['cellWidth'][:][:,:,:,:] + XFaceCoordinates = [] + for i in range(nx): + XFaceCoordinates.append(centerCoordinates[i,0,0,2]-0.5*cellWidth[i,0,0,2]) + XFaceCoordinates.append(centerCoordinates[nx-1,0,0,2]+0.5*cellWidth[nx-1,0,0,2]) + YFaceCoordinates = [] + for i in range(ny): + YFaceCoordinates.append(centerCoordinates[0,i,0,1]-0.5*cellWidth[0,i,0,1]) + YFaceCoordinates.append(centerCoordinates[0,ny-1,0,1]+0.5*cellWidth[0,ny-1,0,1]) + ZFaceCoordinates = [] + for i in range(nz): + ZFaceCoordinates.append(centerCoordinates[0,0,i,0]-0.5*cellWidth[0,0,i,0]) + ZFaceCoordinates.append(centerCoordinates[0,0,nz-1,0]+0.5*cellWidth[0,0,nz-1,0]) + hdf_out['XFaceCoordinates'] = XFaceCoordinates + hdf_out['YFaceCoordinates'] = YFaceCoordinates + hdf_out['ZFaceCoordinates'] = ZFaceCoordinates + # Copy pressure over. + hdf_out['pressure'] = hdf_in['pressure'][:] + # Parse molar fractions in multiple fields giving the species name. + MolarFracs = hdf_in['MolarFracs'][:][:,:,:,:] + for isp, sp in enumerate(SpeciesNames): + hdf_out['X_'+sp.decode()] = MolarFracs[:,:,:,isp] + # Copy rho over. + hdf_out['rho'] = hdf_in['rho'][:] + # Copy temperature over. + hdf_out['temperature'] = hdf_in['temperature'][:] + # Convert velocity from an XxYxZ matrix of triples to an XxYxZx3 matrix. + hdf_out['velocity'] = hdf_in['velocity'][:][:,:,:,:] + hdf_out.close() + hdf_in.close() + +# NOTE: We flip the X and Z dimensions, because Legion dumps data in +# column-major order. +with open(args.json_file) as json_in: + config = json.load(json_in) + if args.section is not None: + config = config['configs'][int(args.section)-1] + # Compute number of boundary cells on each dimension. + bx = nx - config['Grid']['zNum'] + by = ny - config['Grid']['yNum'] + bz = nz - config['Grid']['xNum'] + assert bx == 0 or bx == 2, 'Expected at most 1-cell boundary' + assert by == 0 or by == 2, 'Expected at most 1-cell boundary' + assert bz == 0 or bz == 2, 'Expected at most 1-cell boundary' + +# NOTE: The XMF format expects grid dimensions in points, not cells, so we have +# to add 1 on each dimension. +with open('out_fluid.xmf', 'w') as xmf_out: + xmf_out.write(XMF_HEADER) + for i in range(len(args.hdf_file)): + xmf_out.write(XMF_SOLUTION_HEADER + .replace('@TIMESTEP','%.8g'% simTime[i]) + .replace('@XPOINTS', '%s' % str(nx+1)) + .replace('@YPOINTS', '%s' % str(ny+1)) + .replace('@ZPOINTS', '%s' % str(nz+1)) + .replace('@CELLS', '%s %s %s' % (nx,ny,nz)) + .replace('@HDF_FILE', 'out%010d.hdf' % i)) + xmf_out.write(XMF_SOLUTION_SCALAR + .replace('@NAME','%s'% 'pressure') + .replace('@CELLS', '%s %s %s' % (nx,ny,nz)) + .replace('@HDF_FILE', 'out%010d.hdf' % i)) + xmf_out.write(XMF_SOLUTION_SCALAR + .replace('@NAME','%s'% 'rho') + .replace('@CELLS', '%s %s %s' % (nx,ny,nz)) + .replace('@HDF_FILE', 'out%010d.hdf' % i)) + xmf_out.write(XMF_SOLUTION_SCALAR + .replace('@NAME','%s'% 'temperature') + .replace('@CELLS', '%s %s %s' % (nx,ny,nz)) + .replace('@HDF_FILE', 'out%010d.hdf' % i)) + for sp in SpeciesNames: + xmf_out.write(XMF_SOLUTION_SCALAR + .replace('@NAME','%s'% 'X_'+sp.decode()) + .replace('@CELLS', '%s %s %s' % (nx,ny,nz)) + .replace('@HDF_FILE', 'out%010d.hdf' % i)) + xmf_out.write(XMF_SOLUTION_VECTOR + .replace('@NAME','%s'% 'velocity') + .replace('@CELLS', '%s %s %s' % (nx,ny,nz)) + .replace('@HDF_FILE', 'out%010d.hdf' % i)) + xmf_out.write(XMF_SOLUTION_FOOTER) + xmf_out.write(XMF_FOOTER) diff --git a/src/AirMix.rg b/src/AirMix.rg new file mode 100644 index 0000000..5ba2609 --- /dev/null +++ b/src/AirMix.rg @@ -0,0 +1,557 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA) local Exports = {} + +-- Utility functions +local C = regentlib.c +local fabs = regentlib.fabs(double) +local pow = regentlib.pow(double) +local sqrt = regentlib.sqrt(double) + +-- Constants + +local ATom = 1e-10 -- Angstrom to meter +local DToCm = 3.33564e-30 -- Debye to Coulomb meter + +local RGAS = 8.3144598 -- [J/(mol K)] +local Na = 6.02214086e23 -- [1/mol] +local kb = 1.38064852e-23 -- [m^2 kg /( s^2 K)] +local PI = 3.1415926535898 + +Exports.nSpec = 5 + +local SPECIES = require 'Species' +local REACTION = (require 'Reaction')(Exports.nSpec, 2, 5) + +struct Exports.Mixture { + nSpec : int + nReac : int + species : SPECIES.Species[5] + reactions : REACTION.Reaction[5] + -- Max an min acceptable temeperatures + TMax : double + TMin : double +} + +__demand(__inline) +task Exports.InitMixture(config : SCHEMA.Config) + var Mix : Exports.Mixture + Mix.nSpec = Exports.nSpec +-------------------------------------- +-- Set Species +-------------------------------------- + -- N2 + var iN2 = 0 + Mix.species[iN2].Name = "N2" + Mix.species[iN2].W = 2*14.0067e-3 + Mix.species[iN2].Geom = 1 + Mix.species[iN2].cpCoeff.TSwitch1 = 1000.0007 + Mix.species[iN2].cpCoeff.TSwitch2 = 6000.0007 + Mix.species[iN2].cpCoeff.TMin = 0200.0000 + Mix.species[iN2].cpCoeff.TMax = 20000.0007 + Mix.species[iN2].cpCoeff.cpH = array( 8.310139160e+08,-6.420733540e+05, 2.020264635e+02,-3.065092046e-02, 2.486903333e-06,-9.705954110e-11, 1.437538881e-15, 4.938707040e+06,-1.672099740e+03 ) + Mix.species[iN2].cpCoeff.cpM = array( 5.877124060e+05,-2.239249073e+03, 6.066949220e+00,-6.139685500e-04, 1.491806679e-07,-1.923105485e-11, 1.061954386e-15, 1.283210415e+04,-1.586640027e+01 ) + Mix.species[iN2].cpCoeff.cpL = array( 2.210371497e+04,-3.818461820e+02, 6.082738360e+00,-8.530914410e-03, 1.384646189e-05,-9.625793620e-09, 2.519705809e-12, 7.108460860e+02,-1.076003744e+01 ) + Mix.species[iN2].DiffCoeff.sigma = 3.621*ATom + Mix.species[iN2].DiffCoeff.kbOveps = 1.0/97.530 + Mix.species[iN2].DiffCoeff.mu = 0.000*DToCm + Mix.species[iN2].DiffCoeff.alpha = 1.760*ATom + Mix.species[iN2].DiffCoeff.Z298 = 4.000 + -- O2 + var iO2 = 1 + Mix.species[iO2].Name = "O2" + Mix.species[iO2].W = 2*15.9994e-3 + Mix.species[iO2].Geom = 1 + Mix.species[iO2].cpCoeff.TSwitch1 = 1000.0007 + Mix.species[iO2].cpCoeff.TSwitch2 = 6000.0007 + Mix.species[iO2].cpCoeff.TMin = 0200.0000 + Mix.species[iO2].cpCoeff.TMax = 20000.0007 + Mix.species[iO2].cpCoeff.cpH = array( 4.975294300e+08,-2.866106874e+05, 6.690352250e+01,-6.169959020e-03, 3.016396027e-07,-7.421416600e-12, 7.278175770e-17, 2.293554027e+06,-5.530621610e+02 ) + Mix.species[iO2].cpCoeff.cpM = array(-1.037939022e+06, 2.344830282e+03, 1.819732036e+00, 1.267847582e-03,-2.188067988e-07, 2.053719572e-11,-8.193467050e-16,-1.689010929e+04, 1.738716506e+01 ) + Mix.species[iO2].cpCoeff.cpL = array(-3.425563420e+04, 4.847000970e+02, 1.119010961e+00, 4.293889240e-03,-6.836300520e-07,-2.023372700e-09, 1.039040018e-12,-3.391454870e+03, 1.849699470e+01 ) + Mix.species[iO2].DiffCoeff.sigma = 3.458*ATom + Mix.species[iO2].DiffCoeff.kbOveps = 1.0/107.40 + Mix.species[iO2].DiffCoeff.mu = 0.000*DToCm + Mix.species[iO2].DiffCoeff.alpha = 1.600*ATom + Mix.species[iO2].DiffCoeff.Z298 = 3.800 + -- NO + var iNO = 2 + Mix.species[iNO].Name = "NO" + Mix.species[iNO].W = 14.0067e-3+15.9994e-3 + Mix.species[iNO].Geom = 1 + Mix.species[iNO].cpCoeff.TSwitch1 = 1000.0007 + Mix.species[iNO].cpCoeff.TSwitch2 = 6000.0007 + Mix.species[iNO].cpCoeff.TMin = 0200.0000 + Mix.species[iNO].cpCoeff.TMax = 20000.0007 + Mix.species[iNO].cpCoeff.cpH = array(-9.575303540e+08, 5.912434480e+05,-1.384566826e+02, 1.694339403e-02,-1.007351096e-06, 2.912584076e-11,-3.295109350e-16,-4.677501240e+06, 1.242081216e+03 ) + Mix.species[iNO].cpCoeff.cpM = array( 2.239018716e+05,-1.289651623e+03, 5.433936030e+00,-3.656034900e-04, 9.880966450e-08,-1.416076856e-11, 9.380184620e-16, 1.750317656e+04,-8.501669090e+00 ) + Mix.species[iNO].cpCoeff.cpL = array(-1.143916503e+04, 1.536467592e+02, 3.431468730e+00,-2.668592368e-03, 8.481399120e-06,-7.685111050e-09, 2.386797655e-12, 9.098214410e+03, 6.728725490e+00 ) + Mix.species[iNO].DiffCoeff.sigma = 3.621*ATom + Mix.species[iNO].DiffCoeff.kbOveps = 1.0/97.530 + Mix.species[iNO].DiffCoeff.mu = 0.000*DToCm + Mix.species[iNO].DiffCoeff.alpha = 1.760*ATom + Mix.species[iNO].DiffCoeff.Z298 = 4.000 + -- N + var iN = 3 + Mix.species[iN].Name = "N" + Mix.species[iN].W = 14.0067e-3 + Mix.species[iN].Geom = 0 + Mix.species[iN].cpCoeff.TSwitch1 = 1000.0007 + Mix.species[iN].cpCoeff.TSwitch2 = 6000.0007 + Mix.species[iN].cpCoeff.TMin = 0200.0000 + Mix.species[iN].cpCoeff.TMax = 20000.0007 + Mix.species[iN].cpCoeff.cpH = array( 5.475181050e+08,-3.107574980e+05, 6.916782740e+01,-6.847988130e-03, 3.827572400e-07,-1.098367709e-11, 1.277986024e-16, 2.550585618e+06,-5.848769753e+02 ) + Mix.species[iN].cpCoeff.cpM = array( 8.876501380e+04,-1.071231500e+02, 2.362188287e+00, 2.916720081e-04,-1.729515100e-07, 4.012657880e-11,-2.677227571e-15, 5.697351330e+04, 4.865231506e+00 ) + Mix.species[iN].cpCoeff.cpL = array( 0.000000000e+00, 0.000000000e+00, 2.500000000e+00, 0.000000000e+00, 0.000000000e+00, 0.000000000e+00, 0.000000000e+00, 5.610463780e+04, 4.193905036e+00 ) + Mix.species[iN].DiffCoeff.sigma = 3.298*ATom + Mix.species[iN].DiffCoeff.kbOveps = 1.0/71.400 + Mix.species[iN].DiffCoeff.mu = 0.000*DToCm + Mix.species[iN].DiffCoeff.alpha = 0.000*ATom + Mix.species[iN].DiffCoeff.Z298 = 0.000 + -- O + var iO = 4 + Mix.species[iO].Name = "O" + Mix.species[iO].W = 15.9994e-3 + Mix.species[iO].Geom = 0 + Mix.species[iO].cpCoeff.TSwitch1 = 1000.0007 + Mix.species[iO].cpCoeff.TSwitch2 = 6000.0007 + Mix.species[iO].cpCoeff.TMin = 0200.0000 + Mix.species[iO].cpCoeff.TMax = 20000.0007 + Mix.species[iO].cpCoeff.cpH = array( 1.779004264e+08,-1.082328257e+05, 2.810778365e+01,-2.975232262e-03, 1.854997534e-07,-5.796231540e-12, 7.191720164e-17, 8.890942630e+05,-2.181728151e+02 ) + Mix.species[iO].cpCoeff.cpM = array( 2.619020262e+05,-7.298722030e+02, 3.317177270e+00,-4.281334360e-04, 1.036104594e-07,-9.438304330e-12, 2.725038297e-16, 3.392428060e+04,-6.679585350e-01 ) + Mix.species[iO].cpCoeff.cpL = array(-7.953611300e+03, 1.607177787e+02, 1.966226438e+00, 1.013670310e-03,-1.110415423e-06, 6.517507500e-10,-1.584779251e-13, 2.840362437e+04, 8.404241820e+00 ) + Mix.species[iO].DiffCoeff.sigma = 2.750*ATom + Mix.species[iO].DiffCoeff.kbOveps = 1.0/80.000 + Mix.species[iO].DiffCoeff.mu = 0.000*DToCm + Mix.species[iO].DiffCoeff.alpha = 0.000*ATom + Mix.species[iO].DiffCoeff.Z298 = 0.000 + + + Mix.nReac = 5 + var i = 0 + -- Oxygen dissociation (O2 + X -> 2O + X) + Mix.reactions[i].A = 2.0e15 + Mix.reactions[i].n =-1.5 + Mix.reactions[i].EovR = 59500 + Mix.reactions[i].has_backward = true + -- Educts + Mix.reactions[i].Neducts = 0 + Mix.reactions[i] = REACTION.AddEduct(Mix.reactions[i], iO2, 1.0) + -- Products + Mix.reactions[i].Npducts = 0 + Mix.reactions[i] = REACTION.AddPduct(Mix.reactions[i], iO, 2.0) + -- Colliders + Mix.reactions[i].Nthirdb = 0 + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iO2, 1.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iNO, 1.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iN2, 1.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iO, 5.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iN, 5.0) + + i += 1 + -- NO dissociation (NO + X -> N + O + X) + Mix.reactions[i].A = 5e9 + Mix.reactions[i].n = 0.0 + Mix.reactions[i].EovR = 75500 + Mix.reactions[i].has_backward = true + -- Educts + Mix.reactions[i].Neducts = 0 + Mix.reactions[i] = REACTION.AddEduct(Mix.reactions[i], iNO, 1.0) + -- Products + Mix.reactions[i].Npducts = 0 + Mix.reactions[i] = REACTION.AddPduct(Mix.reactions[i], iO, 1.0) + Mix.reactions[i] = REACTION.AddPduct(Mix.reactions[i], iN, 1.0) + -- Colliders + Mix.reactions[i].Nthirdb = 0 + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iO2, 1.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iNO, 22.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iN2, 1.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iO, 22.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iN, 22.0) + + i += 1 + -- N2 dissociation (N2 + X -> 2N + X) + Mix.reactions[i].A = 7e15 + Mix.reactions[i].n =-1.6 + Mix.reactions[i].EovR = 113200 + Mix.reactions[i].has_backward = true + -- Educts + Mix.reactions[i].Neducts = 0 + Mix.reactions[i] = REACTION.AddEduct(Mix.reactions[i], iN2, 1.0) + -- Products + Mix.reactions[i].Npducts = 0 + Mix.reactions[i] = REACTION.AddPduct(Mix.reactions[i], iN, 2.0) + -- Colliders + Mix.reactions[i].Nthirdb = 0 + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iO2, 1.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iNO, 1.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iN2, 1.0) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iO, 30.0/7) + Mix.reactions[i] = REACTION.AddThirdb(Mix.reactions[i], iN, 30.0/7) + + i += 1 + -- Zeldovich 1 (N2 + O -> NO + N) + Mix.reactions[i].A = 6.4e11 + Mix.reactions[i].n =-1.0 + Mix.reactions[i].EovR = 38400 + Mix.reactions[i].has_backward = true + -- Educts + Mix.reactions[i].Neducts = 0 + Mix.reactions[i] = REACTION.AddEduct(Mix.reactions[i], iN2, 1.0) + Mix.reactions[i] = REACTION.AddEduct(Mix.reactions[i], iO, 1.0) + -- Products + Mix.reactions[i].Npducts = 0 + Mix.reactions[i] = REACTION.AddPduct(Mix.reactions[i], iNO, 1.0) + Mix.reactions[i] = REACTION.AddPduct(Mix.reactions[i], iN, 1.0) + -- Colliders + Mix.reactions[i].Nthirdb = 0 + + i += 1 + -- Zeldovich 2 (NO + O -> O2 + N) + Mix.reactions[i].A = 8.4e6 + Mix.reactions[i].n = 0.0 + Mix.reactions[i].EovR = 19400 + Mix.reactions[i].has_backward = true + -- Educts + Mix.reactions[i].Neducts = 0 + Mix.reactions[i] = REACTION.AddEduct(Mix.reactions[i], iNO, 1.0) + Mix.reactions[i] = REACTION.AddEduct(Mix.reactions[i], iO, 1.0) + -- Products + Mix.reactions[i].Npducts = 0 + Mix.reactions[i] = REACTION.AddPduct(Mix.reactions[i], iO2, 1.0) + Mix.reactions[i] = REACTION.AddPduct(Mix.reactions[i], iN, 1.0) + -- Colliders + Mix.reactions[i].Nthirdb = 0 + + regentlib.assert(i+1 == Mix.nReac, "Something wrong with number of reactions in InitMixture") + + -- Set maximum and minimum temperature + Mix.TMax = math.huge + Mix.TMin = 0.0 + for i = 0, Exports.nSpec do + Mix.TMax min= Mix.species[i].cpCoeff.TMax + Mix.TMin max= Mix.species[i].cpCoeff.TMin + end + + return Mix +end + +__demand(__inline) +task Exports.GetSpeciesNames(Mix : Exports.Mixture) + var Names : regentlib.string[Exports.nSpec] + for i = 0, Exports.nSpec do + Names[i] = Mix.species[i].Name + end + return Names +end + +__demand(__inline) +task Exports.FindSpecies(name : int8[10], Mix : Exports.Mixture) + var iSpec = -1 + for i = 0, Exports.nSpec do + if C.strcmp(Mix.species[i].Name, name) == 0 then + iSpec = i + break + end + end + regentlib.assert(iSpec > -1, "Species not found"); + return iSpec +end + +__demand(__inline) +task Exports.ClipYi(Yi : double[Exports.nSpec]) + for i = 0, Exports.nSpec do + Yi[i] max= 1.0e-60 + Yi[i] min= 1.0 + end + return Yi +end + +__demand(__inline) +task Exports.GetMolarWeightFromYi(Yi : double[Exports.nSpec], Mix : Exports.Mixture) + var MixW = 0.0 + for i = 0, Exports.nSpec do + MixW += Yi[i] / Mix.species[i].W + end + return 1.0/MixW +end + +__demand(__inline) +task Exports.GetMolarWeightFromXi(Xi : double[Exports.nSpec], Mix : Exports.Mixture) + var MixW = 0.0 + for i = 0, Exports.nSpec do + MixW += Xi[i] * Mix.species[i].W + end + return MixW +end + +__demand(__inline) +task Exports.GetMolarFractions(MixW : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + for i = 0, Exports.nSpec do + Yi[i] *= MixW/Mix.species[i].W + end + return Yi +end + +__demand(__inline) +task Exports.GetMassFractions(MixW : double, Xi : double[Exports.nSpec], Mix : Exports.Mixture) + for i = 0, Exports.nSpec do + Xi[i] *= Mix.species[i].W/MixW + end + return Xi +end + +__demand(__inline) +task Exports.GetRhoFromRhoYi(rhoYi : double[Exports.nSpec]) + var rho = 0.0 + for i = 0, Exports.nSpec do + rho += rhoYi[i] + end + return rho +end + +__demand(__inline) +task Exports.GetYi(rho : double, rhoYi : double[Exports.nSpec]) + var rhoInv = 1.0/rho + for i = 0, Exports.nSpec do + rhoYi[i] *= rhoInv + end + return rhoYi +end + +__demand(__inline) +task Exports.GetRhoYiFromYi(rho : double, Yi : double[Exports.nSpec]) + for i = 0, Exports.nSpec do + Yi[i] *= rho + end + return Yi +end + +__demand(__inline) +task Exports.GetRho(P : double, T : double, MixW : double, Mix : Exports.Mixture) + return P * MixW / (RGAS * T) +end + +__demand(__inline) +task Exports.GetHeatCapacity(T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + var cp = 0.0 + for i = 0, Exports.nSpec do + cp += Yi[i]*SPECIES.GetCp(Mix.species[i], T) + end + return cp +end + +__demand(__inline) +task Exports.GetEnthalpy(T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + var Enth = 0.0 + for i = 0, Exports.nSpec do + Enth += Yi[i]*SPECIES.GetEnthalpy(Mix.species[i], T) + end + return Enth +end + +__demand(__inline) +task Exports.GetSpeciesEnthalpy(i : int, T : double, Mix : Exports.Mixture) + return SPECIES.GetEnthalpy(Mix.species[i], T) +end + +__demand(__inline) +task Exports.GetSpeciesMolarWeight(i : int, Mix : Exports.Mixture) + return Mix.species[i].W +end + +__demand(__inline) +task Exports.GetInternalEnergy(T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + var e = 0.0 + for i = 0, Exports.nSpec do + e += Yi[i]*(SPECIES.GetEnthalpy(Mix.species[i], T) - RGAS*T/Mix.species[i].W) + end + return e +end + +__demand(__inline) +task Exports.GetSpecificInternalEnergy(i : int, T : double, Mix : Exports.Mixture) + return SPECIES.GetEnthalpy(Mix.species[i], T) - RGAS*T/Mix.species[i].W +end + +__demand(__inline) +task Exports.GetTFromInternalEnergy(e0 : double, T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + var MAXITS = 1000 + var TOL = 1e-5 + var dfdT = 1.0 + for j = 0, MAXITS do + var f = e0 - Exports.GetInternalEnergy(T, Yi, Mix) + if (fabs(f/dfdT) < TOL) then break end + dfdT = 0.0 + for i = 0, Exports.nSpec do + dfdT += Yi[i]*(SPECIES.GetCp(Mix.species[i], T) - RGAS/Mix.species[i].W) + end + T += f/dfdT +-- TODO: the assert is not yet supported by the cuda compiler +-- regentlib.assert(j~=MAXITS, "GetTFromInternalEnergy did not converge") + end + return T +end + +__demand(__inline) +task Exports.isValidInternalEnergy(e : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + var valid = true + if e < Exports.GetInternalEnergy(Mix.TMin, Yi, Mix) then valid = false + elseif e > Exports.GetInternalEnergy(Mix.TMax, Yi, Mix) then valid = false + end + return valid +end + +__demand(__inline) +task Exports.GetTFromRhoAndP(rho: double, MixW : double, P : double) + return P*MixW/(rho*RGAS) +end + +__demand(__inline) +task Exports.GetPFromRhoAndT(rho: double, MixW : double, T : double) + return rho*RGAS*T/MixW +end + +__demand(__inline) +task Exports.GetViscosity(T : double, Xi : double[Exports.nSpec], Mix : Exports.Mixture) + var muk : double[Exports.nSpec] + for i = 0, Exports.nSpec do + muk[i] = SPECIES.GetMu(Mix.species[i], T) + end + + var mu = 0.0 + for i = 0, Exports.nSpec do + var den = 0.0; + for j = 0, Exports.nSpec do + var Phi = pow(1 + sqrt(muk[i]/muk[j]) * pow(Mix.species[j].W/Mix.species[i].W, 0.25) , 2); + Phi /= sqrt(8*(1 + Mix.species[i].W/Mix.species[j].W)); + den += Xi[j]*Phi; + end + mu += Xi[i]*muk[i]/den; + end + return mu; +end + +__demand(__inline) +task Exports.GetHeatConductivity(T : double, Xi : double[Exports.nSpec], Mix : Exports.Mixture) + var a = 0.0 + var b = 0.0 + for i = 0, Exports.nSpec do + var lami = SPECIES.GetLam(Mix.species[i], T) + a += Xi[i]*lami + b += Xi[i]/lami + end + return 0.5*(a + 1/b) +end + +__demand(__inline) +task Exports.GetGamma(T : double, MixW : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + var cp = Exports.GetHeatCapacity(T, Yi, Mix) + return cp/(cp - RGAS/MixW) +end + +__demand(__inline) +task Exports.GetSpeedOfSound(T : double, gamma : double, MixW : double, Mix : Exports.Mixture) + return sqrt(gamma * RGAS * T / MixW) +end + +__demand(__inline) +task Exports.GetDiffusivity(P: double, T : double, MixW : double, Xi : double[Exports.nSpec], Mix : Exports.Mixture) + var invDi : double[Exports.nSpec*Exports.nSpec] + var Di : double[Exports.nSpec] + for i = 0, Exports.nSpec do + invDi[i*Exports.nSpec+i] = 0.0 + for j = 0, i do + invDi[j*Exports.nSpec+i] = 1.0/SPECIES.GetDif(Mix.species[i], Mix.species[j], P, T) + invDi[i*Exports.nSpec+j] = invDi[j*Exports.nSpec+i] + end + end + + for i = 0, Exports.nSpec do + var num = 0.0 + var den = 0.0 + for j = 0, i do + num += Xi[j]*Mix.species[j].W; + den += Xi[j]*invDi[i*Exports.nSpec+j]; + end + for j = i+1, Exports.nSpec do + num += Xi[j]*Mix.species[j].W + den += Xi[j]*invDi[i*Exports.nSpec+j] + end + Di[i] = num/(MixW*den) + end + return Di +end + +__demand(__inline) +task Exports.GetProductionRates(rho : double, P : double, T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + var G : double[Exports.nSpec] + var C : double[Exports.nSpec] + var w : double[Exports.nSpec] + for i = 0, Exports.nSpec do + w[i] = 0.0; + C[i] = Yi[i]*rho/Mix.species[i].W + G[i] = SPECIES.GetFreeEnthalpy(Mix.species[i], T) + end + + for i = 0, Mix.nReac do + w = REACTION.AddProductionRates(Mix.reactions[i], P, T, C, G, w) + end + + -- From [mol/(s m^3)] to [kg/(s m^3)] + for i = 0, Exports.nSpec do + w[i] *= Mix.species[i].W + end + return w +end + +__demand(__inline) +task Exports.Getdpde(rho : double, gamma : double, Mix : Exports.Mixture) + return rho*(gamma - 1) +end + +__demand(__inline) +task Exports.Getdpdrhoi(gamma : double, T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + var e = 0.0 + var ei : double[Exports.nSpec] + for i = 0, Exports.nSpec do + ei[i] = (SPECIES.GetEnthalpy(Mix.species[i], T) - RGAS*T/Mix.species[i].W) + e += Yi[i]*ei[i] + end + var dpdrhoi : double[Exports.nSpec] + for i = 0, Exports.nSpec do + dpdrhoi[i] = RGAS*T/Mix.species[i].W + (gamma - 1)*(e - ei[i]) + end + return dpdrhoi +end + +return Exports end diff --git a/src/ConstPropMix.rg b/src/ConstPropMix.rg new file mode 100644 index 0000000..b79041f --- /dev/null +++ b/src/ConstPropMix.rg @@ -0,0 +1,273 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA) local Exports = {} + +-- Utility functions +local C = regentlib.c +local fabs = regentlib.fabs(double) +local pow = regentlib.pow(double) +local sqrt = regentlib.sqrt(double) + +-- Constants + +local ATom = 1e-10 -- Angstrom to meter +local DToCm = 3.33564e-30 -- Debye to Coulomb meter + +local RGAS = 8.3144598 -- [J/(mol K)] +local Na = 6.02214086e23 -- [1/mol] +local kb = 1.38064852e-23 -- [m^2 kg /( s^2 K)] +local PI = 3.1415926535898 + +Exports.nSpec = 1 + +struct Exports.Mixture { + nSpec : int + nReac : int + -- Mixture properties + R : double + gamma : double + + -- Viscosisity model + viscosityModel : SCHEMA.ViscosityModel + -- Viscosity parameters + constantVisc : double + powerlawTempRef : double + powerlawViscRef : double + -- Sutherland model + sutherlandSRef : double + sutherlandTempRef : double + sutherlandViscRef : double + -- Prandtl number + Prandtl : double +} + +__demand(__inline) +task Exports.InitMixture(config : SCHEMA.Config) + var Mix : Exports.Mixture + Mix.nSpec = Exports.nSpec + Mix.nReac = 0 + Mix.R = config.Flow.gasConstant + Mix.gamma = config.Flow.gamma + + Mix.viscosityModel = config.Flow.viscosityModel + + Mix.constantVisc = config.Flow.constantVisc + Mix.powerlawTempRef = config.Flow.powerlawTempRef + Mix.powerlawViscRef = config.Flow.powerlawViscRef + + Mix.sutherlandSRef = config.Flow.sutherlandSRef + Mix.sutherlandTempRef = config.Flow.sutherlandTempRef + Mix.sutherlandViscRef = config.Flow.sutherlandViscRef + + Mix.Prandtl = config.Flow.prandtl + + return Mix +end + +__demand(__inline) +task Exports.GetSpeciesNames(Mix : Exports.Mixture) + var Names : regentlib.string[Exports.nSpec] + Names[0] = "MIX" + return Names +end + +__demand(__inline) +task Exports.FindSpecies(name : &int8, Mix : Exports.Mixture) + return 0 +end + +__demand(__inline) +task Exports.ClipYi(Yi : double[Exports.nSpec]) + for i = 0, Exports.nSpec do + Yi[i] max= 1.0e-60 + Yi[i] min= 1.0 + end + return Yi +end + +__demand(__inline) +task Exports.GetMolarWeightFromYi(Yi : double[Exports.nSpec], Mix : Exports.Mixture) + return RGAS/Mix.R +end + +__demand(__inline) +task Exports.GetMolarWeightFromXi(Xi : double[Exports.nSpec], Mix : Exports.Mixture) + return RGAS/Mix.R +end + +__demand(__inline) +task Exports.GetMolarFractions(MixW : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + return Yi +end + +__demand(__inline) +task Exports.GetMassFractions(MixW : double, Xi : double[Exports.nSpec], Mix : Exports.Mixture) + return Xi +end + +__demand(__inline) +task Exports.GetRhoFromRhoYi( rhoYi : double[Exports.nSpec] ) + var rho = rhoYi[0] + return rho +end + +__demand(__inline) +task Exports.GetYi(rho : double, rhoYi : double[Exports.nSpec]) + for i = 0, Exports.nSpec do + rhoYi[i] /= rho + end + return rhoYi +end + +__demand(__inline) +task Exports.GetRhoYiFromYi(rho : double, Yi : double[Exports.nSpec]) + for i = 0, Exports.nSpec do + Yi[i] *= rho + end + return Yi +end + +__demand(__inline) +task Exports.GetRho(P : double, T : double, MixW : double, Mix : Exports.Mixture) + return P/(Mix.R * T) +end + +__demand(__inline) +task Exports.GetHeatCapacity(T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + return Mix.gamma/(Mix.gamma-1)*Mix.R +end + +__demand(__inline) +task Exports.GetEnthalpy( T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture ) + return Mix.gamma/(Mix.gamma-1)*Mix.R*T +end + +__demand(__inline) +task Exports.GetSpeciesEnthalpy(i : int, T : double, Mix : Exports.Mixture) + return T*Mix.R*Mix.gamma/(Mix.gamma-1.0) +end + +__demand(__inline) +task Exports.GetSpeciesMolarWeight(i : int, Mix : Exports.Mixture) + return RGAS/Mix.R +end + +__demand(__inline) +task Exports.GetInternalEnergy(T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + return T*Mix.R/(Mix.gamma-1.0) +end + +__demand(__inline) +task Exports.GetSpecificInternalEnergy(i : int, T : double, Mix : Exports.Mixture) + return T*Mix.R/(Mix.gamma-1.0) +end + +__demand(__inline) +task Exports.GetTFromInternalEnergy(e0 : double, T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + return e0*(Mix.gamma-1.0)/Mix.R +end + +__demand(__inline) +task Exports.isValidInternalEnergy(e : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + return (e > 0) +end + +__demand(__inline) +task Exports.GetTFromRhoAndP(rho: double, MixW : double, P : double) + return P*MixW/(rho*RGAS) +end + +__demand(__inline) +task Exports.GetPFromRhoAndT(rho: double, MixW : double, T : double) + return rho*RGAS*T/MixW +end + +__demand(__inline) +task Exports.GetViscosity(T : double, Xi : double[Exports.nSpec], Mix : Exports.Mixture) + var viscosity = 0.0 + if (Mix.viscosityModel == SCHEMA.ViscosityModel_Constant) then + viscosity = Mix.constantVisc + else + if (Mix.viscosityModel == SCHEMA.ViscosityModel_PowerLaw) then + viscosity = (Mix.powerlawViscRef*pow((T/Mix.powerlawTempRef), double(0.7))) + else + viscosity = ((Mix.sutherlandViscRef*pow((T/Mix.sutherlandTempRef), (3.0/2.0)))*((Mix.sutherlandTempRef+Mix.sutherlandSRef)/(T+Mix.sutherlandSRef))) + end + end + return viscosity +end + +__demand(__inline) +task Exports.GetHeatConductivity(T : double, Xi : double[Exports.nSpec], Mix : Exports.Mixture) + var cp = Mix.gamma/(Mix.gamma-1)*Mix.R + return cp/Mix.Prandtl*Exports.GetViscosity(T, Xi, Mix) +end + +__demand(__inline) +task Exports.GetGamma(T : double, MixW : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + return Mix.gamma +end + +__demand(__inline) +task Exports.GetSpeedOfSound(T: double, gamma : double, MixW : double, Mix : Exports.Mixture) + return sqrt(Mix.gamma*Mix.R*T) +end + +__demand(__inline) +task Exports.GetDiffusivity(P: double, T : double, MixW : double, Xi : double[Exports.nSpec], Mix : Exports.Mixture) + var Di : double[Exports.nSpec] + for i = 0, Exports.nSpec do + Di[i] = 0.0 + end + return Di +end + +__demand(__inline) +task Exports.GetProductionRates(rho : double, P : double, T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + var w : double[Exports.nSpec] + for i = 0, Exports.nSpec do + w[i] = 0.0 + end + return w +end + +__demand(__inline) +task Exports.Getdpde(rho : double, gamma : double, Mix : Exports.Mixture) + return rho*(Mix.gamma - 1) +end + +__demand(__inline) +task Exports.Getdpdrhoi(gamma : double, T : double, Yi : double[Exports.nSpec], Mix : Exports.Mixture) + return array( Mix.R*T ) +end + +return Exports end diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..ba24a62 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,110 @@ +# Required paths +ifndef LEGION_DIR + $(error LEGION_DIR is not set) +endif +ifndef HTR_DIR + $(error HTR_DIR is not set) +endif + +# OS-specific options +ifeq ($(shell uname),Darwin) + DYNLINK_PATH := DYLD_LIBRARY_PATH +else + DYNLINK_PATH := LD_LIBRARY_PATH +endif + +# CUDA options +USE_CUDA ?= 1 + +# OpenMP options +USE_OPENMP ?= 1 + +# HDF options +export USE_HDF ?= 1 +export HDF_HEADER ?= hdf5.h +HDF_LIBNAME ?= hdf5 + +# C compiler options +CFLAGS += -O2 -Wall -Werror -fno-strict-aliasing -I$(LEGION_DIR)/runtime -I$(LEGION_DIR)/bindings/regent +CXXFLAGS += -std=c++11 -O3 -Wall -Werror -fno-strict-aliasing -I$(LEGION_DIR)/runtime -I$(LEGION_DIR)/bindings/regent + +# Regent options +export INCLUDE_PATH := . +ifdef HDF_ROOT + export INCLUDE_PATH := $(INCLUDE_PATH);$(HDF_ROOT)/include + export $(DYNLINK_PATH) := $($(DYNLINK_PATH)):$(HDF_ROOT)/lib +endif +REGENT := $(LEGION_DIR)/language/regent.py +REGENT_FLAGS := -fflow 0 -finner 1 +ifeq ($(DEBUG), 1) + REGENT_FLAGS += -fcuda 0 -fbounds-checks 1 +else +ifeq ($(USE_CUDA), 1) + REGENT_FLAGS += -fcuda 1 -fcuda-offline 1 +else + REGENT_FLAGS += -fcuda 0 +endif +endif +ifeq ($(USE_OPENMP), 1) + REGENT_FLAGS += -fopenmp 1 +else + REGENT_FLAGS += -fopenmp 0 +endif + +# Link flags +ifdef CRAYPE_VERSION + LINK_FLAGS += -Bdynamic + LINK_FLAGS += $(CRAY_UGNI_POST_LINK_OPTS) -lugni + LINK_FLAGS += $(CRAY_UDREG_POST_LINK_OPTS) -ludreg +endif +LINK_FLAGS += -L$(LEGION_DIR)/bindings/regent -lregent +ifdef HDF_ROOT + LINK_FLAGS += -L$(HDF_ROOT)/lib +endif +ifeq ($(USE_HDF), 1) + LINK_FLAGS += -l$(HDF_LIBNAME) +endif +LINK_FLAGS += -lm + +ifeq ($(DEBUG), 1) + REGENT_FLAGS += -g + CFLAGS += -g + CXXFLAGS += -g + LINK_FLAGS += -g +endif + +.PHONY: default all clean +.PRECIOUS: prometeo_%.o +.SUFFIXES: .rg .cc .h .o + +default: prometeo_ConstPropMix.exec prometeo_AirMix.exec + +Common= hdf_helper.rg util-desugared.rg math_utils.rg prometeo_const.rg prometeo_macro.rg \ + prometeo_grid.rg prometeo_metric.rg prometeo_IO.rg prometeo_cfl.rg prometeo_chem.rg \ + prometeo_init.rg prometeo_variables.rg prometeo_average.rg prometeo_rk.rg \ + prometeo_flux.rg prometeo_rhs.rg prometeo_operators.rg prometeo_stat.rg \ + prometeo_bc.rg prometeo_profiles.rg +ConstPropMix= ConstPropMix.rg +AirMix= Species.rg Reaction.rg AirMix.rg + +clean: + $(RM) *.exec *.o *-desugared.rg config_schema.h + +%-desugared.rg: %.rg + ./desugar.py $< > $@ + +prometeo_%.exec: prometeo_%.o prometeo_mapper.o config_schema.o json.o + $(CXX) -o $@ $^ $(LINK_FLAGS) + +.SECONDEXPANSION: +prometeo_%.o: prometeo-desugared.rg prometeo_mapper.h config_schema.o $$(wildcard $$**) $(Common) + EOS="$*" $(REGENT) prometeo-desugared.rg $(REGENT_FLAGS) + +prometeo_mapper.o: prometeo_mapper.cc prometeo_mapper.h config_schema.o + $(CXX) $(CXXFLAGS) -c -o $@ $< + +config_schema.o: process_schema.rg config_schema.lua json.h util-desugared.rg + $(REGENT) process_schema.rg config_schema.lua $(REGENT_FLAGS) + +json.o: json.c json.h + $(CC) $(CFLAGS) -c -o $@ $< diff --git a/src/Reaction.rg b/src/Reaction.rg new file mode 100644 index 0000000..d91d082 --- /dev/null +++ b/src/Reaction.rg @@ -0,0 +1,169 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(nSpec, MAX_NUM_REACTANTS, MAX_NUM_TB) local Exports = {} + +-- Utility functions +local log = regentlib.log(double) +local exp = regentlib.exp(double) +local pow = regentlib.pow(double) +local sqrt = regentlib.sqrt(double) + +-- Constants +local RGAS = 8.3144598 -- [J/(mol K)] + +local struct Reactant { + ind : int, -- Index in the species vector + nu : double -- Stoichiometric coefficient +} + +-- Species structure +struct Exports.Reaction { + A : double -- Arrhenius pre-exponential factor [m^{3*(o-1)}/(mol^(o-1) s)] where o is the order fo the reaction + n : double -- Arrhenius temperature exponent + EovR : double -- Arrhenius activation energy [K] + has_backward : bool -- Self-explenatory + + Neducts : int -- number of reactants + Npducts : int -- number of products + Nthirdb : int -- number of third bodies + + educts : Reactant[MAX_NUM_REACTANTS] -- List of reactants and stoichiometric coefficients + pducts : Reactant[MAX_NUM_REACTANTS] -- List of products and stoichiometric coefficients + thirdb : Reactant[MAX_NUM_TB] -- List of third bodies and efficiencies + +-- vector>> educts -- List of reactants and stoichiometric coefficient +-- vector>> pducts -- List of products and stoichiometric coefficient +-- vector>> thirdb -- List of third bodies and efficiency +} + +__demand(__inline) +task Exports.AddEduct( r : Exports.Reaction, index : int, nu : double ) + regentlib.assert(r.Neducts < MAX_NUM_REACTANTS, "Increase MAX_NUM_REACTANTS") + r.educts[r.Neducts].ind = index + r.educts[r.Neducts].nu = nu + r.Neducts += 1 + return r +end + +__demand(__inline) +task Exports.AddPduct( r : Exports.Reaction, index : int, nu : double ) + regentlib.assert(r.Npducts < MAX_NUM_REACTANTS, "Increase MAX_NUM_REACTANTS") + r.pducts[r.Npducts].ind = index + r.pducts[r.Npducts].nu = nu + r.Npducts += 1 + return r +end + +__demand(__inline) +task Exports.AddThirdb( r : Exports.Reaction, index : int, nu : double ) + regentlib.assert(r.Nthirdb < MAX_NUM_TB, "Increase MAX_NUM_TB") + r.thirdb[r.Nthirdb].ind = index + r.thirdb[r.Nthirdb].nu = nu + r.Nthirdb += 1 + return r +end + +local __demand(__inline) +task CompRateCoeff( r : Exports.Reaction, T : double ) + var Kf = r.A + if ( r.n ~= 0.0 ) then + Kf *= pow( T, r.n ) + end + if ( r.EovR > 1e-5 ) then + Kf *= exp( -r.EovR / T ) + end + return Kf +end + +local __demand(__inline) +task CompBackwardRateCoeff( r : Exports.Reaction, Kf : double, P : double, T : double, G : double[nSpec] ) + var sumNu = 0.0 + var sumNuG = 0.0 + for i = 0, r.Neducts do + sumNu -= r.educts[i].nu + sumNuG -= r.educts[i].nu*G[r.educts[i].ind] + end + for i = 0, r.Npducts do + sumNu += r.pducts[i].nu + sumNuG += r.pducts[i].nu*G[r.pducts[i].ind] + end + var lnKc = - sumNuG - sumNu * ( log(T) + log(RGAS/P) ) + return Kf * exp(-lnKc) +end + +local __demand(__inline) +task GetReactionRate( r : Exports.Reaction, P : double, T : double, C : double[nSpec], G : double[nSpec] ) + -- Forward reaction rate + var Kf = CompRateCoeff(r, T) + var a = 1.0 + for i = 0, r.Neducts do + var ind = r.educts[i].ind + a *= pow(C[ind],r.educts[i].nu) + end + -- Backward reaction rate + var Kb = 0.0 + var b = 1.0 + if ( r.has_backward ) then + Kb = CompBackwardRateCoeff(r, Kf, P, T, G) + for i = 0, r.Npducts do + var ind = r.pducts[i].ind + b *= pow(C[ind],r.pducts[i].nu) + end + end + -- Third body efficiency + var c = 1.0 + if (r.Nthirdb ~= 0) then + c = 0.0 + for i = 0, r.Nthirdb do + var ind = r.thirdb[i].ind + c += C[ind]*r.thirdb[i].nu + end + end + -- Compute reaction rate + return c*(Kf*a - Kb*b) +end + +__demand(__inline) +task Exports.AddProductionRates( r : Exports.Reaction, P : double, T : double, C : double[nSpec], G : double[nSpec], w : double[nSpec] ) + var R = GetReactionRate(r, P, T, C, G) + for i = 0, r.Neducts do + var ind = r.educts[i].ind + w[ind] -= r.educts[i].nu*R + end + for i = 0, r.Npducts do + var ind = r.pducts[i].ind + w[ind] += r.pducts[i].nu*R + end + return w +end + +return Exports end diff --git a/src/Species.rg b/src/Species.rg new file mode 100644 index 0000000..467322e --- /dev/null +++ b/src/Species.rg @@ -0,0 +1,327 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +local Exports = {} + +-- Utility functions +local log = regentlib.log(double) +local pow = regentlib.pow(double) +local sqrt = regentlib.sqrt(double) + +-- Constants +local CONST = require "prometeo_const" +local RGAS = CONST.RGAS -- [J/(mol K)] +local Na = CONST.Na -- [1/mol] +local kb = CONST.kb -- [m^2 kg /( s^2 K)] +local PI = CONST.PI + +-- Species geometries +--Mixture.SpeciesGeom = Enum( 'Atom', 'Linear', 'NonLinear' ) + +-- NASA polynomials data structure +local struct cpCoefficients +{ + TSwitch1 : double -- Switch temperature between Low and Mid temperature polynomials + TSwitch2 : double -- Switch temperature between Mid and High temperature polynomials + TMin : double -- Minimum temperature + TMax : double -- Maximum temperature + cpH : double[9] -- High temperature polynomials + cpM : double[9] -- Mid temperature polynomials + cpL : double[9] -- Low temperature polynomials +} + +-- Coefficinets for diffusivity +local struct DiffCoefficients +{ + sigma : double -- Lennard-Jones collision diameter [m] + kbOveps : double -- Boltzmann constant divided by Lennard-Jones potential well depth [1/K] + mu : double -- Dipole moment [C*m] + alpha : double -- Polarizabilty [m] + Z298 : double -- Rotational relaxation collision number +} + +-- Species structure +struct Exports.Species { + Name : regentlib.string -- Name of the species + W : double -- Molar weight [kg/mol] + inx : int -- Index in the species vector + Geom : int -- = 0 (Atom), = 1 (Linear), = 2 (Non Linear) + cpCoeff : cpCoefficients + DiffCoeff : DiffCoefficients +} + +-- omega_mu() returns the collision integral for mu given dimensionless temperature t/(eps/k). +-- TODO: These come from FlameMaster. +-- At a certain point, verify these implementations. +local __demand(__inline) +task omega_mu( T: double ) + var m1 = 3.3530622607 + var m2 = 2.53272006 + var m3 = 2.9024238575 + var m4 = 0.11186138893 + var m5 = 0.8662326188 -- = -0.1337673812 + 1.0 + var m6 = 1.3913958626 + var m7 = 3.158490576 + var m8 = 0.18973411754 + var m9 = 0.00018682962894 + + var num = m1 + T*(m2 + T*(m3 + T*m4)) + var den = m5 + T*(m6 + T*(m7 + T*(m8 + T*m9))) + return num / den +end + +-- omega_D() returns the Stossintegral for a given dimensionless temperature t/(eps/k) +local __demand(__inline) +task omega_D( T : double ) + var m1 = 6.8728271691 + var m2 = 9.4122316321 + var m3 = 7.7442359037 + var m4 = 0.23424661229 + var m5 = 1.45337701568 -- = 1.0 + 0.45337701568 + var m6 = 5.2269794238 + var m7 = 9.7108519575 + var m8 = 0.46539437353 + var m9 = 0.00041908394781 + + return (m1 + T * (m2 + T * (m3 + T * m4))) / (m5 + T * (m6 + T * (m7 + T * (m8 + T * m9)))) +end + +__demand(__inline) +task Exports.GetCp( s : Exports.Species, T : double ) +-- TODO: the assert is not yet supported by the cuda compiler +-- regentlib.assert(T < s.cpCoeff.TMax, "Exceeded maximum temeperature") +-- regentlib.assert(T > s.cpCoeff.TMin, "Exceeded minimum temeperature") + + var rOvW = RGAS/s.W + var Tinv = 1.0/T + var cp : double + if ( T > s.cpCoeff.TSwitch2 ) then + cp = rOvW*( s.cpCoeff.cpH[0]*Tinv*Tinv + s.cpCoeff.cpH[1]*Tinv + s.cpCoeff.cpH[2] + T* + ( s.cpCoeff.cpH[3] + T* + ( s.cpCoeff.cpH[4] + T* + ( s.cpCoeff.cpH[5] + T*s.cpCoeff.cpH[6])))) + elseif ( T > s.cpCoeff.TSwitch1 ) then + cp = rOvW*( s.cpCoeff.cpM[0]*Tinv*Tinv + s.cpCoeff.cpM[1]*Tinv + s.cpCoeff.cpM[2] + T* + ( s.cpCoeff.cpM[3] + T* + ( s.cpCoeff.cpM[4] + T* + ( s.cpCoeff.cpM[5] + T*s.cpCoeff.cpM[6])))) + else + cp = rOvW*( s.cpCoeff.cpL[0]*Tinv*Tinv + s.cpCoeff.cpL[1]*Tinv + s.cpCoeff.cpL[2] + T* + ( s.cpCoeff.cpL[3] + T* + ( s.cpCoeff.cpL[4] + T* + ( s.cpCoeff.cpL[5] + T*s.cpCoeff.cpL[6])))) + end + return cp +end + +__demand(__inline) +task Exports.GetFreeEnthalpy( s : Exports.Species, T : double ) + -- This is (H/(RT) - S/R) +-- TODO: the assert is not yet supported by the cuda compiler +-- regentlib.assert(T < s.cpCoeff.TMax, "Exceeded maximum temeperature") +-- regentlib.assert(T > s.cpCoeff.TMin, "Exceeded minimum temeperature") + + var Tinv = 1.0/T + var G : double + if ( T > s.cpCoeff.TSwitch2 ) then + G = -0.5*s.cpCoeff.cpH[0]*Tinv*Tinv + s.cpCoeff.cpH[1]*Tinv*( 1.0 + log(T) ) + s.cpCoeff.cpH[2]*( 1.0 - log(T) ) + s.cpCoeff.cpH[7]*Tinv - s.cpCoeff.cpH[8] + G -= 0.5 * T * ( s.cpCoeff.cpH[3] + T* + ( s.cpCoeff.cpH[4]/3 + T* + ( s.cpCoeff.cpH[5]/6 + 0.1*T*s.cpCoeff.cpH[6] ))) + + elseif ( T > s.cpCoeff.TSwitch1 ) then + G = -0.5*s.cpCoeff.cpM[0]*Tinv*Tinv + s.cpCoeff.cpM[1]*Tinv*( 1.0 + log(T) ) + s.cpCoeff.cpM[2]*( 1.0 - log(T) ) + s.cpCoeff.cpM[7]*Tinv - s.cpCoeff.cpM[8] + G -= 0.5 * T * ( s.cpCoeff.cpM[3] + T* + ( s.cpCoeff.cpM[4]/3 + T* + ( s.cpCoeff.cpM[5]/6 + 0.1*T*s.cpCoeff.cpM[6] ))) + + else + G = -0.5*s.cpCoeff.cpL[0]*Tinv*Tinv + s.cpCoeff.cpL[1]*Tinv*( 1.0 + log(T) ) + s.cpCoeff.cpL[2]*( 1.0 - log(T) ) + s.cpCoeff.cpL[7]*Tinv - s.cpCoeff.cpL[8] + G -= 0.5 * T * ( s.cpCoeff.cpL[3] + T* + ( s.cpCoeff.cpL[4]/3 + T* + ( s.cpCoeff.cpL[5]/6 + 0.1*T*s.cpCoeff.cpL[6] ))) + + end + return G +end + +__demand(__inline) +task Exports.GetEnthalpy( s : Exports.Species, T : double ) +-- TODO: the assert is not yet supported by the cuda compiler + --regentlib.assert(T < s.cpCoeff.TMax, "Exceeded maximum temeperature") + --regentlib.assert(T > s.cpCoeff.TMin, "Exceeded minimum temeperature") + + var rOvW = RGAS/s.W + var Tinv = 1.0/T + var E : double + if ( T > s.cpCoeff.TSwitch2 ) then + E = -s.cpCoeff.cpH[0]/T + s.cpCoeff.cpH[1]*log(T) + s.cpCoeff.cpH[7] + T* + ( s.cpCoeff.cpH[2] + T* + ( s.cpCoeff.cpH[3]*0.50 + T* + ( s.cpCoeff.cpH[4]/3 + T* + ( s.cpCoeff.cpH[5]*0.25 + s.cpCoeff.cpH[6]/5*T)))) + elseif ( T > s.cpCoeff.TSwitch1 ) then + E = -s.cpCoeff.cpM[0]/T + s.cpCoeff.cpM[1]*log(T) + s.cpCoeff.cpM[7] + T* + ( s.cpCoeff.cpM[2] + T* + ( s.cpCoeff.cpM[3]*0.50 + T* + ( s.cpCoeff.cpM[4]/3 + T* + ( s.cpCoeff.cpM[5]*0.25 + s.cpCoeff.cpM[6]/5*T)))) + + else + E = -s.cpCoeff.cpL[0]/T + s.cpCoeff.cpL[1]*log(T) + s.cpCoeff.cpL[7] + T* + ( s.cpCoeff.cpL[2] + T* + ( s.cpCoeff.cpL[3]*0.50 + T* + ( s.cpCoeff.cpL[4]/3 + T* + ( s.cpCoeff.cpL[5]*0.25 + s.cpCoeff.cpL[6]/5*T)))) + + end + return E*rOvW +end + +__demand(__inline) +task Exports.GetMu( s : Exports.Species, T : double ) + var num = 5 * sqrt(PI * s.W/Na * kb * T) + var den = 16 * PI * pow(s.DiffCoeff.sigma,2) * omega_mu( T * s.DiffCoeff.kbOveps ) + return num/den +end + +__demand(__inline) +task Exports.GetDif( s1 : Exports.Species, s2 : Exports.Species, + P : double, T : double ) + var xi = 1.0 + if ( (s1.DiffCoeff.mu*s2.DiffCoeff.mu == 0.0) and + (s1.DiffCoeff.mu+s2.DiffCoeff.mu ~= 0.0) ) then + -- If I have a polar to non-polar molecule interaction + var mup : double + var alp : double + var epr : double + if (s1.DiffCoeff.mu ~= 0.0) then + mup = s1.DiffCoeff.mu/sqrt(pow(s1.DiffCoeff.sigma,3)*kb/s1.DiffCoeff.kbOveps) + alp = s1.DiffCoeff.alpha/s1.DiffCoeff.sigma + epr = sqrt(s2.DiffCoeff.kbOveps/s1.DiffCoeff.kbOveps) + else + mup = s2.DiffCoeff.mu/sqrt(pow(s2.DiffCoeff.sigma,3)*kb/s2.DiffCoeff.kbOveps) + alp = s2.DiffCoeff.alpha/s2.DiffCoeff.sigma + epr = sqrt(s1.DiffCoeff.kbOveps/s2.DiffCoeff.kbOveps) + end + xi = 1 + 0.25*mup*alp*epr + end + var invWij = (s1.W + s2.W)/(s1.W*s2.W) + var kboEpsij = sqrt(s1.DiffCoeff.kbOveps * s2.DiffCoeff.kbOveps)/(xi*xi) + var sigmaij = 0.5*(s1.DiffCoeff.sigma + s2.DiffCoeff.sigma)*pow(xi,1./6) + var num = 3*sqrt(2*PI*pow(kb,3)*pow(T,3)*Na*invWij) + var den = 16*PI*P*sigmaij*sigmaij*omega_D(T * kboEpsij) + return num/den +end + +local __demand(__inline) +task GetSelfDiffusion( s : Exports.Species, T : double ) + -- Already multiplied by partial density + var num = 3*sqrt( PI*kb*T*s.W/Na ) + var den = 8*PI*pow(s.DiffCoeff.sigma,2)*omega_D(T * s.DiffCoeff.kbOveps) + return num/den +end + +local __demand(__inline) +task GetFZrot( s : Exports.Species, T : double ) + var tmp = 1/(s.DiffCoeff.kbOveps*T) + return 1 + 0.5*pow(PI,1.5)*sqrt(tmp) + + (2 + 0.25*PI*PI)*tmp + + pow(PI,1.5)*pow(tmp,1.5) +end + +local __demand(__inline) +task GetLamAtom( s : Exports.Species, T : double ) + var mu = Exports.GetMu(s, T) + return 15/4*mu*RGAS/s.W +end + + +local __demand(__inline) +task GetLamLinear( s : Exports.Species, T : double ) + var CvTOvR = 1.5 + var CvROvR = 1.0 + + var CvT = CvTOvR*RGAS + var CvR = CvROvR*RGAS + var CvV = Exports.GetCp(s, T)*s.W - 3.5*RGAS + + var Dkk = GetSelfDiffusion(s, T) + var mu = Exports.GetMu(s,T) + + var fV = Dkk/mu + + var Zrot = s.DiffCoeff.Z298*GetFZrot(s, 298)/GetFZrot(s, T) + + var A = 2.5 - fV + var B = Zrot + 2/PI*(5./3*CvROvR+fV) + + var fT = 2.5 * (1. - 2*CvR*A/(PI*CvT*B)) + var fR = fV*(1. + 2*A/(PI*B)) + + return mu/s.W*(fT*CvT + fR*CvR + fV*CvV) +end + +local __demand(__inline) +task GetLamNonLinear( s : Exports.Species, T : double ) + var CvTOvR = 1.5 + var CvROvR = 1.5 + + var CvT = CvTOvR*RGAS + var CvR = CvROvR*RGAS + var CvV = Exports.GetCp(s, T)*s.W - 4.0*RGAS + + var Dkk = GetSelfDiffusion(s, T) + var mu = Exports.GetMu(s, T) + + var fV = Dkk/mu + + var Zrot = s.DiffCoeff.Z298*GetFZrot(s, 298.0)/GetFZrot(s, T) + + var A = 2.5 - fV + var B = Zrot + 2/PI*(5./3*CvROvR+fV) + + var fT = 2.5 * (1. - 2*CvR*A/(PI*CvT*B)) + var fR = fV*(1. + 2*A/(PI*B)) + + return mu/s.W*(fT*CvT + fR*CvR + fV*CvV) +end + +__demand(__inline) +task Exports.GetLam( s : Exports.Species, T : double ) + var lam : double + if ( s.Geom == 0 ) then lam = GetLamAtom(s, T) + elseif ( s.Geom == 1 ) then lam = GetLamLinear(s, T) + elseif ( s.Geom == 2 ) then lam = GetLamNonLinear(s, T) end + return lam +end + +return Exports diff --git a/src/blacklist/.gitignore b/src/blacklist/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/src/blacklist/certainty.txt b/src/blacklist/certainty.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/certainty.slurm b/src/certainty.slurm new file mode 100644 index 0000000..8f0b0f3 --- /dev/null +++ b/src/certainty.slurm @@ -0,0 +1,54 @@ +#!/bin/bash -eu +#SBATCH -J prometeo + +GPU_OPTS= +if [[ "$QUEUE" == "all" ]]; then + USE_CUDA=0 + CORES_PER_NODE=24 + RAM_PER_NODE=25000 +elif [[ "$QUEUE" == "32core" ]]; then + USE_CUDA=0 + CORES_PER_NODE=32 + RAM_PER_NODE=50000 + # 64GB RAM per node + # 2 NUMA domains per node + # 16 cores per NUMA domain + # 2-way SMT per core +elif [[ "$QUEUE" == "24core" ]]; then + USE_CUDA=0 + CORES_PER_NODE=24 + RAM_PER_NODE=25000 + # 36GB RAM per node + # 2 NUMA domains per node + # 12 cores per NUMA domain + # 2-way SMT per core +elif [[ "$QUEUE" == "largemem" ]]; then + USE_CUDA=0 + CORES_PER_NODE=24 + RAM_PER_NODE=120000 + # 144GB RAM per node + # 2 NUMA domains per node + # 12 cores per NUMA domain + # 2-way SMT per core +elif [[ "$QUEUE" == "gpu" ]]; then + USE_CUDA=1 + CORES_PER_NODE=16 + RAM_PER_NODE=25000 + GPUS_PER_NODE=4 + FB_PER_GPU=1024 + # 36GB RAM per node + # 2 NUMA domains per node + # 8 cores per NUMA domain + # 2-way SMT per core + # 4 Kepler M2050 GPUs per node + # 3GB FB per GPU +else + echo "Unrecognized queue $QUEUE" >&2 + exit 1 +fi + +source "$HTR_DIR"/src/jobscript_shared.sh + +mpiexec -np "$NUM_RANKS" --map-by ppr:"$RANKS_PER_NODE":node --bind-to none \ + -x LD_LIBRARY_PATH -x HTR_DIR -x REALM_BACKTRACE -x LEGION_FREEZE_ON_ERROR \ + $COMMAND diff --git a/src/config_schema.lua b/src/config_schema.lua new file mode 100644 index 0000000..e64175c --- /dev/null +++ b/src/config_schema.lua @@ -0,0 +1,229 @@ +-- Copyright (c) "2019, by Stanford University +-- Contributors: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo M., Lin F. and Urzay J. "HTR solver: An open-source +-- exascale-oriented task-based multi-GPU high-order code for +-- hypersonic aerothermodynamics." Computer Physics Communications XXX (2020)" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +local Exports = {} + +-- Helper definitions +Exports.Volume = { + fromCell = Array(3,int), + uptoCell = Array(3,int), +} +Exports.Window = { + fromCell = Array(2,int), + uptoCell = Array(2,int), +} +Exports.Species = { + Name = String(10), + MolarFrac = double, +} +Exports.Mixture = { + Species = UpTo(10, Exports.Species), +} + +-- Unions & enumeration constants +Exports.FlowBC = Enum('Dirichlet','Periodic','Symmetry','AdiabaticWall','IsothermalWall','NSCBC_Inflow','NSCBC_Outflow','SuctionAndBlowingWall') +Exports.ViscosityModel = Enum('Constant','PowerLaw','Sutherland') +Exports.FlowInitCase = Enum('Uniform','Random','Restart','Perturbed','TaylorGreen2DVortex','TaylorGreen3DVortex','RiemannTestOne','RiemannTestTwo','SodProblem','LaxProblem','ShuOsherProblem','VortexAdvection2D','GrossmanCinnellaProblem','ChannelFlow') +Exports.GridType = Enum('Uniform','Cosine','TanhMinus','TanhPlus','Tanh') +Exports.MixtureProfile = Union{ + Constant = { + Mixture = Exports.Mixture, + }, + File = { + FileDir = String(256), + }, + Incoming = {}, +} +Exports.TempProfile = Union{ + Constant = { + temperature = double, + }, + File = { + FileDir = String(256), + }, + Incoming = {}, +} +Exports.InflowProfile = Union{ + Constant = { + velocity = Array(3,double), + }, + File = { + FileDir = String(256), + }, + Incoming = { + addedVelocity = double, + }, + SuctionAndBlowing = { + Xmin = double, + Xmax = double, + X0 = double, + sigma = double, + Zw = double, + A = UpTo(20, double), + omega = UpTo(20, double), + beta = UpTo(20, double), + }, +} +Exports.TurbForcingModel = Union{ + OFF = {}, + CHANNEL = { + RhoUbulk = double, + Forcing = double, + }, +} + +-- Sections of config struct +Exports.MappingStruct = { + -- number of tiles in which to split the domain + tiles = Array(3,int), + -- number of tiles to allocate to each rank + tilesPerRank = Array(3,int), + -- unique id assigned to each sample, according to its order in the command + -- line (first sample is 0, second is 1 etc.); the initial value of this + -- option is irrelevant, it will be overriden by the code + sampleId = int, + -- output directory for each sample; the initial value of this option is + -- irrelevant, it will be overriden by the code + outDir = String(256), + -- expected wall-clock execution time [minutes] + wallTime = int, +} + +Exports.GridStruct = { + -- number of cells in the fluid grid + xNum = int, + yNum = int, + zNum = int, + -- coordinates of the fluid grid's origin [m] + origin = Array(3,double), + -- width of the fluid grid [m] + xWidth = double, + yWidth = double, + zWidth = double, + -- grid type in each direction + xType = Exports.GridType, + yType = Exports.GridType, + zType = Exports.GridType, + -- grid stretching factor in each direction + xStretching = double, + yStretching = double, + zStretching = double, +} + +Exports.BCStruct = { + xBCLeft = Exports.FlowBC, + xBCLeftInflowProfile = Exports.InflowProfile, + xBCLeftP = double, + xBCLeftHeat = Exports.TempProfile, + xBCLeftMixture = Exports.MixtureProfile, + xBCRight = Exports.FlowBC, + xBCRightInflowProfile = Exports.InflowProfile, + xBCRightP = double, + xBCRightHeat = Exports.TempProfile, + xBCRightMixture = Exports.MixtureProfile, + yBCLeft = Exports.FlowBC, + yBCLeftInflowProfile = Exports.InflowProfile, + yBCLeftP = double, + yBCLeftHeat = Exports.TempProfile, + yBCLeftMixture = Exports.MixtureProfile, + yBCRight = Exports.FlowBC, + yBCRightInflowProfile = Exports.InflowProfile, + yBCRightP = double, + yBCRightHeat = Exports.TempProfile, + yBCRightMixture = Exports.MixtureProfile, + zBCLeft = Exports.FlowBC, + zBCLeftInflowProfile = Exports.InflowProfile, + zBCLeftP = double, + zBCLeftHeat = Exports.TempProfile, + zBCLeftMixture = Exports.MixtureProfile, + zBCRight = Exports.FlowBC, + zBCRightInflowProfile = Exports.InflowProfile, + zBCRightP = double, + zBCRightHeat = Exports.TempProfile, + zBCRightMixture = Exports.MixtureProfile, +} + +Exports.IntegratorStruct = { + startIter = int, + startTime = double, + resetTime = bool, + maxIter = int, + maxTime = double, + cfl = double, + fixedDeltaTime = double, + -- implicit or explicit approach for chemistry + implicitChemistry = bool, +} + +Exports.FlowStruct = { + mixture = String(20), + gasConstant = double, + gamma = double, + prandtl = double, + viscosityModel = Exports.ViscosityModel, + constantVisc = double, + powerlawViscRef = double, + powerlawTempRef = double, + sutherlandViscRef = double, + sutherlandTempRef = double, + sutherlandSRef = double, + initCase = Exports.FlowInitCase, + restartDir = String(256), + initParams = Array(5,double), + resetMixture = bool, + initMixture = Exports.Mixture, + bodyForce = Array(3,double), + turbForcing = Exports.TurbForcingModel, +} + +Exports.IOStruct = { + -- whether to write restart files (requires compiling with HDF support) + wrtRestart = bool, + -- how often to write restart files + restartEveryTimeSteps = int, + -- temperature probes + probes = UpTo(5, Exports.Volume), + -- One-diemnsional averages + AveragesSamplingInterval = int, + ResetAverages = bool, + YZAverages = UpTo(5, Exports.Volume), + XZAverages = UpTo(5, Exports.Volume), + XYAverages = UpTo(5, Exports.Volume), +} + +-- Main config struct +Exports.Config = { + Mapping = Exports.MappingStruct, + Grid = Exports.GridStruct, + BC = Exports.BCStruct, + Integrator = Exports.IntegratorStruct, + Flow = Exports.FlowStruct, + IO = Exports.IOStruct, +} + +return Exports diff --git a/src/desugar.py b/src/desugar.py new file mode 100755 index 0000000..31e4911 --- /dev/null +++ b/src/desugar.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python2 + +from itertools import count +import fileinput + +for (line, lineno) in zip(fileinput.input(), count(start=1)): + line = line[:-1] + line = line.replace('@ESCAPE', '[(function() local __quotes = terralib.newlist()') + line = line.replace('@EPACSE', 'return __quotes end)()];') + line = line.replace('@EMIT', '__quotes:insert(rquote') + line = line.replace('@TIME', 'end)') + line = line.replace('@LINE', str(lineno)) + print line diff --git a/src/hdf_helper.rg b/src/hdf_helper.rg new file mode 100644 index 0000000..b885920 --- /dev/null +++ b/src/hdf_helper.rg @@ -0,0 +1,555 @@ +-- Generate code for dumping/loading a subset of fields to/from an HDF file. +-- NOTE: +-- * Both functions require an intermediate region to perform the data +-- transfer. This region 's' must have the same size as 'r', and must be +-- partitioned in the same way. +-- * The dimensions will be flipped in the output file. +-- * You need to link to the HDF library to use these functions. + +import 'regent' + +------------------------------------------------------------------------------- +-- MODULE PARAMETERS +------------------------------------------------------------------------------- + +return function(indexType, -- regentlib.index_type + colorType, -- regentlib.index_type + fSpace, -- terralib.struct + flds, -- string* + attrs, -- map(string,terralib.type) + StringAttrs -- map(string,int) + ) + +local MODULE = {} +MODULE.read = {} +MODULE.write = {} + +------------------------------------------------------------------------------- +-- FALLBACK MODE +------------------------------------------------------------------------------- + +local USE_HDF = assert(os.getenv('USE_HDF')) ~= '0' + +if not USE_HDF then + + __demand(__inline) + task MODULE.dump(_ : int, + colors : ispace(colorType), + dirname : &int8, + r : region(ispace(indexType), fSpace), + s : region(ispace(indexType), fSpace), + p_r : partition(disjoint, r, colors), + p_s : partition(disjoint, s, colors)) + where reads(r.[flds]), reads writes(s.[flds]), r * s do + regentlib.assert(false, 'Recompile with USE_HDF=1') + return _ + end + + __demand(__inline) + task MODULE.load(_ : int, + colors : ispace(colorType), + dirname : &int8, + r : region(ispace(indexType), fSpace), + s : region(ispace(indexType), fSpace), + p_r : partition(disjoint, r, colors), + p_s : partition(disjoint, s, colors)) + where reads writes(r.[flds]), reads writes(s.[flds]), r * s do + regentlib.assert(false, 'Recompile with USE_HDF=1') + return _ + end + + for aName,aType in pairs(attrs) do + + local __demand(__inline) + task writeAttr(_ : int, + colors : ispace(colorType), + dirname : &int8, + r : region(ispace(indexType), fSpace), + p_r : partition(disjoint, r, colors), + aVal : aType) + regentlib.assert(false, 'Recompile with USE_HDF=1') + return _ + end + MODULE.write[aName] = writeAttr + + local __demand(__inline) + task readAttr(_ : int, + colors : ispace(colorType), + dirname : &int8, + r : region(ispace(indexType), fSpace), + p_r : partition(disjoint, r, colors)) + regentlib.assert(false, 'Recompile with USE_HDF=1') + return [aType](0) + end + MODULE.read[aName] = readAttr + + end + + for aName,aNum in pairs(StringAttrs) do + + local __demand(__inline) + task writeAttr(_ : int, + colors : ispace(colorType), + dirname : &int8, + r : region(ispace(indexType), fSpace), + p_r : partition(disjoint, r, colors), + Strings : regentlib.string[aNum]) + regentlib.assert(false, 'Recompile with USE_HDF=1') + return _ + end + MODULE.write[aName] = writeAttr + + end + + return MODULE +end + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- + +local C = regentlib.c +local HDF5 = terralib.includec(assert(os.getenv('HDF_HEADER'))) +local UTIL = require 'util-desugared' + +------------------------------------------------------------------------------- +-- CONSTANTS +------------------------------------------------------------------------------- + +-- HACK: Hardcoding missing #define's +HDF5.H5F_ACC_RDONLY = 0 +HDF5.H5F_ACC_RDWR = 1 +HDF5.H5F_ACC_TRUNC = 2 +HDF5.H5P_DEFAULT = 0 + +------------------------------------------------------------------------------- +-- MODULE-LOCAL TASKS +------------------------------------------------------------------------------- + +-- string, string? -> terralib.quote +local function err(action, fld) + if fld then + return quote + var stderr = C.fdopen(2, 'w') + C.fprintf(stderr, 'HDF5: Cannot %s for field %s\n', action, fld) + C.fflush(stderr) + C.exit(1) + end + else + return quote + var stderr = C.fdopen(2, 'w') + C.fprintf(stderr, 'HDF5: Cannot %s\n', action) + C.fflush(stderr) + C.exit(1) + end + end +end + +-- terralib.type -> terralib.expr +local function toPrimHType(T) + return + -- HACK: Hardcoding missing #define's + (T == int) and HDF5.H5T_STD_I32LE_g or + (T == int8) and HDF5.H5T_STD_I8LE_g or + (T == int16) and HDF5.H5T_STD_I16LE_g or + (T == int32) and HDF5.H5T_STD_I32LE_g or + (T == int64) and HDF5.H5T_STD_I64LE_g or + (T == uint) and HDF5.H5T_STD_U32LE_g or + (T == uint8) and HDF5.H5T_STD_U8LE_g or + (T == uint16) and HDF5.H5T_STD_U16LE_g or + (T == uint32) and HDF5.H5T_STD_U32LE_g or + (T == uint64) and HDF5.H5T_STD_U64LE_g or + (T == bool) and HDF5.H5T_STD_U8LE_g or + (T == float) and HDF5.H5T_IEEE_F32LE_g or + (T == double) and HDF5.H5T_IEEE_F64LE_g or + assert(false) +end + +local terra create(fname : &int8, size : indexType) + var fid = HDF5.H5Fcreate(fname, HDF5.H5F_ACC_TRUNC, + HDF5.H5P_DEFAULT, HDF5.H5P_DEFAULT) + if fid < 0 then [err('create file')] end + var dataSpace : HDF5.hid_t + escape + if indexType == int1d then + emit quote + var sizes : HDF5.hsize_t[1] + sizes[0] = size.__ptr + dataSpace = HDF5.H5Screate_simple(1, sizes, [&uint64](0)) + if dataSpace < 0 then [err('create 1d dataspace')] end + end + elseif indexType == int2d then + emit quote + -- Legion defaults to column-major layout, so we have to reverse. + var sizes : HDF5.hsize_t[2] + sizes[1] = size.__ptr.x + sizes[0] = size.__ptr.y + dataSpace = HDF5.H5Screate_simple(2, sizes, [&uint64](0)) + if dataSpace < 0 then [err('create 2d dataspace')] end + end + elseif indexType == int3d then + emit quote + -- Legion defaults to column-major layout, so we have to reverse. + var sizes : HDF5.hsize_t[3] + sizes[2] = size.__ptr.x + sizes[1] = size.__ptr.y + sizes[0] = size.__ptr.z + dataSpace = HDF5.H5Screate_simple(3, sizes, [&uint64](0)) + if dataSpace < 0 then [err('create 3d dataspace')] end + end + else assert(false) end + local header = terralib.newlist() -- terralib.quote* + local footer = terralib.newlist() -- terralib.quote* + -- terralib.type -> terralib.expr + local function toHType(T) + -- TODO: Not supporting: pointers, vectors, non-primitive arrays + if T:isprimitive() then + return toPrimHType(T) + elseif T:isarray() then + local elemType = toHType(T.type) + local arrayType = symbol(HDF5.hid_t, 'arrayType') + header:insert(quote + var dims : HDF5.hsize_t[1] + dims[0] = T.N + var elemType = [elemType] + var [arrayType] = HDF5.H5Tarray_create2(elemType, 1, dims) + if arrayType < 0 then [err('create array type')] end + end) + footer:insert(quote + HDF5.H5Tclose(arrayType) + end) + return arrayType + else assert(false) end + end + -- terralib.struct, set(string), string -> () + local function emitFieldDecls(fs, whitelist, prefix) + -- TODO: Only supporting pure structs, not fspaces + assert(fs:isstruct()) + for _,e in ipairs(fs.entries) do + local name, type = UTIL.parseStructEntry(e) + if whitelist and not whitelist[name] then + -- do nothing + elseif type == int2d then + -- Hardcode special case: int2d structs are stored packed + local hName = prefix..name + local int2dType = symbol(HDF5.hid_t, 'int2dType') + local dataSet = symbol(HDF5.hid_t, 'dataSet') + header:insert(quote + var [int2dType] = HDF5.H5Tcreate(HDF5.H5T_COMPOUND, 16) + if int2dType < 0 then [err('create 2d array type', name)] end + var x = HDF5.H5Tinsert(int2dType, "x", 0, HDF5.H5T_STD_I64LE_g) + if x < 0 then [err('add x to 2d array type', name)] end + var y = HDF5.H5Tinsert(int2dType, "y", 8, HDF5.H5T_STD_I64LE_g) + if y < 0 then [err('add y to 2d array type', name)] end + var [dataSet] = HDF5.H5Dcreate2( + fid, hName, int2dType, dataSpace, + HDF5.H5P_DEFAULT, HDF5.H5P_DEFAULT, HDF5.H5P_DEFAULT) + if dataSet < 0 then [err('register 2d array type', name)] end + end) + footer:insert(quote + HDF5.H5Dclose(dataSet) + HDF5.H5Tclose(int2dType) + end) + elseif type == int3d then + -- Hardcode special case: int3d structs are stored packed + local hName = prefix..name + local int3dType = symbol(HDF5.hid_t, 'int3dType') + local dataSet = symbol(HDF5.hid_t, 'dataSet') + header:insert(quote + var [int3dType] = HDF5.H5Tcreate(HDF5.H5T_COMPOUND, 24) + if int3dType < 0 then [err('create 3d array type', name)] end + var x = HDF5.H5Tinsert(int3dType, "x", 0, HDF5.H5T_STD_I64LE_g) + if x < 0 then [err('add x to 3d array type', name)] end + var y = HDF5.H5Tinsert(int3dType, "y", 8, HDF5.H5T_STD_I64LE_g) + if y < 0 then [err('add y to 3d array type', name)] end + var z = HDF5.H5Tinsert(int3dType, "z", 16, HDF5.H5T_STD_I64LE_g) + if z < 0 then [err('add z to 3d array type', name)] end + var [dataSet] = HDF5.H5Dcreate2( + fid, hName, int3dType, dataSpace, + HDF5.H5P_DEFAULT, HDF5.H5P_DEFAULT, HDF5.H5P_DEFAULT) + if dataSet < 0 then [err('register 3d array type', name)] end + end) + footer:insert(quote + HDF5.H5Dclose(dataSet) + HDF5.H5Tclose(int3dType) + end) + elseif type:isstruct() then + emitFieldDecls(type, nil, prefix..name..'.') + else + local hName = prefix..name + local hType = toHType(type) + local dataSet = symbol(HDF5.hid_t, 'dataSet') + header:insert(quote + var hType = [hType] + var [dataSet] = HDF5.H5Dcreate2( + fid, hName, hType, dataSpace, + HDF5.H5P_DEFAULT, HDF5.H5P_DEFAULT, HDF5.H5P_DEFAULT) + if dataSet < 0 then [err('register type', name)] end + end) + footer:insert(quote + HDF5.H5Dclose(dataSet) + end) + end + end + end + emitFieldDecls(fSpace, flds:toSet(), '') + emit quote [header] end + emit quote [footer:reverse()] end + end + HDF5.H5Sclose(dataSpace) + HDF5.H5Fclose(fid) +end + +local tileFilename +if indexType == int1d then + __demand(__inline) task tileFilename(dirname : &int8, bounds : rect1d) + var filename = [&int8](C.malloc(256)) + var lo = bounds.lo + var hi = bounds.hi + C.snprintf(filename, 256, + '%s/%ld-%ld.hdf', dirname, + lo, hi) + return filename + end +elseif indexType == int2d then + __demand(__inline) task tileFilename(dirname : &int8, bounds : rect2d) + var filename = [&int8](C.malloc(256)) + var lo = bounds.lo + var hi = bounds.hi + C.snprintf(filename, 256, + '%s/%ld,%ld-%ld,%ld.hdf', dirname, + lo.x, lo.y, hi.x, hi.y) + return filename + end +elseif indexType == int3d then + __demand(__inline) task tileFilename(dirname : &int8, bounds : rect3d) + var filename = [&int8](C.malloc(256)) + var lo = bounds.lo + var hi = bounds.hi + C.snprintf(filename, 256, + '%s/%ld,%ld,%ld-%ld,%ld,%ld.hdf', dirname, + lo.x, lo.y, lo.z, hi.x, hi.y, hi.z) + return filename + end +else assert(false) end + +local firstColor = + colorType == int1d and rexpr 0 end or + colorType == int2d and rexpr {0,0} end or + colorType == int3d and rexpr {0,0,0} end or + assert(false) + +local one = + indexType == int1d and rexpr 1 end or + indexType == int2d and rexpr {1,1} end or + indexType == int3d and rexpr {1,1,1} end or + assert(false) + +------------------------------------------------------------------------------- +-- EXPORTED TASKS +------------------------------------------------------------------------------- + +local -- NOT LEAF, MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +task dumpTile(_ : int, + dirname : regentlib.string, + r : region(ispace(indexType), fSpace), + s : region(ispace(indexType), fSpace)) +where reads(r.[flds]), reads writes(s.[flds]), r * s do + var filename = tileFilename([&int8](dirname), r.bounds) + create(filename, r.bounds.hi - r.bounds.lo + one) + attach(hdf5, s.[flds], filename, regentlib.file_read_write) + acquire(s.[flds]) + copy(r.[flds], s.[flds]) + release(s.[flds]) + detach(hdf5, s.[flds]) + C.free(filename) + return _ +end + +__demand(__inline) +task MODULE.dump(_ : int, + colors : ispace(colorType), + dirname : &int8, + r : region(ispace(indexType), fSpace), + s : region(ispace(indexType), fSpace), + p_r : partition(disjoint, r, colors), + p_s : partition(disjoint, s, colors)) +where reads(r.[flds]), reads writes(s.[flds]), r * s do + -- TODO: Sanity checks: bounds.lo == 0, same size, compatible partitions + var __ = 0 + for c in colors do + __ += dumpTile(_, dirname, p_r[c], p_s[c]) + end + return __ +end + +local -- NOT LEAF, MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +task loadTile(_ : int, + dirname : regentlib.string, + r : region(ispace(indexType), fSpace), + s : region(ispace(indexType), fSpace)) +where reads writes(r.[flds]), reads writes(s.[flds]), r * s do + var filename = tileFilename([&int8](dirname), r.bounds) + attach(hdf5, s.[flds], filename, regentlib.file_read_only) + acquire(s.[flds]) + copy(s.[flds], r.[flds]) + release(s.[flds]) + detach(hdf5, s.[flds]) + C.free(filename) + return _ +end + +__demand(__inline) +task MODULE.load(_ : int, + colors : ispace(colorType), + dirname : &int8, + r : region(ispace(indexType), fSpace), + s : region(ispace(indexType), fSpace), + p_r : partition(disjoint, r, colors), + p_s : partition(disjoint, s, colors)) +where reads writes(r.[flds]), reads writes(s.[flds]), r * s do + -- TODO: Sanity checks: bounds.lo == 0, same size, compatible partitions + -- TODO: Check that the file has the correct size etc. + var __ = 0 + for c in colors do + __ += loadTile(_, dirname, p_r[c], p_s[c]) + end + return __ +end + +for aName,aType in pairs(attrs) do + + local terra write(fname : &int8, aVal : aType) + var fid = HDF5.H5Fopen(fname, HDF5.H5F_ACC_RDWR, HDF5.H5P_DEFAULT) + if fid < 0 then [err('open file for attribute writing')] end + var sid = HDF5.H5Screate(HDF5.H5S_SCALAR) + if sid < 0 then [err('create attribute dataspace')] end + var aid = HDF5.H5Acreate2(fid, aName, [toPrimHType(aType)], sid, + HDF5.H5P_DEFAULT, HDF5.H5P_DEFAULT) + if aid < 0 then [err('create attribute')] end + var res = HDF5.H5Awrite(aid, [toPrimHType(aType)], &aVal) + if res < 0 then [err('write attribute')] end + HDF5.H5Aclose(aid) + HDF5.H5Sclose(sid) + HDF5.H5Fclose(fid) + end + + local __demand(__leaf) -- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP + task writeTileAttr(_ : int, + dirname : regentlib.string, + r : region(ispace(indexType), fSpace), + aVal : aType) + var filename = tileFilename([&int8](dirname), r.bounds) + write(filename, aVal) + return _ + end + + local __demand(__inline) + task writeAttr(_ : int, + colors : ispace(colorType), + dirname : &int8, + r : region(ispace(indexType), fSpace), + p_r : partition(disjoint, r, colors), + aVal : aType) + var __ = 0 + for c in colors do + __ += writeTileAttr(_, dirname, p_r[c], aVal) + end + return __ + end + MODULE.write[aName] = writeAttr + + local terra read(fname : &int8) : aType + var fid = HDF5.H5Fopen(fname, HDF5.H5F_ACC_RDONLY, HDF5.H5P_DEFAULT) + if fid < 0 then [err('open file for attribute writing')] end + var aid = HDF5.H5Aopen(fid, aName, HDF5.H5P_DEFAULT) + if aid < 0 then [err('open attribute')] end + var aVal : aType + var res = HDF5.H5Aread(aid, [toPrimHType(aType)], &aVal) + if res < 0 then [err('read attribute')] end + HDF5.H5Aclose(aid) + HDF5.H5Fclose(fid) + return aVal + end + + local __demand(__leaf) -- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP + task readTileAttr(_ : int, + dirname : regentlib.string, + r : region(ispace(indexType), fSpace)) + var filename = tileFilename([&int8](dirname), r.bounds) + return read(filename) + end + + local __demand(__inline) + task readAttr(_ : int, + colors : ispace(colorType), + dirname : &int8, + r : region(ispace(indexType), fSpace), + p_r : partition(disjoint, r, colors)) + -- TODO: Sanity checks: all files should have the same attribute value + return readTileAttr(_, dirname, p_r[firstColor]) + end + MODULE.read[aName] = readAttr + +end + +for aName,aNum in pairs(StringAttrs) do + + local aLenght = 20 -- Length of the written strings + + local terra write(fname : &int8, Strings : regentlib.string[aNum]) + var fid = HDF5.H5Fopen(fname, HDF5.H5F_ACC_RDWR, HDF5.H5P_DEFAULT) + if fid < 0 then [err('open file for string attribute writing')] end + var aSize : HDF5.hsize_t[1] + aSize[0] = aNum + var sid = HDF5.H5Screate_simple(1, aSize, [&uint64](0)) + if sid < 0 then [err('create string attribute dataspace')] end + var stringType = HDF5.H5Tcopy(HDF5.H5T_C_S1_g) + var res = HDF5.H5Tset_size (stringType, aLenght) + if res < 0 then [err('set attribute size')] end + var aid = HDF5.H5Acreate2(fid, aName, stringType, sid, + HDF5.H5P_DEFAULT, HDF5.H5P_DEFAULT) + if aid < 0 then [err('create attribute')] end + var attr : int8[aLenght][aNum] + for i = 0, aNum do + C.snprintf(attr[i], aLenght, Strings[i]) + end + res = HDF5.H5Awrite(aid, stringType, &attr) + if res < 0 then [err('write attribute')] end + HDF5.H5Aclose(aid) + HDF5.H5Sclose(sid) + HDF5.H5Fclose(fid) + end + + local __demand(__leaf) -- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP + task writeTileAttr(_ : int, + dirname : regentlib.string, + r : region(ispace(indexType), fSpace), + Strings : regentlib.string[aNum]) + var filename = tileFilename([&int8](dirname), r.bounds) + write(filename, Strings) + return _ + end + + local __demand(__inline) + task writeAttr(_ : int, + colors : ispace(colorType), + dirname : &int8, + r : region(ispace(indexType), fSpace), + p_r : partition(disjoint, r, colors), + Strings : regentlib.string[aNum]) + var __ = 0 + for c in colors do + __ += writeTileAttr(_, dirname, p_r[c], Strings) + end + return __ + end + MODULE.write[aName] = writeAttr + +end + +------------------------------------------------------------------------------- +-- MODULE END +------------------------------------------------------------------------------- + +return MODULE end diff --git a/src/jobscript_shared.sh b/src/jobscript_shared.sh new file mode 100644 index 0000000..ca5d589 --- /dev/null +++ b/src/jobscript_shared.sh @@ -0,0 +1,100 @@ +#!/bin/bash -eu + +############################################################################### +# Helper functions +############################################################################### + +function quit { + echo "$1" >&2 + exit 1 +} + +############################################################################### +# Derived options +############################################################################### + +# Compute unique job ID +if [[ ! -z "${PBS_JOBID:-}" ]]; then + JOBID="$PBS_JOBID" +elif [[ ! -z "${SLURM_JOBID:-}" ]]; then + JOBID="$SLURM_JOBID" +elif [[ ! -z "${LSB_JOBID:-}" ]]; then + JOBID="$LSB_JOBID" +else + JOBID="$(date +%s)" +fi + +# Create a directory on the scratch filesystem, for output (if $SCRATCH is +# defined, and the user hasn't specified an output directory explicitly). +OUT_DIR= +OUT_DIR_FOLLOWS=false +for ARG in $ARGS; do + if [[ "$OUT_DIR_FOLLOWS" == true ]]; then + OUT_DIR="$ARG" + break + elif [[ "$ARG" == "-o" ]]; then + OUT_DIR_FOLLOWS=true + fi +done +if [[ -z "$OUT_DIR" ]]; then + if [[ ! -z "${SCRATCH:-}" ]]; then + OUT_DIR="$SCRATCH"/"$JOBID" + mkdir "$OUT_DIR" + ARGS="$ARGS -o $OUT_DIR" + else + OUT_DIR=. + fi +fi +if [[ "$OUT_DIR" != "${OUT_DIR%[[:space:]]*}" ]]; then + quit "Cannot handle spaces in output directory" +fi +echo "Sending output to $OUT_DIR" + +# Prepare Legion configuration +CORES_PER_RANK=$(( CORES_PER_NODE / RANKS_PER_NODE )) +RAM_PER_RANK=$(( RAM_PER_NODE / RANKS_PER_NODE )) +THREADS_PER_RANK=$(( CORES_PER_RANK - RESERVED_CORES )) +if (( CORES_PER_NODE < RANKS_PER_NODE || + CORES_PER_NODE % RANKS_PER_NODE != 0 || + RESERVED_CORES >= CORES_PER_RANK )); then + quit "Cannot split $CORES_PER_NODE core(s) into $RANKS_PER_NODE rank(s)" +fi +if [[ "$USE_CUDA" == 1 ]]; then + GPUS_PER_RANK=$(( GPUS_PER_NODE / RANKS_PER_NODE )) + if (( GPUS_PER_NODE < RANKS_PER_NODE || + GPUS_PER_NODE % RANKS_PER_NODE != 0 )); then + quit "Cannot split $GPUS_PER_NODE GPU(s) into $RANKS_PER_NODE rank(s)" + fi +fi + +# Add debugging flags +DEBUG_OPTS= +if [[ "$DEBUG" == 1 ]]; then + DEBUG_OPTS="-ll:force_kthreads -logfile $OUT_DIR/%.log" +fi +# Add profiling flags +PROFILER_OPTS= +if [[ "$PROFILE" == 1 ]]; then + PROFILER_OPTS="-lg:prof $NUM_RANKS -lg:prof_logfile $OUT_DIR/prof_%.log" +fi +# Add CUDA options +GPU_OPTS= +if [[ "$USE_CUDA" == 1 ]]; then + GPU_OPTS="-ll:gpu $GPUS_PER_RANK -ll:fsize $FB_PER_GPU -ll:zsize 512 -ll:ib_zsize 512" +fi +# Add GASNET options +GASNET_OPTS= +if [[ "$LOCAL_RUN" == 0 ]]; then + GASNET_OPTS="-ll:ahandlers 4 -ll:rsize 0 -ll:ib_rsize 1024 -ll:gsize 0" +fi +# Synthesize final command +COMMAND="$EXECUTABLE $ARGS \ + $DEBUG_OPTS $PROFILER_OPTS \ + -ll:cpu 0 -ll:ocpu 1 -ll:onuma 0 -ll:okindhack -ll:othr $THREADS_PER_RANK \ + $GPU_OPTS \ + -ll:util 4 -ll:io 1 -ll:dma 2 \ + -ll:csize $RAM_PER_RANK \ + $GASNET_OPTS \ + -ll:stacksize 8 -ll:ostack 8 -lg:sched -1 -lg:hysteresis 0" +echo "Invoking Legion on $NUM_RANKS rank(s), $NUM_NODES node(s) ($RANKS_PER_NODE rank(s) per node), as follows:" +echo $COMMAND diff --git a/src/json.c b/src/json.c new file mode 100644 index 0000000..6012bad --- /dev/null +++ b/src/json.c @@ -0,0 +1,1011 @@ +/* vim: set et ts=3 sw=3 sts=3 ft=c: + * + * Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved. + * https://github.com/udp/json-parser + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +#include "json.h" + +#ifdef _MSC_VER + #ifndef _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_WARNINGS + #endif +#endif + +const struct _json_value json_value_none; + +#include +#include +#include +#include + +typedef unsigned int json_uchar; + +static unsigned char hex_value (json_char c) +{ + if (isdigit(c)) + return c - '0'; + + switch (c) { + case 'a': case 'A': return 0x0A; + case 'b': case 'B': return 0x0B; + case 'c': case 'C': return 0x0C; + case 'd': case 'D': return 0x0D; + case 'e': case 'E': return 0x0E; + case 'f': case 'F': return 0x0F; + default: return 0xFF; + } +} + +typedef struct +{ + unsigned long used_memory; + + unsigned int uint_max; + unsigned long ulong_max; + + json_settings settings; + int first_pass; + + const json_char * ptr; + unsigned int cur_line, cur_col; + +} json_state; + +static void * default_alloc (size_t size, int zero, void * user_data) +{ + return zero ? calloc (1, size) : malloc (size); +} + +static void default_free (void * ptr, void * user_data) +{ + free (ptr); +} + +static void * json_alloc (json_state * state, unsigned long size, int zero) +{ + if ((state->ulong_max - state->used_memory) < size) + return 0; + + if (state->settings.max_memory + && (state->used_memory += size) > state->settings.max_memory) + { + return 0; + } + + return state->settings.mem_alloc (size, zero, state->settings.user_data); +} + +static int new_value (json_state * state, + json_value ** top, json_value ** root, json_value ** alloc, + json_type type) +{ + json_value * value; + int values_size; + + if (!state->first_pass) + { + value = *top = *alloc; + *alloc = (*alloc)->_reserved.next_alloc; + + if (!*root) + *root = value; + + switch (value->type) + { + case json_array: + + if (value->u.array.length == 0) + break; + + if (! (value->u.array.values = (json_value **) json_alloc + (state, value->u.array.length * sizeof (json_value *), 0)) ) + { + return 0; + } + + value->u.array.length = 0; + break; + + case json_object: + + if (value->u.object.length == 0) + break; + + values_size = sizeof (*value->u.object.values) * value->u.object.length; + + if (! (value->u.object.values = (json_object_entry *) json_alloc + (state, values_size + ((unsigned long) value->u.object.values), 0)) ) + { + return 0; + } + + value->_reserved.object_mem = (*(char **) &value->u.object.values) + values_size; + + value->u.object.length = 0; + break; + + case json_string: + + if (! (value->u.string.ptr = (json_char *) json_alloc + (state, (value->u.string.length + 1) * sizeof (json_char), 0)) ) + { + return 0; + } + + value->u.string.length = 0; + break; + + default: + break; + }; + + return 1; + } + + if (! (value = (json_value *) json_alloc + (state, sizeof (json_value) + state->settings.value_extra, 1))) + { + return 0; + } + + if (!*root) + *root = value; + + value->type = type; + value->parent = *top; + + #ifdef JSON_TRACK_SOURCE + value->line = state->cur_line; + value->col = state->cur_col; + #endif + + if (*alloc) + (*alloc)->_reserved.next_alloc = value; + + *alloc = *top = value; + + return 1; +} + +#define whitespace \ + case '\n': ++ state.cur_line; state.cur_col = 0; \ + case ' ': case '\t': case '\r' + +#define string_add(b) \ + do { if (!state.first_pass) string [string_length] = b; ++ string_length; } while (0); + +#define line_and_col \ + state.cur_line, state.cur_col + +static const long + flag_next = 1 << 0, + flag_reproc = 1 << 1, + flag_need_comma = 1 << 2, + flag_seek_value = 1 << 3, + flag_escaped = 1 << 4, + flag_string = 1 << 5, + flag_need_colon = 1 << 6, + flag_done = 1 << 7, + flag_num_negative = 1 << 8, + flag_num_zero = 1 << 9, + flag_num_e = 1 << 10, + flag_num_e_got_sign = 1 << 11, + flag_num_e_negative = 1 << 12, + flag_line_comment = 1 << 13, + flag_block_comment = 1 << 14; + +json_value * json_parse_ex (json_settings * settings, + const json_char * json, + size_t length, + char * error_buf) +{ + json_char error [json_error_max]; + const json_char * end; + json_value * top, * root, * alloc = 0; + json_state state = { 0 }; + long flags; + long num_digits = 0, num_e = 0; + json_int_t num_fraction = 0; + + /* Skip UTF-8 BOM + */ + if (length >= 3 && ((unsigned char) json [0]) == 0xEF + && ((unsigned char) json [1]) == 0xBB + && ((unsigned char) json [2]) == 0xBF) + { + json += 3; + length -= 3; + } + + error[0] = '\0'; + end = (json + length); + + memcpy (&state.settings, settings, sizeof (json_settings)); + + if (!state.settings.mem_alloc) + state.settings.mem_alloc = default_alloc; + + if (!state.settings.mem_free) + state.settings.mem_free = default_free; + + memset (&state.uint_max, 0xFF, sizeof (state.uint_max)); + memset (&state.ulong_max, 0xFF, sizeof (state.ulong_max)); + + state.uint_max -= 8; /* limit of how much can be added before next check */ + state.ulong_max -= 8; + + for (state.first_pass = 1; state.first_pass >= 0; -- state.first_pass) + { + json_uchar uchar; + unsigned char uc_b1, uc_b2, uc_b3, uc_b4; + json_char * string = 0; + unsigned int string_length = 0; + + top = root = 0; + flags = flag_seek_value; + + state.cur_line = 1; + + for (state.ptr = json ;; ++ state.ptr) + { + json_char b = (state.ptr == end ? 0 : *state.ptr); + + if (flags & flag_string) + { + if (!b) + { sprintf (error, "Unexpected EOF in string (at %d:%d)", line_and_col); + goto e_failed; + } + + if (string_length > state.uint_max) + goto e_overflow; + + if (flags & flag_escaped) + { + flags &= ~ flag_escaped; + + switch (b) + { + case 'b': string_add ('\b'); break; + case 'f': string_add ('\f'); break; + case 'n': string_add ('\n'); break; + case 'r': string_add ('\r'); break; + case 't': string_add ('\t'); break; + case 'u': + + if (end - state.ptr < 4 || + (uc_b1 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b2 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b3 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b4 = hex_value (*++ state.ptr)) == 0xFF) + { + sprintf (error, "Invalid character value `%c` (at %d:%d)", b, line_and_col); + goto e_failed; + } + + uc_b1 = (uc_b1 << 4) | uc_b2; + uc_b2 = (uc_b3 << 4) | uc_b4; + uchar = (uc_b1 << 8) | uc_b2; + + if ((uchar & 0xF800) == 0xD800) { + json_uchar uchar2; + + if (end - state.ptr < 6 || (*++ state.ptr) != '\\' || (*++ state.ptr) != 'u' || + (uc_b1 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b2 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b3 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b4 = hex_value (*++ state.ptr)) == 0xFF) + { + sprintf (error, "Invalid character value `%c` (at %d:%d)", b, line_and_col); + goto e_failed; + } + + uc_b1 = (uc_b1 << 4) | uc_b2; + uc_b2 = (uc_b3 << 4) | uc_b4; + uchar2 = (uc_b1 << 8) | uc_b2; + + uchar = 0x010000 | ((uchar & 0x3FF) << 10) | (uchar2 & 0x3FF); + } + + if (sizeof (json_char) >= sizeof (json_uchar) || (uchar <= 0x7F)) + { + string_add ((json_char) uchar); + break; + } + + if (uchar <= 0x7FF) + { + if (state.first_pass) + string_length += 2; + else + { string [string_length ++] = 0xC0 | (uchar >> 6); + string [string_length ++] = 0x80 | (uchar & 0x3F); + } + + break; + } + + if (uchar <= 0xFFFF) { + if (state.first_pass) + string_length += 3; + else + { string [string_length ++] = 0xE0 | (uchar >> 12); + string [string_length ++] = 0x80 | ((uchar >> 6) & 0x3F); + string [string_length ++] = 0x80 | (uchar & 0x3F); + } + + break; + } + + if (state.first_pass) + string_length += 4; + else + { string [string_length ++] = 0xF0 | (uchar >> 18); + string [string_length ++] = 0x80 | ((uchar >> 12) & 0x3F); + string [string_length ++] = 0x80 | ((uchar >> 6) & 0x3F); + string [string_length ++] = 0x80 | (uchar & 0x3F); + } + + break; + + default: + string_add (b); + }; + + continue; + } + + if (b == '\\') + { + flags |= flag_escaped; + continue; + } + + if (b == '"') + { + if (!state.first_pass) + string [string_length] = 0; + + flags &= ~ flag_string; + string = 0; + + switch (top->type) + { + case json_string: + + top->u.string.length = string_length; + flags |= flag_next; + + break; + + case json_object: + + if (state.first_pass) + (*(json_char **) &top->u.object.values) += string_length + 1; + else + { + top->u.object.values [top->u.object.length].name + = (json_char *) top->_reserved.object_mem; + + top->u.object.values [top->u.object.length].name_length + = string_length; + + (*(json_char **) &top->_reserved.object_mem) += string_length + 1; + } + + flags |= flag_seek_value | flag_need_colon; + continue; + + default: + break; + }; + } + else + { + string_add (b); + continue; + } + } + + if (state.settings.settings & json_enable_comments) + { + if (flags & (flag_line_comment | flag_block_comment)) + { + if (flags & flag_line_comment) + { + if (b == '\r' || b == '\n' || !b) + { + flags &= ~ flag_line_comment; + -- state.ptr; /* so null can be reproc'd */ + } + + continue; + } + + if (flags & flag_block_comment) + { + if (!b) + { sprintf (error, "%d:%d: Unexpected EOF in block comment", line_and_col); + goto e_failed; + } + + if (b == '*' && state.ptr < (end - 1) && state.ptr [1] == '/') + { + flags &= ~ flag_block_comment; + ++ state.ptr; /* skip closing sequence */ + } + + continue; + } + } + else if (b == '/') + { + if (! (flags & (flag_seek_value | flag_done)) && top->type != json_object) + { sprintf (error, "%d:%d: Comment not allowed here", line_and_col); + goto e_failed; + } + + if (++ state.ptr == end) + { sprintf (error, "%d:%d: EOF unexpected", line_and_col); + goto e_failed; + } + + switch (b = *state.ptr) + { + case '/': + flags |= flag_line_comment; + continue; + + case '*': + flags |= flag_block_comment; + continue; + + default: + sprintf (error, "%d:%d: Unexpected `%c` in comment opening sequence", line_and_col, b); + goto e_failed; + }; + } + } + + if (flags & flag_done) + { + if (!b) + break; + + switch (b) + { + whitespace: + continue; + + default: + + sprintf (error, "%d:%d: Trailing garbage: `%c`", + state.cur_line, state.cur_col, b); + + goto e_failed; + }; + } + + if (flags & flag_seek_value) + { + switch (b) + { + whitespace: + continue; + + case ']': + + if (top && top->type == json_array) + flags = (flags & ~ (flag_need_comma | flag_seek_value)) | flag_next; + else + { sprintf (error, "%d:%d: Unexpected ]", line_and_col); + goto e_failed; + } + + break; + + default: + + if (flags & flag_need_comma) + { + if (b == ',') + { flags &= ~ flag_need_comma; + continue; + } + else + { + sprintf (error, "%d:%d: Expected , before %c", + state.cur_line, state.cur_col, b); + + goto e_failed; + } + } + + if (flags & flag_need_colon) + { + if (b == ':') + { flags &= ~ flag_need_colon; + continue; + } + else + { + sprintf (error, "%d:%d: Expected : before %c", + state.cur_line, state.cur_col, b); + + goto e_failed; + } + } + + flags &= ~ flag_seek_value; + + switch (b) + { + case '{': + + if (!new_value (&state, &top, &root, &alloc, json_object)) + goto e_alloc_failure; + + continue; + + case '[': + + if (!new_value (&state, &top, &root, &alloc, json_array)) + goto e_alloc_failure; + + flags |= flag_seek_value; + continue; + + case '"': + + if (!new_value (&state, &top, &root, &alloc, json_string)) + goto e_alloc_failure; + + flags |= flag_string; + + string = top->u.string.ptr; + string_length = 0; + + continue; + + case 't': + + if ((end - state.ptr) < 3 || *(++ state.ptr) != 'r' || + *(++ state.ptr) != 'u' || *(++ state.ptr) != 'e') + { + goto e_unknown_value; + } + + if (!new_value (&state, &top, &root, &alloc, json_boolean)) + goto e_alloc_failure; + + top->u.boolean = 1; + + flags |= flag_next; + break; + + case 'f': + + if ((end - state.ptr) < 4 || *(++ state.ptr) != 'a' || + *(++ state.ptr) != 'l' || *(++ state.ptr) != 's' || + *(++ state.ptr) != 'e') + { + goto e_unknown_value; + } + + if (!new_value (&state, &top, &root, &alloc, json_boolean)) + goto e_alloc_failure; + + flags |= flag_next; + break; + + case 'n': + + if ((end - state.ptr) < 3 || *(++ state.ptr) != 'u' || + *(++ state.ptr) != 'l' || *(++ state.ptr) != 'l') + { + goto e_unknown_value; + } + + if (!new_value (&state, &top, &root, &alloc, json_null)) + goto e_alloc_failure; + + flags |= flag_next; + break; + + default: + + if (isdigit (b) || b == '-') + { + if (!new_value (&state, &top, &root, &alloc, json_integer)) + goto e_alloc_failure; + + if (!state.first_pass) + { + while (isdigit (b) || b == '+' || b == '-' + || b == 'e' || b == 'E' || b == '.') + { + if ( (++ state.ptr) == end) + { + b = 0; + break; + } + + b = *state.ptr; + } + + flags |= flag_next | flag_reproc; + break; + } + + flags &= ~ (flag_num_negative | flag_num_e | + flag_num_e_got_sign | flag_num_e_negative | + flag_num_zero); + + num_digits = 0; + num_fraction = 0; + num_e = 0; + + if (b != '-') + { + flags |= flag_reproc; + break; + } + + flags |= flag_num_negative; + continue; + } + else + { sprintf (error, "%d:%d: Unexpected %c when seeking value", line_and_col, b); + goto e_failed; + } + }; + }; + } + else + { + switch (top->type) + { + case json_object: + + switch (b) + { + whitespace: + continue; + + case '"': + + if (flags & flag_need_comma) + { sprintf (error, "%d:%d: Expected , before \"", line_and_col); + goto e_failed; + } + + flags |= flag_string; + + string = (json_char *) top->_reserved.object_mem; + string_length = 0; + + break; + + case '}': + + flags = (flags & ~ flag_need_comma) | flag_next; + break; + + case ',': + + if (flags & flag_need_comma) + { + flags &= ~ flag_need_comma; + break; + } + + default: + sprintf (error, "%d:%d: Unexpected `%c` in object", line_and_col, b); + goto e_failed; + }; + + break; + + case json_integer: + case json_double: + + if (isdigit (b)) + { + ++ num_digits; + + if (top->type == json_integer || flags & flag_num_e) + { + if (! (flags & flag_num_e)) + { + if (flags & flag_num_zero) + { sprintf (error, "%d:%d: Unexpected `0` before `%c`", line_and_col, b); + goto e_failed; + } + + if (num_digits == 1 && b == '0') + flags |= flag_num_zero; + } + else + { + flags |= flag_num_e_got_sign; + num_e = (num_e * 10) + (b - '0'); + continue; + } + + top->u.integer = (top->u.integer * 10) + (b - '0'); + continue; + } + + num_fraction = (num_fraction * 10) + (b - '0'); + continue; + } + + if (b == '+' || b == '-') + { + if ( (flags & flag_num_e) && !(flags & flag_num_e_got_sign)) + { + flags |= flag_num_e_got_sign; + + if (b == '-') + flags |= flag_num_e_negative; + + continue; + } + } + else if (b == '.' && top->type == json_integer) + { + if (!num_digits) + { sprintf (error, "%d:%d: Expected digit before `.`", line_and_col); + goto e_failed; + } + + top->type = json_double; + top->u.dbl = (double) top->u.integer; + + num_digits = 0; + continue; + } + + if (! (flags & flag_num_e)) + { + if (top->type == json_double) + { + if (!num_digits) + { sprintf (error, "%d:%d: Expected digit after `.`", line_and_col); + goto e_failed; + } + + top->u.dbl += ((double) num_fraction) / (pow (10.0, (double) num_digits)); + } + + if (b == 'e' || b == 'E') + { + flags |= flag_num_e; + + if (top->type == json_integer) + { + top->type = json_double; + top->u.dbl = (double) top->u.integer; + } + + num_digits = 0; + flags &= ~ flag_num_zero; + + continue; + } + } + else + { + if (!num_digits) + { sprintf (error, "%d:%d: Expected digit after `e`", line_and_col); + goto e_failed; + } + + top->u.dbl *= pow (10.0, (double) + (flags & flag_num_e_negative ? - num_e : num_e)); + } + + if (flags & flag_num_negative) + { + if (top->type == json_integer) + top->u.integer = - top->u.integer; + else + top->u.dbl = - top->u.dbl; + } + + flags |= flag_next | flag_reproc; + break; + + default: + break; + }; + } + + if (flags & flag_reproc) + { + flags &= ~ flag_reproc; + -- state.ptr; + } + + if (flags & flag_next) + { + flags = (flags & ~ flag_next) | flag_need_comma; + + if (!top->parent) + { + /* root value done */ + + flags |= flag_done; + continue; + } + + if (top->parent->type == json_array) + flags |= flag_seek_value; + + if (!state.first_pass) + { + json_value * parent = top->parent; + + switch (parent->type) + { + case json_object: + + parent->u.object.values + [parent->u.object.length].value = top; + + break; + + case json_array: + + parent->u.array.values + [parent->u.array.length] = top; + + break; + + default: + break; + }; + } + + if ( (++ top->parent->u.array.length) > state.uint_max) + goto e_overflow; + + top = top->parent; + + continue; + } + } + + alloc = root; + } + + return root; + +e_unknown_value: + + sprintf (error, "%d:%d: Unknown value", line_and_col); + goto e_failed; + +e_alloc_failure: + + strcpy (error, "Memory allocation failure"); + goto e_failed; + +e_overflow: + + sprintf (error, "%d:%d: Too long (caught overflow)", line_and_col); + goto e_failed; + +e_failed: + + if (error_buf) + { + if (*error) + strcpy (error_buf, error); + else + strcpy (error_buf, "Unknown error"); + } + + if (state.first_pass) + alloc = root; + + while (alloc) + { + top = alloc->_reserved.next_alloc; + state.settings.mem_free (alloc, state.settings.user_data); + alloc = top; + } + + if (!state.first_pass) + json_value_free_ex (&state.settings, root); + + return 0; +} + +json_value * json_parse (const json_char * json, size_t length) +{ + json_settings settings = { 0 }; + return json_parse_ex (&settings, json, length, 0); +} + +void json_value_free_ex (json_settings * settings, json_value * value) +{ + json_value * cur_value; + + if (!value) + return; + + value->parent = 0; + + while (value) + { + switch (value->type) + { + case json_array: + + if (!value->u.array.length) + { + settings->mem_free (value->u.array.values, settings->user_data); + break; + } + + value = value->u.array.values [-- value->u.array.length]; + continue; + + case json_object: + + if (!value->u.object.length) + { + settings->mem_free (value->u.object.values, settings->user_data); + break; + } + + value = value->u.object.values [-- value->u.object.length].value; + continue; + + case json_string: + + settings->mem_free (value->u.string.ptr, settings->user_data); + break; + + default: + break; + }; + + cur_value = value; + value = value->parent; + settings->mem_free (cur_value, settings->user_data); + } +} + +void json_value_free (json_value * value) +{ + json_settings settings = { 0 }; + settings.mem_free = default_free; + json_value_free_ex (&settings, value); +} + diff --git a/src/json.h b/src/json.h new file mode 100644 index 0000000..f6549ec --- /dev/null +++ b/src/json.h @@ -0,0 +1,283 @@ + +/* vim: set et ts=3 sw=3 sts=3 ft=c: + * + * Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved. + * https://github.com/udp/json-parser + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +#ifndef _JSON_H +#define _JSON_H + +#ifndef json_char + #define json_char char +#endif + +#ifndef json_int_t + #ifndef _MSC_VER + #include + #define json_int_t int64_t + #else + #define json_int_t __int64 + #endif +#endif + +#include + +#ifdef __cplusplus + + #include + + extern "C" + { + +#endif + +typedef struct +{ + unsigned long max_memory; + int settings; + + /* Custom allocator support (leave null to use malloc/free) + */ + + void * (* mem_alloc) (size_t, int zero, void * user_data); + void (* mem_free) (void *, void * user_data); + + void * user_data; /* will be passed to mem_alloc and mem_free */ + + size_t value_extra; /* how much extra space to allocate for values? */ + +} json_settings; + +#define json_enable_comments 0x01 + +typedef enum +{ + json_none, + json_object, + json_array, + json_integer, + json_double, + json_string, + json_boolean, + json_null + +} json_type; + +extern const struct _json_value json_value_none; + +typedef struct _json_object_entry +{ + json_char * name; + unsigned int name_length; + + struct _json_value * value; + +} json_object_entry; + +typedef struct _json_value +{ + struct _json_value * parent; + + json_type type; + + union + { + int boolean; + json_int_t integer; + double dbl; + + struct + { + unsigned int length; + json_char * ptr; /* null terminated */ + + } string; + + struct + { + unsigned int length; + + json_object_entry * values; + + #if defined(__cplusplus) && __cplusplus >= 201103L + decltype(values) begin () const + { return values; + } + decltype(values) end () const + { return values + length; + } + #endif + + } object; + + struct + { + unsigned int length; + struct _json_value ** values; + + #if defined(__cplusplus) && __cplusplus >= 201103L + decltype(values) begin () const + { return values; + } + decltype(values) end () const + { return values + length; + } + #endif + + } array; + + } u; + + union + { + struct _json_value * next_alloc; + void * object_mem; + + } _reserved; + + #ifdef JSON_TRACK_SOURCE + + /* Location of the value in the source JSON + */ + unsigned int line, col; + + #endif + + + /* Some C++ operator sugar */ + + #ifdef __cplusplus + + public: + + inline _json_value () + { memset (this, 0, sizeof (_json_value)); + } + + inline const struct _json_value &operator [] (int index) const + { + if (type != json_array || index < 0 + || ((unsigned int) index) >= u.array.length) + { + return json_value_none; + } + + return *u.array.values [index]; + } + + inline const struct _json_value &operator [] (const char * index) const + { + if (type != json_object) + return json_value_none; + + for (unsigned int i = 0; i < u.object.length; ++ i) + if (!strcmp (u.object.values [i].name, index)) + return *u.object.values [i].value; + + return json_value_none; + } + + inline operator const char * () const + { + switch (type) + { + case json_string: + return u.string.ptr; + + default: + return ""; + }; + } + + inline operator json_int_t () const + { + switch (type) + { + case json_integer: + return u.integer; + + case json_double: + return (json_int_t) u.dbl; + + default: + return 0; + }; + } + + inline operator bool () const + { + if (type != json_boolean) + return false; + + return u.boolean != 0; + } + + inline operator double () const + { + switch (type) + { + case json_integer: + return (double) u.integer; + + case json_double: + return u.dbl; + + default: + return 0; + }; + } + + #endif + +} json_value; + +json_value * json_parse (const json_char * json, + size_t length); + +#define json_error_max 128 +json_value * json_parse_ex (json_settings * settings, + const json_char * json, + size_t length, + char * error); + +void json_value_free (json_value *); + + +/* Not usually necessary, unless you used a custom mem_alloc and now want to + * use a custom mem_free. + */ +void json_value_free_ex (json_settings * settings, + json_value *); + + +#ifdef __cplusplus + } /* extern "C" */ +#endif + +#endif + + diff --git a/src/lassen.lsf b/src/lassen.lsf new file mode 100644 index 0000000..f95623a --- /dev/null +++ b/src/lassen.lsf @@ -0,0 +1,22 @@ +#!/bin/bash -eu +#BSUB -J prometeo +##BSUB -alloc_flags smt1 + +CORES_PER_NODE=40 +RAM_PER_NODE=200000 +GPUS_PER_NODE=4 +FB_PER_GPU=12700 +source "$HTR_DIR"/src/jobscript_shared.sh +GPUS_PER_RANK="${GPUS_PER_RANK:-0}" + +export GASNET_NUM_QPS=1 +jsrun -n "$NUM_RANKS" -r "$RANKS_PER_NODE" -a 1 -c "$CORES_PER_RANK" -g "$GPUS_PER_RANK" -b rs \ + $COMMAND + +# Resources: +# 2 NUMA domains per node +# 20 cores per NUMA domain (2 more reserved for OS) +# 4-way SMT per core +# 128GB RAM per NUMA domain +# 2 Tesla V100 GPUs per NUMA domain +# 16GB FB per GPU diff --git a/src/math_utils.rg b/src/math_utils.rg new file mode 100644 index 0000000..c4dfe4a --- /dev/null +++ b/src/math_utils.rg @@ -0,0 +1,516 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +local Exports = {} + +local fabs = regentlib.fabs(double) +local max = regentlib.fmax +local min = regentlib.fmin +local pow = regentlib.pow(double) + +-- Row by column multiplication +Exports.mkMatMul = terralib.memoize(function(n) + local matMul + + local __demand (__inline) + task matMul(x : double[n], + A : double[n*n]) + var b : double[n] + for i=0, n do + b[i] = 0.0 + for j=0, n do + b[i] += A[i*n+j]*x[j] + end + end + return b + end + return matMul +end) + +-- LU decomposition +Exports.mkLUdec = terralib.memoize(function(n) + local LUdec, ludcmp, lubksb + + -- Data structures + local struct LUdec { + A : double[n*n] + ind : int[n] + sing : bool + } + + -- Computes LU decomposition + local __demand (__inline) + task ludcmp(LU : LUdec) + + var TINY = 1.0e-20 + var imax = 0 + var vv : double[n] + LU.sing = false + + for i = 0, n do + var big = 0.0 + for j = 0, n do + big max= fabs(LU.A[i*n+j]) + end +-- TODO : assertion is not supported by CUDA code generator +-- emit a bool for now +-- regentlib.assert(big ~= 0.0, "Singular matrix in ludcmp") + if (big == 0.0) then + LU.sing = true + end + vv[i] = 1.0/big + end + for j = 0, n do + for i = 0, j do + var sum = LU.A[i*n+j] + for k = 0, i do + sum -= LU.A[i*n+k]*LU.A[k*n+j] + end + LU.A[i*n+j] = sum + end + var big = 0.0 + for i = j, n do + var sum = LU.A[i*n+j] + for k = 0, j do + sum -= LU.A[i*n+k]*LU.A[k*n+j] + end + LU.A[i*n+j] = sum + var dum = vv[i]*fabs(sum) + if (dum >= big) then + big=dum + imax=i + end + end + if (j ~= imax) then + for k = 0, n do + var dum = LU.A[imax*n+k] + LU.A[imax*n+k ]= LU.A[j*n+k] + LU.A[j*n+k] = dum + end + vv[imax]=vv[j] + end + LU.ind[j] = imax + if (LU.A[j*n+j] == 0.0) then + LU.A[j*n+j] = TINY + end + if (j ~= n-1) then + var dum=1.0/(LU.A[j*n+j]) + for i = j+1, n do + LU.A[i*n+j] *= dum + end + end + end + return LU + end + + -- Backsubstitutes in the LU decomposed matrix + local __demand (__inline) + task lubksb(LU : LUdec, + b : double[n]) + var ii = 0 + for i = 0, n do + var ip = LU.ind[i] + var sum = b[ip] + b[ip] = b[i] + if (ii ~= 0) then + for j = ii-1, i do + sum -= LU.A[i*n+j]*b[j] + end + elseif (sum ~= 0.0) then + ii = i+1 + end + b[i]=sum + end + for i = n-1, -1, -1 do + var sum=b[i] + for j = i+1, n do + sum -= LU.A[i*n+j]*b[j] + end + b[i] = sum/LU.A[i*n+i] + end + return b + end + + return {LUdec, ludcmp, lubksb} +end) + +-- Matrix inversion using Gauss elimination +local mkInverseMatrix = terralib.memoize(function(n) + local InverseMatrix + + local __demand(__inline) + task InverseMatrix(A : double[n*n]) + var B : double[n*n] + for i=0, n do + for j=0, n do + B[i*n+j] = 0.0 + end + end + + -- Forward elimination + for i=0, n do + B[i*n+i] = 1.0 + var Ainv = 1.0/A[i*n+i] + for j=0, n do + B[i*n+j] *= Ainv + A[i*n+j] *= Ainv + end + for l=i+1, n do + var factor = A[l*n+i] + for j=0, n do + B[l*n+j] -= factor*B[i*n+j] + A[l*n+j] -= factor*A[i*n+j] + end + end + end + + -- Backward substitution + for i = n-1, -1, -1 do + for l=i+1, n do + var factor = A[i*n+l] + for j=0, n do + B[i*n+j] -= factor*B[l*n+j] + end + end + end + + return B + end + return InverseMatrix +end) + +--HO finite volume reconstruction +Exports.mkReconCoeff = terralib.memoize(function(n) + local reconCoeff + + __demand(__inline) + task reconCoeff(xc : double[n+1], xp : double) + -- Form the matrix + var A : double[n*n] + for i=0, n do + for j=0, n do + A[i*n+j] = (pow(xc[i+1], n-j) - pow(xc[i], n-j))/((n-j)*(xc[i+1] - xc[i])) + end + end + + -- Invert it + var B = [mkInverseMatrix(n)](A) + + -- Compute metrics + var coeff : double[n] + for i=0, n do + coeff[i] = 0.0 + for j=0, n do + coeff[i] += B[j*n+i]*pow(xp, (n-(j+1))) + end + end + return coeff + end + + return reconCoeff +end) + +--HO finite volume reconstruction with left Dirichlet BC +Exports.mkReconCoeffLeftBC = terralib.memoize(function(n) + local reconCoeff + + __demand(__inline) + task reconCoeff(xc : double[n], xp : double) + -- Form the matrix + var A : double[n*n] + for j=0, n do + A[j] = pow(xc[0], n-j-1) + end + for i=1, n do + for j=0, n do + A[i*n+j] = (pow(xc[i], n-j) - pow(xc[i-1], n-j))/((n-j)*(xc[i] - xc[i-1])) + end + end + + -- Invert it + var B = [mkInverseMatrix(n)](A) + + -- Compute metrics + var coeff : double[n] + for i=0, n do + coeff[i] = 0.0 + for j=0, n do + coeff[i] += B[j*n+i]*pow(xp, (n-(j+1))) + end + end + return coeff + end + + return reconCoeff +end) + +--HO finite volume reconstruction with right Dirichlet BC +Exports.mkReconCoeffRightBC = terralib.memoize(function(n) + local reconCoeff + + __demand(__inline) + task reconCoeff(xc : double[n], xp : double) + -- Form the matrix + var A : double[n*n] + for i=0, n-1 do + for j=0, n do + A[i*n+j] = (pow(xc[i+1], n-j) - pow(xc[i], n-j))/((n-j)*(xc[i+1] - xc[i])) + end + end + for j=0, n do + A[(n-1)*n+j] = pow(xc[n-1], n-j-1) + end + + -- Invert it + var B = [mkInverseMatrix(n)](A) + + -- Compute metrics + var coeff : double[n] + for i=0, n do + coeff[i] = 0.0 + for j=0, n do + coeff[i] += B[j*n+i]*pow(xp, (n-(j+1))) + end + end + return coeff + end + + return reconCoeff +end) + +-- Implicit Rosenbrock solver +-- See Numerical recipes in c for reference +Exports.mkRosenbrock = terralib.memoize(function(nEq, Fields, Vars, Unkowns, Data, rhs) + local Rosenbrock + + -- Algorithm paramenters + + local MAXSTP = 100000 + local MAXITS = 100 + local TOL = 1e-10 + local SAFETY = 0.9 + local GROW = 1.5 + local PGROW =-0.25 + local SHRNK = 0.5 + local PSHRNK =-1.0/3.0 + local ERRCON = 0.1296 + local GAM = 1.0/2.0 + local A21 = 2.0 + local A31 = 48.0/25.0 + local A32 = 6.0/25.0 + local C21 =-8.0 + local C31 = 372.0/25.0 + local C32 = 12.0/5.0 + local C41 =-112.0/125.0 + local C42 =-54.0/125.0 + local C43 =-2.0/5.0 + local B1 = 19.0/9.0 + local B2 = 1.0/2.0 + local B3 = 25.0/108.0 + local B4 = 125.0/108.0 + local E1 = 17.0/54.0 + local E2 = 7.0/36.0 + local E3 = 0.0 + local E4 = 125.0/108.0 + local C1X = 1.0/2.0 + local C2X =-3.0/2.0 + local C3X = 121.0/50.0 + local C4X = 29.0/250.0 + local A2X = 1.0 + local A3X = 3.0/5.0 + + -- Computes the jacobian with second order finite difference + local __demand (__inline) + task GetJacobian(Mesh : region(ispace(int3d), Fields), + c : int3d, + data : Data) + where + reads writes(Mesh.[Vars]) + do + + var EPS = 1.0e-6 + var DEL = 1.0e-14 + + var tmp = Mesh[c].[Unkowns] + + var Jac : double[nEq*nEq] + + for j = 0, nEq do + var h = Mesh[c].[Unkowns][j]*EPS + DEL + Mesh[c].[Unkowns][j] = tmp[j] + h + var hp = Mesh[c].[Unkowns][j] - tmp[j] + var fp = rhs(Mesh, c, data) + Mesh[c].[Unkowns][j] = tmp[j] - h + var hm = tmp[j] - Mesh[c].[Unkowns][j] + var fm = rhs(Mesh, c, data) + Mesh[c].[Unkowns][j] = tmp[j] + for i = 0, nEq do + Jac[i*nEq+j] = (fp[i] - fm[i])/(hp + hm) + end + end + return Jac + end + + -- LU decomposition tasks + local LUdec, ludcmp, lubksb = unpack(Exports.mkLUdec(nEq)) + + __demand (__inline) + task Rosenbrock( Mesh : region(ispace(int3d), Fields), + c : int3d, + dtTry : double, + DelT : double, + data : Data) + where + reads writes(Mesh.[Vars]) + do + var err : double[nEq] + var g1 : double[nEq] + var g2 : double[nEq] + var g3 : double[nEq] + var g4 : double[nEq] + + var finish = false + + var time = 0.0 + var dt = dtTry + + var fail = 0 + + for step = 0, MAXSTP do + + var t0 = time + var dtNext : double + + var Jac = GetJacobian(Mesh, c, data) + var dx = rhs(Mesh, c, data) + var xsav = Mesh[c].[Unkowns] + var dxsav = dx + + for jtry = 0, MAXITS do + var LU : LUdec + for i = 0, nEq do + for j = 0, nEq do + LU.A[i*nEq+j] = -Jac[i*nEq+j] + end + LU.A[i*nEq+i] = LU.A[i*nEq+i] + 1.0/(GAM*dt) + end + LU = ludcmp(LU) + if ( LU.sing == true ) then + fail = 1 + break + end + for i = 0, nEq do + g1[i] = dxsav[i]+dt*C1X*dx[i] + end + g1 = lubksb(LU, g1) + for i = 0, nEq do + Mesh[c].[Unkowns][i] = xsav[i]+A21*g1[i] + end + time = t0+A2X*dt + dx = rhs(Mesh, c, data) + for i = 0, nEq do + g2[i] = dx[i]+dt*C2X*dx[i]+C21*g1[i]/dt + end + g2 = lubksb(LU, g2) + for i = 0, nEq do + Mesh[c].[Unkowns][i] = xsav[i]+A31*g1[i]+A32*g2[i] + end + time = t0+A3X*dt + dx = rhs(Mesh, c, data) + for i = 0, nEq do + g3[i] = dx[i]+dt*C3X*dx[i]+(C31*g1[i]+C32*g2[i])/dt + end + g3 = lubksb(LU, g3) + for i = 0, nEq do + g4[i] = dx[i]+dt*C4X*dx[i]+(C41*g1[i]+C42*g2[i]+C43*g3[i])/dt + end + g4 = lubksb(LU ,g4) + for i = 0, nEq do + Mesh[c].[Unkowns][i] = xsav[i]+B1*g1[i]+B2*g2[i]+B3*g3[i]+B4*g4[i] + err[i] = E1*g1[i]+E2*g2[i]+E3*g3[i]+E4*g4[i] + end + time = t0+dt +-- TODO : assertion is not supported by CUDA code generator +-- emit an int for now +-- regentlib.assert(time ~= t0, "Stepsize not significant in Rosenbrock") + if ( time == t0 ) then + fail = 2 + break + end + + var errmax = 0.0 + for i = 0, nEq do + errmax max= fabs(err[i]) + end + errmax /= TOL + if (errmax <= 1.0 or finish) then + dtTry = dt +-- c.printf("Rosenbrock converged with dt = %g and errmax = %g\n", dt, errmax*TOL) + if (errmax > ERRCON) then + dtNext = SAFETY*dt*pow(errmax,PGROW) + else + dtNext = GROW*dt + end + break + else + dtNext = SAFETY*dt*pow(errmax,PSHRNK) + if (dt >= 0.0 ) then + dt = max(dtNext,SHRNK*dt) + else + dt = min(dtNext,SHRNK*dt) + end + end +-- TODO : assertion is not supported by CUDA code generator +-- emit an int for now +-- regentlib.assert(jtry ~= MAXITS-1, "Exceeded MAXITS in Rosenbrock") + if (jtry == MAXITS-1) then fail = 3 end + end + if ( DelT == time ) then finish = true end + if finish then break end + if ( fail==1 ) then break end + if ( dtNext*1.5 > DelT-time ) then + -- Force the algorithm to integrate till DelT + dt = DelT-time + finish = true + else + dt = dtNext + end +-- TODO : assertion is not supported by CUDA code generator +-- emit an int for now +-- regentlib.assert(step ~= MAXSTP-1, "Exceeded MAXSTP in Rosenbrock") + if ( step == MAXSTP-1 ) then fail = 4 end + end + return fail + end + return Rosenbrock +end) + +return Exports diff --git a/src/pizdaint.slurm b/src/pizdaint.slurm new file mode 100644 index 0000000..969d04a --- /dev/null +++ b/src/pizdaint.slurm @@ -0,0 +1,21 @@ +#!/bin/bash -eu +#SBATCH --job-name=prometeo +#SBATCH --constraint=gpu + +CORES_PER_NODE=12 +RAM_PER_NODE=50000 +GPUS_PER_NODE=1 +FB_PER_GPU=15000 + +source "$HTR_DIR"/src/jobscript_shared.sh + +srun -n "$NUM_RANKS" --ntasks-per-node="$RANKS_PER_NODE" --cpus-per-task="$CORES_PER_RANK" \ + --export=ALL \ + $COMMAND + +# Resources: +# 12 cores per node +# 2-way SMT per core +# 64GB RAM per node +# 1 Tesla P100 GPU per node +# 16GB FB per GPU diff --git a/src/process_schema.rg b/src/process_schema.rg new file mode 100644 index 0000000..fa825d5 --- /dev/null +++ b/src/process_schema.rg @@ -0,0 +1,494 @@ +local C = terralib.includecstring [[ +#include +#include +#include +]] +local JSON = terralib.includec('json.h') +local UTIL = require 'util-desugared' + +------------------------------------------------------------------------------- + +-- NOTE: Type constructors are placed in the global namespace, so the schema +-- file can access them without imports. + +local isStruct +local isSchemaT + +------------------------------------------------------------------------------- + +local StringMT = {} +StringMT.__index = StringMT + +-- int -> String +function String(maxLen) + assert(UTIL.isPosInt(maxLen)) + return setmetatable({ + maxLen = maxLen, + }, StringMT) +end + +-- SchemaT -> bool +local function isString(typ) + return type(typ) == 'table' and getmetatable(typ) == StringMT +end + +------------------------------------------------------------------------------- + +local EnumMT = {} +EnumMT.__index = EnumMT + +-- string* -> Enum +function Enum(...) + local enum = {} + for i,choice in ipairs({...}) do + assert(type(choice) == 'string') + enum[choice] = i-1 + end + return setmetatable(enum, EnumMT) +end + +-- SchemaT -> bool +local function isEnum(typ) + return type(typ) == 'table' and getmetatable(typ) == EnumMT +end + +------------------------------------------------------------------------------- + +local ArrayMT = {} +ArrayMT.__index = ArrayMT + +-- int, SchemaT -> Array +function Array(num, elemType) + assert(UTIL.isPosInt(num)) + assert(isSchemaT(elemType)) + return setmetatable({ + num = num, + elemType = elemType, + }, ArrayMT) +end + +-- SchemaT -> bool +local function isArray(typ) + return type(typ) == 'table' and getmetatable(typ) == ArrayMT +end + +------------------------------------------------------------------------------- + +local UpToMT = {} +UpToMT.__index = UpToMT + +-- int, SchemaT -> UpTo +function UpTo(max, elemType) + assert(UTIL.isPosInt(max)) + assert(isSchemaT(elemType)) + return setmetatable({ + max = max, + elemType = elemType, + }, UpToMT) +end + +-- SchemaT -> bool +local function isUpTo(typ) + return type(typ) == 'table' and getmetatable(typ) == UpToMT +end + +------------------------------------------------------------------------------- + +local UnionMT = {} +UnionMT.__index = UnionMT + +-- map(string,Struct) -> Union +function Union(choices) + for name,fields in pairs(choices) do + assert(type(name) == 'string') + assert(isStruct(fields)) + end + return setmetatable(UTIL.copyTable(choices), UnionMT) +end + +-- SchemaT -> bool +local function isUnion(typ) + return type(typ) == 'table' and getmetatable(typ) == UnionMT +end + +------------------------------------------------------------------------------- + +-- Struct = map(string,SchemaT) + +-- SchemaT -> bool +function isStruct(typ) + if type(typ) ~= 'table' or getmetatable(typ) ~= nil then + return false + end + for k,v in pairs(typ) do + if type(k) ~= 'string' or not isSchemaT(v) then + return false + end + end + return true +end + +------------------------------------------------------------------------------- + +-- SchemaT = 'bool' | 'int' | 'int64' | 'double' | String +-- | Enum | Array | UpTo | Union | Struct + +-- A -> bool +function isSchemaT(typ) + return + typ == bool or + typ == int or + typ == int64 or + typ == double or + isString(typ) or + isEnum(typ) or + isArray(typ) or + isUpTo(typ) or + isUnion(typ) or + isStruct(typ) +end + +------------------------------------------------------------------------------- + +-- SchemaT, map(SchemaT,terralib.type) -> terralib.type +local function convertSchemaT(typ, cache) + if cache[typ] then + return cache[typ] + end + if typ == bool then + return bool + elseif typ == int then + return int + elseif typ == int64 then + return int64 + elseif typ == double then + return double + elseif isString(typ) then + return int8[typ.maxLen] + elseif isEnum(typ) then + return int + elseif isArray(typ) then + return convertSchemaT(typ.elemType, cache)[typ.num] + elseif isUpTo(typ) then + return struct { + length : uint32; + values : convertSchemaT(typ.elemType, cache)[typ.max]; + } + elseif isUnion(typ) then + local u = terralib.types.newstruct() + u.entries:insert(terralib.newlist()) + for n,t in pairs(typ) do + u.entries[1]:insert({field=n, type=convertSchemaT(t, cache)}) + end + local s = terralib.types.newstruct() + s.entries:insert({field='type', type=int}) + s.entries:insert({field='u', type=u}) + return s + elseif isStruct(typ) then + local s = terralib.types.newstruct() + if UTIL.isEmpty(typ) then + s.entries:insert({field='__dummy', type=int}) + end + for n,t in pairs(typ) do + s.entries:insert({field=n, type=convertSchemaT(t, cache)}) + end + return s + else assert(false) end +end + +-- string, terralib.expr* -> terralib.quote +local function errorOut(msg, ...) + local args = {...} + return quote + var stderr = C.fdopen(2, 'w') + C.fprintf(stderr, [msg..'\n'], [args]) + C.fflush(stderr) + C.exit(1) + end +end + +-- string, terralib.expr -> terralib.quote +local function fldReadErr(msg, name) + return errorOut(msg..' for field %s', name) +end + +-- terralib.symbol, terralib.expr, terralib.expr, SchemaT -> terralib.quote +local function emitValueParser(name, lval, rval, typ) + if typ == bool then + return quote + if [rval].type ~= JSON.json_boolean then + [fldReadErr('Wrong type', name)] + end + [lval] = [bool]([rval].u.boolean) + end + elseif typ == int then + return quote + if [rval].type ~= JSON.json_integer then + [fldReadErr('Wrong type', name)] + end + if [int]([rval].u.integer) ~= [rval].u.integer then + [fldReadErr('Integer value overflow', name)] + end + [lval] = [rval].u.integer + end + elseif typ == int64 then + return quote + if [rval].type ~= JSON.json_integer then + [fldReadErr('Wrong type', name)] + end + [lval] = [rval].u.integer + end + elseif typ == double then + return quote + if [rval].type ~= JSON.json_double then + [fldReadErr('Wrong type', name)] + end + [lval] = [rval].u.dbl + end + elseif isString(typ) then + return quote + if [rval].type ~= JSON.json_string then + [fldReadErr('Wrong type', name)] + end + if [rval].u.string.length >= [typ.maxLen] then + [fldReadErr('String too long', name)] + end + C.strncpy([lval], [rval].u.string.ptr, [typ.maxLen]) + end + elseif isEnum(typ) then + return quote + if [rval].type ~= JSON.json_string then + [fldReadErr('Wrong type', name)] + end + var found = false + escape for choice,value in pairs(typ) do emit quote + if C.strcmp([rval].u.string.ptr, choice) == 0 then + [lval] = value + found = true + end + end end end + if not found then + [fldReadErr('Unexpected value', name)] + end + end + elseif isArray(typ) then + return quote + if [rval].type ~= JSON.json_array then + [fldReadErr('Wrong type', name)] + end + if [rval].u.array.length ~= [typ.num] then + [fldReadErr('Wrong length', name)] + end + for i = 0,[typ.num] do + var rval_i = [rval].u.array.values[i] + [emitValueParser(name..'[i]', `[lval][i], rval_i, typ.elemType)] + end + end + elseif isUpTo(typ) then + return quote + if [rval].type ~= JSON.json_array then + [fldReadErr('Wrong type', name)] + end + if [rval].u.array.length > [typ.max] then + [fldReadErr('Too many values', name)] + end + [lval].length = [rval].u.array.length + for i = 0,[rval].u.array.length do + var rval_i = [rval].u.array.values[i] + [emitValueParser(name..'[i]', `[lval].values[i], rval_i, typ.elemType)] + end + end + elseif isUnion(typ) then + return quote + if [rval].type ~= JSON.json_object then + [fldReadErr('Wrong type', name)] + end + var foundType = false + for i = 0,[rval].u.object.length do + var nodeName = [rval].u.object.values[i].name + var nodeValue = [rval].u.object.values[i].value + if C.strcmp(nodeName, 'type') == 0 then + foundType = true + if nodeValue.type ~= JSON.json_string then + [fldReadErr('Type field on union not a string', name)] + end + escape local j = 0; for choice,fields in pairs(typ) do emit quote + if C.strcmp(nodeValue.u.string.ptr, [choice]) == 0 then + [lval].type = [j] + [emitValueParser(name, `[lval].u.[choice], rval, fields)] + break + end + end j = j + 1; end end + [fldReadErr('Unrecognized type on union', name)] + end + end + if not foundType then + [fldReadErr('Missing type field on union', name)] + end + end + elseif isStruct(typ) then + return quote + var totalParsed = 0 + if [rval].type ~= JSON.json_object then + [fldReadErr('Wrong type', name)] + end + for i = 0,[rval].u.object.length do + var nodeName = [rval].u.object.values[i].name + var nodeValue = [rval].u.object.values[i].value + var parsed = false + escape for fld,subTyp in pairs(typ) do emit quote + if C.strcmp(nodeName, fld) == 0 then + [emitValueParser(name..'.'..fld, `[lval].[fld], nodeValue, subTyp)] + parsed = true + end + end end end + if parsed then + totalParsed = totalParsed + 1 + elseif C.strcmp(nodeName, 'type') ~= 0 then + var stderr = C.fdopen(2, 'w') + C.fprintf( + stderr, ['Warning: Ignoring option '..name..'.%s\n'], nodeName) + end + end + -- TODO: Assuming the json file contains no duplicate values + if totalParsed < [UTIL.tableSize(typ)] then + [errorOut('Missing fields from input file')] + end + end + else assert(false) end +end + +------------------------------------------------------------------------------- + +local ext = '.lua' +if #arg < 1 or not arg[1]:endswith(ext) then + print('Usage: '..arg[0]..' ') + os.exit(1) +end +local baseName = arg[1]:sub(1, arg[1]:len() - ext:len()) + +local SCHEMA = dofile(arg[1]) -- map(string,SchemaT) + +local type2name = {} -- map(Struct,string) +for name,typ in pairs(SCHEMA) do + if isStruct(typ) then + type2name[typ] = name + end +end + +local deps = {} -- map(string,string*) +for srcN,srcT in pairs(SCHEMA) do + if isStruct(srcT) then + deps[srcN] = terralib.newlist() + local function traverse(tgtT) + local tgtN = type2name[tgtT] + if tgtN and srcN ~= tgtN then + deps[srcN]:insert(tgtN) + return + end + if tgtT == bool then + -- Do nothing + elseif tgtT == int then + -- Do nothing + elseif tgtT == int64 then + -- Do nothing + elseif tgtT == double then + -- Do nothing + elseif isString(tgtT) then + -- Do nothing + elseif isEnum(tgtT) then + -- Do nothing + elseif isArray(tgtT) then + traverse(tgtT.elemType) + elseif isUpTo(tgtT) then + traverse(tgtT.elemType) + elseif isUnion(tgtT) then + for n,t in pairs(tgtT) do + traverse(t) + end + elseif isStruct(tgtT) then + for n,t in pairs(tgtT) do + traverse(t) + end + else assert(false) end + end + traverse(srcT) + end +end +local sortedNames = UTIL.revTopoSort(deps) -- string* + +local type2terra = {} -- map(Struct,terralib.struct) +local parsers = {} -- map(string,terralib.function) +for _,name in ipairs(sortedNames) do + local typ = SCHEMA[name] + local st = convertSchemaT(typ, type2terra) + st.name = name + type2terra[typ] = st + parsers['parse_'..name] = terra(output : &st, fname : &int8) + var f = C.fopen(fname, 'r') + if f == nil then [errorOut('Cannot open %s', fname)] end + var res1 = C.fseek(f, 0, C.SEEK_END) + if res1 ~= 0 then [errorOut('Cannot seek to end of %s', fname)] end + var len = C.ftell(f) + if len < 0 then [errorOut('Cannot ftell %s', fname)] end + var res2 = C.fseek(f, 0, C.SEEK_SET) + if res2 ~= 0 then [errorOut('Cannot seek to start of %s', fname)] end + var buf = [&int8](C.malloc(len)) + if buf == nil then [errorOut('Malloc error while parsing %s', fname)] end + var res3 = C.fread(buf, 1, len, f) + if res3 < len then [errorOut('Cannot read from %s', fname)] end + C.fclose(f) + var errMsg : int8[256] + var settings = JSON.json_settings{ 0, 0, nil, nil, nil, 0 } + settings.settings = JSON.json_enable_comments + var root = JSON.json_parse_ex(&settings, buf, len, errMsg) + if root == nil then [errorOut('JSON parsing error: %s', errMsg)] end + [emitValueParser(name, output, root, typ)] + JSON.json_value_free(root) + C.free(buf) + end +end + +local hdrFile = io.open(baseName..'.h', 'w') +hdrFile:write('// DO NOT EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED\n') +hdrFile:write('\n') +hdrFile:write('#ifndef __'..string.upper(baseName)..'_H__\n') +hdrFile:write('#define __'..string.upper(baseName)..'_H__\n') +hdrFile:write('\n') +hdrFile:write('#include \n') +hdrFile:write('#include \n') +for name,typ in pairs(SCHEMA) do + if isEnum(typ) then + hdrFile:write('\n') + hdrFile:write('typedef int '..name..';\n') + for choice,value in pairs(typ) do + hdrFile:write('#define '..name..'_'..choice..' '..value..'\n') + end + elseif isUnion(typ) then + hdrFile:write('\n') + hdrFile:write('typedef int '..name..';\n') + local i = 0 + for choice,_ in pairs(typ) do + hdrFile:write('#define '..name..'_'..choice..' '..i..'\n') + i = i + 1 + end + end +end +for _,name in ipairs(sortedNames) do + local st = type2terra[SCHEMA[name]] + hdrFile:write('\n') + hdrFile:write(UTIL.prettyPrintStruct(st, true)..';\n') + hdrFile:write('\n') + hdrFile:write('#ifdef __cplusplus\n') + hdrFile:write('extern "C" {\n') + hdrFile:write('#endif\n') + hdrFile:write('void parse_'..name..'(struct '..name..'*, char*);\n') + hdrFile:write('#ifdef __cplusplus\n') + hdrFile:write('}\n') + hdrFile:write('#endif\n') +end +hdrFile:write('\n') +hdrFile:write('#endif // __'..string.upper(baseName)..'_H__\n') +hdrFile:close() + +terralib.saveobj(baseName..'.o', 'object', parsers) diff --git a/src/prometeo.rg b/src/prometeo.rg new file mode 100644 index 0000000..a60449f --- /dev/null +++ b/src/prometeo.rg @@ -0,0 +1,2674 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- + +local C = regentlib.c +local MAPPER = terralib.includec("prometeo_mapper.h") +local SCHEMA = terralib.includec("config_schema.h") +local UTIL = require 'util-desugared' + +------------------------------------------------------------------------------- +-- IMPORT MIXTURE +------------------------------------------------------------------------------- + +local MIX +if (os.getenv("EOS") == "ConstPropMix") then + MIX = (require "ConstPropMix")(SCHEMA) +elseif (os.getenv("EOS") == "AirMix") then + MIX = (require 'AirMix')(SCHEMA) +elseif (os.getenv("EOS") == nil) then + error ("You must define EOS enviromnment variable") +else + error ("Unrecognized mixture: " .. os.getenv("EOS")) +end + +------------------------------------------------------------------------------- +-- DATA STRUCTURES +------------------------------------------------------------------------------- + +local Config = SCHEMA.Config +--local MultiConfig = SCHEMA.MultiConfig + +------------------------------------------------------------------------------- +-- CONSTANTS +------------------------------------------------------------------------------- +local CONST = require "prometeo_const" + +-- Runge-Kutta coeffients +local RK_C = CONST.RK_C + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture +local irU = CONST.GetirU(MIX) -- Index of the momentum in Conserved vector +local irE = CONST.GetirE(MIX) -- Index of the total energy density in Conserved vector +local nEq = CONST.GetnEq(MIX) -- Total number of unknowns for the implicit solver + +-- Stencil indices +local Stencil1 = CONST.Stencil1 +local Stencil2 = CONST.Stencil2 +local Stencil3 = CONST.Stencil3 +local Stencil4 = CONST.Stencil4 +local nStencils = CONST.nStencils + +------------------------------------------------------------------------------- +-- DATA STRUCTURES +------------------------------------------------------------------------------- + +local struct Fluid_columns { + -- Grid point + centerCoordinates : double[3]; + cellWidth : double[3]; + -- Face reconstruction operators [c-2, ..., c+3] + reconXFacePlus : double[nStencils*6]; + reconYFacePlus : double[nStencils*6]; + reconZFacePlus : double[nStencils*6]; + reconXFaceMinus : double[nStencils*6]; + reconYFaceMinus : double[nStencils*6]; + reconZFaceMinus : double[nStencils*6]; + -- Blending coefficients to obtain sixth order reconstruction + TENOCoeffsXPlus : double[nStencils]; + TENOCoeffsYPlus : double[nStencils]; + TENOCoeffsZPlus : double[nStencils]; + TENOCoeffsXMinus : double[nStencils]; + TENOCoeffsYMinus : double[nStencils]; + TENOCoeffsZMinus : double[nStencils]; + -- Flags for modified reconstruction on BCs + BCStencilX : bool; + BCStencilY : bool; + BCStencilZ : bool; + -- Face interpolation operator [c, c+1] + interpXFace : double[2]; + interpYFace : double[2]; + interpZFace : double[2]; + -- Face derivative operator [c+1 - c] + derivXFace : double; + derivYFace : double; + derivZFace : double; + -- Cell center gradient operator [c - c-1, c+1 - c] + gradX : double[2]; + gradY : double[2]; + gradZ : double[2]; + -- Properties + rho : double; + mu : double; + lam : double; + Di : double[nSpec]; + SoS : double; + -- Primitive variables + pressure : double; + temperature : double; + MolarFracs : double[nSpec]; + velocity : double[3]; + -- Gradients + velocityGradientX : double[3]; + velocityGradientY : double[3]; + velocityGradientZ : double[3]; + temperatureGradient : double[3]; + -- Conserved varaibles + Conserved : double[nEq]; + Conserved_old : double[nEq]; + Conserved_hat : double[nEq]; + Conserved_t : double[nEq]; + Conserved_t_old : double[nEq]; + -- Fluxes + EulerFluxX : double[nEq]; + EulerFluxY : double[nEq]; + EulerFluxZ : double[nEq]; + FluxX : double[nEq]; + FluxY : double[nEq]; + FluxZ : double[nEq]; + FluxXCorr : double[nEq]; + FluxYCorr : double[nEq]; + FluxZCorr : double[nEq]; + -- NSCBC variables + dudtBoundary : double; + dTdtBoundary : double; + velocity_old_NSCBC : double[3]; + temperature_old_NSCBC : double; + -- Injected profile variables + MolarFracs_profile : double[nSpec]; + velocity_profile : double[3]; + temperature_profile : double; +} + +local IOVars = terralib.newlist({ + 'centerCoordinates', + 'cellWidth', + 'rho', + 'pressure', + 'temperature', + 'MolarFracs', + 'velocity', + 'dudtBoundary', + 'dTdtBoundary', + 'velocity_old_NSCBC', + 'temperature_old_NSCBC' +}) + +fspace grid_partitions(Fluid : region(ispace(int3d), Fluid_columns), tiles : ispace(int3d)) { + -- Partitions + p_All : partition(disjoint, Fluid, tiles), + p_Interior : partition(disjoint, Fluid, tiles), + p_AllGhost : partition(disjoint, Fluid, tiles), + -- Partitions for reconstruction operator +-- TODO: store *_face as subregions of Fluid + x_faces : partition(disjoint, Fluid, ispace(int1d)), + y_faces : partition(disjoint, Fluid, ispace(int1d)), + z_faces : partition(disjoint, Fluid, ispace(int1d)), + p_x_faces : cross_product(x_faces, p_All), + p_y_faces : cross_product(y_faces, p_All), + p_z_faces : cross_product(z_faces, p_All), + -- Partitions for divergence operator +-- TODO: store *_divg as subregions of Fluid +-- x_divg : region(ispace(int3d), Fluid_columns), +-- y_divg : region(ispace(int3d), Fluid_columns), +-- z_divg : region(ispace(int3d), Fluid_columns), +-- p_x_divg : partition(disjoint, x_divg, tiles), +-- p_y_divg : partition(disjoint, y_divg, tiles), +-- p_z_divg : partition(disjoint, z_divg, tiles), + x_divg : partition(disjoint, Fluid, ispace(int1d)), + y_divg : partition(disjoint, Fluid, ispace(int1d)), + z_divg : partition(disjoint, Fluid, ispace(int1d)), + p_x_divg : cross_product(x_divg, p_All), + p_y_divg : cross_product(y_divg, p_All), + p_z_divg : cross_product(z_divg, p_All), + p_solved : partition(disjoint, Fluid, tiles), + -- BC partitions + xNeg : partition(disjoint, Fluid, ispace(int1d)), + xPos : partition(disjoint, Fluid, ispace(int1d)), + yNeg : partition(disjoint, Fluid, ispace(int1d)), + yPos : partition(disjoint, Fluid, ispace(int1d)), + zNeg : partition(disjoint, Fluid, ispace(int1d)), + zPos : partition(disjoint, Fluid, ispace(int1d)), + p_xNeg : cross_product(p_All, xNeg), + p_xPos : cross_product(p_All, xPos), + p_yNeg : cross_product(p_All, yNeg), + p_yPos : cross_product(p_All, yPos), + p_zNeg : cross_product(p_All, zNeg), + p_zPos : cross_product(p_All, zPos) +} +--where +-- x_divg <= Fluid, +-- y_divg <= Fluid, +-- z_divg <= Fluid +--end + +------------------------------------------------------------------------------- +-- EXTERNAL MODULES IMPORTS +------------------------------------------------------------------------------- + +local HDF = (require 'hdf_helper')(int3d, int3d, Fluid_columns, + IOVars, + {timeStep=int,simTime=double,channelForcing=double}, + {SpeciesNames=nSpec}) + +-- Macro +local MACRO = require "prometeo_macro" + +-- Mesh routines +local GRID = (require 'prometeo_grid')(SCHEMA, Fluid_columns) + +-- Metric routines +local METRIC = (require 'prometeo_metric')(SCHEMA, Fluid_columns) + +-- Initialization routines +local INIT = (require 'prometeo_init')(SCHEMA, MIX, Fluid_columns) + +-- I/O rutines +local IO = (require 'prometeo_IO')(SCHEMA) + +-- Stability conditions rutines +local CFL = (require 'prometeo_cfl')(MIX, Fluid_columns) + +-- Chemistry rutines +local CHEM = (require 'prometeo_chem')(SCHEMA, MIX, Fluid_columns) + +-- Conserved->Primitives/Primitives->Conserved and properties rutines +local VARS = (require 'prometeo_variables')(SCHEMA, MIX, Fluid_columns) + +-- Fluxes rutines +local FLUX = (require 'prometeo_flux')(SCHEMA, MIX, Fluid_columns) + +-- BCOND rutines +local BCOND = (require 'prometeo_bc')(SCHEMA, MIX, Fluid_columns, grid_partitions) + +-- RK rutines +local RK = (require 'prometeo_rk')(nEq, Fluid_columns) + +-- RHS rutines +local RHS = (require 'prometeo_rhs')(SCHEMA, MIX, Fluid_columns) + +-- Volume averages rutines +local STAT = (require 'prometeo_stat')(MIX, Fluid_columns) + +-- Profiles rutines +local PROFILES = (require 'prometeo_profiles')(SCHEMA, MIX, Fluid_columns) + +-- Averages rutines +local AVG = (require 'prometeo_average')(SCHEMA, MIX, Fluid_columns) + +------------------------------------------------------------------------------- +-- INITIALIZATION ROUTINES +------------------------------------------------------------------------------- + +__demand(__inline) +task InitializeCell(Fluid : region(ispace(int3d), Fluid_columns)) +where + writes(Fluid) +do + fill(Fluid.centerCoordinates, array(0.0, 0.0, 0.0)) + fill(Fluid.cellWidth, array(0.0, 0.0, 0.0)) + fill(Fluid.reconXFacePlus, [UTIL.mkArrayConstant(nStencils*6, rexpr 0.0 end)]) + fill(Fluid.reconYFacePlus, [UTIL.mkArrayConstant(nStencils*6, rexpr 0.0 end)]) + fill(Fluid.reconZFacePlus, [UTIL.mkArrayConstant(nStencils*6, rexpr 0.0 end)]) + fill(Fluid.reconXFaceMinus, [UTIL.mkArrayConstant(nStencils*6, rexpr 0.0 end)]) + fill(Fluid.reconYFaceMinus, [UTIL.mkArrayConstant(nStencils*6, rexpr 0.0 end)]) + fill(Fluid.reconZFaceMinus, [UTIL.mkArrayConstant(nStencils*6, rexpr 0.0 end)]) + fill(Fluid.TENOCoeffsXPlus, [UTIL.mkArrayConstant(nStencils, rexpr 0.0 end)]) + fill(Fluid.TENOCoeffsYPlus, [UTIL.mkArrayConstant(nStencils, rexpr 0.0 end)]) + fill(Fluid.TENOCoeffsZPlus, [UTIL.mkArrayConstant(nStencils, rexpr 0.0 end)]) + fill(Fluid.TENOCoeffsXMinus, [UTIL.mkArrayConstant(nStencils, rexpr 0.0 end)]) + fill(Fluid.TENOCoeffsYMinus, [UTIL.mkArrayConstant(nStencils, rexpr 0.0 end)]) + fill(Fluid.TENOCoeffsZMinus, [UTIL.mkArrayConstant(nStencils, rexpr 0.0 end)]) + fill(Fluid.BCStencilX, false) + fill(Fluid.BCStencilY, false) + fill(Fluid.BCStencilZ, false) + fill(Fluid.interpXFace, array(0.0, 0.0)) + fill(Fluid.interpYFace, array(0.0, 0.0)) + fill(Fluid.interpZFace, array(0.0, 0.0)) + fill(Fluid.derivXFace, 0.0) + fill(Fluid.derivYFace, 0.0) + fill(Fluid.derivZFace, 0.0) + fill(Fluid.gradX, array(0.0, 0.0)) + fill(Fluid.gradY, array(0.0, 0.0)) + fill(Fluid.gradZ, array(0.0, 0.0)) + fill(Fluid.rho, 0.0) + fill(Fluid.mu , 0.0) + fill(Fluid.lam, 0.0) + fill(Fluid.Di , [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Fluid.SoS, 0.0) + fill(Fluid.pressure, 0.0) + fill(Fluid.temperature, 0.0) + fill(Fluid.MolarFracs, [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Fluid.velocity, array(0.0, 0.0, 0.0)) + fill(Fluid.velocityGradientX, array(0.0, 0.0, 0.0)) + fill(Fluid.velocityGradientY, array(0.0, 0.0, 0.0)) + fill(Fluid.velocityGradientZ, array(0.0, 0.0, 0.0)) + fill(Fluid.temperatureGradient, array(0.0, 0.0, 0.0)) + fill(Fluid.Conserved, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.Conserved_old, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.Conserved_hat, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.Conserved_t, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.Conserved_t_old, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.EulerFluxX, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.EulerFluxY, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.EulerFluxZ, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.FluxX, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.FluxY, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.FluxZ, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.FluxXCorr, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.FluxYCorr, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.FluxZCorr, [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)]) + fill(Fluid.dudtBoundary, 0.0) + fill(Fluid.dTdtBoundary, 0.0) + fill(Fluid.velocity_old_NSCBC, array(0.0, 0.0, 0.0)) + fill(Fluid.temperature_old_NSCBC, 0.0) + fill(Fluid.MolarFracs_profile, [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Fluid.velocity_profile, array(0.0, 0.0, 0.0)) + fill(Fluid.temperature_profile, 0.0) +end + +------------------------------------------------------------------------------- +-- PARTITIONING ROUTINES +------------------------------------------------------------------------------- + +local function addToBcColoring(c, rect, stencil) + return rquote + regentlib.c.legion_multi_domain_point_coloring_color_domain([c], int1d(0), [rect]) + regentlib.c.legion_multi_domain_point_coloring_color_domain([c], int1d(1), [rect] + [stencil]) + end +end + +__demand(__inline) +task PartitionGrid(Fluid : region(ispace(int3d), Fluid_columns), + tiles : ispace(int3d), + config : Config, + Grid_xBnum : int32, Grid_yBnum : int32, Grid_zBnum : int32) +where + reads(Fluid) +do + var p_Fluid = + [UTIL.mkPartitionByTile(int3d, int3d, Fluid_columns, "p_All")] + (Fluid, tiles, int3d{Grid_xBnum,Grid_yBnum,Grid_zBnum}, int3d{0,0,0}) + + -- This partion accommodates 27 regions, in the order: + -- - [ 0]: Interior + -- (6 faces) + -- - [ 1]: Faces xNeg + -- - [ 2]: Faces xPos + -- - [ 3]: Faces yNeg + -- - [ 4]: Faces yPos + -- - [ 5]: Faces zNeg + -- - [ 6]: Faces zPos + -- (12 edges) + -- - [ 7]: Edge xNeg-yNeg + -- - [ 8]: Edge xNeg-zNeg + -- - [ 9]: Edge xNeg-yPos + -- - [10]: Edge xNeg-zPos + -- - [11]: Edge xPos-yNeg + -- - [12]: Edge xPos-zNeg + -- - [13]: Edge xPos-yPos + -- - [14]: Edge xPos-zPos + -- - [15]: Edge yNeg-zNeg + -- - [16]: Edge yNeg-zPos + -- - [17]: Edge yPos-zNeg + -- - [18]: Edge yPos-zPos + -- (8 corners) + -- - [19]: Corner xNeg-yNeg-zNeg + -- - [20]: Corner xNeg-yPos-zNeg + -- - [21]: Corner xNeg-yNeg-zPos + -- - [22]: Corner xNeg-yPos-zPos + -- - [23]: Corner xPos-yNeg-zNeg + -- - [24]: Corner xPos-yPos-zNeg + -- - [25]: Corner xPos-yNeg-zPos + -- - [26]: Corner xPos-yPos-zPos + -- + var Fluid_regions = + [UTIL.mkPartitionIsInteriorOrGhost(int3d, Fluid_columns, "Fluid_regions")] + (Fluid, int3d{Grid_xBnum,Grid_yBnum,Grid_zBnum}) + + -- Interior points + var p_Fluid_Interior = static_cast(partition(disjoint, Fluid, tiles), cross_product(Fluid_regions, p_Fluid)[0]); + [UTIL.emitPartitionNameAttach(rexpr p_Fluid_Interior end, "p_Interior")]; + + -- All ghost points + var p_Fluid_AllGhost = p_Fluid - p_Fluid_Interior + + ----------------------------------------------------------------------------------------------- + -- Boudary conditions regions + ----------------------------------------------------------------------------------------------- + -- !!! We need to be very careful here !!! + -- A corner beween two outflow conditions requires the bc conditions to be aliased + -- therefore define one color for each side + var xNeg_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + var xPos_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + var yNeg_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + var yPos_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + var zNeg_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + var zPos_coloring = regentlib.c.legion_multi_domain_point_coloring_create(); + + -- The faces are for sure part of the boundary respective boundary partition + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[1].bounds end, rexpr int3d{ 1, 0, 0} end)]; + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[2].bounds end, rexpr int3d{-1, 0, 0} end)]; + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[3].bounds end, rexpr int3d{ 0, 1, 0} end)]; + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[4].bounds end, rexpr int3d{ 0,-1, 0} end)]; + [addToBcColoring(rexpr zNeg_coloring end , rexpr Fluid_regions[5].bounds end, rexpr int3d{ 0, 0, 1} end)]; + [addToBcColoring(rexpr zPos_coloring end , rexpr Fluid_regions[6].bounds end, rexpr int3d{ 0, 0,-1} end)]; + + -- Here things become arbitrary + -- We give the following priorities to BCS: + -- - Walls + -- - Dirichlet + -- - NSCBC_Inflow + -- - NSCBC_Outflow + -- and to the directions: + -- - X + -- - Y + -- - Z + + var BC_xBCLeft = config.BC.xBCLeft + var BC_xBCRight = config.BC.xBCRight + var BC_yBCLeft = config.BC.yBCLeft + var BC_yBCRight = config.BC.yBCRight + var BC_zBCLeft = config.BC.zBCLeft + var BC_zBCRight = config.BC.zBCRight + + ------------------------------------------------------ + -- Break ties with other boundary conditions for edges + ------------------------------------------------------ + -- [ 7]: Edge xNeg-yNeg + -- Walls + if (BC_xBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[7].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[7].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[7].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[7].bounds end, rexpr int3d{ 0, 1, 0} end)] + + -- Dirichlet + elseif (BC_xBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[7].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[7].bounds end, rexpr int3d{ 0, 1, 0} end)] + + -- NSCBC_Inflow + elseif (BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[7].bounds end, rexpr int3d{ 1, 0, 0} end)] + + -- NSCBC_Outflow + + -- Periodic + elseif ((BC_xBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_yBCLeft == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xNeg-yNeg edge") + end + + -- [ 8]: Edge xNeg-zNeg + -- Walls + if (BC_xBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[8].bounds end, rexpr int3d{ 1, 0, 0} end)] + + -- Dirichlet + elseif (BC_xBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[8].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_zBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zNeg_coloring end , rexpr Fluid_regions[8].bounds end, rexpr int3d{ 0, 0, 1} end)] + + -- NSCBC_Inflow + elseif (BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[8].bounds end, rexpr int3d{ 1, 0, 0} end)] + + -- NSCBC_Outflow + + -- Periodic + elseif ((BC_xBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_zBCLeft == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xNeg-yNeg edge") + end + + -- [ 9]: Edge xNeg-yPos + -- Walls + if (BC_xBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[9].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[9].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[9].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Dirichlet + elseif (BC_xBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[9].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[9].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- NSCBC_Inflow + elseif (BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[9].bounds end, rexpr int3d{ 1, 0, 0} end)] + + -- NSCBC_Outflow + elseif (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[9].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Periodic + elseif ((BC_xBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_yBCRight == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xNeg-yPos edge") + end + + -- [10]: Edge xNeg-zPos + -- Walls + if (BC_xBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[10].bounds end, rexpr int3d{ 1, 0, 0} end)] + + -- Dirichlet + elseif (BC_xBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[10].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_zBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zPos_coloring end , rexpr Fluid_regions[10].bounds end, rexpr int3d{ 0, 0,-1} end)] + + -- NSCBC_Inflow + elseif (BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[10].bounds end, rexpr int3d{ 1, 0, 0} end)] + + -- NSCBC_Outflow + + -- Periodic + elseif ((BC_xBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_zBCRight == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xNeg-zPos edge") + end + + -- [11]: Edge xPos-yNeg + -- Walls + if (BC_xBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[11].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[11].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[11].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[11].bounds end, rexpr int3d{ 0, 1, 0} end)] + + -- Dirichlet + elseif (BC_xBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[11].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[11].bounds end, rexpr int3d{ 0, 1, 0} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[11].bounds end, rexpr int3d{-1, 0, 0} end)] + + -- Periodic + elseif ((BC_xBCRight == SCHEMA.FlowBC_Periodic) and + (BC_yBCLeft == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xPos-yNeg edge") + end + + -- [12]: Edge xPos-zNeg + -- Walls + if (BC_xBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[12].bounds end, rexpr int3d{-1, 0, 0} end)] + + -- Dirichlet + elseif (BC_xBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[12].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_zBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zNeg_coloring end , rexpr Fluid_regions[12].bounds end, rexpr int3d{ 0, 0, 1} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[12].bounds end, rexpr int3d{-1, 0, 0} end)] + + -- Periodic + elseif ((BC_xBCRight == SCHEMA.FlowBC_Periodic) and + (BC_zBCLeft == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xPos-zNeg edge") + end + + -- [13]: Edge xPos-yPos + -- Walls + if (BC_xBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[13].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[13].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[13].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Dirichlet + elseif (BC_xBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[13].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[13].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow and BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + -- This edge belongs to both partitions + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[13].bounds end, rexpr int3d{-1, 0, 0} end)]; + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[13].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[13].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[13].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Periodic + elseif ((BC_xBCRight == SCHEMA.FlowBC_Periodic) and + (BC_yBCRight == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xPos-yPos edge") + end + + -- [14]: Edge xPos-zPos + -- Walls + if (BC_xBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[14].bounds end, rexpr int3d{-1, 0, 0} end)] + + -- Dirichlet + elseif (BC_xBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[14].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_zBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zPos_coloring end , rexpr Fluid_regions[14].bounds end, rexpr int3d{ 0, 0,-1} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[14].bounds end, rexpr int3d{-1, 0, 0} end)] + + -- Periodic + elseif ((BC_xBCRight == SCHEMA.FlowBC_Periodic) and + (BC_zBCRight == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xPos-zPos edge") + end + + -- [15]: Edge yNeg-zNeg + -- Walls + if (BC_yBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[15].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[15].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[15].bounds end, rexpr int3d{ 0, 1, 0} end)] + + -- Dirichlet + elseif (BC_yBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[15].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_zBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zNeg_coloring end , rexpr Fluid_regions[15].bounds end, rexpr int3d{ 0, 0, 1} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + + -- Periodic + elseif ((BC_yBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_zBCLeft == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of yNeg-zNeg edge") + end + + -- [16]: Edge yNeg-zPos + -- Walls + if (BC_yBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[16].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[16].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[16].bounds end, rexpr int3d{ 0, 1, 0} end)] + + -- Dirichlet + elseif (BC_yBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[16].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_zBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zPos_coloring end , rexpr Fluid_regions[16].bounds end, rexpr int3d{ 0, 0,-1} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + + -- Periodic + elseif ((BC_yBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_zBCRight == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of yNeg-zPos edge") + end + + -- [17]: Edge yPos-zNeg + -- Walls + if (BC_yBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[17].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[17].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Dirichlet + elseif (BC_yBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[17].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_zBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zNeg_coloring end , rexpr Fluid_regions[17].bounds end, rexpr int3d{ 0, 0, 1} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + elseif (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[17].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Periodic + elseif ((BC_yBCRight == SCHEMA.FlowBC_Periodic) and + (BC_zBCLeft == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of yPos-zNeg edge") + end + + -- [18]: Edge yPos-zPos + -- Walls + if (BC_yBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[18].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[18].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Dirichlet + elseif (BC_yBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[18].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_zBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zPos_coloring end , rexpr Fluid_regions[18].bounds end, rexpr int3d{ 0, 0,-1} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + elseif (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[18].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Periodic + elseif ((BC_yBCRight == SCHEMA.FlowBC_Periodic) and + (BC_zBCRight == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of yPos-zPos edge") + end + + -------------------------------------------------------- + -- Break ties with other boundary conditions for corners + -------------------------------------------------------- + + -- [19]: Corner xNeg-yNeg-zNeg + -- Walls + if (BC_xBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[19].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[19].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[19].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[19].bounds end, rexpr int3d{ 0, 1, 0} end)] + + -- Dirichlet + elseif (BC_xBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[19].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[19].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_zBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zNeg_coloring end , rexpr Fluid_regions[19].bounds end, rexpr int3d{ 0, 0, 1} end)] + + -- NSCBC_Inflow + elseif (BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[19].bounds end, rexpr int3d{ 1, 0, 0} end)] + + -- NSCBC_Outflow + + -- Periodic + elseif ((BC_xBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_yBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_zBCLeft == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xNeg-yNeg-zNeg corner") + end + + -- [20]: Corner xNeg-yPos-zNeg + -- Walls + if (BC_xBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[20].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[20].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[20].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Dirichlet + elseif (BC_xBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[20].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[20].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_zBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zNeg_coloring end , rexpr Fluid_regions[20].bounds end, rexpr int3d{ 0, 0, 1} end)] + + -- NSCBC_Inflow + elseif (BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[20].bounds end, rexpr int3d{ 1, 0, 0} end)] + + -- NSCBC_Outflow + elseif (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[20].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Periodic + elseif ((BC_xBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_yBCRight == SCHEMA.FlowBC_Periodic) and + (BC_zBCLeft == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xNeg-yPos-zNeg corner") + + end + + -- [21]: Corner xNeg-yNeg-zPos + -- Walls + if (BC_xBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[21].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[21].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[21].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[21].bounds end, rexpr int3d{ 0, 1, 0} end)] + + -- Dirichlet + elseif (BC_xBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[21].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[21].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_zBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zPos_coloring end , rexpr Fluid_regions[21].bounds end, rexpr int3d{ 0, 0,-1} end)] + + -- NSCBC_Inflow + elseif (BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[21].bounds end, rexpr int3d{ 1, 0, 0} end)] + + -- NSCBC_Outflow + + -- Periodic + elseif ((BC_xBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_yBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_zBCRight == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xNeg-yNeg-zPos corner") + end + + -- [22]: Corner xNeg-yPos-zPos + -- Walls + if (BC_xBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[22].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[22].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[22].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Dirichlet + elseif (BC_xBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[22].bounds end, rexpr int3d{ 1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[22].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_zBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zPos_coloring end , rexpr Fluid_regions[22].bounds end, rexpr int3d{ 0, 0,-1} end)] + + -- NSCBC_Inflow + elseif (BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + [addToBcColoring(rexpr xNeg_coloring end , rexpr Fluid_regions[22].bounds end, rexpr int3d{ 1, 0, 0} end)] + + -- NSCBC_Outflow + elseif (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[22].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Periodic + elseif ((BC_xBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_yBCRight == SCHEMA.FlowBC_Periodic) and + (BC_zBCRight == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xNeg-yPos-zPos corner") + end + + -- [23]: Corner xPos-yNeg-zNeg + -- Walls + if (BC_xBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[23].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[23].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[23].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[23].bounds end, rexpr int3d{ 0, 1, 0} end)] + + -- Dirichlet + elseif (BC_xBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[23].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[23].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_zBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zNeg_coloring end , rexpr Fluid_regions[23].bounds end, rexpr int3d{ 0, 0, 1} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[23].bounds end, rexpr int3d{-1, 0, 0} end)] + + -- Periodic + elseif ((BC_xBCRight == SCHEMA.FlowBC_Periodic) and + (BC_yBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_zBCLeft == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xPos-yNeg-zNeg corner") + end + + -- [24]: Corner xPos-yPos-zNeg + -- Walls + if (BC_xBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[24].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[24].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[24].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Dirichlet + elseif (BC_xBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[24].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[24].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_zBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zNeg_coloring end , rexpr Fluid_regions[24].bounds end, rexpr int3d{ 0, 0, 1} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow and BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + -- This edge belongs to both partitions + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[24].bounds end, rexpr int3d{-1, 0, 0} end)]; + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[24].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[24].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[24].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Periodic + elseif ((BC_xBCRight == SCHEMA.FlowBC_Periodic) and + (BC_yBCRight == SCHEMA.FlowBC_Periodic) and + (BC_zBCLeft == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xPos-yPos-zNeg corner") + end + + -- [25]: Corner xPos-yNeg-zPos + -- Walls + if (BC_xBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[25].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[25].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[25].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[25].bounds end, rexpr int3d{ 0, 1, 0} end)] + + -- Dirichlet + elseif (BC_xBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[25].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCLeft == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yNeg_coloring end , rexpr Fluid_regions[25].bounds end, rexpr int3d{ 0, 1, 0} end)] + elseif (BC_zBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zPos_coloring end , rexpr Fluid_regions[25].bounds end, rexpr int3d{ 0, 0,-1} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[25].bounds end, rexpr int3d{-1, 0, 0} end)] + + -- Periodic + elseif ((BC_xBCRight == SCHEMA.FlowBC_Periodic) and + (BC_yBCLeft == SCHEMA.FlowBC_Periodic) and + (BC_zBCRight == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xPos-yNeg-zPos corner") + end + + -- [26]: Corner xPos-yPos-zPos + -- Walls + if (BC_xBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[26].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_AdiabaticWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[26].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_IsothermalWall) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[26].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Dirichlet + elseif (BC_xBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[26].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[26].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_zBCRight == SCHEMA.FlowBC_Dirichlet) then + [addToBcColoring(rexpr zPos_coloring end , rexpr Fluid_regions[26].bounds end, rexpr int3d{ 0, 0,-1} end)] + + -- NSCBC_Inflow + + -- NSCBC_Outflow + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow and BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + -- This edge belongs to both partitions + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[26].bounds end, rexpr int3d{-1, 0, 0} end)]; + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[26].bounds end, rexpr int3d{ 0,-1, 0} end)] + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr xPos_coloring end , rexpr Fluid_regions[26].bounds end, rexpr int3d{-1, 0, 0} end)] + elseif (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + [addToBcColoring(rexpr yPos_coloring end , rexpr Fluid_regions[26].bounds end, rexpr int3d{ 0,-1, 0} end)] + + -- Periodic + elseif ((BC_xBCRight == SCHEMA.FlowBC_Periodic) and + (BC_yBCRight == SCHEMA.FlowBC_Periodic) and + (BC_zBCRight == SCHEMA.FlowBC_Periodic)) then + -- Nothing to do + + else regentlib.assert(false, "Unhandled case in tie breaking of xPos-yPos-zPos corner") + end + + -- Create partitions + var xNegBC = partition(disjoint, Fluid, xNeg_coloring, ispace(int1d,2)) + var xPosBC = partition(disjoint, Fluid, xPos_coloring, ispace(int1d,2)) + var yNegBC = partition(disjoint, Fluid, yNeg_coloring, ispace(int1d,2)) + var yPosBC = partition(disjoint, Fluid, yPos_coloring, ispace(int1d,2)) + var zNegBC = partition(disjoint, Fluid, zNeg_coloring, ispace(int1d,2)) + var zPosBC = partition(disjoint, Fluid, zPos_coloring, ispace(int1d,2)) + + var p_xNegBC = cross_product(p_Fluid, xNegBC) + var p_xPosBC = cross_product(p_Fluid, xPosBC) + var p_yNegBC = cross_product(p_Fluid, yNegBC) + var p_yPosBC = cross_product(p_Fluid, yPosBC) + var p_zNegBC = cross_product(p_Fluid, zNegBC) + var p_zPosBC = cross_product(p_Fluid, zPosBC); + + -- Destroy colors + regentlib.c.legion_multi_domain_point_coloring_destroy(xNeg_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy(xPos_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy(yNeg_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy(yPos_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy(zNeg_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy(zPos_coloring) + + ----------------------------------------------------------------------------------------------- + -- END - Boudary conditions regions + ----------------------------------------------------------------------------------------------- + ----------------------------------------------------------------------------------------------- + -- Regions for RHS functions + ----------------------------------------------------------------------------------------------- + + -- Cells where the divergence operator in x direction is applied + var xdivg_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + -- Cells where the divergence operator in y direction is applied + var ydivg_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + -- Cells where the divergence operator in z direction is applied + var zdivg_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + -- Cells where the rhs of the equations has to be computed + var solve_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + -- Cells where the reconstruction operator in x direction is applied + var xfaces_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + -- Cells where the reconstruction operator in y direction is applied + var yfaces_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + -- Cells where the reconstruction operator in z direction is applied + var zfaces_coloring = regentlib.c.legion_multi_domain_point_coloring_create() + + -- For sure they contain the internal cells + regentlib.c.legion_multi_domain_point_coloring_color_domain(xdivg_coloring, int1d(0), Fluid_regions[0].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(ydivg_coloring, int1d(0), Fluid_regions[0].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zdivg_coloring, int1d(0), Fluid_regions[0].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(solve_coloring, int1d(0), Fluid_regions[0].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(xfaces_coloring, int1d(0), Fluid_regions[0].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(yfaces_coloring, int1d(0), Fluid_regions[0].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[0].bounds) + + regentlib.c.legion_multi_domain_point_coloring_color_domain(xfaces_coloring, int1d(0), Fluid_regions[1].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(yfaces_coloring, int1d(0), Fluid_regions[3].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[5].bounds) + + + -- Add boundary cells in case of NSCBC conditions + if (BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + -- xNeg is an NSCBC + regentlib.c.legion_multi_domain_point_coloring_color_domain(ydivg_coloring, int1d(0), Fluid_regions[1].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zdivg_coloring, int1d(0), Fluid_regions[1].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(solve_coloring, int1d(0), Fluid_regions[1].bounds) + + regentlib.c.legion_multi_domain_point_coloring_color_domain(yfaces_coloring, int1d(0), Fluid_regions[1].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[1].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(yfaces_coloring, int1d(0), Fluid_regions[7].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[8].bounds) + end + if (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + -- xPos is an NSCBC + regentlib.c.legion_multi_domain_point_coloring_color_domain(ydivg_coloring, int1d(0), Fluid_regions[ 2].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zdivg_coloring, int1d(0), Fluid_regions[ 2].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(solve_coloring, int1d(0), Fluid_regions[ 2].bounds) + + regentlib.c.legion_multi_domain_point_coloring_color_domain(yfaces_coloring, int1d(0), Fluid_regions[ 2].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[ 2].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(yfaces_coloring, int1d(0), Fluid_regions[11].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[12].bounds) + end + if (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + -- yPos is an NSCBC + regentlib.c.legion_multi_domain_point_coloring_color_domain(xdivg_coloring, int1d(0), Fluid_regions[ 4].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zdivg_coloring, int1d(0), Fluid_regions[ 4].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(solve_coloring, int1d(0), Fluid_regions[ 4].bounds) + + regentlib.c.legion_multi_domain_point_coloring_color_domain(xfaces_coloring, int1d(0), Fluid_regions[ 4].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[ 4].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(xfaces_coloring, int1d(0), Fluid_regions[ 9].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[17].bounds) + end + if ((BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) and + (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow)) then + -- Edge xNeg-yPos is an NSCBC + regentlib.c.legion_multi_domain_point_coloring_color_domain(zdivg_coloring, int1d(0), Fluid_regions[ 9].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(solve_coloring, int1d(0), Fluid_regions[ 9].bounds) + + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[ 9].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[20].bounds) + end + if ((BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) and + (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow)) then + -- Edge xPos-yPos is an NSCBC + regentlib.c.legion_multi_domain_point_coloring_color_domain(zdivg_coloring, int1d(0), Fluid_regions[13].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(solve_coloring, int1d(0), Fluid_regions[13].bounds) + + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[13].bounds) + regentlib.c.legion_multi_domain_point_coloring_color_domain(zfaces_coloring, int1d(0), Fluid_regions[24].bounds) + end + + var xdivg_cells = partition(disjoint, Fluid, xdivg_coloring, ispace(int1d,1)) + var ydivg_cells = partition(disjoint, Fluid, ydivg_coloring, ispace(int1d,1)) + var zdivg_cells = partition(disjoint, Fluid, zdivg_coloring, ispace(int1d,1)) + var solve_cells = partition(disjoint, Fluid, solve_coloring, ispace(int1d,1)) + var xfaces_cells = partition(disjoint, Fluid, xfaces_coloring, ispace(int1d,1)) + var yfaces_cells = partition(disjoint, Fluid, yfaces_coloring, ispace(int1d,1)) + var zfaces_cells = partition(disjoint, Fluid, zfaces_coloring, ispace(int1d,1)) + + var xdivg_part = cross_product(xdivg_cells, p_Fluid) + var ydivg_part = cross_product(ydivg_cells, p_Fluid) + var zdivg_part = cross_product(zdivg_cells, p_Fluid) + var solve_part = static_cast(partition(disjoint, Fluid, tiles), cross_product(solve_cells, p_Fluid)[0]); + [UTIL.emitPartitionNameAttach(rexpr xdivg_part[0] end, "p_x_divg")]; + [UTIL.emitPartitionNameAttach(rexpr ydivg_part[0] end, "p_y_divg")]; + [UTIL.emitPartitionNameAttach(rexpr zdivg_part[0] end, "p_z_divg")]; + [UTIL.emitPartitionNameAttach(rexpr solve_part end, "p_solved")]; + + var xfaces_part = cross_product(xfaces_cells, p_Fluid) + var yfaces_part = cross_product(yfaces_cells, p_Fluid) + var zfaces_part = cross_product(zfaces_cells, p_Fluid); + [UTIL.emitPartitionNameAttach(rexpr xfaces_part[0] end, "p_x_faces")]; + [UTIL.emitPartitionNameAttach(rexpr yfaces_part[0] end, "p_y_faces")]; + [UTIL.emitPartitionNameAttach(rexpr zfaces_part[0] end, "p_z_faces")]; + + -- Destroy colors + regentlib.c.legion_multi_domain_point_coloring_destroy( xdivg_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy( ydivg_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy( zdivg_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy( solve_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy(xfaces_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy(yfaces_coloring) + regentlib.c.legion_multi_domain_point_coloring_destroy(zfaces_coloring) + + ----------------------------------------------------------------------------------------------- + -- END - Regions for RHS functions + ----------------------------------------------------------------------------------------------- + + return [grid_partitions(Fluid, tiles)]{ + -- Partitions + p_All = p_Fluid, + p_Interior = p_Fluid_Interior, + p_AllGhost = p_Fluid_AllGhost, + -- Partitions for reconstruction operator + x_faces = xfaces_cells, + y_faces = yfaces_cells, + z_faces = zfaces_cells, + p_x_faces = xfaces_part, + p_y_faces = yfaces_part, + p_z_faces = zfaces_part, + -- Partitions for divergence operator + x_divg = xdivg_cells, + y_divg = ydivg_cells, + z_divg = zdivg_cells, + p_x_divg = xdivg_part, + p_y_divg = ydivg_part, + p_z_divg = zdivg_part, + p_solved = solve_part, + -- BC partitions + xNeg = xNegBC, + xPos = xPosBC, + yNeg = yNegBC, + yPos = yPosBC, + zNeg = zNegBC, + zPos = zPosBC, + p_xNeg = p_xNegBC, + p_xPos = p_xPosBC, + p_yNeg = p_yNegBC, + p_yPos = p_yPosBC, + p_zNeg = p_zNegBC, + p_zPos = p_zPosBC, + } +end + +------------------------------------------------------------------------------- +-- RK-LOOP ROUTINES +------------------------------------------------------------------------------- + +__demand(__inline) +task UpdateFluxesFromConserved(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_bounds : rect3d, + tiles : ispace(int3d), + Fluid_Partitions : grid_partitions(Fluid, tiles), + x_faces : region(ispace(int3d), Fluid_columns), + y_faces : region(ispace(int3d), Fluid_columns), + z_faces : region(ispace(int3d), Fluid_columns), + config : Config, + Mix : MIX.Mixture, + Integrator_simTime : double) +where + reads writes(Fluid), + reads writes(x_faces), x_faces <= Fluid, + reads writes(y_faces), y_faces <= Fluid, + reads writes(z_faces), z_faces <= Fluid +do + + -- Unpack the partitions that we are going to need + var {p_All, p_Interior, p_AllGhost, p_xNeg, p_xPos, p_yNeg, p_yPos, p_zNeg, p_zPos} = Fluid_Partitions + + -- Update all primitive variables... + __demand(__index_launch) + for c in tiles do + VARS.UpdatePrimitiveFromConserved(p_All[c], p_Interior[c], Mix) + end + + -- ...also in the ghost cells + BCOND.UpdateGhostPrimitives(Fluid, + tiles, + Fluid_Partitions, + config, + Mix, + Integrator_simTime) + + -- Update the mixture properties everywhere + __demand(__index_launch) + for c in tiles do + VARS.UpdatePropertiesFromPrimitive(p_All[c], p_All[c], Mix) + end + + -- update values of conserved variables in ghost cells + __demand(__index_launch) + for c in tiles do + VARS.UpdateConservedFromPrimitive(p_All[c], p_AllGhost[c], Mix) + end + + -- Compute velocity gradients + VARS.GetVelocityGradients(Fluid, Fluid_bounds) + + -- Compute local Euler fluxes + __demand(__index_launch) + for c in tiles do + FLUX.GetEulerFlux(p_All[c]) + end + + -- Compute fluxes + [FLUX.mkGetFlux("x")](Fluid, x_faces, Fluid_bounds, Mix); + [FLUX.mkGetFlux("y")](Fluid, y_faces, Fluid_bounds, Mix); + [FLUX.mkGetFlux("z")](Fluid, z_faces, Fluid_bounds, Mix); + +end + +__demand(__inline) +task UpdateDerivativesFromFluxes(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_bounds : rect3d, + tiles : ispace(int3d), + Fluid_Partitions : grid_partitions(Fluid, tiles), + x_divg : region(ispace(int3d), Fluid_columns), + y_divg : region(ispace(int3d), Fluid_columns), + z_divg : region(ispace(int3d), Fluid_columns), + config : Config, + Mix : MIX.Mixture, + UseOldDerivatives : bool) +where + reads writes(Fluid), + reads writes(x_divg), x_divg <= Fluid, + reads writes(y_divg), y_divg <= Fluid, + reads writes(z_divg), z_divg <= Fluid +do + + -- Unpack the partitions that we are going to need + var {p_All, p_Interior, p_solved, p_xNeg, p_xPos, p_yNeg, p_yPos, p_zNeg, p_zPos} = Fluid_Partitions + + -- Initialize time derivatives to 0 or minus the old value + if UseOldDerivatives then + __demand(__index_launch) + for c in tiles do + [RK.mkInitializeTimeDerivatives(true)](p_All[c]) + end + else + __demand(__index_launch) + for c in tiles do + [RK.mkInitializeTimeDerivatives(false)](p_All[c]) + end + end + + if (not config.Integrator.implicitChemistry) then + -- Add chemistry source terms + __demand(__index_launch) + for c in tiles do + CHEM.AddChemistrySources(p_All[c], p_solved[c], Mix) + end + end + + -- Add body forces + __demand(__index_launch) + for c in tiles do + RHS.AddBodyForces(p_All[c], p_solved[c], config.Flow.bodyForce) + end + + -- Add turbulent forcing + if config.Flow.turbForcing.type == SCHEMA.TurbForcingModel_CHANNEL then + -- Add forcing + __demand(__index_launch) + for c in tiles do + RHS.AddBodyForces(p_All[c], p_solved[c], + array(config.Flow.turbForcing.u.CHANNEL.Forcing, 0.0, 0.0)) + end + end + + -- Use fluxes to update conserved value derivatives + [RHS.mkUpdateUsingFlux("z")](Fluid, z_divg, Fluid_bounds); + [RHS.mkUpdateUsingFlux("y")](Fluid, y_divg, Fluid_bounds); + [RHS.mkUpdateUsingFlux("x")](Fluid, x_divg, Fluid_bounds) + + -- Update using NSCBC_Outflow bcs + if (config.BC.xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + var MaxMach = 0.0 + __demand(__index_launch) + for c in tiles do + MaxMach max= STAT.CalculateMaxMachNumber(p_All[c], p_Interior[c], 0) + end + __demand(__index_launch) + for c in tiles do + [RHS.mkUpdateUsingFluxNSCBCOutflow("xPos")](p_All[c], + p_xPos[c], + Mix, MaxMach, config.Grid.xWidth, config.BC.xBCRightP) + end + end + if (config.BC.yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + var MaxMach = 0.0 + __demand(__index_launch) + for c in tiles do + MaxMach max= STAT.CalculateMaxMachNumber(p_All[c], p_Interior[c], 1) + end + __demand(__index_launch) + for c in tiles do + [RHS.mkUpdateUsingFluxNSCBCOutflow("yPos")](p_All[c], + p_yPos[c], + Mix, MaxMach, config.Grid.yWidth, config.BC.yBCRightP) + end + end + + -- Update using NSCBC_Inflow bcs + if (config.BC.xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + __demand(__index_launch) + for c in tiles do + RHS.UpdateUsingFluxNSCBCInflow(p_All[c], p_xNeg[c], Mix) + end + end +end + +__demand(__inline) +task CorrectDerivatives(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_bounds : rect3d, + tiles : ispace(int3d), + Fluid_Partitions : grid_partitions(Fluid, tiles), + x_divg : region(ispace(int3d), Fluid_columns), + y_divg : region(ispace(int3d), Fluid_columns), + z_divg : region(ispace(int3d), Fluid_columns), + config : Config, + Mix : MIX.Mixture) +where + reads writes(Fluid), + reads writes(x_divg), x_divg <= Fluid, + reads writes(y_divg), y_divg <= Fluid, + reads writes(z_divg), z_divg <= Fluid +do + [RHS.mkCorrectUsingFlux("z")](Fluid, z_divg, Fluid_bounds, Mix); + [RHS.mkCorrectUsingFlux("y")](Fluid, y_divg, Fluid_bounds, Mix); + [RHS.mkCorrectUsingFlux("x")](Fluid, x_divg, Fluid_bounds, Mix) +end + +------------------------------------------------------------------------------- +-- MAIN SIMULATION +------------------------------------------------------------------------------- + +local function mkInstance() local INSTANCE = {} + + ----------------------------------------------------------------------------- + -- Symbols shared between quotes + ----------------------------------------------------------------------------- + + local startTime = regentlib.newsymbol() + local Grid = { + xBnum = regentlib.newsymbol(), + yBnum = regentlib.newsymbol(), + zBnum = regentlib.newsymbol(), + } + local BC = { + readProfiles = regentlib.newsymbol(bool), + ProfilesDir = regentlib.newsymbol(&int8), + } + local NX = regentlib.newsymbol() + local NY = regentlib.newsymbol() + local NZ = regentlib.newsymbol() + local numTiles = regentlib.newsymbol() + + local Integrator_deltaTime = regentlib.newsymbol() + local Integrator_simTime = regentlib.newsymbol() + local Integrator_timeStep = regentlib.newsymbol() + local Integrator_exitCond = regentlib.newsymbol() + + local Mix = regentlib.newsymbol() + + local Fluid = regentlib.newsymbol("Fluid") + local Fluid_copy = regentlib.newsymbol() + local Fluid_bounds = regentlib.newsymbol("Fluid_bounds") + + local tiles = regentlib.newsymbol() + + local Fluid_Partitions = regentlib.newsymbol("Fluid_Partitions") + local Fluid_Partitions_copy = regentlib.newsymbol() + + local p_All = regentlib.newsymbol("p_All") + local x_divg = regentlib.newsymbol("x_divg") + local y_divg = regentlib.newsymbol("y_divg") + local z_divg = regentlib.newsymbol("z_divg") + local p_x_divg = regentlib.newsymbol("p_x_divg") + local p_y_divg = regentlib.newsymbol("p_y_divg") + local p_z_divg = regentlib.newsymbol("p_z_divg") + local x_faces = regentlib.newsymbol("x_faces") + local y_faces = regentlib.newsymbol("y_faces") + local z_faces = regentlib.newsymbol("z_faces") + local p_x_faces = regentlib.newsymbol("p_x_faces") + local p_y_faces = regentlib.newsymbol("p_y_faces") + local p_z_faces = regentlib.newsymbol("p_z_faces") + + local Averages = { + XAverages = regentlib.newsymbol(), + YAverages = regentlib.newsymbol(), + ZAverages = regentlib.newsymbol(), + XAverages_copy = regentlib.newsymbol(), + YAverages_copy = regentlib.newsymbol(), + ZAverages_copy = regentlib.newsymbol(), + is_Xrakes = regentlib.newsymbol(), + is_Yrakes = regentlib.newsymbol(), + is_Zrakes = regentlib.newsymbol(), + Xrakes = regentlib.newsymbol(), + Yrakes = regentlib.newsymbol(), + Zrakes = regentlib.newsymbol(), + Xrakes_copy = regentlib.newsymbol(), + Yrakes_copy = regentlib.newsymbol(), + Zrakes_copy = regentlib.newsymbol(), + + XAverages_local = regentlib.newsymbol(), + YAverages_local = regentlib.newsymbol(), + ZAverages_local = regentlib.newsymbol(), + is_Xrakes_local = regentlib.newsymbol(), + is_Yrakes_local = regentlib.newsymbol(), + is_Zrakes_local = regentlib.newsymbol(), + p_Xrakes_local = regentlib.newsymbol(), + p_Yrakes_local = regentlib.newsymbol(), + p_Zrakes_local = regentlib.newsymbol(), + } + + ----------------------------------------------------------------------------- + -- Exported symbols + ----------------------------------------------------------------------------- + + INSTANCE.Grid = Grid + INSTANCE.Integrator_deltaTime = Integrator_deltaTime + INSTANCE.Integrator_simTime = Integrator_simTime + INSTANCE.Integrator_timeStep = Integrator_timeStep + INSTANCE.Integrator_exitCond = Integrator_exitCond + INSTANCE.Fluid = Fluid + INSTANCE.Fluid_copy = Fluid_copy + INSTANCE.tiles = tiles + INSTANCE.Fluid_Partitions = Fluid_Partitions + INSTANCE.Fluid_Partitions_copy = Fluid_Partitions_copy + + INSTANCE.p_All = p_All + INSTANCE.x_divg = x_divg + INSTANCE.y_divg = y_divg + INSTANCE.z_divg = z_divg + INSTANCE.p_x_divg = p_x_divg + INSTANCE.p_y_divg = p_y_divg + INSTANCE.p_z_divg = p_z_divg + INSTANCE.x_faces = x_faces + INSTANCE.y_faces = y_faces + INSTANCE.z_faces = z_faces + INSTANCE.p_x_faces = p_x_faces + INSTANCE.p_y_faces = p_y_faces + INSTANCE.p_z_faces = p_z_faces + + ----------------------------------------------------------------------------- + -- Symbol declaration & initialization + ----------------------------------------------------------------------------- + + function INSTANCE.DeclSymbols(config) return rquote + + --------------------------------------------------------------------------- + -- Preparation + --------------------------------------------------------------------------- + + -- Start timer + var [startTime] = C.legion_get_current_time_in_micros() / 1000; + + -- Write console header + IO.Console_WriteHeader(config.Mapping) + +-- -- Write probe file headers +-- var probeId = 0 +-- while probeId < config.IO.probes.length do +-- IO.Probe_WriteHeader(config, probeId) +-- probeId += 1 +-- end + + --------------------------------------------------------------------------- + -- Initialize the mixture + --------------------------------------------------------------------------- + + var [Mix] = MIX.InitMixture(config) + + --------------------------------------------------------------------------- + -- Declare & initialize state variables + --------------------------------------------------------------------------- + + var [BC.readProfiles] = false + var [BC.ProfilesDir] = '' + + -- Determine number of ghost cells in each direction + -- 0 ghost cells if periodic and 1 otherwise + var [Grid.xBnum] = 1 + var [Grid.yBnum] = 1 + var [Grid.zBnum] = 1 + if config.BC.xBCLeft == SCHEMA.FlowBC_Periodic then Grid.xBnum = 0 end + if config.BC.yBCLeft == SCHEMA.FlowBC_Periodic then Grid.yBnum = 0 end + if config.BC.zBCLeft == SCHEMA.FlowBC_Periodic then Grid.zBnum = 0 end + + var [NX] = config.Mapping.tiles[0] + var [NY] = config.Mapping.tiles[1] + var [NZ] = config.Mapping.tiles[2] + var [numTiles] = NX * NY * NZ + + var [Integrator_exitCond] = true + var [Integrator_simTime] = config.Integrator.startTime + var [Integrator_timeStep] = config.Integrator.startIter + var [Integrator_deltaTime] = config.Integrator.fixedDeltaTime + + -- Set up flow BC's in x direction + if (not((config.BC.xBCLeft == SCHEMA.FlowBC_Periodic) and (config.BC.xBCRight == SCHEMA.FlowBC_Periodic))) then + if (config.BC.xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + if config.BC.xBCLeftInflowProfile.type == SCHEMA.InflowProfile_Constant then + -- Do nothing + elseif config.BC.xBCLeftInflowProfile.type == SCHEMA.InflowProfile_File then + BC.readProfiles = true + BC.ProfilesDir = config.BC.xBCLeftInflowProfile.u.File.FileDir + elseif config.BC.xBCLeftInflowProfile.type == SCHEMA.InflowProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming InflowProfile not supported') + else regentlib.assert(false, 'Unhandled case in InflowProfile switch') end + if config.BC.xBCLeftHeat.type == SCHEMA.TempProfile_Constant then + -- Do nothing + elseif config.BC.xBCLeftHeat.type == SCHEMA.TempProfile_File then + if (BC.readProfiles) then + regentlib.assert(C.strcmp(BC.ProfilesDir, config.BC.xBCLeftHeat.u.File.FileDir) == 0, 'Only one file is allowed for profiles') + else + BC.readProfiles = true + BC.ProfilesDir = config.BC.xBCLeftHeat.u.File.FileDir + end + elseif config.BC.xBCLeftHeat.type == SCHEMA.TempProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming heat model not supported') + else regentlib.assert(false, 'Unhandled case in TempProfile switch') end + if config.BC.xBCLeftMixture.type == SCHEMA.MixtureProfile_Constant then + -- Do nothing + elseif config.BC.xBCLeftMixture.type == SCHEMA.MixtureProfile_File then + if (BC.readProfiles) then + regentlib.assert(C.strcmp(BC.ProfilesDir, config.BC.xBCLeftMixture.u.File.FileDir) == 0, 'Only one file is allowed for profiles') + else + BC.readProfiles = true + BC.ProfilesDir = config.BC.xBCLeftMixture.u.File.FileDir + end + elseif config.BC.xBCLeftMixture.type == SCHEMA.MixtureProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming mixture model not supported') + else regentlib.assert(false, 'Unhandled case in MixtureProfile switch') end + + elseif (config.BC.xBCLeft == SCHEMA.FlowBC_Dirichlet) then + if config.BC.xBCLeftInflowProfile.type == SCHEMA.InflowProfile_Constant then + -- Do nothing + elseif config.BC.xBCLeftInflowProfile.type == SCHEMA.InflowProfile_File then + BC.readProfiles = true + BC.ProfilesDir = config.BC.xBCLeftInflowProfile.u.File.FileDir + elseif config.BC.xBCLeftHeat.type == SCHEMA.InflowProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming InflowProfile not supported') + else regentlib.assert(false, 'Unhandled case in InflowProfile switch') end + if config.BC.xBCLeftHeat.type == SCHEMA.TempProfile_Constant then + -- Do nothing + elseif config.BC.xBCLeftHeat.type == SCHEMA.TempProfile_File then + if (BC.readProfiles) then + regentlib.assert(C.strcmp(BC.ProfilesDir, config.BC.xBCLeftHeat.u.File.FileDir) == 0, 'Only one file is allowed for profiles') + else + BC.readProfiles = true + BC.ProfilesDir = config.BC.xBCLeftHeat.u.File.FileDir + end + elseif config.BC.xBCLeftHeat.type == SCHEMA.TempProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming heat model not supported') + else regentlib.assert(false, 'Unhandled case in TempProfile switch') end + if config.BC.xBCLeftMixture.type == SCHEMA.MixtureProfile_Constant then + -- Do nothing + elseif config.BC.xBCLeftMixture.type == SCHEMA.MixtureProfile_File then + if (BC.readProfiles) then + regentlib.assert(C.strcmp(BC.ProfilesDir, config.BC.xBCLeftMixture.u.File.FileDir) == 0, 'Only one file is allowed for profiles') + else + BC.readProfiles = true + BC.ProfilesDir = config.BC.xBCLeftMixture.u.File.FileDir + end + elseif config.BC.xBCLeftMixture.type == SCHEMA.MixtureProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming mixture model not supported') + else regentlib.assert(false, 'Unhandled case in MixtureProfile switch') end + + elseif (config.BC.xBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + -- Do nothing + + else + regentlib.assert(false, "Boundary conditions in xBCLeft not implemented") + end + + if (config.BC.xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + -- Do nothing + + elseif (config.BC.xBCRight == SCHEMA.FlowBC_Dirichlet) then + if config.BC.xBCRightInflowProfile.type == SCHEMA.InflowProfile_Constant then + -- Do nothing + elseif config.BC.xBCRightHeat.type == SCHEMA.InflowProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming InflowProfile not supported') + else regentlib.assert(false, 'Unhandled case in InflowProfile switch') end + if config.BC.xBCRightHeat.type == SCHEMA.TempProfile_Constant then + -- Do nothing + elseif config.BC.xBCRightHeat.type == SCHEMA.TempProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming heat model not supported') + else regentlib.assert(false, 'Unhandled case in TempProfile switch') end + if config.BC.xBCRightMixture.type == SCHEMA.MixtureProfile_Constant then + -- Do nothing + elseif config.BC.xBCRightMixture.type == SCHEMA.MixtureProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming mixture model not supported') + else regentlib.assert(false, 'Unhandled case in MixtureProfile switch') end + + elseif (config.BC.xBCRight == SCHEMA.FlowBC_AdiabaticWall) then + -- Do nothing + + else + regentlib.assert(false, "Boundary conditions in xBCRight not implemented") + end + end + + -- Set up flow BC's in y direction + if (not((config.BC.yBCLeft == SCHEMA.FlowBC_Periodic) and (config.BC.yBCRight == SCHEMA.FlowBC_Periodic))) then + if (config.BC.yBCLeft == SCHEMA.FlowBC_Dirichlet) then + if config.BC.yBCLeftInflowProfile.type == SCHEMA.InflowProfile_Constant then + -- Do nothing + elseif config.BC.yBCLeftHeat.type == SCHEMA.InflowProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming InflowProfile not supported') + else regentlib.assert(false, 'Unhandled case in InflowProfile switch') end + if config.BC.yBCLeftHeat.type == SCHEMA.TempProfile_Constant then + -- Do nothing + elseif config.BC.yBCLeftHeat.type == SCHEMA.TempProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming heat model not supported') + else regentlib.assert(false, 'Unhandled case in TempProfile switch') end + if config.BC.yBCLeftMixture.type == SCHEMA.MixtureProfile_Constant then + -- Do nothing + elseif config.BC.yBCLeftMixture.type == SCHEMA.MixtureProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming mixture model not supported') + else regentlib.assert(false, 'Unhandled case in MixtureProfile switch') end + +-- if (config.BC.yBCLeft == SCHEMA.FlowBC_Symmetry) then + elseif (config.BC.yBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + -- Do nothing + + elseif (config.BC.yBCLeft == SCHEMA.FlowBC_IsothermalWall) then + if config.BC.yBCLeftHeat.type == SCHEMA.TempProfile_Constant then + -- Do nothing + else + regentlib.assert(false, 'Only constant heat model supported') + end + + elseif (config.BC.yBCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + regentlib.assert(config.BC.yBCLeftInflowProfile.type == SCHEMA.InflowProfile_SuctionAndBlowing, + "SuctionAndBlowingWall BC requires a SuctionAndBlowing InflowProfile") + + + regentlib.assert(config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.A.length == config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.omega.length, + "Equal number of amplitudes and frequencies must be specified") + + regentlib.assert(config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.A.length == config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.beta.length, + "Equal number of amplitudes and spanwise wave numbers must be specified") + + if config.BC.yBCLeftHeat.type == SCHEMA.TempProfile_Constant then + -- Do nothing + else + regentlib.assert(false, 'Only constant heat model supported') + end + + else + regentlib.assert(false, "Boundary conditions in yBCLeft not implemented") + end + + if (config.BC.yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + -- Do nothing + elseif (config.BC.yBCRight == SCHEMA.FlowBC_Dirichlet) then + if config.BC.yBCRightInflowProfile.type == SCHEMA.InflowProfile_Constant then + -- Do nothing + elseif config.BC.yBCRightHeat.type == SCHEMA.InflowProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming InflowProfile not supported') + else regentlib.assert(false, 'Unhandled case in InflowProfile switch') end + if config.BC.yBCRightHeat.type == SCHEMA.TempProfile_Constant then + -- Do nothing + elseif config.BC.yBCRightHeat.type == SCHEMA.TempProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming heat model not supported') + else regentlib.assert(false, 'Unhandled case in TempProfile switch') end + if config.BC.yBCRightMixture.type == SCHEMA.MixtureProfile_Constant then + -- Do nothing + elseif config.BC.yBCRightMixture.type == SCHEMA.MixtureProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming mixture model not supported') + else regentlib.assert(false, 'Unhandled case in MixtureProfile switch') end + + elseif (config.BC.yBCRight == SCHEMA.FlowBC_AdiabaticWall) then + -- Do nothing + + elseif (config.BC.yBCRight == SCHEMA.FlowBC_IsothermalWall) then + -- Do nothing + if config.BC.yBCRightHeat.type == SCHEMA.TempProfile_Constant then + -- Do nothing + else + regentlib.assert(false, 'Only constant heat model supported') + end + else + regentlib.assert(false, "Boundary conditions in yBCRight not implemented") + end + end + + -- Set up flow BC's in z direction + if (not((config.BC.zBCLeft == SCHEMA.FlowBC_Periodic) and (config.BC.zBCRight == SCHEMA.FlowBC_Periodic))) then + if (config.BC.zBCLeft == SCHEMA.FlowBC_Dirichlet) then + if config.BC.zBCLeftInflowProfile.type == SCHEMA.InflowProfile_Constant then + -- Do nothing + elseif config.BC.zBCLeftHeat.type == SCHEMA.InflowProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming InflowProfile not supported') + else regentlib.assert(false, 'Unhandled case in InflowProfile switch') end + if config.BC.zBCLeftHeat.type == SCHEMA.TempProfile_Constant then + -- Do nothing + elseif config.BC.zBCLeftHeat.type == SCHEMA.TempProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming heat model not supported') + else regentlib.assert(false, 'Unhandled case in TempProfile switch') end + if config.BC.zBCLeftMixture.type == SCHEMA.MixtureProfile_Constant then + -- Do nothing + elseif config.BC.zBCLeftMixture.type == SCHEMA.MixtureProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming mixture model not supported') + else regentlib.assert(false, 'Unhandled case in MixtureProfile switch') end + + else + regentlib.assert(false, "Boundary conditions in zBCLeft not implemented") + end + + if (config.BC.zBCRight == SCHEMA.FlowBC_Dirichlet) then + if config.BC.zBCRightInflowProfile.type == SCHEMA.InflowProfile_Constant then + -- Do nothing + elseif config.BC.zBCRightHeat.type == SCHEMA.InflowProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming InflowProfile not supported') + else regentlib.assert(false, 'Unhandled case in InflowProfile switch') end + if config.BC.zBCRightHeat.type == SCHEMA.TempProfile_Constant then + -- Do nothing + elseif config.BC.zBCRightHeat.type == SCHEMA.TempProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming heat model not supported') + else regentlib.assert(false, 'Unhandled case in TempProfile switch') end + if config.BC.zBCRightMixture.type == SCHEMA.MixtureProfile_Constant then + -- Do nothing + elseif config.BC.zBCRightMixture.type == SCHEMA.MixtureProfile_Incoming then + -- Do nothing + regentlib.assert(false, 'Incoming mixture model not supported') + else regentlib.assert(false, 'Unhandled case in MixtureProfile switch') end + + else + regentlib.assert(false, "Boundary conditions in zBCRight not implemented") + end + end + + -- Check if boundary conditions in each direction are either both periodic or both non-periodic + if (not (((config.BC.xBCLeft == SCHEMA.FlowBC_Periodic) and (config.BC.xBCRight == SCHEMA.FlowBC_Periodic)) + or ((not (config.BC.xBCLeft == SCHEMA.FlowBC_Periodic)) and (not (config.BC.xBCRight == SCHEMA.FlowBC_Periodic))))) then + regentlib.assert(false, "Boundary conditions in x should match for periodicity") + end + if (not (((config.BC.yBCLeft == SCHEMA.FlowBC_Periodic) and (config.BC.yBCRight == SCHEMA.FlowBC_Periodic)) + or ((not (config.BC.yBCLeft == SCHEMA.FlowBC_Periodic)) and (not (config.BC.yBCRight == SCHEMA.FlowBC_Periodic))))) then + regentlib.assert(false, "Boundary conditions in y should match for periodicity") + end + if (not (((config.BC.zBCLeft == SCHEMA.FlowBC_Periodic) and (config.BC.zBCRight == SCHEMA.FlowBC_Periodic)) + or ((not (config.BC.zBCLeft == SCHEMA.FlowBC_Periodic)) and (not (config.BC.zBCRight == SCHEMA.FlowBC_Periodic))))) then + regentlib.assert(false, "Boundary conditions in z should match for periodicity") + end + + --------------------------------------------------------------------------- + -- Initialize forcing values + --------------------------------------------------------------------------- + + if config.Flow.turbForcing.type == SCHEMA.TurbForcingModel_CHANNEL then + config.Flow.turbForcing.u.CHANNEL.Forcing max= 1.0 + end + + --------------------------------------------------------------------------- + -- Create Regions and Partitions + --------------------------------------------------------------------------- + + var sampleId = config.Mapping.sampleId + + -- Create Fluid Regions + var is_Fluid = ispace(int3d, {x = config.Grid.xNum + 2*Grid.xBnum, + y = config.Grid.yNum + 2*Grid.yBnum, + z = config.Grid.zNum + 2*Grid.zBnum}) + var [Fluid] = region(is_Fluid, Fluid_columns); + [UTIL.emitRegionTagAttach(Fluid, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + var [Fluid_bounds] = [Fluid].bounds + var [Fluid_copy] = region(is_Fluid, Fluid_columns); + [UTIL.emitRegionTagAttach(Fluid_copy, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + + -- Partitioning domain + var [tiles] = ispace(int3d, {NX,NY,NZ}) + + -- Fluid Partitioning + var [Fluid_Partitions] = PartitionGrid(Fluid, tiles, config, Grid.xBnum, Grid.yBnum, Grid.zBnum) + var [Fluid_Partitions_copy] = PartitionGrid(Fluid_copy, tiles, config, Grid.xBnum, Grid.yBnum, Grid.zBnum) + + -- Unpack regions that will be used by autoparallelized tasks + var { p_All_t = p_All, + x_divg_t = x_divg, + y_divg_t = y_divg, + z_divg_t = z_divg, + p_x_divg_t = p_x_divg, + p_y_divg_t = p_y_divg, + p_z_divg_t = p_z_divg, + x_faces_t = x_faces, + y_faces_t = y_faces, + z_faces_t = z_faces, + p_x_faces_t = p_x_faces, + p_y_faces_t = p_y_faces, + p_z_faces_t = p_z_faces } = Fluid_Partitions + var [p_All] = p_All_t + var [x_divg] = x_divg_t[0] + var [y_divg] = y_divg_t[0] + var [z_divg] = z_divg_t[0] + var [p_x_divg] = p_x_divg_t[0] + var [p_y_divg] = p_y_divg_t[0] + var [p_z_divg] = p_z_divg_t[0] + var [x_faces] = x_faces_t[0] + var [y_faces] = y_faces_t[0] + var [z_faces] = z_faces_t[0] + var [p_x_faces] = p_x_faces_t[0] + var [p_y_faces] = p_y_faces_t[0] + var [p_z_faces] = p_z_faces_t[0] + + --------------------------------------------------------------------------- + -- Create one-dimensional averages + --------------------------------------------------------------------------- + + -- Create averages regions + var is_XAverages = ispace(int2d, {x = config.Grid.xNum + 2*Grid.xBnum, + y = config.IO.YZAverages.length }) + + var is_YAverages = ispace(int2d, {x = config.Grid.yNum + 2*Grid.yBnum, + y = config.IO.XZAverages.length }) + + var is_ZAverages = ispace(int2d, {x = config.Grid.zNum + 2*Grid.zBnum, + y = config.IO.XYAverages.length }) + + var [Averages.XAverages] = region(is_XAverages, AVG.Averages_columns) + var [Averages.YAverages] = region(is_YAverages, AVG.Averages_columns) + var [Averages.ZAverages] = region(is_ZAverages, AVG.Averages_columns) + var [Averages.XAverages_copy] = region(is_XAverages, AVG.Averages_columns) + var [Averages.YAverages_copy] = region(is_YAverages, AVG.Averages_columns) + var [Averages.ZAverages_copy] = region(is_ZAverages, AVG.Averages_columns); + + [UTIL.emitRegionTagAttach(Averages.XAverages, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + [UTIL.emitRegionTagAttach(Averages.YAverages, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + [UTIL.emitRegionTagAttach(Averages.ZAverages, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + [UTIL.emitRegionTagAttach(Averages.XAverages_copy, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + [UTIL.emitRegionTagAttach(Averages.YAverages_copy, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + [UTIL.emitRegionTagAttach(Averages.ZAverages_copy, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + + -- Partitioning averages in rakes + var [Averages.is_Xrakes] = ispace(int2d, {1, max(config.IO.YZAverages.length, 1)}) + var [Averages.is_Yrakes] = ispace(int2d, {1, max(config.IO.XZAverages.length, 1)}) + var [Averages.is_Zrakes] = ispace(int2d, {1, max(config.IO.XYAverages.length, 1)}) + + var [Averages.Xrakes] = partition(equal, Averages.XAverages, Averages.is_Xrakes) + var [Averages.Yrakes] = partition(equal, Averages.YAverages, Averages.is_Yrakes) + var [Averages.Zrakes] = partition(equal, Averages.ZAverages, Averages.is_Zrakes) + + var [Averages.Xrakes_copy] = partition(equal, Averages.XAverages_copy, Averages.is_Xrakes) + var [Averages.Yrakes_copy] = partition(equal, Averages.YAverages_copy, Averages.is_Yrakes) + var [Averages.Zrakes_copy] = partition(equal, Averages.ZAverages_copy, Averages.is_Zrakes) + +-- -- TODO: in the future we might want to partition these also along the rakes +-- var is_XrakesTiles = ispace(int2d, {NX, config.IO.YZAverages.length}) +-- var is_YrakesTiles = ispace(int2d, {NY, config.IO.XZAverages.length}) +-- var is_ZrakesTiles = ispace(int2d, {NZ, config.IO.XYAverages.length}); +-- +-- var [Averages.p_Xrakes] = [UTIL.mkPartitionByTile(int2d, int2d, AVG.Averages_columns)] +-- (Averages.Xrakes, is_XrakesTiles, int2d{Grid.xBnum,0}, int2d{0,0}) +-- var [Averages.p_Yrakes] = [UTIL.mkPartitionByTile(int2d, int2d, AVG.Averages_columns)] +-- (Averages.Yrakes, is_YrakesTiles, int2d{Grid.yBnum,0}, int2d{0,0}) +-- var [Averages.p_Zrakes] = [UTIL.mkPartitionByTile(int2d, int2d, AVG.Averages_columns)] +-- (Averages.Zrakes, is_ZrakesTiles, int2d{Grid.zBnum,0}, int2d{0,0}) + + -- Create local buffers for averages regions + var is_XAverages_local = ispace(int4d, {x = config.Grid.xNum + 2*Grid.xBnum, + y = config.IO.YZAverages.length , + z = NY , + w = NZ }) + + var is_YAverages_local = ispace(int4d, {x = config.Grid.yNum + 2*Grid.yBnum, + y = config.IO.XZAverages.length , + z = NX , + w = NZ }) + + var is_ZAverages_local = ispace(int4d, {x = config.Grid.zNum + 2*Grid.zBnum, + y = config.IO.XYAverages.length , + z = NX , + w = NY }) + + var [Averages.XAverages_local] = region(is_XAverages_local, AVG.Averages_columns) + var [Averages.YAverages_local] = region(is_YAverages_local, AVG.Averages_columns) + var [Averages.ZAverages_local] = region(is_ZAverages_local, AVG.Averages_columns); + + [UTIL.emitRegionTagAttach(Averages.XAverages_local, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + [UTIL.emitRegionTagAttach(Averages.YAverages_local, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + [UTIL.emitRegionTagAttach(Averages.ZAverages_local, MAPPER.SAMPLE_ID_TAG, sampleId, int)]; + + -- Partitioning local buffer in rakes + var [Averages.is_Xrakes_local] = ispace(int4d, {NX, max(config.IO.YZAverages.length, 1), NY, NZ}) + var [Averages.is_Yrakes_local] = ispace(int4d, {NY, max(config.IO.XZAverages.length, 1), NX, NZ}) + var [Averages.is_Zrakes_local] = ispace(int4d, {NZ, max(config.IO.XYAverages.length, 1), NX, NY}) + + var [Averages.p_Xrakes_local] = [UTIL.mkPartitionByTile(int4d, int4d, AVG.Averages_columns)] + (Averages.XAverages_local, Averages.is_Xrakes_local, int4d{Grid.xBnum,0,0,0}, int4d{0,0,0,0}) + var [Averages.p_Yrakes_local] = [UTIL.mkPartitionByTile(int4d, int4d, AVG.Averages_columns)] + (Averages.YAverages_local, Averages.is_Yrakes_local, int4d{Grid.yBnum,0,0,0}, int4d{0,0,0,0}) + var [Averages.p_Zrakes_local] = [UTIL.mkPartitionByTile(int4d, int4d, AVG.Averages_columns)] + (Averages.ZAverages_local, Averages.is_Zrakes_local, int4d{Grid.zBnum,0,0,0}, int4d{0,0,0,0}) + + end end -- DeclSymbols + + ----------------------------------------------------------------------------- + -- Region initialization + ----------------------------------------------------------------------------- + + function INSTANCE.InitRegions(config) return rquote + + InitializeCell(Fluid) + + -- Unpack the partitions that we are going to need + var {p_All, p_Interior, p_AllGhost, + xNeg, xPos, yNeg, yPos, zNeg, zPos, + p_xNeg, p_xPos, p_yNeg, p_yPos, p_zNeg, p_zPos} = Fluid_Partitions + + -- If we read a restart file it will contain the geometry + if config.Flow.initCase ~= SCHEMA.FlowInitCase_Restart then + __demand(__index_launch) + for c in tiles do + GRID.InitializeGeometry(p_All[c], + config.Grid.xType, config.Grid.yType, config.Grid.zType, + config.Grid.xStretching, config.Grid.yStretching, config.Grid.zStretching, + Grid.xBnum, config.Grid.xNum, config.Grid.origin[0], config.Grid.xWidth, + Grid.yBnum, config.Grid.yNum, config.Grid.origin[1], config.Grid.yWidth, + Grid.zBnum, config.Grid.zNum, config.Grid.origin[2], config.Grid.zWidth) + end + + __demand(__index_launch) + for c in tiles do + GRID.InitializeGhostGeometry(p_All[c], + config.Grid.xType, config.Grid.yType, config.Grid.zType, + config.Grid.xStretching, config.Grid.yStretching, config.Grid.zStretching, + Grid.xBnum, config.Grid.xNum, config.Grid.origin[0], config.Grid.xWidth, + Grid.yBnum, config.Grid.yNum, config.Grid.origin[1], config.Grid.yWidth, + Grid.zBnum, config.Grid.zNum, config.Grid.origin[2], config.Grid.zWidth) + end + end + + -- Initialize averages + [AVG.mkInitializeAverages(int2d)](Averages.XAverages); + [AVG.mkInitializeAverages(int2d)](Averages.YAverages); + [AVG.mkInitializeAverages(int2d)](Averages.ZAverages); + + -- Reinitialize reduction buffers + [AVG.mkInitializeAverages(int4d)](Averages.XAverages_local); + [AVG.mkInitializeAverages(int4d)](Averages.YAverages_local); + [AVG.mkInitializeAverages(int4d)](Averages.ZAverages_local) + + -- Initialize BC profiles + -- Read from file... + -- TODO: this will eventually become a separate call for each BC + if BC.readProfiles then + PROFILES.HDF.load(0, tiles, BC.ProfilesDir, Fluid, Fluid_copy, p_All, Fluid_Partitions_copy.p_All) + end + -- ... or use the config + [PROFILES.mkInitializeProfilesField("xBCRight")](xPos[0], config, Mix); + [PROFILES.mkInitializeProfilesField("xBCLeft" )](xNeg[0], config, Mix); + [PROFILES.mkInitializeProfilesField("yBCRight")](yPos[0], config, Mix); + [PROFILES.mkInitializeProfilesField("yBCLeft" )](yNeg[0], config, Mix); + [PROFILES.mkInitializeProfilesField("zBCRight")](zPos[0], config, Mix); + [PROFILES.mkInitializeProfilesField("zBCLeft" )](zNeg[0], config, Mix); + + -- Initialize solution + var initMolarFracs = CHEM.ParseConfigMixture(config.Flow.initMixture, Mix) + + if config.Flow.initCase == SCHEMA.FlowInitCase_Uniform then + __demand(__index_launch) + for c in tiles do + INIT.InitializeUniform(p_All[c], config.Flow.initParams, initMolarFracs) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_Random then + __demand(__index_launch) + for c in tiles do + INIT.InitializeRandom(p_All[c], config.Flow.initParams, initMolarFracs) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_TaylorGreen2DVortex then + __demand(__index_launch) + for c in tiles do + INIT.InitializeTaylorGreen2D(p_All[c], + config.Flow.initParams, + initMolarFracs, + Mix, + Grid.xBnum, config.Grid.xNum, config.Grid.origin[0], config.Grid.xWidth, + Grid.yBnum, config.Grid.yNum, config.Grid.origin[1], config.Grid.yWidth, + Grid.zBnum, config.Grid.zNum, config.Grid.origin[2], config.Grid.zWidth) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_TaylorGreen3DVortex then + __demand(__index_launch) + for c in tiles do + INIT.InitializeTaylorGreen3D(p_All[c], + config.Flow.initParams, + initMolarFracs, + Mix, + Grid.xBnum, config.Grid.xNum, config.Grid.origin[0], config.Grid.xWidth, + Grid.yBnum, config.Grid.yNum, config.Grid.origin[1], config.Grid.yWidth, + Grid.zBnum, config.Grid.zNum, config.Grid.origin[2], config.Grid.zWidth) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_Perturbed then + __demand(__index_launch) + for c in tiles do + INIT.InitializePerturbed(p_All[c], config.Flow.initParams, initMolarFracs) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_RiemannTestOne then + __demand(__index_launch) + for c in tiles do + INIT.InitializeRiemannTestOne(p_All[c], initMolarFracs, Mix) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_RiemannTestTwo then + __demand(__index_launch) + for c in tiles do + INIT.InitializeRiemannTestTwo(p_All[c], initMolarFracs, Mix) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_SodProblem then + __demand(__index_launch) + for c in tiles do + INIT.InitializeSodProblem(p_All[c], initMolarFracs, Mix) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_LaxProblem then + __demand(__index_launch) + for c in tiles do + INIT.InitializeLaxProblem(p_All[c], initMolarFracs, Mix) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_ShuOsherProblem then + __demand(__index_launch) + for c in tiles do + INIT.InitializeShuOsherProblem(p_All[c], initMolarFracs, Mix) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_VortexAdvection2D then + __demand(__index_launch) + for c in tiles do + INIT.InitializeVortexAdvection2D(p_All[c], config.Flow.initParams, initMolarFracs, Mix) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_GrossmanCinnellaProblem then + __demand(__index_launch) + for c in tiles do + INIT.InitializeGrossmanCinnellaProblem(p_All[c], Mix) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_ChannelFlow then + __demand(__index_launch) + for c in tiles do + INIT.InitializeChannelFlow(p_All[c], + config.Flow.initParams, + initMolarFracs, + Mix, + Grid.xBnum, config.Grid.xNum, config.Grid.origin[0], config.Grid.xWidth, + Grid.yBnum, config.Grid.yNum, config.Grid.origin[1], config.Grid.yWidth, + Grid.zBnum, config.Grid.zNum, config.Grid.origin[2], config.Grid.zWidth) + end + elseif config.Flow.initCase == SCHEMA.FlowInitCase_Restart then + Integrator_timeStep = HDF.read.timeStep(0, tiles, config.Flow.restartDir, Fluid, p_All) + Integrator_simTime = HDF.read.simTime( 0, tiles, config.Flow.restartDir, Fluid, p_All) + if config.Flow.turbForcing.type == SCHEMA.TurbForcingModel_CHANNEL then + config.Flow.turbForcing.u.CHANNEL.Forcing = HDF.read.channelForcing( 0, tiles, config.Flow.restartDir, Fluid, p_All) + end + HDF.load(0, tiles, config.Flow.restartDir, Fluid, Fluid_copy, p_All, Fluid_Partitions_copy.p_All) + if not config.IO.ResetAverages then + var dirname = [&int8](C.malloc(256)) + if config.IO.YZAverages.length ~= 0 then + C.snprintf(dirname, 256, '%s/YZAverages', config.Flow.restartDir) + AVG.HDF.load(0, Averages.is_Xrakes, dirname, Averages.XAverages, Averages.XAverages_copy, Averages.Xrakes, Averages.Xrakes_copy) + end + if config.IO.XZAverages.length ~= 0 then + C.snprintf(dirname, 256, '%s/XZAverages', config.Flow.restartDir) + AVG.HDF.load(0, Averages.is_Yrakes, dirname, Averages.YAverages, Averages.YAverages_copy, Averages.Yrakes, Averages.Yrakes_copy) + end + if config.IO.XYAverages.length ~= 0 then + C.snprintf(dirname, 256, '%s/XYAverages', config.Flow.restartDir) + AVG.HDF.load(0, Averages.is_Zrakes, dirname, Averages.ZAverages, Averages.ZAverages_copy, Averages.Zrakes, Averages.Zrakes_copy) + end + C.free(dirname) + end + else regentlib.assert(false, 'Unhandled case in switch') end + + if config.Integrator.resetTime then + Integrator_simTime = config.Integrator.startTime + Integrator_timeStep = config.Integrator.startIter + end + + if config.Flow.resetMixture then + __demand(__index_launch) + for c in tiles do + CHEM.ResetMixture(p_All[c], p_Interior[c], initMolarFracs) + end + end + + -- Initialize grid operators + METRIC.InitializeMetric(Fluid, + Fluid_bounds, + Grid.xBnum, config.Grid.xNum, + Grid.yBnum, config.Grid.yNum, + Grid.zBnum, config.Grid.zNum); + + -- Enforce BCs on the metric + [METRIC.mkCorrectGhostMetric("x")](Fluid, Fluid_bounds, config.BC.xBCLeft, config.BC.xBCRight, Grid.xBnum, config.Grid.xNum); + [METRIC.mkCorrectGhostMetric("y")](Fluid, Fluid_bounds, config.BC.yBCLeft, config.BC.yBCRight, Grid.yBnum, config.Grid.yNum); + [METRIC.mkCorrectGhostMetric("z")](Fluid, Fluid_bounds, config.BC.zBCLeft, config.BC.zBCRight, Grid.zBnum, config.Grid.zNum) + + -- initialize ghost cells to their specified values in NSCBC case + if (config.Flow.initCase ~= SCHEMA.FlowInitCase_Restart) then + -- only if we did not read these values from the restart file + if config.BC.xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow then + __demand(__index_launch) + for c in tiles do + BCOND.InitializeGhostNSCBC(p_All[c], p_xNeg[c], Mix) + end + end + end + + __demand(__index_launch) + for c in tiles do + VARS.UpdatePropertiesFromPrimitive(p_All[c], p_All[c], Mix) + end + + __demand(__index_launch) + for c in tiles do + VARS.UpdateConservedFromPrimitive(p_All[c], p_Interior[c], Mix) + end + + -- update values of conserved variables in ghost cells + __demand(__index_launch) + for c in tiles do + VARS.UpdateConservedFromPrimitive(p_All[c], p_AllGhost[c], Mix) + end + + UpdateFluxesFromConserved(Fluid, + Fluid_bounds, + tiles, + Fluid_Partitions, + x_faces, y_faces, z_faces, + config, + Mix, + Integrator_simTime) + + end end -- InitRegions + + ----------------------------------------------------------------------------- + -- Main time-step loop header + ----------------------------------------------------------------------------- + + function INSTANCE.MainLoopHeader(config) return rquote + + -- Unpack the partitions that we are going to need + var {p_All} = Fluid_Partitions + + -- Calculate exit condition + Integrator_exitCond = + (Integrator_timeStep >= config.Integrator.maxIter) or + (Integrator_simTime >= config.Integrator.maxTime) + + -- Determine time step size + if config.Integrator.cfl > 0.0 then + var Integrator_maxSpectralRadius = 0.0 + __demand(__index_launch) + for c in tiles do + Integrator_maxSpectralRadius max= CFL.CalculateMaxSpectralRadius(p_All[c], Mix) + end + Integrator_deltaTime = config.Integrator.cfl/Integrator_maxSpectralRadius + end + + end end -- MainLoopHeader + + ----------------------------------------------------------------------------- + -- Per-time-step I/O + ----------------------------------------------------------------------------- + + function INSTANCE.PerformIO(config) return rquote + + -- Unpack the partitions that we are going to need + var {p_All, p_Interior} = Fluid_Partitions + + -- Write to console + var AveragePressure = 0.0 + var AverageTemperature = 0.0 + var AverageKineticEnergy = 0.0 + var averageRhoU = 0.0 + __demand(__index_launch) + for c in tiles do + AveragePressure += STAT.CalculateAveragePressure(p_All[c], p_Interior[c]) + end + __demand(__index_launch) + for c in tiles do + AverageTemperature += STAT.CalculateAverageTemperature(p_All[c], p_Interior[c]) + end + __demand(__index_launch) + for c in tiles do + AverageKineticEnergy += STAT.CalculateAverageKineticEnergy(p_All[c], p_Interior[c]) + end + + -- Rescale channel flow forcing + if config.Flow.turbForcing.type == SCHEMA.TurbForcingModel_CHANNEL then + __demand(__index_launch) + for c in tiles do + averageRhoU += STAT.CalculateAverageRhoU(p_All[c], p_Interior[c], 0) + end + end + + var interior_volume = 0.0 + __demand(__index_launch) + for c in tiles do + interior_volume += STAT.CalculateInteriorVolume(p_All[c], p_Interior[c]) + end + + AveragePressure = (AveragePressure /interior_volume) + AverageTemperature = (AverageTemperature /interior_volume) + AverageKineticEnergy = (AverageKineticEnergy/interior_volume) + IO.Console_Write(config.Mapping, + Integrator_timeStep, + Integrator_simTime, + startTime, + Integrator_deltaTime, + AveragePressure, + AverageTemperature, + AverageKineticEnergy) + + if config.Flow.turbForcing.type == SCHEMA.TurbForcingModel_CHANNEL then + averageRhoU = (averageRhoU / interior_volume) + config.Flow.turbForcing.u.CHANNEL.Forcing *= config.Flow.turbForcing.u.CHANNEL.RhoUbulk/averageRhoU + end + + -- Add averages + if (Integrator_timeStep % config.IO.AveragesSamplingInterval == 0 and + ((config.IO.YZAverages.length ~= 0) or + (config.IO.XZAverages.length ~= 0) or + (config.IO.XYAverages.length ~= 0) )) then + + -- Update temperature gradient for mean heat flux + VARS.GetTemperatureGradients(Fluid, Fluid_bounds) + + for rake=0, config.IO.YZAverages.length do + __demand(__index_launch) + for c in tiles do + [AVG.mkAddAverages('x')](p_All[c], Averages.p_Xrakes_local[int4d{c.x,rake,c.y,c.z}], Mix, + config.IO.YZAverages.values[rake], Integrator_deltaTime) + end + end + for rake=0, config.IO.XZAverages.length do + __demand(__index_launch) + for c in tiles do + [AVG.mkAddAverages('y')](p_All[c], Averages.p_Yrakes_local[int4d{c.y,rake,c.x,c.z}], Mix, + config.IO.XZAverages.values[rake], Integrator_deltaTime) + end + end + for rake=0, config.IO.XYAverages.length do + __demand(__index_launch) + for c in tiles do + [AVG.mkAddAverages('z')](p_All[c], Averages.p_Zrakes_local[int4d{c.z,rake,c.x,c.y}], Mix, + config.IO.XYAverages.values[rake], Integrator_deltaTime) + end + end + end + + -- Dump restart files + if config.IO.wrtRestart then + if Integrator_exitCond or Integrator_timeStep % config.IO.restartEveryTimeSteps == 0 then + var SpeciesNames = MIX.GetSpeciesNames(Mix) + var dirname = [&int8](C.malloc(256)) + C.snprintf(dirname, 256, '%s/fluid_iter%010d', config.Mapping.outDir, Integrator_timeStep) + var _1 = IO.createDir(dirname) + _1 = HDF.dump( _1, tiles, dirname, Fluid, Fluid_copy, p_All, Fluid_Partitions_copy.p_All) + _1 = HDF.write.timeStep( _1, tiles, dirname, Fluid, p_All, Integrator_timeStep) + _1 = HDF.write.simTime( _1, tiles, dirname, Fluid, p_All, Integrator_simTime) + _1 = HDF.write.SpeciesNames( _1, tiles, dirname, Fluid, p_All, SpeciesNames) + _1 = HDF.write.channelForcing( _1, tiles, dirname, Fluid, p_All, config.Flow.turbForcing.u.CHANNEL.Forcing) + if config.IO.YZAverages.length ~= 0 then +-- AVG.DummyAverages(Averages.XAverages) + -- Reduce from reduction buffers + [AVG.mkReduceAverages('x')](Averages.XAverages, Averages.XAverages_local, tiles); + -- Reinitialize reduction buffers + [AVG.mkInitializeAverages(int4d)](Averages.XAverages_local) + var Avgdirname = [&int8](C.malloc(256)) + C.snprintf(Avgdirname, 256, '%s/YZAverages', dirname) + var _1 = IO.createDir(Avgdirname) + _1 = AVG.HDF.dump( _1, Averages.is_Xrakes, Avgdirname, Averages.XAverages, Averages.XAverages_copy, Averages.Xrakes, Averages.Xrakes_copy) + _1 = AVG.HDF.write.SpeciesNames( _1, Averages.is_Xrakes, Avgdirname, Averages.XAverages, Averages.Xrakes, SpeciesNames) + C.free(Avgdirname) + end + if config.IO.XZAverages.length ~= 0 then +-- AVG.DummyAverages(Averages.YAverages) + -- Reduce from reduction buffers + [AVG.mkReduceAverages('y')](Averages.YAverages, Averages.YAverages_local, tiles); + -- Reinitialize reduction buffers + [AVG.mkInitializeAverages(int4d)](Averages.YAverages_local) + var Avgdirname = [&int8](C.malloc(256)) + C.snprintf(Avgdirname, 256, '%s/XZAverages', dirname) + var _1 = IO.createDir(Avgdirname) + _1 = AVG.HDF.dump( _1, Averages.is_Yrakes, Avgdirname, Averages.YAverages, Averages.YAverages_copy, Averages.Yrakes, Averages.Yrakes_copy) + _1 = AVG.HDF.write.SpeciesNames( _1, Averages.is_Yrakes, Avgdirname, Averages.YAverages, Averages.Yrakes, SpeciesNames) + C.free(Avgdirname) + end + if config.IO.XYAverages.length ~= 0 then +-- AVG.DummyAverages(Averages.ZAverages) + -- Reduce from reduction buffers + [AVG.mkReduceAverages('z')](Averages.ZAverages, Averages.ZAverages_local, tiles); + -- Reinitialize reduction buffers + [AVG.mkInitializeAverages(int4d)](Averages.ZAverages_local) + var Avgdirname = [&int8](C.malloc(256)) + C.snprintf(Avgdirname, 256, '%s/XYAverages', dirname) + var _1 = IO.createDir(Avgdirname) + _1 = AVG.HDF.dump( _1, Averages.is_Zrakes, Avgdirname, Averages.ZAverages, Averages.ZAverages_copy, Averages.Zrakes, Averages.Zrakes_copy) + _1 = AVG.HDF.write.SpeciesNames( _1, Averages.is_Zrakes, Avgdirname, Averages.ZAverages, Averages.Zrakes, SpeciesNames) + C.free(Avgdirname) + end + C.free(dirname); + end + end + + end end -- PerformIO + + ----------------------------------------------------------------------------- + -- Main time-step loop body + ----------------------------------------------------------------------------- + + function INSTANCE.MainLoopBody(config) return rquote + + var Integrator_time_old = Integrator_simTime + + -- Unpack the partitions that we are going to need + var {p_All, p_solved, p_xNeg, p_xPos, p_yNeg, p_yPos, p_zNeg, p_zPos} = Fluid_Partitions + + if config.Integrator.implicitChemistry then + --------------------------------------------------------------- + -- Update the conserved varialbes using the implicit solver --- + --------------------------------------------------------------- + -- Update the time derivatives + UpdateDerivativesFromFluxes(Fluid, + Fluid_bounds, + tiles, + Fluid_Partitions, + x_divg, y_divg, z_divg, + config, + Mix, + false) + + -- TODO: it is not clear if here we need to correct the derivatives to + -- preserve boundness + + -- Advance chemistry implicitely + __demand(__index_launch) + for c in tiles do + CHEM.UpdateChemistry(p_All[c], p_solved[c], Integrator_deltaTime, Mix) + end + + -- Update the fluxes in preparation to the RK algorithm + UpdateFluxesFromConserved(Fluid, + Fluid_bounds, + tiles, + Fluid_Partitions, + x_faces, y_faces, z_faces, + config, + Mix, + Integrator_simTime) + + -- The result of the local implicit solver is at 0.5*dt + Integrator_simTime = Integrator_time_old + Integrator_deltaTime*0.5 + end + + -- Set iteration-specific fields that persist across RK sub-steps + __demand(__index_launch) + for c in tiles do + RK.InitializeTemporaries(p_All[c]) + end + + -- RK sub-time-stepping loop + @ESCAPE for STAGE = 1, 3 do @EMIT + + -- Update the time derivatives + UpdateDerivativesFromFluxes(Fluid, + Fluid_bounds, + tiles, + Fluid_Partitions, + x_divg, y_divg, z_divg, + config, + Mix, + config.Integrator.implicitChemistry); + + -- Predictor part of the time step + __demand(__index_launch) + for c in tiles do + [RK.mkUpdateVarsPred(STAGE)](p_All[c], Integrator_deltaTime, config.Integrator.implicitChemistry) + end + + -- Correct time derivatives to preserve boundness + CorrectDerivatives(Fluid, + Fluid_bounds, + tiles, + Fluid_Partitions, + x_divg, y_divg, z_divg, + config, + Mix) + + -- Corrector part of the time step + __demand(__index_launch) + for c in tiles do + [RK.mkUpdateVarsCorr(STAGE)](p_All[c], Integrator_deltaTime, config.Integrator.implicitChemistry) + end + + -- Update the fluxes + UpdateFluxesFromConserved(Fluid, + Fluid_bounds, + tiles, + Fluid_Partitions, + x_faces, y_faces, z_faces, + config, + Mix, + Integrator_simTime); + + ---- Advance the time for the next sub-step + @ESCAPE if STAGE == 3 then @EMIT + Integrator_simTime = Integrator_time_old + Integrator_deltaTime + @TIME else @EMIT + if config.Integrator.implicitChemistry then + Integrator_simTime = Integrator_time_old + + Integrator_deltaTime * 0.5 *(1.0 + [RK_C[STAGE][3]]) + else + Integrator_simTime = Integrator_time_old + [RK_C[STAGE][3]] * Integrator_deltaTime + end + @TIME end @EPACSE + @TIME end @EPACSE-- RK sub-time-stepping + + -- Update time derivatives at boundary for NSCBC + if config.BC.xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow then + __demand(__index_launch) + for c in tiles do + BCOND.UpdateNSCBCGhostCellTimeDerivatives(p_All[c], p_xNeg[c], Integrator_deltaTime) + end + end + + Integrator_timeStep += 1 + + end end -- MainLoopBody + + ----------------------------------------------------------------------------- + -- Cleanup code + ----------------------------------------------------------------------------- + + function INSTANCE.Cleanup(config) return rquote + + -- Wait for everything above to finish + __fence(__execution, __block) + + -- Report final time + IO.Console_WriteFooter(config.Mapping, startTime) + + end end -- Cleanup + +return INSTANCE end -- mkInstance + +------------------------------------------------------------------------------- +-- TOP-LEVEL INTERFACE +------------------------------------------------------------------------------- + +local function parallelizeFor(sim, stmts) + return rquote + __parallelize_with + sim.tiles, + disjoint(sim.p_All), + complete(sim.p_All, sim.Fluid), + disjoint(sim.p_x_divg), + complete(sim.p_x_divg, sim.x_divg), + disjoint(sim.p_y_divg), + complete(sim.p_y_divg, sim.y_divg), + disjoint(sim.p_z_divg), + complete(sim.p_z_divg, sim.z_divg), + sim.p_x_divg <= sim.p_All, + sim.p_y_divg <= sim.p_All, + sim.p_z_divg <= sim.p_All, + disjoint(sim.p_x_faces), + complete(sim.p_x_faces, sim.x_faces), + disjoint(sim.p_y_faces), + complete(sim.p_y_faces, sim.y_faces), + disjoint(sim.p_z_faces), + complete(sim.p_z_faces, sim.z_faces), + sim.p_x_faces <= sim.p_All, + sim.p_y_faces <= sim.p_All, + sim.p_z_faces <= sim.p_All + do [stmts] end + end +end + +local SIM = mkInstance() + +__demand(__inner, __replicable) +task workSingle(config : Config) + [SIM.DeclSymbols(config)]; + [parallelizeFor(SIM, rquote + [SIM.InitRegions(config)]; + while true do + [SIM.MainLoopHeader(config)]; + [SIM.PerformIO(config)]; + if SIM.Integrator_exitCond then + break + end + [SIM.MainLoopBody(config)]; + end + end)]; + [SIM.Cleanup(config)]; +end + +__demand(__inline) +task initSingle(config : &Config, launched : int, outDirBase : &int8) + config.Mapping.sampleId = launched + C.snprintf([&int8](config.Mapping.outDir), 256, "%s/sample%d", outDirBase, launched) + UTIL.createDir(config.Mapping.outDir) +end + +__demand(__inner) +task main() + var args = regentlib.c.legion_runtime_get_input_args() + var outDirBase = '.' + for i = 1, args.argc do + if C.strcmp(args.argv[i], '-o') == 0 and i < args.argc-1 then + outDirBase = args.argv[i+1] + end + end + var launched = 0 + for i = 1, args.argc do + if C.strcmp(args.argv[i], '-i') == 0 and i < args.argc-1 then + var config : Config + SCHEMA.parse_Config(&config, args.argv[i+1]) + initSingle(&config, launched, outDirBase) + launched += 1 + workSingle(config) + end + end + if launched < 1 then + var stderr = C.fdopen(2, 'w') + C.fprintf(stderr, "No testcases supplied.\n") + C.fflush(stderr) + C.exit(1) + end +end + +------------------------------------------------------------------------------- +-- COMPILATION CALL +------------------------------------------------------------------------------- + +regentlib.saveobj(main, "prometeo_"..os.getenv("EOS")..".o", "object", MAPPER.register_mappers) diff --git a/src/prometeo.sh b/src/prometeo.sh new file mode 100755 index 0000000..a01d50f --- /dev/null +++ b/src/prometeo.sh @@ -0,0 +1,104 @@ +#!/bin/bash -eu + +############################################################################### +# Inputs +############################################################################### + +# Which group to submit jobs under (if a scheduler is available) +export GROUP="${GROUP:-}" + +# Which queue/partition to use (if a scheduler is available) +export QUEUE="${QUEUE:-}" + +# Which job to wait for before starting (if a scheduler is available) +export AFTER="${AFTER:-}" + +# Whether to use GPUs (if available) +export USE_CUDA="${USE_CUDA:-1}" + +# Whether to emit Legion profiler logs +export PROFILE="${PROFILE:-0}" + +# Whether to print a backtrace on crash (interferes with signal handling) +export REALM_BACKTRACE="${REALM_BACKTRACE:-0}" + +# Whether to freeze Legion execution on crash +export DEBUG="${DEBUG:-0}" + +# How many ranks to instantiate per node +export RANKS_PER_NODE="${RANKS_PER_NODE:-1}" + +# How many cores per rank to reserve for the runtime +export RESERVED_CORES="${RESERVED_CORES:-8}" + +############################################################################### +# Helper functions +############################################################################### + +function quit { + echo "$1" >&2 + exit 1 +} + +function read_json { + python2 -c " +import json +def wallTime(sample): + return int(sample['Mapping']['wallTime']) +def numRanks(sample): + tiles = sample['Mapping']['tiles'] + tilesPerRank = sample['Mapping']['tilesPerRank'] + xRanks = int(tiles[0]) / int(tilesPerRank[0]) + yRanks = int(tiles[1]) / int(tilesPerRank[1]) + zRanks = int(tiles[2]) / int(tilesPerRank[2]) + return xRanks * yRanks * zRanks +def mixture(sample): + print(sample['Flow']['mixture']) + assert sample['Flow']['mixture'] == 'ConstPropMix' or \ + sample['Flow']['mixture'] == 'AirMix' + return sample['Flow']['mixture'] +f = json.load(open('$1')) +if '$2' == 'single': + print wallTime(f), numRanks(f), mixture(f) +elif '$2' == 'dual': + assert mixture(f['configs'][0]) == (f['configs'][1]) + print max(wallTime(f['configs'][0]), wallTime(f['configs'][1])), \ + numRanks(f['configs'][0]) + numRanks(f['configs'][1]), \ + mixture(f['configs'][0]) +else: + assert(false)" +} + +############################################################################### +# Derived options +############################################################################### + +# Total wall-clock time is the maximum across all samples. +# Total number of ranks is the sum of all sample rank requirements. +MINUTES=0 +NUM_RANKS=0 +MIX="" +function parse_config { + read -r _MINUTES _NUM_RANKS _MIX <<<"$(read_json "$@")" + MINUTES=$(( MINUTES > _MINUTES ? MINUTES : _MINUTES )) + NUM_RANKS=$(( NUM_RANKS + _NUM_RANKS )) + MIX=$_MIX +} +for (( i = 1; i <= $#; i++ )); do + j=$((i+1)) + if [[ "${!i}" == "-i" ]] && (( $i < $# )); then + parse_config "${!j}" "single" + elif [[ "${!i}" == "-m" ]] && (( $i < $# )); then + parse_config "${!j}" "dual" + fi +done +if (( NUM_RANKS < 1 )); then + quit "No configuration files provided" +fi +export MINUTES +export NUM_RANKS +export EXECUTABLE="$HTR_DIR"/src/prometeo_"$MIX".exec + +############################################################################### + +source "$HTR_DIR"/src/run.sh diff --git a/src/prometeo_IO.rg b/src/prometeo_IO.rg new file mode 100644 index 0000000..41297e1 --- /dev/null +++ b/src/prometeo_IO.rg @@ -0,0 +1,170 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local C = regentlib.c +local MACRO = require 'prometeo_macro' +local UTIL = require 'util-desugared' + +------------------------------------------------------------------------------- +-- I/O RUTINES +------------------------------------------------------------------------------- + +-- regentlib.rexpr, regentlib.rexpr, regentlib.rexpr* -> regentlib.rquote +local function emitConsoleWrite(config_Mapping, format, ...) + local args = terralib.newlist{...} + return rquote + var consoleFile = [&int8](C.malloc(256)) + C.snprintf(consoleFile, 256, '%s/console.txt', config_Mapping.outDir) + var console = UTIL.openFile(consoleFile, 'a') + C.free(consoleFile) + C.fprintf(console, format, [args]) + C.fflush(console) + C.fclose(console) + end +end + +-- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +task Exports.Console_WriteHeader(config_Mapping : SCHEMA.MappingStruct) + [emitConsoleWrite(config_Mapping, 'Iter\t'.. + 'Sim Time\t'.. + 'Wall t\t'.. + 'Delta Time\t'.. + 'Avg Press\t'.. + 'Avg Temp\t'.. + 'Average KE\n')]; +end + +-- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +task Exports.Console_Write(config_Mapping : SCHEMA.MappingStruct, + Integrator_timeStep : int, + Integrator_simTime : double, + startTime : uint64, + Integrator_deltaTime : double, + Flow_averagePressure : double, + Flow_averageTemperature : double, + Flow_averageKineticEnergy : double) + var currTime = C.legion_get_current_time_in_micros() / 1000; + [emitConsoleWrite(config_Mapping, '%d\t'.. + '%e\t'.. + '%llu.%03llu\t'.. + '%e\t'.. + '%e\t'.. + '%e\t'.. + '%e\n', + Integrator_timeStep, + Integrator_simTime, + rexpr (currTime - startTime) / 1000 end, + rexpr (currTime - startTime) % 1000 end, + Integrator_deltaTime, + Flow_averagePressure, + Flow_averageTemperature, + Flow_averageKineticEnergy)]; +end + +-- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +task Exports.Console_WriteFooter(config_Mapping : SCHEMA.MappingStruct, + startTime : uint64) + var endTime = C.legion_get_current_time_in_micros() / 1000; + [emitConsoleWrite(config_Mapping, + 'Total time: %llu.%03llu seconds\n', + rexpr (endTime - startTime) / 1000 end, + rexpr (endTime - startTime) % 1000 end)]; +end + +---- regentlib.rexpr, regentlib.rexpr, regentlib.rexpr, regentlib.rexpr* +---- -> regentlib.rquote +--local function emitProbeWrite(config, probeId, format, ...) +-- local args = terralib.newlist{...} +-- return rquote +-- var filename = [&int8](C.malloc(256)) +-- C.snprintf(filename, 256, '%s/probe%d.csv', config.Mapping.outDir, probeId) +-- var file = UTIL.openFile(filename, 'a') +-- C.free(filename) +-- C.fprintf(file, format, [args]) +-- C.fflush(file) +-- C.fclose(file) +-- end +--end +-- +--__demand(__parallel, __cuda) +--task Exports.Probe_AvgFluidT(Fluid : region(ispace(int3d), Fluid_columns), +-- probe : SCHEMA.Volume, +-- totalCells : int) +--where +-- reads(Fluid.temperature) +--do +-- var fromCell = probe.fromCell +-- var uptoCell = probe.uptoCell +-- var acc = 0.0 +-- __demand(__openmp) +-- for c in Fluid do +-- if fromCell[0] <= c.x and c.x <= uptoCell[0] and +-- fromCell[1] <= c.y and c.y <= uptoCell[1] and +-- fromCell[2] <= c.z and c.z <= uptoCell[2] then +-- acc += Fluid[c].temperature / totalCells +-- end +-- end +-- return acc +--end +-- +---- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +--task Exports.Probe_WriteHeader(config : Config, +-- probeId : int) +-- [emitProbeWrite(config, probeId, 'Iter\t'.. +-- 'AvgFluidT\t'.. +-- 'AvgParticleT\t'.. +-- 'AvgCellOfParticleT\n')]; +--end +-- +---- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +--task Exports.Probe_Write(config : Config, +-- probeId : int, +-- Integrator_timeStep : int, +-- avgFluidT : double) +-- [emitProbeWrite(config, probeId, '%d\t'.. +-- '%e\n', +-- Integrator_timeStep, +-- avgFluidT)]; +--end + +-- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +task Exports.createDir(dirname : regentlib.string) + UTIL.createDir(dirname) + return 0 +end + +return Exports end + diff --git a/src/prometeo_average.rg b/src/prometeo_average.rg new file mode 100644 index 0000000..78dde3d --- /dev/null +++ b/src/prometeo_average.rg @@ -0,0 +1,484 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA, MIX, Fluid_columns) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local C = regentlib.c +local UTIL = require 'util-desugared' +local CONST = require "prometeo_const" +local MACRO = require "prometeo_macro" + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture +local irU = CONST.GetirU(MIX) -- Index of the momentum in Conserved vector +local irE = CONST.GetirE(MIX) -- Index of the total energy density in Conserved vector +local nEq = CONST.GetnEq(MIX) -- Total number of unknowns for the implicit solver + +local Primitives = CONST.Primitives +local Properties = CONST.Properties + +------------------------------------------------------------------------------- +-- DATA STRUCTURES +------------------------------------------------------------------------------- + +struct Exports.Averages_columns { + weight : double; + -- Primitive variables + pressure_avg : double; + pressure_rms : double; + temperature_avg : double; + temperature_rms : double; + MolarFracs_avg : double[nSpec]; + MolarFracs_rms : double[nSpec]; + velocity_avg : double[3]; + velocity_rms : double[3]; + velocity_rey : double[3]; + -- Properties + rho_avg : double; + rho_rms : double; + mu_avg : double; + mu_rms : double; + lam_avg : double; + lam_rms : double; + Di_avg : double[nSpec]; + Di_rms : double[nSpec]; + SoS_avg : double; + SoS_rms : double; + cp_avg : double; + cp_rms : double; + MixW_avg : double; + MixW_rms : double; + -- Chemical production rates + ProductionRates_avg : double[nSpec]; + ProductionRates_rms : double[nSpec]; + HeatReleaseRate_avg : double; + HeatReleaseRate_rms : double; + -- Favre averages + temperature_favg : double; + temperature_frms : double; + MolarFracs_favg : double[nSpec]; + MolarFracs_frms : double[nSpec]; + velocity_favg : double[3]; + velocity_frms : double[3]; + velocity_frey : double[3]; + -- Kinetic energy budgets (y is the inhomogeneous direction) + rhoUUv : double[3]; + Up : double[3]; + tau : double[6]; + utau_y : double[3]; + tauGradU : double[3]; + pGradU : double[3]; + -- Fluxes + q : double[3]; + -- Dimensionless numbers + Pr : double; + Pr_rms : double; + Ec : double; + Ec_rms : double; +} + +local AveragesVars = terralib.newlist({ + 'weight', + -- Primitive variables + 'pressure_avg', + 'pressure_rms', + 'temperature_avg', + 'temperature_rms', + 'MolarFracs_avg', + 'MolarFracs_rms', + 'velocity_avg', + 'velocity_rms', + 'velocity_rey', + -- Properties + 'rho_avg', + 'rho_rms', + 'mu_avg', + 'mu_rms', + 'lam_avg', + 'lam_rms', + 'Di_avg', + 'Di_rms', + 'SoS_avg', + 'SoS_rms', + 'cp_avg', + 'cp_rms', + 'MixW_avg', + 'MixW_rms', + -- Chemical production rates + 'ProductionRates_avg', + 'ProductionRates_rms', + 'HeatReleaseRate_avg', + 'HeatReleaseRate_rms', + -- Favre averages + 'temperature_favg', + 'temperature_frms', + 'MolarFracs_favg', + 'MolarFracs_frms', + 'velocity_favg', + 'velocity_frms', + 'velocity_frey', + -- Kinetic energy budgets (y is the inhomogeneous direction) + 'rhoUUv', + 'Up', + 'tau', + 'utau_y', + 'tauGradU', + 'pGradU', + -- Fluxes + 'q', + -- Dimensionless numbers + 'Pr', + 'Pr_rms', + 'Ec', + 'Ec_rms' +}) + +Exports.HDF = (require 'hdf_helper')(int2d, int2d, Exports.Averages_columns, + AveragesVars, + {}, + {SpeciesNames=nSpec}) + +------------------------------------------------------------------------------- +-- AVERAGES ROUTINES +------------------------------------------------------------------------------- +function Exports.mkInitializeAverages(nd) + local InitializeAverages + __demand(__inline) + task InitializeAverages(Averages : region(ispace(nd), Exports.Averages_columns)) + where + writes(Averages) + do + fill(Averages.weight, 0.0) + -- Primitive variables + fill(Averages.pressure_avg, 0.0) + fill(Averages.pressure_rms, 0.0) + fill(Averages.temperature_avg, 0.0) + fill(Averages.temperature_rms, 0.0) + fill(Averages.MolarFracs_avg, [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Averages.MolarFracs_rms, [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Averages.velocity_avg, array(0.0, 0.0, 0.0)) + fill(Averages.velocity_rms, array(0.0, 0.0, 0.0)) + fill(Averages.velocity_rey, array(0.0, 0.0, 0.0)) + -- Properties + fill(Averages.rho_avg, 0.0) + fill(Averages.rho_rms, 0.0) + fill(Averages.mu_avg, 0.0) + fill(Averages.mu_rms, 0.0) + fill(Averages.lam_avg, 0.0) + fill(Averages.lam_rms, 0.0) + fill(Averages.Di_avg, [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Averages.Di_rms, [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Averages.SoS_avg, 0.0) + fill(Averages.SoS_rms, 0.0) + fill(Averages.cp_avg, 0.0) + fill(Averages.cp_rms, 0.0) + fill(Averages.MixW_avg, 0.0) + fill(Averages.MixW_rms, 0.0) + -- Chemical production rates + fill(Averages.ProductionRates_avg, [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Averages.ProductionRates_rms, [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Averages.HeatReleaseRate_avg, 0.0) + fill(Averages.HeatReleaseRate_rms, 0.0) + -- Favre averages + fill(Averages.temperature_favg, 0.0) + fill(Averages.temperature_frms, 0.0) + fill(Averages.MolarFracs_favg, [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Averages.MolarFracs_frms, [UTIL.mkArrayConstant(nSpec, rexpr 0.0 end)]) + fill(Averages.velocity_favg, array(0.0, 0.0, 0.0)) + fill(Averages.velocity_frms, array(0.0, 0.0, 0.0)) + fill(Averages.velocity_frey, array(0.0, 0.0, 0.0)) + -- Kinetic energy budgets (y is the inhomogeneous direction) + fill(Averages.rhoUUv, array(0.0, 0.0, 0.0)) + fill(Averages.Up, array(0.0, 0.0, 0.0)) + fill(Averages.tau, [UTIL.mkArrayConstant(6, rexpr 0.0 end)]) + fill(Averages.utau_y, array(0.0, 0.0, 0.0)) + fill(Averages.tauGradU, array(0.0, 0.0, 0.0)) + fill(Averages.pGradU, array(0.0, 0.0, 0.0)) + -- Fluxes + fill(Averages.q, array(0.0, 0.0, 0.0)) + -- Dimensionless numbers + fill(Averages.Pr, 0.0) + fill(Averages.Pr_rms, 0.0) + fill(Averages.Ec, 0.0) + fill(Averages.Ec_rms, 0.0) + + end + return InitializeAverages +end + +function Exports.mkAddAverages(dir) + local AddAverages + __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task AddAverages(Fluid : region(ispace(int3d), Fluid_columns), + Averages : region(ispace(int4d), Exports.Averages_columns), + mix : MIX.Mixture, + rake : SCHEMA.Volume, + Integrator_deltaTime : double) + where + reads(Fluid.cellWidth), + reads(Fluid.[Primitives]), + reads(Fluid.[Properties]), + reads(Fluid.{velocityGradientX, velocityGradientY, velocityGradientZ}), + reads(Fluid.temperatureGradient), + reads writes(Averages.[AveragesVars]) + do + var fromCell = rake.fromCell + var uptoCell = rake.uptoCell + __demand(__openmp) + for c in Fluid do + if fromCell[0] <= c.x and c.x <= uptoCell[0] and + fromCell[1] <= c.y and c.y <= uptoCell[1] and + fromCell[2] <= c.z and c.z <= uptoCell[2] then + + var c_avg = int4d{c.[dir], Averages.bounds.lo.y, Averages.bounds.lo.z, Averages.bounds.lo.w} + var weight = Fluid[c].cellWidth[0]*Fluid[c].cellWidth[1]*Fluid[c].cellWidth[2]*Integrator_deltaTime + + Averages[c_avg].weight += weight + + -- Primitive variables + Averages[c_avg].pressure_avg += weight*Fluid[c].pressure + Averages[c_avg].pressure_rms += weight*Fluid[c].pressure*Fluid[c].pressure + Averages[c_avg].temperature_avg += weight*Fluid[c].temperature + Averages[c_avg].temperature_rms += weight*Fluid[c].temperature*Fluid[c].temperature + Averages[c_avg].MolarFracs_avg += [UTIL.mkArrayConstant(nSpec, weight)]*Fluid[c].MolarFracs + Averages[c_avg].MolarFracs_rms += [UTIL.mkArrayConstant(nSpec, weight)]*Fluid[c].MolarFracs*Fluid[c].MolarFracs + Averages[c_avg].velocity_avg += [UTIL.mkArrayConstant(3, weight)]*Fluid[c].velocity + Averages[c_avg].velocity_rms += [UTIL.mkArrayConstant(3, weight)]*Fluid[c].velocity*Fluid[c].velocity + Averages[c_avg].velocity_rey += array(Fluid[c].velocity[0]*Fluid[c].velocity[1]*weight, + Fluid[c].velocity[0]*Fluid[c].velocity[2]*weight, + Fluid[c].velocity[1]*Fluid[c].velocity[2]*weight) + + -- Favre averages + Averages[c_avg].temperature_favg += weight*Fluid[c].rho*Fluid[c].temperature + Averages[c_avg].temperature_frms += weight*Fluid[c].rho*Fluid[c].temperature*Fluid[c].temperature + Averages[c_avg].MolarFracs_favg += [UTIL.mkArrayConstant(nSpec, rexpr weight*Fluid[c].rho end)]*Fluid[c].MolarFracs + Averages[c_avg].MolarFracs_frms += [UTIL.mkArrayConstant(nSpec, rexpr weight*Fluid[c].rho end)]*Fluid[c].MolarFracs*Fluid[c].MolarFracs + Averages[c_avg].velocity_favg += [UTIL.mkArrayConstant(3, rexpr weight*Fluid[c].rho end)]*Fluid[c].velocity + Averages[c_avg].velocity_frms += [UTIL.mkArrayConstant(3, rexpr weight*Fluid[c].rho end)]*Fluid[c].velocity*Fluid[c].velocity + Averages[c_avg].velocity_frey += array(Fluid[c].rho*Fluid[c].velocity[0]*Fluid[c].velocity[1]*weight, + Fluid[c].rho*Fluid[c].velocity[0]*Fluid[c].velocity[2]*weight, + Fluid[c].rho*Fluid[c].velocity[1]*Fluid[c].velocity[2]*weight) + + -- Kinetic energy budgets (y is the inhomogeneous direction) + var tau_xx = Fluid[c].mu*(4.0*Fluid[c].velocityGradientX[0] - 2.0*Fluid[c].velocityGradientY[1] - 2.0*Fluid[c].velocityGradientZ[2])/3.0 + var tau_yy = Fluid[c].mu*(4.0*Fluid[c].velocityGradientY[1] - 2.0*Fluid[c].velocityGradientX[0] - 2.0*Fluid[c].velocityGradientZ[2])/3.0 + var tau_zz = Fluid[c].mu*(4.0*Fluid[c].velocityGradientZ[2] - 2.0*Fluid[c].velocityGradientX[0] - 2.0-Fluid[c].velocityGradientY[1])/3.0 + var tau_xy = Fluid[c].mu*(Fluid[c].velocityGradientX[1] + Fluid[c].velocityGradientY[0]) + var tau_yz = Fluid[c].mu*(Fluid[c].velocityGradientY[2] + Fluid[c].velocityGradientZ[1]) + var tau_xz = Fluid[c].mu*(Fluid[c].velocityGradientZ[0] + Fluid[c].velocityGradientX[2]) + + Averages[c_avg].rhoUUv += array(Fluid[c].rho*Fluid[c].velocity[0]*Fluid[c].velocity[0]*Fluid[c].velocity[1]*weight, + Fluid[c].rho*Fluid[c].velocity[1]*Fluid[c].velocity[1]*Fluid[c].velocity[1]*weight, + Fluid[c].rho*Fluid[c].velocity[2]*Fluid[c].velocity[2]*Fluid[c].velocity[1]*weight) + Averages[c_avg].Up += array(Fluid[c].velocity[0]*Fluid[c].pressure*weight, + Fluid[c].velocity[1]*Fluid[c].pressure*weight, + Fluid[c].velocity[2]*Fluid[c].pressure*weight) + Averages[c_avg].tau += [UTIL.mkArrayConstant(6, weight)]*array(tau_xx, tau_yy, tau_zz, tau_xy, tau_yz, tau_xz) + Averages[c_avg].utau_y += array(Fluid[c].velocity[0]*tau_xy*weight, + Fluid[c].velocity[1]*tau_yy*weight, + Fluid[c].velocity[2]*tau_yz*weight) + Averages[c_avg].tauGradU += array((tau_xx*Fluid[c].velocityGradientX[0] + tau_xy*Fluid[c].velocityGradientY[0] + tau_xz*Fluid[c].velocityGradientZ[0])*weight, + (tau_xy*Fluid[c].velocityGradientX[1] + tau_yy*Fluid[c].velocityGradientY[1] + tau_yz*Fluid[c].velocityGradientZ[1])*weight, + (tau_xz*Fluid[c].velocityGradientX[2] + tau_yz*Fluid[c].velocityGradientY[2] + tau_zz*Fluid[c].velocityGradientZ[2])*weight) + Averages[c_avg].pGradU += array(Fluid[c].pressure*Fluid[c].velocityGradientX[0]*weight, + Fluid[c].pressure*Fluid[c].velocityGradientY[1]*weight, + Fluid[c].pressure*Fluid[c].velocityGradientZ[2]*weight) + + -- Fluxes + Averages[c_avg].q += array( -Fluid[c].lam*Fluid[c].temperatureGradient[0]*weight, + -Fluid[c].lam*Fluid[c].temperatureGradient[1]*weight, + -Fluid[c].lam*Fluid[c].temperatureGradient[2]*weight) + + end + end + + __demand(__openmp) + for c in Fluid do + if fromCell[0] <= c.x and c.x <= uptoCell[0] and + fromCell[1] <= c.y and c.y <= uptoCell[1] and + fromCell[2] <= c.z and c.z <= uptoCell[2] then + + var c_avg = int4d{c.[dir], Averages.bounds.lo.y, Averages.bounds.lo.z, Averages.bounds.lo.w} + var weight = Fluid[c].cellWidth[0]*Fluid[c].cellWidth[1]*Fluid[c].cellWidth[2]*Integrator_deltaTime + + -- Properties + var MixW = MIX.GetMolarWeightFromXi(Fluid[c].MolarFracs, mix) + var Yi = MIX.GetMassFractions(MixW, Fluid[c].MolarFracs, mix) + var cp = MIX.GetHeatCapacity(Fluid[c].temperature, Yi, mix) + Averages[c_avg].rho_avg += weight*Fluid[c].rho + Averages[c_avg].rho_rms += weight*Fluid[c].rho*Fluid[c].rho + Averages[c_avg].mu_avg += weight*Fluid[c].mu + Averages[c_avg].mu_rms += weight*Fluid[c].mu*Fluid[c].mu + Averages[c_avg].lam_avg += weight*Fluid[c].lam + Averages[c_avg].lam_rms += weight*Fluid[c].lam*Fluid[c].lam + Averages[c_avg].Di_avg += [UTIL.mkArrayConstant(nSpec, weight)]*Fluid[c].Di + Averages[c_avg].Di_rms += [UTIL.mkArrayConstant(nSpec, weight)]*Fluid[c].Di*Fluid[c].Di + Averages[c_avg].SoS_avg += weight*Fluid[c].SoS + Averages[c_avg].SoS_rms += weight*Fluid[c].SoS*Fluid[c].SoS + Averages[c_avg].cp_avg += weight*cp + Averages[c_avg].cp_rms += weight*cp*cp + Averages[c_avg].MixW_avg += weight*MixW + Averages[c_avg].MixW_rms += weight*MixW*MixW + + -- Chemical production rates + var w = MIX.GetProductionRates(Fluid[c].rho, Fluid[c].pressure, Fluid[c].temperature, Yi, mix) + var HR = 0.0 + for i=0, nSpec do + HR -= w[i]*MIX.GetSpeciesEnthalpy(i, Fluid[c].temperature, mix) + end + Averages[c_avg].ProductionRates_avg += [UTIL.mkArrayConstant(nSpec, weight)]*w + Averages[c_avg].ProductionRates_rms += [UTIL.mkArrayConstant(nSpec, weight)]*w*w + Averages[c_avg].HeatReleaseRate_avg += weight*HR + Averages[c_avg].HeatReleaseRate_rms += weight*HR*HR + + -- Dimensionless numbers + var u2 = MACRO.dot(Fluid[c].velocity, Fluid[c].velocity) + var Hi = MIX.GetEnthalpy(Fluid[c].temperature, Yi, mix) + 0.5*u2 + var Pr = cp*Fluid[c].mu/Fluid[c].lam + var Ec = u2/Hi + Averages[c_avg].Pr += weight*Pr + Averages[c_avg].Pr_rms += weight*Pr*Pr + Averages[c_avg].Ec += weight*Ec + Averages[c_avg].Ec_rms += weight*Ec*Ec + + end + end + end + return AddAverages +end + +__demand(__leaf) +task Exports.DummyAverages(Averages : region(ispace(int2d), Exports.Averages_columns)) +where + reads writes(Averages) +do + -- Nothing + -- It is just to avoid the bug of HDF libraries with parallel reduction +end + +function Exports.mkReduceAverages(dir) + local dir1 + local dir2 + if dir=='x' then + dir1 = 'y' + dir2 = 'z' + elseif dir=='y' then + dir1 = 'x' + dir2 = 'z' + elseif dir=='z' then + dir1 = 'x' + dir2 = 'y' + end + local ReduceAverages + __demand(__leaf) + task ReduceAverages(Averages : region(ispace(int2d), Exports.Averages_columns), + Averages_local : region(ispace(int4d), Exports.Averages_columns), + tiles : ispace(int3d)) + where + reads(Averages_local), + reads writes(Averages) + do + for t in tiles do + __demand(__openmp) + for c in Averages do + var c_buf = int4d{c.x, c.y, t.[dir1], t.[dir2]} + + Averages[c].weight += Averages_local[c_buf].weight + + -- Primitive variables + Averages[c].pressure_avg += Averages_local[c_buf].pressure_avg + Averages[c].pressure_rms += Averages_local[c_buf].pressure_rms + Averages[c].temperature_avg += Averages_local[c_buf].temperature_avg + Averages[c].temperature_rms += Averages_local[c_buf].temperature_rms + Averages[c].MolarFracs_avg += Averages_local[c_buf].MolarFracs_avg + Averages[c].MolarFracs_rms += Averages_local[c_buf].MolarFracs_rms + Averages[c].velocity_avg += Averages_local[c_buf].velocity_avg + Averages[c].velocity_rms += Averages_local[c_buf].velocity_rms + Averages[c].velocity_rey += Averages_local[c_buf].velocity_rey + + -- Properties + Averages[c].rho_avg += Averages_local[c_buf].rho_avg + Averages[c].rho_rms += Averages_local[c_buf].rho_rms + Averages[c].mu_avg += Averages_local[c_buf].mu_avg + Averages[c].mu_rms += Averages_local[c_buf].mu_rms + Averages[c].lam_avg += Averages_local[c_buf].lam_avg + Averages[c].lam_rms += Averages_local[c_buf].lam_rms + Averages[c].Di_avg += Averages_local[c_buf].Di_avg + Averages[c].Di_rms += Averages_local[c_buf].Di_rms + Averages[c].SoS_avg += Averages_local[c_buf].SoS_avg + Averages[c].SoS_rms += Averages_local[c_buf].SoS_rms + Averages[c].cp_avg += Averages_local[c_buf].cp_avg + Averages[c].cp_rms += Averages_local[c_buf].cp_rms + Averages[c].MixW_avg += Averages_local[c_buf].MixW_avg + Averages[c].MixW_rms += Averages_local[c_buf].MixW_rms + + -- Chemical production rates + Averages[c].ProductionRates_avg += Averages_local[c_buf].ProductionRates_avg + Averages[c].ProductionRates_rms += Averages_local[c_buf].ProductionRates_rms + Averages[c].HeatReleaseRate_avg += Averages_local[c_buf].HeatReleaseRate_avg + Averages[c].HeatReleaseRate_rms += Averages_local[c_buf].HeatReleaseRate_rms + + -- Favre averages + Averages[c].temperature_favg += Averages_local[c_buf].temperature_favg + Averages[c].temperature_frms += Averages_local[c_buf].temperature_frms + Averages[c].MolarFracs_favg += Averages_local[c_buf].MolarFracs_favg + Averages[c].MolarFracs_frms += Averages_local[c_buf].MolarFracs_frms + Averages[c].velocity_favg += Averages_local[c_buf].velocity_favg + Averages[c].velocity_frms += Averages_local[c_buf].velocity_frms + Averages[c].velocity_frey += Averages_local[c_buf].velocity_frey + + -- Kinetic energy budgets (y is the inhomogeneous direction) + Averages[c].rhoUUv += Averages_local[c_buf].rhoUUv + Averages[c].Up += Averages_local[c_buf].Up + Averages[c].tau += Averages_local[c_buf].tau + Averages[c].utau_y += Averages_local[c_buf].utau_y + Averages[c].tauGradU += Averages_local[c_buf].tauGradU + Averages[c].pGradU += Averages_local[c_buf].pGradU + + -- Fluxes + Averages[c].q += Averages_local[c_buf].q + + -- Dimensionless numbers + Averages[c].Pr += Averages_local[c_buf].Pr + Averages[c].Pr_rms += Averages_local[c_buf].Pr_rms + Averages[c].Ec += Averages_local[c_buf].Ec + Averages[c].Ec_rms += Averages_local[c_buf].Ec_rms + end + end + end + return ReduceAverages +end + +return Exports end + diff --git a/src/prometeo_bc.rg b/src/prometeo_bc.rg new file mode 100644 index 0000000..d8055ea --- /dev/null +++ b/src/prometeo_bc.rg @@ -0,0 +1,510 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA, MIX, Fluid_columns, grid_partitions) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local C = regentlib.c +local UTIL = require 'util-desugared' +local CONST = require "prometeo_const" +local MACRO = require "prometeo_macro" + +local sin = regentlib.sin(double) +local exp = regentlib.exp(double) +local pow = regentlib.pow(double) + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture +local irU = CONST.GetirU(MIX) -- Index of the momentum in Conserved vector +local irE = CONST.GetirE(MIX) -- Index of the total energy density in Conserved vector +local nEq = CONST.GetnEq(MIX) -- Total number of unknowns for the implicit solver + +local Primitives = CONST.Primitives +local ProfilesVars = CONST.ProfilesVars + +------------------------------------------------------------------------------- +-- BC ROUTINES +------------------------------------------------------------------------------- +-- Set up stuff for RHS of NSCBC inflow +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.InitializeGhostNSCBC(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d)), + mix : MIX.Mixture) +where + reads(Fluid.[Primitives]), + writes(Fluid.{velocity_old_NSCBC, temperature_old_NSCBC, dudtBoundary, dTdtBoundary}) +do + var BC = Fluid_BC[0] + + __demand(__openmp) + for c in BC do + BC[c].velocity_old_NSCBC = BC[c].velocity + BC[c].temperature_old_NSCBC = BC[c].temperature + BC[c].dudtBoundary = 0.0 + BC[c].dTdtBoundary= 0.0 + end +end + +------------------------------------------------------------------------ +-- BC utils +----------------------------------------------------------------------- +local __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task SetDirichletBC(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d)), + Pbc : double) +where + reads(Fluid.[ProfilesVars]), + writes(Fluid.[Primitives]) +do + var BC = Fluid_BC[0] + __demand(__openmp) + for c in BC do + BC[c].MolarFracs = BC[c].MolarFracs_profile + BC[c].velocity = BC[c].velocity_profile + BC[c].temperature = BC[c].temperature_profile + BC[c].pressure = Pbc + end +end + +local function mkSetNSCBC_InflowBC(dir) + local SetNSCBC_InflowBC + local idx + if dir == "x" then + idx = 0 + elseif dir == "y" then + idx = 1 + elseif dir == "z" then + idx = 2 + end + -- NOTE: It is safe to not pass the ghost regions to this task, because we + -- always group ghost cells with their neighboring interior cells. + local __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task SetNSCBC_InflowBC(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d)), + mix : MIX.Mixture, + Pbc : double) + where + reads(Fluid.SoS), + reads(Fluid.Conserved), + reads(Fluid.[ProfilesVars]), + writes(Fluid.[Primitives]) + do + var BC = Fluid_BC[0] + __demand(__openmp) + for c in BC do + BC[c].MolarFracs = BC[c].MolarFracs_profile + BC[c].velocity = BC[c].velocity_profile + BC[c].temperature = BC[c].temperature_profile + if (BC[c].velocity_profile[idx] >= BC[c].SoS) then + -- It is supersonic, everything is imposed by the BC + BC[c].pressure = Pbc + else + -- Compute pressure from NSCBC conservation equations + var rhoYi : double[nSpec] + for i=0, nSpec do + rhoYi[i] = BC[c].Conserved[i] + end + var rho = MIX.GetRhoFromRhoYi(rhoYi) + var MixW = MIX.GetMolarWeightFromXi(BC[c].MolarFracs_profile, mix) + BC[c].pressure = MIX.GetPFromRhoAndT(rho, MixW, BC[c].temperature_profile) + end + + end + end + return SetNSCBC_InflowBC +end + +local __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task SetNSCBC_OutflowBC(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d)), + mix : MIX.Mixture) +where + reads(Fluid.Conserved), + reads(Fluid.temperature), + writes(Fluid.[Primitives]) +do + var BC = Fluid_BC[0] + var BCst = Fluid_BC[1] + + __demand(__openmp) + for c in BC do + -- Compute values from NSCBC conservation equations + var rhoYi : double[nSpec] + for i=0, nSpec do + rhoYi[i] = BC[c].Conserved[i] + end + var rho = MIX.GetRhoFromRhoYi(rhoYi) + var Yi = MIX.GetYi(rho, rhoYi) + Yi = MIX.ClipYi(Yi) + var MixW = MIX.GetMolarWeightFromYi(Yi, mix) + BC[c].MolarFracs = MIX.GetMolarFractions(MixW, Yi, mix) + var rhoInv = 1.0/rho; + var velocity = array(BC[c].Conserved[irU+0]*rhoInv, + BC[c].Conserved[irU+1]*rhoInv, + BC[c].Conserved[irU+2]*rhoInv) + BC[c].velocity = velocity + var kineticEnergy = (0.5*MACRO.dot(velocity, velocity)) + var InternalEnergy = BC[c].Conserved[irE]*rhoInv - kineticEnergy + BC[c].temperature = MIX.GetTFromInternalEnergy(InternalEnergy, BC[c].temperature, Yi, mix); + BC[c].pressure = MIX.GetPFromRhoAndT(rho, MixW, BC[c].temperature) + end +end + +local function mkSetAdiabaticWallBC(dir) + local SetAdiabaticWallBC + + local mk_cint + if dir == "xNeg" then + mk_cint = function(c) return rexpr (c+{ 1, 0, 0}) end end + elseif dir == "xPos" then + mk_cint = function(c) return rexpr (c+{-1, 0, 0}) end end + elseif dir == "yNeg" then + mk_cint = function(c) return rexpr (c+{ 0, 1, 0}) end end + elseif dir == "yPos" then + mk_cint = function(c) return rexpr (c+{ 0,-1, 0}) end end + elseif dir == "zNeg" then + mk_cint = function(c) return rexpr (c+{ 0, 0, 1}) end end + elseif dir == "zPos" then + mk_cint = function(c) return rexpr (c+{ 0, 0,-1}) end end + else assert(false) end + + local __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task SetAdiabaticWallBC(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d))) + where + reads(Fluid.{MolarFracs, pressure, temperature}), + writes(Fluid.[Primitives]) + do + var BC = Fluid_BC[0] + var BCst = Fluid_BC[1] + + __demand(__openmp) + for c in BC do + var c_int = [mk_cint(rexpr c end)]; + BC[c].MolarFracs = BCst[c_int].MolarFracs + BC[c].pressure = BCst[c_int].pressure + BC[c].temperature = BCst[c_int].temperature + BC[c].velocity = array(0.0, 0.0, 0.0) + end + end + return SetAdiabaticWallBC +end + +local function mkSetIsothermalWallBC(dir) + local SetIsothermalWallBC + + local mk_cint + if dir == "xNeg" then + mk_cint = function(c) return rexpr (c+{ 1, 0, 0}) end end + elseif dir == "xPos" then + mk_cint = function(c) return rexpr (c+{-1, 0, 0}) end end + elseif dir == "yNeg" then + mk_cint = function(c) return rexpr (c+{ 0, 1, 0}) end end + elseif dir == "yPos" then + mk_cint = function(c) return rexpr (c+{ 0,-1, 0}) end end + elseif dir == "zNeg" then + mk_cint = function(c) return rexpr (c+{ 0, 0, 1}) end end + elseif dir == "zPos" then + mk_cint = function(c) return rexpr (c+{ 0, 0,-1}) end end + else assert(false) end + + local __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task SetIsothermalWallBC(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d))) + where + reads(Fluid.{MolarFracs, pressure}), + reads(Fluid.temperature_profile), + writes(Fluid.[Primitives]) + do + var BC = Fluid_BC[0] + var BCst = Fluid_BC[1] + + __demand(__openmp) + for c in BC do + var c_int = [mk_cint(rexpr c end)]; + BC[c].MolarFracs = BCst[c_int].MolarFracs + BC[c].pressure = BCst[c_int].pressure + BC[c].temperature = BC[c].temperature_profile + BC[c].velocity = array(0.0, 0.0, 0.0) + end + end + return SetIsothermalWallBC +end + +local function mkSetSuctionAndBlowingWallBC(dir) + local SetSuctionAndBlowingWallBC + + local iStrm + local iNorm + local iSpan + if dir == "yNeg" then + iStrm = 0 + iNorm = 1 + iSpan = 2 + else assert(false) end + + local mk_cint + if dir == "xNeg" then + mk_cint = function(c) return rexpr (c+{ 1, 0, 0}) end end + elseif dir == "xPos" then + mk_cint = function(c) return rexpr (c+{-1, 0, 0}) end end + elseif dir == "yNeg" then + mk_cint = function(c) return rexpr (c+{ 0, 1, 0}) end end + elseif dir == "yPos" then + mk_cint = function(c) return rexpr (c+{ 0,-1, 0}) end end + elseif dir == "zNeg" then + mk_cint = function(c) return rexpr (c+{ 0, 0, 1}) end end + elseif dir == "zPos" then + mk_cint = function(c) return rexpr (c+{ 0, 0,-1}) end end + else assert(false) end + + local __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task SetSuctionAndBlowingWallBC(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d)), + Xmin : double, + Xmax : double, + X0 : double, + sigma : double, + Zw : double, + nModes : int, + A : double[20], + omega : double[20], + beta : double[20], + Width : double, + Origin : double, + time : double) + where + reads(Fluid.{MolarFracs, pressure}), + reads(Fluid.centerCoordinates), + reads(Fluid.temperature_profile), + writes(Fluid.[Primitives]) + do + var BC = Fluid_BC[0] + var BCst = Fluid_BC[1] + + __demand(__openmp) + for c in BC do + var c_int = [mk_cint(rexpr c end)]; + + BC[c].MolarFracs = BCst[c_int].MolarFracs + BC[c].pressure = BCst[c_int].pressure + BC[c].temperature = BC[c].temperature_profile + var velocity = array(0.0, 0.0, 0.0) + + if ((BC[c].centerCoordinates[iStrm] > Xmin) and + (BC[c].centerCoordinates[iStrm] < Xmax)) then + + var f = exp(-0.5*pow((BC[c].centerCoordinates[iStrm] - X0)/sigma, 2)) + + var g = 1.0 + 0.1*( exp(-pow((BC[c].centerCoordinates[iSpan] - (0.5*Width+Origin) - Zw)/Zw, 2)) - + exp(-pow((BC[c].centerCoordinates[iSpan] - (0.5*Width+Origin) + Zw)/Zw, 2))) + + var h = 0.0 + for i=0, nModes do + h += A[i]*sin(omega[i]*time - + beta[i]*BC[c].centerCoordinates[iSpan]) + end + velocity[iNorm] = f*g*h + end + BC[c].velocity = velocity + end + end + return SetSuctionAndBlowingWallBC +end + +-- Update the ghost cells to impose boundary conditions +__demand(__inline) +task Exports.UpdateGhostPrimitives(Fluid : region(ispace(int3d), Fluid_columns), + tiles : ispace(int3d), + Fluid_Partitions : grid_partitions(Fluid, tiles), + config : SCHEMA.Config, + Mix : MIX.Mixture, + Integrator_simTime : double) +where + reads writes(Fluid) +do + var BC_xBCLeft = config.BC.xBCLeft + var BC_xBCRight = config.BC.xBCRight + var BC_yBCLeft = config.BC.yBCLeft + var BC_yBCRight = config.BC.yBCRight + var BC_zBCLeft = config.BC.zBCLeft + var BC_zBCRight = config.BC.zBCRight + var {p_All, p_xNeg, p_xPos, p_yNeg, p_yPos, p_zNeg, p_zPos} = Fluid_Partitions + + -- Start updating BCs that are local + -- xNeg BC + if (BC_xBCLeft == SCHEMA.FlowBC_Dirichlet) then + __demand(__index_launch) + for c in tiles do + SetDirichletBC(p_All[c], p_xNeg[c], config.BC.xBCLeftP) + end + elseif (BC_xBCLeft == SCHEMA.FlowBC_NSCBC_Inflow) then + __demand(__index_launch) + for c in tiles do + [mkSetNSCBC_InflowBC("x")](p_All[c], p_xNeg[c], Mix, config.BC.xBCLeftP) + end + end + + -- xPos BC + if (BC_xBCRight == SCHEMA.FlowBC_Dirichlet) then + __demand(__index_launch) + for c in tiles do + SetDirichletBC(p_All[c], p_xPos[c], config.BC.xBCRightP) + end + elseif (BC_xBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + __demand(__index_launch) + for c in tiles do + SetNSCBC_OutflowBC(p_All[c], p_xPos[c], Mix) + end + end + + -- yNeg BC + if (BC_yBCLeft == SCHEMA.FlowBC_Dirichlet) then + __demand(__index_launch) + for c in tiles do + SetDirichletBC(p_All[c], p_yNeg[c], config.BC.yBCLeftP) + end + end + + -- yPos BC + if (BC_yBCRight == SCHEMA.FlowBC_Dirichlet) then + __demand(__index_launch) + for c in tiles do + SetDirichletBC(p_All[c], p_yPos[c], config.BC.yBCRightP) + end + elseif (BC_yBCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + __demand(__index_launch) + for c in tiles do + SetNSCBC_OutflowBC(p_All[c], p_yPos[c], Mix) + end + end + + -- yNeg BC + if (BC_zBCLeft == SCHEMA.FlowBC_Dirichlet) then + __demand(__index_launch) + for c in tiles do + SetDirichletBC(p_All[c], p_zNeg[c], config.BC.zBCLeftP) + end + end + + -- yPos BC + if (BC_zBCRight == SCHEMA.FlowBC_Dirichlet) then + __demand(__index_launch) + for c in tiles do + SetDirichletBC(p_All[c], p_zPos[c], config.BC.zBCRightP) + end + end + + -- BCs that depend on other cells need to be set at the end in the order Z, Y, X + -- yNeg BC + if (BC_yBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + __demand(__index_launch) + for c in tiles do + [mkSetAdiabaticWallBC("yNeg")](p_All[c], p_yNeg[c]) + end + elseif (BC_yBCLeft == SCHEMA.FlowBC_IsothermalWall) then + __demand(__index_launch) + for c in tiles do + [mkSetIsothermalWallBC("yNeg")](p_All[c], p_yNeg[c]) + end + elseif (BC_yBCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + __demand(__index_launch) + for c in tiles do + [mkSetSuctionAndBlowingWallBC("yNeg")](p_All[c], p_yNeg[c], + config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.Xmin, + config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.Xmax, + config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.X0, + config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.sigma, + config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.Zw, + config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.A.length, + config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.A.values, + config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.omega.values, + config.BC.yBCLeftInflowProfile.u.SuctionAndBlowing.beta.values, + config.Grid.zWidth, + config.Grid.origin[2], + Integrator_simTime) + end + end + + -- yPos BC + if (BC_yBCRight == SCHEMA.FlowBC_AdiabaticWall) then + __demand(__index_launch) + for c in tiles do + [mkSetAdiabaticWallBC("yPos")](p_All[c], p_yPos[c]) + end + elseif (BC_yBCRight == SCHEMA.FlowBC_IsothermalWall) then + __demand(__index_launch) + for c in tiles do + [mkSetIsothermalWallBC("yPos")](p_All[c], p_yPos[c]) + end + end + + -- xNeg BC + if (BC_xBCLeft == SCHEMA.FlowBC_AdiabaticWall) then + __demand(__index_launch) + for c in tiles do + [mkSetAdiabaticWallBC("xNeg")](p_All[c], p_xNeg[c]) + end + end + + -- xPos BC + if (BC_xBCRight == SCHEMA.FlowBC_AdiabaticWall) then + __demand(__index_launch) + for c in tiles do + [mkSetAdiabaticWallBC("xPos")](p_All[c], p_xPos[c]) + end + end +end + +-- Update the time derivative values needed for the inflow +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.UpdateNSCBCGhostCellTimeDerivatives(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d)), + Integrator_deltaTime : double) +where + reads(Fluid.{velocity, temperature}), + writes(Fluid.{dudtBoundary, dTdtBoundary}), + reads writes(Fluid.{velocity_old_NSCBC, temperature_old_NSCBC}) +do + var BC = Fluid_BC[0] + __demand(__openmp) + for c in BC do + BC[c].dudtBoundary = (BC[c].velocity[0] - BC[c].velocity_old_NSCBC[0]) / Integrator_deltaTime + BC[c].dTdtBoundary = (BC[c].temperature - BC[c].temperature_old_NSCBC) / Integrator_deltaTime + BC[c].velocity_old_NSCBC = BC[c].velocity + BC[c].temperature_old_NSCBC = BC[c].temperature + end +end + +return Exports end + diff --git a/src/prometeo_cfl.rg b/src/prometeo_cfl.rg new file mode 100644 index 0000000..2bac4f8 --- /dev/null +++ b/src/prometeo_cfl.rg @@ -0,0 +1,125 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(MIX, Fluid_columns) local Exports = {} + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local C = regentlib.c +local fabs = regentlib.fabs(double) + +------------------------------------------------------------------------------- +-- STABILITY CONDITIONS ROUTINES +------------------------------------------------------------------------------- + +local __demand(__inline) +task CalculateConvectiveSpectralRadius(Fluid : region(ispace(int3d), Fluid_columns), c : int3d) +where + reads(Fluid.{cellWidth, velocity, SoS}) +do + return (max(max(((fabs(Fluid[c].velocity[0])+Fluid[c].SoS)/Fluid[c].cellWidth[0]), + ((fabs(Fluid[c].velocity[1])+Fluid[c].SoS)/Fluid[c].cellWidth[1])), + ((fabs(Fluid[c].velocity[2])+Fluid[c].SoS)/Fluid[c].cellWidth[2]))) +end + +local __demand(__inline) +task CalculateViscousSpectralRadius(Fluid : region(ispace(int3d), Fluid_columns), c : int3d) +where + reads(Fluid.{cellWidth, rho, mu}) +do + var nu = Fluid[c].mu/Fluid[c].rho + return ((max(max((nu/(Fluid[c].cellWidth[0]*Fluid[c].cellWidth[0])), + (nu/(Fluid[c].cellWidth[1]*Fluid[c].cellWidth[1]))), + (nu/(Fluid[c].cellWidth[2]*Fluid[c].cellWidth[2]))))*4.0) +end + +local __demand(__inline) +task CalculateHeatConductionSpectralRadius(Fluid : region(ispace(int3d), Fluid_columns), + c : int3d, + mix : MIX.Mixture) +where + reads(Fluid.cellWidth), + reads(Fluid.{MolarFracs, temperature}), + reads(Fluid.{rho, lam}) +do + var MixW = MIX.GetMolarWeightFromXi(Fluid[c].MolarFracs, mix) + var Yi = MIX.GetMassFractions(MixW, Fluid[c].MolarFracs, mix) + var cp = MIX.GetHeatCapacity(Fluid[c].temperature, Yi, mix) + var DifT = (Fluid[c].lam/(cp*Fluid[c].rho)) + return ((max(max((DifT/(Fluid[c].cellWidth[0]*Fluid[c].cellWidth[0])), + (DifT/(Fluid[c].cellWidth[1]*Fluid[c].cellWidth[1]))), + (DifT/(Fluid[c].cellWidth[2]*Fluid[c].cellWidth[2]))))*4.0) +end + +local __demand(__inline) +task CalculateSpeciesDiffusionSpectralRadius(Fluid : region(ispace(int3d), Fluid_columns), c : int3d) +where + reads(Fluid.{cellWidth, Di}) +do + var acc = -math.huge + for i=0, nSpec do + acc max= ((max(max((Fluid[c].Di[i]/(Fluid[c].cellWidth[0]*Fluid[c].cellWidth[0])), + (Fluid[c].Di[i]/(Fluid[c].cellWidth[1]*Fluid[c].cellWidth[1]))), + (Fluid[c].Di[i]/(Fluid[c].cellWidth[2]*Fluid[c].cellWidth[2]))))*4.0) + end + return acc +end + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.CalculateMaxSpectralRadius(Fluid : region(ispace(int3d), Fluid_columns), mix : MIX.Mixture) +where + reads(Fluid.cellWidth), + reads(Fluid.{velocity, SoS}), + reads(Fluid.{rho, mu}), + reads(Fluid.{MolarFracs, temperature, lam}), + reads(Fluid.Di) +do + var acc = -math.huge + __demand(__openmp) + for c in Fluid do + -- Advection + acc max= CalculateConvectiveSpectralRadius(Fluid, c) + -- Momentum diffusion + acc max= CalculateViscousSpectralRadius(Fluid, c) + -- Heat Conduction + acc max= CalculateHeatConductionSpectralRadius(Fluid, c, mix) + -- Species diffusion + acc max= CalculateSpeciesDiffusionSpectralRadius(Fluid, c) + end + return acc +end + +return Exports end + diff --git a/src/prometeo_chem.rg b/src/prometeo_chem.rg new file mode 100644 index 0000000..1b1d79a --- /dev/null +++ b/src/prometeo_chem.rg @@ -0,0 +1,165 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA, MIX, Fluid_columns) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local C = regentlib.c +local UTIL = require 'util-desugared' +local MATH = require 'math_utils' +local CONST = require "prometeo_const" +local MACRO = require "prometeo_macro" + +local fabs = regentlib.fabs(double) + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture +local irU = CONST.GetirU(MIX) -- Index of the momentum in Conserved vector +local irE = CONST.GetirE(MIX) -- Index of the total energy density in Conserved vector +local nEq = CONST.GetnEq(MIX) -- Total number of unknowns for the implicit solver + +local ImplicitVars = terralib.newlist({ + 'Conserved', + 'Conserved_t_old', + 'temperature' +}) + +------------------------------------------------------------------------------- +-- CHEMISTRY ROUTINES +------------------------------------------------------------------------------- + +-- Parse input mixture +__demand(__inline) +task Exports.ParseConfigMixture(Mixture : SCHEMA.Mixture, mix : MIX.Mixture) + var initMolarFracs = [UTIL.mkArrayConstant(nSpec, rexpr 1.0e-60 end)] + for i=0, Mixture.Species.length do + var Species = Mixture.Species.values[i] + initMolarFracs[MIX.FindSpecies(Species.Name, mix)] = Species.MolarFrac + end + return initMolarFracs +end + +-- Reset mixture +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.ResetMixture(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + initMolarFracs : double[nSpec]) +where + writes(Fluid.MolarFracs) +do + __demand(__openmp) + for c in ModCells do + Fluid[c].MolarFracs = initMolarFracs + end +end + +-- RHS function for the implicit solver +local __demand(__inline) +task rhsChem(Fluid : region(ispace(int3d), Fluid_columns), + c : int3d, + mix : MIX.Mixture) +where + reads writes(Fluid.[ImplicitVars]) +do + var f : double[nEq] + + var rhoYi : double[nSpec] + for i = 0, nSpec do + rhoYi[i] = Fluid[c].Conserved[i] + end + var rho = MIX.GetRhoFromRhoYi(rhoYi) + var Yi = MIX.GetYi(rho, rhoYi) + Yi = MIX.ClipYi(Yi) + var MixW = MIX.GetMolarWeightFromYi(Yi, mix) + + var rhoInv = 1.0/rho + var velocity = array(Fluid[c].Conserved[irU+0]*rhoInv, + Fluid[c].Conserved[irU+1]*rhoInv, + Fluid[c].Conserved[irU+2]*rhoInv) + + var kineticEnergy = (0.5*MACRO.dot(velocity, velocity)) + var InternalEnergy = Fluid[c].Conserved[irE]*rhoInv - kineticEnergy + Fluid[c].temperature = MIX.GetTFromInternalEnergy(InternalEnergy, Fluid[c].temperature, Yi, mix) + var P = MIX.GetPFromRhoAndT(rho, MixW, Fluid[c].temperature) + + var w = MIX.GetProductionRates(rho, P, Fluid[c].temperature, Yi, mix) + + for i = 0, nSpec do + f[i] = w[i] + Fluid[c].Conserved_t_old[i] + end + for i = nSpec, nEq do + f[i] = Fluid[c].Conserved_t_old[i] + end + return f +end + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.UpdateChemistry(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + Integrator_deltaTime : double, + mix : MIX.Mixture) +where + reads(Fluid.Conserved_t), + reads writes(Fluid.[ImplicitVars]) +do + var err = 0 + __demand(__openmp) + for c in ModCells do + Fluid[c].Conserved_t_old = Fluid[c].Conserved_t + err += [MATH.mkRosenbrock(nEq, Fluid_columns, ImplicitVars, "Conserved", MIX.Mixture, rhsChem)] + (Fluid, c, Integrator_deltaTime, Integrator_deltaTime, mix) + end + regentlib.assert(err==0, "Something wrong in UpdateChemistry") +end + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.AddChemistrySources(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + mix : MIX.Mixture) +where + reads(Fluid.{rho, MolarFracs, pressure, temperature}), + reads writes atomic(Fluid.Conserved_t) +do + __demand(__openmp) + for c in ModCells do + var MixW = MIX.GetMolarWeightFromXi(Fluid[c].MolarFracs, mix) + var Yi = MIX.GetMassFractions(MixW, Fluid[c].MolarFracs, mix) + var w = MIX.GetProductionRates(Fluid[c].rho, Fluid[c].pressure, Fluid[c].temperature, Yi, mix) + for i = 0, nSpec do + Fluid[c].Conserved_t[i] += w[i] + end + end +end + +return Exports end + diff --git a/src/prometeo_const.rg b/src/prometeo_const.rg new file mode 100644 index 0000000..d71d947 --- /dev/null +++ b/src/prometeo_const.rg @@ -0,0 +1,88 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +local Exports = {} + +------------------------------------------------------------------------------- +-- CONSTANTS +------------------------------------------------------------------------------- + +Exports.RGAS = 8.3144598 -- [J/(mol K)] +Exports.Na = 6.02214086e23 -- [1/mol] +Exports.kb = 1.38064852e-23 -- [m^2 kg /( s^2 K)] +Exports.PI = 3.1415926535898 + +-- Stencil indices +Exports.Stencil1 = 0 +Exports.Stencil2 = 1 +Exports.Stencil3 = 2 +Exports.Stencil4 = 3 +Exports.nStencils = 4 + +-- SSP Runge-Kutta method Gottlieb et al. (2001) +-- RK_C[*][1] -- Coefficinets for solution at time n +-- RK_C[*][2] -- Coefficinets for intermediate solution +-- RK_C[*][3] -- Coefficinets for delta t +Exports.RK_C = { + [1] = { 1.0, 0.0, 1.0}, + [2] = {3.0/4.0, 1.0/4.0, 1.0/4.0}, + [3] = {1.0/3.0, 2.0/3.0, 2.0/3.0}, +} + +-- Common groups of variables +Exports.Primitives = terralib.newlist({ + 'pressure', + 'temperature', + 'MolarFracs', + 'velocity' +}) + +Exports.Properties = terralib.newlist({ + 'rho', + 'mu', + 'lam', + 'Di', + 'SoS' +}) + +Exports.ProfilesVars = terralib.newlist({ + 'MolarFracs_profile', + 'velocity_profile', + 'temperature_profile' +}) + +-- Variable indices +function Exports.GetirU(MIX) return MIX.nSpec end +function Exports.GetirE(MIX) return MIX.nSpec+3 end +function Exports.GetnEq(MIX) return MIX.nSpec+4 end + +return Exports + diff --git a/src/prometeo_flux.rg b/src/prometeo_flux.rg new file mode 100644 index 0000000..4a16107 --- /dev/null +++ b/src/prometeo_flux.rg @@ -0,0 +1,940 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA, MIX, Fluid_columns) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local C = regentlib.c +local UTIL = require 'util-desugared' +local MATH = require 'math_utils' +local MACRO = require "prometeo_macro" +local CONST = require "prometeo_const" + +local fabs = regentlib.fabs(double) +local pow = regentlib.pow(double) +local sqrt = regentlib.sqrt(double) + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture +local irU = CONST.GetirU(MIX) -- Index of the momentum in Conserved vector +local irE = CONST.GetirE(MIX) -- Index of the total energy density in Conserved vector +local nEq = CONST.GetnEq(MIX) -- Total number of unknowns for the implicit solver + +-- Stencil indices +local Stencil1 = CONST.Stencil1 +local Stencil2 = CONST.Stencil2 +local Stencil3 = CONST.Stencil3 +local Stencil4 = CONST.Stencil4 +local nStencils = CONST.nStencils + +local Primitives = CONST.Primitives +local Properties = CONST.Properties + +local LUdec, ludcmp, lubksb = unpack(MATH.mkLUdec(nEq)) + +------------------------------------------------------------------------------- +-- EULER FLUXES ROUTINES +------------------------------------------------------------------------------- + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.GetEulerFlux(Fluid : region(ispace(int3d), Fluid_columns)) +where + reads(Fluid.Conserved), + reads(Fluid.[Primitives]), + writes(Fluid.{EulerFluxX, EulerFluxY, EulerFluxZ}) +do + __demand(__openmp) + for c in Fluid do + var Eflux : double[nEq] + + -- X direction + for i=0, nEq do + Eflux[i] = Fluid[c].Conserved[i]*Fluid[c].velocity[0] + end + Eflux[0+irU] += Fluid[c].pressure + Eflux[ irE] += Fluid[c].pressure*Fluid[c].velocity[0] + Fluid[c].EulerFluxX = Eflux + + -- Y direction + for i=0, nEq do + Eflux[i] = Fluid[c].Conserved[i]*Fluid[c].velocity[1] + end + Eflux[1+irU] += Fluid[c].pressure + Eflux[ irE] += Fluid[c].pressure*Fluid[c].velocity[1] + Fluid[c].EulerFluxY = Eflux + + -- Z direction + for i=0, nEq do + Eflux[i] = Fluid[c].Conserved[i]*Fluid[c].velocity[2] + end + Eflux[2+irU] += Fluid[c].pressure + Eflux[ irE] += Fluid[c].pressure*Fluid[c].velocity[2] + Fluid[c].EulerFluxZ = Eflux + end +end + +local mkGetCharacteristicMapping = terralib.memoize(function(dir) + local GetCharacteristicMapping + + local ind + if (dir == "x") then + ind = 0 + elseif (dir == "y") then + ind = 1 + elseif (dir == "z") then + ind = 2 + else assert(false) end + + local __demand(__inline) + task GetCharacteristicMapping(Fluid : region(ispace(int3d), Fluid_columns), + c : int3d, + cp1 : int3d, + mix : MIX.Mixture) + where + reads(Fluid.rho), + reads(Fluid.Conserved), + reads(Fluid.[Primitives]) + do + -- Compute quantities on the left (L) and right (R) states + var MixWL = MIX.GetMolarWeightFromXi(Fluid[c ].MolarFracs, mix) + var MixWR = MIX.GetMolarWeightFromXi(Fluid[cp1].MolarFracs, mix) + + var MassFracsL = MIX.GetMassFractions(MixWL, Fluid[c ].MolarFracs, mix) + var MassFracsR = MIX.GetMassFractions(MixWR, Fluid[cp1].MolarFracs, mix) + + var gammaL = MIX.GetGamma(Fluid[c ].temperature, MixWL, MassFracsL, mix) + var gammaR = MIX.GetGamma(Fluid[cp1].temperature, MixWR, MassFracsR, mix) + + var dpdrhoiL = MIX.Getdpdrhoi(gammaL, Fluid[c ].temperature, MassFracsL, mix) + var dpdrhoiR = MIX.Getdpdrhoi(gammaR, Fluid[cp1].temperature, MassFracsR, mix) + + var dpdeL = MIX.Getdpde(Fluid[c ].rho, gammaL, mix) + var dpdeR = MIX.Getdpde(Fluid[cp1].rho, gammaR, mix) + + var TotalEnergyL = Fluid[c ].Conserved[irE]/Fluid[c ].rho + var TotalEnergyR = Fluid[cp1].Conserved[irE]/Fluid[cp1].rho + + var TotalEnthalpyL = TotalEnergyL + Fluid[c ].pressure/Fluid[c ].rho + var TotalEnthalpyR = TotalEnergyR + Fluid[cp1].pressure/Fluid[cp1].rho + + -- Compute Roe averaged state + var RoeFactorL = sqrt(Fluid[c ].rho)/(sqrt(Fluid[c].rho) + sqrt(Fluid[cp1].rho)) + var RoeFactorR = sqrt(Fluid[cp1].rho)/(sqrt(Fluid[c].rho) + sqrt(Fluid[cp1].rho)) + + var rhoRoe = sqrt(Fluid[c].rho*Fluid[cp1].rho) + + var YiRoe : double[nSpec] + for i=0, nSpec do + YiRoe[i] = MassFracsL[i]*RoeFactorL + MassFracsR[i]*RoeFactorR + end + + var uRoe = MACRO.vv_add( MACRO.vs_mul(Fluid[c ].velocity, RoeFactorL), + MACRO.vs_mul(Fluid[cp1].velocity, RoeFactorR)) + var HRoe = TotalEnthalpyL*RoeFactorL + TotalEnthalpyR*RoeFactorR + var ERoe = TotalEnergyL*RoeFactorL + TotalEnergyR*RoeFactorR + + var dpdrhoiRoe : double[nSpec] + for i=0, nSpec do + dpdrhoiRoe[i] = dpdrhoiL[i]*RoeFactorL + dpdrhoiR[i]*RoeFactorR + end + var dpdeRoe = dpdeL*RoeFactorL + dpdeR*RoeFactorR + + -- correct the pressure derivatives in order to satisfy the pressure jump condition + -- using the procedure in Shuen, Liou and Leer (1990) + var dp = Fluid[cp1].pressure - Fluid[c].pressure + var de = TotalEnergyR - 0.5*MACRO.dot(Fluid[cp1].velocity, Fluid[cp1].velocity) + de -= TotalEnergyL - 0.5*MACRO.dot(Fluid[c ].velocity, Fluid[c ].velocity) + var drhoi : double[nSpec] + for i=0, nSpec do + drhoi[i] = Fluid[cp1].Conserved[i] - Fluid[c].Conserved[i] + end + + -- find the error in the pressure jump due to Roe averages + var dpError = dp - de*dpdeRoe + var fact = pow(de*dpdeRoe, 2) + for i=0, nSpec do + dpError -= drhoi[i]*dpdrhoiRoe[i] + fact += pow(drhoi[i]*dpdrhoiRoe[i], 2) + end + + -- correct pressure derivatives + -- this threshold should not be affect the solution since fact is zero when all the jumps are zero + fact = 1.0/max(fact, 1e-6) + var dpdrhoiHat : double[nSpec] + for i=0, nSpec do + dpdrhoiHat[i] = dpdrhoiRoe[i]*(1.0 + dpdrhoiRoe[i]*drhoi[i]*dpError*fact) + end + var dpdeHat = dpdeRoe*(1.0 + dpdeRoe*de*dpError*fact) + + -- compute the Roe averaged speed of sound + var PovRhoRoe = HRoe - ERoe + var aRoe = PovRhoRoe/rhoRoe*dpdeHat + for i=0, nSpec do + aRoe += YiRoe[i]*dpdrhoiHat[i] + end + aRoe = sqrt(aRoe) + + -- build the eigenvector matrix + var K = [UTIL.mkArrayConstant(nEq*nEq, rexpr 0.0 end)] + + -- identify face normal and tangential directions + var iN = (ind+0)%3 + var iT1 = (ind+1)%3 + var iT2 = (ind+2)%3 + + -- fill face normal + var n : double[3] + n[iN ] = 1.0 + n[iT1] = 0.0 + n[iT2] = 0.0 + + for i=0, nSpec do + K[i*nEq + 0] = YiRoe[i] + K[i*nEq + i+1] = 1.0 + K[i*nEq + nSpec+3] = YiRoe[i] + end + + K[(nSpec+0)*nEq + 0] = uRoe[0] - aRoe*n[0] + for i=0, nSpec do + K[(nSpec+0)*nEq + i+1] = uRoe[0] + end + K[(nSpec+0)*nEq + nSpec+1] = n[1] + n[2] + K[(nSpec+0)*nEq + nSpec+2] = 0.0 + K[(nSpec+0)*nEq + nSpec+3] = uRoe[0] + aRoe*n[0] + + K[(nSpec+1)*nEq + 0] = uRoe[1] - aRoe*n[1] + for i=0, nSpec do + K[(nSpec+1)*nEq + i+1] = uRoe[1] + end + K[(nSpec+1)*nEq + nSpec+1] = n[0] + K[(nSpec+1)*nEq + nSpec+2] = n[2] + K[(nSpec+1)*nEq + nSpec+3] = uRoe[1] + aRoe*n[1] + + K[(nSpec+2)*nEq + 0] = uRoe[2] - aRoe*n[2] + for i=0, nSpec do + K[(nSpec+2)*nEq + i+1] = uRoe[2] + end + K[(nSpec+2)*nEq + nSpec+1] = 0.0 + K[(nSpec+2)*nEq + nSpec+2] = n[0] + n[1] + K[(nSpec+2)*nEq + nSpec+3] = uRoe[2] + aRoe*n[2] + + K[(nSpec+3)*nEq + 0] = HRoe - uRoe[iN]*aRoe + for i=0, nSpec do + K[(nSpec+3)*nEq + i+1] = ERoe - rhoRoe*dpdrhoiHat[i]/dpdeHat + end + K[(nSpec+3)*nEq + nSpec+1] = uRoe[1]*n[0] + uRoe[0]*n[1] + uRoe[0]*n[2] + K[(nSpec+3)*nEq + nSpec+2] = uRoe[2]*n[0] + uRoe[2]*n[1] + uRoe[1]*n[2] + K[(nSpec+3)*nEq + nSpec+3] = HRoe + uRoe[iN]*aRoe + + return K + end + return GetCharacteristicMapping +end) + +local __demand(__inline) +task GetPlusFlux( F : double[nEq], + Q : double[nEq], + lam : double[nEq]) + for i=0, nEq do + F[i] += lam[i]*Q[i] + end + return F +end + +local __demand(__inline) +task GetMinusFlux( F : double[nEq], + Q : double[nEq], + lam : double[nEq]) + for i=0, nEq do + F[i] -= lam[i]*Q[i] + end + return F +end + +local mkReconstructEulerFlux = terralib.memoize(function(dir) + local ReconstructEulerFlux + + local ind + local FluxC + local EulerFlux + local reconFacePlus + local reconFaceMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + if (dir == "x") then + ind = 0 + FluxC = "FluxXCorr" + EulerFlux = "EulerFluxX" + reconFacePlus = "reconXFacePlus" + reconFaceMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + elseif (dir == "y") then + ind = 1 + FluxC = "FluxYCorr" + EulerFlux = "EulerFluxY" + reconFacePlus = "reconYFacePlus" + reconFaceMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + elseif (dir == "z") then + ind = 2 + FluxC = "FluxZCorr" + EulerFlux = "EulerFluxZ" + reconFacePlus = "reconZFacePlus" + reconFaceMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + else assert(false) end + + -- TENO coefficients + local r_c = 0.17 + local kethe = 1.e-8 + local cut_off_bc = 1.0e-3 + local incom_int = 9.5 + local diff_int = incom_int - 6.0 + + local __demand(__inline) + task TENOReconstructPlus(ym2 : double, ym1 : double, y : double, yp1 : double, yp2 : double, yp3 : double, ReconCoeffs : double[nStencils*6], TENOCoeffs : double[nStencils], BCStencil : bool) + + var s1 = 13.0 /12.0*(ym1 - 2.0*y + yp1)*(ym1 - 2.0*y + yp1) + 3.0/12.0*(ym1 - yp1)*(ym1 - yp1) + var s2 = 13.0 /12.0*(y - 2.0*yp1 + yp2)*(y - 2.0*yp1 + yp2) + 3.0/12.0*(3.0*y - 4.0*yp1 + yp2)*(3.0*y - 4.0*yp1 + yp2) + var s3 = 13.0 /12.0*(ym2 - 2.0*ym1 + y )*(ym2 - 2.0*ym1 + y ) + 3.0/12.0*(ym2 - 4.0*ym1 + 3.0*y)*(ym2 - 4.0*ym1 + 3.0*y) + var s4 = 1.0/ 240.0*fabs((2107.0*y*y - 9402.0*y*yp1 + 11003.0*yp1*yp1 + 7042.0*y*yp2 - 17246.0*yp1*yp2 + 7043.0*yp2*yp2 - 1854.0*y*yp3 + 4642.0*yp1*yp3 - 3882.0*yp2*yp3 + 547.0*yp3*yp3)) + + var s64 = 1.0 / 12.0*fabs(139633.0*yp3*yp3 - 1429976.0* yp2*yp3 + 3824847.0*yp2*yp2 + 2863984.0*yp1*yp3 - 15880404.0*yp1*yp2 + 17195652.0*yp1*yp1 - 2792660.0* y *yp3 + - 35817664.0*y *yp1 + 19510972.0*y *y + 1325006.0*ym1*yp3 - 7727988.0*ym1*yp2 + 17905032.0*ym1*yp1 - 20427884.0*ym1*y + 5653317.0* ym1*ym1 + - 245620.0* ym2*yp3 + 1458762.0* ym2*yp2 - 3462252.0*ym2*yp1 + 4086352.0*ym2*y - 2380800.0* ym2*ym1 + 271779.0* ym2*ym2 + 15929912.0*y *yp2) / 10080.0 + + var tau6 = fabs(s64 - (s3 + s2 + 4.0*s1) / 6.0) + + if BCStencil then tau6 = 1.0 end + + -- not recommend to rescale the small number + var a1 = pow(1.0 + tau6 / (s1 + 1.0e-8), 6.0) + var a2 = pow(1.0 + tau6 / (s2 + 1.0e-8), 6.0) + var a3 = pow(1.0 + tau6 / (s3 + 1.0e-8), 6.0) + var a4 = pow(1.0 + tau6 / (s4 + 1.0e-8), 6.0) + + if (fabs(TENOCoeffs[Stencil1]) < 1e-10) then a1 = 0.0 end + if (fabs(TENOCoeffs[Stencil2]) < 1e-10) then a2 = 0.0 end + if (fabs(TENOCoeffs[Stencil3]) < 1e-10) then a3 = 0.0 end + if (fabs(TENOCoeffs[Stencil4]) < 1e-10) then a4 = 0.0 end + + var a = 1.0/(a1 + a2 + a3 + a4) + var b1 = a1*a + var b2 = a2*a + var b3 = a3*a + var b4 = a4*a + + var var2 = fabs(ym1 - ym2) + var var3 = fabs(y - ym1) + var var4 = fabs(yp1 - y ) + var var5 = fabs(yp2 - yp1) + var var6 = fabs(yp3 - yp2) + + -- the parameter r_c can be tuned to be around 0.2 if necessary + var eps = 0.9*r_c*kethe*kethe / (1. - 0.9*r_c) + + var r = min((2.0*var2*var3 + eps) / (var2*var2 + var3*var3 + eps), + (2.0*var3*var4 + eps) / (var3*var3 + var4*var4 + eps)) + r min= (2.0*var4*var5 + eps) / (var4*var4 + var5*var5 + eps) + r min= (2.0*var5*var6 + eps) / (var5*var5 + var6*var6 + eps) + + var delta = 1.0 - min(r / r_c, 1.0) + + var decay = pow((1.0 - delta), 4.0) * (1.0 + 4.0 * delta) + var power_int = incom_int - diff_int * (1.0 - decay) + var cut_off = pow(10.0, (-power_int)) + + if BCStencil then cut_off = cut_off_bc end + + if (b1 < cut_off) then b1 = 0.0 else b1 = 1.0 end + if (b2 < cut_off) then b2 = 0.0 else b2 = 1.0 end + if (b3 < cut_off) then b3 = 0.0 else b3 = 1.0 end + if (b4 < cut_off) then b4 = 0.0 else b4 = 1.0 end + + var Variation1 = ym2*ReconCoeffs[Stencil1*6+0] + + ym1*ReconCoeffs[Stencil1*6+1] + + y *ReconCoeffs[Stencil1*6+2] + + yp1*ReconCoeffs[Stencil1*6+3] + + yp2*ReconCoeffs[Stencil1*6+4] + + yp3*ReconCoeffs[Stencil1*6+5] - y + + var Variation2 = ym2*ReconCoeffs[Stencil2*6+0] + + ym1*ReconCoeffs[Stencil2*6+1] + + y *ReconCoeffs[Stencil2*6+2] + + yp1*ReconCoeffs[Stencil2*6+3] + + yp2*ReconCoeffs[Stencil2*6+4] + + yp3*ReconCoeffs[Stencil2*6+5] - y + + var Variation3 = ym2*ReconCoeffs[Stencil3*6+0] + + ym1*ReconCoeffs[Stencil3*6+1] + + y *ReconCoeffs[Stencil3*6+2] + + yp1*ReconCoeffs[Stencil3*6+3] + + yp2*ReconCoeffs[Stencil3*6+4] + + yp3*ReconCoeffs[Stencil3*6+5] - y + + var Variation4 = ym2*ReconCoeffs[Stencil4*6+0] + + ym1*ReconCoeffs[Stencil4*6+1] + + y *ReconCoeffs[Stencil4*6+2] + + yp1*ReconCoeffs[Stencil4*6+3] + + yp2*ReconCoeffs[Stencil4*6+4] + + yp3*ReconCoeffs[Stencil4*6+5] - y + + -- this is 6-point 6th-order reconstruction TENO6-A + a1 = TENOCoeffs[Stencil1] * b1 + a2 = TENOCoeffs[Stencil2] * b2 + a3 = TENOCoeffs[Stencil3] * b3 + a4 = TENOCoeffs[Stencil4] * b4 + + a = 1.0/(a1 + a2 + a3 + a4) + var w1 = a1*a + var w2 = a2*a + var w3 = a3*a + var w4 = a4*a + + return y + w1*Variation1 + w2*Variation2 + w3*Variation3 + w4*Variation4 + end + + local __demand(__inline) + task TENOReconstructMinus(ym2 : double, ym1 : double, y : double, yp1 : double, yp2 : double, yp3 : double, ReconCoeffs : double[nStencils*6], TENOCoeffs : double[nStencils], BCStencil : bool) + + var s1 = 13.0/12.0*(yp2 - 2.0*yp1 + y )*(yp2 - 2.0*yp1 + y ) + 3.0 / 12.0*(yp2 - y)*(yp2 - y) + var s2 = 13.0/12.0*(yp1 - 2.0*y + ym1)*(yp1 - 2.0*y + ym1) + 3.0 / 12.0*(3.0*yp1 - 4.0*y + ym1)*(3.0*yp1 - 4.0*y + ym1) + var s3 = 13.0/12.0*(yp3 - 2.0*yp2 + yp1)*(yp3 - 2.0*yp2 + yp1) + 3.0 / 12.0*(yp3 - 4.0*yp2 + 3.0*yp1)*(yp3 - 4.0*yp2 + 3.0*yp1) + var s4 = 1.0/240.0*fabs((2107.0*yp1*yp1 - 9402.0*yp1*y + 11003.0*y*y + 7042.0*yp1*ym1 - 17246.0*y*ym1 + 7043.0*ym1*ym1 - 1854.0*yp1*ym2 + 4642.0*y*ym2 - 3882.0*ym1*ym2 + 547.0*ym2*ym2)) + + var s64 = 1.0 / 12.0*fabs(139633.0*ym2*ym2 - 1429976.0* ym1*ym2 + 3824847.0*ym1*ym1 + 2863984.0*y *ym2 - 15880404.0*y *ym1 + 17195652.0*y *y - 2792660.0* yp1*ym2 + - 35817664.0*yp1*y + 19510972.0*yp1*yp1 + 1325006.0*yp2*ym2 - 7727988.0*yp2*ym1 + 17905032.0*yp2*y - 20427884.0*yp2*yp1 + 5653317.0* yp2*yp2 + - 245620.0* yp3*ym2 + 1458762.0* yp3*ym1 - 3462252.0*yp3*y + 4086352.0*yp3*yp1 - 2380800.0* yp3*yp2 + 271779.0* yp3*yp3 + 15929912.0*yp1*ym1) / 10080.0 + + var tau6 = fabs(s64 - (s3 + s2 + 4.0*s1) / 6.0) + + if BCStencil then tau6 = 1.0 end + + -- not recommend to rescale the small number + var a1 = pow(1.0 + tau6 / (s1 + 1.0e-8), 6.0) + var a2 = pow(1.0 + tau6 / (s2 + 1.0e-8), 6.0) + var a3 = pow(1.0 + tau6 / (s3 + 1.0e-8), 6.0) + var a4 = pow(1.0 + tau6 / (s4 + 1.0e-8), 6.0) + + if (fabs(TENOCoeffs[Stencil1]) < 1e-10) then a1 = 0.0 end + if (fabs(TENOCoeffs[Stencil2]) < 1e-10) then a2 = 0.0 end + if (fabs(TENOCoeffs[Stencil3]) < 1e-10) then a3 = 0.0 end + if (fabs(TENOCoeffs[Stencil4]) < 1e-10) then a4 = 0.0 end + + var a = 1.0/(a1 + a2 + a3 + a4) + var b1 = a1*a + var b2 = a2*a + var b3 = a3*a + var b4 = a4*a + + var var2 = fabs(yp2 - yp3) + var var3 = fabs(yp1 - yp2) + var var4 = fabs(y - yp1) + var var5 = fabs(ym1 - y) + var var6 = fabs(ym2 - ym1) + + -- the parameter r_c can be tuned to be around 0.2 if necessary + var eps = 0.9*r_c*kethe*kethe / (1.0 - 0.9*r_c) + + var r = min((2.0*var2*var3 + eps) / (var2*var2 + var3*var3 + eps), + (2.0*var3*var4 + eps) / (var3*var3 + var4*var4 + eps)) + r min= (2.0*var4*var5 + eps) / (var4*var4 + var5*var5 + eps) + r min= (2.0*var5*var6 + eps) / (var5*var5 + var6*var6 + eps) + + var delta = 1.0 - min(r / r_c, 1.0) + + var decay = pow((1.0 - delta), 4.0) * (1.0 + 4.0 * delta) + var power_int = incom_int - diff_int * (1.0 - decay) + var cut_off = pow(10.0, (-power_int)) + + if BCStencil then cut_off = cut_off_bc end + + if (b1 < cut_off) then b1 = 0.0 else b1 = 1.0 end + if (b2 < cut_off) then b2 = 0.0 else b2 = 1.0 end + if (b3 < cut_off) then b3 = 0.0 else b3 = 1.0 end + if (b4 < cut_off) then b4 = 0.0 else b4 = 1.0 end + + var Variation1 = ym2*ReconCoeffs[Stencil1*6+0] + + ym1*ReconCoeffs[Stencil1*6+1] + + y *ReconCoeffs[Stencil1*6+2] + + yp1*ReconCoeffs[Stencil1*6+3] + + yp2*ReconCoeffs[Stencil1*6+4] + + yp3*ReconCoeffs[Stencil1*6+5] - yp1 + + var Variation2 = ym2*ReconCoeffs[Stencil2*6+0] + + ym1*ReconCoeffs[Stencil2*6+1] + + y *ReconCoeffs[Stencil2*6+2] + + yp1*ReconCoeffs[Stencil2*6+3] + + yp2*ReconCoeffs[Stencil2*6+4] + + yp3*ReconCoeffs[Stencil2*6+5] - yp1 + + var Variation3 = ym2*ReconCoeffs[Stencil3*6+0] + + ym1*ReconCoeffs[Stencil3*6+1] + + y *ReconCoeffs[Stencil3*6+2] + + yp1*ReconCoeffs[Stencil3*6+3] + + yp2*ReconCoeffs[Stencil3*6+4] + + yp3*ReconCoeffs[Stencil3*6+5] - yp1 + + var Variation4 = ym2*ReconCoeffs[Stencil4*6+0] + + ym1*ReconCoeffs[Stencil4*6+1] + + y *ReconCoeffs[Stencil4*6+2] + + yp1*ReconCoeffs[Stencil4*6+3] + + yp2*ReconCoeffs[Stencil4*6+4] + + yp3*ReconCoeffs[Stencil4*6+5] - yp1 + + -- this is 6-point 6th-order reconstruction TENO6-A + a1 = TENOCoeffs[Stencil1] * b1 + a2 = TENOCoeffs[Stencil2] * b2 + a3 = TENOCoeffs[Stencil3] * b3 + a4 = TENOCoeffs[Stencil4] * b4 + + a = 1.0/(a1 + a2 + a3 + a4) + var w1 = a1*a + var w2 = a2*a + var w3 = a3*a + var w4 = a4*a + + return yp1 + w1*Variation1 + w2*Variation2 + w3*Variation3 + w4*Variation4 + end + + local __demand(__inline) + task ReconstructEulerFlux(Fluid : region(ispace(int3d), Fluid_columns), + cm2 : int3d, + cm1 : int3d, + c : int3d, + cp1 : int3d, + cp2 : int3d, + cp3 : int3d, + mix : MIX.Mixture) + where + reads(Fluid.{[reconFacePlus], [reconFaceMinus]}), + reads(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + reads(Fluid.[BCStencil]), + reads(Fluid.Conserved), + reads(Fluid.[Primitives]), + reads(Fluid.[Properties]), + reads(Fluid.[EulerFlux]), + writes(Fluid.[FluxC]) + do + + -- Map in the characteristic space + var K = [mkGetCharacteristicMapping(dir)](Fluid, c, cp1, mix) + var KInv : LUdec + KInv.A = K + KInv = ludcmp(KInv) + + -- Conserved varialbes in the characteristic space + var QCM2 = lubksb(KInv, Fluid[cm2].Conserved) + var QCM1 = lubksb(KInv, Fluid[cm1].Conserved) + var QC = lubksb(KInv, Fluid[c ].Conserved) + var QCP1 = lubksb(KInv, Fluid[cp1].Conserved) + var QCP2 = lubksb(KInv, Fluid[cp2].Conserved) + var QCP3 = lubksb(KInv, Fluid[cp3].Conserved) + + -- Euler fluxes in the characteristic space + var FCM2 = lubksb(KInv, Fluid[cm2].[EulerFlux]) + var FCM1 = lubksb(KInv, Fluid[cm1].[EulerFlux]) + var FC = lubksb(KInv, Fluid[c ].[EulerFlux]) + var FCP1 = lubksb(KInv, Fluid[cp1].[EulerFlux]) + var FCP2 = lubksb(KInv, Fluid[cp2].[EulerFlux]) + var FCP3 = lubksb(KInv, Fluid[cp3].[EulerFlux]) + + -- Vector of maximum eigenvalues + var Lam1 = max(max(max(max(max( + fabs(Fluid[cm2].velocity[ind]-Fluid[cm2].SoS), + fabs(Fluid[cm1].velocity[ind]-Fluid[cm1].SoS)), + fabs(Fluid[c ].velocity[ind]-Fluid[c ].SoS)), + fabs(Fluid[cp1].velocity[ind]-Fluid[cp1].SoS)), + fabs(Fluid[cp2].velocity[ind]-Fluid[cp2].SoS)), + fabs(Fluid[cp3].velocity[ind]-Fluid[cp3].SoS)) + + var Lam2 = max(max(max(max(max( + fabs(Fluid[cm2].velocity[ind]), + fabs(Fluid[cm1].velocity[ind])), + fabs(Fluid[c ].velocity[ind])), + fabs(Fluid[cp1].velocity[ind])), + fabs(Fluid[cp2].velocity[ind])), + fabs(Fluid[cp3].velocity[ind])) + + var Lam3 = max(max(max(max(max( + fabs(Fluid[cm2].velocity[ind]+Fluid[cm2].SoS), + fabs(Fluid[cm1].velocity[ind]+Fluid[cm1].SoS)), + fabs(Fluid[c ].velocity[ind]+Fluid[c ].SoS)), + fabs(Fluid[cp1].velocity[ind]+Fluid[cp1].SoS)), + fabs(Fluid[cp2].velocity[ind]+Fluid[cp2].SoS)), + fabs(Fluid[cp3].velocity[ind]+Fluid[cp3].SoS)) + + if Fluid[c].[BCStencil] then + Lam1 = max( + fabs(Fluid[c ].velocity[ind]-Fluid[c ].SoS), + fabs(Fluid[cp1].velocity[ind]-Fluid[cp1].SoS)) + + Lam2 = max( + fabs(Fluid[c ].velocity[ind]), + fabs(Fluid[cp1].velocity[ind])) + + Lam3 = max( + fabs(Fluid[c ].velocity[ind]+Fluid[c ].SoS), + fabs(Fluid[cp1].velocity[ind]+Fluid[cp1].SoS)) + end + + var LamMax = [UTIL.mkArrayConstant(nEq, rexpr Lam2 end)] + LamMax[ 0] = Lam1 + LamMax[nEq-1] = Lam3 + + -- Combine positive fluxes and negative fluxes + var EFluxPlusCM2 = GetPlusFlux(FCM2, QCM2, LamMax) + var EFluxPlusCM1 = GetPlusFlux(FCM1, QCM1, LamMax) + var EFluxPlusC = GetPlusFlux(FC , QC , LamMax) + var EFluxPlusCP1 = GetPlusFlux(FCP1, QCP1, LamMax) + var EFluxPlusCP2 = GetPlusFlux(FCP2, QCP2, LamMax) + var EFluxPlusCP3 = GetPlusFlux(FCP3, QCP3, LamMax) + + var EFluxMinusCM2 = GetMinusFlux(FCM2, QCM2, LamMax) + var EFluxMinusCM1 = GetMinusFlux(FCM1, QCM1, LamMax) + var EFluxMinusC = GetMinusFlux(FC , QC , LamMax) + var EFluxMinusCP1 = GetMinusFlux(FCP1, QCP1, LamMax) + var EFluxMinusCP2 = GetMinusFlux(FCP2, QCP2, LamMax) + var EFluxMinusCP3 = GetMinusFlux(FCP3, QCP3, LamMax) + + var FluxPlus : double[nEq] + for i=0, nEq do + FluxPlus[i] = TENOReconstructPlus(EFluxPlusCM2[i], + EFluxPlusCM1[i], + EFluxPlusC [i], + EFluxPlusCP1[i], + EFluxPlusCP2[i], + EFluxPlusCP3[i], + Fluid[c].[reconFacePlus], + Fluid[c].[TENOCoeffsPlus], + Fluid[c].[BCStencil]) + end + + var FluxMinus : double[nEq] + for i=0, nEq do + FluxMinus[i] = TENOReconstructMinus(EFluxMinusCM2[i], + EFluxMinusCM1[i], + EFluxMinusC [i], + EFluxMinusCP1[i], + EFluxMinusCP2[i], + EFluxMinusCP3[i], + Fluid[c].[reconFaceMinus], + Fluid[c].[TENOCoeffsMinus], + Fluid[c].[BCStencil]) + end + + var Flux : double[nEq] + for i=0, nEq do + Flux[i] = (-0.5*(FluxPlus[i] + FluxMinus[i])) + end + + -- Store correction to recover the first order reconstruction + var FluxCorr : double[nEq] + for i=0, nEq do + FluxCorr[i] = (-0.5*(EFluxPlusC[i] + EFluxMinusCP1[i])) - Flux[i] + end + Fluid[c].[FluxC] = [MATH.mkMatMul(nEq)](FluxCorr, K) + + -- Map bask to the conserved variables space + return [MATH.mkMatMul(nEq)](Flux, K) + end + + return ReconstructEulerFlux +end) + +------------------------------------------------------------------------------- +-- DIFFUSION FLUXES ROUTINES +------------------------------------------------------------------------------- +local function emitAddDiffusionFlux(dir, r, Flux, c, cp1, mix) + + local ind + local interp + local deriv + if (dir == "x") then + interp = "interpXFace" + deriv = "derivXFace" + elseif (dir == "y") then + interp = "interpYFace" + deriv = "derivYFace" + elseif (dir == "z") then + interp = "interpZFace" + deriv = "derivZFace" + else assert(false) end + + local sigma = regentlib.newsymbol(double[3], "sigma") + local muFace = regentlib.newsymbol(double, "muFace") + + local computeSigma + if (dir == "x") then + computeSigma = rquote + -- Velocity gradient at the face location + var dUdXFace = [r][c].derivXFace*([r][cp1].velocity[0] - [r][c].velocity[0]) + var dVdXFace = [r][c].derivXFace*([r][cp1].velocity[1] - [r][c].velocity[1]) + var dWdXFace = [r][c].derivXFace*([r][cp1].velocity[2] - [r][c].velocity[2]) + var dUdYFace = [r][c].interpXFace[0]*[r][c].velocityGradientY[0] + [r][c].interpXFace[1]*[r][cp1].velocityGradientY[0] + var dUdZFace = [r][c].interpXFace[0]*[r][c].velocityGradientZ[0] + [r][c].interpXFace[1]*[r][cp1].velocityGradientZ[0] + var dVdYFace = [r][c].interpXFace[0]*[r][c].velocityGradientY[1] + [r][c].interpXFace[1]*[r][cp1].velocityGradientY[1] + var dVdZFace = [r][c].interpXFace[0]*[r][c].velocityGradientZ[1] + [r][c].interpXFace[1]*[r][cp1].velocityGradientZ[1] + var dWdYFace = [r][c].interpXFace[0]*[r][c].velocityGradientY[2] + [r][c].interpXFace[1]*[r][cp1].velocityGradientY[2] + var dWdZFace = [r][c].interpXFace[0]*[r][c].velocityGradientZ[2] + [r][c].interpXFace[1]*[r][cp1].velocityGradientZ[2] + + sigma = array(muFace*(4.0*dUdXFace-2.0*dVdYFace-2.0*dWdZFace)/3.0, + muFace*(dVdXFace+dUdYFace), + muFace*(dWdXFace+dUdZFace)) + end + elseif (dir == "y") then + computeSigma = rquote + -- Velocity gradient at the face location + var dUdYFace = [r][c].derivYFace*([r][cp1].velocity[0] - [r][c].velocity[0]) + var dVdYFace = [r][c].derivYFace*([r][cp1].velocity[1] - [r][c].velocity[1]) + var dWdYFace = [r][c].derivYFace*([r][cp1].velocity[2] - [r][c].velocity[2]) + var dUdXFace = [r][c].interpYFace[0]*[r][c].velocityGradientX[0] + [r][c].interpYFace[1]*[r][cp1].velocityGradientX[0] + var dUdZFace = [r][c].interpYFace[0]*[r][c].velocityGradientZ[0] + [r][c].interpYFace[1]*[r][cp1].velocityGradientZ[0] + var dVdXFace = [r][c].interpYFace[0]*[r][c].velocityGradientX[1] + [r][c].interpYFace[1]*[r][cp1].velocityGradientX[1] + var dVdZFace = [r][c].interpYFace[0]*[r][c].velocityGradientZ[1] + [r][c].interpYFace[1]*[r][cp1].velocityGradientZ[1] + var dWdXFace = [r][c].interpYFace[0]*[r][c].velocityGradientX[2] + [r][c].interpYFace[1]*[r][cp1].velocityGradientX[2] + var dWdZFace = [r][c].interpYFace[0]*[r][c].velocityGradientZ[2] + [r][c].interpYFace[1]*[r][cp1].velocityGradientZ[2] + + sigma = array(muFace*(dUdYFace+dVdXFace), + muFace*(4.0*dVdYFace-2.0*dUdXFace-2.0*dWdZFace)/3.0, + muFace*(dWdYFace+dVdZFace)) + end + elseif (dir == "z") then + computeSigma = rquote + -- Velocity gradient at the face location + var dUdZFace = [r][c].derivZFace*([r][cp1].velocity[0] - [r][c].velocity[0]) + var dVdZFace = [r][c].derivZFace*([r][cp1].velocity[1] - [r][c].velocity[1]) + var dWdZFace = [r][c].derivZFace*([r][cp1].velocity[2] - [r][c].velocity[2]) + var dUdXFace = [r][c].interpZFace[0]*[r][c].velocityGradientX[0] + [r][c].interpZFace[1]*[r][cp1].velocityGradientX[0] + var dUdYFace = [r][c].interpZFace[0]*[r][c].velocityGradientY[0] + [r][c].interpZFace[1]*[r][cp1].velocityGradientY[0] + var dVdXFace = [r][c].interpZFace[0]*[r][c].velocityGradientX[1] + [r][c].interpZFace[1]*[r][cp1].velocityGradientX[1] + var dVdYFace = [r][c].interpZFace[0]*[r][c].velocityGradientY[1] + [r][c].interpZFace[1]*[r][cp1].velocityGradientY[1] + var dWdXFace = [r][c].interpZFace[0]*[r][c].velocityGradientX[2] + [r][c].interpZFace[1]*[r][cp1].velocityGradientX[2] + var dWdYFace = [r][c].interpZFace[0]*[r][c].velocityGradientY[2] + [r][c].interpZFace[1]*[r][cp1].velocityGradientY[2] + + sigma = array(muFace*(dUdZFace+dWdXFace), + muFace*(dVdZFace+dWdYFace), + muFace*(4.0*dWdZFace-2.0*dUdXFace-2.0*dWdZFace)/3.0) + end + else assert(false) end + + return rquote + -- Mixture properties at the face location + var rhoFace = [r][c].[interp][0]*[r][c].rho + [r][c].[interp][1]*[r][cp1].rho + var [muFace] = [r][c].[interp][0]*[r][c].mu + [r][c].[interp][1]*[r][cp1].mu + var lamFace = [r][c].[interp][0]*[r][c].lam + [r][c].[interp][1]*[r][cp1].lam + var MixWFace = [r][c].[interp][0]*MIX.GetMolarWeightFromXi([r][c ].MolarFracs, mix) + + [r][c].[interp][1]*MIX.GetMolarWeightFromXi([r][cp1].MolarFracs, mix) + var DiFace : double[nSpec] + for i=0, nSpec do + DiFace[i] = [r][c].[interp][0]*[r][c].Di[i] + [r][c].[interp][1]*[r][cp1].Di[i] + end + + -- Primitive and conserved variables at the face location + var temperatureFace = [r][c].[interp][0]*[r][c ].temperature + + [r][c].[interp][1]*[r][cp1].temperature + var velocityFace = MACRO.vv_add(MACRO.vs_mul([r][c ].velocity, [r][c].[interp][0]), + MACRO.vs_mul([r][cp1].velocity, [r][c].[interp][1])) + var rhoYiFace : double[nSpec] + for i=0, nSpec do + rhoYiFace[i] = [r][c].[interp][0]*[r][c ].Conserved[i] + + [r][c].[interp][1]*[r][cp1].Conserved[i] + end + + -- Compute shear stress tensor + var [sigma]; [computeSigma]; + + -- Assemble the fluxes + var usigma = MACRO.dot(velocityFace, sigma) + var heatFlux = lamFace*[r][c].[deriv]*([r][c].temperature - [r][cp1].temperature) + + -- Species diffusion velocity + var YiVi : double[nSpec] + var ViCorr = 0.0 + for i=0, nSpec do + YiVi[i] = DiFace[i]*[r][c].[deriv]*([r][c].MolarFracs[i] - [r][cp1].MolarFracs[i])*MIX.GetSpeciesMolarWeight(i, mix)/MixWFace + ViCorr += YiVi[i] + end + + -- Partial Densities Fluxes + for i=0, nSpec do + var rhoYiVi = rhoFace*YiVi[i] - ViCorr*rhoYiFace[i] + Flux[i] -= rhoYiVi + heatFlux += rhoYiVi*MIX.GetSpeciesEnthalpy(i, temperatureFace, mix) + end + + -- Momentum Flux + for i=0, 3 do + Flux[irU+i] += sigma[i] + end + + -- Energy Flux + Flux[irE] += (usigma-heatFlux) + end + +end + + +------------------------------------------------------------------------------- +-- FLUXES ROUTINES +------------------------------------------------------------------------------- + +Exports.mkGetFlux = terralib.memoize(function(dir) + local GetFlux + + local Flux + local FluxC + local EulerFlux + local reconFacePlus + local reconFaceMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + local interp + local deriv + local vGrad1 + local vGrad2 + local mk_cm2 + local mk_cm1 + local mk_cp1 + local mk_cp2 + local mk_cp3 + if (dir == "x") then + Flux = "FluxX" + FluxC = "FluxXCorr" + EulerFlux = "EulerFluxX" + reconFacePlus = "reconXFacePlus" + reconFaceMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + interp = "interpXFace" + deriv = "derivXFace" + vGrad1 = "velocityGradientY" + vGrad2 = "velocityGradientZ" + mk_cm2 = function(c, b) return rexpr (c+{-2, 0, 0}) % b end end + mk_cm1 = function(c, b) return rexpr (c+{-1, 0, 0}) % b end end + mk_cp1 = function(c, b) return rexpr (c+{ 1, 0, 0}) % b end end + mk_cp2 = function(c, b) return rexpr (c+{ 2, 0, 0}) % b end end + mk_cp3 = function(c, b) return rexpr (c+{ 3, 0, 0}) % b end end + elseif (dir == "y") then + Flux = "FluxY" + FluxC = "FluxYCorr" + EulerFlux = "EulerFluxY" + reconFacePlus = "reconYFacePlus" + reconFaceMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + interp = "interpYFace" + deriv = "derivYFace" + vGrad1 = "velocityGradientX" + vGrad2 = "velocityGradientZ" + mk_cm2 = function(c, b) return rexpr (c+{ 0,-2, 0}) % b end end + mk_cm1 = function(c, b) return rexpr (c+{ 0,-1, 0}) % b end end + mk_cp1 = function(c, b) return rexpr (c+{ 0, 1, 0}) % b end end + mk_cp2 = function(c, b) return rexpr (c+{ 0, 2, 0}) % b end end + mk_cp3 = function(c, b) return rexpr (c+{ 0, 3, 0}) % b end end + elseif (dir == "z") then + Flux = "FluxZ" + FluxC = "FluxZCorr" + EulerFlux = "EulerFluxZ" + reconFacePlus = "reconZFacePlus" + reconFaceMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + interp = "interpZFace" + deriv = "derivZFace" + vGrad1 = "velocityGradientX" + vGrad2 = "velocityGradientY" + mk_cm2 = function(c, b) return rexpr (c+{ 0, 0,-2}) % b end end + mk_cm1 = function(c, b) return rexpr (c+{ 0, 0,-1}) % b end end + mk_cp1 = function(c, b) return rexpr (c+{ 0, 0, 1}) % b end end + mk_cp2 = function(c, b) return rexpr (c+{ 0, 0, 2}) % b end end + mk_cp3 = function(c, b) return rexpr (c+{ 0, 0, 3}) % b end end + else assert(false) end + + __demand(__parallel, __cuda, __leaf) + task GetFlux(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + Fluid_bounds : rect3d, + mix : MIX.Mixture) + where + ModCells <= Fluid, + reads(Fluid.{[reconFacePlus], [reconFaceMinus]}), + reads(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + reads(Fluid.[BCStencil]), + reads(Fluid.[interp]), + reads(Fluid.[deriv]), + reads(Fluid.Conserved), + reads(Fluid.[Primitives]), + reads(Fluid.[Properties]), + reads(Fluid.{[vGrad1], [vGrad2]}), + reads(Fluid.[EulerFlux]), + writes(Fluid.[Flux]), + writes(Fluid.[FluxC]) + do + __demand(__openmp) + for c in ModCells do + var cm2 = [mk_cm2(rexpr c end, rexpr Fluid_bounds end)]; + var cm1 = [mk_cm1(rexpr c end, rexpr Fluid_bounds end)]; + var cp1 = [mk_cp1(rexpr c end, rexpr Fluid_bounds end)]; + var cp2 = [mk_cp2(rexpr c end, rexpr Fluid_bounds end)]; + var cp3 = [mk_cp3(rexpr c end, rexpr Fluid_bounds end)]; + + -- Reconstruct Euler numerical fluxes + var F = [mkReconstructEulerFlux(dir)](Fluid, cm2, cm1, c, cp1, cp2, cp3, mix); + + -- Add diffusion + [emitAddDiffusionFlux(dir, rexpr Fluid end, + rexpr F end, + rexpr c end, + rexpr cp1 end, + rexpr mix end)]; + + Fluid[c].[Flux] = F + end + end + return GetFlux +end) + +return Exports end + diff --git a/src/prometeo_grid.rg b/src/prometeo_grid.rg new file mode 100644 index 0000000..508ee48 --- /dev/null +++ b/src/prometeo_grid.rg @@ -0,0 +1,441 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA, Fluid_columns) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- + +local C = regentlib.c +local cos = regentlib.cos(double) +local sinh = regentlib.sinh(double) +local cosh = regentlib.cosh(double) +local tanh = regentlib.tanh(double) + +local MACRO = require 'prometeo_macro' + +------------------------------------------------------------------------------- +-- CONSTANTS +------------------------------------------------------------------------------- +local CONST = require "prometeo_const" + +local PI = CONST.PI + +------------------------------------------------------------------------------- +-- MESH ROUTINES +------------------------------------------------------------------------------- +-- Description: +-- Linear interpolation, given the line defined by the points +-- (x=alpha, y=a) and (x=beta, y=b) find the y location of the +-- point on the line (x=xi, y=?) +-- Input: +-- xi = location on x axis +-- alpha = lower point on x axis +-- beta = upper point on x axis +-- a = lower point on y axis +-- b = upper point on y axis +-- Output: +-- y location on line at x=xi +local __demand(__inline) +task linear_interpolation(xi : double, + alpha : double, + beta : double, + a : double, + b : double) : double + return (b-a)/(beta-alpha)*(xi-alpha) + a +end + + +-- Description: +-- Generate the cell width of a nonuniform mesh +-- Input: +-- x_min = domain minimum +-- x_max = domain maximum +-- Nx = number of cells between x_min and x_max +-- Output: +-- width of the non-uniform mesh cell +local __demand(__inline) +task uniform_cell_width(x_min : double, + x_max : double, + Nx : uint64) : double + return (x_max-x_min)/Nx +end + + +-- Description: +-- Generate the cell center on a uniform mesh +-- Input: +-- x_min = domain minimum +-- x_max = domain maximum +-- Nx = number of cells between x_min and x_max +-- i = cell index between x_min and x_max +-- Note: i = 0 has x_min as left face and +-- i = Nx-1 has x_max as right face +-- so no ghost cells accounted for here +-- Output: +-- location of cell center +local __demand(__inline) +task uniform_cell_center(x_min : double, + x_max : double, + Nx : uint64, + i : uint64) : double + var dx = uniform_cell_width(x_min, x_max, Nx) + return x_min + i*dx + dx/2.0 +end + +-- Description: +-- Generate the location of the face in the negative direction +-- Input: +-- x_min = domain minimum +-- x_max = domain maximum +-- Nx = number of cells between x_min and x_max +-- i = cell index between x_min and x_max +-- Note: i = 0 has x_min as negative direction (left) face and +-- i = Nx-1 has x_max as positive direction (right) face +-- so no ghost cells accounted for here +-- Output: +-- location of face in the negative direction +local __demand(__inline) +task uniform_cell_neg_face(x_min : double, + x_max : double, + Nx : uint64, + i : uint64) : double + var dx = uniform_cell_width(x_min, x_max, Nx) + var x_center = uniform_cell_center(x_min, x_max, Nx, i) + return x_center - 0.5*dx +end + +-- Description: +-- Generate the location of the face in the postive direction +-- Input: +-- x_min = domain minimum +-- x_max = domain maximum +-- Nx = number of cells between x_min and x_max +-- i = cell index between x_min and x_max +-- Note: i = 0 has x_min as negative direction (left) face and +-- i = Nx-1 has x_max as positive direction (right) face +-- so no ghost cells accounted for here +-- Output: +-- location of face in the postive direction +local __demand(__inline) +task uniform_cell_pos_face(x_min : double, + x_max : double, + Nx : uint64, + i : uint64) : double + var dx = uniform_cell_width(x_min, x_max, Nx) + var x_center = uniform_cell_center(x_min, x_max, Nx, i) + return x_center + 0.5*dx +end + + +-- Description: +-- non-linear map point (x) on the interval (x_min, x_max) using +-- a cosine +-- Input: +-- x = location on uniform mesh +-- x_min = domain minimum +-- x_max = domain maximum +-- Output: +-- x location on a non-uniform mesh +local __demand(__inline) +task transform_uniform_to_nonuniform(x : double, + x_min : double, + x_max : double, + Grid_Type : SCHEMA.GridType, + Grid_Stretching : double) : double + var transformed : double + if (Grid_Type == SCHEMA.GridType_Uniform) then + transformed = x + elseif (Grid_Type == SCHEMA.GridType_Cosine) then + -- map x onto the interval -1 to 1 + var x_scaled_minus1_to_plus1 = linear_interpolation(x, x_min, x_max, -1.0, 1.0) + -- map non-uniformly onto the interval -1 to 1 + var x_non_uniform_minus1_to_plus1 = -1.0*cos(PI*(x_scaled_minus1_to_plus1+1.0)/2.0) + -- map non-uniform sample back to origional interval x_min to x_max + transformed = linear_interpolation(x_non_uniform_minus1_to_plus1, -1.0, 1.0, x_min, x_max) + elseif (Grid_Type == SCHEMA.GridType_TanhMinus) then + -- map x onto the interval -1 to 0 + var x_scaled_minus1_to_zero = linear_interpolation(x, x_min, x_max, -1.0, 0.0) + -- map non-uniformly onto the interval -1 to 0 + var x_non_uniform_minus1_to_zero = tanh(Grid_Stretching*x_scaled_minus1_to_zero)/tanh(Grid_Stretching) + -- map non-uniform sample back to origional interval x_min to x_max + transformed = linear_interpolation(x_non_uniform_minus1_to_zero, -1.0, 0.0, x_min, x_max) + elseif (Grid_Type == SCHEMA.GridType_TanhPlus) then + -- map x onto the interval 0 to 1 + var x_scaled_zero_to_plus1 = linear_interpolation(x, x_min, x_max, 0.0, 1.0) + -- map non-uniformly onto the interval 0 to 1 + var x_non_uniform_zero_to_plus1 = tanh(Grid_Stretching*x_scaled_zero_to_plus1)/tanh(Grid_Stretching) + -- map non-uniform sample back to origional interval x_min to x_max + transformed = linear_interpolation(x_non_uniform_zero_to_plus1, 0.0, 1.0, x_min, x_max) + elseif (Grid_Type == SCHEMA.GridType_Tanh) then + -- map x onto the interval -1 to 1 + var x_scaled_minus1_to_plus1 = linear_interpolation(x, x_min, x_max, -1.0, 1.0) + -- map non-uniformly onto the interval -1 to 1 + var x_non_uniform_minus1_to_plus1 = tanh(Grid_Stretching*x_scaled_minus1_to_plus1)/tanh(Grid_Stretching) + -- map non-uniform sample back to origional interval x_min to x_max + transformed = linear_interpolation(x_non_uniform_minus1_to_plus1, -1.0, 1.0, x_min, x_max) + end + return transformed +end + +-- Description: +-- Generate the location of the face in the negative direction +-- on a non uniform mesh +-- Input: +-- x_min = domain minimum +-- x_max = domain maximum +-- Nx = number of cells between x_min and x_max +-- i = cell index between x_min and x_max +-- Note: i = 0 has x_min as negative direction (left) face and +-- i = Nx-1 has x_max as positive direction (right) face +-- so no ghost cells accounted for here +-- Output: +-- location of face in the negative direction +local __demand(__inline) +task nonuniform_cell_neg_face(x_min : double, + x_max : double, + Nx : uint64, + i : uint64, + Grid_Type: SCHEMA.GridType, + Grid_Stretching: double) : double + var x_uniform_neg_face = uniform_cell_neg_face(x_min, x_max, Nx, i) + return transform_uniform_to_nonuniform(x_uniform_neg_face, x_min, x_max, Grid_Type, Grid_Stretching) +end + +-- Description: +-- Generate the location of the face in the postive direction +-- on a non uniform mesh +-- Input: +-- x_min = domain minimum +-- x_max = domain maximum +-- Nx = number of cells between x_min and x_max +-- i = cell index between x_min and x_max +-- Note: i = 0 has x_min as negative direction (left) face and +-- i = Nx-1 has x_max as positive direction (right) face +-- so no ghost cells accounted for here +-- Output: +-- location of face in the postive direction +local __demand(__inline) +task nonuniform_cell_pos_face(x_min : double, + x_max : double, + Nx : uint64, + i : uint64, + Grid_Type: SCHEMA.GridType, + Grid_Stretching: double) : double + var x_uniform_pos_face = uniform_cell_pos_face(x_min, x_max, Nx, i) + return transform_uniform_to_nonuniform(x_uniform_pos_face, x_min, x_max, Grid_Type, Grid_Stretching) +end + +-- Description: +-- Generate the cell center of a nonuniform mesh +-- Input: +-- x_min = domain minimum +-- x_max = domain maximum +-- Nx = number of cells between x_min and x_max +-- i = cell index between x_min and x_max +-- Note: i = 0 has x_min as left face and +-- i = Nx-1 has x_max as right face +-- so no ghost cells accounted for here +-- Output: +-- x location on a non-uniform mesh +local __demand(__inline) +task cell_center(x_min : double, + x_max : double, + Nx : uint64, + i : uint64, + Grid_Type: SCHEMA.GridType, + Grid_Stretching: double) : double + var x_non_uniform_neg_face = nonuniform_cell_neg_face(x_min, x_max, Nx, i, Grid_Type, Grid_Stretching) + var x_non_uniform_pos_face = nonuniform_cell_pos_face(x_min, x_max, Nx, i, Grid_Type, Grid_Stretching) + return 0.5*(x_non_uniform_neg_face + x_non_uniform_pos_face) +end + +-- Description: +-- Generate the cell width of a nonuniform mesh +-- Input: +-- x_min = domain minimum +-- x_max = domain maximum +-- Nx = number of cells between x_min and x_max +-- i = cell index between x_min and x_max +-- Note: i = 0 has x_min as left face and +-- i = Nx-1 has x_max as right face +-- so no ghost cells accounted for here +-- Output: +-- width of the non-uniform mesh cell +local __demand(__inline) +task cell_width(x_min : double, + x_max : double, + Nx : uint64, + i : uint64, + Grid_Type: int, + Grid_Stretching: double) : double + var x_non_uniform_neg_face = nonuniform_cell_neg_face(x_min, x_max, Nx, i, Grid_Type, Grid_Stretching) + var x_non_uniform_pos_face = nonuniform_cell_pos_face(x_min, x_max, Nx, i, Grid_Type, Grid_Stretching) + return x_non_uniform_pos_face - x_non_uniform_neg_face +end + + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.InitializeGeometry(Fluid : region(ispace(int3d), Fluid_columns), + Grid_xType : SCHEMA.GridType, Grid_yType : SCHEMA.GridType, Grid_zType : SCHEMA.GridType, + Grid_xStretching : double, Grid_yStretching : double, Grid_zStretching : double, + Grid_xBnum : int32, Grid_xNum : int32, Grid_xOrigin : double, Grid_xWidth : double, + Grid_yBnum : int32, Grid_yNum : int32, Grid_yOrigin : double, Grid_yWidth : double, + Grid_zBnum : int32, Grid_zNum : int32, Grid_zOrigin : double, Grid_zWidth : double) +where + reads writes(Fluid.centerCoordinates), + reads writes(Fluid.cellWidth) +do + -- Find cell center coordinates and cell width of interior cells + __demand(__openmp) + for c in Fluid do + var xNegGhost = MACRO.is_xNegGhost(c, Grid_xBnum) + var xPosGhost = MACRO.is_xPosGhost(c, Grid_xBnum, Grid_xNum) + var yNegGhost = MACRO.is_yNegGhost(c, Grid_yBnum) + var yPosGhost = MACRO.is_yPosGhost(c, Grid_yBnum, Grid_yNum) + var zNegGhost = MACRO.is_zNegGhost(c, Grid_zBnum) + var zPosGhost = MACRO.is_zPosGhost(c, Grid_zBnum, Grid_zNum) + + if not (xNegGhost or xPosGhost) then + var x_neg_boundary = Grid_xOrigin + var x_pos_boundary = Grid_xOrigin + Grid_xWidth + var x_idx_interior = c.x - Grid_xBnum + Fluid[c].centerCoordinates[0] = cell_center(x_neg_boundary, x_pos_boundary, Grid_xNum, x_idx_interior, Grid_xType, Grid_xStretching) + Fluid[c].cellWidth[0] = cell_width( x_neg_boundary, x_pos_boundary, Grid_xNum, x_idx_interior, Grid_xType, Grid_xStretching) + end + + if not (yNegGhost or yPosGhost) then + var y_neg_boundary = Grid_yOrigin + var y_pos_boundary = Grid_yOrigin + Grid_yWidth + var y_idx_interior = c.y - Grid_yBnum + Fluid[c].centerCoordinates[1] = cell_center(y_neg_boundary, y_pos_boundary, Grid_yNum, y_idx_interior, Grid_yType, Grid_yStretching) + Fluid[c].cellWidth[1] = cell_width( y_neg_boundary, y_pos_boundary, Grid_yNum, y_idx_interior, Grid_yType, Grid_yStretching) + end + + if not (zNegGhost or zPosGhost) then + var z_neg_boundary = Grid_zOrigin + var z_pos_boundary = Grid_zOrigin + Grid_zWidth + var z_idx_interior = c.z - Grid_zBnum + Fluid[c].centerCoordinates[2] = cell_center(z_neg_boundary, z_pos_boundary, Grid_zNum, z_idx_interior, Grid_zType, Grid_zStretching) + Fluid[c].cellWidth[2] = cell_width( z_neg_boundary, z_pos_boundary, Grid_zNum, z_idx_interior, Grid_zType, Grid_zStretching) + end + end +end + +-- NOTE: It is safe to not pass the ghost regions to this task, because we +-- always group ghost cells with their neighboring interior cells. +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.InitializeGhostGeometry(Fluid : region(ispace(int3d), Fluid_columns), + Grid_xType : SCHEMA.GridType, Grid_yType : SCHEMA.GridType, Grid_zType : SCHEMA.GridType, + Grid_xStretching : double, Grid_yStretching : double, Grid_zStretching : double, + Grid_xBnum : int32, Grid_xNum : int32, Grid_xOrigin : double, Grid_xWidth : double, + Grid_yBnum : int32, Grid_yNum : int32, Grid_yOrigin : double, Grid_yWidth : double, + Grid_zBnum : int32, Grid_zNum : int32, Grid_zOrigin : double, Grid_zWidth : double) +where + reads writes(Fluid.centerCoordinates), + reads writes(Fluid.cellWidth) +do + -- Find cell center coordinates and cell width of ghost cells + __demand(__openmp) + for c in Fluid do + + var xNegGhost = MACRO.is_xNegGhost(c, Grid_xBnum) + var xPosGhost = MACRO.is_xPosGhost(c, Grid_xBnum, Grid_xNum) + var yNegGhost = MACRO.is_yNegGhost(c, Grid_yBnum) + var yPosGhost = MACRO.is_yPosGhost(c, Grid_yBnum, Grid_yNum) + var zNegGhost = MACRO.is_zNegGhost(c, Grid_zBnum) + var zPosGhost = MACRO.is_zPosGhost(c, Grid_zBnum, Grid_zNum) + + if xNegGhost then + var c_int = ((c+{1,0,0}) % Fluid.bounds) + var x_neg_boundary = Grid_xOrigin + var x_pos_boundary = Grid_xOrigin + Grid_xWidth + var x_idx_interior = c_int.x - Grid_xBnum + var centerCoordinates_int = cell_center(x_neg_boundary, x_pos_boundary, Grid_xNum, x_idx_interior, Grid_xType, Grid_xStretching) + var cellWidth_int = cell_width( x_neg_boundary, x_pos_boundary, Grid_xNum, x_idx_interior, Grid_xType, Grid_xStretching) + Fluid[c].centerCoordinates[0] = centerCoordinates_int - cellWidth_int + Fluid[c].cellWidth[0] = cellWidth_int + elseif xPosGhost then + var c_int = ((c-{1,0,0}) % Fluid.bounds) + var x_neg_boundary = Grid_xOrigin + var x_pos_boundary = Grid_xOrigin + Grid_xWidth + var x_idx_interior = c_int.x - Grid_xBnum + var centerCoordinates_int = cell_center(x_neg_boundary, x_pos_boundary, Grid_xNum, x_idx_interior, Grid_xType, Grid_xStretching) + var cellWidth_int = cell_width( x_neg_boundary, x_pos_boundary, Grid_xNum, x_idx_interior, Grid_xType, Grid_xStretching) + Fluid[c].centerCoordinates[0] = centerCoordinates_int + cellWidth_int + Fluid[c].cellWidth[0] = cellWidth_int + end + + if yNegGhost then + var c_int = ((c+{0,1,0}) % Fluid.bounds) + var y_neg_boundary = Grid_yOrigin + var y_pos_boundary = Grid_yOrigin + Grid_yWidth + var y_idx_interior = c_int.y - Grid_yBnum + var centerCoordinates_int = cell_center(y_neg_boundary, y_pos_boundary, Grid_yNum, y_idx_interior, Grid_yType, Grid_yStretching) + var cellWidth_int = cell_width( y_neg_boundary, y_pos_boundary, Grid_yNum, y_idx_interior, Grid_yType, Grid_yStretching) + Fluid[c].centerCoordinates[1] = centerCoordinates_int - cellWidth_int + Fluid[c].cellWidth[1] = cellWidth_int + elseif yPosGhost then + var c_int = ((c-{0,1,0}) % Fluid.bounds) + var y_neg_boundary = Grid_yOrigin + var y_pos_boundary = Grid_yOrigin + Grid_yWidth + var y_idx_interior = c_int.y - Grid_yBnum + var centerCoordinates_int = cell_center(y_neg_boundary, y_pos_boundary, Grid_yNum, y_idx_interior, Grid_yType, Grid_yStretching) + var cellWidth_int = cell_width( y_neg_boundary, y_pos_boundary, Grid_yNum, y_idx_interior, Grid_yType, Grid_yStretching) + Fluid[c].centerCoordinates[1] = centerCoordinates_int + cellWidth_int + Fluid[c].cellWidth[1] = cellWidth_int + end + + if zNegGhost then + var c_int = ((c+{0,0,1}) % Fluid.bounds) + var z_neg_boundary = Grid_zOrigin + var z_pos_boundary = Grid_zOrigin + Grid_zWidth + var z_idx_interior = c_int.z - Grid_zBnum + var centerCoordinates_int = cell_center(z_neg_boundary, z_pos_boundary, Grid_zNum, z_idx_interior, Grid_zType, Grid_zStretching) + var cellWidth_int = cell_width( z_neg_boundary, z_pos_boundary, Grid_zNum, z_idx_interior, Grid_zType, Grid_zStretching) + Fluid[c].centerCoordinates[2] = centerCoordinates_int - cellWidth_int + Fluid[c].cellWidth[2] = cellWidth_int + elseif zPosGhost then + var c_int = ((c-{0,0,1}) % Fluid.bounds) + var z_neg_boundary = Grid_zOrigin + var z_pos_boundary = Grid_zOrigin + Grid_zWidth + var z_idx_interior = c_int.z - Grid_zBnum + var centerCoordinates_int = cell_center(z_neg_boundary, z_pos_boundary, Grid_zNum, z_idx_interior, Grid_zType, Grid_zStretching) + var cellWidth_int = cell_width( z_neg_boundary, z_pos_boundary, Grid_zNum, z_idx_interior, Grid_zType, Grid_zStretching) + Fluid[c].centerCoordinates[2] = centerCoordinates_int + cellWidth_int + Fluid[c].cellWidth[2] = cellWidth_int + end + end +end + +return Exports end + diff --git a/src/prometeo_init.rg b/src/prometeo_init.rg new file mode 100644 index 0000000..d48d473 --- /dev/null +++ b/src/prometeo_init.rg @@ -0,0 +1,452 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA, MIX, Fluid_columns) local Exports = {} + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local C = regentlib.c +local sin = regentlib.sin(double) +local cos = regentlib.cos(double) +local sinh = regentlib.sinh(double) +local cosh = regentlib.cosh(double) +local exp = regentlib.exp(double) +local pow = regentlib.pow(double) + +local CONST = require "prometeo_const" +local MACRO = require "prometeo_macro" +local CHEM = (require 'prometeo_chem')(SCHEMA, MIX, Fluid_columns) + +local PI = CONST.PI +local Primitives = CONST.Primitives + +------------------------------------------------------------------------------- +-- INITIALIZATION ROUTINES +------------------------------------------------------------------------------- + +__demand(__cuda,__leaf) -- MANUALLY PARALLELIZED, +task Exports.InitializeUniform(Fluid : region(ispace(int3d), Fluid_columns), + Flow_initParams : double[5], + initMolarFracs : double[nSpec]) +where + writes(Fluid.pressure), + writes(Fluid.[Primitives]) +do + __demand(__openmp) + for c in Fluid do + var i = 0 + Fluid[c].pressure = Flow_initParams[i]; i+=1 + Fluid[c].temperature = Flow_initParams[i]; i+=1 + Fluid[c].velocity = array(Flow_initParams[i], Flow_initParams[i+1], Flow_initParams[i+2]); i+=3 + Fluid[c].MolarFracs = initMolarFracs + end +end + +__demand(__leaf) -- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +task Exports.InitializeRandom(Fluid : region(ispace(int3d), Fluid_columns), + Flow_initParams : double[5], + initMolarFracs : double[nSpec]) +where + writes(Fluid.[Primitives]) +do + var magnitude = Flow_initParams[2] + var rngState : C.drand48_data + C.srand48_r(C.legion_get_current_time_in_nanos(), &rngState) + for c in Fluid do + Fluid[c].MolarFracs = initMolarFracs + Fluid[c].pressure = Flow_initParams[0] + Fluid[c].temperature = Flow_initParams[1] + Fluid[c].velocity = array(2 * (MACRO.drand48_r(&rngState) - 0.5) * magnitude, + 2 * (MACRO.drand48_r(&rngState) - 0.5) * magnitude, + 2 * (MACRO.drand48_r(&rngState) - 0.5) * magnitude) + end +end + +__demand(__cuda,__leaf) -- MANUALLY PARALLELIZED, +task Exports.InitializeTaylorGreen2D(Fluid : region(ispace(int3d), Fluid_columns), + Flow_initParams : double[5], + initMolarFracs : double[nSpec], + mix : MIX.Mixture, + Grid_xBnum : int32, Grid_xNum : int32, Grid_xOrigin : double, Grid_xWidth : double, + Grid_yBnum : int32, Grid_yNum : int32, Grid_yOrigin : double, Grid_yWidth : double, + Grid_zBnum : int32, Grid_zNum : int32, Grid_zOrigin : double, Grid_zWidth : double) +where + reads(Fluid.centerCoordinates), + writes(Fluid.[Primitives]) +do + __demand(__openmp) + for c in Fluid do + var i = 0 + var taylorGreenPressure = Flow_initParams[i]; i+=1 + var taylorGreenTemperature = Flow_initParams[i]; i+=1 + var taylorGreenVelocity = Flow_initParams[i]; i+=1 + var taylorGreenMolarFracs = initMolarFracs + MIX.ClipYi(taylorGreenMolarFracs) + var MixW = MIX.GetMolarWeightFromXi(taylorGreenMolarFracs, mix) + var taylorGreenDensity = MIX.GetRho(taylorGreenPressure, taylorGreenTemperature, MixW, mix) + var xy = Fluid[c].centerCoordinates + Fluid[c].temperature = taylorGreenTemperature + Fluid[c].MolarFracs = taylorGreenMolarFracs + Fluid[c].velocity = MACRO.vs_mul([double[3]](array(((sin(xy[0])*cos(xy[1]))), (((-cos(xy[0]))*sin(xy[1]))), 0.0)), taylorGreenVelocity) + var factor = (cos((2.0*xy[0]))+cos((2.0*xy[1]))) + var pressure = (taylorGreenPressure+(((taylorGreenDensity*pow(taylorGreenVelocity, 2.0))/4.0)*factor)) + Fluid[c].pressure = pressure + Fluid[c].temperature = MIX.GetTFromRhoAndP(taylorGreenDensity, MixW, pressure) + end +end + +__demand(__cuda,__leaf) -- MANUALLY PARALLELIZED, +task Exports.InitializeTaylorGreen3D(Fluid : region(ispace(int3d), Fluid_columns), + Flow_initParams : double[5], + initMolarFracs : double[nSpec], mix : MIX.Mixture, + Grid_xBnum : int32, Grid_xNum : int32, Grid_xOrigin : double, Grid_xWidth : double, + Grid_yBnum : int32, Grid_yNum : int32, Grid_yOrigin : double, Grid_yWidth : double, + Grid_zBnum : int32, Grid_zNum : int32, Grid_zOrigin : double, Grid_zWidth : double) +where + reads(Fluid.centerCoordinates), + writes(Fluid.[Primitives]) +do + __demand(__openmp) + for c in Fluid do + var i = 0 + var taylorGreenPressure = Flow_initParams[i]; i+=1 + var taylorGreenTemperature = Flow_initParams[i]; i+=1 + var taylorGreenVelocity = Flow_initParams[i]; i+=1 + var taylorGreenMolarFracs = initMolarFracs + MIX.ClipYi(taylorGreenMolarFracs) + var MixW = MIX.GetMolarWeightFromXi(taylorGreenMolarFracs, mix) + var taylorGreenDensity = MIX.GetRho(taylorGreenPressure, taylorGreenTemperature, MixW, mix) + var xy = Fluid[c].centerCoordinates + Fluid[c].temperature = taylorGreenDensity + Fluid[c].MolarFracs = taylorGreenMolarFracs + Fluid[c].velocity = MACRO.vs_mul([double[3]](array(((sin(xy[0])*cos(xy[1]))*cos(xy[2])), (((-cos(xy[0]))*sin(xy[1]))*cos(xy[2])), 0.0)), taylorGreenVelocity) + var factorA = (cos((2.0*xy[2]))+2.0) + var factorB = (cos((2.0*xy[0]))+cos((2.0*xy[1]))) + var pressure = (taylorGreenPressure+((((taylorGreenDensity*pow(taylorGreenVelocity, 2.0))/16.0)*factorA)*factorB)) + Fluid[c].pressure = pressure + Fluid[c].temperature = MIX.GetTFromRhoAndP(taylorGreenDensity, MixW, pressure) + end +end + +__demand(__leaf) -- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +task Exports.InitializePerturbed(Fluid : region(ispace(int3d), Fluid_columns), + Flow_initParams : double[5], + initMolarFracs : double[nSpec]) +where + writes(Fluid.[Primitives]) +do + var rngState : C.drand48_data + C.srand48_r(C.legion_get_current_time_in_nanos(), &rngState) + for c in Fluid do + Fluid[c].MolarFracs = initMolarFracs + Fluid[c].pressure = Flow_initParams[0] + Fluid[c].temperature = Flow_initParams[1] + Fluid[c].velocity = array(Flow_initParams[2] + (MACRO.drand48_r(&rngState)-0.5)*10.0, + Flow_initParams[3] + (MACRO.drand48_r(&rngState)-0.5)*10.0, + Flow_initParams[4] + (MACRO.drand48_r(&rngState)-0.5)*10.0) + end +end + +-- Test 1 in Toro "Riemann Solvers and Numerical Methods for Fluid Dynamics" (2013) +__demand(__cuda,__leaf) -- MANUALLY PARALLELIZED, +task Exports.InitializeRiemannTestOne(Fluid : region(ispace(int3d), Fluid_columns), + initMolarFracs : double[nSpec], + mix : MIX.Mixture) +where + reads(Fluid.centerCoordinates), + writes(Fluid.[Primitives]) +do + __demand(__openmp) + for c in Fluid do + var x = Fluid[c].centerCoordinates[0] + Fluid[c].MolarFracs = initMolarFracs + if (x < 0.3) then + Fluid[c].velocity = array(0.75, 0.0, 0.0) + Fluid[c].pressure = 1.0 + Fluid[c].temperature = 1.0 + else + Fluid[c].velocity = array(0.0, 0.0, 0.0) + Fluid[c].pressure = 0.1 + Fluid[c].temperature = 0.8 + end + end +end + +-- Test 4 in Toro "Riemann Solvers and Numerical Methods for Fluid Dynamics" (2013) +__demand(__cuda,__leaf) -- MANUALLY PARALLELIZED, +task Exports.InitializeRiemannTestTwo(Fluid : region(ispace(int3d), Fluid_columns), + initMolarFracs : double[nSpec], + mix : MIX.Mixture) +where + reads(Fluid.centerCoordinates), + writes(Fluid.[Primitives]) +do + __demand(__openmp) + for c in Fluid do + var x = Fluid[c].centerCoordinates[0] + Fluid[c].MolarFracs = initMolarFracs + if (x < 0.4) then + Fluid[c].velocity = array(19.5975, 0.0, 0.0) + Fluid[c].pressure = 460.894 + Fluid[c].temperature = 76.8253978837 + else + Fluid[c].velocity = array(-6.19633, 0.0, 0.0) + Fluid[c].pressure = 46.0950 + Fluid[c].temperature = 7.6922178352 + end + end +end + +__demand(__cuda,__leaf) -- MANUALLY PARALLELIZED, +task Exports.InitializeSodProblem(Fluid : region(ispace(int3d), Fluid_columns), + initMolarFracs : double[nSpec], + mix : MIX.Mixture) +where + reads(Fluid.centerCoordinates), + writes(Fluid.[Primitives]) +do + __demand(__openmp) + for c in Fluid do + var x = Fluid[c].centerCoordinates[0] + Fluid[c].MolarFracs = initMolarFracs + if (x < 0.5) then + Fluid[c].velocity = array(0.0, 0.0, 0.0) + Fluid[c].pressure = 1.0 + Fluid[c].temperature = 1.0 + else + Fluid[c].velocity = array(0.0, 0.0, 0.0) + Fluid[c].pressure = 0.1 + Fluid[c].temperature = 0.8 + end + end +end + +__demand(__cuda,__leaf) -- MANUALLY PARALLELIZED, +task Exports.InitializeLaxProblem(Fluid : region(ispace(int3d), Fluid_columns), + initMolarFracs : double[nSpec], + mix : MIX.Mixture) +where + reads(Fluid.centerCoordinates), + writes(Fluid.[Primitives]) +do + __demand(__openmp) + for c in Fluid do + var x = Fluid[c].centerCoordinates[0] + Fluid[c].MolarFracs = initMolarFracs + if (x < 0.5) then + Fluid[c].velocity = array(0.698, 0.0, 0.0) + Fluid[c].pressure = 3.528 + Fluid[c].temperature = 7.92808988764 + else + Fluid[c].velocity = array(0.0, 0.0, 0.0) + Fluid[c].pressure = 0.5710 + Fluid[c].temperature = 1.142 + end + end +end + +__demand(__cuda,__leaf) -- MANUALLY PARALLELIZED, +task Exports.InitializeShuOsherProblem(Fluid : region(ispace(int3d), Fluid_columns), + initMolarFracs : double[nSpec], + mix : MIX.Mixture) +where + reads(Fluid.centerCoordinates), + writes(Fluid.[Primitives]) +do + __demand(__openmp) + for c in Fluid do + var x = Fluid[c].centerCoordinates[0] + Fluid[c].MolarFracs = initMolarFracs + if (x < 1.0) then + Fluid[c].velocity = array(2.629, 0.0, 0.0) + Fluid[c].pressure = 10.333 + Fluid[c].temperature = 2.67902514908 + else + Fluid[c].velocity = array(0.0, 0.0, 0.0) + Fluid[c].pressure = 1.0 + Fluid[c].temperature = 1.0/(1.0 + 0.2*sin(5*(x-5))) + end + end +end + +__demand(__cuda,__leaf) -- MANUALLY PARALLELIZED, +task Exports.InitializeVortexAdvection2D(Fluid : region(ispace(int3d), Fluid_columns), + Flow_initParams : double[5], + initMolarFracs : double[nSpec], + mix : MIX.Mixture) +where + reads(Fluid.centerCoordinates), + writes(Fluid.[Primitives]) +do + __demand(__openmp) + for c in Fluid do + var i = 0 + var VortexPressure = Flow_initParams[i]; i+=1 + var VortexTemperature = Flow_initParams[i]; i+=1 + var VortexXVelocity = Flow_initParams[i]; i+=1 + var VortexYVelocity = Flow_initParams[i]; i+=1 + var VortexMolarFracs = initMolarFracs + + var Beta = 5.0 + var x0 = 0.0 + var y0 = 0.0 + var xy = Fluid[c].centerCoordinates + var rx = xy[0] - x0 + var ry = xy[1] - y0 + var r2 = rx*rx + ry*ry + + var MixW = MIX.GetMolarWeightFromXi(VortexMolarFracs, mix) + var Yi = MIX.GetMassFractions(MixW, VortexMolarFracs, mix) + var gamma = MIX.GetGamma(VortexTemperature, MixW, Yi, mix) + VortexTemperature *= (1.0 - (gamma - 1.0)*Beta*Beta/(8*PI*PI*gamma)*exp(1.0 - r2)) + VortexPressure *= pow(VortexTemperature, gamma/(gamma - 1.0)) + + Fluid[c].pressure = VortexPressure + Fluid[c].temperature = VortexTemperature + Fluid[c].MolarFracs = VortexMolarFracs + Fluid[c].velocity = MACRO.vv_add(array((-Beta/(2.0*PI)*exp(0.5*(1.0 - r2))*(ry)), + ( Beta/(2.0*PI)*exp(0.5*(1.0 - r2))*(rx)), 0.0), + array(VortexXVelocity, VortexYVelocity, 0.0)) + end +end + +__demand(__cuda,__leaf) -- MANUALLY PARALLELIZED, +task Exports.InitializeGrossmanCinnellaProblem(Fluid : region(ispace(int3d), Fluid_columns), + mix : MIX.Mixture) +where + reads(Fluid.centerCoordinates), + writes(Fluid.[Primitives]) +do + -- Left-hand side mixture + var leftMix : SCHEMA.Mixture + leftMix.Species.length = 5 + C.snprintf([&int8](leftMix.Species.values[0].Name), 10, "N2") + leftMix.Species.values[0].MolarFrac = 1.279631e-02 + + C.snprintf([&int8](leftMix.Species.values[1].Name), 10, "O2") + leftMix.Species.values[1].MolarFrac = 3.695112e-06 + + C.snprintf([&int8](leftMix.Species.values[2].Name), 10, "NO") + leftMix.Species.values[2].MolarFrac = 2.694521e-04 + + C.snprintf([&int8](leftMix.Species.values[3].Name), 10, "N") + leftMix.Species.values[3].MolarFrac = 7.743854e-01 + + C.snprintf([&int8](leftMix.Species.values[4].Name), 10, "O") + leftMix.Species.values[4].MolarFrac = 2.125451e-01 + var LeftMolarFracs = CHEM.ParseConfigMixture(leftMix, mix) + + -- Right-hand side mixture + var rightMix : SCHEMA.Mixture + rightMix.Species.length = 2 + C.snprintf([&int8](rightMix.Species.values[0].Name), 10, "N2") + rightMix.Species.values[0].MolarFrac = 0.790000e+00 + + C.snprintf([&int8](rightMix.Species.values[1].Name), 10, "O2") + rightMix.Species.values[1].MolarFrac = 0.210000e+00 + var RightMolarFracs = CHEM.ParseConfigMixture(rightMix, mix) + + __demand(__openmp) + for c in Fluid do + var x = Fluid[c].centerCoordinates[0] + if (x < 0.5) then + Fluid[c].MolarFracs = LeftMolarFracs + Fluid[c].velocity = array(0.0, 0.0, 0.0) + Fluid[c].pressure = 1.95256e5 + Fluid[c].temperature = 9000.0 + else + Fluid[c].MolarFracs = RightMolarFracs + Fluid[c].velocity = array(0.0, 0.0, 0.0) + Fluid[c].pressure = 1.0e4 + Fluid[c].temperature = 300.0 + end + end +end + +__demand(__leaf) -- MANUALLY PARALLELIZED, NO CUDA, NO OPENMP +task Exports.InitializeChannelFlow(Fluid : region(ispace(int3d), Fluid_columns), + Flow_initParams : double[5], + initMolarFracs : double[nSpec], + mix : MIX.Mixture, + Grid_xBnum : int32, Grid_xNum : int32, Grid_xOrigin : double, Grid_xWidth : double, + Grid_yBnum : int32, Grid_yNum : int32, Grid_yOrigin : double, Grid_yWidth : double, + Grid_zBnum : int32, Grid_zNum : int32, Grid_zOrigin : double, Grid_zWidth : double) +where + reads(Fluid.centerCoordinates), + writes(Fluid.[Primitives]) +do + -- Initializes the channel with a streamwise velocity profile ~y^4 + -- streaks and random noise are used for the spanwise and wall-normal directions + -- the fluid composition is uniform + var i = 0 + var bulkPressure = Flow_initParams[i]; i+=1 + var bulkTemperature = Flow_initParams[i]; i+=1 + var bulkVelocity = Flow_initParams[i]; i+=1 + var StreaksIntensity = Flow_initParams[i]; i+=1 + var RandomIntensity = Flow_initParams[i]; i+=1 + + MIX.ClipYi(initMolarFracs) + + var rngState : C.drand48_data + C.srand48_r(C.legion_get_current_time_in_nanos(), &rngState) + + for c in Fluid do + Fluid[c].pressure = bulkPressure + Fluid[c].temperature = bulkTemperature + Fluid[c].MolarFracs = initMolarFracs + var xyz = Fluid[c].centerCoordinates + -- normalize wall-normal and spanwise coordinates + xyz[1] = (xyz[1] - Grid_yOrigin - Grid_yWidth*0.5)*2.0/Grid_yWidth + xyz[2] = (xyz[2] - Grid_zOrigin )*2.0/Grid_zWidth*PI + + var velocity = array (0.0, 0.0, 0.0) + -- define an offset from the walls for the streaks + var off = 0.05 + if xyz[1] > 0.0 then off *= -1.0 end + + velocity[0] = 1.25*bulkVelocity*(1.0 - pow(xyz[1], 4)) + velocity[1] = StreaksIntensity*1.25*bulkVelocity*4.0*0.9*sin(2.0*xyz[2])/ + (cosh(0.9*(xyz[1] + off))*(0.9*0.9*pow(cos(2.0*xyz[2]), 2)/pow(cosh(0.9*(xyz[1] + off)), 2) - 1.0)) + velocity[2] = StreaksIntensity*1.25*bulkVelocity*2.0*0.9*0.9*sinh(0.9*(xyz[1] + off))*cos(2.0*xyz[2])/ + (pow(cosh(0.9*(xyz[1] + off)), 2)*(0.9*0.9*pow(cos(2.0 * xyz[2]), 2)/pow(cosh(0.9 * (xyz[1] + off)), 2) - 1.0)) + -- add the random noise (%5 of uBulk) + velocity[1] += RandomIntensity*bulkVelocity*(MACRO.drand48_r(&rngState)-0.5) + velocity[2] += RandomIntensity*bulkVelocity*(MACRO.drand48_r(&rngState)-0.5) + Fluid[c].velocity = velocity + end +end + +return Exports end + diff --git a/src/prometeo_macro.rg b/src/prometeo_macro.rg new file mode 100644 index 0000000..58c0eec --- /dev/null +++ b/src/prometeo_macro.rg @@ -0,0 +1,128 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- + +local C = regentlib.c + +------------------------------------------------------------------------------- +-- MACROS +------------------------------------------------------------------------------- + +__demand(__inline) +task Exports.is_xNegGhost(c : int3d, Grid_xBnum : int) + return c.x < Grid_xBnum +end + +__demand(__inline) +task Exports.is_yNegGhost(c : int3d, Grid_yBnum : int) + return c.y < Grid_yBnum +end + +__demand(__inline) +task Exports.is_zNegGhost(c : int3d, Grid_zBnum : int) + return c.z < Grid_zBnum +end + +__demand(__inline) +task Exports.is_xPosGhost(c : int3d, Grid_xBnum : int, Grid_xNum : int) + return c.x >= Grid_xNum + Grid_xBnum +end + +__demand(__inline) +task Exports.is_yPosGhost(c : int3d, Grid_yBnum : int, Grid_yNum : int) + return c.y >= Grid_yNum + Grid_yBnum +end + +__demand(__inline) +task Exports.is_zPosGhost(c : int3d, Grid_zBnum : int, Grid_zNum : int) + return c.z >= Grid_zNum + Grid_zBnum +end + +__demand(__inline) +task Exports.in_interior(c : int3d, + Grid_xBnum : int, Grid_xNum : int, + Grid_yBnum : int, Grid_yNum : int, + Grid_zBnum : int, Grid_zNum : int) + return + Grid_xBnum <= c.x and c.x < Grid_xNum + Grid_xBnum and + Grid_yBnum <= c.y and c.y < Grid_yNum + Grid_yBnum and + Grid_zBnum <= c.z and c.z < Grid_zNum + Grid_zBnum +end + +__demand(__inline) +task Exports.drand48_r(rngState : &C.drand48_data) + var res : double + C.drand48_r(rngState, &res) + return res +end + +__demand(__inline) +task Exports.vs_mul(a : double[3], b : double) + return array(a[0] * b, a[1] * b, a[2] * b) +end + +__demand(__inline) +task Exports.vs_div(a : double[3], b : double) + return array(a[0] / b, a[1] / b, a[2] / b) +end + +__demand(__inline) +task Exports.dot(a : double[3], b : double[3]) + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] +end + +__demand(__inline) +task Exports.vv_add(a : double[3], b : double[3]) + return array(a[0] + b[0], a[1] + b[1], a[2] + b[2]) +end + +__demand(__inline) +task Exports.vv_sub(a : double[3], b : double[3]) + return array(a[0] - b[0], a[1] - b[1], a[2] - b[2]) +end + +__demand(__inline) +task Exports.vv_mul(a : double[3], b : double[3]) + return array(a[0] * b[0], a[1] * b[1], a[2] * b[2]) +end + +__demand(__inline) +task Exports.vv_div(a : double[3], b : double[3]) + return array(a[0] / b[0], a[1] / b[1], a[2] / b[2]) +end + +return Exports + diff --git a/src/prometeo_mapper.cc b/src/prometeo_mapper.cc new file mode 100644 index 0000000..4781db9 --- /dev/null +++ b/src/prometeo_mapper.cc @@ -0,0 +1,878 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mappers/default_mapper.h" +#include "realm/logging.h" + +#include "config_schema.h" +#include "prometeo_mapper.h" + +using namespace Legion; +using namespace Legion::Mapping; + +//============================================================================= +// DOCUMENTATION +//============================================================================= + +// Assume we're running 2 CPU-only samples, A and B, tiled as follows: +// tiles(A) = [1,2,1], tilesPerRank(A) = [1,1,1] +// tiles(B) = [6,1,1], tilesPerRank(B) = [3,1,1] +// Based on this configuration, we calculate the following: +// #shards(A) = 2, #splintersPerShard(A) = 1 +// #shards(B) = 2, #splintersPerShard(B) = 3 +// Each shard is placed on a separate rank in row-major order, so we will need +// 4 ranks in total. The splinters within each shard are allocated in +// round-robin, row-major order to the processors on the corresponding rank +// (some processors may receive more than 1 splinter). Assume each rank has 2 +// CPU processors. Then the mapping will be as follows: +// Sample Tile -> Shard Splinter -> Rank CPU +// -------------------------------------------- +// A [0,0,0] -> 0 0 -> 0 0 +// -------------------------------------------- +// A [0,1,0] -> 1 0 -> 1 0 +// -------------------------------------------- +// B [0,0,0] -> 0 0 -> 2 0 +// B [1,0,0] -> 0 1 -> 2 1 +// B [2,0,0] -> 0 2 -> 2 0 +// -------------------------------------------- +// B [3,0,0] -> 1 0 -> 3 0 +// B [4,0,0] -> 1 1 -> 3 1 +// B [5,0,0] -> 1 2 -> 3 0 + +//============================================================================= +// HELPER CODE +//============================================================================= + +static Realm::Logger LOG("prometeo_mapper"); + +#define CHECK(cond, ...) \ + do { \ + if (!(cond)) { \ + LOG.error(__VA_ARGS__); \ + exit(1); \ + } \ + } while(0) + +#define EQUALS(s1, s2) (strcmp((s1), (s2)) == 0) + +#define STARTS_WITH(str, prefix) \ + (strncmp((str), (prefix), sizeof(prefix) - 1) == 0) + +static const void* first_arg(const Task& task) { + const char* ptr = static_cast(task.args); + // Skip over Regent-added arguments. + // XXX: This assumes Regent's calling convention won't change. + return static_cast(ptr + sizeof(uint64_t)); +} + +//============================================================================= +// INTRA-SAMPLE MAPPING +//============================================================================= + +typedef unsigned SplinterID; + +class SampleMapping; + +class SplinteringFunctor : public ShardingFunctor { +private: + static ShardingID NEXT_ID; +public: + SplinteringFunctor(Runtime* rt, SampleMapping& parent) + : id(NEXT_ID++), parent_(parent) { + rt->register_sharding_functor(id, this, true); + } +public: + AddressSpace get_rank(const DomainPoint &point); + virtual SplinterID splinter(const DomainPoint &point) = 0; +public: + const ShardingID id; +protected: + SampleMapping& parent_; +}; + +ShardingID SplinteringFunctor::NEXT_ID = 12345; + +class SampleMapping { +public: + class Tiling3DFunctor; + class Tiling2DFunctor; + class HardcodedFunctor; + +public: + SampleMapping(Runtime* rt, const Config& config, AddressSpace first_rank) + : tiles_per_rank_{static_cast(config.Mapping.tilesPerRank[0]), + static_cast(config.Mapping.tilesPerRank[1]), + static_cast(config.Mapping.tilesPerRank[2])}, + ranks_per_dim_{ static_cast(config.Mapping.tiles[0] + / config.Mapping.tilesPerRank[0]), + static_cast(config.Mapping.tiles[1] + / config.Mapping.tilesPerRank[1]), + static_cast(config.Mapping.tiles[2] + / config.Mapping.tilesPerRank[2])}, + first_rank_(first_rank), + tiling_3d_functor_(new Tiling3DFunctor(rt, *this)), + tiling_2d_functors_{{new Tiling2DFunctor(rt, *this, 0, false), + new Tiling2DFunctor(rt, *this, 0, true )}, + {new Tiling2DFunctor(rt, *this, 1, false), + new Tiling2DFunctor(rt, *this, 1, true )}, + {new Tiling2DFunctor(rt, *this, 2, false), + new Tiling2DFunctor(rt, *this, 2, true )}} { + for (unsigned x = 0; x < x_tiles(); ++x) { + for (unsigned y = 0; y < y_tiles(); ++y) { + for (unsigned z = 0; z < z_tiles(); ++z) { + hardcoded_functors_.push_back(new HardcodedFunctor(rt, *this, Point<3>(x,y,z))); + } + } + } + } + + SampleMapping(const SampleMapping& rhs) = delete; + SampleMapping& operator=(const SampleMapping& rhs) = delete; + +public: + AddressSpace get_rank(ShardID shard_id) const { + return first_rank_ + shard_id; + } + + unsigned num_ranks() const { + return ranks_per_dim_[0] * ranks_per_dim_[1] * ranks_per_dim_[2]; + } + + unsigned x_tiles() const { + return tiles_per_rank_[0] * ranks_per_dim_[0]; + } + + unsigned y_tiles() const { + return tiles_per_rank_[1] * ranks_per_dim_[1]; + } + + unsigned z_tiles() const { + return tiles_per_rank_[2] * ranks_per_dim_[2]; + } + + unsigned num_tiles() const { + return x_tiles() * y_tiles() * z_tiles(); + } + + Tiling3DFunctor* tiling_3d_functor() { + return tiling_3d_functor_; + } + + Tiling2DFunctor* tiling_2d_functor(int dim, bool dir) { + assert(0 <= dim && dim < 3); + return tiling_2d_functors_[dim][dir]; + } + + HardcodedFunctor* hardcoded_functor(const DomainPoint& tile) { + assert(tile.get_dim() == 3); + assert(0 <= tile[0] && tile[0] < x_tiles()); + assert(0 <= tile[1] && tile[1] < y_tiles()); + assert(0 <= tile[2] && tile[2] < z_tiles()); + return hardcoded_functors_[tile[0] * y_tiles() * z_tiles() + + tile[1] * z_tiles() + + tile[2]]; + } + +public: + // Maps tasks in a 3D index space launch according to the default tiling + // logic (see description above). + class Tiling3DFunctor : public SplinteringFunctor { + public: + Tiling3DFunctor(Runtime* rt, SampleMapping& parent) + : SplinteringFunctor(rt, parent) {} + public: + virtual ShardID shard(const DomainPoint& point, + const Domain& full_space, + const size_t total_shards) { + assert(point.get_dim() == 3); + CHECK(0 <= point[0] && point[0] < parent_.x_tiles() && + 0 <= point[1] && point[1] < parent_.y_tiles() && + 0 <= point[2] && point[2] < parent_.z_tiles(), + "Unexpected point on index space launch"); + return (point[0] / parent_.tiles_per_rank_[0]) * parent_.ranks_per_dim_[1] + * parent_.ranks_per_dim_[2] + + (point[1] / parent_.tiles_per_rank_[1]) * parent_.ranks_per_dim_[2] + + (point[2] / parent_.tiles_per_rank_[2]); + } + + virtual SplinterID splinter(const DomainPoint &point) { + assert(point.get_dim() == 3); + CHECK(0 <= point[0] && point[0] < parent_.x_tiles() && + 0 <= point[1] && point[1] < parent_.y_tiles() && + 0 <= point[2] && point[2] < parent_.z_tiles(), + "Unexpected point on index space launch"); + return (point[0] % parent_.tiles_per_rank_[0]) * parent_.tiles_per_rank_[1] + * parent_.tiles_per_rank_[2] + + (point[1] % parent_.tiles_per_rank_[1]) * parent_.tiles_per_rank_[2] + + (point[2] % parent_.tiles_per_rank_[2]); + } + }; + + // Maps tasks in a 2D index space launch, by extending each domain point to a + // 3D tile and deferring to the default strategy. + // Parameter `dim` controls which dimension to add. + // Parameter `dir` controls which extreme of that dimension to set. + class Tiling2DFunctor : public SplinteringFunctor { + public: + Tiling2DFunctor(Runtime* rt, SampleMapping& parent, + unsigned dim, bool dir) + : SplinteringFunctor(rt, parent), dim_(dim), dir_(dir) {} + + public: + virtual ShardID shard(const DomainPoint& point, + const Domain& full_space, + const size_t total_shards) { + return parent_.tiling_3d_functor_->shard + (to_point_3d(point), full_space, total_shards); + } + + virtual SplinterID splinter(const DomainPoint &point) { + return parent_.tiling_3d_functor_->splinter(to_point_3d(point)); + } + + private: + DomainPoint to_point_3d(const DomainPoint& point) const { + assert(point.get_dim() == 2); + unsigned coord = + (dim_ == 0) ? (dir_ ? 0 : parent_.x_tiles()-1) : + (dim_ == 1) ? (dir_ ? 0 : parent_.y_tiles()-1) : + /*dim_ == 2*/ (dir_ ? 0 : parent_.z_tiles()-1) ; + return + (dim_ == 0) ? Point<3>(coord, point[0], point[1]) : + (dim_ == 1) ? Point<3>(point[0], coord, point[1]) : + /*dim_ == 2*/ Point<3>(point[0], point[1], coord) ; + } + + private: + unsigned dim_; + bool dir_; + }; + + // Maps every task to the same shard & splinter (the ones corresponding to + // the tile specified in the constructor). + class HardcodedFunctor : public SplinteringFunctor { + public: + HardcodedFunctor(Runtime* rt, + SampleMapping& parent, + const DomainPoint& tile) + : SplinteringFunctor(rt, parent), tile_(tile) {} + public: + virtual ShardID shard(const DomainPoint& point, + const Domain& full_space, + const size_t total_shards) { + return parent_.tiling_3d_functor_->shard(tile_, full_space, total_shards); + } + + virtual SplinterID splinter(const DomainPoint &point) { + return parent_.tiling_3d_functor_->splinter(tile_); + } + private: + DomainPoint tile_; + }; + +private: + unsigned tiles_per_rank_[3]; + unsigned ranks_per_dim_[3]; + AddressSpace first_rank_; + Tiling3DFunctor* tiling_3d_functor_; + Tiling2DFunctor* tiling_2d_functors_[3][2]; + std::vector hardcoded_functors_; +}; + +AddressSpace SplinteringFunctor::get_rank(const DomainPoint &point) { + return parent_.get_rank(shard(point, Domain(), 0)); +} + +//============================================================================= +// MAPPER CLASS: CONSTRUCTOR +//============================================================================= + +class PrometeoMapper : public DefaultMapper { +public: + PrometeoMapper(Runtime* rt, Machine machine, Processor local) + : DefaultMapper(rt->get_mapper_runtime(), machine, local, "prometeo_mapper"), + all_procs_(remote_cpus.size()) { + + // Set the umask of the process to clear S_IWGRP and S_IWOTH. + umask(022); + // Assign ranks sequentially to samples, each sample getting one rank for + // each super-tile. + AddressSpace reqd_ranks = 0; + auto process_config = [&](const Config& config) { + CHECK(config.Mapping.tiles[0] > 0 && + config.Mapping.tiles[1] > 0 && + config.Mapping.tiles[2] > 0 && + config.Mapping.tilesPerRank[0] > 0 && + config.Mapping.tilesPerRank[1] > 0 && + config.Mapping.tilesPerRank[2] > 0 && + config.Mapping.tiles[0] % config.Mapping.tilesPerRank[0] == 0 && + config.Mapping.tiles[1] % config.Mapping.tilesPerRank[1] == 0 && + config.Mapping.tiles[2] % config.Mapping.tilesPerRank[2] == 0, + "Invalid tiling for sample %lu", sample_mappings_.size() + 1); + sample_mappings_.emplace_back(rt, config, reqd_ranks); + }; + // Locate all config files specified on the command-line arguments. + InputArgs args = Runtime::get_input_args(); + for (int i = 0; i < args.argc; ++i) { + if (EQUALS(args.argv[i], "-i") && i < args.argc-1) { + Config config; + parse_Config(&config, args.argv[i+1]); + process_config(config); + reqd_ranks += sample_mappings_.back().num_ranks(); + } + } + // Verify that we have enough ranks. + unsigned supplied_ranks = remote_cpus.size(); + CHECK(reqd_ranks <= supplied_ranks, + "%u rank(s) required, but %u rank(s) supplied to Legion", + reqd_ranks, supplied_ranks); + if (reqd_ranks < supplied_ranks) { + LOG.warning() << supplied_ranks << " rank(s) supplied to Legion," + << " but only " << reqd_ranks << " required"; + } + // Cache processor information. + Machine::ProcessorQuery query(machine); + for (auto it = query.begin(); it != query.end(); it++) { + AddressSpace rank = it->address_space(); + Processor::Kind kind = it->kind(); + get_procs(rank, kind).push_back(*it); + } + // Verify machine configuration. + for (AddressSpace rank = 0; rank < remote_cpus.size(); ++rank) { + CHECK(get_procs(rank, Processor::IO_PROC).size() > 0, + "No IO processor on rank %u", rank); + } + } + +//============================================================================= +// MAPPER CLASS: MAPPING LOGIC +//============================================================================= + +private: + std::vector find_sample_ids(const MapperContext ctx, + const Task& task) const { + std::vector sample_ids; + // Tasks called on regions: read the SAMPLE_ID_TAG from the region + if (task.is_index_space || + EQUALS(task.get_task_name(), "Exports.DummyAverages") || + EQUALS(task.get_task_name(), "ReduceAverages") || + EQUALS(task.get_task_name(), "cache_grid_translation") || + STARTS_WITH(task.get_task_name(), "readTileAttr")) { + + CHECK(!task.regions.empty(), + "Expected region argument in call to %s", task.get_task_name()); + const RegionRequirement& req = task.regions[0]; + LogicalRegion region = req.region.exists() ? req.region + : runtime->get_parent_logical_region(ctx, req.partition); + region = get_root(ctx, region); + const void* info = NULL; + size_t info_size = 0; + bool success = runtime->retrieve_semantic_information + (ctx, region, SAMPLE_ID_TAG, info, info_size, + false/*can_fail*/, true/*wait_until_ready*/); + CHECK(success, "Missing SAMPLE_ID_TAG semantic information on region"); + assert(info_size == sizeof(unsigned)); + sample_ids.push_back(*static_cast(info)); + } + // Tasks with Config as 1st argument: read config.Mapping.sampleId + else if (EQUALS(task.get_task_name(), "workSingle")) { + const Config* config = static_cast(first_arg(task)); + sample_ids.push_back(static_cast(config->Mapping.sampleId)); + } + // Helper & I/O tasks: go up one level to the work task + else if (STARTS_WITH(task.get_task_name(), "Exports.Console_Write") || + STARTS_WITH(task.get_task_name(), "Exports.Probe_Write") || + EQUALS(task.get_task_name(), "Exports.createDir") || + EQUALS(task.get_task_name(), "__dummy") || + STARTS_WITH(task.get_task_name(), "__unary_") || + STARTS_WITH(task.get_task_name(), "__binary_") || + STARTS_WITH(task.get_task_name(), "AffineTransform")) { + assert(task.parent_task != NULL); + sample_ids = find_sample_ids(ctx, *(task.parent_task)); + } + // Other tasks: fail and notify the user + else { + CHECK(false, "Unhandled task in find_sample_ids: %s", + task.get_task_name()); + } + // Sanity checks + assert(!sample_ids.empty()); + for (unsigned sample_id : sample_ids) { + assert(sample_id < sample_mappings_.size()); + } + return sample_ids; + } + + unsigned find_sample_id(const MapperContext ctx, const Task& task) const { + return find_sample_ids(ctx, task)[0]; + } + + DomainPoint find_tile(const MapperContext ctx, + const Task& task) const { + // 3D index space tasks that are launched individually + if (STARTS_WITH(task.get_task_name(), "readTileAttr")) { + assert(!task.regions.empty() && task.regions[0].region.exists()); + DomainPoint tile = + runtime->get_logical_region_color_point(ctx, task.regions[0].region); + return tile; + } + // Tasks that should run on the first rank of their sample's allocation + else if (EQUALS(task.get_task_name(), "workSingle") || + EQUALS(task.get_task_name(), "workDual") || + EQUALS(task.get_task_name(), "cache_grid_translation") || + STARTS_WITH(task.get_task_name(), "Exports.Console_Write") || + STARTS_WITH(task.get_task_name(), "Exports.Probe_Write") || + EQUALS(task.get_task_name(), "Exports.createDir") || + EQUALS(task.get_task_name(), "__dummy") || + EQUALS(task.get_task_name(), "Exports.DummyAverages") || + EQUALS(task.get_task_name(), "ReduceAverages") || + STARTS_WITH(task.get_task_name(), "__unary_") || + STARTS_WITH(task.get_task_name(), "__binary_") || + STARTS_WITH(task.get_task_name(), "AffineTransform")) { + return Point<3>(0,0,0); + } + // Other tasks: fail and notify the user + else { + CHECK(false, "Unhandled task in find_tile: %s", task.get_task_name()); + return Point<3>(0,0,0); + } + } + + SplinteringFunctor* pick_functor(const MapperContext ctx, + const Task& task) { + // 3D index space tasks + if (task.is_index_space && task.index_domain.get_dim() == 3) { + unsigned sample_id = find_sample_id(ctx, task); + SampleMapping& mapping = sample_mappings_[sample_id]; + return mapping.tiling_3d_functor(); + } + // 2D index space tasks + else if (task.is_index_space && task.index_domain.get_dim() == 2) { + unsigned sample_id = find_sample_id(ctx, task); + SampleMapping& mapping = sample_mappings_[sample_id]; + // IO of 2D partitioned regions + if (STARTS_WITH(task.get_task_name(), "dumpTile") || + STARTS_WITH(task.get_task_name(), "loadTile") || + STARTS_WITH(task.get_task_name(), "writeTileAttr")) { + return mapping.hardcoded_functor(Point<3>(0,0,0)); + } else { + CHECK(false, "Unexpected 2D domain on index space launch of task %s", + task.get_task_name()); + return NULL; + } + } + // Sample-specific tasks that are launched individually + else if (EQUALS(task.get_task_name(), "workSingle") || + EQUALS(task.get_task_name(), "workDual") || + EQUALS(task.get_task_name(), "Exports.DummyAverages") || + EQUALS(task.get_task_name(), "ReduceAverages") || + EQUALS(task.get_task_name(), "cache_grid_translation") || + STARTS_WITH(task.get_task_name(), "Exports.Console_Write") || + STARTS_WITH(task.get_task_name(), "Exports.Probe_Write") || + EQUALS(task.get_task_name(), "Exports.createDir") || + EQUALS(task.get_task_name(), "__dummy") || + STARTS_WITH(task.get_task_name(), "__unary_") || + STARTS_WITH(task.get_task_name(), "__binary_") || + STARTS_WITH(task.get_task_name(), "readTileAttr") || + STARTS_WITH(task.get_task_name(), "AffineTransform")) { + unsigned sample_id = find_sample_id(ctx, task); + SampleMapping& mapping = sample_mappings_[sample_id]; + DomainPoint tile = find_tile(ctx, task); + return mapping.hardcoded_functor(tile); + } + // Other tasks: fail and notify the user + else { + CHECK(false, "Unhandled task in pick_functor: %s", task.get_task_name()); + return NULL; + } + } + +//============================================================================= +// MAPPER CLASS: MAJOR OVERRIDES +//============================================================================= + +public: + // Control-replicate work tasks. + virtual void select_task_options(const MapperContext ctx, + const Task& task, + TaskOptions& output) { + DefaultMapper::select_task_options(ctx, task, output); + output.replicate = + EQUALS(task.get_task_name(), "workSingle") || + EQUALS(task.get_task_name(), "workDual"); + } + + virtual void default_policy_rank_processor_kinds(MapperContext ctx, + const Task& task, + std::vector& ranking) { + // Work tasks: map to IO processors, so they don't get blocked by tiny + // CPU tasks. + if (EQUALS(task.get_task_name(), "workSingle") || + EQUALS(task.get_task_name(), "workDual")) { + ranking.push_back(Processor::IO_PROC); + } + // Other tasks: defer to the default mapping policy + else { + DefaultMapper::default_policy_rank_processor_kinds(ctx, task, ranking); + } + } + +#ifndef NO_LEGION_CONTROL_REPLICATION + // Replicate each work task over all ranks assigned to the corresponding + // sample(s). + virtual void map_replicate_task(const MapperContext ctx, + const Task& task, + const MapTaskInput& input, + const MapTaskOutput& default_output, + MapReplicateTaskOutput& output) { + // Read configuration. + assert(!runtime->is_MPI_interop_configured(ctx)); + assert(EQUALS(task.get_task_name(), "workSingle") || + EQUALS(task.get_task_name(), "workDual")); + VariantInfo info = + default_find_preferred_variant(task, ctx, false/*needs_tight_bound*/); + CHECK(task.regions.empty() && info.is_replicable, + "Unexpected features on work task"); + std::vector sample_ids = find_sample_ids(ctx, task); + // Create a replicant on the first CPU processor of each sample's ranks. + for (unsigned sample_id : sample_ids) { + const SampleMapping& mapping = sample_mappings_[sample_id]; + for (ShardID shard_id = 0; shard_id < mapping.num_ranks(); ++shard_id) { + AddressSpace rank = mapping.get_rank(shard_id); + Processor target_proc = get_procs(rank, info.proc_kind)[0]; + output.task_mappings.push_back(default_output); + output.task_mappings.back().chosen_variant = info.variant; + output.task_mappings.back().target_procs.push_back(target_proc); + output.control_replication_map.push_back(target_proc); + } + } + } +#endif + + // NOTE: Will only run if Legion is compiled with dynamic control replication. + virtual void select_sharding_functor(const MapperContext ctx, + const Task& task, + const SelectShardingFunctorInput& input, + SelectShardingFunctorOutput& output) { + output.chosen_functor = pick_functor(ctx, task)->id; + } + + virtual Processor default_policy_select_initial_processor(MapperContext ctx, + const Task& task) { + // Index space tasks: defer to the default mapping policy; slice_task will + // eventually be called to do the mapping properly + if (task.is_index_space) { + return DefaultMapper::default_policy_select_initial_processor(ctx, task); + } + // Main task: defer to the default mapping policy + else if (EQUALS(task.get_task_name(), "main")) { + return DefaultMapper::default_policy_select_initial_processor(ctx, task); + } + // Other tasks + else { + unsigned sample_id = find_sample_id(ctx, task); + DomainPoint tile = find_tile(ctx, task); + VariantInfo info = default_find_preferred_variant(task, ctx, false/*needs_tight_bound*/); + SplinteringFunctor* functor = pick_functor(ctx, task); + Processor target_proc = select_proc(tile, info.proc_kind, functor); + LOG.debug() << "Sample " << sample_id + << ": Task " << task.get_task_name() + << ": Sequential launch" + << ": Tile " << tile + << ": Processor " << target_proc; + return target_proc; + } + } + + virtual void slice_task(const MapperContext ctx, + const Task& task, + const SliceTaskInput& input, + SliceTaskOutput& output) { + output.verify_correctness = false; + unsigned sample_id = find_sample_id(ctx, task); + VariantInfo info = default_find_preferred_variant(task, ctx, false/*needs_tight_bound*/); + SplinteringFunctor* functor = pick_functor(ctx, task); + for (Domain::DomainPointIterator it(input.domain); it; it++) { + Processor target_proc = select_proc(it.p, info.proc_kind, functor); + output.slices.emplace_back(Domain(it.p, it.p), target_proc, + false/*recurse*/, false/*stealable*/); + LOG.debug() << "Sample " << sample_id + << ": Task " << task.get_task_name() + << ": Index space launch" + << ": Tile " << it.p + << ": Processor " << target_proc; + } + } + + virtual TaskPriority default_policy_select_task_priority(MapperContext ctx, + const Task& task) { + // Unless handled specially below, all tasks have the same priority. + int priority = 0; + // Increase priority of tasks on the critical path of the fluid solve. + if (STARTS_WITH(task.get_task_name(), "Exports.GetVelocityGradients") || + STARTS_WITH(task.get_task_name(), "Exports.GetEulerFlux") || + STARTS_WITH(task.get_task_name(), "GetFlux") || + STARTS_WITH(task.get_task_name(), "UpdateUsingFlux") || + STARTS_WITH(task.get_task_name(), "CorrectUsingFlux") || + STARTS_WITH(task.get_task_name(), "UpdateVars") || + STARTS_WITH(task.get_task_name(), "Exports.UpdateChemistry")) { + priority = 1; + } + return priority; + } + + // Send each cross-section explicit copy to the first rank of the first + // section, to be mapped further. + // NOTE: Will only run if Legion is compiled with dynamic control replication. + virtual void select_sharding_functor(const MapperContext ctx, + const Copy& copy, + const SelectShardingFunctorInput& input, + SelectShardingFunctorOutput& output) { + CHECK(copy.parent_task != NULL && + EQUALS(copy.parent_task->get_task_name(), "workDual"), + "Unsupported: Sharded copy outside of workDual"); + unsigned sample_id = find_sample_id(ctx, *(copy.parent_task)); + SampleMapping& mapping = sample_mappings_[sample_id]; + output.chosen_functor = mapping.hardcoded_functor(Point<3>(0,0,0))->id; + } + + virtual void map_copy(const MapperContext ctx, + const Copy& copy, + const MapCopyInput& input, + MapCopyOutput& output) { + // For HDF copies, defer to the default mapping policy. + if (EQUALS(copy.parent_task->get_task_name(), "dumpTile") || + EQUALS(copy.parent_task->get_task_name(), "loadTile")) { + DefaultMapper::map_copy(ctx, copy, input, output); + return; + } + CHECK(false, "Unsupported: map_copy"); + } + + // Send each fill to the rank of its parent task. + virtual void select_sharding_functor(const MapperContext ctx, + const Fill& fill, + const SelectShardingFunctorInput& input, + SelectShardingFunctorOutput& output) { + output.chosen_functor = pick_functor(ctx, *(fill.parent_task))->id; + } + +//============================================================================= +// MAPPER CLASS: MINOR OVERRIDES +//============================================================================= + +public: + // TODO: Select appropriate memories for instances that will be communicated, + // (e.g. parallelizer-created ghost partitions), such as RDMA memory, + // zero-copy memory. + virtual Memory default_policy_select_target_memory(MapperContext ctx, + Processor target_proc, + const RegionRequirement& req) { + return DefaultMapper::default_policy_select_target_memory(ctx, target_proc, req); + } + + // Disable an optimization done by the default mapper (attempts to reuse an + // instance that covers a superset of the requested index space, by searching + // higher up the partition tree). + virtual LogicalRegion default_policy_select_instance_region(MapperContext ctx, + Memory target_memory, + const RegionRequirement& req, + const LayoutConstraintSet& constraints, + bool force_new_instances, + bool meets_constraints) { + + // A root region does not need any special care + if (!runtime->has_parent_logical_partition(ctx, req.region)) { + LOG.debug() << "Root region assigned to its own instance"; + return req.region; + } + + LogicalPartition parent_partition = runtime->get_parent_logical_partition(ctx, req.region); + const char *name = get_partition_name(ctx, parent_partition); + CHECK(name != NULL, "Found an unnamed partition"); + + if (EQUALS(name, "p_Interior") || + EQUALS(name, "p_Fluid_AllGhost") || + EQUALS(name, "p_x_divg") || + EQUALS(name, "p_y_divg") || + EQUALS(name, "p_z_divg") || + EQUALS(name, "p_solved") || + EQUALS(name, "p_x_faces") || + EQUALS(name, "p_y_faces") || + EQUALS(name, "p_z_faces")) { + DomainPoint tile = runtime->get_logical_region_color_point(ctx, req.region); + LOG.debug() << "Region " << name + << "[Tile " << tile << "] " + << "is mapped on corresponding instance of p_All"; + LogicalRegion root_region = get_root(ctx, req.region); + LogicalPartition primary_partition = get_primary_partition(ctx, root_region); + assert(primary_partition != LogicalPartition::NO_PART); + return runtime->get_logical_subregion_by_color(ctx, primary_partition, tile); + } + + LOG.debug() << "Region of " << name << " is mapped on its own instance"; + return req.region; + + } + + //-------------------------------------------------------------------------- + virtual void default_policy_select_sources(MapperContext ctx, + const PhysicalInstance &target, + const std::vector &sources, + std::deque &ranking) + //-------------------------------------------------------------------------- + { + // Let the default mapper sort the sources by bandwidth + DefaultMapper::default_policy_select_sources(ctx, target, sources, ranking); + + // Give priority to those with better overlapping + std::vector> + cover_ranking(sources.size()); + + Domain target_domain = target.get_instance_domain(); + for (std::deque::const_reverse_iterator it = ranking.rbegin(); + it != ranking.rend(); it++) + { + const unsigned idx = it - ranking.rbegin(); + const PhysicalInstance &source = (*it); + Domain source_domain = source.get_instance_domain(); + Domain intersection = source_domain.intersection(target_domain); + cover_ranking[idx] = std::pair(source,intersection.get_volume()); + } + + // Sort them by the size of intersecting area + std::stable_sort(cover_ranking.begin(), cover_ranking.end(), physical_sort_func); + + // Iterate from largest intersection, bandwidth to smallest + ranking.clear(); + for (std::vector>:: + const_reverse_iterator it = cover_ranking.rbegin(); + it != cover_ranking.rend(); it++) + ranking.push_back(it->first); + } + + // Disable an optimization done by the default mapper (extends the set of + // eligible processors to include all the processors of the same type on the + // target node). + virtual void default_policy_select_target_processors(MapperContext ctx, + const Task &task, + std::vector &target_procs) { + target_procs.push_back(task.target_proc); + } + + // Shouldn't have to shard any of the following operations. + virtual void select_sharding_functor(const MapperContext ctx, + const Close& close, + const SelectShardingFunctorInput& input, + SelectShardingFunctorOutput& output) { + CHECK(false, "Unsupported: Sharded Close"); + } + virtual void select_sharding_functor(const MapperContext ctx, + const Acquire& acquire, + const SelectShardingFunctorInput& input, + SelectShardingFunctorOutput& output) { + CHECK(false, "Unsupported: Sharded Acquire"); + } + virtual void select_sharding_functor(const MapperContext ctx, + const Release& release, + const SelectShardingFunctorInput& input, + SelectShardingFunctorOutput& output) { + CHECK(false, "Unsupported: Sharded Release"); + } + //virtual void select_sharding_functor(const MapperContext ctx, + // const Partition& partition, + // const SelectShardingFunctorInput& input, + // SelectShardingFunctorOutput& output) { + // CHECK(false, "Unsupported: Sharded Partition"); + //} + virtual void select_sharding_functor(const MapperContext ctx, + const MustEpoch& epoch, + const SelectShardingFunctorInput& input, + MustEpochShardingFunctorOutput& output) { + CHECK(false, "Unsupported: Sharded MustEpoch"); + } + +//============================================================================= +// MAPPER CLASS: HELPER METHODS +//============================================================================= + +private: + // NOTE: This function doesn't sanity check its input. + Processor select_proc(const DomainPoint& tile, + Processor::Kind kind, + SplinteringFunctor* functor) { + AddressSpace rank = functor->get_rank(tile); + const std::vector& procs = get_procs(rank, kind); + SplinterID splinter_id = functor->splinter(tile); + return procs[splinter_id % procs.size()]; + } + + std::vector& get_procs(AddressSpace rank, Processor::Kind kind) { + assert(rank < all_procs_.size()); + auto& rank_procs = all_procs_[rank]; + if (kind >= rank_procs.size()) { + rank_procs.resize(kind + 1); + } + return rank_procs[kind]; + } + + LogicalRegion get_root(const MapperContext ctx, LogicalRegion region) const { + while (runtime->has_parent_logical_partition(ctx, region)) { + region = runtime->get_parent_logical_region(ctx, + runtime->get_parent_logical_partition(ctx, region)); + } + return region; + } + + const char* get_partition_name(MapperContext ctx, + const LogicalPartition &lp) { + const void *name = NULL; + size_t size = 0; + runtime->retrieve_semantic_information(ctx, lp, NAME_SEMANTIC_TAG, name, size, true, false); + return (const char*)name; + } + + LogicalPartition get_primary_partition(MapperContext ctx, + const LogicalRegion ®ion) { + std::set colors; + runtime->get_index_space_partition_colors(ctx, region.get_index_space(), colors); + for (std::set::const_iterator it = colors.begin(); it != colors.end(); ++it) { + LogicalPartition lp = runtime->get_logical_partition_by_color(ctx, region, *it); + const char *name = get_partition_name(ctx, lp); + if (name != NULL && EQUALS(name, "p_All")) { + return lp; + } + } + return LogicalPartition::NO_PART; + } + +//============================================================================= +// MAPPER CLASS: MEMBER VARIABLES +//============================================================================= + +private: + std::deque sample_mappings_; + std::vector > > all_procs_; +}; + +//============================================================================= +// MAPPER REGISTRATION +//============================================================================= + +static void create_mappers(Machine machine, + Runtime* rt, + const std::set& local_procs) { + for (Processor proc : local_procs) { + rt->replace_default_mapper(new PrometeoMapper(rt, machine, proc), proc); + } +} + +void register_mappers() { + Runtime::add_registration_callback(create_mappers); +} diff --git a/src/prometeo_mapper.h b/src/prometeo_mapper.h new file mode 100644 index 0000000..38ddd27 --- /dev/null +++ b/src/prometeo_mapper.h @@ -0,0 +1,18 @@ +#ifndef __PROMETEO_MAPPER_H__ +#define __PROMETEO_MAPPER_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + SAMPLE_ID_TAG = 12345 +}; + +void register_mappers(); + +#ifdef __cplusplus +} +#endif + +#endif // __PROMETEO_MAPPER_H__ diff --git a/src/prometeo_metric.rg b/src/prometeo_metric.rg new file mode 100644 index 0000000..d2957c6 --- /dev/null +++ b/src/prometeo_metric.rg @@ -0,0 +1,1622 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA, Fluid_columns) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- + +local C = regentlib.c +local MATH = require "math_utils" +local MACRO = require "prometeo_macro" +local CONST = require "prometeo_const" + +-- Stencil indices +local Stencil1 = CONST.Stencil1 +local Stencil2 = CONST.Stencil2 +local Stencil3 = CONST.Stencil3 +local Stencil4 = CONST.Stencil4 +local nStencils = CONST.nStencils + +-- LU decomposition +local LUdec, ludcmp, lubksb = unpack(MATH.mkLUdec(nStencils)) + +------------------------------------------------------------------------------- +-- METRIC ROUTINES +------------------------------------------------------------------------------- + +-- dxm2: |-----------------------------------------| +-- dxm1: |---------------------------| +-- dx: |-------------| +-- dxp1: |-------------| +-- dxp2: |---------------------------| +-- dxp3: |-----------------------------------------| +-- c-2 c-1 c x=0 c+1 c+2 c+3 +-- |------x------|------x------|------x------|------x------|------x------|------x------| +-- +-- Plus reconstruction: +-- 1st: o-------------o-----> <-----o +-- 2nd: o-----> <-----o-------------o +-- 3rd: o-------------o-------------o-----> +-- 4th: o-----> <-----o-------------o-------------o +-- +-- Minus reconstruction: +-- 1st: o-----> <-----o-------------o +-- 2nd: o-------------o-----> <-----o +-- 3rd: <-----o-------------o-------------o +-- 4th: o-------------o-------------o-----> <-----o + +local __demand(__inline) +task GetReconstructionPlus(dxm3 : double, dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double, dxp3 : double) + -- Stencil 1 + var stencil1 = [MATH.mkReconCoeff(3)](array(dxm2, dxm1, 0.0, dxp1), 0.0) + -- Stencil 2 + var stencil2 = [MATH.mkReconCoeff(3)](array(dxm1, 0.0, dxp1, dxp2), 0.0) + -- Stencil 3 + var stencil3 = [MATH.mkReconCoeff(3)](array(dxm3, dxm2, dxm1, 0.0), 0.0) + -- Stencil 4 + var stencil4 = [MATH.mkReconCoeff(4)](array(dxm1, 0.0, dxp1, dxp2, dxp3), 0.0) + +-- Cell: c-2 c-1 c c+1 c+2 c+3 + return array( 0.0, stencil1[0], stencil1[1], stencil1[2], 0.0, 0.0, + 0.0, 0.0, stencil2[0], stencil2[1], stencil2[2], 0.0, + stencil3[0], stencil3[1], stencil3[2], 0.0, 0.0, 0.0, + 0.0, 0.0, stencil4[0], stencil4[1], stencil4[2], stencil4[3]) +end + +local __demand(__inline) +task GetReconstructionMinus(dxm3 : double, dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double, dxp3 : double) + -- Stencil 1 + var stencil1 = [MATH.mkReconCoeff(3)](array(dxm1, 0.0, dxp1, dxp2), 0.0) + -- Stencil 2 + var stencil2 = [MATH.mkReconCoeff(3)](array(dxm2, dxm1, 0.0, dxp1), 0.0) + -- Stencil 3 + var stencil3 = [MATH.mkReconCoeff(3)](array(0.0, dxp1, dxp2, dxp3), 0.0) + -- Stencil 4 + var stencil4 = [MATH.mkReconCoeff(4)](array(dxm3, dxm2, dxm1, 0.0, dxp1), 0.0) + +-- Cell: c-2 c-1 c c+1 c+2 c+3 + return array( 0.0, 0.0, stencil1[0], stencil1[1], stencil1[2], 0.0, + 0.0, stencil2[0], stencil2[1], stencil2[2], 0.0, 0.0, + 0.0, 0.0, 0.0, stencil3[0], stencil3[1], stencil3[2], + stencil4[0], stencil4[1], stencil4[2], stencil4[3], 0.0, 0.0) +end + +local __demand(__inline) +task GetTENOCoeffs(dxm3 : double, dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double, dxp3 : double, ReconCoeffs: double[nStencils*6]) + + -- Sixth order accurate stencil + var stencil6 = [MATH.mkReconCoeff(6)](array(dxm3, dxm2, dxm1, 0.0, dxp1, dxp2, dxp3), 0.0) + + var LU : LUdec + var b : double[nStencils] + for i=0, nStencils do + for j=0, nStencils do + LU.A[i*nStencils+j] = ReconCoeffs[j*6+i] + end + b[i] = stencil6[i] + end + LU = ludcmp(LU) + return lubksb(LU, b) + +end + +__demand(__parallel, __cuda, __leaf) +task Exports.InitializeMetric(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_bounds : rect3d, + Grid_xBnum : int32, Grid_xNum : int32, + Grid_yBnum : int32, Grid_yNum : int32, + Grid_zBnum : int32, Grid_zNum : int32) +where + reads(Fluid.centerCoordinates), + reads(Fluid.cellWidth), + writes(Fluid.{reconXFacePlus, reconXFaceMinus}), + writes(Fluid.{reconYFacePlus, reconYFaceMinus}), + writes(Fluid.{reconZFacePlus, reconZFaceMinus}), + writes(Fluid.{TENOCoeffsXPlus, TENOCoeffsXMinus}), + writes(Fluid.{TENOCoeffsYPlus, TENOCoeffsYMinus}), + writes(Fluid.{TENOCoeffsZPlus, TENOCoeffsZMinus}), + writes(Fluid.{BCStencilX, BCStencilY, BCStencilZ}), + writes(Fluid.{interpXFace, interpYFace, interpZFace}), + writes(Fluid.{ derivXFace, derivYFace, derivZFace}), + writes(Fluid.{ gradX, gradY, gradZ}) +do + __demand(__openmp) + for c in Fluid do + -- X direction + var cm2_x = (c+{-2, 0, 0}) % Fluid_bounds + var cm1_x = (c+{-1, 0, 0}) % Fluid_bounds + var cp1_x = (c+{ 1, 0, 0}) % Fluid_bounds + var cp2_x = (c+{ 2, 0, 0}) % Fluid_bounds + var cp3_x = (c+{ 3, 0, 0}) % Fluid_bounds + + -- Distance of the cell faces from the face c + var dxm3 = -Fluid[c ].cellWidth[0] - Fluid[cm1_x].cellWidth[0] - Fluid[cm2_x].cellWidth[0] + var dxm2 = -Fluid[c ].cellWidth[0] - Fluid[cm1_x].cellWidth[0] + var dxm1 = -Fluid[c ].cellWidth[0] + var dxp1 = Fluid[cp1_x].cellWidth[0] + var dxp2 = Fluid[cp1_x].cellWidth[0] + Fluid[cp2_x].cellWidth[0] + var dxp3 = Fluid[cp1_x].cellWidth[0] + Fluid[cp2_x].cellWidth[0] + Fluid[cp3_x].cellWidth[0] + + -- Face reconstruction operators + var reconFacePlus = GetReconstructionPlus( dxm3, dxm2, dxm1, dxp1, dxp2, dxp3) + var reconFaceMinus = GetReconstructionMinus(dxm3, dxm2, dxm1, dxp1, dxp2, dxp3) + Fluid[c].reconXFacePlus = reconFacePlus + Fluid[c].reconXFaceMinus = reconFaceMinus + + -- TENO blending coefficients + Fluid[c].TENOCoeffsXPlus = GetTENOCoeffs(dxm3, dxm2, dxm1, dxp1, dxp2, dxp3, reconFacePlus) + Fluid[c].TENOCoeffsXMinus = GetTENOCoeffs(dxm3, dxm2, dxm1, dxp1, dxp2, dxp3, reconFaceMinus) + + -- Flag as in internal point + Fluid[c].BCStencilX = false + + -- Face interpolation operator + var Inv2dx = 1.0/(Fluid[c].cellWidth[0] + Fluid[cp1_x].cellWidth[0]) + Fluid[c].interpXFace = array(Fluid[cp1_x].cellWidth[0]*Inv2dx, Fluid[c].cellWidth[0]*Inv2dx) + + -- Face derivative operator + Fluid[c].derivXFace = 2.0*Inv2dx + + -- Cell-center gradient operator + var Inv2dxm1 = 1.0/(Fluid[c].cellWidth[0] + Fluid[cm1_x].cellWidth[0]) + Fluid[c].gradX = array(Inv2dxm1, Inv2dx) + + -- Y direction + var cm2_y = (c+{0,-2, 0}) % Fluid_bounds + var cm1_y = (c+{0,-1, 0}) % Fluid_bounds + var cp1_y = (c+{0, 1, 0}) % Fluid_bounds + var cp2_y = (c+{0, 2, 0}) % Fluid_bounds + var cp3_y = (c+{0, 3, 0}) % Fluid_bounds + + -- Distance of the cell faces from the face c + var dym3 = -Fluid[c ].cellWidth[1] - Fluid[cm1_y].cellWidth[1] - Fluid[cm2_y].cellWidth[1] + var dym2 = -Fluid[c ].cellWidth[1] - Fluid[cm1_y].cellWidth[1] + var dym1 = -Fluid[c ].cellWidth[1] + var dyp1 = Fluid[cp1_y].cellWidth[1] + var dyp2 = Fluid[cp1_y].cellWidth[1] + Fluid[cp2_y].cellWidth[1] + var dyp3 = Fluid[cp1_y].cellWidth[1] + Fluid[cp2_y].cellWidth[1] + Fluid[cp3_y].cellWidth[1] + + -- Face reconstruction operators + reconFacePlus = GetReconstructionPlus( dym3, dym2, dym1, dyp1, dyp2, dyp3) + reconFaceMinus = GetReconstructionMinus(dym3, dym2, dym1, dyp1, dyp2, dyp3) + Fluid[c].reconYFacePlus = reconFacePlus + Fluid[c].reconYFaceMinus = reconFaceMinus + + -- TENO blending coefficients + Fluid[c].TENOCoeffsYPlus = GetTENOCoeffs(dym3, dym2, dym1, dyp1, dyp2, dyp3, reconFacePlus) + Fluid[c].TENOCoeffsYMinus = GetTENOCoeffs(dym3, dym2, dym1, dyp1, dyp2, dyp3, reconFaceMinus) + + -- Flag as in internal point + Fluid[c].BCStencilY = false + + -- Face interpolation operator + var Inv2dy = 1.0/(Fluid[c].cellWidth[1] + Fluid[cp1_y].cellWidth[1]) + Fluid[c].interpYFace = array(Fluid[cp1_y].cellWidth[1]*Inv2dy, Fluid[c].cellWidth[1]*Inv2dy) + + -- Face derivative operator + Fluid[c].derivYFace = 2.0*Inv2dy + + -- Cell-center gradient operator + var Inv2dym1 = 1.0/(Fluid[c].cellWidth[1] + Fluid[cm1_y].cellWidth[1]) + Fluid[c].gradY = array(Inv2dym1, Inv2dy) + + -- Z direction + var cm2_z = (c+{0, 0,-2}) % Fluid_bounds + var cm1_z = (c+{0, 0,-1}) % Fluid_bounds + var cp1_z = (c+{0, 0, 1}) % Fluid_bounds + var cp2_z = (c+{0, 0, 2}) % Fluid_bounds + var cp3_z = (c+{0, 0, 3}) % Fluid_bounds + + -- Distance of the cell faces from the face c + var dzm3 = -Fluid[c ].cellWidth[2] - Fluid[cm1_z].cellWidth[2] - Fluid[cm2_z].cellWidth[2] + var dzm2 = -Fluid[c ].cellWidth[2] - Fluid[cm1_z].cellWidth[2] + var dzm1 = -Fluid[c ].cellWidth[2] + var dzp1 = Fluid[cp1_z].cellWidth[2] + var dzp2 = Fluid[cp1_z].cellWidth[2] + Fluid[cp2_z].cellWidth[2] + var dzp3 = Fluid[cp1_z].cellWidth[2] + Fluid[cp2_z].cellWidth[2] + Fluid[cp3_z].cellWidth[2] + + -- Face reconstruction operators + reconFacePlus = GetReconstructionPlus( dzm3, dzm2, dzm1, dzp1, dzp2, dzp3) + reconFaceMinus = GetReconstructionMinus(dzm3, dzm2, dzm1, dzp1, dzp2, dzp3) + Fluid[c].reconZFacePlus = reconFacePlus + Fluid[c].reconZFaceMinus = reconFaceMinus + + -- TENO blending coefficients + Fluid[c].TENOCoeffsZPlus = GetTENOCoeffs(dzm3, dzm2, dzm1, dzp1, dzp2, dzp3, reconFacePlus) + Fluid[c].TENOCoeffsZMinus = GetTENOCoeffs(dzm3, dzm2, dzm1, dzp1, dzp2, dzp3, reconFaceMinus) + + -- Flag as in internal point + Fluid[c].BCStencilZ = false + + -- Face interpolation operator + var Inv2dz = 1.0/(Fluid[c].cellWidth[2] + Fluid[cp1_z].cellWidth[2]) + Fluid[c].interpZFace = array(Fluid[cp1_z].cellWidth[2]*Inv2dz, Fluid[c].cellWidth[2]*Inv2dz) + + -- Face derivative operator + Fluid[c].derivZFace = 2.0*Inv2dz + + -- Cell-center gradient operator + var Inv2dzm1 = 1.0/(Fluid[c].cellWidth[2] + Fluid[cm1_z].cellWidth[2]) + Fluid[c].gradZ = array(Inv2dzm1, Inv2dz) + end +end + +------------------------------------------------------------------------------- +-- STAGGERED LEFT BC +------------------------------------------------------------------------------- +-- These functions generate the tasks to correct the metric for a left boundary +-- where the ghost point is staggered on the cell face + +local mkCorrectMetricLeftStaggered = terralib.memoize(function(sdir) + local CorrectMetricLeftStaggered + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + local interp + local deriv + local grad + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + interp = "interpXFace" + deriv = "derivXFace" + grad = "gradX" + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + interp = "interpYFace" + deriv = "derivYFace" + grad = "gradY" + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + interp = "interpZFace" + deriv = "derivZFace" + grad = "gradZ" + end + + __demand(__inline) + task CorrectMetricLeftStaggered(Fluid : region(ispace(int3d), Fluid_columns), + c : int3d, cp1 : int3d) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]), + writes(Fluid.{[interp], [deriv], [grad]}) + do + -- Face reconstruction operators + -- Boundary node is staggered on the face so we do not need any reconstruction + Fluid[c].[reconPlus] = array(0.0, 0.0, 1.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, 0.0, 0.0) + Fluid[c].[reconMinus] = array(0.0, 0.0, 1.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, 0.0, 0.0) + + Fluid[c].[BCStencil] = true + + -- Face interpolation operator + -- The true value comes from the ghost cell + Fluid[c].[interp] = array(1.0, 0.0) + + -- Face derivative operator + var Inv2dx = 1.0/Fluid[cp1].cellWidth[dir] + Fluid[c].[deriv] = 2.0*Inv2dx + + -- Cell-center gradient operator + Fluid[c ].[grad] = array( 0.0, 2.0*Inv2dx) + end + return CorrectMetricLeftStaggered +end) + +-- dx: |-------------| +-- dxp1: |-------------| +-- dxp2: |---------------------------| +-- dxp3: |-----------------------------------------| +-- c-0.5 c x=0 c+1 c+2 c+3 +-- x------x------|------x------|------x------|------x------| +-- +-- Plus reconstruction: +-- 1st: o------o-----> <-----o +-- 2nd: o-----> <-----o-------------o +-- 3rd: does not exist +-- 4th: o-----> <-----o-------------o-------------o +-- +-- Minus reconstruction: +-- 1st: o-----> <-----o-------------o +-- 2nd: o------o-----> <-----o +-- 3rd: <-----o-------------o-------------o +-- 4th: does not exist + +local mkCorrectMetricLeftPlusOneStaggered = terralib.memoize(function(sdir) + local CorrectMetricLeftPlusOneStaggered + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + local grad + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + grad = "gradX" + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + grad = "gradY" + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + grad = "gradZ" + end + + local __demand(__inline) + task GetReconstructionPlus(dxm1 : double, dxp1 : double, dxp2 : double, dxp3 : double) + -- Stencil 1 + var stencil1 = [MATH.mkReconCoeffLeftBC(3)](array(dxm1, 0.0, dxp1) , 0.0) + -- Stencil 2 + var stencil2 = [MATH.mkReconCoeff(3)](array(dxm1, 0.0, dxp1, dxp2) , 0.0) + -- Stencil 3 + var stencil3 = [MATH.mkReconCoeffLeftBC(2)](array(dxm1, 0.0) , 0.0) + -- Stencil 4 + var stencil4 = [MATH.mkReconCoeff(4)](array(dxm1, 0.0, dxp1, dxp2, dxp3), 0.0) + + -- Cell: c-2 c-1/2 c c+1 c+2 c+3 + return array( 0.0, stencil1[0], stencil1[1], stencil1[2], 0.0, 0.0, + 0.0, 0.0, stencil2[0], stencil2[1], stencil2[2], 0.0, + 0.0, stencil3[0], stencil3[1], 0.0, 0.0, 0.0, + 0.0, 0.0, stencil4[0], stencil4[1], stencil4[2], stencil4[3]) + + end + + local __demand(__inline) + task GetReconstructionMinus(dxm1 : double, dxp1 : double, dxp2 : double, dxp3 : double) + -- Stencil 1 + var stencil1 = [MATH.mkReconCoeff(3)](array(dxm1, 0.0, dxp1, dxp2), 0.0) + -- Stencil 2 + var stencil2 = [MATH.mkReconCoeffLeftBC(3)](array(dxm1, 0.0, dxp1), 0.0) + -- Stencil 3 + var stencil3 = [MATH.mkReconCoeff(3)](array(0.0, dxp1, dxp2, dxp3), 0.0) + + -- Cell: c-2 c-1/2 c c+1 c+2 c+3 + return array( 0.0, 0.0, stencil1[0], stencil1[1], stencil1[2], 0.0, + 0.0, stencil2[0], stencil2[1], stencil2[2], 0.0, 0.0, + 0.0, 0.0, 0.0, stencil3[0], stencil3[1], stencil3[2], + 0.0, 0.0, 1.0, 0.0, 0.0, 0.0) + -- The last row is just to avoid a singular problem in the coefficient calculation + end + + local __demand(__inline) + task GetTENOCoeffs(dxm1 : double, dxp1 : double, dxp2 : double, dxp3 : double, ReconCoeffs: double[nStencils*6]) + + -- TENO coefficinets excluding the first cell + -- (Fifth order accurate) + var stencil = [MATH.mkReconCoeffLeftBC(5)](array(dxm1, 0.0, dxp1, dxp2, dxp3), 0.0) + + var LU : LUdec + var b : double[nStencils] + for i=0, nStencils do + for j=0, nStencils do + LU.A[i*nStencils+j] = ReconCoeffs[j*6+i+1] + end + b[i] = stencil[i] + end + LU = ludcmp(LU) + return lubksb(LU, b) + + end + + __demand(__inline) + task CorrectMetricLeftPlusOneStaggered(Fluid : region(ispace(int3d), Fluid_columns), + c : int3d, cp1 : int3d, cp2 : int3d, cp3 : int3d) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]), + writes(Fluid.{[grad]}) + do + -- Face reconstruction operators + var dxm1 = -Fluid[c ].cellWidth[dir] + var dxp1 = Fluid[cp1].cellWidth[dir] + var dxp2 = Fluid[cp1].cellWidth[dir] + Fluid[cp2].cellWidth[dir] + var dxp3 = Fluid[cp1].cellWidth[dir] + Fluid[cp2].cellWidth[dir] + Fluid[cp3].cellWidth[dir] + + Fluid[c].[reconPlus] = GetReconstructionPlus( dxm1, dxp1, dxp2, dxp3) + Fluid[c].[reconMinus] = GetReconstructionMinus(dxm1, dxp1, dxp2, dxp3) + Fluid[c].[TENOCoeffsPlus] = GetTENOCoeffs(dxm1, dxp1, dxp2, dxp3, Fluid[c].[reconPlus]) + Fluid[c].[TENOCoeffsMinus] = GetTENOCoeffs(dxm1, dxp1, dxp2, dxp3, Fluid[c].[reconMinus]) + + Fluid[c].[BCStencil] = true + + -- Cell-center gradient operator + var Inv2dx = 1.0/ Fluid[c].cellWidth[dir] + var Inv2dxp2 = 1.0/(Fluid[c].cellWidth[dir] + Fluid[cp1].cellWidth[dir]) + Fluid[c].[grad] = array( Inv2dx, Inv2dxp2) + end + return CorrectMetricLeftPlusOneStaggered +end) + +-- dxm1: |---------------------------| +-- dx: |-------------| +-- dxp1: |-------------| +-- dxp2: |---------------------------| +-- dxp3: |-----------------------------------------| +-- c-1.5 c-1 c x=0 c+1 c+2 c+3 +-- x------x------|------x------|------x------|------x------|------x------| +-- +-- Plus reconstruction: +-- 1st: o-------------o-----> <-----o +-- 2nd: o-----> <-----o-------------o +-- 3rd: o------o-------------o-----> +-- 4th: o-----> <-----o-------------o-------------o +-- +-- Minus reconstruction: +-- 1st: o-----> <-----o-------------o +-- 2nd: o-------------o-----> <-----o +-- 3rd: <-----o-------------o-------------o +-- 4th: o------o-------------o-----> <-----o + +local mkCorrectMetricLeftPlusTwoStaggered = terralib.memoize(function(sdir) + local CorrectMetricLeftPlusTwoStaggered + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + end + + local __demand(__inline) + task GetReconstructionPlus(dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double, dxp3 : double) + -- Stencil 1 + var stencil1 = [MATH.mkReconCoeff(3)](array(dxm2, dxm1, 0.0, dxp1), 0.0) + -- Stencil 2 + var stencil2 = [MATH.mkReconCoeff(3)](array(dxm1, 0.0, dxp1, dxp2), 0.0) + -- Stencil 3 + var stencil3 = [MATH.mkReconCoeffLeftBC(3)](array(dxm2, dxm1, 0.0), 0.0) + -- Stencil 4 + var stencil4 = [MATH.mkReconCoeff(4)](array(dxm1, 0.0, dxp1, dxp2, dxp3), 0.0) + + -- Cell: c-1.5 c-1 c c+1 c+2 c+3 + return array( 0.0, stencil1[0], stencil1[1], stencil1[2], 0.0, 0.0, + 0.0, 0.0, stencil2[0], stencil2[1], stencil2[2], 0.0, + stencil3[0], stencil3[1], stencil3[2], 0.0, 0.0, 0.0, + 0.0, 0.0, stencil4[0], stencil4[1], stencil4[2], stencil4[3]) + + end + + local __demand(__inline) + task GetReconstructionMinus(dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double, dxp3 : double) + -- Stencil 1 + var stencil1 = [MATH.mkReconCoeff(3)](array(dxm1, 0.0, dxp1, dxp2), 0.0) + -- Stencil 2 + var stencil2 = [MATH.mkReconCoeff(3)](array(dxm2, dxm1, 0.0, dxp1), 0.0) + -- Stencil 3 + var stencil3 = [MATH.mkReconCoeff(3)](array(0.0, dxp1, dxp2, dxp3), 0.0) + -- Stencil 4 + var stencil4 = [MATH.mkReconCoeffLeftBC(4)](array(dxm2, dxm1, 0.0, dxp1), 0.0) + + -- Cell: c-1.5 c-1 c c+1 c+2 c+3 + return array( 0.0, 0.0, stencil1[0], stencil1[1], stencil1[2], 0.0, + 0.0, stencil2[0], stencil2[1], stencil2[2], 0.0, 0.0, + 0.0, 0.0, 0.0, stencil3[0], stencil3[1], stencil3[2], + stencil4[0], stencil4[1], stencil4[2], stencil4[3], 0.0, 0.0) + + end + + local __demand(__inline) + task GetTENOCoeffs(dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double, dxp3 : double, ReconCoeffs: double[nStencils*6]) + + -- Sixth order accurate stencil with the first point staggered on the face + var stencil = [MATH.mkReconCoeffLeftBC(6)](array(dxm2, dxm1, 0.0, dxp1, dxp2, dxp3), 0.0) + + var LU : LUdec + var b : double[nStencils] + for i=0, nStencils do + for j=0, nStencils do + LU.A[i*nStencils+j] = ReconCoeffs[j*6+i] + end + b[i] = stencil[i] + end + LU = ludcmp(LU) + return lubksb(LU, b) + + end + + __demand(__inline) + task CorrectMetricLeftPlusTwoStaggered(Fluid : region(ispace(int3d), Fluid_columns), + cm1 : int3d, c : int3d, cp1 : int3d, cp2 : int3d, cp3 : int3d) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]) + do + -- Face reconstruction operators + var dxm2 = -Fluid[c ].cellWidth[dir] - Fluid[cm1].cellWidth[dir] + var dxm1 = -Fluid[c ].cellWidth[dir] + var dxp1 = Fluid[cp1].cellWidth[dir] + var dxp2 = Fluid[cp1].cellWidth[dir] + Fluid[cp2].cellWidth[dir] + var dxp3 = Fluid[cp1].cellWidth[dir] + Fluid[cp2].cellWidth[dir] + Fluid[cp3].cellWidth[dir] + + Fluid[c].[reconPlus] = GetReconstructionPlus( dxm2, dxm1, dxp1, dxp2, dxp3) + Fluid[c].[reconMinus] = GetReconstructionMinus(dxm2, dxm1, dxp1, dxp2, dxp3) + Fluid[c].[TENOCoeffsPlus] = GetTENOCoeffs(dxm2, dxm1, dxp1, dxp2, dxp3, Fluid[c].[reconPlus]) + Fluid[c].[TENOCoeffsMinus] = GetTENOCoeffs(dxm2, dxm1, dxp1, dxp2, dxp3, Fluid[c].[reconMinus]) + + Fluid[c].[BCStencil] = true + end + return CorrectMetricLeftPlusTwoStaggered +end) + +------------------------------------------------------------------------------- +-- COLLOCATED LEFT BC +------------------------------------------------------------------------------- +-- These functions generate the tasks to correct the metric for a left boundary +-- where the ghost point is in a cell center + +-- dx: |-------------| +-- dxp1: |-------------| +-- c x=0 c+1 +-- |------x------|------x------| +-- +-- Plus reconstruction: +-- 1st: o-----> +-- 2nd: does not exist +-- 3rd: does not exist +-- 4th: does not exist +-- +-- Minus reconstruction: +-- 1st: <-----o +-- 2nd: does not exist +-- 3rd: does not exist +-- 4th: does not exist + +local mkCorrectMetricLeftCollocated = terralib.memoize(function(sdir) + local CorrectMetricLeftCollocated + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + local grad + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + grad = "gradX" + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + grad = "gradY" + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + grad = "gradZ" + end + + __demand(__inline) + task CorrectMetricLeftCollocated(Fluid : region(ispace(int3d), Fluid_columns), + c : int3d, cp1 : int3d, cp2 : int3d, cp3 : int3d) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]), + writes(Fluid.{[grad]}) + do + -- Face reconstruction operators + -- Take into account that there is no c-1 and c-2 + Fluid[c].[reconPlus][Stencil2*6+2] = 1.0 + Fluid[c].[reconPlus][Stencil2*6+3] = 0.0 + Fluid[c].[reconPlus][Stencil2*6+4] = 0.0 + Fluid[c].[reconMinus][Stencil1*6+2] = 0.0 + Fluid[c].[reconMinus][Stencil1*6+3] = 1.0 + Fluid[c].[reconMinus][Stencil1*6+4] = 0.0 + + var dxm1 = -Fluid[c ].cellWidth[dir] + var dxp1 = Fluid[cp1].cellWidth[dir] + var dxp2 = Fluid[cp1].cellWidth[dir] + Fluid[cp2].cellWidth[dir] + var dxp3 = Fluid[cp1].cellWidth[dir] + Fluid[cp2].cellWidth[dir] + Fluid[cp3].cellWidth[dir] + + Fluid[c].[TENOCoeffsPlus] = array(0.0, 1.0, 0.0, 0.0) + Fluid[c].[TENOCoeffsMinus] = array(1.0, 0.0, 0.0, 0.0) + + Fluid[c].[BCStencil] = true + + -- Cell-center gradient operator + var Inv2dx = 1.0/(Fluid[c].cellWidth[dir] + Fluid[cp1].cellWidth[dir]) + Fluid[c].[grad] = array( 0.0, 2.0*Inv2dx) + + end + return CorrectMetricLeftCollocated +end) + +-- dxm1: |---------------------------| +-- dx: |-------------| +-- dxp1: |-------------| +-- dxp2: |---------------------------| +-- dxp3: |-----------------------------------------| +-- c-1 c x=0 c+1 c+2 c+3 +-- |------x------|------x------|------x------|------x------|------x------| +-- +-- Plus reconstruction: +-- 1st: o-------------o-----> <-----o +-- 2nd: o-----> <-----o-------------o +-- 3rd: does not exist +-- 4th: does not exist +-- +-- Minus reconstruction: +-- 1st: o-----> <-----o-------------o +-- 2nd: o-------------o-----> <-----o +-- 3rd: does not exist +-- 4th: does not exist + +local mkCorrectMetricLeftPlusOneCollocated = terralib.memoize(function(sdir) + local CorrectMetricLeftPlusOneCollocated + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + end + + local __demand(__inline) + task GetTENOCoeffs(dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double, dxp3 : double, ReconCoeffs: double[nStencils*6]) + + -- TENO coefficinets excluding the first and last cell + -- (Fourth order accurate) + var stencil = [MATH.mkReconCoeff(4)](array(dxm2, dxm1, 0.0, dxp1, dxp2), 0.0) + + var LU : LUdec + var b : double[nStencils] + for i=0, nStencils do + for j=0, nStencils do + LU.A[i*nStencils+j] = ReconCoeffs[j*6+i+1] + end + b[i] = stencil[i] + end + LU = ludcmp(LU) + return lubksb(LU, b) + + end + + __demand(__inline) + task CorrectMetricLeftPlusOneCollocated(Fluid : region(ispace(int3d), Fluid_columns), + cm1 : int3d, c : int3d, cp1 : int3d, cp2 : int3d, cp3 : int3d) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]) + do + -- Face reconstruction operators + var dxm2 = -Fluid[c ].cellWidth[dir] - Fluid[cm1].cellWidth[dir] + var dxm1 = -Fluid[c ].cellWidth[dir] + var dxp1 = Fluid[cp1].cellWidth[dir] + var dxp2 = Fluid[cp1].cellWidth[dir] + Fluid[cp2].cellWidth[dir] + var dxp3 = Fluid[cp1].cellWidth[dir] + Fluid[cp2].cellWidth[dir] + Fluid[cp3].cellWidth[dir] + + Fluid[c].[TENOCoeffsPlus] = GetTENOCoeffs(dxm2, dxm1, dxp1, dxp2, dxp3, Fluid[c].[reconPlus]) + Fluid[c].[TENOCoeffsMinus] = GetTENOCoeffs(dxm2, dxm1, dxp1, dxp2, dxp3, Fluid[c].[reconMinus]) + + Fluid[c].[BCStencil] = true + end + return CorrectMetricLeftPlusOneCollocated +end) + +------------------------------------------------------------------------------- +-- STAGGERED RIGHT BC +------------------------------------------------------------------------------- +-- These functions generate the tasks to correct the metric for a right boundary +-- where the ghost point is staggered on the cell face + +local mkCorrectMetricRightStaggered = terralib.memoize(function(sdir) + local CorrectMetricRightStaggered + + local dir + local grad + if sdir == "x" then + dir = 0 + grad = "gradX" + elseif sdir == "y" then + dir = 1 + grad = "gradY" + elseif sdir == "z" then + dir = 2 + grad = "gradZ" + end + + __demand(__inline) + task CorrectMetricRightStaggered(Fluid : region(ispace(int3d), Fluid_columns), + cm1 : int3d, c : int3d) + where + reads(Fluid.cellWidth), + writes(Fluid.{[grad]}) + do + -- Cell-center gradient operator + var Inv2dx = 1.0/Fluid[cm1].cellWidth[dir] + Fluid[c ].[grad] = array(2.0*Inv2dx, 0.0) + end + return CorrectMetricRightStaggered +end) + +local mkCorrectMetricRightMinusOneStaggered = terralib.memoize(function(sdir) + local CorrectMetricRightMinusOneStaggered + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + local interp + local deriv + local grad + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + interp = "interpXFace" + deriv = "derivXFace" + grad = "gradX" + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + interp = "interpYFace" + deriv = "derivYFace" + grad = "gradY" + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + interp = "interpZFace" + deriv = "derivZFace" + grad = "gradZ" + end + + __demand(__inline) + task CorrectMetricRightMinusOneStaggered(Fluid : region(ispace(int3d), Fluid_columns), + cm1 : int3d, c : int3d) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]), + writes(Fluid.{[interp], [deriv], [grad]}) + do + -- Face reconstruction operators + -- Boundary node is staggered on the face so we do not need any reconstruction + Fluid[c].[reconPlus] = array(0.0, 0.0, 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 1.0, 0.0, 0.0) + Fluid[c].[reconMinus] = array(0.0, 0.0, 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 1.0, 0.0, 0.0) + + Fluid[c].[BCStencil] = true + + -- Face interpolation operator + -- The true value comes from the ghost cell + Fluid[c].[interp] = array(0.0, 1.0) + + -- Face derivative operator + var Inv2dx = 1.0/Fluid[c].cellWidth[dir] + Fluid[c].[deriv] = 2.0*Inv2dx + + -- Cell-center gradient operator + var Inv2dxm1 = 1.0/(Fluid[c].cellWidth[dir] + Fluid[cm1].cellWidth[dir]) + Fluid[c].[grad] = array(Inv2dxm1, Inv2dx) + end + return CorrectMetricRightMinusOneStaggered +end) + +-- dxm2: |-----------------------------------------| +-- dxm1: |---------------------------| +-- dx: |-------------| +-- dxp1: |-------------| +-- c-2 c-1 c x=0 c+1 c+1.5 +-- |------x------|------x------|------x------|------x------x +-- +-- Plus reconstruction: +-- 1st: o-------------o-----> <-----o +-- 2nd: o-----> <-----o------o +-- 3rd: o-------------o-------------o-----> +-- 4th: does not exist +-- +-- Minus reconstruction: +-- 1st: o-----> <-----o------o +-- 2nd: o-------------o-----> <-----o +-- 3rd: does not exist +-- 4th: o-------------o-------------o-----> <-----o + +local mkCorrectMetricRightMinusTwoStaggered = terralib.memoize(function(sdir) + local CorrectMetricRightMinusTwoStaggered + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + end + + local __demand(__inline) + task GetReconstructionPlus(dxm3 : double, dxm2 : double, dxm1 : double, dxp1 : double) + -- Stencil 1 + var stencil1 = [MATH.mkReconCoeff(3)](array(dxm2, dxm1, 0.0, dxp1) , 0.0) + -- Stencil 2 + var stencil2 = [MATH.mkReconCoeffRightBC(3)](array(dxm1, 0.0, dxp1) , 0.0) + -- Stencil 3 + var stencil3 = [MATH.mkReconCoeff(3)](array(dxm3, dxm2, dxm1, 0.0) , 0.0) + + -- Cell: c-2 c-1 c c+1 c+1.5 c+3 + return array( 0.0, stencil1[0], stencil1[1], stencil1[2], 0.0, 0.0, + 0.0, 0.0, stencil2[0], stencil2[1], stencil2[2], 0.0, + stencil3[0], stencil3[1], stencil3[2], 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 1.0, 0.0, 0.0) + -- The last row is just to avoid a singular problem in the coefficient calculation + end + + local __demand(__inline) + task GetReconstructionMinus(dxm3 : double, dxm2 : double, dxm1 : double, dxp1 : double) + -- Stencil 1 + var stencil1 = [MATH.mkReconCoeffRightBC(3)](array(dxm1, 0.0, dxp1) , 0.0) + -- Stencil 2 + var stencil2 = [MATH.mkReconCoeff(3)](array(dxm2, dxm1, 0.0, dxp1) , 0.0) + -- Stencil 3 + var stencil3 = [MATH.mkReconCoeffRightBC(2)](array(0.0, dxp1) , 0.0) + -- Stencil 4 + var stencil4 = [MATH.mkReconCoeff(4)](array(dxm3, dxm2, dxm1, 0.0, dxp1), 0.0) + + -- Cell: c-2 c-1 c c+1 c+1.5 c+3 + return array( 0.0, 0.0, stencil1[0], stencil1[1], stencil1[2], 0.0, + 0.0, stencil2[0], stencil2[1], stencil2[2], 0.0, 0.0, + 0.0, 0.0, 0.0, stencil3[0], stencil3[1], 0.0, + stencil4[0], stencil4[1], stencil4[2], stencil4[3], 0.0, 0.0) + + end + + local __demand(__inline) + task GetTENOCoeffs(dxm3 : double, dxm2 : double, dxm1 : double, dxp1 : double, ReconCoeffs: double[nStencils*6]) + + -- TENO coefficinets excluding the last cell + -- (Fifth order accurate) + var stencil = [MATH.mkReconCoeffRightBC(5)](array(dxm3, dxm2, dxm1, 0.0, dxp1), 0.0) + + var LU : LUdec + var b : double[nStencils] + for i=0, nStencils do + for j=0, nStencils do + LU.A[i*nStencils+j] = ReconCoeffs[j*6+i] + end + b[i] = stencil[i] + end + LU = ludcmp(LU) + return lubksb(LU, b) + + end + + __demand(__inline) + task CorrectMetricRightMinusTwoStaggered(Fluid : region(ispace(int3d), Fluid_columns), + cm2 : int3d, cm1 : int3d, c : int3d, cp1 : int3d) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]) + do + -- Face reconstruction operators + var dxm3 = -Fluid[c ].cellWidth[dir] - Fluid[cm1].cellWidth[dir] - Fluid[cm2].cellWidth[dir] + var dxm2 = -Fluid[c ].cellWidth[dir] - Fluid[cm1].cellWidth[dir] + var dxm1 = -Fluid[c ].cellWidth[dir] + var dxp1 = Fluid[cp1].cellWidth[dir] + + Fluid[c].[reconPlus] = GetReconstructionPlus( dxm3, dxm2, dxm1, dxp1) + Fluid[c].[reconMinus] = GetReconstructionMinus(dxm3, dxm2, dxm1, dxp1) + Fluid[c].[TENOCoeffsPlus] = GetTENOCoeffs(dxm3, dxm2, dxm1, dxp1, Fluid[c].[reconPlus]) + Fluid[c].[TENOCoeffsMinus] = GetTENOCoeffs(dxm3, dxm2, dxm1, dxp1, Fluid[c].[reconMinus]) + + Fluid[c].[BCStencil] = true + end + return CorrectMetricRightMinusTwoStaggered +end) + +-- dxm2: |-----------------------------------------| +-- dxm1: |---------------------------| +-- dx: |-------------| +-- dxp1: |-------------| +-- dxp2: |---------------------------| +-- c-2 c-1 c x=0 c+1 c+2 c+2.5 +-- |------x------|------x------|------x------|------x------|------x------x +-- +-- Plus reconstruction: +-- 1st: o-------------o-----> <-----o +-- 2nd: o-----> <-----o-------------o +-- 3rd: o-------------o-------------o-----> +-- 4th: o-----> <-----o-------------o------o +-- +-- Minus reconstruction: +-- 1st: o-----> <-----o-------------o +-- 2nd: o-------------o-----> <-----o +-- 3rd: <-----o-------------o------o +-- 4th: o-------------o-------------o-----> <-----o + +local mkCorrectMetricRightMinusThreeStaggered = terralib.memoize(function(sdir) + local CorrectMetricRightMinusThreeStaggered + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + end + + local __demand(__inline) + task GetReconstructionPlus(dxm3 : double, dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double) + -- Stencil 1 + var stencil1 = [MATH.mkReconCoeff(3)](array(dxm2, dxm1, 0.0, dxp1), 0.0) + -- Stencil 2 + var stencil2 = [MATH.mkReconCoeff(3)](array(dxm1, 0.0, dxp1, dxp2), 0.0) + -- Stencil 3 + var stencil3 = [MATH.mkReconCoeff(3)](array(dxm3, dxm2, dxm1, 0.0), 0.0) + -- Stencil 4 + var stencil4 = [MATH.mkReconCoeffRightBC(4)](array(dxm1, 0.0, dxp1, dxp2), 0.0) + + -- Cell: c-2 c-1 c c+1 c+2 c+5/2 + return array( 0.0, stencil1[0], stencil1[1], stencil1[2], 0.0, 0.0, + 0.0, 0.0, stencil2[0], stencil2[1], stencil2[2], 0.0, + stencil3[0], stencil3[1], stencil3[2], 0.0, 0.0, 0.0, + 0.0, 0.0, stencil4[0], stencil4[1], stencil4[2], stencil4[3]) + + end + + local __demand(__inline) + task GetReconstructionMinus(dxm3 : double, dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double) + -- Stencil 1 + var stencil1 = [MATH.mkReconCoeff(3)](array(dxm1, 0.0, dxp1, dxp2) , 0.0) + -- Stencil 2 + var stencil2 = [MATH.mkReconCoeff(3)](array(dxm2, dxm1, 0.0, dxp1) , 0.0) + -- Stencil 3 + var stencil3 = [MATH.mkReconCoeffRightBC(3)](array(0.0, dxp1, dxp2) , 0.0) + -- Stencil 4 + var stencil4 = [MATH.mkReconCoeff(4)](array(dxm3, dxm2, dxm1, 0.0, dxp1), 0.0) + + -- Cell: c-2 c-1 c c+1 c+2 c+2.5 + return array( 0.0, 0.0, stencil1[0], stencil1[1], stencil1[2], 0.0, + 0.0, stencil2[0], stencil2[1], stencil2[2], 0.0, 0.0, + 0.0, 0.0, 0.0, stencil3[0], stencil3[1], stencil3[2], + stencil4[0], stencil4[1], stencil4[2], stencil4[3], 0.0, 0.0) + + end + + local __demand(__inline) + task GetTENOCoeffs(dxm3 : double, dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double, ReconCoeffs: double[nStencils*6]) + + -- TENO coefficinets considering that the last cell is staggered + var stencil = [MATH.mkReconCoeffRightBC(6)](array(dxm3, dxm2, dxm1, 0.0, dxp1, dxp2), 0.0) + + var LU : LUdec + var b : double[nStencils] + for i=0, nStencils do + for j=0, nStencils do + LU.A[i*nStencils+j] = ReconCoeffs[j*6+i] + end + b[i] = stencil[i] + end + LU = ludcmp(LU) + return lubksb(LU, b) + + end + + __demand(__inline) + task CorrectMetricRightMinusThreeStaggered(Fluid : region(ispace(int3d), Fluid_columns), + cm2 : int3d, cm1 : int3d, c : int3d, cp1 : int3d, cp2 : int3d) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]) + do + -- Face reconstruction operators + var dxm3 = -Fluid[c ].cellWidth[dir] - Fluid[cm1].cellWidth[dir] - Fluid[cm2].cellWidth[dir] + var dxm2 = -Fluid[c ].cellWidth[dir] - Fluid[cm1].cellWidth[dir] + var dxm1 = -Fluid[c ].cellWidth[dir] + var dxp1 = Fluid[cp1].cellWidth[dir] + var dxp2 = Fluid[cp1].cellWidth[dir] + Fluid[cp2].cellWidth[dir] + + Fluid[c].[reconPlus] = GetReconstructionPlus( dxm3, dxm2, dxm1, dxp1, dxp2) + Fluid[c].[reconMinus] = GetReconstructionMinus(dxm3, dxm2, dxm1, dxp1, dxp2) + Fluid[c].[TENOCoeffsPlus] = GetTENOCoeffs(dxm3, dxm2, dxm1, dxp1, dxp2, Fluid[c].[reconPlus]) + Fluid[c].[TENOCoeffsMinus] = GetTENOCoeffs(dxm3, dxm2, dxm1, dxp1, dxp2, Fluid[c].[reconMinus]) + + Fluid[c].[BCStencil] = true + end + return CorrectMetricRightMinusThreeStaggered +end) + +------------------------------------------------------------------------------- +-- COLLOCATED RIGHT BC +------------------------------------------------------------------------------- +-- This function generates the task to correct the metric for a right boundary +-- where the ghost point is in a cell center + +local mkCorrectMetricRightCollocated = terralib.memoize(function(sdir) + local CorrectMetricRightCollocated + + local dir + local grad + if sdir == "x" then + dir = 0 + grad = "gradX" + elseif sdir == "y" then + dir = 1 + grad = "gradY" + elseif sdir == "z" then + dir = 2 + grad = "gradZ" + end + + __demand(__inline) + task CorrectMetricRightCollocated(Fluid : region(ispace(int3d), Fluid_columns), + cm1 : int3d, c : int3d) + where + reads(Fluid.cellWidth), + writes(Fluid.{[grad]}) + do + -- Cell-center gradient operator + var Inv2dx = 1.0/(Fluid[cm1].cellWidth[dir] + Fluid[c].cellWidth[dir]) + Fluid[c].[grad] = array(2.0*Inv2dx, 0.0) + end + return CorrectMetricRightCollocated +end) + +-- dxm2: |-----------------------------------------| +-- dxm1: |---------------------------| +-- dx: |-------------| +-- dxp1: |-------------| +-- c-2 c-1 c x=0 c+1 +-- |------x------|------x------|------x------|------x------| +-- +-- Plus reconstruction: +-- 1st: o-----> +-- 2nd: does not exist +-- 3rd: does not exist +-- 4th: does not exist +-- +-- Minus reconstruction: +-- 1st: <-----o +-- 2nd: does not exist +-- 3rd: does not exist +-- 4th: does not exist + +local mkCorrectMetricRightMinusOneCollocated = terralib.memoize(function(sdir) + local CorrectMetricRightMinusOneCollocated + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + end + + __demand(__inline) + task CorrectMetricRightMinusOneCollocated(Fluid : region(ispace(int3d), Fluid_columns), + cm2 : int3d, cm1 : int3d, c : int3d, cp1 : int3d) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]) + do + -- Face reconstruction operators + -- Take into account that there is no c+1 and c+2 + Fluid[c].[reconPlus][Stencil2*6+2] = 1.0 + Fluid[c].[reconPlus][Stencil2*6+3] = 0.0 + Fluid[c].[reconPlus][Stencil2*6+4] = 0.0 + Fluid[c].[reconMinus][Stencil1*6+2] = 0.0 + Fluid[c].[reconMinus][Stencil1*6+3] = 1.0 + Fluid[c].[reconMinus][Stencil1*6+4] = 0.0 + + var dxm3 = -Fluid[c ].cellWidth[dir] - Fluid[cm1].cellWidth[dir] - Fluid[cm2].cellWidth[dir] + var dxm2 = -Fluid[c ].cellWidth[dir] - Fluid[cm1].cellWidth[dir] + var dxm1 = -Fluid[c ].cellWidth[dir] + var dxp1 = Fluid[cp1].cellWidth[dir] + + Fluid[c].[TENOCoeffsPlus] = array(0.0, 1.0, 0.0, 0.0) + Fluid[c].[TENOCoeffsMinus] = array(1.0, 0.0, 0.0, 0.0) + + Fluid[c].[BCStencil] = true + end + return CorrectMetricRightMinusOneCollocated +end) + +-- dxm2: |-----------------------------------------| +-- dxm1: |---------------------------| +-- dx: |-------------| +-- dxp1: |-------------| +-- dxp2: |---------------------------| +-- c-2 c-1 c x=0 c+1 c+2 +-- |------x------|------x------|------x------|------x------|------x------| +-- +-- Plus reconstruction: +-- 1st: o-------------o-----> <-----o +-- 2nd: o-----> <-----o-------------o +-- 3rd: does not exist +-- 4th: does not exist +-- +-- Minus reconstruction: +-- 1st: o-----> <-----o-------------o +-- 2nd: o-------------o-----> <-----o +-- 3rd: does not exist +-- 4th: does not exist + +local mkCorrectMetricRightMinusTwoCollocated = terralib.memoize(function(sdir) + local CorrectMetricRightMinusTwoCollocated + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + end + + local __demand(__inline) + task GetTENOCoeffs(dxm3 : double, dxm2 : double, dxm1 : double, dxp1 : double, dxp2 : double, ReconCoeffs: double[nStencils*6]) + + -- TENO coefficinets excluding the first and last cell + -- (Fourth order accurate) + var stencil = [MATH.mkReconCoeff(4)](array(dxm2, dxm1, 0.0, dxp1, dxp2), 0.0) + + var LU : LUdec + var b : double[nStencils] + for i=0, nStencils do + for j=0, nStencils do + LU.A[i*nStencils+j] = ReconCoeffs[j*6+i+1] + end + b[i] = stencil[i] + end + LU = ludcmp(LU) + return lubksb(LU, b) + + end + + __demand(__inline) + task CorrectMetricRightMinusTwoCollocated(Fluid : region(ispace(int3d), Fluid_columns), + cm2 : int3d, cm1 : int3d, c : int3d, cp1 : int3d, cp2 : int3d) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]) + do + -- Face reconstruction operators + var dxm3 = -Fluid[c ].cellWidth[dir] - Fluid[cm1].cellWidth[dir] - Fluid[cm2].cellWidth[dir] + var dxm2 = -Fluid[c ].cellWidth[dir] - Fluid[cm1].cellWidth[dir] + var dxm1 = -Fluid[c ].cellWidth[dir] + var dxp1 = Fluid[cp1].cellWidth[dir] + var dxp2 = Fluid[cp1].cellWidth[dir] + Fluid[cp2].cellWidth[dir] + + Fluid[c].[TENOCoeffsPlus] = GetTENOCoeffs(dxm3, dxm2, dxm1, dxp1, dxp2, Fluid[c].[reconPlus]) + Fluid[c].[TENOCoeffsMinus] = GetTENOCoeffs(dxm3, dxm2, dxm1, dxp1, dxp2, Fluid[c].[reconMinus]) + + Fluid[c].[BCStencil] = true + end + return CorrectMetricRightMinusTwoCollocated +end) + +Exports.mkCorrectGhostMetric = terralib.memoize(function(sdir) + local CorrectGhostMetric + + local dir + local reconPlus + local reconMinus + local TENOCoeffsPlus + local TENOCoeffsMinus + local BCStencil + local interp + local deriv + local grad + local is_PosGhost + local is_NegGhost + local mk_cm2 + local mk_cm1 + local mk_cp1 + local mk_cp2 + local mk_cp3 + if sdir == "x" then + dir = 0 + reconPlus = "reconXFacePlus" + reconMinus = "reconXFaceMinus" + TENOCoeffsPlus = "TENOCoeffsXPlus" + TENOCoeffsMinus = "TENOCoeffsXMinus" + BCStencil = "BCStencilX" + interp = "interpXFace" + deriv = "derivXFace" + grad = "gradX" + is_PosGhost = MACRO.is_xPosGhost + is_NegGhost = MACRO.is_xNegGhost + mk_cm2 = function(c, b) return rexpr (c+{-2, 0, 0}) % b end end + mk_cm1 = function(c, b) return rexpr (c+{-1, 0, 0}) % b end end + mk_cp1 = function(c, b) return rexpr (c+{ 1, 0, 0}) % b end end + mk_cp2 = function(c, b) return rexpr (c+{ 2, 0, 0}) % b end end + mk_cp3 = function(c, b) return rexpr (c+{ 3, 0, 0}) % b end end + elseif sdir == "y" then + dir = 1 + reconPlus = "reconYFacePlus" + reconMinus = "reconYFaceMinus" + TENOCoeffsPlus = "TENOCoeffsYPlus" + TENOCoeffsMinus = "TENOCoeffsYMinus" + BCStencil = "BCStencilY" + interp = "interpYFace" + deriv = "derivYFace" + grad = "gradY" + is_PosGhost = MACRO.is_yPosGhost + is_NegGhost = MACRO.is_yNegGhost + mk_cm2 = function(c, b) return rexpr (c+{ 0,-2, 0}) % b end end + mk_cm1 = function(c, b) return rexpr (c+{ 0,-1, 0}) % b end end + mk_cp1 = function(c, b) return rexpr (c+{ 0, 1, 0}) % b end end + mk_cp2 = function(c, b) return rexpr (c+{ 0, 2, 0}) % b end end + mk_cp3 = function(c, b) return rexpr (c+{ 0, 3, 0}) % b end end + elseif sdir == "z" then + dir = 2 + reconPlus = "reconZFacePlus" + reconMinus = "reconZFaceMinus" + TENOCoeffsPlus = "TENOCoeffsZPlus" + TENOCoeffsMinus = "TENOCoeffsZMinus" + BCStencil = "BCStencilZ" + interp = "interpZFace" + deriv = "derivZFace" + grad = "gradZ" + is_PosGhost = MACRO.is_zPosGhost + is_NegGhost = MACRO.is_zNegGhost + mk_cm2 = function(c, b) return rexpr (c+{ 0, 0,-2}) % b end end + mk_cm1 = function(c, b) return rexpr (c+{ 0, 0,-1}) % b end end + mk_cp1 = function(c, b) return rexpr (c+{ 0, 0, 1}) % b end end + mk_cp2 = function(c, b) return rexpr (c+{ 0, 0, 2}) % b end end + mk_cp3 = function(c, b) return rexpr (c+{ 0, 0, 3}) % b end end + end + + __demand(__parallel, __cuda, __leaf) + task CorrectGhostMetric(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_bounds : rect3d, + BCLeft : int32, BCRight : int32, + Grid_Bnum : int32, Grid_Num : int32) + where + reads(Fluid.cellWidth), + reads writes(Fluid.{[reconPlus], [reconMinus]}), + writes(Fluid.{[TENOCoeffsPlus], [TENOCoeffsMinus]}), + writes(Fluid.[BCStencil]), + writes(Fluid.[interp]), + writes(Fluid.[deriv]), + writes(Fluid.[grad]) + do + __demand(__openmp) + for c in Fluid do + var cm2 = [mk_cm2(rexpr c end, rexpr Fluid_bounds end)]; + var cm1 = [mk_cm1(rexpr c end, rexpr Fluid_bounds end)]; + var cp1 = [mk_cp1(rexpr c end, rexpr Fluid_bounds end)]; + var cp2 = [mk_cp2(rexpr c end, rexpr Fluid_bounds end)]; + var cp3 = [mk_cp3(rexpr c end, rexpr Fluid_bounds end)]; + + -- Left side + if is_NegGhost(c, Grid_Bnum) then + if (BCLeft == SCHEMA.FlowBC_Dirichlet or + BCLeft == SCHEMA.FlowBC_AdiabaticWall or + BCLeft == SCHEMA.FlowBC_IsothermalWall or + BCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + + [mkCorrectMetricLeftStaggered(sdir)](Fluid, c, cp1) + + elseif (BCLeft == SCHEMA.FlowBC_NSCBC_Inflow or + BCLeft == SCHEMA.FlowBC_NSCBC_Outflow) then + + [mkCorrectMetricLeftCollocated(sdir)](Fluid, c, cp1, cp2, cp3) + + end + elseif is_NegGhost(cm1, Grid_Bnum) then + if (BCLeft == SCHEMA.FlowBC_Dirichlet or + BCLeft == SCHEMA.FlowBC_AdiabaticWall or + BCLeft == SCHEMA.FlowBC_IsothermalWall or + BCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + + [mkCorrectMetricLeftPlusOneStaggered(sdir)](Fluid, c, cp1, cp2, cp3) + + elseif (BCLeft == SCHEMA.FlowBC_NSCBC_Inflow or + BCLeft == SCHEMA.FlowBC_NSCBC_Outflow) then + + [mkCorrectMetricLeftPlusOneCollocated(sdir)](Fluid, cm1, c, cp1, cp2, cp3) + + end + elseif is_NegGhost(cm2, Grid_Bnum) then + if (BCLeft == SCHEMA.FlowBC_Dirichlet or + BCLeft == SCHEMA.FlowBC_AdiabaticWall or + BCLeft == SCHEMA.FlowBC_IsothermalWall or + BCLeft == SCHEMA.FlowBC_SuctionAndBlowingWall) then + + [mkCorrectMetricLeftPlusTwoStaggered(sdir)](Fluid, cm1, c, cp1, cp2, cp3) + + end + end + + -- Right side + if is_PosGhost(c, Grid_Bnum, Grid_Num) then + if (BCRight == SCHEMA.FlowBC_Dirichlet or + BCRight == SCHEMA.FlowBC_AdiabaticWall or + BCRight == SCHEMA.FlowBC_IsothermalWall or + BCRight == SCHEMA.FlowBC_SuctionAndBlowingWall) then + + [mkCorrectMetricRightStaggered(sdir)](Fluid, cm1, c) + + elseif (BCRight == SCHEMA.FlowBC_NSCBC_Inflow or + BCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + + [mkCorrectMetricRightCollocated(sdir)](Fluid, cm1, c) + + end + elseif is_PosGhost(cp1, Grid_Bnum, Grid_Num) then + if (BCRight == SCHEMA.FlowBC_Dirichlet or + BCRight == SCHEMA.FlowBC_AdiabaticWall or + BCRight == SCHEMA.FlowBC_IsothermalWall or + BCRight == SCHEMA.FlowBC_SuctionAndBlowingWall) then + + [mkCorrectMetricRightMinusOneStaggered(sdir)](Fluid, cm1, c) + + elseif (BCRight == SCHEMA.FlowBC_NSCBC_Inflow or + BCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + + [mkCorrectMetricRightMinusOneCollocated(sdir)](Fluid, cm2, cm1, c, cp1) + + end + elseif is_PosGhost(cp2, Grid_Bnum, Grid_Num) then + if (BCRight == SCHEMA.FlowBC_Dirichlet or + BCRight == SCHEMA.FlowBC_AdiabaticWall or + BCRight == SCHEMA.FlowBC_IsothermalWall or + BCRight == SCHEMA.FlowBC_SuctionAndBlowingWall) then + + [mkCorrectMetricRightMinusTwoStaggered(sdir)](Fluid, cm2, cm1, c, cp1) + + elseif (BCRight == SCHEMA.FlowBC_NSCBC_Inflow or + BCRight == SCHEMA.FlowBC_NSCBC_Outflow) then + + [mkCorrectMetricRightMinusTwoCollocated(sdir)](Fluid, cm2, cm1, c, cp1, cp2) + + end + elseif is_PosGhost(cp3, Grid_Bnum, Grid_Num) then + if (BCRight == SCHEMA.FlowBC_Dirichlet or + BCRight == SCHEMA.FlowBC_AdiabaticWall or + BCRight == SCHEMA.FlowBC_IsothermalWall or + BCRight == SCHEMA.FlowBC_SuctionAndBlowingWall) then + + [mkCorrectMetricRightMinusThreeStaggered(sdir)](Fluid, cm2, cm1, c, cp1, cp2) + + end + end + end + end + return CorrectGhostMetric +end) + +return Exports end + diff --git a/src/prometeo_operators.rg b/src/prometeo_operators.rg new file mode 100644 index 0000000..f01c1ce --- /dev/null +++ b/src/prometeo_operators.rg @@ -0,0 +1,198 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +local Exports = {} + +function Exports.emitderivBase(gradOp, xM1, x, xP1) + return rexpr [gradOp][0]*([x] - [xM1]) + [gradOp][1]*([xP1] - [x]) end +end + +function Exports.emitderivLeftBCBase(gradOp, x, xP1) + return rexpr [gradOp][1]*([xP1] - [x]) end +end + +function Exports.emitderivRightBCBase(gradOp, xM1, x) + return rexpr [gradOp][0]*([x] - [xM1]) end +end + + +function Exports.emitXderiv(r, q, ind, bound, k) + if k == nil then + return rexpr + [Exports.emitderivBase(rexpr [r][ind].gradX end, + rexpr [r][(ind+{-1, 0, 0}) % [bound]].[q] end, + rexpr [r][ ind ].[q] end, + rexpr [r][(ind+{ 1, 0, 0}) % [bound]].[q] end)] + end + else + return rexpr + [Exports.emitderivBase(rexpr [r][ind].gradX end, + rexpr [r][(ind+{-1, 0, 0}) % [bound]].[q][k] end, + rexpr [r][ ind ].[q][k] end, + rexpr [r][(ind+{ 1, 0, 0}) % [bound]].[q][k] end)] + end + end +end + +function Exports.emitYderiv(r, q, ind, bound, k) + if k == nil then + return rexpr + [Exports.emitderivBase(rexpr [r][ind].gradY end, + rexpr [r][(ind+{ 0,-1, 0}) % [bound]].[q] end, + rexpr [r][ ind ].[q] end, + rexpr [r][(ind+{ 0, 1, 0}) % [bound]].[q] end)] + end + else + return rexpr + [Exports.emitderivBase(rexpr [r][ind].gradY end, + rexpr [r][(ind+{ 0,-1, 0}) % [bound]].[q][k] end, + rexpr [r][ ind ].[q][k] end, + rexpr [r][(ind+{ 0, 1, 0}) % [bound]].[q][k] end)] + end + end +end + +function Exports.emitZderiv(r, q, ind, bound, k) + if k == nil then + return rexpr + [Exports.emitderivBase(rexpr [r][ind].gradZ end, + rexpr [r][(ind+{ 0, 0,-1}) % [bound]].[q] end, + rexpr [r][ ind ].[q] end, + rexpr [r][(ind+{ 0, 0, 1}) % [bound]].[q] end)] + end + else + return rexpr + [Exports.emitderivBase(rexpr [r][ind].gradZ end, + rexpr [r][(ind+{ 0, 0,-1}) % [bound]].[q][k] end, + rexpr [r][ ind ].[q][k] end, + rexpr [r][(ind+{ 0, 0, 1}) % [bound]].[q][k] end)] + end + end +end + +function Exports.emitXderivLeftBC(r, q, ind, bound, k) + if k == nil then + return rexpr + [Exports.emitderivLeftBCBase(rexpr [r][ind].gradX end, + rexpr [r][ ind ].[q] end, + rexpr [r][(ind+{ 1, 0, 0}) % [bound]].[q] end)] + end + else + return rexpr + [Exports.emitderivLeftBCBase(rexpr [r][ind].gradX end, + rexpr [r][ ind ].[q][k] end, + rexpr [r][(ind+{ 1, 0, 0}) % [bound]].[q][k] end)] + end + end +end + +function Exports.emitYderivLeftBC(r, q, ind, bound, k) + if k == nil then + return rexpr + [Exports.emitderivLeftBCBase(rexpr [r][ind].gradY end, + rexpr [r][ ind ].[q] end, + rexpr [r][(ind+{ 0, 1, 0}) % [bound]].[q] end)] + end + else + return rexpr + [Exports.emitderivLeftBCBase(rexpr [r][ind].gradY end, + rexpr [r][ ind ].[q][k] end, + rexpr [r][(ind+{ 0, 1, 0}) % [bound]].[q][k] end)] + end + end +end + +function Exports.emitZderivLeftBC(r, q, ind, bound, k) + if k == nil then + return rexpr + [Exports.emitderivLeftBCBase(rexpr [r][ind].gradZ end, + rexpr [r][ ind ].[q] end, + rexpr [r][(ind+{ 0, 0, 1}) % [bound]].[q] end)] + end + else + return rexpr + [Exports.emitderivLeftBCBase(rexpr [r][ind].gradZ end, + rexpr [r][ ind ].[q][k] end, + rexpr [r][(ind+{ 0, 0, 1}) % [bound]].[q][k] end)] + end + end +end + +function Exports.emitXderivRightBC(r, q, ind, bound, k) + if k == nil then + return rexpr + [Exports.emitderivRightBCBase(rexpr [r][ind].gradX end, + rexpr [r][(ind+{-1, 0, 0}) % [bound]].[q] end, + rexpr [r][ ind ].[q] end)] + end + else + return rexpr + [Exports.emitderivRightBCBase(rexpr [r][ind].gradX end, + rexpr [r][(ind+{-1, 0, 0}) % [bound]].[q][k] end, + rexpr [r][ ind ].[q][k] end)] + end + end +end + +function Exports.emitYderivRightBC(r, q, ind, bound, k) + if k == nil then + return rexpr + [Exports.emitderivRightBCBase(rexpr [r][ind].gradY end, + rexpr [r][(ind+{ 0,-1, 0}) % [bound]].[q] end, + rexpr [r][ ind ].[q] end)] + end + else + return rexpr + [Exports.emitderivRightBCBase(rexpr [r][ind].gradY end, + rexpr [r][(ind+{ 0,-1, 0}) % [bound]].[q][k] end, + rexpr [r][ ind ].[q][k] end)] + end + end +end + +function Exports.emitZderivRightBC(r, q, ind, bound, k) + if k == nil then + return rexpr + [Exports.emitderivRightBCBase(rexpr [r][ind].gradZ end, + rexpr [r][(ind+{ 0, 0,-1}) % [bound]].[q] end, + rexpr [r][ ind ].[q] end)] + end + else + return rexpr + [Exports.emitderivRightBCBase(rexpr [r][ind].gradZ end, + rexpr [r][(ind+{ 0, 0,-1}) % [bound]].[q][k] end, + rexpr [r][ ind ].[q][k] end)] + end + end +end + +return Exports + diff --git a/src/prometeo_profiles.rg b/src/prometeo_profiles.rg new file mode 100644 index 0000000..6cf05aa --- /dev/null +++ b/src/prometeo_profiles.rg @@ -0,0 +1,109 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA, MIX, Fluid_columns) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local C = regentlib.c +local UTIL = require 'util-desugared' +local CONST = require "prometeo_const" +local MACRO = require "prometeo_macro" +local CHEM = (require 'prometeo_chem')(SCHEMA, MIX, Fluid_columns) + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture +local irU = CONST.GetirU(MIX) -- Index of the momentum in Conserved vector +local irE = CONST.GetirE(MIX) -- Index of the total energy density in Conserved vector +local nEq = CONST.GetnEq(MIX) -- Total number of unknowns for the implicit solver + +local ProfilesVars = CONST.ProfilesVars + +Exports.HDF = (require 'hdf_helper')(int3d, int3d, Fluid_columns, + ProfilesVars, + {}, + {}) + +------------------------------------------------------------------------------- +-- PROFILES ROUTINES +------------------------------------------------------------------------------- + +function Exports.mkInitializeProfilesField(Side) + local InitializeProfilesField + __demand(__inline) + task InitializeProfilesField(BC : region(ispace(int3d), Fluid_columns), + config : SCHEMA.Config, + mix : MIX.Mixture) + where + reads writes(BC.[ProfilesVars]) + do + if (config.BC.[Side] == SCHEMA.FlowBC_Dirichlet) then + if config.BC.[Side .. "Mixture"].type == SCHEMA.MixtureProfile_Constant then + var BC_Mixture = CHEM.ParseConfigMixture(config.BC.[Side .. "Mixture"].u.Constant.Mixture, mix) + fill(BC.MolarFracs_profile, BC_Mixture) + end + if config.BC.[Side .. "InflowProfile"].type == SCHEMA.InflowProfile_Constant then + fill(BC.velocity_profile, config.BC.[Side .. "InflowProfile"].u.Constant.velocity) + end + if config.BC.[Side .. "Heat"].type == SCHEMA.TempProfile_Constant then + fill(BC.temperature_profile, config.BC.[Side .. "Heat"].u.Constant.temperature) + end + + elseif (config.BC.[Side] == SCHEMA.FlowBC_NSCBC_Inflow) then + if config.BC.[Side .. "Mixture"].type == SCHEMA.MixtureProfile_Constant then + var BC_Mixture = CHEM.ParseConfigMixture(config.BC.[Side .. "Mixture"].u.Constant.Mixture, mix) + fill(BC.MolarFracs_profile, BC_Mixture) + end + if config.BC.[Side .. "InflowProfile"].type == SCHEMA.InflowProfile_Constant then + fill(BC.velocity_profile, config.BC.[Side .. "InflowProfile"].u.Constant.velocity) + end + if config.BC.[Side .. "Heat"].type == SCHEMA.TempProfile_Constant then + fill(BC.temperature_profile, config.BC.[Side .. "Heat"].u.Constant.temperature) + end + + elseif (config.BC.[Side] == SCHEMA.FlowBC_IsothermalWall) then + if config.BC.[Side .. "Heat"].type == SCHEMA.TempProfile_Constant then + fill(BC.temperature_profile, config.BC.[Side .. "Heat"].u.Constant.temperature) + end + + elseif (config.BC.[Side] == SCHEMA.FlowBC_SuctionAndBlowingWall) then + if config.BC.[Side .. "Heat"].type == SCHEMA.TempProfile_Constant then + fill(BC.temperature_profile, config.BC.[Side .. "Heat"].u.Constant.temperature) + end + + end + end + return InitializeProfilesField +end + +return Exports end + diff --git a/src/prometeo_rhs.rg b/src/prometeo_rhs.rg new file mode 100644 index 0000000..338bc39 --- /dev/null +++ b/src/prometeo_rhs.rg @@ -0,0 +1,574 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA, MIX, Fluid_columns) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local UTIL = require 'util-desugared' +local CONST = require "prometeo_const" +local MACRO = require "prometeo_macro" +local OP = require "prometeo_operators" + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture +local irU = CONST.GetirU(MIX) -- Index of the momentum in Conserved vector +local irE = CONST.GetirE(MIX) -- Index of the total energy density in Conserved vector +local nEq = CONST.GetnEq(MIX) -- Total number of unknowns for the implicit solver + +local Primitives = CONST.Primitives +local Properties = CONST.Properties + +------------------------------------------------------------------------------- +-- FLUX-DIVERGENCE ROUTINES +------------------------------------------------------------------------------- + +Exports.mkUpdateUsingFlux = terralib.memoize(function(dir) + local UpdateUsingFlux + + local ind + local Flux + local stencil + if (dir == "x") then + ind = 0 + Flux = "FluxX" + stencil = function(c, b) return rexpr (c + {-1, 0, 0}) % b end end + elseif (dir == "y") then + ind = 1 + Flux = "FluxY" + stencil = function(c, b) return rexpr (c + { 0,-1, 0}) % b end end + elseif (dir == "z") then + ind = 2 + Flux = "FluxZ" + stencil = function(c, b) return rexpr (c + { 0, 0,-1}) % b end end + else assert(false) end + + local __demand(__parallel, __cuda, __leaf) + task UpdateUsingFlux(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + Fluid_bounds : rect3d) + where + ModCells <= Fluid, + reads(Fluid.cellWidth), + reads(Fluid.[Flux]), + reads writes atomic(Fluid.Conserved_t) + do + __demand(__openmp) + for c in ModCells do + var CellWidthInv = 1.0/Fluid[c].cellWidth[ind] + var cm1 = [stencil(rexpr c end, rexpr Fluid_bounds end)] + for i=0, nEq do + Fluid[c].Conserved_t[i] += (((Fluid[c].[Flux][i] - Fluid[cm1].[Flux][i]))*CellWidthInv) + end + end + end + return UpdateUsingFlux +end) + +------------------------------------------------------------------------------- +-- NSCBC-FLUX ROUTINES +------------------------------------------------------------------------------- +-- Adds NSCBC fluxes to the inflow cells +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.UpdateUsingFluxNSCBCInflow(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d)), + mix : MIX.Mixture) +where + reads(Fluid.gradX), + reads(Fluid.{rho, SoS}), + reads(Fluid.[Primitives]), + reads(Fluid.Conserved), + reads(Fluid.velocityGradientX), + reads(Fluid.{dudtBoundary, dTdtBoundary}), + reads(Fluid.{pressure, MolarFracs}), + reads writes(Fluid.Conserved_t) +do + var BC = Fluid_BC[0] + var BCst = Fluid_BC[1] + + __demand(__openmp) + for c in BC do + if (BC[c].velocity[0] >= BC[c].SoS) then + -- Supersonic inlet + BC[c].Conserved_t = [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)] + else + -- Add in the x flux using NSCBC + var c_int = c + int3d{1, 0, 0} + + -- Thermo-chemical quantities + var MixW_bnd = MIX.GetMolarWeightFromXi( BC [c ].MolarFracs, mix) + var Yi_bnd = MIX.GetMassFractions(MixW_bnd, BC [c ].MolarFracs, mix) + var MixW_int = MIX.GetMolarWeightFromXi( BCst[c_int].MolarFracs, mix) + var Yi_int = MIX.GetMassFractions(MixW_int, BCst[c_int].MolarFracs, mix) + var Cp_bnd = MIX.GetHeatCapacity(BC[c].temperature, Yi_bnd, mix) + + -- characteristic velocity leaving the domain + var lambda_1 = BC[c].velocity[0] - BC[c].SoS + var lambda = BC[c].velocity[0] + + -- compute amplitudes of waves + var dp_dx = [OP.emitderivLeftBCBase(rexpr BC [c ].gradX end, + rexpr BC [c ].pressure end, + rexpr BCst[c_int].pressure end)] + var du_dx = BC[c].velocityGradientX[0] + var dY_dx : double[nSpec] + for i=0, nSpec do + dY_dx[i] = [OP.emitderivLeftBCBase(rexpr BC[c].gradX end, + rexpr Yi_bnd[i] end, + rexpr Yi_int[i] end)] + end + + var L1 = lambda_1*(dp_dx - BC[c].rho*BC[c].SoS*du_dx) + var LS : double[nSpec] + for i=0, nSpec do + LS[i] = lambda*(dY_dx[i]) + end + var LN = L1 - 2*BC[c].rho*BC[c].SoS*BC[c].dudtBoundary + + var L2 = BC[c].dTdtBoundary/BC[c].temperature + +(LN+L1)/(2.0*BC[c].rho*Cp_bnd*BC[c].temperature) + for i=0, nSpec do + L2 -= MixW_bnd/MIX.GetSpeciesMolarWeight(i, mix)*LS[i] + end + L2 *= -BC[c].rho*BC[c].SoS*BC[c].SoS + + -- update RHS of transport equation for boundary cell + var d1 = (0.5*(L1+LN)-L2)/(BC[c].SoS*BC[c].SoS) + var dS = LS + + -- Set RHS to update the density in the ghost inflow cells + for i=0, nSpec do + BC[c].Conserved_t[i] -= d1*Yi_bnd[i] + BC[c].rho*dS[i] + end + end + end +end + +-- Adds NSCBC fluxes to the outflow cells +function Exports.mkUpdateUsingFluxNSCBCOutflow(dir) + local UpdateUsingFluxNSCBCOutflow + local sigma = 0.25 + + if dir == "xPos" then + + __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task UpdateUsingFluxNSCBCOutflow(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d)), + mix : MIX.Mixture, + MaxMach : double, + LengthScale : double, + Pinf : double) + where + reads(Fluid.gradX), + reads(Fluid.{rho, mu, SoS}), + reads(Fluid.[Primitives]), + reads(Fluid.Conserved), + reads(Fluid.{velocityGradientX, velocityGradientY, velocityGradientZ}), + reads(Fluid.{MolarFracs, pressure, velocity}), + reads(Fluid.{rho, mu}), + reads(Fluid.{velocityGradientX, velocityGradientY, velocityGradientZ}), + reads writes atomic(Fluid.Conserved_t) + do + var BC = Fluid_BC[0] + var BCst = Fluid_BC[1] + + __demand(__openmp) + for c in BC do + -- Add in the x fluxes using NSCBC for outflow + var c_int = c + int3d{-1, 0, 0} + + -- Thermo-chemical quantities + var MixW_bnd = MIX.GetMolarWeightFromXi( BC [c ].MolarFracs, mix) + var Yi_bnd = MIX.GetMassFractions(MixW_bnd, BC [c ].MolarFracs, mix) + var MixW_int = MIX.GetMolarWeightFromXi( BCst[c_int].MolarFracs, mix) + var Yi_int = MIX.GetMassFractions(MixW_int, BCst[c_int].MolarFracs, mix) + var Cp_bnd = MIX.GetHeatCapacity(BC[c].temperature, Yi_bnd, mix) + + var drho_dx = [OP.emitderivRightBCBase(rexpr BC [c ].gradX end, + rexpr BCst[c_int].rho end, + rexpr BC [c ].rho end)] + var dp_dx = [OP.emitderivRightBCBase(rexpr BC [c ].gradX end, + rexpr BCst[c_int].pressure end, + rexpr BC [c ].pressure end)] + var du_dx = BC[c].velocityGradientX[0] + var dv_dx = BC[c].velocityGradientX[1] + var dw_dx = BC[c].velocityGradientX[2] + var dY_dx : double[nSpec] + for i=0, nSpec do + dY_dx[i] = [OP.emitderivRightBCBase(rexpr BC[c].gradX end, + rexpr Yi_int[i] end, + rexpr Yi_bnd[i] end)] + end + + var lambda_1 = BC[c].velocity[0] - BC[c].SoS + var lambda = BC[c].velocity[0] + var lambda_N = BC[c].velocity[0] + BC[c].SoS + + var L1 : double + if lambda_1 > 0 then + -- We are supersonic + L1 = lambda_1*(dp_dx - BC[c].rho*BC[c].SoS*du_dx) + else + -- It is either a subsonic or partially subsonic outlet + var K = sigma*(1.0-MaxMach*MaxMach)*BC[c].SoS/LengthScale + if MaxMach > 0.99 then + -- This means that MaxMach > 1.0 + -- Use the local Mach number for partialy supersonic outflows + K = sigma*(BC[c].SoS-(BC[c].velocity[0]*BC[c].velocity[0])/BC[c].SoS)/LengthScale + end + L1 = K*(BC[c].pressure - Pinf) + end + + var L2 = lambda*(dp_dx - BC[c].SoS*BC[c].SoS*drho_dx) + var L3 = lambda*(dv_dx) + var L4 = lambda*(dw_dx) + var LS : double[nSpec] + for i=0, nSpec do + LS[i] = lambda*(dY_dx[i]) + end + var LN = lambda_N*(dp_dx + BC[c].rho*BC[c].SoS*du_dx) + + var d1 = (0.5*(LN + L1) - L2)/(BC[c].SoS*BC[c].SoS) + var d2 = (LN - L1)/(2.0*BC[c].rho*BC[c].SoS) + var d3 = L3 + var d4 = L4 + var dS = LS + var dN = L2/(BC[c].SoS*BC[c].SoS) + + var tau11_bnd = BC[c].mu*(4.0*BC[c].velocityGradientX[0] - 2.0*BC[c].velocityGradientY[1] - 2.0*BC[c].velocityGradientZ[2])/3.0 + var tau21_bnd = BC[c].mu*(BC[c].velocityGradientX[1] + BC[c].velocityGradientY[0]) + var tau31_bnd = BC[c].mu*(BC[c].velocityGradientX[2] + BC[c].velocityGradientZ[0]) + + var tau11_int = BCst[c_int].mu*(4.0*BCst[c_int].velocityGradientX[0] - 2.0*BCst[c_int].velocityGradientY[1] - 2.0*BCst[c_int].velocityGradientZ[2])/3.0 + + -- Diffusion in momentum equations + var dtau11_dx = [OP.emitderivRightBCBase(rexpr BC[c].gradX end, rexpr tau11_int end, rexpr tau11_bnd end)] + + -- Source in energy equation + var energy_term_x = [OP.emitderivRightBCBase(rexpr BC[c].gradX end, + rexpr BCst[c_int].velocity[0]*tau11_int end, + rexpr BC [c ].velocity[0]*tau11_bnd end)] + + BC[c].velocityGradientX[1]*tau21_bnd + + BC[c].velocityGradientX[2]*tau31_bnd + + -- Update the RHS of conservation equations with x fluxes + for i=0, nSpec do + BC[c].Conserved_t[i] -= d1*Yi_bnd[i] + BC[c].rho*dS[i] + end + BC[c].Conserved_t[irU+0] -= BC[c].velocity[0]*d1 + BC[c].rho*d2 - dtau11_dx + BC[c].Conserved_t[irU+1] -= BC[c].velocity[1]*d1 + BC[c].rho*d3 + BC[c].Conserved_t[irU+2] -= BC[c].velocity[2]*d1 + BC[c].rho*d4 + BC[c].Conserved_t[irE] -= (BC[c].Conserved[irE] + BC[c].pressure)*d1/BC[c].rho + + BC[c].Conserved[irU+0]*d2 + + BC[c].Conserved[irU+1]*d3 + + BC[c].Conserved[irU+2]*d4 + + Cp_bnd*BC[c].temperature*dN + - energy_term_x + for i=0, nSpec do + var dedYi = MIX.GetSpecificInternalEnergy(i, BC[c].temperature, mix) + BC[c].Conserved_t[irE] -= BC[c].rho*dedYi*dS[i] + end + end + end + + elseif dir == "yPos" then + + __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task UpdateUsingFluxNSCBCOutflow(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_BC : partition(disjoint, Fluid, ispace(int1d)), + mix : MIX.Mixture, + MaxMach : double, + LengthScale : double, + Pinf : double) + where + reads(Fluid.gradY), + reads(Fluid.{rho, mu, SoS}), + reads(Fluid.[Primitives]), + reads(Fluid.Conserved), + reads(Fluid.{velocityGradientX, velocityGradientY, velocityGradientZ}), + reads(Fluid.{MolarFracs, pressure, velocity}), + reads(Fluid.{rho, mu}), + reads(Fluid.{velocityGradientX, velocityGradientY, velocityGradientZ}), + reads writes atomic(Fluid.Conserved_t) + do + var BC = Fluid_BC[0] + var BCst = Fluid_BC[1] + + __demand(__openmp) + for c in BC do + -- Add in the x fluxes using NSCBC for outflow + var c_int = c + int3d{ 0,-1, 0} + + -- Thermo-chemical quantities + var MixW_bnd = MIX.GetMolarWeightFromXi( BC [c ].MolarFracs, mix) + var Yi_bnd = MIX.GetMassFractions(MixW_bnd, BC [c ].MolarFracs, mix) + var MixW_int = MIX.GetMolarWeightFromXi( BCst[c_int].MolarFracs, mix) + var Yi_int = MIX.GetMassFractions(MixW_int, BCst[c_int].MolarFracs, mix) + var Cp_bnd = MIX.GetHeatCapacity(BC[c].temperature, Yi_bnd, mix) + + var drho_dy = [OP.emitderivRightBCBase(rexpr BC [c ].gradY end, + rexpr BCst[c_int].rho end, + rexpr BC [c ].rho end)] + var dp_dy = [OP.emitderivRightBCBase(rexpr BC [c ].gradY end, + rexpr BCst[c_int].pressure end, + rexpr BC [c ].pressure end)] + var du_dy = BC[c].velocityGradientY[0] + var dv_dy = BC[c].velocityGradientY[1] + var dw_dy = BC[c].velocityGradientY[2] + var dY_dy : double[nSpec] + for i=0, nSpec do + dY_dy[i] = [OP.emitderivRightBCBase(rexpr BC[c].gradY end, + rexpr Yi_int[i] end, + rexpr Yi_bnd[i] end)] + end + + var lambda_1 = BC[c].velocity[1] - BC[c].SoS + var lambda = BC[c].velocity[1] + var lambda_N = BC[c].velocity[1] + BC[c].SoS + + var L1 : double + if lambda_1 > 0 then + -- We are supersonic + L1 = lambda_1*(dp_dy - BC[c].rho*BC[c].SoS*dv_dy) + else + -- It is either a subsonic or partially subsonic outlet + var K = sigma*(1.0-MaxMach*MaxMach)*BC[c].SoS/LengthScale + if MaxMach > 0.99 then + -- This means that MaxMach[0] > 1.0 + -- Use the local Mach number for partialy supersonic outflows + K = sigma*(BC[c].SoS-(BC[c].velocity[1]*BC[c].velocity[1])/BC[c].SoS)/LengthScale + end + L1 = K*(BC[c].pressure - Pinf) + end + + var L2 = lambda*(du_dy) + var L3 = lambda*(dp_dy - BC[c].SoS*BC[c].SoS*drho_dy) + var L4 = lambda*(dw_dy) + var LS : double[nSpec] + for i=0, nSpec do + LS[i] = lambda*(dY_dy[i]) + end + var LN = lambda_N*(dp_dy + BC[c].rho*BC[c].SoS*dv_dy) + + var d1 = (0.5*(LN + L1) - L3)/(BC[c].SoS*BC[c].SoS) + var d2 = L2 + var d3 = (LN - L1)/(2.0*BC[c].rho*BC[c].SoS) + var d4 = L4 + var dS = LS + var dN = L3/(BC[c].SoS*BC[c].SoS) + + var tau12_bnd = BC[c].mu*(BC[c].velocityGradientY[0] + BC[c].velocityGradientX[1]) + var tau22_bnd = BC[c].mu*(4.0*BC[c].velocityGradientY[1] - 2.0*BC[c].velocityGradientX[0] - 2.0*BC[c].velocityGradientZ[2])/3.0 + var tau32_bnd = BC[c].mu*(BC[c].velocityGradientY[2] + BC[c].velocityGradientZ[1]) + + var tau22_int = BCst[c_int].mu*(4.0*BCst[c_int].velocityGradientY[1] - 2.0*BCst[c_int].velocityGradientX[0] - 2.0*BCst[c_int].velocityGradientZ[2])/3.0 + + -- Diffusion in momentum equations + var dtau22_dy = [OP.emitderivRightBCBase(rexpr BC[c].gradY end, rexpr tau22_int end, rexpr tau22_bnd end)] + + -- Source in energy equation + var energy_term_y = [OP.emitderivRightBCBase(rexpr BC[c].gradY end, + rexpr BCst[c_int].velocity[1]*tau22_int end, + rexpr BC [c ].velocity[1]*tau22_bnd end)] + + BC[c].velocityGradientY[0]*tau12_bnd + + BC[c].velocityGradientY[2]*tau32_bnd + + -- Update the RHS of conservation equations with x fluxes + for i=0, nSpec do + BC[c].Conserved_t[i] -= d1*Yi_bnd[i] + BC[c].rho*dS[i] + end + BC[c].Conserved_t[irU+0] -= BC[c].velocity[0]*d1 + BC[c].rho*d2 + BC[c].Conserved_t[irU+1] -= BC[c].velocity[1]*d1 + BC[c].rho*d3 - dtau22_dy + BC[c].Conserved_t[irU+2] -= BC[c].velocity[2]*d1 + BC[c].rho*d4 + BC[c].Conserved_t[irE] -= (BC[c].Conserved[irE] + BC[c].pressure)*d1/BC[c].rho + + BC[c].Conserved[irU+0]*d2 + + BC[c].Conserved[irU+1]*d3 + + BC[c].Conserved[irU+2]*d4 + + Cp_bnd*BC[c].temperature*dN + - energy_term_y + for i=0, nSpec do + var dedYi = MIX.GetSpecificInternalEnergy(i, BC[c].temperature, mix) + BC[c].Conserved_t[irE] -= BC[c].rho*dedYi*dS[i] + end + end + end + end + return UpdateUsingFluxNSCBCOutflow +end + +------------------------------------------------------------------------------- +-- FORCING ROUTINES +------------------------------------------------------------------------------- + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.AddBodyForces(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + Flow_bodyForce : double[3]) +where + reads(Fluid.{rho, velocity}), + reads writes atomic(Fluid.Conserved_t) +do + __demand(__openmp) + for c in ModCells do + for i=0, 3 do + Fluid[c].Conserved_t[irU+i] += Fluid[c].rho*Flow_bodyForce[i] + end + Fluid[c].Conserved_t[irE] += Fluid[c].rho*MACRO.dot(Flow_bodyForce, Fluid[c].velocity) + end +end + +------------------------------------------------------------------------------- +-- CORRECTION ROUTINES +------------------------------------------------------------------------------- + +local __demand(__inline) +task isValid(Conserved : double[nEq], + mix : MIX.Mixture) + var valid = [UTIL.mkArrayConstant(nSpec+1, true)]; + var rhoYi : double[nSpec] + for i=0, nSpec do + if Conserved[i] < 0.0 then valid[i] = false end + rhoYi[i] = Conserved[i] + end + var rho = MIX.GetRhoFromRhoYi(rhoYi) + var Yi = MIX.GetYi(rho, rhoYi) + var rhoInv = 1.0/rho + var velocity = array(Conserved[irU+0]*rhoInv, + Conserved[irU+1]*rhoInv, + Conserved[irU+2]*rhoInv) + var kineticEnergy = (0.5*MACRO.dot(velocity, velocity)) + var InternalEnergy = Conserved[irE]*rhoInv - kineticEnergy + valid[nSpec] = MIX.isValidInternalEnergy(InternalEnergy, Yi, mix) + return valid +end + +Exports.mkCorrectUsingFlux = terralib.memoize(function(dir) + local CorrectUsingFlux + + local ind + local Flux + local mk_cm1 + local mk_cp1 + if (dir == "x") then + ind = 0 + Flux = "FluxXCorr" + mk_cm1 = function(c, b) return rexpr (c + {-1, 0, 0}) % b end end + mk_cp1 = function(c, b) return rexpr (c + { 1, 0, 0}) % b end end + elseif (dir == "y") then + ind = 1 + Flux = "FluxYCorr" + mk_cm1 = function(c, b) return rexpr (c + { 0,-1, 0}) % b end end + mk_cp1 = function(c, b) return rexpr (c + { 0, 1, 0}) % b end end + elseif (dir == "z") then + ind = 2 + Flux = "FluxZCorr" + mk_cm1 = function(c, b) return rexpr (c + { 0, 0,-1}) % b end end + mk_cp1 = function(c, b) return rexpr (c + { 0, 0, 1}) % b end end + else assert(false) end + + __demand(__parallel, __cuda, __leaf) + task CorrectUsingFlux(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + Fluid_bounds : rect3d, + mix : MIX.Mixture) + where + ModCells <= Fluid, + reads(Fluid.cellWidth), + reads(Fluid.Conserved_hat), + reads(Fluid.[Flux]), + reads writes atomic(Fluid.Conserved_t) + do + __demand(__openmp) + for c in ModCells do + -- Stencil + var cm1 = [mk_cm1(rexpr c end, rexpr Fluid_bounds end)]; + var cp1 = [mk_cp1(rexpr c end, rexpr Fluid_bounds end)]; + + -- Do derivatives need to be corrected? + var correctC = false + var correctCM1 = false + + var valid_cm1 = isValid(Fluid[cm1].Conserved_hat, [mix]) + var valid_c = isValid(Fluid[c ].Conserved_hat, [mix]) + var valid_cp1 = isValid(Fluid[cp1].Conserved_hat, [mix]) + + for i=0, nSpec+1 do + if not (valid_cp1[i] and valid_c[i]) then correctC = true end + if not (valid_cm1[i] and valid_c[i]) then correctCM1 = true end + end + + -- Correct using Flux on i-1 face + if correctCM1 then + -- Correct time derivatives using fluxes between cm1 and c + var CellWidthInv = 1.0/Fluid[c].cellWidth[ind] + if not (valid_cm1[nSpec] and valid_c[nSpec]) then + -- Temeperature is going south + -- Correct everything + for i=0, nEq do + Fluid[c].Conserved_t[i] -= Fluid[cm1].[Flux][i]*CellWidthInv + end + else + for i=0, nSpec do + if not (valid_cm1[i] and valid_c[i]) then + -- Correct single species flux + Fluid[c].Conserved_t[i] -= Fluid[cm1].[Flux][i]*CellWidthInv + end + end + end + end + + -- Correct using Flux on i face + if correctC then + -- Correct time derivatives using fluxes between c and cp1 + var CellWidthInv = 1.0/Fluid[c].cellWidth[ind] + if not (valid_cp1[nSpec] and valid_c[nSpec]) then + -- Temeperature is going south + -- Correct everything + for i=0, nEq do + Fluid[c].Conserved_t[i] += Fluid[c].[Flux][i]*CellWidthInv + end + else + for i=0, nSpec do + if not (valid_cp1[i] and valid_c[i]) then + -- Correct single species flux + Fluid[c].Conserved_t[i] += Fluid[c].[Flux][i]*CellWidthInv + end + end + end + end + end + end + return CorrectUsingFlux +end) + +return Exports end + diff --git a/src/prometeo_rk.rg b/src/prometeo_rk.rg new file mode 100644 index 0000000..de91daf --- /dev/null +++ b/src/prometeo_rk.rg @@ -0,0 +1,148 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(nEq, Fluid_columns) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local UTIL = require 'util-desugared' +local CONST = require "prometeo_const" + +-- Runge-Kutta coeffients +local RK_C = CONST.RK_C + +------------------------------------------------------------------------------- +-- RK ROUTINES +------------------------------------------------------------------------------- + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.InitializeTemporaries(Fluid : region(ispace(int3d), Fluid_columns)) +where + reads(Fluid.Conserved), + writes(Fluid.Conserved_old) +do + __demand(__openmp) + for c in Fluid do + Fluid[c].Conserved_old = Fluid[c].Conserved + end +end + +Exports.mkInitializeTimeDerivatives = terralib.memoize(function(Integrator_implicitChemistry) + local InitializeTimeDerivatives + if Integrator_implicitChemistry then + __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task InitializeTimeDerivatives(Fluid : region(ispace(int3d), Fluid_columns)) + where + reads(Fluid.Conserved_t_old), + writes(Fluid.Conserved_t) + do + __demand(__openmp) + for c in Fluid do + Fluid[c].Conserved_t = (-Fluid[c].Conserved_t_old) + end + end + else + __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task InitializeTimeDerivatives(Fluid : region(ispace(int3d), Fluid_columns)) + where + writes(Fluid.Conserved_t) + do + __demand(__openmp) + for c in Fluid do + Fluid[c].Conserved_t = [UTIL.mkArrayConstant(nEq, rexpr 0.0 end)] + end + end + end + return InitializeTimeDerivatives +end) + +Exports.mkUpdateVarsPred = terralib.memoize(function(STAGE) + local UpdateVars + __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task UpdateVars(Fluid : region(ispace(int3d), Fluid_columns), + Integrator_deltaTime : double, + Integrator_implicitChemistry : bool) + where + reads(Fluid.Conserved_old), + reads(Fluid.Conserved_t), + reads(Fluid.Conserved), + writes(Fluid.Conserved_hat) + do + var dt = Integrator_deltaTime + if Integrator_implicitChemistry then + dt *= 0.5 + end + __demand(__openmp) + for c in Fluid do + -- Set provvisional values for next substep + var Conserved_hat : double[nEq] + for i=0, nEq do + Conserved_hat[i] = [RK_C[STAGE][1]] * Fluid[c].Conserved_old[i] + + [RK_C[STAGE][2]] * Fluid[c].Conserved[i] + + [RK_C[STAGE][3]] * Fluid[c].Conserved_t[i] * dt + end + Fluid[c].Conserved_hat = Conserved_hat + end + end + return UpdateVars +end) + +Exports.mkUpdateVarsCorr = terralib.memoize(function(STAGE) + local UpdateVars + __demand(__cuda, __leaf) -- MANUALLY PARALLELIZED + task UpdateVars(Fluid : region(ispace(int3d), Fluid_columns), + Integrator_deltaTime : double, + Integrator_implicitChemistry : bool) + where + reads(Fluid.Conserved_old), + reads(Fluid.Conserved_t), + reads writes(Fluid.Conserved) + do + var dt = Integrator_deltaTime + if Integrator_implicitChemistry then + dt *= 0.5 + end + __demand(__openmp) + for c in Fluid do + -- Set values for next substep + for i=0, nEq do + Fluid[c].Conserved[i] = [RK_C[STAGE][1]] * Fluid[c].Conserved_old[i] + + [RK_C[STAGE][2]] * Fluid[c].Conserved[i] + + [RK_C[STAGE][3]] * Fluid[c].Conserved_t[i] * dt + end + end + end + return UpdateVars +end) + +return Exports end + diff --git a/src/prometeo_stat.rg b/src/prometeo_stat.rg new file mode 100644 index 0000000..7f982e2 --- /dev/null +++ b/src/prometeo_stat.rg @@ -0,0 +1,210 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(MIX, Fluid_columns) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local CONST = require "prometeo_const" +local MACRO = require "prometeo_macro" + +local fabs = regentlib.fabs(double) + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture +local irU = CONST.GetirU(MIX) -- Index of the momentum in Conserved vector +local irE = CONST.GetirE(MIX) -- Index of the total energy density in Conserved vector +local nEq = CONST.GetnEq(MIX) -- Total number of unknowns for the implicit solver + +------------------------------------------------------------------------------- +-- AVERAGING ROUTINES +------------------------------------------------------------------------------- + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.CalculateInteriorVolume(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns)) +where + reads(Fluid.cellWidth) +do + var acc = 0.0 + __demand(__openmp) + for c in ModCells do + acc += Fluid[c].cellWidth[0]*Fluid[c].cellWidth[1]*Fluid[c].cellWidth[2] + end + return acc +end + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.CalculateAveragePressure(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns)) +where + reads(Fluid.{cellWidth,pressure}) +do + var acc = 0.0 + __demand(__openmp) + for c in ModCells do + var cellVolume = Fluid[c].cellWidth[0]*Fluid[c].cellWidth[1]*Fluid[c].cellWidth[2] + acc += Fluid[c].pressure*cellVolume + end + return acc +end + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.CalculateAverageTemperature(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns)) +where + reads(Fluid.{cellWidth,temperature}) +do + var acc = 0.0 + __demand(__openmp) + for c in ModCells do + var cellVolume = Fluid[c].cellWidth[0]*Fluid[c].cellWidth[1]*Fluid[c].cellWidth[2] + acc += Fluid[c].temperature*cellVolume + end + return acc +end + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.CalculateAverageKineticEnergy(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns)) +where + reads(Fluid.{cellWidth, rho, velocity}) +do + var acc = 0.0 + __demand(__openmp) + for c in ModCells do + var cellVolume = Fluid[c].cellWidth[0]*Fluid[c].cellWidth[1]*Fluid[c].cellWidth[2] + var kineticEnergy = 0.5*Fluid[c].rho*MACRO.dot(Fluid[c].velocity, Fluid[c].velocity) + acc += kineticEnergy*cellVolume + end + return acc +end + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.CalculateAverageRhoU(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + dir : int) +where + reads(Fluid.{cellWidth, Conserved}) +do + var acc = 0.0 + __demand(__openmp) + for c in ModCells do + var cellVolume = Fluid[c].cellWidth[0]*Fluid[c].cellWidth[1]*Fluid[c].cellWidth[2] + acc += Fluid[c].Conserved[irU+dir]*cellVolume + end + return acc +end + +--__demand(__parallel, __cuda) +--task CalculateAverageDissipation(Fluid : region(ispace(int3d), Fluid_columns), +-- Grid_xBnum : int32, Grid_xNum : int32, +-- Grid_yBnum : int32, Grid_yNum : int32, +-- Grid_zBnum : int32, Grid_zNum : int32) +--where +-- reads(Fluid.{cellWidth, dissipation}) +--do +-- var acc = 0.0 +-- __demand(__openmp) +-- for c in Fluid do +-- var cellVolume = c.cellWidth[0]*c.cellWidth[1]*c.cellWidth[2] +-- acc += Fluid[c].dissipation*cellVolume +-- end +-- return acc +--end +-- +--__demand(__parallel, __cuda) +--task CalculateAverageK(Fluid : region(ispace(int3d), Fluid_columns), +-- Grid_xBnum : int32, Grid_xNum : int32, +-- Grid_yBnum : int32, Grid_yNum : int32, +-- Grid_zBnum : int32, Grid_zNum : int32) +--where +-- reads(Fluid.{cellWidth, rho, velocity}) +--do +-- var acc = 0.0 +-- __demand(__openmp) +-- for c in Fluid do +-- var cellVolume = c.cellWidth[0]*c.cellWidth[1]*c.cellWidth[2] +-- acc += 0.5*Fluid[c].rho*MACRO.dot(Fluid[c].velocity, Fluid[c].velocity)*cellVolume +-- end +-- return acc +--end +-- +--__demand(__parallel, __cuda) +--task CalculateMinTemperature(Fluid : region(ispace(int3d), Fluid_columns), +-- Grid_xBnum : int32, Grid_xNum : int32, +-- Grid_yBnum : int32, Grid_yNum : int32, +-- Grid_zBnum : int32, Grid_zNum : int32) +--where +-- reads(Fluid.temperature) +--do +-- var acc = math.huge +-- __demand(__openmp) +-- for c in Fluid do +-- acc min= Fluid[c].temperature +-- end +-- return acc +--end +-- +--__demand(__parallel, __cuda) +--task CalculateMaxTemperature(Fluid : region(ispace(int3d), Fluid_columns), +-- Grid_xBnum : int32, Grid_xNum : int32, +-- Grid_yBnum : int32, Grid_yNum : int32, +-- Grid_zBnum : int32, Grid_zNum : int32) +--where +-- reads(Fluid.temperature) +--do +-- var acc = -math.huge +-- __demand(__openmp) +-- for c in Fluid do +-- acc max= Fluid[c].temperature +-- end +-- return acc +--end + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.CalculateMaxMachNumber(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + dir : int) +where + reads(Fluid.{velocity, SoS}) +do + var acc = -math.huge + __demand(__openmp) + for c in ModCells do + acc max= fabs(Fluid[c].velocity[dir])/Fluid[c].SoS + end + return acc +end + +return Exports end + diff --git a/src/prometeo_variables.rg b/src/prometeo_variables.rg new file mode 100644 index 0000000..24e0bf1 --- /dev/null +++ b/src/prometeo_variables.rg @@ -0,0 +1,193 @@ +-- Copyright (c) "2019, by Stanford University +-- Developer: Mario Di Renzo +-- Affiliation: Center for Turbulence Research, Stanford University +-- URL: https://ctr.stanford.edu +-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020). +-- HTR solver: An open-source exascale-oriented task-based +-- multi-GPU high-order code for hypersonic aerothermodynamics. +-- Computer Physics Communications (In Press), 107262" +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * 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. +-- +-- 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 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. + +import "regent" + +return function(SCHEMA, MIX, Fluid_columns) local Exports = {} + +------------------------------------------------------------------------------- +-- IMPORTS +------------------------------------------------------------------------------- +local CONST = require "prometeo_const" +local MACRO = require "prometeo_macro" +local OP = require "prometeo_operators" + +-- Variable indices +local nSpec = MIX.nSpec -- Number of species composing the mixture +local irU = CONST.GetirU(MIX) -- Index of the momentum in Conserved vector +local irE = CONST.GetirE(MIX) -- Index of the total energy density in Conserved vector +local nEq = CONST.GetnEq(MIX) -- Total number of unknowns for the implicit solver + +local Primitives = CONST.Primitives +local Properties = CONST.Properties + +------------------------------------------------------------------------------- +-- MIXTURE PROPERTIES ROUTINES +------------------------------------------------------------------------------- + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.UpdatePropertiesFromPrimitive(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + mix : MIX.Mixture) +where + ModCells <= Fluid, + reads(Fluid.[Primitives]), + writes(Fluid.[Properties]) +do + __demand(__openmp) + for c in ModCells do + var MixW = MIX.GetMolarWeightFromXi(Fluid[c].MolarFracs, mix) + Fluid[c].rho = MIX.GetRho(Fluid[c].pressure, Fluid[c].temperature, MixW, mix) + Fluid[c].mu = MIX.GetViscosity( Fluid[c].temperature, Fluid[c].MolarFracs, mix) + Fluid[c].lam = MIX.GetHeatConductivity(Fluid[c].temperature, Fluid[c].MolarFracs, mix) + Fluid[c].Di = MIX.GetDiffusivity(Fluid[c].pressure, Fluid[c].temperature, MixW, Fluid[c].MolarFracs, mix) + var Yi = MIX.GetMassFractions(MixW, Fluid[c].MolarFracs, mix) + var gamma = MIX.GetGamma(Fluid[c].temperature, MixW, Yi, mix) + Fluid[c].SoS = MIX.GetSpeedOfSound(Fluid[c].temperature, gamma, MixW, mix) + end +end + +------------------------------------------------------------------------------- +-- CONSERVED TO PRIMITIVE/PRIMITIVE TO CONSERVED ROUTINES +------------------------------------------------------------------------------- + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.UpdateConservedFromPrimitive(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + mix : MIX.Mixture) +where + reads(Fluid.[Primitives]), + reads(Fluid.rho), + writes(Fluid.Conserved) +do + __demand(__openmp) + for c in ModCells do + var MixW = MIX.GetMolarWeightFromXi(Fluid[c].MolarFracs, mix) + var Yi = MIX.GetMassFractions(MixW, Fluid[c].MolarFracs, mix) + var rhoYi = MIX.GetRhoYiFromYi(Fluid[c].rho, Yi) + var Conserved : double[nEq] + for i=0, nSpec do + Conserved[i] = rhoYi[i] + end + for i=0, 3 do + Conserved[i+irU] = Fluid[c].rho*Fluid[c].velocity[i] + end + Conserved[irE] = (Fluid[c].rho*(0.5*MACRO.dot(Fluid[c].velocity, Fluid[c].velocity) + + MIX.GetInternalEnergy(Fluid[c].temperature, Yi, mix))) + -- TODO this trick is needed because of the bug in the write privileges in regent + Fluid[c].Conserved = Conserved + end +end + +__demand(__cuda, __leaf) -- MANUALLY PARALLELIZED +task Exports.UpdatePrimitiveFromConserved(Fluid : region(ispace(int3d), Fluid_columns), + ModCells : region(ispace(int3d), Fluid_columns), + mix : MIX.Mixture) +where + reads(Fluid.Conserved), + reads(Fluid.temperature), + writes(Fluid.[Primitives]) +do + __demand(__openmp) + for c in ModCells do + var rhoYi : double[nSpec] + for i=0, nSpec do + rhoYi[i] = Fluid[c].Conserved[i] + end + var rho = MIX.GetRhoFromRhoYi(rhoYi) + var Yi = MIX.GetYi(rho, rhoYi) + Yi = MIX.ClipYi(Yi) + var MixW = MIX.GetMolarWeightFromYi(Yi, mix) + Fluid[c].MolarFracs = MIX.GetMolarFractions(MixW, Yi, mix) + var rhoInv = 1.0/rho + var velocity = array(Fluid[c].Conserved[irU+0]*rhoInv, + Fluid[c].Conserved[irU+1]*rhoInv, + Fluid[c].Conserved[irU+2]*rhoInv) + Fluid[c].velocity = velocity + var kineticEnergy = (0.5*MACRO.dot(velocity, velocity)) + var InternalEnergy = Fluid[c].Conserved[irE]*rhoInv - kineticEnergy + Fluid[c].temperature = MIX.GetTFromInternalEnergy(InternalEnergy, Fluid[c].temperature, Yi, mix) + Fluid[c].pressure = MIX.GetPFromRhoAndT(rho, MixW, Fluid[c].temperature) + end +end + +------------------------------------------------------------------------------- +-- GRADIENT ROUTINES +------------------------------------------------------------------------------- + +__demand(__parallel, __cuda, __leaf) +task Exports.GetVelocityGradients(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_bounds : rect3d) +where + reads(Fluid.{gradX, gradY, gradZ}), + reads(Fluid.velocity), + writes(Fluid.{velocityGradientX, velocityGradientY, velocityGradientZ}) +do + __demand(__openmp) + for c in Fluid do + + -- X direction + var cm1_x = (c+{-1, 0, 0}) % Fluid_bounds + var cp1_x = (c+{ 1, 0, 0}) % Fluid_bounds + Fluid[c].velocityGradientX = MACRO.vv_add(MACRO.vs_mul(MACRO.vv_sub(Fluid[c ].velocity, Fluid[cm1_x].velocity), Fluid[c].gradX[0]), + MACRO.vs_mul(MACRO.vv_sub(Fluid[cp1_x].velocity, Fluid[c ].velocity), Fluid[c].gradX[1])) + + -- Y direction + var cm1_y = (c+{ 0,-1, 0}) % Fluid_bounds + var cp1_y = (c+{ 0, 1, 0}) % Fluid_bounds + Fluid[c].velocityGradientY = MACRO.vv_add(MACRO.vs_mul(MACRO.vv_sub(Fluid[c ].velocity, Fluid[cm1_y].velocity), Fluid[c].gradY[0]), + MACRO.vs_mul(MACRO.vv_sub(Fluid[cp1_y].velocity, Fluid[c ].velocity), Fluid[c].gradY[1])) + + + -- Z direction + var cm1_z = (c+{ 0, 0,-1}) % Fluid_bounds + var cp1_z = (c+{ 0, 0, 1}) % Fluid_bounds + Fluid[c].velocityGradientZ = MACRO.vv_add(MACRO.vs_mul(MACRO.vv_sub(Fluid[c ].velocity, Fluid[cm1_z].velocity), Fluid[c].gradZ[0]), + MACRO.vs_mul(MACRO.vv_sub(Fluid[cp1_z].velocity, Fluid[c ].velocity), Fluid[c].gradZ[1])) + end +end + +__demand(__parallel, __cuda, __leaf) +task Exports.GetTemperatureGradients(Fluid : region(ispace(int3d), Fluid_columns), + Fluid_bounds : rect3d) +where + reads(Fluid.{gradX, gradY, gradZ}), + reads(Fluid.temperature), + writes(Fluid.temperatureGradient) +do + __demand(__openmp) + for c in Fluid do + Fluid[c].temperatureGradient = array([OP.emitXderiv(rexpr Fluid end, 'temperature', c, rexpr Fluid_bounds end)], + [OP.emitYderiv(rexpr Fluid end, 'temperature', c, rexpr Fluid_bounds end)], + [OP.emitZderiv(rexpr Fluid end, 'temperature', c, rexpr Fluid_bounds end)]) + end +end + +return Exports end + diff --git a/src/quartz.slurm b/src/quartz.slurm new file mode 100644 index 0000000..6219b4a --- /dev/null +++ b/src/quartz.slurm @@ -0,0 +1,21 @@ +#!/bin/bash -eu + +#MSUB -N prometeo +#MSUB -l partition=quartz + +USE_CUDA=0 +CORES_PER_NODE=38 +RAM_PER_NODE=100000 + +# 128GB RAM per node +# 2 NUMA domains per node +# 18 cores per NUMA domain +# 2-way SMT per core + +source "$HTR_DIR"/src/jobscript_shared.sh + +export OMPI_MCA_mtl="^psm,psm2" +srun -n "$NUM_RANKS" --tasks-per-node "$RANKS_PER_NODE" --cpu_bind none --mpibind=off \ + -x LD_LIBRARY_PATH -x HTR_DIR -x REALM_BACKTRACE -x LEGION_FREEZE_ON_ERROR\ + $COMMAND + diff --git a/src/run.sh b/src/run.sh new file mode 100644 index 0000000..f6b041b --- /dev/null +++ b/src/run.sh @@ -0,0 +1,168 @@ +#!/bin/bash -eu + +############################################################################### +# Helper functions +############################################################################### + +function quit { + echo "$1" >&2 + exit 1 +} + +############################################################################### +# Derived options +############################################################################### + +# We build the command line in a string before executing it, and it's very hard +# to get this to work if the executable name contains spaces, so we punt. +if [[ "$EXECUTABLE" != "${EXECUTABLE%[[:space:]]*}" ]]; then + quit "Cannot handle spaces in executable name" +fi + +# Command-line arguments are passed directly to the job script. We need to +# accept multiple arguments separated by whitespace, and pass them through the +# environment. It is very hard to properly handle spaces in arguments in this +# mode, so we punt. +for (( i = 1; i <= $#; i++ )); do + if [[ "${!i}" != "${!i%[[:space:]]*}" ]]; then + quit "Cannot handle spaces in command line arguments" + fi +done +export ARGS=$@ + +export WALLTIME="$(printf "%02d:%02d:00" $((MINUTES/60)) $((MINUTES%60)))" + +if [ "$(uname)" == "Darwin" ]; then + export DYLD_LIBRARY_PATH="${DYLD_LIBRARY_PATH:-}:$LEGION_DIR/bindings/regent/" + if [[ ! -z "${HDF_ROOT:-}" ]]; then + export DYLD_LIBRARY_PATH="${DYLD_LIBRARY_PATH:-}:$HDF_ROOT/lib" + fi +else + export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}:$LEGION_DIR/bindings/regent/" + if [[ ! -z "${HDF_ROOT:-}" ]]; then + export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}:$HDF_ROOT/lib" + fi +fi + + +# Make sure the number of requested ranks is divisible by the number of nodes. +export NUM_NODES=$(( NUM_RANKS / RANKS_PER_NODE )) +if (( NUM_RANKS % RANKS_PER_NODE > 0 )); then + export NUM_NODES=$(( NUM_NODES + 1 )) +fi + +export NUM_RANKS=$(( NUM_NODES * RANKS_PER_NODE )) + +export LOCAL_RUN=0 + +export LEGION_FREEZE_ON_ERROR="$DEBUG" + +############################################################################### +# Machine-specific handling +############################################################################### + +function run_lassen { + GROUP="${GROUP:-stanford}" + export QUEUE="${QUEUE:-pbatch}" + DEPS= + if [[ ! -z "$AFTER" ]]; then + DEPS="-w done($AFTER)" + fi + bsub -G "$GROUP" \ + -nnodes "$NUM_NODES" -W "$MINUTES" -q "$QUEUE" $DEPS \ + "$HTR_DIR"/src/lassen.lsf +} + +function run_certainty { + export QUEUE="${QUEUE:-gpu}" + RESOURCES= + if [[ "$QUEUE" == "gpu" ]]; then + RESOURCES="gpu:4" + fi + EXCLUDED="$(paste -sd ',' "$HTR_DIR"/src/blacklist/certainty.txt)" + DEPS= + if [[ ! -z "$AFTER" ]]; then + DEPS="-d afterok:$AFTER" + fi + sbatch --export=ALL \ + -N "$NUM_RANKS" -t "$WALLTIME" -p "$QUEUE" --gres="$RESOURCES" $DEPS \ + --exclude="$EXCLUDED" \ + "$HTR_DIR"/src/certainty.slurm +} + +function run_sapling { + # Allocate up to 2 nodes, from n0002 up to n0003 + if (( NUM_RANKS == 1 )); then + NODES="n0002" + elif (( NUM_RANKS == 2 )); then + NODES="n0002,n0003" + else + quit "Too many nodes requested" + fi + # Synthesize final command + CORES_PER_NODE=12 + RAM_PER_NODE=30000 + GPUS_PER_NODE=2 + FB_PER_GPU=5000 + source "$HTR_DIR"/src/jobscript_shared.sh + # Emit final command + mpiexec -H "$NODES" --bind-to none \ + -x LD_LIBRARY_PATH -x HTR_DIR -x REALM_BACKTRACE -x LEGION_FREEZE_ON_ERROR \ + $COMMAND + # Resources: + # 40230MB RAM per node + # 2 NUMA domains per node + # 6 cores per NUMA domain + # 2-way SMT per core + # 2 Tesla C2070 GPUs per node + # 6GB FB per GPU +} + +function run_quartz { + export QUEUE="${QUEUE:-pbatch}" + DEPS= + if [[ ! -z "$AFTER" ]]; then + DEPS="-d afterok:$AFTER" + fi + sbatch --export=ALL \ + -N "$NUM_RANKS" -t "$WALLTIME" -p "$QUEUE" $DEPS \ + -J prometeo \ + "$HTR_DIR"/src/quartz.slurm + # Resources: + # 128GB RAM per node + # 2 NUMA domains per node + # 18 cores per NUMA domain +} + +function run_local { + if (( NUM_NODES > 1 )); then + quit "Too many nodes requested" + fi + # Overrides for local, non-GPU run + LOCAL_RUN=1 + USE_CUDA=0 + RESERVED_CORES=2 + # Synthesize final command + CORES_PER_NODE="$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}')" + RAM_PER_NODE="$(free -m | head -2 | tail -1 | awk '{print $2}')" + RAM_PER_NODE=$(( RAM_PER_NODE / 2 )) + source "$HTR_DIR"/src/jobscript_shared.sh + $COMMAND +} + +############################################################################### +# Switch on machine +############################################################################### + +if [[ "$(uname -n)" == *"lassen"* ]]; then + run_lassen +elif [[ "$(uname -n)" == *"certainty"* ]]; then + run_certainty +elif [[ "$(uname -n)" == *"sapling"* ]]; then + run_sapling +elif [[ "$(uname -n)" == *"quartz"* ]]; then + run_quartz +else + echo 'Hostname not recognized; assuming local machine run w/o GPUs' + run_local +fi diff --git a/src/util.rg b/src/util.rg new file mode 100644 index 0000000..5b34dc9 --- /dev/null +++ b/src/util.rg @@ -0,0 +1,871 @@ +import 'regent' + +local Exports = {} + +local C = terralib.includecstring([[ +#include +#include +#include +#include +#include +]]) + +------------------------------------------------------------------------------- +-- Arrays +------------------------------------------------------------------------------- + +-- N, val -> array(val, val, ..., val) +function Exports.mkArrayConstant(N, val) + local vals = terralib.newlist() + for i = 1,N do + vals:insert(val) + end + return rexpr array([vals]) end +end + +------------------------------------------------------------------------------- +-- Numeric +------------------------------------------------------------------------------- + +-- A -> bool +function Exports.isPosInt(x) + return type(x) == 'number' and x == math.floor(x) and x > 0 +end + +------------------------------------------------------------------------------- +-- Tables +------------------------------------------------------------------------------- + +-- table -> bool +function Exports.isEmpty(tbl) + if not tbl then + return true + end + for _,_ in pairs(tbl) do + return false + end + return true +end + +-- map(K,V) -> K* +function Exports.keys(tbl) + local res = terralib.newlist() + for k,v in pairs(tbl) do + res:insert(k) + end + return res +end + +-- T*, (T -> bool) -> bool +function Exports.all(list, pred) + assert(terralib.israwlist(list)) + for _,x in ipairs(list) do + if not pred(x) then return false end + end + return true +end + +-- T*, (T -> bool) -> bool +function Exports.any(list, pred) + assert(terralib.israwlist(list)) + for _,x in ipairs(list) do + if pred(x) then return true end + end + return false +end + +-- table -> table +function Exports.copyTable(tbl) + local cpy = {} + for k,v in pairs(tbl) do cpy[k] = v end + return cpy +end + +-- table -> int +function Exports.tableSize(tbl) + local size = 0 + for _,_ in pairs(tbl) do + size = size + 1 + end + return size +end + +------------------------------------------------------------------------------- +-- Lists +------------------------------------------------------------------------------- + +local TerraList = getmetatable(terralib.newlist()) + +-- (T -> bool) -> bool +function TerraList:all(pred) + return Exports.all(self, pred) +end + +-- (T -> bool) -> bool +function TerraList:any(pred) + return Exports.any(self, pred) +end + +-- () -> T* +function TerraList:copy() + return self:map(function(x) return x end) +end + +-- T -> int? +function TerraList:find(x) + for i,elem in ipairs(self) do + if elem == x then + return i + end + end + return nil +end + +-- () -> set(T) +function TerraList:toSet() + local set = {} + for _,elem in ipairs(self) do + set[elem] = true + end + return set +end + +-- string? -> string +function TerraList:join(sep) + sep = sep or ' ' + local res = '' + for i,elem in ipairs(self) do + if i > 1 then + res = res..sep + end + res = res..tostring(elem) + end + return res +end + +-- () -> T* +function TerraList:reverse() + local res = terralib.newlist() + for i = #self, 1, -1 do + res:insert(self[i]) + end + return res +end + +-- () -> T +function TerraList:pop() + local res = self[#self] + self[#self] = nil + return res +end + +-- int, (() -> T) -> T* +function Exports.generate(n, generator) + local res = terralib.newlist() + for i = 1,n do + res:insert(generator()) + end + return res +end + +-- () -> T* +function TerraList:flatten(res) + res = res or terralib.newlist() + for _,e in ipairs(self) do + if terralib.israwlist(e) then + e:flatten(res) + else + res:insert(e) + end + end + return res +end + +-- int, int -> T* +function Exports.range(first, last) + local res = terralib.newlist() + for i = first,last do + res:insert(i) + end + return res +end + +------------------------------------------------------------------------------- +-- Sets +------------------------------------------------------------------------------- + +-- set(T) -> T* +function Exports.setToList(set) + local list = terralib.newlist() + for e,_ in pairs(set) do + list:insert(e) + end + return list +end + +-- T* -> set(T) +function Exports.listToSet(list) + local set = {} + for _,e in ipairs(list) do + set[e] = true + end + return set +end + +-- set(T) -> T +function Exports.setPop(set) + local elem + for e,_ in pairs(set) do + elem = e + break + end + set[elem] = nil + return elem +end + +-- set(T), T* -> set(T) +function Exports.setSubList(set, list) + local res = Exports.copyTable(set) + for _,e in ipairs(list) do + res[e] = nil + end + return res +end + +------------------------------------------------------------------------------- +-- Strings +------------------------------------------------------------------------------- + +-- string -> string* +function string:split(sep) + local fields = terralib.newlist() + local pattern = string.format("([^%s]+)", sep) + self:gsub(pattern, function(c) fields:insert(c) end) + return fields +end + +-- string -> bool +function string:startswith(subStr) + return self:sub(1, subStr:len()) == subStr +end + +-- string -> bool +function string:endswith(subStr) + return self:sub(self:len() - subStr:len() + 1, self:len()) == subStr +end + +------------------------------------------------------------------------------- +-- Terra type helpers +------------------------------------------------------------------------------- + +-- {string,terralib.type} | {field:string,type:terralib.type} -> +-- string, terralib.type +function Exports.parseStructEntry(entry) + if terralib.israwlist(entry) + and #entry == 2 + and type(entry[1]) == 'string' + and terralib.types.istype(entry[2]) then + return entry[1], entry[2] + elseif type(entry) == 'table' + and entry.field + and entry.type then + return entry.field, entry.type + else assert(false) end +end + +-- map(terralib.type,string) +local cBaseType = { + [int] = 'int', + [int8] = 'int8_t', + [int16] = 'int16_t', + [int32] = 'int32_t', + [int64] = 'int64_t', + [uint] = 'unsigned', + [uint8] = 'uint8_t', + [uint16] = 'uint16_t', + [uint32] = 'uint32_t', + [uint64] = 'uint64_t', + [bool] = 'bool', + [float] = 'float', + [double] = 'double', +} + +-- terralib.type, bool, string -> string, string +local function typeDecl(typ, cStyle, indent) + if typ:isarray() then + local decl, mods = typeDecl(typ.type, cStyle, indent) + decl = cStyle and decl or decl..'['..tostring(typ.N)..']' + mods = cStyle and '['..tostring(typ.N)..']'..mods or mods + return decl, mods + elseif typ:isstruct() then + if typ.name:startswith('anon') then + return Exports.prettyPrintStruct(typ, cStyle, indent), '' + elseif cStyle then + return ('struct '..typ.name), '' + else + return typ.name, '' + end + elseif typ:isprimitive() then + return (cStyle and cBaseType[typ] or tostring(typ)), '' + else assert(false) end +end + +-- terralib.struct, bool?, string? -> string +function Exports.prettyPrintStruct(s, cStyle, indent) + indent = indent or '' + local lines = terralib.newlist() + local isUnion = false + local entries = s.entries + if #entries == 1 and terralib.israwlist(entries[1]) then + isUnion = true + entries = entries[1] + end + local name = s.name:startswith('anon') and '' or s.name + local open = + (cStyle and isUnion) and ('union '..name..' {') or + (cStyle and not isUnion) and ('struct '..name..' {') or + (not cStyle and isUnion) and ('struct '..name..' { union {') or + (not cStyle and not isUnion) and ('struct '..name..' {') or + assert(false) + lines:insert(open) + for _,e in ipairs(entries) do + local name, typ = Exports.parseStructEntry(e) + local s1 = cStyle and '' or (name..' : ') + local s3 = cStyle and (' '..name) or '' + local s2, s4 = typeDecl(typ, cStyle, indent..' ') + lines:insert(indent..' '..s1..s2..s3..s4..';') + end + local close = + (cStyle and isUnion) and '}' or + (cStyle and not isUnion) and '}' or + (not cStyle and isUnion) and '} }' or + (not cStyle and not isUnion) and '}' or + assert(false) + lines:insert(indent..close) + return lines:join('\n') +end + +-- terralib.struct -> string* +function Exports.fieldNames(s) + return s.entries:map(function(e) + local name,typ = Exports.parseStructEntry(e) + return name + end) +end + +-- string, terralib.struct, string*, map(string,terralib.type)? +-- -> terralib.struct +function Exports.deriveStruct(newName, origStruct, keptFlds, addedFlds) + addedFlds = addedFlds or {} + local origFlds = {} + for _,e in ipairs(origStruct.entries) do + local name,typ = Exports.parseStructEntry(e) + assert(not addedFlds[name]) + origFlds[name] = typ + end + local newStruct = terralib.types.newstruct(newName) + for _,name in ipairs(keptFlds) do + local typ = assert(origFlds[name]) + newStruct.entries:insert({name,typ}) + end + for name,typ in pairs(addedFlds) do + newStruct.entries:insert({name,typ}) + end + return newStruct +end + +------------------------------------------------------------------------------- +-- Filesystem +------------------------------------------------------------------------------- + +terra Exports.createDir(name : &int8) + var mode = 493 -- octal 0755 = rwxr-xr-x + var res = C.mkdir(name, mode) + if res < 0 then + var stderr = C.fdopen(2, 'w') + C.fprintf(stderr, 'Cannot create directory %s: ', name) + C.fflush(stderr) + C.perror('') + C.fflush(stderr) + C.exit(1) + end +end + +terra Exports.openFile(name : &int8, mode : &int8) : &C.FILE + var file = C.fopen(name, mode) + if file == nil then + var stderr = C.fdopen(2, 'w') + C.fprintf(stderr, 'Cannot open file %s in mode "%s": ', name, mode) + C.fflush(stderr) + C.perror('') + C.fflush(stderr) + C.exit(1) + end + return file +end + +------------------------------------------------------------------------------- +-- Graphs +------------------------------------------------------------------------------- + +-- Graph(T) = map(T,T*) + +-- Graph(T) -> set(T) +function Exports.getNodes(graph) + local nodes = {} -- set(T) + for src,tgts in pairs(graph) do + nodes[src] = true + for _,tgt in ipairs(tgts) do + nodes[tgt] = true + end + end + return nodes +end + +-- Graph(T) -> T* +function Exports.revTopoSort(graph) + local unmarked = Exports.getNodes(graph) -- set(T) + local tempMarked = {} -- set(T) + local permMarked = {} -- set(T) + local res = terralib.newlist() -- T* + local function visit(src) + if permMarked[src] then + return true + end + if tempMarked[src] then + return false + end + tempMarked[src] = true + for _,tgt in ipairs(graph[src] or {}) do + visit(tgt) + end + permMarked[src] = true + res:insert(src) + return true + end + while not Exports.isEmpty(unmarked) do + if not visit(Exports.setPop(unmarked)) then + return nil + end + end + return res +end + +------------------------------------------------------------------------------- +-- Regent metaprogramming +------------------------------------------------------------------------------- + +-- regentlib.symbol, int, regentlib.rexpr, terralib.type -> regentlib.rquote +function Exports.emitRegionTagAttach(r, tag, value, typ) + return rquote + var info : typ[1] + info[0] = value + regentlib.c.legion_logical_region_attach_semantic_information( + __runtime(), __raw(r), tag, [&typ](info), [sizeof(typ)], false) + end +end + +-- regentlib.symbol, string, terralib.type -> regentlib.rquote +function Exports.emitPartitionNameAttach(p, name) + return rquote + regentlib.c.legion_logical_partition_attach_name( + __runtime(), __raw(p), name, false) + end +end + +-- intXd, intXd, terralib.struct -> regentlib.task +function Exports.mkPartitionByTile(r_istype, cs_istype, fs, name) + local partitionByTile + local p = regentlib.newsymbol(name) + if r_istype == int4d and cs_istype == int4d then + __demand(__inline) + task partitionByTile(r : region(ispace(int4d), fs), + cs : ispace(int4d), + halo : int4d, + offset : int4d) + var Nx = r.bounds.hi.x - 2*halo.x + 1; var ntx = cs.bounds.hi.x + 1 + var Ny = r.bounds.hi.y - 2*halo.y + 1; var nty = cs.bounds.hi.y + 1 + var Nz = r.bounds.hi.z - 2*halo.z + 1; var ntz = cs.bounds.hi.z + 1 + var Nw = r.bounds.hi.w - 2*halo.w + 1; var ntw = cs.bounds.hi.w + 1 + regentlib.assert(r.bounds.lo == int4d{0,0,0,0}, "Can only partition root region") + regentlib.assert(Nx % ntx == 0, "Uneven partitioning on x") + regentlib.assert(Ny % nty == 0, "Uneven partitioning on y") + regentlib.assert(Nz % ntz == 0, "Uneven partitioning on z") + regentlib.assert(Nw % ntw == 0, "Uneven partitioning on w") + regentlib.assert(-ntx <= offset.x and offset.x <= ntx, "offset.x too large") + regentlib.assert(-nty <= offset.y and offset.y <= nty, "offset.y too large") + regentlib.assert(-ntz <= offset.z and offset.z <= ntz, "offset.z too large") + regentlib.assert(-ntw <= offset.w and offset.w <= ntw, "offset.w too large") + var coloring = regentlib.c.legion_domain_point_coloring_create() + for c_real in cs do + var c = (c_real - offset + {ntx,nty,ntz,ntw}) % {ntx,nty,ntz,ntw} + var rect = rect4d{ + lo = int4d{halo.x + (Nx/ntx)*(c.x), + halo.y + (Ny/nty)*(c.y), + halo.z + (Nz/ntz)*(c.z), + halo.w + (Nz/ntz)*(c.w)}, + hi = int4d{halo.x + (Nx/ntx)*(c.x+1) - 1, + halo.y + (Ny/nty)*(c.y+1) - 1, + halo.z + (Nz/ntz)*(c.z+1) - 1, + halo.w + (Nw/ntw)*(c.w+1) - 1}} + if c.x == 0 then rect.lo.x -= halo.x end + if c.y == 0 then rect.lo.y -= halo.y end + if c.z == 0 then rect.lo.z -= halo.z end + if c.w == 0 then rect.lo.w -= halo.w end + if c.x == ntx-1 then rect.hi.x += halo.x end + if c.y == nty-1 then rect.hi.y += halo.y end + if c.z == ntz-1 then rect.hi.z += halo.z end + if c.w == ntw-1 then rect.hi.w += halo.w end + regentlib.c.legion_domain_point_coloring_color_domain(coloring, c_real, rect) + end + var [p] = partition(disjoint, r, coloring, cs) + regentlib.c.legion_domain_point_coloring_destroy(coloring) + return [p] + end + elseif r_istype == int3d and cs_istype == int3d then + __demand(__inline) + task partitionByTile(r : region(ispace(int3d), fs), + cs : ispace(int3d), + halo : int3d, + offset : int3d) + var Nx = r.bounds.hi.x - 2*halo.x + 1; var ntx = cs.bounds.hi.x + 1 + var Ny = r.bounds.hi.y - 2*halo.y + 1; var nty = cs.bounds.hi.y + 1 + var Nz = r.bounds.hi.z - 2*halo.z + 1; var ntz = cs.bounds.hi.z + 1 + regentlib.assert(r.bounds.lo == int3d{0,0,0}, "Can only partition root region") + regentlib.assert(Nx % ntx == 0, "Uneven partitioning on x") + regentlib.assert(Ny % nty == 0, "Uneven partitioning on y") + regentlib.assert(Nz % ntz == 0, "Uneven partitioning on z") + regentlib.assert(-ntx <= offset.x and offset.x <= ntx, "offset.x too large") + regentlib.assert(-nty <= offset.y and offset.y <= nty, "offset.y too large") + regentlib.assert(-ntz <= offset.z and offset.z <= ntz, "offset.z too large") + var coloring = regentlib.c.legion_domain_point_coloring_create() + for c_real in cs do + var c = (c_real - offset + {ntx,nty,ntz}) % {ntx,nty,ntz} + var rect = rect3d{ + lo = int3d{halo.x + (Nx/ntx)*(c.x), + halo.y + (Ny/nty)*(c.y), + halo.z + (Nz/ntz)*(c.z)}, + hi = int3d{halo.x + (Nx/ntx)*(c.x+1) - 1, + halo.y + (Ny/nty)*(c.y+1) - 1, + halo.z + (Nz/ntz)*(c.z+1) - 1}} + if c.x == 0 then rect.lo.x -= halo.x end + if c.y == 0 then rect.lo.y -= halo.y end + if c.z == 0 then rect.lo.z -= halo.z end + if c.x == ntx-1 then rect.hi.x += halo.x end + if c.y == nty-1 then rect.hi.y += halo.y end + if c.z == ntz-1 then rect.hi.z += halo.z end + regentlib.c.legion_domain_point_coloring_color_domain(coloring, c_real, rect) + end + var [p] = partition(disjoint, r, coloring, cs) + regentlib.c.legion_domain_point_coloring_destroy(coloring) + return [p] + end + elseif r_istype == int2d and cs_istype == int2d then + __demand(__inline) + task partitionByTile(r : region(ispace(int2d), fs), + cs : ispace(int2d), + halo : int2d, + offset : int2d) + var Nx = r.bounds.hi.x - 2*halo.x + 1; var ntx = cs.bounds.hi.x + 1 + var Ny = r.bounds.hi.y - 2*halo.y + 1; var nty = cs.bounds.hi.y + 1 + regentlib.assert(r.bounds.lo == int2d{0,0}, "Can only partition root region") + regentlib.assert(Nx % ntx == 0, "Uneven partitioning on x") + regentlib.assert(Ny % nty == 0, "Uneven partitioning on y") + regentlib.assert(-ntx <= offset.x and offset.x <= ntx, "offset.x too large") + regentlib.assert(-nty <= offset.y and offset.y <= nty, "offset.y too large") + var coloring = regentlib.c.legion_domain_point_coloring_create() + for c_real in cs do + var c = (c_real - offset + {ntx,nty}) % {ntx,nty} + var rect = rect2d{ + lo = int2d{halo.x + (Nx/ntx)*(c.x), + halo.y + (Ny/nty)*(c.y)}, + hi = int2d{halo.x + (Nx/ntx)*(c.x+1) - 1, + halo.y + (Ny/nty)*(c.y+1) - 1}} + if c.x == 0 then rect.lo.x -= halo.x end + if c.y == 0 then rect.lo.y -= halo.y end + if c.x == ntx-1 then rect.hi.x += halo.x end + if c.y == nty-1 then rect.hi.y += halo.y end + regentlib.c.legion_domain_point_coloring_color_domain(coloring, c_real, rect) + end + var [p] = partition(disjoint, r, coloring, cs) + regentlib.c.legion_domain_point_coloring_destroy(coloring) + return [p] + end + elseif r_istype == int1d and cs_istype == int3d then + __demand(__inline) + task partitionByTile(r : region(ispace(int1d), fs), + cs : ispace(int3d), + halo : int64, + offset : int3d) + var N = int64(r.bounds.hi - 2*halo + 1) + var ntx = cs.bounds.hi.x + 1 + var nty = cs.bounds.hi.y + 1 + var ntz = cs.bounds.hi.z + 1 + regentlib.assert(int64(r.bounds.lo) == 0, "Can only partition root region") + regentlib.assert(N % (ntx*nty*ntz) == 0, "Uneven partitioning") + regentlib.assert(-ntx <= offset.x and offset.x <= ntx, "offset.x too large") + regentlib.assert(-nty <= offset.y and offset.y <= nty, "offset.y too large") + regentlib.assert(-ntz <= offset.z and offset.z <= ntz, "offset.z too large") + var coloring = regentlib.c.legion_domain_point_coloring_create() + for c_real in cs do + var c = (c_real - offset + {ntx,nty,ntz}) % {ntx,nty,ntz} + var rect = rect1d{ + lo = halo + (N/ntx/nty/ntz)*(c.x*nty*ntz+c.y*ntz+c.z), + hi = halo + (N/ntx/nty/ntz)*(c.x*nty*ntz+c.y*ntz+c.z+1) - 1} + if c.x == 0 and + c.y == 0 and + c.z == 0 then rect.lo -= halo end + if c.x == ntx-1 and + c.y == nty-1 and + c.z == ntz-1 then rect.hi += halo end + regentlib.c.legion_domain_point_coloring_color_domain(coloring, c_real, rect) + end + var [p] = partition(disjoint, r, coloring, cs) + regentlib.c.legion_domain_point_coloring_destroy(coloring) + return [p] + end + else assert(false) end + return partitionByTile +end + +-- intXd, terralib.struct -> regentlib.task +function Exports.mkPartitionIsInteriorOrGhost(r_istype, fs, name) + local partitionIsInteriorOrGhost + local p = regentlib.newsymbol(name) + if r_istype == int3d then + __demand(__inline) + task partitionIsInteriorOrGhost(r : region(ispace(int3d), fs), halo : int3d) + var Nx = r.bounds.hi.x - 2*halo.x + 1 + var Ny = r.bounds.hi.y - 2*halo.y + 1 + var Nz = r.bounds.hi.z - 2*halo.z + 1 + regentlib.assert(r.bounds.lo == int3d{0,0,0}, "Can only partition root region") + var coloring = regentlib.c.legion_domain_point_coloring_create() + + -- Interior points + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(0), rect3d{ + lo = int3d{halo.x, halo.y, halo.z }, + hi = int3d{halo.x+Nx-1, halo.y+Ny-1, halo.z+Nz-1 }}) + + -- xNeg faces + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(1), rect3d{ + lo = int3d{ 0, halo.y, halo.z }, + hi = int3d{ halo.x-1, halo.y+Ny-1, halo.z+Nz-1 }}) + -- xPos faces + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(2), rect3d{ + lo = int3d{ halo.x+Nx, halo.y, halo.z }, + hi = int3d{ r.bounds.hi.x, halo.y+Ny-1, halo.z+Nz-1 }}) + -- yNeg faces + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(3), rect3d{ + lo = int3d{ halo.x, 0, halo.z }, + hi = int3d{ halo.x+Nx-1, halo.y-1, halo.z+Nz-1 }}) + -- yPos faces + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(4), rect3d{ + lo = int3d{ halo.x, halo.y+Ny, halo.z }, + hi = int3d{ halo.x+Nx-1, r.bounds.hi.y, halo.z+Nz-1 }}) + -- zNeg faces + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(5), rect3d{ + lo = int3d{ halo.x, halo.y, 0 }, + hi = int3d{ halo.x+Nx-1, halo.y+Ny-1, halo.z-1 }}) + -- zPos faces + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(6), rect3d{ + lo = int3d{ halo.x, halo.y, halo.z+Nz }, + hi = int3d{ halo.x+Nx-1, halo.y+Ny-1, r.bounds.hi.z }}) + + -- xNeg-yNeg edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(7), rect3d{ + lo = int3d{ 0, 0, halo.z }, + hi = int3d{ halo.x-1, halo.y-1, halo.z+Nz-1 }}) + -- xNeg-zNeg edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(8), rect3d{ + lo = int3d{ 0, halo.y, 0 }, + hi = int3d{ halo.x-1, halo.y+Ny-1, halo.z-1 }}) + -- xNeg-yPos edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(9), rect3d{ + lo = int3d{ 0, halo.y+Ny, halo.z }, + hi = int3d{ halo.x-1, r.bounds.hi.y, halo.z+Nz-1 }}) + -- xNeg-yPos edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(10), rect3d{ + lo = int3d{ 0, halo.y, halo.z+Nz }, + hi = int3d{ halo.x-1, halo.y+Ny-1, r.bounds.hi.z }}) + -- xPos-yNeg edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(11), rect3d{ + lo = int3d{ halo.x+Nx, 0, halo.z }, + hi = int3d{ r.bounds.hi.x, halo.y-1, halo.z+Nz-1 }}) + -- xPos-zNeg edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(12), rect3d{ + lo = int3d{ halo.x+Nx, halo.y, 0 }, + hi = int3d{ r.bounds.hi.x, halo.y+Ny-1, halo.z-1 }}) + -- xPos-yPos edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(13), rect3d{ + lo = int3d{ halo.x+Nx, halo.y+Ny, halo.z }, + hi = int3d{ r.bounds.hi.x, r.bounds.hi.y, halo.z+Nz-1 }}) + -- xPos-yPos edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(14), rect3d{ + lo = int3d{ halo.x+Nx, halo.y, halo.z+Nz }, + hi = int3d{ r.bounds.hi.x, halo.y+Ny-1, r.bounds.hi.z }}) + -- yNeg-zNeg edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(15), rect3d{ + lo = int3d{ halo.x, 0, 0 }, + hi = int3d{ halo.x+Nx-1, halo.y-1, halo.z-1 }}) + -- yNeg-zPos edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(16), rect3d{ + lo = int3d{ halo.x, 0, halo.z+Nz }, + hi = int3d{ halo.x+Nx-1, halo.y-1, r.bounds.hi.z }}) + -- yPos-zNeg edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(17), rect3d{ + lo = int3d{ halo.x, halo.y+Ny, 0 }, + hi = int3d{ halo.x+Nx-1, r.bounds.hi.y, halo.z-1 }}) + -- yPos-zPos edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(18), rect3d{ + lo = int3d{ halo.x, halo.y+Ny, halo.z+Nz }, + hi = int3d{ halo.x+Nx-1, r.bounds.hi.y, r.bounds.hi.z }}) + + -- xNeg-yNeg-zNeg corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(19), rect3d{ + lo = int3d{ 0, 0, 0 }, + hi = int3d{ halo.x-1, halo.y-1, halo.z-1 }}) + -- xNeg-yPos-zNeg corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(20), rect3d{ + lo = int3d{ 0, halo.y+Ny, 0 }, + hi = int3d{ halo.x-1, r.bounds.hi.y, halo.z-1 }}) + -- xNeg-yNeg-zPos corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(21), rect3d{ + lo = int3d{ 0, 0, halo.z+Nz }, + hi = int3d{ halo.x-1, halo.y-1, r.bounds.hi.z }}) + -- xNeg-yPos-zNeg corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(22), rect3d{ + lo = int3d{ 0, halo.y+Ny, halo.z+Nz }, + hi = int3d{ halo.x-1, r.bounds.hi.y, r.bounds.hi.z }}) + -- xPos-yNeg-zNeg corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(23), rect3d{ + lo = int3d{ halo.x+Nx, 0, 0 }, + hi = int3d{ r.bounds.hi.x, halo.y-1, halo.z-1 }}) + -- xPos-yPos-zNeg corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(24), rect3d{ + lo = int3d{ halo.x+Nx, halo.y+Ny, 0 }, + hi = int3d{ r.bounds.hi.x, r.bounds.hi.y, halo.z-1 }}) + -- xPos-yNeg-zPos corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(25), rect3d{ + lo = int3d{ halo.x+Nx, 0, halo.z+Nz }, + hi = int3d{ r.bounds.hi.x, halo.y-1, r.bounds.hi.z }}) + -- xPos-yPos-zNeg corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(26), rect3d{ + lo = int3d{ halo.x+Nx, halo.y+Ny, halo.z+Nz }, + hi = int3d{ r.bounds.hi.x, r.bounds.hi.y, r.bounds.hi.z }}) + + var [p] = partition(disjoint, r, coloring, ispace(int1d,27)) + regentlib.c.legion_domain_point_coloring_destroy(coloring) + return [p] + end + elseif r_istype == int2d then + __demand(__inline) + task partitionIsInteriorOrGhost(r : region(ispace(int2d), fs), halo : int2d) + var Nx = r.bounds.hi.x - 2*halo.x + 1 + var Ny = r.bounds.hi.y - 2*halo.y + 1 + regentlib.assert(r.bounds.lo == int2d{0,0}, "Can only partition root region") + var coloring = regentlib.c.legion_domain_point_coloring_create() + + -- Interior points + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(0), rect2d{ + lo = int2d{halo.x, halo.y }, + hi = int2d{halo.x+Nx-1, halo.y+Ny-1 }}) + + -- xNeg edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(1), rect2d{ + lo = int2d{0, halo.y }, + hi = int2d{halo.x-1, halo.y+Ny-1 }}) + -- xPos edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(2), rect2d{ + lo = int2d{halo.x+Nx, halo.y }, + hi = int2d{r.bounds.hi.x, halo.y+Ny-1 }}) + -- yNeg edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(3), rect2d{ + lo = int2d{halo.x, 0 }, + hi = int2d{halo.x+Nx-1, halo.y-1, }}) + -- yPos edge + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(4), rect2d{ + lo = int2d{halo.x, halo.y+Ny }, + hi = int2d{halo.x+Nx-1, r.bounds.hi.y }}) + + -- xNeg-yNeg corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(5), rect2d{ + lo = int2d{0, 0 }, + hi = int2d{halo.x-1, halo.y-1 }}) + -- xNeg-yPos corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(6), rect2d{ + lo = int2d{0, halo.y+Ny }, + hi = int2d{halo.x-1, r.bounds.hi.y }}) + -- xPos-yNeg corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(7), rect2d{ + lo = int2d{halo.x+Nx, 0 }, + hi = int2d{r.bounds.hi.x, halo.y-1 }}) + -- xPos-yPos corner + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(8), rect2d{ + lo = int2d{halo.x+Nx, halo.y+Ny }, + hi = int2d{r.bounds.hi.x, r.bounds.hi.y }}) + + var [p] = partition(disjoint, r, coloring, ispace(int1d,9)) + regentlib.c.legion_domain_point_coloring_destroy(coloring) + return [p] + end + elseif r_istype == int1d then + __demand(__inline) + task partitionIsInteriorOrGhost(r : region(ispace(int1d), fs), halo : int64) + var N = int64(r.bounds.hi - 2*halo + 1) + regentlib.assert(r.bounds.lo == 0, "Can only partition root region") + var coloring = regentlib.c.legion_multi_domain_point_coloring_create() + + -- Interior points + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(0), rect1d{ lo = halo, hi = halo+N-1 }) + -- xNeg point + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(1), rect1d{ lo = 0, hi = halo-1 }) + -- xPos point + regentlib.c.legion_domain_point_coloring_color_domain(coloring, int1d(2), rect1d{ lo = halo+N, hi = r.bounds.hi }) + + var [p] = partition(disjoint, r, coloring, ispace(int1d,3)) + regentlib.c.legion_domain_point_coloring_destroy(coloring) + return [p] + end + else assert(false) end + return partitionIsInteriorOrGhost +end + +-- int, string, regentlib.rexpr, regentlib.rexpr -> regentlib.rquote +function Exports.emitArrayReduce(dims, op, lhs, rhs) + -- We decompose each array-type reduction into a sequence of primitive + -- reductions over the array's elements, to make sure the code generator can + -- emit them as atomic operations if needed. + return rquote + var tmp = [rhs]; + @ESCAPE for i = 0,dims-1 do + if op == '+' then @EMIT lhs[i] += tmp[i] @TIME + elseif op == '-' then @EMIT lhs[i] -= tmp[i] @TIME + elseif op == '*' then @EMIT lhs[i] *= tmp[i] @TIME + elseif op == '/' then @EMIT lhs[i] /= tmp[i] @TIME + elseif op == 'max' then @EMIT lhs[i] max= tmp[i] @TIME + elseif op == 'min' then @EMIT lhs[i] min= tmp[i] @TIME + else assert(false) end + end @EPACSE + end +end + +------------------------------------------------------------------------------- +-- Error handling +------------------------------------------------------------------------------- + +-- regentlib.rexpr, string, regentlib.rexpr* -> regentlib.rquote +function Exports.emitAssert(cond, format, ...) + local args = terralib.newlist{...} + return rquote + if not cond then + var stderr = C.fdopen(2, 'w') + C.fprintf(stderr, format, [args]) + C.fflush(stderr) + C.exit(1) + end + end +end + +------------------------------------------------------------------------------- + +return Exports diff --git a/testcases/Blasius/Blasius.json b/testcases/Blasius/Blasius.json new file mode 100644 index 0000000..d27bcf2 --- /dev/null +++ b/testcases/Blasius/Blasius.json @@ -0,0 +1,172 @@ +{ + "Mapping" : { + "tiles" : [1,1,1], + "tilesPerRank" : [1,1,1], + "sampleId" : -1, + "outDir" : "", + "wallTime" : 10000 + }, + + "Grid" : { + "xNum" : 400, + "yNum" : 100, + "zNum" : 1, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 1.0, + "yWidth" : 0.15, + "zWidth" : 0.1, + "xType" : "TanhMinus", + "yType" : "TanhMinus", + "zType" : "Uniform", + "xStretching" : 0.9, + "yStretching" : 0.9, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 200000, + "maxTime" : 20.0, + "cfl" : 0.9, + "fixedDeltaTime" : 4.0e-3, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "NSCBC_Inflow", + "xBCLeftInflowProfile" : { + "type" : "File", + "FileDir" : "InflowProfile", + "Reynolds" : 500, + "velocity" : 10.0 + }, + "xBCLeftP" : 1.01325e5, + "xBCLeftHeat" : { + "type" : "File", + "FileDir" : "InflowProfile", + "temperature" : 300.0 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "NSCBC_Outflow", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : 1.01325e5, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "IsothermalWall", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : 0.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : 300.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "NSCBC_Outflow", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : 1.01325e5, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 287.15, + "gamma" : 1.4, + "prandtl" : 0.71, + "viscosityModel" : "Constant", + "constantVisc" : 5.0e-3, + "powerlawViscRef" : 5.0e-3, + "powerlawTempRef" : 300.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "Uniform", + "restartDir" : "", + "initParams" : [1.01325e5, 300.0, 10.0, 0.0, 0.0], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { "type" : "OFF" } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 10000, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } +} diff --git a/testcases/Blasius/MakeProfile.py b/testcases/Blasius/MakeProfile.py new file mode 100644 index 0000000..b1e8a1b --- /dev/null +++ b/testcases/Blasius/MakeProfile.py @@ -0,0 +1,167 @@ +import numpy as np +import json +import sys +import os +import subprocess +import h5py +from scipy.integrate import odeint +from scipy.optimize import fsolve + +muExp = 0.75 + +############################################################################## +# Read Prometeo Input File # +############################################################################## + +dir_name = os.path.join(os.environ['HTR_DIR'], 'testcases/Blasius') +prometeo_input_file = os.path.join(dir_name, 'Blasius.json') + +with open(prometeo_input_file) as f: + data = json.load(f) + +xNum = data["Grid"]["xNum"] +yNum = data["Grid"]["yNum"] +zNum = data["Grid"]["zNum"] +xWidth = data["Grid"]["xWidth"] +yWidth = data["Grid"]["yWidth"] +xOrigin = data["Grid"]["origin"][0] +yOrigin = data["Grid"]["origin"][1] +xType = data["Grid"]["xType"] +yType = data["Grid"]["yType"] +xStretching = data["Grid"]["xStretching"] +yStretching = data["Grid"]["yStretching"] + +gamma = data["Flow"]["gamma"] +R = data["Flow"]["gasConstant"] +muRef = data["Flow"]["powerlawViscRef"] +TRef = data["Flow"]["powerlawTempRef"] +Pr = data["Flow"]["prandtl"] + +TInf = data["BC"]["xBCLeftHeat"]["temperature"] +Tw = data["BC"]["xBCLeftHeat"]["temperature"] +P = data["BC"]["xBCLeftP"] +U = data["BC"]["xBCLeftInflowProfile"]["velocity"] +Re = data["BC"]["xBCLeftInflowProfile"]["Reynolds"] + +aInf = np.sqrt(gamma*R*TInf) +MaInf = U/aInf + +RhoInf = P/(R*TInf) +nuInf = muRef*(TInf/TRef)**muExp/RhoInf + +############################################################################## +# Compute grid # +############################################################################## +def GetGrid(Origin, Width, Num, Type, stretching): + if (Type == 'Uniform'): + x = np.linspace(0.0, 1.0, Num+1) + x *= Width + x += Origin + elif (Type == 'TanhMinus'): + x = np.linspace(-1.0, 0.0, Num+1) + x = np.tanh(stretching*x)/np.tanh(stretching) + x = Width*(x+1.0)+Origin + + xc = np.zeros(Num+2) + for i in range(1,Num+1): + xc[i] = 0.5*(x[i-1]+x[i]) + xc[0] = Origin - xc[1] + xc[Num+1] = 2.0*(Origin+Width)-xc[Num] + + return xc + +############################################################################## +# Compute Blasius Solution # +############################################################################## +def GetCBL(): + def CBLFun(U, y): + u, F, h, G, g = U.T + T = 1.0 + 0.5*h*(gamma - 1.0)*MaInf**2 + mu = T**muExp + return [ F/mu, + -0.5*g*F/mu, + Pr*G/mu, + -0.5*Pr*G*g/mu - 2*F**2/mu, + u/T ] + + Np = 100 + eta = np.linspace(0, 25, Np) + u_0 = 0.0 + #F_0 = 0.0 + h_0 = (Tw/TInf-1.0)*2/((gamma - 1.0)*MaInf**2) + #G_0 = 0.0 + g_0 = 0.0 + + def objective(A): + F_0, G_0 = A + U = odeint(CBLFun, [u_0, F_0, h_0, G_0, g_0], eta) + u, F, h, G, g = U.T + return [u[Np-1] - 1.0, h[Np-1]] + + A = fsolve(objective, [0.01, 0.5]) + F_0, G_0 = A + + U = odeint(CBLFun, [u_0, F_0, h_0, G_0, g_0], eta) + u, F, h, G, g = U.T + T = 1.0 + 0.5*h*(gamma - 1.0)*MaInf**2 + v = (eta*u/T - g)*T*0.5 + return eta, u, v, T + +############################################################################## +# Generate y grid that will be used in the solver # +############################################################################## +y = GetGrid(yOrigin, yWidth, yNum, yType, yStretching) + +############################################################################## +# Compute the profile on this grid # +############################################################################## +x = Re*nuInf/U +etaB, uB, vB, TB = GetCBL() +yB = etaB*x/np.sqrt(Re) +uB *= U +vB *= U/np.sqrt(Re) +TB *= TInf + +u = np.interp(y, yB, uB) +v = np.interp(y, yB, vB) +T = np.interp(y, yB, TB) + +############################################################################## +# Print Prometeo Profile # +############################################################################## + +profileDir = os.path.join(dir_name, 'InflowProfile') +exists = os.path.isdir(profileDir) + +if (not exists): + mkdir_command = 'mkdir {}'.format(os.path.expandvars(profileDir)) + try: + subprocess.call(mkdir_command, shell=True) + except OSError: + print("Failed command: {}".format(mkdir_command)) + sys.exit() + +filename = os.path.join(profileDir, '0,0,0-'+str(xNum+1)+','+str(yNum+1)+',0.hdf') + +f = h5py.File(filename, 'w') + +shape = [zNum, yNum+2, xNum+2] +MolarFracs_profile = np.ndarray(shape, dtype=np.dtype('(1,)f8')) +temperature_profile = np.ndarray(shape) +velocity_profile = np.ndarray(shape, dtype=np.dtype('(3,)f8')) +for k in range(0, shape[0]): + for j in range(0, shape[1]): + for i in range(0, shape[2]): + MolarFracs_profile[k,j,i] = [1.0,] + temperature_profile[k,j,i] = T[j] + velocity_profile[k,j,i] = np.array([u[j], v[j], 0]) + +f.create_dataset("MolarFracs_profile", shape=shape, dtype = np.dtype("(1,)f8")) +f.create_dataset("velocity_profile", shape=shape, dtype = np.dtype("(3,)f8")) +f.create_dataset("temperature_profile", shape=shape, dtype = np.dtype("f8")) + +f["MolarFracs_profile" ][:] = MolarFracs_profile +f["temperature_profile"][:] = temperature_profile +f["velocity_profile" ][:] = velocity_profile + +f.close() diff --git a/testcases/Blasius/postProc.py b/testcases/Blasius/postProc.py new file mode 100644 index 0000000..dbd42ca --- /dev/null +++ b/testcases/Blasius/postProc.py @@ -0,0 +1,148 @@ +import numpy as np +import json +#import argparse +import matplotlib.pyplot as plt +import sys +import os +import subprocess +import h5py +from scipy.integrate import odeint +from scipy.optimize import fsolve + +#parser = argparse.ArgumentParser() +#parser.add_argument('-n', '--num_times', type=int, default=4) +#args = parser.parse_args() + +############################################################################## +# Compute Blasius Solution # +############################################################################## +def GetBlasius(): + def BlasiusFun(U, y): + f1, f2, f3 = U + return [ f2, f3, -0.5*f1*f3 ] + + Np = 100 + eta = np.linspace(0, 10, Np) + f1_0 = eta[0] + f2_0 = 0.0 + + def objective(f3_0): + U = odeint(BlasiusFun, [f1_0, f2_0, f3_0], eta) + f1, f2, f3 = U.T + return (f2[Np-1] - 1.0) + + f3_0, = fsolve(objective, 0.5) + + U = odeint(BlasiusFun, [f1_0, f2_0, f3_0], eta) + f1, f2, f3 = U.T + return eta, f2, (f2*eta - f1)*0.5 + + +def process(): + dir_name = os.path.join(os.environ['HTR_DIR'], 'testcases/Blasius') + prometeo_input_file = os.path.join(dir_name, 'Blasius.json') + +############################################################################## +# Read Prometeo Input File # +############################################################################## + + with open(prometeo_input_file) as f: + data = json.load(f) + + xNum = data["Grid"]["xNum"] + yNum = data["Grid"]["yNum"] + xWidth = data["Grid"]["xWidth"] + yWidth = data["Grid"]["yWidth"] + xOrigin = data["Grid"]["origin"][0] + yOrigin = data["Grid"]["origin"][1] + + R = data["Flow"]["gasConstant"] + mu = data["Flow"]["constantVisc"] + + T = data["BC"]["xBCLeftHeat"]["temperature"] + P = data["BC"]["xBCLeftP"] + U = data["BC"]["xBCLeftInflowProfile"]["velocity"] + Re = data["BC"]["xBCLeftInflowProfile"]["Reynolds"] + + Rho = P/(R*T) + nu = mu/Rho + + dt = data["Integrator"]["fixedDeltaTime"] + nstep = int(data["Integrator"]["maxIter"]) + time = dt*nstep + + filename = os.path.join(dir_name, 'sample0/fluid_iter'+str(nstep).zfill(10)+'/0,0,0-'+str(xNum+1)+','+str(yNum+1)+',0.hdf') + exists = os.path.isfile(filename) + + if (not exists): + print('Merging the tile files') + # merge files from different tiles + merge_command = 'python {} {}'.format(os.path.expandvars('$HTR_DIR/scripts/merge.py'), + os.path.join(dir_name, 'sample0/fluid_iter'+str(nstep).zfill(10)+'/*.hdf')) + mv_command = 'mv {} {}'.format('./0,0,0-'+str(xNum+1)+','+str(yNum+1)+',0.hdf', + os.path.join(dir_name, 'sample0/fluid_iter'+str(nstep).zfill(10)+'/')) + + try: + subprocess.call(merge_command, shell=True) + except OSError: + print("Failed command: {}".format(merge_command)) + sys.exit() + + try: + subprocess.call( mv_command, shell=True) + except OSError: + print("Failed command: {}".format(mv_command)) + sys.exit() + +############################################################################## +# Read Prometeo Output Data # +############################################################################## + + f = h5py.File(filename, 'r') + + # Get the data + centerCoordinates = f['centerCoordinates'] + cellWidth = f['cellWidth'] + velocity = f['velocity'] + + # Get simulation data along a line (ignore ghost cells) + x_slice_idx = int(xNum*0.5) + + x0 = centerCoordinates[0,0,0 ][0] - xOrigin + x = centerCoordinates[0,0,x_slice_idx][0] - xOrigin + y = centerCoordinates[0,:,x_slice_idx][:,1] - yOrigin + u = velocity[0,:,x_slice_idx][:,0] + v = velocity[0,:,x_slice_idx][:,1] + + x += Re*nu/U-x0 + Re = U*x/nu + print("Reynolds number: ", Re) + + return y*np.sqrt(Re)/x, u/U ,v*np.sqrt(Re)/U + +etaB, uB, vB = GetBlasius() +eta, u, v = process() + +############################################################################## +# Plot # +############################################################################## + +plt.rcParams.update({'font.size': 16}) + +plt.figure(1) +plt.plot(uB, etaB, 'xk', label='Blasius') +plt.plot( u, eta , '-r', label='HTR solver') +plt.xlabel(r'$u/U_\infty$', fontsize = 20) +plt.ylabel(r'$\eta$' , fontsize = 20) +plt.legend() +plt.savefig('U.eps', bbox_inches='tight') + +plt.figure(2) +plt.plot(vB, etaB, 'xk', label='Blasius') +plt.plot( v, eta , '-r', label='HTR solver') +plt.xlabel(r'$v\sqrt{Re_x}/U_\infty$', fontsize = 20) +plt.ylabel(r'$\eta$' , fontsize = 20) +plt.legend() +plt.savefig('V.eps', bbox_inches='tight') + +plt.show() diff --git a/testcases/Blasius/run.sh b/testcases/Blasius/run.sh new file mode 100644 index 0000000..01c811a --- /dev/null +++ b/testcases/Blasius/run.sh @@ -0,0 +1,3 @@ +rm -rf sample0 slurm* + +USE_CUDA=1 PROFILE=0 QUEUE="gpu" $HTR_DIR/src/prometeo.sh -i Blasius.json diff --git a/testcases/Coleman/Coleman.dat b/testcases/Coleman/Coleman.dat new file mode 100644 index 0000000..e52185a --- /dev/null +++ b/testcases/Coleman/Coleman.dat @@ -0,0 +1,121 @@ +y,,

,,,,,,/,/,/,/,,,,,,,,,, +-0.1000000000E+01, 0.13549E+01, 0.43012E+00, 0.10000E+01, 0.00000E+00, 0.00000E+00, 0.00000E+00,0.10000E+01,0.10000E+01,0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00 +-0.9994772578E+00, 0.13495E+01, 0.43012E+00, 0.10040E+01, 0.63398E-02,-0.93626E-07, 0.14237E-04,0.10028E+01,0.10040E+01,0.63398E-02,-0.11380E-06, 0.14413E-04, 0.26751E-06,0.72501E-07, 0.20169E-07,-0.17634E-06, 0.55722E-05, 0.79456E-09, 0.96598E-06,-0.69862E-08, 0.24092E-05,-0.39763E-08 +-0.9982479675E+00, 0.13374E+01, 0.43012E+00, 0.10131E+01, 0.21153E-01,-0.22893E-06, 0.47569E-04,0.10092E+01,0.10131E+01,0.21126E-01,-0.36423E-06, 0.48220E-04, 0.18395E-04,0.27025E-04, 0.13530E-06,-0.65051E-06, 0.61569E-04, 0.84385E-08, 0.10251E-04,-0.13056E-06, 0.25738E-04,-0.76613E-07 +-0.9963169100E+00, 0.13193E+01, 0.43012E+00, 0.10270E+01, 0.44163E-01,-0.43810E-06, 0.99511E-04,0.10188E+01,0.10270E+01,0.44027E-01,-0.71744E-06, 0.10103E-03, 0.87922E-04,0.13574E-03, 0.27935E-06,-0.15194E-05, 0.26554E-03, 0.45200E-07, 0.41542E-04,-0.94600E-06, 0.10525E-03,-0.54959E-06 +-0.9936855922E+00, 0.12966E+01, 0.43012E+00, 0.10452E+01, 0.75023E-01,-0.13371E-05, 0.16921E-03,0.10314E+01,0.10449E+01,0.74633E-01,-0.11489E-05, 0.17202E-03, 0.24179E-03,0.38955E-03,-0.18822E-06,-0.28143E-05, 0.75621E-03, 0.21567E-06, 0.10907E-03,-0.42810E-05, 0.27873E-03,-0.23992E-05 +-0.9903558897E+00, 0.12706E+01, 0.43012E+00, 0.10668E+01, 0.11328E+00,-0.45101E-05, 0.25515E-03,0.10463E+01,0.10663E+01,0.11244E+00,-0.16515E-05, 0.25962E-03, 0.49696E-03,0.83996E-03,-0.28586E-05,-0.44666E-05, 0.16958E-02, 0.88334E-06, 0.22220E-03,-0.14354E-04, 0.57038E-03,-0.76389E-05 +-0.9863301501E+00, 0.12427E+01, 0.43011E+00, 0.10911E+01, 0.15833E+00,-0.12496E-04, 0.35460E-03,0.10629E+01,0.10903E+01,0.15682E+00,-0.22235E-05, 0.36095E-03, 0.84500E-03,0.15087E-02,-0.10272E-04,-0.63550E-05, 0.32417E-02, 0.29271E-05, 0.38276E-03,-0.38749E-04, 0.97796E-03,-0.19399E-04 +-0.9816112057E+00, 0.12141E+01, 0.43011E+00, 0.11172E+01, 0.20941E+00,-0.28201E-04, 0.46330E-03,0.10805E+01,0.11159E+01,0.20703E+00,-0.28666E-05, 0.47169E-03, 0.12511E-02,0.23748E-02,-0.25334E-04,-0.83877E-05, 0.55016E-02, 0.79478E-05, 0.58570E-03,-0.88240E-04, 0.14673E-02,-0.41343E-04 +-0.9762023741E+00, 0.11859E+01, 0.43009E+00, 0.11440E+01, 0.26546E+00,-0.53866E-04, 0.57582E-03,0.10986E+01,0.11424E+01,0.26209E+00,-0.35986E-05, 0.58637E-03, 0.16621E-02,0.33709E-02,-0.50267E-04,-0.10554E-04, 0.84786E-02, 0.18286E-04, 0.82191E-03,-0.17458E-03, 0.19777E-02,-0.76424E-04 +-0.9701074573E+00, 0.11591E+01, 0.43007E+00, 0.11708E+01, 0.32519E+00,-0.90028E-04, 0.68658E-03,0.11165E+01,0.11688E+01,0.32079E+00,-0.44442E-05, 0.69935E-03, 0.20204E-02,0.43931E-02,-0.85584E-04,-0.12763E-04, 0.12033E-01, 0.36818E-04, 0.10818E-02,-0.30668E-03, 0.24378E-02,-0.12551E-03 +-0.9633307393E+00, 0.11343E+01, 0.43004E+00, 0.11965E+01, 0.38701E+00,-0.13504E-03, 0.79203E-03,0.11336E+01,0.11942E+01,0.38169E+00,-0.54117E-05, 0.80671E-03, 0.22801E-02,0.53248E-02,-0.12962E-03,-0.14673E-04, 0.15890E-01, 0.66613E-04, 0.13575E-02,-0.48685E-03, 0.27861E-02,-0.18665E-03 +-0.9558769829E+00, 0.11119E+01, 0.42999E+00, 0.12205E+01, 0.44927E+00,-0.18538E-03, 0.89134E-03,0.11495E+01,0.12181E+01,0.44320E+00,-0.64798E-05, 0.90704E-03, 0.24172E-02,0.60653E-02,-0.17890E-03,-0.15697E-04, 0.19703E-01, 0.11059E-03, 0.16434E-02,-0.70933E-03, 0.29870E-02,-0.25542E-03 +-0.9477514268E+00, 0.10922E+01, 0.42993E+00, 0.12424E+01, 0.51032E+00,-0.23665E-03, 0.98518E-03,0.11638E+01,0.12400E+01,0.50377E+00,-0.76099E-05, 0.10004E-02, 0.24316E-02,0.65525E-02,-0.22904E-03,-0.15218E-04, 0.23136E-01, 0.17121E-03, 0.19349E-02,-0.96158E-03, 0.30356E-02,-0.32609E-03 +-0.9389597819E+00, 0.10751E+01, 0.42985E+00, 0.12618E+01, 0.56878E+00,-0.28462E-03, 0.10731E-02,0.11765E+01,0.12595E+01,0.56201E+00,-0.87720E-05, 0.10861E-02, 0.23422E-02,0.67697E-02,-0.27585E-03,-0.12944E-04, 0.25939E-01, 0.25023E-03, 0.22272E-02,-0.12276E-02, 0.29525E-02,-0.39298E-03 +-0.9295082270E+00, 0.10605E+01, 0.42975E+00, 0.12787E+01, 0.62354E+00,-0.32608E-03, 0.11503E-02,0.11875E+01,0.12765E+01,0.61680E+00,-0.99656E-05, 0.11595E-02, 0.21773E-02,0.67383E-02,-0.31612E-03,-0.91887E-05, 0.27973E-01, 0.34848E-03, 0.25143E-02,-0.14917E-02, 0.27721E-02,-0.45152E-03 +-0.9194034048E+00, 0.10482E+01, 0.42963E+00, 0.12931E+01, 0.67390E+00,-0.35919E-03, 0.12071E-02,0.11969E+01,0.12911E+01,0.66740E+00,-0.11207E-04, 0.12119E-02, 0.19667E-02,0.65036E-02,-0.34799E-03,-0.48513E-05, 0.29204E-01, 0.46573E-03, 0.27893E-02,-0.17409E-02, 0.25317E-02,-0.49875E-03 +-0.9086524171E+00, 0.10379E+01, 0.42950E+00, 0.13052E+01, 0.71953E+00,-0.38341E-03, 0.12327E-02,0.12048E+01,0.13035E+01,0.71340E+00,-0.12528E-04, 0.12338E-02, 0.17365E-02,0.61202E-02,-0.37089E-03,-0.10516E-05, 0.29677E-01, 0.60067E-03, 0.30448E-02,-0.19664E-02, 0.22644E-02,-0.53343E-03 +-0.8972628198E+00, 0.10293E+01, 0.42935E+00, 0.13155E+01, 0.76034E+00,-0.39915E-03, 0.12180E-02,0.12114E+01,0.13139E+01,0.75470E+00,-0.13981E-04, 0.12165E-02, 0.15062E-02,0.56419E-02,-0.38517E-03, 0.14727E-05, 0.29491E-01, 0.75100E-03, 0.32737E-02,-0.21628E-02, 0.19947E-02,-0.55565E-03 +-0.8852426177E+00, 0.10221E+01, 0.42919E+00, 0.13240E+01, 0.79653E+00,-0.40728E-03, 0.11593E-02,0.12169E+01,0.13227E+01,0.79142E+00,-0.15620E-04, 0.11566E-02, 0.12885E-02,0.51147E-02,-0.39166E-03, 0.26662E-05, 0.28773E-01, 0.91362E-03, 0.34710E-02,-0.23283E-02, 0.17389E-02,-0.56639E-03 +-0.8726002586E+00, 0.10161E+01, 0.42902E+00, 0.13310E+01, 0.82841E+00,-0.40890E-03, 0.10602E-02,0.12215E+01,0.13300E+01,0.82384E+00,-0.17477E-04, 0.10573E-02, 0.10905E-02,0.45737E-02,-0.39142E-03, 0.29590E-05, 0.27657E-01, 0.10848E-02, 0.36351E-02,-0.24624E-02, 0.15056E-02,-0.56711E-03 +-0.8593446278E+00, 0.10111E+01, 0.42885E+00, 0.13370E+01, 0.85642E+00,-0.40516E-03, 0.93134E-03,0.12253E+01,0.13361E+01,0.85238E+00,-0.19508E-04, 0.92866E-03, 0.91531E-03,0.40445E-02,-0.38565E-03, 0.26783E-05, 0.26268E-01, 0.12605E-02, 0.37691E-02,-0.25664E-02, 0.12989E-02,-0.55973E-03 +-0.8454850414E+00, 0.10068E+01, 0.42867E+00, 0.13419E+01, 0.88104E+00,-0.39725E-03, 0.78914E-03,0.12285E+01,0.13412E+01,0.87749E+00,-0.21595E-04, 0.78772E-03, 0.76329E-03,0.35450E-02,-0.37566E-03, 0.14165E-05, 0.24723E-01, 0.14360E-02, 0.38775E-02,-0.26427E-02, 0.11191E-02,-0.54631E-03 +-0.8310312401E+00, 0.10032E+01, 0.42851E+00, 0.13461E+01, 0.90273E+00,-0.38634E-03, 0.65209E-03,0.12312E+01,0.13455E+01,0.89965E+00,-0.23578E-04, 0.65302E-03, 0.63319E-03,0.30864E-02,-0.36276E-03,-0.93581E-06, 0.23127E-01, 0.16067E-02, 0.39617E-02,-0.26952E-02, 0.96473E-03,-0.52874E-03 +-0.8159933821E+00, 0.10001E+01, 0.42835E+00, 0.13496E+01, 0.92194E+00,-0.37332E-03, 0.53375E-03,0.12335E+01,0.13491E+01,0.91927E+00,-0.25348E-04, 0.53680E-03, 0.52307E-03,0.26743E-02,-0.34797E-03,-0.30448E-05, 0.21561E-01, 0.17685E-02, 0.40204E-02,-0.27281E-02, 0.83363E-03,-0.50853E-03 +-0.8003820363E+00, 0.99750E+00, 0.42821E+00, 0.13527E+01, 0.93906E+00,-0.35871E-03, 0.43905E-03,0.12354E+01,0.13522E+01,0.93675E+00,-0.26928E-04, 0.44288E-03, 0.43083E-03,0.23102E-02,-0.33178E-03,-0.38393E-05, 0.20077E-01, 0.19181E-02, 0.40549E-02,-0.27447E-02, 0.72326E-03,-0.48665E-03 +-0.7842081743E+00, 0.99523E+00, 0.42808E+00, 0.13553E+01, 0.95441E+00,-0.34289E-03, 0.37749E-03,0.12371E+01,0.13549E+01,0.95242E+00,-0.28419E-04, 0.38163E-03, 0.35412E-03,0.19925E-02,-0.31447E-03,-0.41384E-05, 0.18700E-01, 0.20530E-02, 0.40692E-02,-0.27470E-02, 0.63044E-03,-0.46382E-03 +-0.7674831634E+00, 0.99327E+00, 0.42797E+00, 0.13575E+01, 0.96830E+00,-0.32634E-03, 0.37060E-03,0.12385E+01,0.13572E+01,0.96658E+00,-0.29902E-04, 0.37521E-03, 0.29053E-03,0.17173E-02,-0.29644E-03,-0.46097E-05, 0.17436E-01, 0.21710E-02, 0.40684E-02,-0.27372E-02, 0.55212E-03,-0.44061E-03 +-0.7502187581E+00, 0.99157E+00, 0.42787E+00, 0.13595E+01, 0.98097E+00,-0.30953E-03, 0.42601E-03,0.12398E+01,0.13593E+01,0.97949E+00,-0.31367E-04, 0.43096E-03, 0.23789E-03,0.14797E-02,-0.27816E-03,-0.49570E-05, 0.16279E-01, 0.22707E-02, 0.40586E-02,-0.27167E-02, 0.48577E-03,-0.41723E-03 +-0.7324270919E+00, 0.99008E+00, 0.42780E+00, 0.13613E+01, 0.99261E+00,-0.29297E-03, 0.52239E-03,0.12409E+01,0.13611E+01,0.99133E+00,-0.32826E-04, 0.52699E-03, 0.19416E-03,0.12748E-02,-0.26014E-03,-0.45991E-05, 0.15219E-01, 0.23505E-02, 0.40440E-02,-0.26863E-02, 0.42903E-03,-0.39382E-03 +-0.7141206690E+00, 0.98878E+00, 0.42774E+00, 0.13628E+01, 0.10034E+01,-0.27700E-03, 0.62372E-03,0.12419E+01,0.13627E+01,0.10023E+01,-0.34302E-04, 0.62727E-03, 0.15751E-03,0.10967E-02,-0.24269E-03,-0.35592E-05, 0.14240E-01, 0.24102E-02, 0.40223E-02,-0.26468E-02, 0.37976E-03,-0.37066E-03 +-0.6953123553E+00, 0.98763E+00, 0.42771E+00, 0.13643E+01, 0.10135E+01,-0.26164E-03, 0.68828E-03,0.12429E+01,0.13642E+01,0.10126E+01,-0.35915E-04, 0.69058E-03, 0.12665E-03,0.94039E-03,-0.22573E-03,-0.23059E-05, 0.13330E-01, 0.24512E-02, 0.39854E-02,-0.25990E-02, 0.33646E-03,-0.34793E-03 +-0.6760153695E+00, 0.98661E+00, 0.42769E+00, 0.13656E+01, 0.10231E+01,-0.24697E-03, 0.68857E-03,0.12437E+01,0.13655E+01,0.10223E+01,-0.37868E-04, 0.68951E-03, 0.10054E-03,0.80320E-03,-0.20910E-03,-0.94368E-06, 0.12492E-01, 0.24753E-02, 0.39302E-02,-0.25440E-02, 0.29807E-03,-0.32578E-03 +-0.6562432737E+00, 0.98570E+00, 0.42768E+00, 0.13668E+01, 0.10323E+01,-0.23308E-03, 0.63726E-03,0.12445E+01,0.13667E+01,0.10316E+01,-0.40244E-04, 0.63715E-03, 0.78422E-04,0.68354E-03,-0.19283E-03, 0.11539E-06, 0.11728E-01, 0.24841E-02, 0.38653E-02,-0.24822E-02, 0.26382E-03,-0.30436E-03 +-0.6360099639E+00, 0.98490E+00, 0.42769E+00, 0.13679E+01, 0.10411E+01,-0.21992E-03, 0.57306E-03,0.12452E+01,0.13679E+01,0.10405E+01,-0.42960E-04, 0.57262E-03, 0.59719E-04,0.57924E-03,-0.17696E-03, 0.43394E-06, 0.11022E-01, 0.24791E-02, 0.37964E-02,-0.24136E-02, 0.23329E-03,-0.28369E-03 +-0.6153296603E+00, 0.98419E+00, 0.42771E+00, 0.13690E+01, 0.10496E+01,-0.20758E-03, 0.52995E-03,0.12459E+01,0.13689E+01,0.10491E+01,-0.45798E-04, 0.52967E-03, 0.44017E-04,0.48850E-03,-0.16178E-03, 0.28254E-06, 0.10365E-01, 0.24619E-02, 0.37225E-02,-0.23397E-02, 0.20614E-03,-0.26390E-03 +-0.5942168971E+00, 0.98357E+00, 0.42774E+00, 0.13699E+01, 0.10580E+01,-0.19630E-03, 0.52729E-03,0.12465E+01,0.13699E+01,0.10576E+01,-0.48533E-04, 0.52706E-03, 0.31097E-04,0.41063E-03,-0.14777E-03, 0.23524E-06, 0.97610E-02, 0.24340E-02, 0.36414E-02,-0.22636E-02, 0.18239E-03,-0.24527E-03 +-0.5726865127E+00, 0.98303E+00, 0.42778E+00, 0.13708E+01, 0.10661E+01,-0.18613E-03, 0.57011E-03,0.12470E+01,0.13708E+01,0.10658E+01,-0.51129E-04, 0.57005E-03, 0.20595E-04,0.34471E-03,-0.13500E-03, 0.63732E-07, 0.92113E-02, 0.23980E-02, 0.35494E-02,-0.21868E-02, 0.16188E-03,-0.22784E-03 +-0.5507536387E+00, 0.98255E+00, 0.42782E+00, 0.13716E+01, 0.10740E+01,-0.17695E-03, 0.65043E-03,0.12475E+01,0.13716E+01,0.10737E+01,-0.53732E-04, 0.65101E-03, 0.12127E-04,0.28939E-03,-0.12322E-03,-0.58285E-06, 0.87150E-02, 0.23563E-02, 0.34507E-02,-0.21093E-02, 0.14410E-03,-0.21135E-03 +-0.5284336899E+00, 0.98214E+00, 0.42787E+00, 0.13723E+01, 0.10817E+01,-0.16875E-03, 0.74628E-03,0.12480E+01,0.13723E+01,0.10815E+01,-0.56540E-04, 0.74748E-03, 0.53329E-05,0.24275E-03,-0.11221E-03,-0.11999E-05, 0.82665E-02, 0.23107E-02, 0.33442E-02,-0.20302E-02, 0.12846E-03,-0.19554E-03 +-0.5057423529E+00, 0.98178E+00, 0.42792E+00, 0.13730E+01, 0.10891E+01,-0.16157E-03, 0.83138E-03,0.12484E+01,0.13730E+01,0.10889E+01,-0.59556E-04, 0.83304E-03,-0.17264E-08,0.20301E-03,-0.10202E-03,-0.16634E-05, 0.78544E-02, 0.22625E-02, 0.32277E-02,-0.19493E-02, 0.11486E-03,-0.18058E-03 +-0.4826955754E+00, 0.98147E+00, 0.42797E+00, 0.13736E+01, 0.10963E+01,-0.15536E-03, 0.89843E-03,0.12488E+01,0.13736E+01,0.10961E+01,-0.62491E-04, 0.90017E-03,-0.41006E-05,0.16913E-03,-0.92868E-04,-0.17459E-05, 0.74729E-02, 0.22134E-02, 0.31058E-02,-0.18668E-02, 0.10328E-03,-0.16682E-03 +-0.4593095548E+00, 0.98120E+00, 0.42802E+00, 0.13741E+01, 0.11032E+01,-0.14989E-03, 0.94822E-03,0.12491E+01,0.13741E+01,0.11030E+01,-0.65277E-04, 0.94942E-03,-0.73048E-05,0.14029E-03,-0.84613E-04,-0.11982E-05, 0.71204E-02, 0.21638E-02, 0.29808E-02,-0.17829E-02, 0.93256E-04,-0.15411E-03 +-0.4356007271E+00, 0.98096E+00, 0.42807E+00, 0.13746E+01, 0.11098E+01,-0.14507E-03, 0.96111E-03,0.12494E+01,0.13746E+01,0.11097E+01,-0.67992E-04, 0.96160E-03,-0.98479E-05,0.11625E-03,-0.77081E-04,-0.48923E-06, 0.67863E-02, 0.21136E-02, 0.28552E-02,-0.16969E-02, 0.84181E-04,-0.14203E-03 +-0.4115857551E+00, 0.98076E+00, 0.42812E+00, 0.13750E+01, 0.11162E+01,-0.14090E-03, 0.92205E-03,0.12497E+01,0.13750E+01,0.11161E+01,-0.70600E-04, 0.92200E-03,-0.11697E-04,0.97129E-04,-0.70297E-04, 0.51310E-07, 0.64630E-02, 0.20623E-02, 0.27305E-02,-0.16089E-02, 0.75929E-04,-0.13039E-03 +-0.3872815168E+00, 0.98059E+00, 0.42817E+00, 0.13754E+01, 0.11224E+01,-0.13721E-03, 0.84535E-03,0.12500E+01,0.13754E+01,0.11224E+01,-0.72965E-04, 0.84499E-03,-0.12891E-04,0.82622E-04,-0.64244E-04, 0.36165E-06, 0.61423E-02, 0.20103E-02, 0.26084E-02,-0.15185E-02, 0.68559E-04,-0.11924E-03 +-0.3627050933E+00, 0.98044E+00, 0.42823E+00, 0.13758E+01, 0.11284E+01,-0.13373E-03, 0.74324E-03,0.12502E+01,0.13758E+01,0.11283E+01,-0.74983E-04, 0.74283E-03,-0.13595E-04,0.72150E-04,-0.58751E-04, 0.40995E-06, 0.58161E-02, 0.19583E-02, 0.24915E-02,-0.14256E-02, 0.62005E-04,-0.10862E-03 +-0.3378737573E+00, 0.98032E+00, 0.42828E+00, 0.13762E+01, 0.11341E+01,-0.13026E-03, 0.61881E-03,0.12504E+01,0.13762E+01,0.11340E+01,-0.76774E-04, 0.61870E-03,-0.13982E-04,0.64839E-04,-0.53490E-04, 0.11034E-06, 0.54892E-02, 0.19063E-02, 0.23791E-02,-0.13316E-02, 0.56075E-04,-0.98330E-04 +-0.3128049603E+00, 0.98021E+00, 0.42833E+00, 0.13765E+01, 0.11395E+01,-0.12682E-03, 0.48834E-03,0.12507E+01,0.13765E+01,0.11395E+01,-0.78556E-04, 0.48877E-03,-0.14182E-04,0.59665E-04,-0.48267E-04,-0.43747E-06, 0.51694E-02, 0.18551E-02, 0.22716E-02,-0.12368E-02, 0.50601E-04,-0.88248E-04 +-0.2875163211E+00, 0.98012E+00, 0.42838E+00, 0.13768E+01, 0.11447E+01,-0.12348E-03, 0.36568E-03,0.12508E+01,0.13768E+01,0.11447E+01,-0.80338E-04, 0.36665E-03,-0.14231E-04,0.55744E-04,-0.43139E-04,-0.96988E-06, 0.48618E-02, 0.18059E-02, 0.21692E-02,-0.11413E-02, 0.45598E-04,-0.78565E-04 +-0.2620256127E+00, 0.98004E+00, 0.42843E+00, 0.13770E+01, 0.11496E+01,-0.12016E-03, 0.24498E-03,0.12510E+01,0.13770E+01,0.11495E+01,-0.82044E-04, 0.24645E-03,-0.14127E-04,0.52137E-04,-0.38117E-04,-0.14773E-05, 0.45703E-02, 0.17594E-02, 0.20712E-02,-0.10447E-02, 0.41025E-04,-0.69332E-04 +-0.2363507502E+00, 0.97997E+00, 0.42847E+00, 0.13773E+01, 0.11541E+01,-0.11690E-03, 0.11485E-03,0.12512E+01,0.13773E+01,0.11540E+01,-0.83705E-04, 0.11685E-03,-0.13878E-04,0.48545E-04,-0.33191E-04,-0.19996E-05, 0.42949E-02, 0.17165E-02, 0.19779E-02,-0.94613E-03, 0.36829E-04,-0.60534E-04 +-0.2105097781E+00, 0.97991E+00, 0.42851E+00, 0.13775E+01, 0.11582E+01,-0.11378E-03,-0.19957E-04,0.12513E+01,0.13775E+01,0.11582E+01,-0.85372E-04,-0.17348E-04,-0.13565E-04,0.45056E-04,-0.28410E-04,-0.26089E-05, 0.40363E-02, 0.16785E-02, 0.18888E-02,-0.84621E-03, 0.33133E-04,-0.52328E-04 +-0.1845208578E+00, 0.97985E+00, 0.42855E+00, 0.13777E+01, 0.11619E+01,-0.11077E-03,-0.13634E-03,0.12514E+01,0.13777E+01,0.11619E+01,-0.86999E-04,-0.13330E-03,-0.13255E-04,0.42051E-04,-0.23768E-04,-0.30335E-05, 0.37936E-02, 0.16461E-02, 0.18081E-02,-0.74586E-03, 0.30006E-04,-0.44744E-04 +-0.1584022545E+00, 0.97981E+00, 0.42857E+00, 0.13778E+01, 0.11652E+01,-0.10779E-03,-0.22234E-03,0.12515E+01,0.13778E+01,0.11652E+01,-0.88386E-04,-0.21943E-03,-0.12912E-04,0.40367E-04,-0.19401E-04,-0.29119E-05, 0.35670E-02, 0.16187E-02, 0.17412E-02,-0.64562E-03, 0.27476E-04,-0.37850E-04 +-0.1321723245E+00, 0.97977E+00, 0.42860E+00, 0.13779E+01, 0.11681E+01,-0.10483E-03,-0.28829E-03,0.12516E+01,0.13780E+01,0.11681E+01,-0.89386E-04,-0.28613E-03,-0.12514E-04,0.40336E-04,-0.15440E-04,-0.21622E-05, 0.33631E-02, 0.15951E-02, 0.16882E-02,-0.54578E-03, 0.25525E-04,-0.31598E-04 +-0.1058495026E+00, 0.97976E+00, 0.42862E+00, 0.13780E+01, 0.11705E+01,-0.10186E-03,-0.34318E-03,0.12516E+01,0.13780E+01,0.11705E+01,-0.90047E-04,-0.34221E-03,-0.12082E-04,0.41769E-04,-0.11812E-04,-0.97907E-06, 0.31892E-02, 0.15746E-02, 0.16469E-02,-0.44635E-03, 0.24047E-04,-0.25649E-04 +-0.7945228871E-01, 0.97975E+00, 0.42864E+00, 0.13781E+01, 0.11724E+01,-0.98907E-04,-0.39123E-03,0.12517E+01,0.13781E+01,0.11724E+01,-0.90449E-04,-0.39165E-03,-0.11666E-04,0.44010E-04,-0.84585E-05, 0.41669E-06, 0.30484E-02, 0.15573E-02, 0.16158E-02,-0.34758E-03, 0.22943E-04,-0.19769E-04 +-0.5299923496E-01, 0.97975E+00, 0.42865E+00, 0.13782E+01, 0.11739E+01,-0.95937E-04,-0.43748E-03,0.12517E+01,0.13782E+01,0.11739E+01,-0.90632E-04,-0.43926E-03,-0.11339E-04,0.46187E-04,-0.53050E-05, 0.17818E-05, 0.29394E-02, 0.15440E-02, 0.15942E-02,-0.24864E-03, 0.22188E-04,-0.13910E-04 +-0.2650893284E-01, 0.97975E+00, 0.42866E+00, 0.13782E+01, 0.11750E+01,-0.92889E-04,-0.48509E-03,0.12517E+01,0.13782E+01,0.11749E+01,-0.90620E-04,-0.48787E-03,-0.11156E-04,0.47811E-04,-0.22685E-05, 0.27823E-05, 0.28613E-02, 0.15354E-02, 0.15813E-02,-0.14838E-03, 0.21763E-04,-0.80625E-05 + 0.0000000000E+00, 0.97976E+00, 0.42867E+00, 0.13782E+01, 0.11755E+01,-0.89771E-04,-0.54151E-03,0.12517E+01,0.13782E+01,0.11755E+01,-0.90365E-04,-0.54479E-03,-0.11123E-04,0.48670E-04, 0.59389E-06, 0.32810E-05, 0.28167E-02, 0.15320E-02, 0.15792E-02,-0.46819E-04, 0.21634E-04,-0.22816E-05 + 0.2650893284E-01, 0.97977E+00, 0.42866E+00, 0.13782E+01, 0.11756E+01,-0.86569E-04,-0.61482E-03,0.12517E+01,0.13782E+01,0.11755E+01,-0.89815E-04,-0.61806E-03,-0.11223E-04,0.48665E-04, 0.32467E-05, 0.32444E-05, 0.28097E-02, 0.15335E-02, 0.15880E-02, 0.55873E-04, 0.21797E-04, 0.35108E-05 + 0.5299923496E-01, 0.97978E+00, 0.42866E+00, 0.13781E+01, 0.11750E+01,-0.83282E-04,-0.70592E-03,0.12517E+01,0.13781E+01,0.11750E+01,-0.89054E-04,-0.70861E-03,-0.11454E-04,0.47730E-04, 0.57714E-05, 0.26902E-05, 0.28417E-02, 0.15398E-02, 0.16041E-02, 0.15923E-03, 0.22221E-04, 0.94981E-05 + 0.7945228871E-01, 0.97979E+00, 0.42865E+00, 0.13781E+01, 0.11739E+01,-0.79986E-04,-0.81033E-03,0.12517E+01,0.13781E+01,0.11739E+01,-0.88215E-04,-0.81211E-03,-0.11815E-04,0.45889E-04, 0.82294E-05, 0.17860E-05, 0.29103E-02, 0.15502E-02, 0.16246E-02, 0.26244E-03, 0.22889E-04, 0.15682E-04 + 0.1058495026E+00, 0.97982E+00, 0.42864E+00, 0.13780E+01, 0.11722E+01,-0.76677E-04,-0.91594E-03,0.12516E+01,0.13780E+01,0.11722E+01,-0.87393E-04,-0.91677E-03,-0.12286E-04,0.43666E-04, 0.10716E-04, 0.83655E-06, 0.30105E-02, 0.15643E-02, 0.16511E-02, 0.36484E-03, 0.23875E-04, 0.22055E-04 + 0.1321723245E+00, 0.97985E+00, 0.42862E+00, 0.13779E+01, 0.11700E+01,-0.73262E-04,-0.10072E-02,0.12516E+01,0.13779E+01,0.11700E+01,-0.86615E-04,-0.10074E-02,-0.12829E-04,0.41680E-04, 0.13353E-04, 0.13828E-06, 0.31323E-02, 0.15820E-02, 0.16869E-02, 0.46611E-03, 0.25244E-04, 0.28683E-04 + 0.1584022545E+00, 0.97989E+00, 0.42860E+00, 0.13778E+01, 0.11673E+01,-0.69691E-04,-0.10757E-02,0.12515E+01,0.13778E+01,0.11673E+01,-0.85834E-04,-0.10754E-02,-0.13408E-04,0.40003E-04, 0.16143E-04,-0.24839E-06, 0.32643E-02, 0.16037E-02, 0.17339E-02, 0.56603E-03, 0.26991E-04, 0.35574E-04 + 0.1845208578E+00, 0.97993E+00, 0.42858E+00, 0.13776E+01, 0.11641E+01,-0.65971E-04,-0.11265E-02,0.12514E+01,0.13777E+01,0.11641E+01,-0.85066E-04,-0.11261E-02,-0.14009E-04,0.38345E-04, 0.19095E-04,-0.39552E-06, 0.34062E-02, 0.16289E-02, 0.17919E-02, 0.66474E-03, 0.29132E-04, 0.42756E-04 + 0.2105097781E+00, 0.97999E+00, 0.42855E+00, 0.13775E+01, 0.11604E+01,-0.62024E-04,-0.11773E-02,0.12513E+01,0.13775E+01,0.11604E+01,-0.84389E-04,-0.11768E-02,-0.14612E-04,0.36727E-04, 0.22365E-04,-0.45937E-06, 0.35662E-02, 0.16570E-02, 0.18600E-02, 0.76246E-03, 0.31780E-04, 0.50323E-04 + 0.2363507502E+00, 0.98006E+00, 0.42852E+00, 0.13773E+01, 0.11562E+01,-0.57656E-04,-0.12378E-02,0.12512E+01,0.13773E+01,0.11562E+01,-0.83719E-04,-0.12373E-02,-0.15170E-04,0.35510E-04, 0.26063E-04,-0.52095E-06, 0.37502E-02, 0.16880E-02, 0.19369E-02, 0.85835E-03, 0.34998E-04, 0.58289E-04 + 0.2620256127E+00, 0.98014E+00, 0.42848E+00, 0.13771E+01, 0.11517E+01,-0.52691E-04,-0.12973E-02,0.12510E+01,0.13771E+01,0.11516E+01,-0.82923E-04,-0.12969E-02,-0.15666E-04,0.34925E-04, 0.30232E-04,-0.47167E-06, 0.39575E-02, 0.17227E-02, 0.20201E-02, 0.95165E-03, 0.38768E-04, 0.66583E-04 + 0.2875163211E+00, 0.98024E+00, 0.42845E+00, 0.13768E+01, 0.11467E+01,-0.47004E-04,-0.13284E-02,0.12509E+01,0.13768E+01,0.11466E+01,-0.81991E-04,-0.13283E-02,-0.16111E-04,0.35436E-04, 0.34988E-04,-0.13938E-06, 0.41870E-02, 0.17618E-02, 0.21117E-02, 0.10440E-02, 0.43119E-04, 0.75326E-04 + 0.3128049603E+00, 0.98035E+00, 0.42840E+00, 0.13765E+01, 0.11413E+01,-0.40596E-04,-0.12989E-02,0.12507E+01,0.13765E+01,0.11412E+01,-0.80916E-04,-0.12995E-02,-0.16423E-04,0.37772E-04, 0.40320E-04, 0.53662E-06, 0.44376E-02, 0.18050E-02, 0.22167E-02, 0.11367E-02, 0.48043E-04, 0.84635E-04 + 0.3378737573E+00, 0.98048E+00, 0.42836E+00, 0.13762E+01, 0.11355E+01,-0.33555E-04,-0.12065E-02,0.12505E+01,0.13762E+01,0.11354E+01,-0.79608E-04,-0.12077E-02,-0.16502E-04,0.42093E-04, 0.46053E-04, 0.11593E-05, 0.47060E-02, 0.18526E-02, 0.23349E-02, 0.12297E-02, 0.53503E-04, 0.94425E-04 + 0.3627050933E+00, 0.98063E+00, 0.42831E+00, 0.13758E+01, 0.11293E+01,-0.25823E-04,-0.10914E-02,0.12502E+01,0.13758E+01,0.11292E+01,-0.78066E-04,-0.10926E-02,-0.16312E-04,0.48525E-04, 0.52243E-04, 0.12037E-05, 0.49983E-02, 0.19046E-02, 0.24602E-02, 0.13234E-02, 0.59551E-04, 0.10481E-03 + 0.3872815168E+00, 0.98079E+00, 0.42825E+00, 0.13754E+01, 0.11228E+01,-0.17402E-04,-0.99144E-03,0.12500E+01,0.13754E+01,0.11227E+01,-0.76307E-04,-0.99234E-03,-0.15766E-04,0.57807E-04, 0.58905E-04, 0.90277E-06, 0.53187E-02, 0.19612E-02, 0.25848E-02, 0.14171E-02, 0.66186E-04, 0.11584E-03 + 0.4115857551E+00, 0.98097E+00, 0.42819E+00, 0.13749E+01, 0.11159E+01,-0.84331E-05,-0.91242E-03,0.12497E+01,0.13750E+01,0.11158E+01,-0.74340E-04,-0.91310E-03,-0.14787E-04,0.70414E-04, 0.65906E-04, 0.67798E-06, 0.56627E-02, 0.20219E-02, 0.27058E-02, 0.15099E-02, 0.73419E-04, 0.12747E-03 + 0.4356007271E+00, 0.98118E+00, 0.42813E+00, 0.13745E+01, 0.11087E+01, 0.11463E-05,-0.84868E-03,0.12494E+01,0.13745E+01,0.11086E+01,-0.72327E-04,-0.84906E-03,-0.13168E-04,0.87030E-04, 0.73473E-04, 0.37738E-06, 0.60318E-02, 0.20848E-02, 0.28247E-02, 0.16020E-02, 0.81702E-04, 0.13981E-03 + 0.4593095548E+00, 0.98142E+00, 0.42807E+00, 0.13739E+01, 0.11013E+01, 0.11457E-04,-0.80448E-03,0.12490E+01,0.13739E+01,0.11012E+01,-0.70319E-04,-0.80429E-03,-0.10740E-04,0.10837E-03, 0.81776E-04,-0.19080E-06, 0.64207E-02, 0.21474E-02, 0.29464E-02, 0.16921E-02, 0.91325E-04, 0.15269E-03 + 0.4826955754E+00, 0.98170E+00, 0.42801E+00, 0.13733E+01, 0.10938E+01, 0.22484E-04,-0.79161E-03,0.12487E+01,0.13734E+01,0.10936E+01,-0.68297E-04,-0.79055E-03,-0.75317E-05,0.13401E-03, 0.90781E-04,-0.10526E-05, 0.68187E-02, 0.22087E-02, 0.30760E-02, 0.17802E-02, 0.10221E-03, 0.16600E-03 + 0.5057423529E+00, 0.98203E+00, 0.42795E+00, 0.13727E+01, 0.10861E+01, 0.34232E-04,-0.80742E-03,0.12482E+01,0.13727E+01,0.10859E+01,-0.66371E-04,-0.80551E-03,-0.34057E-05,0.16472E-03, 0.10060E-03,-0.19062E-05, 0.72317E-02, 0.22679E-02, 0.32132E-02, 0.18680E-02, 0.11460E-03, 0.18016E-03 + 0.5284336899E+00, 0.98240E+00, 0.42789E+00, 0.13720E+01, 0.10782E+01, 0.46714E-04,-0.82458E-03,0.12478E+01,0.13720E+01,0.10780E+01,-0.64441E-04,-0.82245E-03, 0.18327E-05,0.20160E-03, 0.11115E-03,-0.21252E-05, 0.76646E-02, 0.23240E-02, 0.33542E-02, 0.19554E-02, 0.12877E-03, 0.19536E-03 + 0.5507536387E+00, 0.98283E+00, 0.42784E+00, 0.13712E+01, 0.10703E+01, 0.60000E-04,-0.81354E-03,0.12473E+01,0.13712E+01,0.10700E+01,-0.62209E-04,-0.81204E-03, 0.82860E-05,0.24472E-03, 0.12221E-03,-0.14906E-05, 0.81172E-02, 0.23761E-02, 0.34952E-02, 0.20407E-02, 0.14464E-03, 0.21135E-03 + 0.5726865127E+00, 0.98331E+00, 0.42779E+00, 0.13704E+01, 0.10622E+01, 0.74138E-04,-0.76094E-03,0.12468E+01,0.13704E+01,0.10619E+01,-0.59550E-04,-0.76075E-03, 0.16018E-04,0.29423E-03, 0.13369E-03,-0.18929E-06, 0.85934E-02, 0.24220E-02, 0.36328E-02, 0.21222E-02, 0.16208E-03, 0.22784E-03 + 0.5942168971E+00, 0.98385E+00, 0.42775E+00, 0.13696E+01, 0.10540E+01, 0.89015E-04,-0.66846E-03,0.12462E+01,0.13695E+01,0.10537E+01,-0.56651E-04,-0.67009E-03, 0.25302E-04,0.35231E-03, 0.14567E-03, 0.16277E-05, 0.90999E-02, 0.24590E-02, 0.37624E-02, 0.21983E-02, 0.18127E-03, 0.24480E-03 + 0.6153296603E+00, 0.98448E+00, 0.42773E+00, 0.13686E+01, 0.10456E+01, 0.10468E-03,-0.55483E-03,0.12456E+01,0.13686E+01,0.10452E+01,-0.53810E-04,-0.55898E-03, 0.36659E-04,0.42172E-03, 0.15849E-03, 0.41458E-05, 0.96435E-02, 0.24845E-02, 0.38822E-02, 0.22689E-02, 0.20276E-03, 0.26259E-03 + 0.6360099639E+00, 0.98518E+00, 0.42771E+00, 0.13676E+01, 0.10370E+01, 0.12128E-03,-0.44585E-03,0.12450E+01,0.13676E+01,0.10365E+01,-0.50979E-04,-0.45338E-03, 0.50581E-04,0.50371E-03, 0.17226E-03, 0.75254E-05, 0.10228E-01, 0.24969E-02, 0.39942E-02, 0.23346E-02, 0.22703E-03, 0.28116E-03 + 0.6562432737E+00, 0.98599E+00, 0.42771E+00, 0.13665E+01, 0.10281E+01, 0.13871E-03,-0.34661E-03,0.12443E+01,0.13664E+01,0.10275E+01,-0.47997E-04,-0.35881E-03, 0.67430E-04,0.59877E-03, 0.18671E-03, 0.12192E-04, 0.10852E-01, 0.24955E-02, 0.40989E-02, 0.23951E-02, 0.25441E-03, 0.30018E-03 + 0.6760153695E+00, 0.98690E+00, 0.42772E+00, 0.13653E+01, 0.10189E+01, 0.15686E-03,-0.23741E-03,0.12435E+01,0.13652E+01,0.10182E+01,-0.44928E-04,-0.25536E-03, 0.87557E-04,0.70857E-03, 0.20178E-03, 0.17957E-04, 0.11520E-01, 0.24798E-02, 0.41953E-02, 0.24493E-02, 0.28534E-03, 0.31976E-03 + 0.6953123553E+00, 0.98793E+00, 0.42775E+00, 0.13640E+01, 0.10092E+01, 0.17558E-03,-0.98416E-04,0.12427E+01,0.13639E+01,0.10084E+01,-0.41947E-04,-0.12232E-03, 0.11156E-03,0.83635E-03, 0.21753E-03, 0.23900E-04, 0.12254E-01, 0.24499E-02, 0.42801E-02, 0.24976E-02, 0.32079E-03, 0.34017E-03 + 0.7141206690E+00, 0.98911E+00, 0.42779E+00, 0.13625E+01, 0.99895E+00, 0.19469E-03, 0.76839E-04,0.12417E+01,0.13624E+01,0.99796E+00,-0.39227E-04, 0.47276E-04, 0.14043E-03,0.98578E-03, 0.23392E-03, 0.29562E-04, 0.13084E-01, 0.24053E-02, 0.43490E-02, 0.25410E-02, 0.36206E-03, 0.36174E-03 + 0.7324270919E+00, 0.99047E+00, 0.42785E+00, 0.13609E+01, 0.98787E+00, 0.21417E-03, 0.29058E-03,0.12407E+01,0.13607E+01,0.98671E+00,-0.36600E-04, 0.25598E-03, 0.17531E-03,0.11602E-02, 0.25077E-03, 0.34593E-04, 0.14024E-01, 0.23456E-02, 0.44009E-02, 0.25784E-02, 0.41034E-03, 0.38442E-03 + 0.7502187581E+00, 0.99202E+00, 0.42792E+00, 0.13590E+01, 0.97584E+00, 0.23405E-03, 0.54345E-03,0.12395E+01,0.13588E+01,0.97448E+00,-0.33817E-04, 0.50494E-03, 0.21745E-03,0.13620E-02, 0.26786E-03, 0.38507E-04, 0.15076E-01, 0.22700E-02, 0.44339E-02, 0.26084E-02, 0.46681E-03, 0.40776E-03 + 0.7674831634E+00, 0.99381E+00, 0.42800E+00, 0.13569E+01, 0.96269E+00, 0.25444E-03, 0.82053E-03,0.12381E+01,0.13566E+01,0.96110E+00,-0.30861E-04, 0.77888E-03, 0.26825E-03,0.15939E-02, 0.28530E-03, 0.41657E-04, 0.16231E-01, 0.21773E-02, 0.44396E-02, 0.26300E-02, 0.53282E-03, 0.43133E-03 + 0.7842081743E+00, 0.99586E+00, 0.42811E+00, 0.13545E+01, 0.94824E+00, 0.27531E-03, 0.10895E-02,0.12366E+01,0.13542E+01,0.94638E+00,-0.27857E-04, 0.10453E-02, 0.32949E-03,0.18593E-02, 0.30317E-03, 0.44214E-04, 0.17477E-01, 0.20666E-02, 0.44111E-02, 0.26412E-02, 0.60987E-03, 0.45477E-03 + 0.8003820363E+00, 0.99823E+00, 0.42823E+00, 0.13517E+01, 0.93226E+00, 0.29612E-03, 0.13179E-02,0.12348E+01,0.13513E+01,0.93010E+00,-0.25006E-04, 0.12714E-02, 0.40301E-03,0.21620E-02, 0.32112E-03, 0.46535E-04, 0.18809E-01, 0.19374E-02, 0.43484E-02, 0.26403E-02, 0.69979E-03, 0.47769E-03 + 0.8159933821E+00, 0.10010E+01, 0.42838E+00, 0.13485E+01, 0.91450E+00, 0.31605E-03, 0.14852E-02,0.12328E+01,0.13481E+01,0.91199E+00,-0.22505E-04, 0.14364E-02, 0.49120E-03,0.25076E-02, 0.33855E-03, 0.48839E-04, 0.20225E-01, 0.17908E-02, 0.42579E-02, 0.26266E-02, 0.80562E-03, 0.49971E-03 + 0.8310312401E+00, 0.10042E+01, 0.42853E+00, 0.13448E+01, 0.89465E+00, 0.33427E-03, 0.15864E-02,0.12304E+01,0.13442E+01,0.89175E+00,-0.20430E-04, 0.15353E-02, 0.59677E-03,0.28989E-02, 0.35470E-03, 0.51166E-04, 0.21693E-01, 0.16296E-02, 0.41470E-02, 0.25977E-02, 0.93084E-03, 0.52023E-03 + 0.8454850414E+00, 0.10079E+01, 0.42870E+00, 0.13405E+01, 0.87236E+00, 0.34989E-03, 0.16306E-02,0.12276E+01,0.13398E+01,0.86903E+00,-0.18761E-04, 0.15763E-02, 0.72178E-03,0.33336E-02, 0.36865E-03, 0.54288E-04, 0.23158E-01, 0.14580E-02, 0.40172E-02, 0.25506E-02, 0.10781E-02, 0.53820E-03 + 0.8593446278E+00, 0.10123E+01, 0.42887E+00, 0.13353E+01, 0.84723E+00, 0.36198E-03, 0.16291E-02,0.12243E+01,0.13345E+01,0.84343E+00,-0.17406E-04, 0.15704E-02, 0.86790E-03,0.38066E-02, 0.37939E-03, 0.58658E-04, 0.24564E-01, 0.12807E-02, 0.38669E-02, 0.24823E-02, 0.12493E-02, 0.55220E-03 + 0.8726002586E+00, 0.10175E+01, 0.42905E+00, 0.13292E+01, 0.81886E+00, 0.36970E-03, 0.15876E-02,0.12203E+01,0.13282E+01,0.81455E+00,-0.16167E-04, 0.15242E-02, 0.10363E-02,0.43085E-02, 0.38586E-03, 0.63375E-04, 0.25832E-01, 0.11028E-02, 0.36935E-02, 0.23890E-02, 0.14460E-02, 0.56048E-03 + 0.8852426177E+00, 0.10237E+01, 0.42922E+00, 0.13220E+01, 0.78682E+00, 0.37205E-03, 0.15076E-02,0.12157E+01,0.13207E+01,0.78200E+00,-0.14899E-04, 0.14406E-02, 0.12262E-02,0.48227E-02, 0.38694E-03, 0.66946E-04, 0.26859E-01, 0.92914E-03, 0.34967E-02, 0.22674E-02, 0.16673E-02, 0.56099E-03 + 0.8972628198E+00, 0.10310E+01, 0.42938E+00, 0.13133E+01, 0.75074E+00, 0.36789E-03, 0.13924E-02,0.12100E+01,0.13118E+01,0.74541E+00,-0.13576E-04, 0.13236E-02, 0.14346E-02,0.53249E-02, 0.38146E-03, 0.68804E-04, 0.27529E-01, 0.76428E-03, 0.32790E-02, 0.21147E-02, 0.19094E-02, 0.55170E-03 + 0.9086524171E+00, 0.10398E+01, 0.42953E+00, 0.13029E+01, 0.71027E+00, 0.35594E-03, 0.12527E-02,0.12033E+01,0.13013E+01,0.70449E+00,-0.12271E-04, 0.11837E-02, 0.16545E-02,0.57820E-02, 0.36821E-03, 0.68962E-04, 0.27718E-01, 0.61202E-03, 0.30416E-02, 0.19299E-02, 0.21640E-02, 0.53087E-03 + 0.9194034048E+00, 0.10502E+01, 0.42967E+00, 0.12906E+01, 0.66521E+00, 0.33509E-03, 0.11042E-02,0.11954E+01,0.12888E+01,0.65906E+00,-0.11073E-04, 0.10368E-02, 0.18743E-02,0.61509E-02, 0.34617E-03, 0.67447E-04, 0.27312E-01, 0.47544E-03, 0.27858E-02, 0.17146E-02, 0.24159E-02, 0.49737E-03 + 0.9295082270E+00, 0.10626E+01, 0.42979E+00, 0.12762E+01, 0.61556E+00, 0.30488E-03, 0.96230E-03,0.11859E+01,0.12741E+01,0.60918E+00,-0.10013E-04, 0.89786E-03, 0.20753E-02,0.63807E-02, 0.31490E-03, 0.64439E-04, 0.26220E-01, 0.35674E-03, 0.25145E-02, 0.14737E-02, 0.26421E-02, 0.45099E-03 + 0.9389597819E+00, 0.10773E+01, 0.42989E+00, 0.12593E+01, 0.56161E+00, 0.26588E-03, 0.83735E-03,0.11749E+01,0.12570E+01,0.55519E+00,-0.90593E-05, 0.77712E-03, 0.22328E-02,0.64192E-02, 0.27494E-03, 0.60239E-04, 0.24389E-01, 0.25707E-03, 0.22324E-02, 0.12161E-02, 0.28114E-02, 0.39293E-03 + 0.9477514268E+00, 0.10944E+01, 0.42997E+00, 0.12399E+01, 0.50403E+00, 0.22007E-03, 0.73185E-03,0.11622E+01,0.12376E+01,0.49780E+00,-0.81463E-05, 0.67656E-03, 0.23185E-02,0.62226E-02, 0.22821E-03, 0.55282E-04, 0.21834E-01, 0.17658E-03, 0.19445E-02, 0.95461E-03, 0.28888E-02, 0.32616E-03 + 0.9558769829E+00, 0.11141E+01, 0.43004E+00, 0.12181E+01, 0.44383E+00, 0.17077E-03, 0.64116E-03,0.11479E+01,0.12158E+01,0.43806E+00,-0.72418E-05, 0.59136E-03, 0.23051E-02,0.57686E-02, 0.17801E-03, 0.49805E-04, 0.18664E-01, 0.11448E-03, 0.16559E-02, 0.70527E-03, 0.28416E-02, 0.25536E-03 + 0.9633307393E+00, 0.11365E+01, 0.43009E+00, 0.11942E+01, 0.38240E+00, 0.12230E-03, 0.55785E-03,0.11321E+01,0.11921E+01,0.37733E+00,-0.63426E-05, 0.51434E-03, 0.21747E-02,0.50711E-02, 0.12864E-03, 0.43510E-04, 0.15103E-01, 0.69179E-04, 0.13709E-02, 0.48435E-03, 0.26501E-02, 0.18638E-03 + 0.9701074573E+00, 0.11612E+01, 0.43012E+00, 0.11687E+01, 0.32135E+00, 0.79120E-04, 0.47619E-03,0.11151E+01,0.11668E+01,0.31716E+00,-0.54359E-05, 0.44007E-03, 0.19273E-02,0.41881E-02, 0.84556E-04, 0.36115E-04, 0.11464E-01, 0.38340E-04, 0.10944E-02, 0.30493E-03, 0.23186E-02, 0.12508E-03 + 0.9762023741E+00, 0.11879E+01, 0.43014E+00, 0.11422E+01, 0.26235E+00, 0.44787E-04, 0.39485E-03,0.10974E+01,0.11406E+01,0.25913E+00,-0.45269E-05, 0.36697E-03, 0.15856E-02,0.32154E-02, 0.49314E-04, 0.27875E-04, 0.80890E-02, 0.19088E-04, 0.83274E-03, 0.17331E-03, 0.18806E-02, 0.75962E-04 + 0.9816112057E+00, 0.12159E+01, 0.43016E+00, 0.11156E+01, 0.20694E+00, 0.20943E-04, 0.31554E-03,0.10795E+01,0.11144E+01,0.20467E+00,-0.36270E-05, 0.29590E-03, 0.11935E-02,0.22657E-02, 0.24570E-04, 0.19640E-04, 0.52520E-02, 0.83135E-05, 0.59426E-03, 0.87417E-04, 0.13947E-02, 0.40965E-04 + 0.9863301501E+00, 0.12442E+01, 0.43016E+00, 0.10899E+01, 0.15646E+00, 0.69920E-05, 0.24094E-03,0.10620E+01,0.10891E+01,0.15502E+00,-0.27629E-05, 0.22853E-03, 0.80619E-03,0.14395E-02, 0.97549E-05, 0.12418E-04, 0.30953E-02, 0.30658E-05, 0.38894E-03, 0.38316E-04, 0.92916E-03, 0.19161E-04 + 0.9903558897E+00, 0.12719E+01, 0.43017E+00, 0.10659E+01, 0.11192E+00, 0.59717E-06, 0.17365E-03,0.10456E+01,0.10654E+01,0.11112E+00,-0.19721E-05, 0.16679E-03, 0.47437E-03,0.80168E-03, 0.25692E-05, 0.68596E-05, 0.16193E-02, 0.92419E-06, 0.22613E-03, 0.14179E-04, 0.54165E-03, 0.75267E-05 + 0.9936855922E+00, 0.12976E+01, 0.43017E+00, 0.10445E+01, 0.74118E-01,-0.12197E-05, 0.11559E-03,0.10309E+01,0.10443E+01,0.73746E-01,-0.12776E-05, 0.11243E-03, 0.23114E-03,0.37213E-03, 0.57870E-07, 0.31575E-05, 0.72210E-03, 0.22386E-06, 0.11116E-03, 0.42310E-05, 0.26457E-03, 0.23613E-05 + 0.9963169100E+00, 0.13200E+01, 0.43017E+00, 0.10266E+01, 0.43626E-01,-0.10408E-05, 0.68265E-04,0.10186E+01,0.10265E+01,0.43496E-01,-0.71687E-06, 0.67164E-04, 0.84397E-04,0.13001E-03,-0.32394E-06, 0.11001E-05, 0.25356E-03, 0.45983E-07, 0.42390E-04, 0.93813E-06, 0.99866E-04, 0.54158E-06 + 0.9982479675E+00, 0.13378E+01, 0.43017E+00, 0.10129E+01, 0.20894E-01,-0.46727E-06, 0.32774E-04,0.10090E+01,0.10129E+01,0.20868E-01,-0.32184E-06, 0.32551E-04, 0.17922E-04,0.26149E-04,-0.14543E-06, 0.22361E-06, 0.58794E-04, 0.84067E-08, 0.10470E-04, 0.13068E-06, 0.24415E-04, 0.75935E-07 + 0.9994772578E+00, 0.13498E+01, 0.43017E+00, 0.10039E+01, 0.62619E-02,-0.11153E-06, 0.98281E-05,0.10027E+01,0.10039E+01,0.62617E-02,-0.90280E-07, 0.98228E-05, 0.39756E-06,0.20626E-06,-0.21247E-07, 0.53147E-08, 0.53206E-05, 0.78664E-09, 0.98731E-06, 0.71010E-08, 0.22850E-05, 0.39867E-08 + 0.1000000000E+01, 0.13550E+01, 0.43017E+00, 0.10000E+01, 0.00000E+00, 0.00000E+00, 0.00000E+00,0.10000E+01,0.10000E+01,0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00 + diff --git a/testcases/Coleman/MakeChannel.py b/testcases/Coleman/MakeChannel.py new file mode 100755 index 0000000..0b2793d --- /dev/null +++ b/testcases/Coleman/MakeChannel.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python2 + +import argparse +import json +import sys +import os +import numpy as np +from scipy.optimize import fsolve + +# load local modules +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen +import ConstPropMix + +parser = argparse.ArgumentParser() +parser.add_argument("base_json", type=argparse.FileType("r"), default="base.json") +args = parser.parse_args() + +# Read base config +config = json.load(args.base_json) +ReB = config["Case"]["ReB"] +MaB = config["Case"]["MaB"] +ReTau = config["Case"]["Retau"] +dTplus = config["Case"]["DeltaT"] +dTplusStat = config["Case"]["DeltaTStat"] +del config["Case"] + +# Read boundary conditions +assert config["BC"]["yBCLeft"] == "IsothermalWall" +assert config["BC"]["yBCLeftHeat"]["type"] == "Constant" +assert config["BC"]["yBCRight"] == "IsothermalWall" +assert config["BC"]["yBCRightHeat"]["type"] == "Constant" +assert config["BC"]["yBCLeftHeat"]["temperature"] == config["BC"]["yBCRightHeat"]["temperature"] +Tw = config["BC"]["yBCLeftHeat"]["temperature"] + +# Read properties +Pb = config["Flow"]["initParams"][0] +Tb = config["Flow"]["initParams"][1] +gamma = config["Flow"]["gamma"] +R = config["Flow"]["gasConstant"] +assert config["Flow"]["turbForcing"]["type"] == "CHANNEL" +assert config["Flow"]["initCase"] == "ChannelFlow" +assert Tw == Tb + +cW = np.sqrt(gamma*R*Tw) +muW = ConstPropMix.GetViscosity(Tw, config) + +uB = cW*MaB +rhoB = Pb/(R*Tb) + +h = ReB*muW/(rhoB*uB) +print("h = ", h) + +rhoW = rhoB +uTau = ReTau*muW/(rhoW*h) +deltaNu = muW/(uTau*rhoW) +TauW = uTau**2*rhoB + +yPlusTrg = 0.8 + +def objective(yStretching): + yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + 2.0*h, + config["Grid"]["yNum"], + config["Grid"]["yType"], + yStretching, + False) + return dy[1]/deltaNu - yPlusTrg + #return (yGrid[1] - config["Grid"]["origin"][1])/deltaNu - yPlusTrg + +yStretching, = fsolve(objective, 1.0) + +tNu = deltaNu**2*rhoW/muW + +# Grid section +config["Grid"]["xWidth"] = 4.0*h*np.pi +config["Grid"]["yWidth"] = 2.0*h +config["Grid"]["zWidth"] = 2.0*h*np.pi +config["Grid"]["yStretching"] = yStretching + +# Flow section +config["Flow"]["initParams"][2] = uB +config["Flow"]["turbForcing"]["RhoUbulk"] = rhoB*uB +config["Flow"]["turbForcing"]["Forcing"] = TauW/h + +config["Integrator"]["maxTime"] = tNu*dTplus + +with open("ChannelFlow.json", "w") as fout: + json.dump(config, fout, indent=3) + +config["Integrator"]["maxTime"] = tNu*(dTplus+dTplusStat) + +config["Flow"]["initCase"] == "Restart" + +config["IO"]["XZAverages"] = [{"fromCell" : [0, 0, 0], "uptoCell" : [1024, 1024, 1024]}] + +with open("ChannelFlowStats.json", "w") as fout: + json.dump(config, fout, indent=3) diff --git a/testcases/Coleman/base.json b/testcases/Coleman/base.json new file mode 100644 index 0000000..cf08f92 --- /dev/null +++ b/testcases/Coleman/base.json @@ -0,0 +1,181 @@ +{ + "Case" : { + "ReB" : 3000.0, + "MaB" : 1.5, + "Retau" : 219.0, + "DeltaT" : 10000, + "DeltaTStat" : 3000 + }, + + "Mapping" : { + "tiles" : [4,1,1], + "tilesPerRank" : [1,1,1], + "sampleId" : -1, + "outDir" : "", + "wallTime" : 10000 + }, + + "Grid" : { + "xNum" : 256, + "yNum" : 128, + "zNum" : 128, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 0.0, + "yWidth" : 0.0, + "zWidth" : 0.0, + "xType" : "Uniform", + "yType" : "Tanh", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 2000000, + "maxTime" : 20.0, + "cfl" : 0.5, + "fixedDeltaTime" : 4.0e-3, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "Periodic", + "xBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCLeftP" : -1.0, + "xBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "Periodic", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : -1.0, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "IsothermalWall", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : -1.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : 300.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "IsothermalWall", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : -1.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : 300.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 287.15, + "gamma" : 1.4, + "prandtl" : 0.7, + "viscosityModel" : "PowerLaw", + "constantVisc" : -1.0, + "powerlawViscRef" : 1.716e-5, + "powerlawTempRef" : 273.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "ChannelFlow", + "restartDir" : "", + "initParams" : [1.01325e5, 300.0, 0.0, 0.08, 0.05], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { + "type" : "CHANNEL", + "RhoUbulk" : 0.0 + } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 10000, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": true, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } + +} diff --git a/testcases/Coleman/postProc.py b/testcases/Coleman/postProc.py new file mode 100755 index 0000000..a7727aa --- /dev/null +++ b/testcases/Coleman/postProc.py @@ -0,0 +1,302 @@ +#!/usr/bin/env python2 + +import numpy as np +import json +import argparse +import matplotlib.pyplot as plt +import matplotlib.ticker +from matplotlib.legend_handler import HandlerTuple +import matplotlib.patches as mpatches +import sys +import os +import h5py +import pandas + +# load grid generator +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen + +parser = argparse.ArgumentParser() +parser.add_argument("-json", "--json_file", type=argparse.FileType('r')) +parser.add_argument("-in", "--input_file") +#parser.add_argument("-in", "--input_file", type=argparse.FileType('r')) +args = parser.parse_args() + +############################################################################## +# Read Prometeo Input File # +############################################################################## + +config = json.load(args.json_file) + +xNum = config["Grid"]["xNum"] +yNum = config["Grid"]["yNum"] +zNum = config["Grid"]["zNum"] +xWidth = config["Grid"]["xWidth"] +yWidth = config["Grid"]["yWidth"] +zWidth = config["Grid"]["zWidth"] +xOrigin = config["Grid"]["origin"][0] +yOrigin = config["Grid"]["origin"][1] +zOrigin = config["Grid"]["origin"][2] +#gamma = data["Flow"]["gamma"] + +############################################################################## +# Compute Grid # +############################################################################## + +yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + config["Grid"]["yWidth"], + config["Grid"]["yNum"], + config["Grid"]["yType"], + config["Grid"]["yStretching"], + False) + +# Correct boundaries that are staggered +yGrid[ 0] += 0.5*dy[0] +yGrid[yNum+1] -= 0.5*dy[yNum+1] + +############################################################################## +# Load reference solution # +############################################################################## + +data = pandas.read_csv("Coleman.dat") + +############################################################################## +# Load average files # +############################################################################## + +f = h5py.File(args.input_file, "r") + +# Get the data +weight = f["weight"][:][0,:] +pressure_avg = f["pressure_avg"][:][0,:] +pressure_rms = f["pressure_rms"][:][0,:] +temperature_avg = f["temperature_avg"][:][0,:] +temperature_rms = f["temperature_rms"][:][0,:] +MolarFracs_avg = f["MolarFracs_avg"][:][0,:,:] +MolarFracs_rms = f["MolarFracs_rms"][:][0,:,:] +velocity_avg = f["velocity_avg"][:][0,:,:] +velocity_rms = f["velocity_rms"][:][0,:,:] +velocity_rey = f["velocity_rey"][:][0,:,:] + +rho_avg = f["rho_avg"][:][0,:] +rho_rms = f["rho_rms"][:][0,:] +mu_avg = f["mu_avg"][:][0,:] +mu_rms = f["mu_rms"][:][0,:] +lam_avg = f["lam_avg"][:][0,:] +lam_rms = f["lam_rms"][:][0,:] +Di_avg = f["Di_avg"][:][0,:,:] +Di_rms = f["Di_rms"][:][0,:,:] +SoS_avg = f["SoS_avg"][:][0,:] +SoS_rms = f["SoS_rms"][:][0,:] + +temperature_favg = f["temperature_favg"][:][0,:] +temperature_frms = f["temperature_frms"][:][0,:] +MolarFracs_favg = f["MolarFracs_favg"][:][0,:,:] +MolarFracs_frms = f["MolarFracs_frms"][:][0,:,:] +velocity_favg = f["velocity_favg"][:][0,:,:] +velocity_frms = f["velocity_frms"][:][0,:,:] +velocity_frey = f["velocity_frey"][:][0,:,:] + +rhoUUv = f["rhoUUv"][:][0,:,:] +Up = f["Up"][:][0,:,:] +tau = f["tau"][:][0,:,:] +utau_y = f["utau_y"][:][0,:,:] +tauGradU = f["tauGradU"][:][0,:,:] +pGradU = f["pGradU"][:][0,:,:] + +q = f["q"][:][0,:,:] + + +SpeciesNames = f.attrs.get("SpeciesNames") + +# average both sides of the channel +weight += weight[::-1] +pressure_avg += pressure_avg[::-1] +pressure_rms += pressure_rms[::-1] +temperature_avg += temperature_avg[::-1] +temperature_rms += temperature_rms[::-1] +for isp, sp in enumerate(SpeciesNames): + MolarFracs_avg[:, isp] += MolarFracs_avg[::-1, isp] + MolarFracs_rms[:, isp] += MolarFracs_rms[::-1, isp] +velocity_avg[:,0] += velocity_avg [::-1,0] +velocity_avg[:,1] -= velocity_avg [::-1,1] +velocity_avg[:,2] += velocity_avg [::-1,2] +velocity_rms += velocity_rms [::-1] +velocity_rey[:,0] -= velocity_rey [::-1,0] +velocity_rey[:,1] += velocity_rey [::-1,1] +velocity_rey[:,2] -= velocity_rey [::-1,2] + +rho_avg += rho_avg [::-1] +rho_rms += rho_rms [::-1] +mu_avg += mu_avg [::-1] +mu_rms += mu_rms [::-1] +lam_avg += lam_avg [::-1] +lam_rms += lam_rms [::-1] +for isp, sp in enumerate(SpeciesNames): + Di_avg[:, isp] += Di_avg [::-1, isp] + Di_rms[:, isp] += Di_rms [::-1, isp] +SoS_avg += SoS_avg [::-1] +SoS_rms += SoS_rms [::-1] + +temperature_favg += temperature_favg[::-1] +temperature_frms += temperature_frms[::-1] +for isp, sp in enumerate(SpeciesNames): + MolarFracs_favg[:, isp] += MolarFracs_favg[::-1, isp] + MolarFracs_frms[:, isp] += MolarFracs_frms[::-1, isp] +velocity_favg[:,0] += velocity_favg [::-1,0] +velocity_favg[:,1] -= velocity_favg [::-1,1] +velocity_favg[:,2] += velocity_favg [::-1,2] +velocity_frms += velocity_frms [::-1] +velocity_frey[:,0] -= velocity_frey [::-1,0] +velocity_frey[:,1] += velocity_frey [::-1,1] +velocity_frey[:,2] -= velocity_frey [::-1,2] + +# Complete average process +pressure_avg /= weight +pressure_rms /= weight +temperature_avg /= weight +temperature_rms /= weight +for i in range(3): + velocity_avg[:,i] /= weight + velocity_rms[:,i] /= weight + velocity_rey[:,i] /= weight + +for isp, sp in enumerate(SpeciesNames): + MolarFracs_avg[:,isp] /= weight + MolarFracs_rms[:,isp] /= weight + +pressure_rms = np.sqrt(np.maximum( pressure_rms - pressure_avg**2, 0.0)) +temperature_rms = np.sqrt(np.maximum(temperature_rms - temperature_avg**2, 0.0)) +MolarFracs_rms = np.sqrt(np.maximum( MolarFracs_rms - MolarFracs_avg**2, 0.0)) +#velocity_rms = np.sqrt(np.maximum( velocity_rms - velocity_avg**2, 0.0)) +velocity_rms = velocity_rms - velocity_avg**2 + +rho_avg /= weight +rho_rms /= weight +mu_avg /= weight +mu_rms /= weight +lam_avg /= weight +lam_rms /= weight +SoS_avg /= weight +SoS_rms /= weight +for isp, sp in enumerate(SpeciesNames): + Di_avg[:,isp] /= weight + Di_rms[:,isp] /= weight + +mu_rms = np.sqrt(np.maximum( mu_rms - mu_avg**2, 0.0)) +lam_rms = np.sqrt(np.maximum(lam_rms - lam_avg**2, 0.0)) +Di_rms = np.sqrt(np.maximum( Di_rms - Di_avg**2, 0.0)) +SoS_rms = np.sqrt(np.maximum(SoS_rms - SoS_avg**2, 0.0)) + +temperature_favg /= weight +temperature_frms /= weight +for i in range(3): + velocity_favg[:,i] /= weight + velocity_frms[:,i] /= weight + velocity_frey[:,i] /= weight + +for isp, sp in enumerate(SpeciesNames): + MolarFracs_favg[:,isp] /= weight + MolarFracs_frms[:,isp] /= weight + +temperature_frms = np.sqrt(np.maximum(temperature_frms - temperature_favg**2, 0.0)) +MolarFracs_frms = np.sqrt(np.maximum( MolarFracs_frms - MolarFracs_favg**2, 0.0)) +#velocity_frms = np.sqrt(np.maximum( velocity_rms - velocity_avg**2, 0.0)) +velocity_frms = velocity_frms - velocity_favg**2 + +rhoU_avg = velocity_favg[:,0] + +for i in range(3): + rhoUUv[:,i] /= 0.5*weight + Up[:,i] /= 0.5*weight + utau_y[:,i] /= 0.5*weight + tauGradU[:,i] /= 0.5*weight + pGradU[:,i] /= 0.5*weight + +for i in range(6): + tau[:,i] /= 0.5*weight + +for i in range(3): + q[:,i] /= 0.5*weight + +# sanity check +assert weight.shape[0] == yGrid.size + +############################################################################## +# Print quantities # +############################################################################## + +rhoW = rho_avg[0] +muW = mu_avg[0] +tauW = tau[0,3] +uTau = np.sqrt(tauW/rhoW) +ReTau = rhoW*uTau*yWidth*0.5/muW + +uStar = np.sqrt(tauW/rho_avg) + +yPlusGrid = yGrid*uTau *rhoW /muW +yStarGrid = yGrid*uStar*rho_avg/mu_avg + +rhoBulk = 0.0 +rhoUBulk = 0.0 +for i in range(yNum+1): + rhoBulk += 0.5*( rho_avg[i+1] + rho_avg[i])*(yGrid[i+1] - yGrid[i]) + rhoUBulk += 0.5*(rhoU_avg[i+1] + rhoU_avg[i])*(yGrid[i+1] - yGrid[i]) +rhoBulk /= yGrid[yNum+1] - yGrid[0] +rhoUBulk /= yGrid[yNum+1] - yGrid[0] +UBulk = rhoUBulk/rhoBulk +print(UBulk) + +print("Re_tau = ", ReTau) +print("rho_Bulk = ", rhoBulk) +print("rho_Bulk = ", rhoBulk/(101325/(287.15*300.0))) +print("Re_Bulk = ", rhoUBulk*yWidth*0.5/muW) + +print("rho_cl/rho_w = ", rho_avg[int(yNum*0.5)]/ rho_avg[0]) +print("T_cl/T_w = ", temperature_avg[int(yNum*0.5)]/temperature_avg[0]) +print("mu_cl/mu_w = ", mu_avg[int(yNum*0.5)]/ mu_avg[0]) +print("Bq = ", q[0,1]/(rhoW*uTau*3.5*287.15*temperature_avg[0])) + +############################################################################## +# Plot stuff # +############################################################################## + +figureDir = "Figures" +if not os.path.exists(figureDir): + os.makedirs(figureDir) + +yovh = yGrid[:]/config["Grid"]["yWidth"]*2 + +# Mean profiles +plt.figure(1) +Umy, = plt.plot( yovh, velocity_avg[:,0]/UBulk, "k") +Tmy, = plt.plot( yovh, temperature_avg[:]/temperature_avg[0], "r") +Rmy, = plt.plot( yovh, rho_avg[:]/ rhoBulk, "b") +UCo, = plt.plot(data["y"][:].values+1, data[""][:].values, "ko", markersize=5) +TCo, = plt.plot(data["y"][:].values+1, data[""][:].values, "ro", markersize=5) +RCo, = plt.plot(data["y"][:].values+1, data[""][:].values, "bo", markersize=5) +plt.xlabel(r"$y/h$") +#plt.ylabel(r"$\overline{u}/u_B$") +plt.gca().set_xlim(0, 1) +plt.legend([(Umy, UCo), (Tmy, TCo), (Rmy, RCo)], + [r"$\overline{u}/ u_b$", r"$\overline{T}/T_w$", r"$\overline{\rho}/\rho_b$"], + handler_map={tuple: HandlerTuple(ndivide=None)}, handlelength=8.0) +plt.savefig(os.path.join(figureDir, "u.eps"), bbox_inches='tight') + +# Fluctuations profiles +plt.figure(2) +UUmy, = plt.plot( yovh, velocity_rms[:,0]/UBulk**2, "k") +VVmy, = plt.plot( yovh, velocity_rms[:,1]/UBulk**2, "r") +WWmy, = plt.plot( yovh, velocity_rms[:,2]/UBulk**2, "b") +UUCo, = plt.plot(data["y"][:].values+1, data[""][:].values, "ko", markersize=5) +VVCo, = plt.plot(data["y"][:].values+1, data[""][:].values, "ro", markersize=5) +WWCo, = plt.plot(data["y"][:].values+1, data[""][:].values, "bo", markersize=5) +plt.xlabel(r"$y/h$") +###plt.ylabel(r"$\overline{\rho u'' u''}/u_B^2$") +plt.gca().set_xlim(0, 1) +plt.legend([(UUmy, UUCo), (VVmy, VVCo), (WWmy, WWCo)], + [r"$\overline{u' u'}/ u_b^2$", r"$\overline{v' v'}/u_b^2$", r"$\overline{w' w'}/u_b^2$"], + handler_map={tuple: HandlerTuple(ndivide=None)}, handlelength=8.0) +plt.savefig(os.path.join(figureDir, "up.eps"), bbox_inches='tight') + +plt.show() diff --git a/testcases/CompressibleBL/CBL.json b/testcases/CompressibleBL/CBL.json new file mode 100644 index 0000000..89a677d --- /dev/null +++ b/testcases/CompressibleBL/CBL.json @@ -0,0 +1,172 @@ +{ + "Mapping" : { + "tiles" : [2,1,1], + "tilesPerRank" : [2,1,1], + "sampleId" : -1, + "outDir" : "", + "wallTime" : 10000 + }, + + "Grid" : { + "xNum" : 800, + "yNum" : 200, + "zNum" : 1, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 8.0, + "yWidth" : 0.4, + "zWidth" : 0.1, + "xType" : "Uniform", + "yType" : "TanhMinus", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 20000, + "maxTime" : 20.0, + "cfl" : 0.5, + "fixedDeltaTime" : 4.0e-3, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "NSCBC_Inflow", + "xBCLeftInflowProfile" : { + "type" : "File", + "FileDir" : "InflowProfile", + "Reynolds" : 100000, + "velocity" : 2083.67 + }, + "xBCLeftP" : 1.01325e5, + "xBCLeftHeat" : { + "type" : "File", + "FileDir" : "InflowProfile", + "temperature" : 300.0 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "NSCBC_Outflow", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : 1.01325e5, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "IsothermalWall", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : 0.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : 300.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "NSCBC_Outflow", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : 1.01325e5, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 287.15, + "gamma" : 1.4, + "prandtl" : 0.71, + "viscosityModel" : "PowerLaw", + "constantVisc" : -1.0, + "powerlawViscRef" : 0.05, + "powerlawTempRef" : 300.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "Restart", + "restartDir" : "InflowProfile", + "initParams" : [1.01325e5, 300.0, 2083.67, 0.0, 0.0], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { "type" : "OFF" } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 5000, + "probes" : [], + "AveragesSamplingInterval": 1, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } +} diff --git a/testcases/CompressibleBL/MakeInput.py b/testcases/CompressibleBL/MakeInput.py new file mode 100755 index 0000000..e49a814 --- /dev/null +++ b/testcases/CompressibleBL/MakeInput.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python2 + +import argparse +import sys +import os +import json +import numpy as np +import h5py +from random import * +import pandas + +# load local modules +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen +import ConstPropMix + +parser = argparse.ArgumentParser() +parser.add_argument('base_json', type=argparse.FileType('r'), default='base.json') +args = parser.parse_args() + +############################################################################## +# Read similarity solution # +############################################################################## + +CBL = pandas.read_csv("SimilaritySolution.dat") +etaB = CBL["eta"][:].values +fB = CBL["f"][:].values +uB = CBL["u"][:].values +TB = CBL["T"][:].values + +############################################################################## +# Setup Case # +############################################################################## + +# Read base config +config = json.load(args.base_json) + +gamma = config["Flow"]["gamma"] +R = config["Flow"]["gasConstant"] +muRef = config["Flow"]["powerlawViscRef"] +TRef = config["Flow"]["powerlawTempRef"] +Pr = config["Flow"]["prandtl"] + +assert config["Flow"]["initCase"] == "Restart" +restartDir = config["Flow"]["restartDir"] + +config["BC"]["xBCLeftInflowProfile"]["FileDir"] = restartDir +config["BC"]["xBCLeftHeat"]["FileDir"] = restartDir +TInf = config["BC"]["xBCLeftHeat"]["temperature"] +Tw = config["BC"]["xBCLeftHeat"]["temperature"] +P = config["BC"]["xBCLeftP"] +UInf = config["BC"]["xBCLeftInflowProfile"]["velocity"] +Rex0 = config["BC"]["xBCLeftInflowProfile"]["Reynolds"] + +aInf = np.sqrt(gamma*R*TInf) +MaInf = UInf/aInf + +RhoInf = ConstPropMix.GetDensity(TInf, P, config) +muInf = ConstPropMix.GetViscosity(TInf, config) +nuInf = ConstPropMix.GetViscosity(TInf, config)/RhoInf + +############################################################################## +# Generate Grid # +############################################################################## + +xGrid, dx = gridGen.GetGrid(config["Grid"]["origin"][0], + config["Grid"]["xWidth"], + config["Grid"]["xNum"], + config["Grid"]["xType"], + config["Grid"]["xStretching"], + False) + +yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + config["Grid"]["yWidth"], + config["Grid"]["yNum"], + config["Grid"]["yType"], + config["Grid"]["yStretching"], + False) + +zGrid, dz = gridGen.GetGrid(config["Grid"]["origin"][2], + config["Grid"]["zWidth"], + config["Grid"]["zNum"], + config["Grid"]["zType"], + config["Grid"]["zStretching"], + False) + +# Load mapping +Ntiles = config["Mapping"]["tiles"] + +assert config["Grid"]["xNum"] % Ntiles[0] == 0 +assert config["Grid"]["yNum"] % Ntiles[1] == 0 +assert config["Grid"]["zNum"] % Ntiles[2] == 0 + +NxTile = int(config["Grid"]["xNum"]/Ntiles[0]) +NyTile = int(config["Grid"]["yNum"]/Ntiles[1]) +NzTile = int(config["Grid"]["zNum"]/Ntiles[2]) + +halo = [1, 1, 0] + +############################################################################## +# Rescale Reynodls number of similarity solution # +############################################################################## + +yB = np.zeros(etaB.size) +for i in range(etaB.size): + if (i != 0) : + rhoMid = 0.5*(ConstPropMix.GetDensity(TB[i ]*TInf, P, config) + + ConstPropMix.GetDensity(TB[i-1]*TInf, P, config)) + dyB = np.sqrt(2*Rex0)*muInf/(rhoMid*UInf)*(etaB[i] - etaB[i-1]) + yB[i] = yB[i-1] + dyB + +x0 = Rex0*nuInf/UInf +vB = 0.5*yB/x0*uB - TB/np.sqrt(2*Rex0)*fB + +uB *= UInf +vB *= UInf +TB *= TInf + +############################################################################## +# Produce restart and profile files # +############################################################################## +if not os.path.exists(restartDir): + os.makedirs(restartDir) + +for xt in range(0, Ntiles[0]): + for yt in range(0, Ntiles[1]): + for zt in range(0, Ntiles[2]): + lo_bound = [(xt )*NxTile +halo[0], (yt )*NyTile +halo[1], (zt )*NzTile +halo[2]] + hi_bound = [(xt+1)*NxTile-1+halo[0], (yt+1)*NyTile-1+halo[1], (zt+1)*NzTile-1+halo[2]] + if (xt == 0): lo_bound[0] -= halo[0] + if (yt == 0): lo_bound[1] -= halo[1] + if (zt == 0): lo_bound[2] -= halo[2] + if (xt == Ntiles[0]-1): hi_bound[0] += halo[0] + if (yt == Ntiles[1]-1): hi_bound[1] += halo[1] + if (zt == Ntiles[2]-1): hi_bound[2] += halo[2] + filename = ('%s,%s,%s-%s,%s,%s.hdf' + % (lo_bound[0], lo_bound[1], lo_bound[2], + hi_bound[0], hi_bound[1], hi_bound[2])) + print("Working on: ", filename) + + shape = [hi_bound[2] - lo_bound[2] +1, + hi_bound[1] - lo_bound[1] +1, + hi_bound[0] - lo_bound[0] +1] + + centerCoordinates = np.ndarray(shape, dtype=np.dtype('(3,)f8')) + cellWidth = np.ndarray(shape, dtype=np.dtype('(3,)f8')) + rho = np.ndarray(shape) + pressure = np.ndarray(shape) + temperature = np.ndarray(shape) + MolarFracs = np.ndarray(shape, dtype=np.dtype('(1,)f8')) + velocity = np.ndarray(shape, dtype=np.dtype('(3,)f8')) + dudtBoundary = np.ndarray(shape) + dTdtBoundary = np.ndarray(shape) + pressure[:] = P + for (k,kc) in enumerate(centerCoordinates): + for (j,jc) in enumerate(kc): + for (i,ic) in enumerate(jc): + Re = (xGrid[i+lo_bound[0]]+x0)*UInf/nuInf + yB1 = yB*np.sqrt(Re/Rex0) + vB1 = vB/np.sqrt(Re/Rex0) + + u = np.interp(yGrid[j+lo_bound[1]], yB1, uB) + v = np.interp(yGrid[j+lo_bound[1]], yB1, vB1) + T = np.interp(yGrid[j+lo_bound[1]], yB1, TB) + + centerCoordinates[k,j,i] = [xGrid[i+lo_bound[0]], yGrid[j+lo_bound[1]], zGrid[k+lo_bound[2]]] + cellWidth [k,j,i] = [ dx[i+lo_bound[0]], dy[j+lo_bound[1]], dz[k+lo_bound[2]]] + temperature [k,j,i] = T + rho [k,j,i] = P/(R*temperature[k,j,i]) + MolarFracs [k,j,i] = [1.0,] + velocity [k,j,i] = [ u, v, 0.0] + + with h5py.File(os.path.join(restartDir, filename), 'w') as fout: + fout.attrs.create("SpeciesNames", ["MIX".encode()], dtype="S20") + fout.attrs.create("timeStep", 0) + fout.attrs.create("simTime", 0.0) + fout.attrs.create("channelForcing", 0.0) + + fout.create_dataset("centerCoordinates", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("cellWidth", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("rho", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("pressure", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("temperature", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("MolarFracs", shape=shape, dtype = np.dtype("(1,)f8")) + fout.create_dataset("velocity", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("dudtBoundary", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("dTdtBoundary", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("velocity_old_NSCBC", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("temperature_old_NSCBC", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("MolarFracs_profile", shape=shape, dtype = np.dtype("(1,)f8")) + fout.create_dataset("velocity_profile", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("temperature_profile", shape=shape, dtype = np.dtype("f8")) + + fout["centerCoordinates"][:] = centerCoordinates + fout["cellWidth"][:] = cellWidth + fout["rho"][:] = rho + fout["pressure"][:] = pressure + fout["temperature"][:] = temperature + fout["MolarFracs"][:] = MolarFracs + fout["velocity"][:] = velocity + fout["dudtBoundary"][:] = dudtBoundary + fout["dTdtBoundary"][:] = dTdtBoundary + fout["velocity_old_NSCBC"][:] = velocity + fout["temperature_old_NSCBC"][:] = temperature + fout["MolarFracs_profile"][:] = MolarFracs + fout["velocity_profile"][:] = velocity + fout["temperature_profile"][:] = temperature + diff --git a/testcases/CompressibleBL/SimilaritySolution.dat b/testcases/CompressibleBL/SimilaritySolution.dat new file mode 100644 index 0000000..1604917 --- /dev/null +++ b/testcases/CompressibleBL/SimilaritySolution.dat @@ -0,0 +1,501 @@ +eta,f,u,T +0,-1.38691e-22,0,1 +0.0200401,8.45892e-05,0.00849764,1.04463 +0.0400802,0.000340587,0.0171047,1.0891 +0.0601202,0.000770148,0.0258175,1.13335 +0.0801603,0.00137536,0.0346326,1.17734 +0.1002,0.00215823,0.0435464,1.22103 +0.12024,0.00312071,0.0525557,1.26437 +0.140281,0.00426467,0.0616571,1.30733 +0.160321,0.00559193,0.0708474,1.34986 +0.180361,0.00710424,0.0801233,1.39192 +0.200401,0.00880329,0.0894817,1.43349 +0.220441,0.0106907,0.0989196,1.47451 +0.240481,0.012768,0.108434,1.51496 +0.260521,0.0150367,0.118021,1.5548 +0.280561,0.0174983,0.127678,1.59399 +0.300601,0.0201541,0.137403,1.63252 +0.320641,0.0230054,0.147191,1.67034 +0.340681,0.0260535,0.15704,1.70742 +0.360721,0.0292996,0.166946,1.74375 +0.380762,0.0327448,0.176908,1.77928 +0.400802,0.0363901,0.18692,1.814 +0.420842,0.0402365,0.196981,1.84787 +0.440882,0.0442851,0.207086,1.88088 +0.460922,0.0485366,0.217234,1.913 +0.480962,0.0529919,0.22742,1.94421 +0.501002,0.0576516,0.237641,1.97449 +0.521042,0.0625166,0.247894,2.00382 +0.541082,0.0675873,0.258175,2.03218 +0.561122,0.0728643,0.268482,2.05955 +0.581162,0.0783481,0.27881,2.08592 +0.601202,0.084039,0.289157,2.11127 +0.621242,0.0899375,0.299518,2.13559 +0.641283,0.0960437,0.30989,2.15887 +0.661323,0.102358,0.32027,2.1811 +0.681363,0.10888,0.330654,2.20227 +0.701403,0.115611,0.341039,2.22237 +0.721443,0.122549,0.35142,2.2414 +0.741483,0.129696,0.361795,2.25934 +0.761523,0.13705,0.372159,2.2762 +0.781563,0.144612,0.382509,2.29197 +0.801603,0.152381,0.392842,2.30666 +0.821643,0.160357,0.403152,2.32026 +0.841683,0.168539,0.413438,2.33277 +0.861723,0.176928,0.423694,2.3442 +0.881764,0.185521,0.433918,2.35456 +0.901804,0.194319,0.444106,2.36384 +0.921844,0.203321,0.454254,2.37206 +0.941884,0.212526,0.464358,2.37923 +0.961924,0.221932,0.474415,2.38535 +0.981964,0.23154,0.484421,2.39044 +1.002,0.241348,0.494373,2.39451 +1.02204,0.251355,0.504267,2.39757 +1.04208,0.261559,0.514099,2.39964 +1.06212,0.27196,0.523867,2.40074 +1.08216,0.282556,0.533566,2.40087 +1.1022,0.293345,0.543194,2.40007 +1.12224,0.304327,0.552746,2.39835 +1.14228,0.3155,0.562221,2.39573 +1.16232,0.326861,0.571615,2.39222 +1.18236,0.33841,0.580925,2.38787 +1.2024,0.350145,0.590147,2.38268 +1.22244,0.362063,0.599279,2.37668 +1.24248,0.374164,0.608319,2.36989 +1.26253,0.386445,0.617263,2.36235 +1.28257,0.398904,0.626109,2.35407 +1.30261,0.411539,0.634854,2.34508 +1.32265,0.424349,0.643497,2.33541 +1.34269,0.437331,0.652034,2.32509 +1.36273,0.450483,0.660464,2.31414 +1.38277,0.463802,0.668784,2.30259 +1.40281,0.477288,0.676993,2.29047 +1.42285,0.490936,0.685089,2.27781 +1.44289,0.504746,0.69307,2.26463 +1.46293,0.518715,0.700934,2.25096 +1.48297,0.53284,0.70868,2.23684 +1.50301,0.547119,0.716307,2.22228 +1.52305,0.561549,0.723814,2.20732 +1.54309,0.576129,0.731199,2.19198 +1.56313,0.590856,0.738461,2.17629 +1.58317,0.605727,0.7456,2.16029 +1.60321,0.62074,0.752615,2.14398 +1.62325,0.635892,0.759505,2.12741 +1.64329,0.651181,0.76627,2.11059 +1.66333,0.666604,0.77291,2.09355 +1.68337,0.682159,0.779424,2.07632 +1.70341,0.697843,0.785811,2.05892 +1.72345,0.713655,0.792073,2.04138 +1.74349,0.72959,0.798209,2.02371 +1.76353,0.745647,0.804219,2.00594 +1.78357,0.761823,0.810104,1.98809 +1.80361,0.778116,0.815864,1.97018 +1.82365,0.794523,0.8215,1.95223 +1.84369,0.811042,0.827011,1.93426 +1.86373,0.82767,0.8324,1.9163 +1.88377,0.844405,0.837666,1.89835 +1.90381,0.861244,0.84281,1.88043 +1.92385,0.878185,0.847835,1.86257 +1.94389,0.895225,0.852739,1.84478 +1.96393,0.912362,0.857525,1.82707 +1.98397,0.929595,0.862194,1.80945 +2.00401,0.946919,0.866747,1.79195 +2.02405,0.964334,0.871185,1.77456 +2.04409,0.981837,0.875509,1.75732 +2.06413,0.999425,0.879722,1.74022 +2.08417,1.0171,0.883824,1.72328 +2.10421,1.03485,0.887817,1.7065 +2.12425,1.05268,0.891703,1.68991 +2.14429,1.07059,0.895482,1.6735 +2.16433,1.08857,0.899158,1.65728 +2.18437,1.10663,0.902731,1.64126 +2.20441,1.12475,0.906203,1.62545 +2.22445,1.14295,0.909576,1.60986 +2.24449,1.16121,0.912851,1.59448 +2.26453,1.17953,0.916031,1.57933 +2.28457,1.19792,0.919117,1.56441 +2.30461,1.21637,0.922111,1.54972 +2.32465,1.23488,0.925014,1.53527 +2.34469,1.25345,0.92783,1.52106 +2.36473,1.27207,0.930558,1.50709 +2.38477,1.29074,0.933202,1.49337 +2.40481,1.30947,0.935762,1.47989 +2.42485,1.32825,0.938241,1.46666 +2.44489,1.34708,0.940641,1.45368 +2.46493,1.36595,0.942964,1.44095 +2.48497,1.38487,0.94521,1.42847 +2.50501,1.40384,0.947383,1.41624 +2.52505,1.42284,0.949483,1.40426 +2.54509,1.44189,0.951513,1.39253 +2.56513,1.46098,0.953475,1.38105 +2.58517,1.48011,0.955369,1.36981 +2.60521,1.49927,0.957198,1.35882 +2.62525,1.51847,0.958964,1.34808 +2.64529,1.53771,0.960668,1.33757 +2.66533,1.55697,0.962311,1.32731 +2.68537,1.57628,0.963896,1.31729 +2.70541,1.59561,0.965425,1.3075 +2.72545,1.61497,0.966897,1.29794 +2.74549,1.63436,0.968316,1.28862 +2.76553,1.65378,0.969683,1.27952 +2.78557,1.67323,0.970999,1.27065 +2.80561,1.6927,0.972266,1.262 +2.82565,1.71219,0.973486,1.25357 +2.84569,1.73172,0.974659,1.24535 +2.86573,1.75126,0.975787,1.23735 +2.88577,1.77082,0.976871,1.22956 +2.90581,1.79041,0.977913,1.22198 +2.92585,1.81002,0.978915,1.21459 +2.94589,1.82965,0.979877,1.20741 +2.96593,1.84929,0.980801,1.20042 +2.98597,1.86896,0.981688,1.19363 +3.00601,1.88864,0.982539,1.18702 +3.02605,1.90834,0.983355,1.1806 +3.04609,1.92805,0.984138,1.17436 +3.06613,1.94778,0.984889,1.1683 +3.08617,1.96753,0.985608,1.16242 +3.10621,1.98729,0.986298,1.1567 +3.12625,2.00706,0.986958,1.15115 +3.14629,2.02684,0.98759,1.14577 +3.16633,2.04664,0.988195,1.14055 +3.18637,2.06645,0.988775,1.13548 +3.20641,2.08627,0.989329,1.13057 +3.22645,2.1061,0.989858,1.12581 +3.24649,2.12594,0.990365,1.1212 +3.26653,2.1458,0.990849,1.11672 +3.28657,2.16566,0.991312,1.11239 +3.30661,2.18553,0.991753,1.1082 +3.32665,2.20541,0.992175,1.10414 +3.34669,2.2253,0.992578,1.1002 +3.36673,2.24519,0.992962,1.0964 +3.38677,2.26509,0.993328,1.09272 +3.40681,2.285,0.993677,1.08916 +3.42685,2.30492,0.99401,1.08571 +3.44689,2.32484,0.994327,1.08238 +3.46693,2.34477,0.99463,1.07917 +3.48697,2.36471,0.994917,1.07606 +3.50701,2.38465,0.995191,1.07305 +3.52705,2.4046,0.995452,1.07015 +3.54709,2.42455,0.9957,1.06735 +3.56713,2.4445,0.995935,1.06464 +3.58717,2.46446,0.99616,1.06203 +3.60721,2.48443,0.996373,1.05952 +3.62725,2.5044,0.996575,1.05709 +3.64729,2.52437,0.996767,1.05474 +3.66733,2.54435,0.996949,1.05248 +3.68737,2.56433,0.997122,1.05031 +3.70741,2.58431,0.997286,1.04821 +3.72745,2.6043,0.997442,1.04619 +3.74749,2.62429,0.99759,1.04424 +3.76754,2.64429,0.997729,1.04236 +3.78758,2.66428,0.997862,1.04056 +3.80762,2.68428,0.997987,1.03882 +3.82766,2.70428,0.998106,1.03715 +3.8477,2.72428,0.998218,1.03554 +3.86774,2.74429,0.998324,1.03399 +3.88778,2.7643,0.998425,1.0325 +3.90782,2.78431,0.99852,1.03107 +3.92786,2.80432,0.99861,1.0297 +3.9479,2.82433,0.998694,1.02838 +3.96794,2.84435,0.998774,1.02711 +3.98798,2.86436,0.99885,1.02589 +4.00802,2.88438,0.998921,1.02473 +4.02806,2.9044,0.998988,1.0236 +4.0481,2.92442,0.999052,1.02253 +4.06814,2.94444,0.999111,1.02149 +4.08818,2.96446,0.999167,1.0205 +4.10822,2.98449,0.99922,1.01955 +4.12826,3.00451,0.99927,1.01864 +4.1483,3.02454,0.999317,1.01777 +4.16834,3.04457,0.999361,1.01694 +4.18838,3.06459,0.999403,1.01614 +4.20842,3.08462,0.999442,1.01537 +4.22846,3.10465,0.999478,1.01464 +4.2485,3.12468,0.999513,1.01393 +4.26854,3.14471,0.999545,1.01326 +4.28858,3.16474,0.999575,1.01262 +4.30862,3.18478,0.999604,1.01201 +4.32866,3.20481,0.999631,1.01142 +4.3487,3.22484,0.999656,1.01086 +4.36874,3.24487,0.999679,1.01032 +4.38878,3.26491,0.999701,1.00981 +4.40882,3.28494,0.999721,1.00932 +4.42886,3.30498,0.999741,1.00885 +4.4489,3.32501,0.999759,1.00841 +4.46894,3.34505,0.999775,1.00798 +4.48898,3.36508,0.999791,1.00758 +4.50902,3.38512,0.999806,1.00719 +4.52906,3.40516,0.99982,1.00682 +4.5491,3.42519,0.999832,1.00647 +4.56914,3.44523,0.999844,1.00613 +4.58918,3.46527,0.999856,1.00581 +4.60922,3.4853,0.999866,1.00551 +4.62926,3.50534,0.999876,1.00522 +4.6493,3.52538,0.999885,1.00494 +4.66934,3.54542,0.999893,1.00468 +4.68938,3.56545,0.999901,1.00443 +4.70942,3.58549,0.999908,1.0042 +4.72946,3.60553,0.999915,1.00397 +4.7495,3.62557,0.999921,1.00376 +4.76954,3.64561,0.999927,1.00355 +4.78958,3.66565,0.999933,1.00336 +4.80962,3.68569,0.999938,1.00317 +4.82966,3.70572,0.999943,1.003 +4.8497,3.72576,0.999947,1.00283 +4.86974,3.7458,0.999951,1.00268 +4.88978,3.76584,0.999955,1.00253 +4.90982,3.78588,0.999958,1.00239 +4.92986,3.80592,0.999962,1.00225 +4.9499,3.82596,0.999965,1.00213 +4.96994,3.846,0.999967,1.002 +4.98998,3.86604,0.99997,1.00189 +5.01002,3.88608,0.999972,1.00178 +5.03006,3.90612,0.999975,1.00168 +5.0501,3.92616,0.999977,1.00158 +5.07014,3.9462,0.999978,1.00149 +5.09018,3.96624,0.99998,1.0014 +5.11022,3.98628,0.999982,1.00132 +5.13026,4.00632,0.999983,1.00125 +5.1503,4.02635,0.999985,1.00117 +5.17034,4.04639,0.999986,1.0011 +5.19038,4.06643,0.999987,1.00104 +5.21042,4.08647,0.999988,1.00097 +5.23046,4.10651,0.999989,1.00092 +5.2505,4.12655,0.99999,1.00086 +5.27054,4.14659,0.999991,1.00081 +5.29058,4.16663,0.999992,1.00076 +5.31062,4.18667,0.999992,1.00071 +5.33066,4.20671,0.999993,1.00067 +5.3507,4.22675,0.999994,1.00063 +5.37074,4.24679,0.999994,1.00059 +5.39078,4.26683,0.999995,1.00055 +5.41082,4.28687,0.999995,1.00052 +5.43086,4.30691,0.999996,1.00049 +5.4509,4.32695,0.999996,1.00046 +5.47094,4.34699,0.999996,1.00043 +5.49098,4.36703,0.999997,1.0004 +5.51102,4.38707,0.999997,1.00038 +5.53106,4.40711,0.999997,1.00035 +5.5511,4.42715,0.999997,1.00033 +5.57114,4.44719,0.999998,1.00031 +5.59118,4.46723,0.999998,1.00029 +5.61122,4.48727,0.999998,1.00027 +5.63126,4.50731,0.999998,1.00025 +5.6513,4.52735,0.999998,1.00024 +5.67134,4.54739,0.999999,1.00022 +5.69138,4.56743,0.999999,1.00021 +5.71142,4.58747,0.999999,1.00019 +5.73146,4.60751,0.999999,1.00018 +5.7515,4.62755,0.999999,1.00017 +5.77154,4.64759,0.999999,1.00016 +5.79158,4.66763,0.999999,1.00015 +5.81162,4.68767,0.999999,1.00014 +5.83166,4.70771,0.999999,1.00013 +5.8517,4.72775,0.999999,1.00012 +5.87174,4.74779,0.999999,1.00011 +5.89178,4.76783,0.999999,1.0001 +5.91182,4.78787,1,1.0001 +5.93186,4.80791,1,1.00009 +5.9519,4.82795,1,1.00008 +5.97194,4.84799,1,1.00008 +5.99198,4.86803,1,1.00007 +6.01202,4.88808,1,1.00007 +6.03206,4.90812,1,1.00006 +6.0521,4.92816,1,1.00006 +6.07214,4.9482,1,1.00005 +6.09218,4.96824,1,1.00005 +6.11222,4.98828,1,1.00005 +6.13226,5.00832,1,1.00004 +6.1523,5.02836,1,1.00004 +6.17234,5.0484,1,1.00004 +6.19238,5.06844,1,1.00003 +6.21242,5.08848,1,1.00003 +6.23246,5.10852,1,1.00003 +6.25251,5.12856,1,1.00003 +6.27255,5.1486,1,1.00003 +6.29259,5.16864,1,1.00002 +6.31263,5.18868,1,1.00002 +6.33267,5.20872,1,1.00002 +6.35271,5.22876,1,1.00002 +6.37275,5.2488,1,1.00002 +6.39279,5.26884,1,1.00002 +6.41283,5.28888,1,1.00001 +6.43287,5.30892,1,1.00001 +6.45291,5.32896,1,1.00001 +6.47295,5.349,1,1.00001 +6.49299,5.36904,1,1.00001 +6.51303,5.38908,1,1.00001 +6.53307,5.40912,1,1.00001 +6.55311,5.42916,1,1.00001 +6.57315,5.4492,1,1.00001 +6.59319,5.46924,1,1.00001 +6.61323,5.48928,1,1.00001 +6.63327,5.50932,1,1.00001 +6.65331,5.52936,1,1.00001 +6.67335,5.5494,1,1.00001 +6.69339,5.56944,1,1 +6.71343,5.58948,1,1 +6.73347,5.60952,1,1 +6.75351,5.62956,1,1 +6.77355,5.6496,1,1 +6.79359,5.66964,1,1 +6.81363,5.68968,1,1 +6.83367,5.70972,1,1 +6.85371,5.72976,1,1 +6.87375,5.7498,1,1 +6.89379,5.76984,1,1 +6.91383,5.78988,1,1 +6.93387,5.80992,1,1 +6.95391,5.82996,1,1 +6.97395,5.85,1,1 +6.99399,5.87004,1,1 +7.01403,5.89008,1,1 +7.03407,5.91012,1,1 +7.05411,5.93016,1,1 +7.07415,5.9502,1,1 +7.09419,5.97024,1,1 +7.11423,5.99028,1,1 +7.13427,6.01032,1,1 +7.15431,6.03036,1,1 +7.17435,6.0504,1,1 +7.19439,6.07044,1,1 +7.21443,6.09048,1,1 +7.23447,6.11052,1,1 +7.25451,6.13056,1,1 +7.27455,6.1506,1,1 +7.29459,6.17064,1,1 +7.31463,6.19068,1,1 +7.33467,6.21072,1,1 +7.35471,6.23076,1,1 +7.37475,6.2508,1,1 +7.39479,6.27084,1,1 +7.41483,6.29088,1,1 +7.43487,6.31092,1,1 +7.45491,6.33096,1,1 +7.47495,6.351,1,1 +7.49499,6.37104,1,1 +7.51503,6.39108,1,1 +7.53507,6.41112,1,1 +7.55511,6.43116,1,1 +7.57515,6.4512,1,1 +7.59519,6.47124,1,1 +7.61523,6.49128,1,1 +7.63527,6.51132,1,1 +7.65531,6.53136,1,1 +7.67535,6.5514,1,1 +7.69539,6.57144,1,1 +7.71543,6.59148,1,1 +7.73547,6.61152,1,1 +7.75551,6.63156,1,1 +7.77555,6.6516,1,1 +7.79559,6.67164,1,1 +7.81563,6.69168,1,1 +7.83567,6.71172,1,1 +7.85571,6.73176,1,1 +7.87575,6.7518,1,1 +7.89579,6.77184,1,1 +7.91583,6.79188,1,1 +7.93587,6.81192,1,1 +7.95591,6.83196,1,1 +7.97595,6.852,1,1 +7.99599,6.87204,1,1 +8.01603,6.89208,1,1 +8.03607,6.91212,1,1 +8.05611,6.93216,1,1 +8.07615,6.9522,1,1 +8.09619,6.97224,1,1 +8.11623,6.99228,1,1 +8.13627,7.01232,1,1 +8.15631,7.03236,1,1 +8.17635,7.0524,1,1 +8.19639,7.07244,1,1 +8.21643,7.09248,1,1 +8.23647,7.11252,1,1 +8.25651,7.13256,1,1 +8.27655,7.1526,1,1 +8.29659,7.17264,1,1 +8.31663,7.19268,1,1 +8.33667,7.21272,1,1 +8.35671,7.23276,1,1 +8.37675,7.2528,1,1 +8.39679,7.27284,1,1 +8.41683,7.29288,1,1 +8.43687,7.31292,1,1 +8.45691,7.33296,1,1 +8.47695,7.353,1,1 +8.49699,7.37304,1,1 +8.51703,7.39309,1,1 +8.53707,7.41313,1,1 +8.55711,7.43317,1,1 +8.57715,7.45321,1,1 +8.59719,7.47325,1,1 +8.61723,7.49329,1,1 +8.63727,7.51333,1,1 +8.65731,7.53337,1,1 +8.67735,7.55341,1,1 +8.69739,7.57345,1,1 +8.71743,7.59349,1,1 +8.73747,7.61353,1,1 +8.75752,7.63357,1,1 +8.77756,7.65361,1,1 +8.7976,7.67365,1,1 +8.81764,7.69369,1,1 +8.83768,7.71373,1,1 +8.85772,7.73377,1,1 +8.87776,7.75381,1,1 +8.8978,7.77385,1,1 +8.91784,7.79389,1,1 +8.93788,7.81393,1,1 +8.95792,7.83397,1,1 +8.97796,7.85401,1,1 +8.998,7.87405,1,1 +9.01804,7.89409,1,1 +9.03808,7.91413,1,1 +9.05812,7.93417,1,1 +9.07816,7.95421,1,1 +9.0982,7.97425,1,1 +9.11824,7.99429,1,1 +9.13828,8.01433,1,1 +9.15832,8.03437,1,1 +9.17836,8.05441,1,1 +9.1984,8.07445,1,1 +9.21844,8.09449,1,1 +9.23848,8.11453,1,1 +9.25852,8.13457,1,1 +9.27856,8.15461,1,1 +9.2986,8.17465,1,1 +9.31864,8.19469,1,1 +9.33868,8.21473,1,1 +9.35872,8.23477,1,1 +9.37876,8.25481,1,1 +9.3988,8.27485,1,1 +9.41884,8.29489,1,1 +9.43888,8.31493,1,1 +9.45892,8.33497,1,1 +9.47896,8.35501,1,1 +9.499,8.37505,1,1 +9.51904,8.39509,1,1 +9.53908,8.41513,1,1 +9.55912,8.43517,1,1 +9.57916,8.45521,1,1 +9.5992,8.47525,1,1 +9.61924,8.49529,1,1 +9.63928,8.51533,1,1 +9.65932,8.53537,1,1 +9.67936,8.55541,1,1 +9.6994,8.57545,1,1 +9.71944,8.59549,1,1 +9.73948,8.61553,1,1 +9.75952,8.63557,1,1 +9.77956,8.65561,1,1 +9.7996,8.67565,1,1 +9.81964,8.69569,1,1 +9.83968,8.71573,1,1 +9.85972,8.73577,1,1 +9.87976,8.75581,1,1 +9.8998,8.77585,1,1 +9.91984,8.79589,1,1 +9.93988,8.81593,1,1 +9.95992,8.83597,1,1 +9.97996,8.85601,1,1 +10,8.87605,1,1 diff --git a/testcases/CompressibleBL/postProc.py b/testcases/CompressibleBL/postProc.py new file mode 100644 index 0000000..c88dd7c --- /dev/null +++ b/testcases/CompressibleBL/postProc.py @@ -0,0 +1,185 @@ +import numpy as np +import json +#import argparse +import matplotlib.pyplot as plt +import sys +import os +import subprocess +import h5py +import pandas +from scipy.integrate import odeint +from scipy.optimize import fsolve + +# load local modules +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen +import ConstPropMix + +dir_name = os.path.join(os.environ['HTR_DIR'], 'testcases/CompressibleBL') +prometeo_input_file = os.path.join(dir_name, 'CBL.json') + +muExp = 0.75 + +############################################################################## +# Read Prometeo Input File # +############################################################################## +with open(prometeo_input_file) as f: + data = json.load(f) + +xNum = data["Grid"]["xNum"] +yNum = data["Grid"]["yNum"] +xWidth = data["Grid"]["xWidth"] +yWidth = data["Grid"]["yWidth"] +xOrigin = data["Grid"]["origin"][0] +yOrigin = data["Grid"]["origin"][1] + +gamma = data["Flow"]["gamma"] +R = data["Flow"]["gasConstant"] +muRef = data["Flow"]["powerlawViscRef"] +TRef = data["Flow"]["powerlawTempRef"] +Pr = data["Flow"]["prandtl"] + +TInf = data["BC"]["xBCLeftHeat"]["temperature"] +Tw = data["BC"]["yBCLeftHeat"]["temperature"] +P = data["BC"]["xBCLeftP"] +U = data["BC"]["xBCLeftInflowProfile"]["velocity"] +Re = data["BC"]["xBCLeftInflowProfile"]["Reynolds"] + +aInf = np.sqrt(gamma*R*TInf) +MaInf = U/aInf + +def visc(T): + return muRef*(T/TRef)**0.7 + +############################################################################## +# Process result file # +############################################################################## +def process(frac): + RhoInf = P/(R*TInf) + nuInf = visc(TInf)/RhoInf + + dt = data["Integrator"]["fixedDeltaTime"] + nstep = int(data["Integrator"]["maxIter"]) + time = dt*nstep + + filename = os.path.join(dir_name, 'sample0/fluid_iter'+str(nstep).zfill(10)+'/0,0,0-'+str(xNum+1)+','+str(yNum+1)+',0.hdf') + exists = os.path.isfile(filename) + + if (not exists): + # merge files from different tiles + merge_command = 'python {} {}'.format(os.path.expandvars('$HTR_DIR/scripts/merge.py'), + os.path.join(dir_name, 'sample0/fluid_iter'+str(nstep).zfill(10)+'/*.hdf')) + mv_command = 'mv {} {}'.format('./0,0,0-'+str(xNum+1)+','+str(yNum+1)+',0.hdf', + os.path.join(dir_name, 'sample0/fluid_iter'+str(nstep).zfill(10)+'/')) + + try: + subprocess.call(merge_command, shell=True) + except OSError: + print("Failed command: {}".format(merge_command)) + sys.exit() + + try: + subprocess.call( mv_command, shell=True) + except OSError: + print("Failed command: {}".format(mv_command)) + sys.exit() + +############################################################################## +# Read Prometeo Output Data # +############################################################################## + + f = h5py.File(filename, 'r') + + # Get the data + centerCoordinates = f['centerCoordinates'] + cellWidth = f['cellWidth'] + pressure = f['pressure'] + temperature = f['temperature'] + density = f['rho'] + velocity = f['velocity'] + + # Get simulation data along a line (ignore ghost cells) + x_slice_idx = int(frac*xNum) + + x0 = centerCoordinates[0,0,0 ][0] - xOrigin + x = centerCoordinates[0,0,x_slice_idx][0] - xOrigin + y = centerCoordinates[0,:,x_slice_idx][:,1] - yOrigin + u = velocity[0,:,x_slice_idx][:,0] + v = velocity[0,:,x_slice_idx][:,1] + T = temperature[0,:,x_slice_idx] + p = pressure[0,:,x_slice_idx] + rho = density[0,:,x_slice_idx] + + x += Re*nuInf/U-x0 + myRe = U*x/nuInf + print(myRe) + + eta = np.zeros(y.size) + for i in range(y.size) : + if (i > 0) : + rhoMid = 0.5*(rho[i] + rho[i-1]) + eta[i] = eta[i-1] + U/(visc(TInf)*np.sqrt(2*myRe))*rhoMid*(y[i] - y[i-1]) + + return eta, u/U, v*np.sqrt(2.0*myRe)/U, T/TInf, p + +############################################################################## +# Read similarity solution # +############################################################################## + +CBL = pandas.read_csv("SimilaritySolution.dat") +etaB = CBL["eta"][:].values +fB = CBL["f" ][:].values +uB = CBL["u" ][:].values +TB = CBL["T" ][:].values + +integ = 0 +vB = np.zeros(etaB.size) +for i in range(etaB.size): + if (i>0): + integ += 0.5*(TB[i] + TB[i-1])*(etaB[i] - etaB[i-1]) + vB[i] = integ*uB[i] - TB[i]*fB[i] + +eta1, u1, v1, T1, p1 = process(0.4) +eta2, u2, v2, T2, p2 = process(0.8) + +############################################################################## +# Plot # +############################################################################## + +plt.rcParams.update({'font.size': 16}) +stp = 2 + +plt.figure(1) +plt.plot(uB[::stp], etaB[::stp], 'xk', label='Self-similar theory') +#plt.plot(u1, eta1, '-r', label='u, x/L = 0.4') +#plt.plot(u2, eta2, '-b', label='u, x/L = 0.8') +plt.plot(u2, eta2, '-r', label='HTR solver') +plt.xlabel(r'$u/U_\infty$', fontsize = 20) +plt.ylabel(r'$\eta$' , fontsize = 20) +plt.gca().set_ylim(0, 10) +plt.legend() +plt.savefig('U.eps', bbox_inches='tight') + +plt.figure(2) +plt.plot(vB[::stp], etaB[::stp], 'xk', label='Self-similar theory') +#plt.plot(v1, eta1, '-r', label='v, x/L = 0.4') +#plt.plot(v2, eta2, '-b', label='v, x/L = 0.8') +plt.plot(v2, eta2, '-r', label='HTR solver') +plt.xlabel(r'$v/U_\infty \sqrt{2 Re_x}$', fontsize = 20) +plt.ylabel(r'$\eta$' , fontsize = 20) +plt.gca().set_ylim(0, 10) +plt.legend() +plt.savefig('V.eps', bbox_inches='tight') + +plt.figure(3) +plt.plot(TB[::stp], etaB[::stp], 'xk', label='Self-similar theory') +#plt.plot(T1, eta1, '-r', label='T, x/L = 0.4') +#plt.plot(T2, eta2, '-b', label='T, x/L = 0.8') +plt.plot(T2, eta2, '-r', label='HTR solver') +plt.xlabel(r'$T/T_\infty$', fontsize = 20) +plt.ylabel(r'$\eta$' , fontsize = 20) +plt.gca().set_ylim(0, 10) +plt.legend() +plt.savefig('T.eps', bbox_inches='tight') + +plt.show() diff --git a/testcases/CompressibleBL/run.sh b/testcases/CompressibleBL/run.sh new file mode 100755 index 0000000..1630cfd --- /dev/null +++ b/testcases/CompressibleBL/run.sh @@ -0,0 +1,5 @@ +rm -rf sample* slurm* + +#LEGION_FREEZE_ON_ERROR=1 +USE_CUDA=1 PROFILE=0 QUEUE="gpu" $HTR_DIR/src/prometeo.sh -i CBL.json +#USE_CUDA=0 PROFILE=0 QUEUE="all" $HTR_DIR/src/prometeo.sh -i CBL.json diff --git a/testcases/Franko/Cf.csv b/testcases/Franko/Cf.csv new file mode 100644 index 0000000..41e5b35 --- /dev/null +++ b/testcases/Franko/Cf.csv @@ -0,0 +1,44 @@ +x,Cf +0.0316,21.0838 +0.0789,18.6703 +0.1105,17.5319 +0.2368,14.6175 +0.3474,12.7505 +0.4895,11.1566 +0.6632,10.0638 +0.8526,9.0619 +1.0895,8.1512 +1.3737,7.3315 +1.6737,6.694 +2.0211,6.1475 +2.3842,5.6922 +2.7632,5.3279 +3.1105,5.0546 +3.4737,4.827 +3.6158,4.827 +4.0105,4.918 +4.3895,4.8725 +4.6421,5.6922 +4.8,6.7395 +4.9263,7.8324 +5.0211,8.9253 +5.1158,10.0182 +5.2105,11.1111 +5.2895,12.2495 +5.3842,13.3424 +5.4947,14.4353 +5.7474,15.255 +5.9684,16.1202 +6.0474,16.9854 +6.1421,18.0783 +6.3789,18.8069 +6.6632,19.0801 +6.9158,18.3515 +7.1842,17.7596 +7.4368,16.8944 +7.7368,16.2113 +8.0842,15.7104 +8.3684,14.9362 +8.6684,14.3443 +8.9842,13.7978 +9.3632,13.9344 diff --git a/testcases/Franko/MakeInput.py b/testcases/Franko/MakeInput.py new file mode 100755 index 0000000..a123b26 --- /dev/null +++ b/testcases/Franko/MakeInput.py @@ -0,0 +1,352 @@ +#!/usr/bin/env python2 + +import argparse +import sys +import os +import json +import numpy as np +import h5py +from random import * +from scipy.integrate import odeint +from scipy.optimize import fsolve +from joblib import Parallel, delayed + +# load local modules +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen +import ConstPropMix + +parser = argparse.ArgumentParser() +parser.add_argument('--np', nargs='?', default=1, type=int, + help='number of cores') +parser.add_argument('base_json', type=argparse.FileType('r'), default='base.json') +args = parser.parse_args() + +############################################################################## +# Setup Case # +############################################################################## + +# Read base config +config = json.load(args.base_json) + +ReIn = config["Case"]["ReInlet"] +MaInf = config["Case"]["MaInf"] +TInf = config["Case"]["TInf"] +PInf = config["Case"]["PInf"] +TwOvT = config["Case"]["TwOvTInf"] +xTurb = config["Case"]["xTurb"] +yPlus = config["Case"]["yPlus"] +FTT = config["Case"]["FlowThroughTimesNoStat"] +FTTS = config["Case"]["FlowThroughTimesStat"] + +# Read properties +Pr = config["Flow"]["prandtl"] +gamma = config["Flow"]["gamma"] +R = config["Flow"]["gasConstant"] + +# Simulation setup +assert config["Flow"]["turbForcing"]["type"] == "OFF" +assert config["Flow"]["initCase"] == "Restart" +restartDir = "InitialCase" +config["Flow"]["restartDir"] = restartDir + +# Free-stream mixture properties +cInf = np.sqrt(gamma*R*TInf) +muInf = ConstPropMix.GetViscosity(TInf, config) + +# Free-stream conditions +UInf = cInf*MaInf +rhoInf = ConstPropMix.GetDensity(TInf, PInf, config) + +# Inlet displacement thickness +deltaStarIn = muInf*ReIn/(UInf*rhoInf) + +# Wall properties +Tw = TInf*TwOvT +muW = ConstPropMix.GetViscosity(Tw, config) +rhoW = ConstPropMix.GetDensity(Tw, PInf, config) + +r = Pr**(1.0/3.0) +Taw = TInf*(1.0 + r*0.5*(gamma - 1.0)*MaInf**2) + +############################################################################## +# Compute similarity solution # +############################################################################## + +Np = 500 +def GetCBL(): + def CBLFun(U, y): + u, F, h, G, g = U.T + T = 1.0 + 0.5*h*(gamma - 1.0)*MaInf**2 + assert T>0 + mu = ConstPropMix.GetViscosity(T*TInf, config)/muInf + return [ F/mu, + -0.5*g*F/mu, + Pr*G/mu, + -0.5*Pr*G*g/mu - 2*F**2/mu, + u/T ] + + eta = np.linspace(0, 50, Np) + u_0 = 0.0 + #F_0 = 0.0 + h_0 = (Tw/TInf-1.0)*2/((gamma - 1.0)*MaInf**2) + #G_0 = 0.0 + g_0 = 0.0 + + def objective(A): + F_0, G_0 = A + U = odeint(CBLFun, [u_0, F_0, h_0, G_0, g_0], eta) + u, F, h, G, g = U.T + return [u[Np-1] - 1.0, h[Np-1]] + + A = fsolve(objective, [0.01, 0.1]) + F_0, G_0 = A + + U = odeint(CBLFun, [u_0, F_0, h_0, G_0, g_0], eta) + u, F, h, G, g = U.T + T = 1.0 + 0.5*h*(gamma - 1.0)*MaInf**2 + v = (eta*u/T - g)*T*0.5 + return eta, u, v, T + +etaB, uB, vB, TB = GetCBL() + +# Compute distance from leading edge +deltaStarNorm = 0.0 +for i in range(Np-1): + deltaStarNorm += (1.0 - 0.5*(uB[i+1]/TB[i+1] + uB[i]/TB[i]))*(etaB[i+1]- etaB[i]) + +x0 = (deltaStarIn/deltaStarNorm)**2*rhoInf*UInf/muInf +Rex0 = UInf*rhoInf*x0/muInf + +# Reference friction coefficient +def getCfTurb(xGrid): + + def VanDriestII(Cf): + Rexv = (xGrid-xTurb)*ReIn + + a = np.sqrt(r*0.5*(gamma - 1.0)*MaInf**2*TInf/Tw) + b = (Taw/Tw - 1.0) + + A = (2*a**2 - b)/np.sqrt(b**2 + 4*a**2) + B = b /np.sqrt(b**2 + 4*a**2) + + res = (np.arcsin(A) + np.arcsin(B))/np.sqrt(Cf*(Taw/TInf - 1.0)) + res-= 4.15*np.log10(Rexv*Cf*muInf/muW) + res-= 1.7 + return res + + cf = fsolve(VanDriestII, 1e-4, xtol=1e-10) + + return cf + +Cf = getCfTurb(config["Grid"]["xWidth"]+x0) +TauW = Cf*(rhoInf*UInf**2)*0.5 +uTau = np.sqrt(TauW/rhoW) +deltaNu = muW/(uTau*rhoW) +tNu = deltaNu**2*rhoW/muW + +# Rescale quantities +uB *= UInf +vB *= UInf +TB *= TInf +config["Grid"]["origin"][0] = x0 +config["Grid"]["xWidth"] *= deltaStarIn +config["Grid"]["yWidth"] *= deltaStarIn +config["Grid"]["zWidth"] *= deltaStarIn + +############################################################################## +# Boundary conditions # +############################################################################## +assert config["BC"]["xBCLeft"] == "NSCBC_Inflow" +assert config["BC"]["xBCLeftInflowProfile"]["type"] == "File" +config["BC"]["xBCLeftInflowProfile"]["FileDir"] = restartDir +assert config["BC"]["xBCLeftHeat"]["type"] == "File" +config["BC"]["xBCLeftHeat"]["FileDir"] = restartDir +config["BC"]["xBCLeftP"] = PInf + +assert config["BC"]["xBCRight"] == "NSCBC_Outflow" +config["BC"]["xBCRightP"] = PInf + +assert config["BC"]["yBCLeft"] == "SuctionAndBlowingWall" +assert config["BC"]["yBCLeftHeat"]["type"] == "Constant" +config['BC']["yBCLeftHeat"]["temperature"] = Tw +assert config["BC"]["yBCLeftInflowProfile"]["type"] == "SuctionAndBlowing" + +config["BC"]["yBCLeftInflowProfile"]["Xmin"] = 15*deltaStarIn + x0 +config["BC"]["yBCLeftInflowProfile"]["Xmax"] = 20*deltaStarIn + x0 +config["BC"]["yBCLeftInflowProfile"]["X0"] = 0.5*(config["BC"]["yBCLeftInflowProfile"]["Xmin"] + config["BC"]["yBCLeftInflowProfile"]["Xmax"]) +config["BC"]["yBCLeftInflowProfile"]["sigma"] = 0.3*(config["BC"]["yBCLeftInflowProfile"]["X0"] - config["BC"]["yBCLeftInflowProfile"]["Xmin"]) +config["BC"]["yBCLeftInflowProfile"]["Zw"] = 0.1*config["Grid"]["zWidth"] + +config["BC"]["yBCLeftInflowProfile"]["A"] = [ 0.05*UInf, 0.05*UInf] +config["BC"]["yBCLeftInflowProfile"]["omega"] = [ 0.9*cInf/deltaStarIn, 0.9*cInf/deltaStarIn] +config["BC"]["yBCLeftInflowProfile"]["beta"] = [ 0.3/deltaStarIn, -0.3/deltaStarIn] + +assert config["BC"]["yBCRight"] == "NSCBC_Outflow" +config["BC"]["yBCRightP"] = PInf + +############################################################################## +# Generate Grid # +############################################################################## + +def objective(yStretching): + yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + config["Grid"]["yWidth"], + config["Grid"]["yNum"], + config["Grid"]["yType"], + yStretching, + False) + return dy[1]/deltaNu - yPlus + +config["Grid"]["yStretching"], = fsolve(objective, 1.0) + +xGrid, dx = gridGen.GetGrid(config["Grid"]["origin"][0], + config["Grid"]["xWidth"], + config["Grid"]["xNum"], + config["Grid"]["xType"], + 1.0, + False) + + +yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + config["Grid"]["yWidth"], + config["Grid"]["yNum"], + config["Grid"]["yType"], + config["Grid"]["yStretching"], + False, + deltaNu*yPlus) + +zGrid, dz = gridGen.GetGrid(config["Grid"]["origin"][2], + config["Grid"]["zWidth"], + config["Grid"]["zNum"], + config["Grid"]["zType"], + 1.0, + True) + +print(" L_x x L_y x L_z") + +print(config["Grid"]["xWidth"]/deltaNu, " x ", + config["Grid"]["yWidth"]/deltaNu, " x ", + config["Grid"]["zWidth"]/deltaNu) + +print(dx[0]/deltaNu, " x ", + dy[0]/deltaNu, " x ", + dz[0]/deltaNu) + +# Load mapping +Ntiles = config["Mapping"]["tiles"] + +assert config["Grid"]["xNum"] % Ntiles[0] == 0 +assert config["Grid"]["yNum"] % Ntiles[1] == 0 +assert config["Grid"]["zNum"] % Ntiles[2] == 0 + +NxTile = int(config["Grid"]["xNum"]/Ntiles[0]) +NyTile = int(config["Grid"]["yNum"]/Ntiles[1]) +NzTile = int(config["Grid"]["zNum"]/Ntiles[2]) + +halo = [1, 1, 0] + +# Set maxTime +config["Integrator"]["maxTime"] = config["Grid"]["xWidth"]/UInf*FTT + +with open("NoStats.json", 'w') as fout: + json.dump(config, fout, indent=3) + +config["Integrator"]["maxTime"] = config["Grid"]["xWidth"]/UInf*FTT + FTTS*2*np.pi/config["BC"]["yBCLeftInflowProfile"]["omega"][0] + +# Setup averages +config["IO"]["YZAverages"] = [{"fromCell" : [0, 0, 0], "uptoCell" : [config["Grid"]["xNum"]+1, 0, config["Grid"]["zNum"]]}] + +with open("Stats.json", 'w') as fout: + json.dump(config, fout, indent=3) + +############################################################################## +# Produce restart and profile files # +############################################################################## +if not os.path.exists(restartDir): + os.makedirs(restartDir) + +def writeTile(xt, yt, zt): + lo_bound = [(xt )*NxTile +halo[0], (yt )*NyTile +halo[1], (zt )*NzTile +halo[2]] + hi_bound = [(xt+1)*NxTile-1+halo[0], (yt+1)*NyTile-1+halo[1], (zt+1)*NzTile-1+halo[2]] + if (xt == 0): lo_bound[0] -= halo[0] + if (yt == 0): lo_bound[1] -= halo[1] + if (zt == 0): lo_bound[2] -= halo[2] + if (xt == Ntiles[0]-1): hi_bound[0] += halo[0] + if (yt == Ntiles[1]-1): hi_bound[1] += halo[1] + if (zt == Ntiles[2]-1): hi_bound[2] += halo[2] + filename = ('%s,%s,%s-%s,%s,%s.hdf' + % (lo_bound[0], lo_bound[1], lo_bound[2], + hi_bound[0], hi_bound[1], hi_bound[2])) + print("Working on: ", filename) + + shape = [hi_bound[2] - lo_bound[2] +1, + hi_bound[1] - lo_bound[1] +1, + hi_bound[0] - lo_bound[0] +1] + + centerCoordinates = np.ndarray(shape, dtype=np.dtype('(3,)f8')) + cellWidth = np.ndarray(shape, dtype=np.dtype('(3,)f8')) + rho = np.ndarray(shape) + pressure = np.ndarray(shape) + temperature = np.ndarray(shape) + MolarFracs = np.ndarray(shape, dtype=np.dtype('(1,)f8')) + velocity = np.ndarray(shape, dtype=np.dtype('(3,)f8')) + dudtBoundary = np.ndarray(shape) + dTdtBoundary = np.ndarray(shape) + pressure[:] = PInf + for (k,kc) in enumerate(centerCoordinates): + for (j,jc) in enumerate(kc): + for (i,ic) in enumerate(jc): + Re = rhoInf*UInf*xGrid[i+lo_bound[0]]/muInf + yB = etaB*xGrid[i+lo_bound[0]]/np.sqrt(Re) + vB1 = vB/np.sqrt(Re) + + u = np.interp(yGrid[j+lo_bound[1]], yB, uB) + v = np.interp(yGrid[j+lo_bound[1]], yB, vB1) + T = np.interp(yGrid[j+lo_bound[1]], yB, TB) + + centerCoordinates[k,j,i] = [xGrid[i+lo_bound[0]], yGrid[j+lo_bound[1]], zGrid[k+lo_bound[2]]] + cellWidth [k,j,i] = [ dx[i+lo_bound[0]], dy[j+lo_bound[1]], dz[k+lo_bound[2]]] + temperature [k,j,i] = T + rho [k,j,i] = ConstPropMix.GetDensity(T, PInf, config) + MolarFracs [k,j,i] = [1.0,] + velocity [k,j,i] = [ u, v, 0.0] + + with h5py.File(os.path.join(restartDir, filename), 'w') as fout: + fout.attrs.create("SpeciesNames", ["MIX".encode()], dtype="S20") + fout.attrs.create("timeStep", 0) + fout.attrs.create("simTime", 0.0) + fout.attrs.create("channelForcing", 0.0) + + fout.create_dataset("centerCoordinates", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("cellWidth", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("rho", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("pressure", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("temperature", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("MolarFracs", shape=shape, dtype = np.dtype("(1,)f8")) + fout.create_dataset("velocity", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("dudtBoundary", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("dTdtBoundary", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("velocity_old_NSCBC", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("temperature_old_NSCBC", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("MolarFracs_profile", shape=shape, dtype = np.dtype("(1,)f8")) + fout.create_dataset("velocity_profile", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("temperature_profile", shape=shape, dtype = np.dtype("f8")) + + fout["centerCoordinates"][:] = centerCoordinates + fout["cellWidth"][:] = cellWidth + fout["rho"][:] = rho + fout["pressure"][:] = pressure + fout["temperature"][:] = temperature + fout["MolarFracs"][:] = MolarFracs + fout["velocity"][:] = velocity + fout["dudtBoundary"][:] = dudtBoundary + fout["dTdtBoundary"][:] = dTdtBoundary + fout["velocity_old_NSCBC"][:] = velocity + fout["temperature_old_NSCBC"][:] = temperature + fout["MolarFracs_profile"][:] = MolarFracs + fout["velocity_profile"][:] = velocity + fout["temperature_profile"][:] = temperature + +Parallel(n_jobs=args.np)(delayed(writeTile)(x, y, z) for x, y, z in np.ndindex((Ntiles[0], Ntiles[1], Ntiles[2]))) + diff --git a/testcases/Franko/St.csv b/testcases/Franko/St.csv new file mode 100644 index 0000000..c26c2f8 --- /dev/null +++ b/testcases/Franko/St.csv @@ -0,0 +1,50 @@ +x,St +0.2182,4.5071 +0.4714,3.6861 +0.7876,3.0015 +1.151,2.5443 +1.5301,2.2691 +1.9092,2.0395 +2.3041,1.9009 +2.6673,1.7625 +3.0621,1.6694 +3.4411,1.6675 +3.8199,1.8022 +4.1987,2.119 +4.4982,2.8006 +4.7187,3.7557 +4.8601,4.8024 +4.97,5.8947 +5.0482,6.9872 +5.1107,8.1253 +5.1731,9.2634 +5.2356,10.356 +5.2823,11.3121 +5.3448,12.4502 +5.4072,13.5428 +5.5329,14.635 +5.8013,14.5426 +6.0386,13.8128 +6.1959,14.8138 +6.2913,13.8115 +6.3394,12.6728 +6.3717,11.5342 +6.404,10.3956 +6.4521,9.1204 +6.516,7.9816 +6.5956,6.8883 +6.8008,7.0694 +6.9264,8.1617 +7.0363,9.254 +7.099,9.8912 +7.288,10.6644 +7.5091,10.5722 +7.6047,9.2511 +7.7159,8.1577 +7.9531,7.5645 +8.2691,7.2441 +8.5215,7.6982 +8.7268,7.515 +8.9483,6.8764 +9.1855,6.2832 +9.4541,5.9631 diff --git a/testcases/Franko/Uprof.csv b/testcases/Franko/Uprof.csv new file mode 100644 index 0000000..b22bb6d --- /dev/null +++ b/testcases/Franko/Uprof.csv @@ -0,0 +1,36 @@ +y,400,650,800,950 +0.30496,0.3794,0.4276,0.4128,0.4435 +0.44,0.5219,0.4738,0.5359,0.5353 +0.63482,0.7126,0.7126,0.7116,0.6813 +0.9159,0.9997,0.9869,1.0051,1.0037 +1.3015,1.3831,1.3187,1.3376,1.3392 +1.8212,1.911,1.8972,1.9124,1.8337 +2.51,2.5835,2.6538,2.5459,2.5755 +3.3042,3.3525,3.3525,3.3464,3.2857 +4.219,4.3143,4.1869,4.2868,4.2171 +5.2249,5.2763,5.3584,5.1817,5.2672 +6.2759,6.3347,6.306,6.39,6.2312 +7.538,7.3931,7.2968,7.2757,7.2687 +8.782,8.7406,8.1925,8.3871,8.2672 +10.232,9.9919,9.0745,9.6072,9.2721 +11.74,11.5321,9.8071,10.5407,10.1497 +12.866,12.6873,10.2114,11.0654,10.6895 +14.101,13.8907,10.6566,11.6687,11.2044 +15.454,15.0459,11.081,12.2376,11.7256 +16.681,16.2012,11.3862,12.5994,12.1383 +17.732,17.4047,11.6063,12.8373,12.4352 +19.139,18.56,11.8561,13.1031,12.7362 +20.037,19.7636,11.9922,13.2514,12.881 +21.299,20.9672,12.155,13.4352,13.0496 +22.298,22.1708,12.2603,13.5618,13.1706 +23.343,23.3744,12.3506,13.6774,13.292 +24.438,24.5298,12.4271,13.7811,13.4128 +25.584,25.7335,12.4924,13.8738,13.5321 +26.783,26.9371,12.5495,13.9573,13.6492 +28.909,28.1405,12.6349,14.0822,13.8384 +35.801,28.9099,12.8728,14.3927,14.3341 +52.449,28.8597,13.8158,14.9784,15.2777 +76.84,28.8577,14.7967,15.6891,16.3846 +112.57,28.8076,16.7434,17.5652,17.7852 +164.91,28.8056,16.7278,18.2343,19.4361 +237.93,28.7555,16.7312,18.3588,19.6864 diff --git a/testcases/Franko/base.json b/testcases/Franko/base.json new file mode 100644 index 0000000..aa304bd --- /dev/null +++ b/testcases/Franko/base.json @@ -0,0 +1,190 @@ +{ + "Case" : { + "ReInlet" : 3000, + "MaInf" : 6.0, + "TInf" : 300.0, + "PInf" : 101325.0, + "TwOvTInf" : 6.5, + "xTurb" : 375.7, + "yPlus" : 0.32, + "FlowThroughTimesNoStat" : 5, + "FlowThroughTimesStat" : 10 + }, + + "Mapping" : { + "tiles" : [1,1,1], + "tilesPerRank" : [1,1,1], + "sampleId" : -1, + "outDir" : "", + "wallTime" : 1400 + }, + + "Grid" : { + "xNum" : 4096, + "yNum" : 250, + "zNum" : 288, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 1000.0, + "yWidth" : 75.0, + "zWidth" : 62.83, + "xType" : "Uniform", + "yType" : "TanhMinus", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 1000000, + "maxTime" : 20.0, + "cfl" : 0.8, + "fixedDeltaTime" : 4.0e-3, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "NSCBC_Inflow", + "xBCLeftInflowProfile" : { + "type" : "File", + "FileDir" : "" + }, + "xBCLeftP" : -1.0, + "xBCLeftHeat" : { + "type" : "File", + "FileDir" : "" + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "NSCBC_Outflow", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : -1.0, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "SuctionAndBlowingWall", + "yBCLeftInflowProfile" : { + "type" : "SuctionAndBlowing", + "Xmin" : 0.0, + "Xmax" : 0.0, + "X0" : 0.0, + "sigma" : 0.0, + "A" : [0.0, 0.0, 0.0], + "omega" : [0.0, 0.0, 0.0], + "beta" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : -1.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "NSCBC_Outflow", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : -1.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 287.15, + "gamma" : 1.4, + "prandtl" : 0.71, + "viscosityModel" : "PowerLaw", + "constantVisc" : -1.0, + "powerlawViscRef" : 1.716e-5, + "powerlawTempRef" : 273.0, + "sutherlandViscRef" : 1.81e-5, + "sutherlandTempRef" : 300.0, + "sutherlandSRef" : 110.4, + "initCase" : "Restart", + "restartDir" : "", + "initParams" : [1.01325e5, 300.0, 0.0, 0.1, 0.05], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { + "type" : "OFF" + } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 5000, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } + +} diff --git a/testcases/Franko/postProc.py b/testcases/Franko/postProc.py new file mode 100755 index 0000000..a5b0ea6 --- /dev/null +++ b/testcases/Franko/postProc.py @@ -0,0 +1,232 @@ +#!/usr/bin/env python2 + +import numpy as np +import json +import argparse +import matplotlib.pyplot as plt +import matplotlib.ticker +import sys +import os +import h5py +import pandas +from scipy.integrate import odeint +from scipy.optimize import fsolve + +# load grid generator +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen +import ConstPropMix +import Averages + +parser = argparse.ArgumentParser() +parser.add_argument("-json", "--json_file", type=argparse.FileType('r')) +parser.add_argument("-in", "--input_dir") +args = parser.parse_args() + +############################################################################## +# Read Prometeo Input File # +############################################################################## + +config = json.load(args.json_file) + +xNum = config["Grid"]["xNum"] +yNum = config["Grid"]["yNum"] +zNum = config["Grid"]["zNum"] +xWidth = config["Grid"]["xWidth"] +yWidth = config["Grid"]["yWidth"] +zWidth = config["Grid"]["zWidth"] +xOrigin = config["Grid"]["origin"][0] +yOrigin = config["Grid"]["origin"][1] +zOrigin = config["Grid"]["origin"][2] + +ReIn = config["Case"]["ReInlet"] +MaInf = config["Case"]["MaInf"] +TInf = config["Case"]["TInf"] +PInf = config["Case"]["PInf"] +TwOvT = config["Case"]["TwOvTInf"] +xTurb = config["Case"]["xTurb"] +yPlus = config["Case"]["yPlus"] + +R = config["Flow"]["gasConstant"] +gamma = config["Flow"]["gamma"] +Pr = config["Flow"]["prandtl"] + +# Free-stream mixture properties +cInf = np.sqrt(gamma*R*TInf) +muInf = ConstPropMix.GetViscosity(TInf, config) + +# Free-stream conditions +UInf = cInf*MaInf +rhoInf = ConstPropMix.GetDensity(TInf, PInf, config) + +# Inlet displacement thickness +deltaStarIn = muInf*ReIn/(UInf*rhoInf) + +# Wall properties +Tw = TInf*TwOvT +muW = ConstPropMix.GetViscosity(Tw, config) +rhoW = ConstPropMix.GetDensity(Tw, PInf, config) + +r = Pr**(1.0/3.0) +Taw = TInf*(1.0 + r*0.5*(gamma - 1.0)*MaInf**2) + +############################################################################## +# Compute similarity solution # +############################################################################## + +Np = 500 +def GetCBL(): + def CBLFun(U, y): + u, F, h, G, g = U.T + T = 1.0 + 0.5*h*(gamma - 1.0)*MaInf**2 + assert T>0 + mu = ConstPropMix.GetViscosity(T*TInf, config)/muInf + return [ F/mu, + -0.5*g*F/mu, + Pr*G/mu, + -0.5*Pr*G*g/mu - 2*F**2/mu, + u/T ] + + eta = np.linspace(0, 50, Np) + u_0 = 0.0 + #F_0 = 0.0 + h_0 = (Tw/TInf-1.0)*2/((gamma - 1.0)*MaInf**2) + #G_0 = 0.0 + g_0 = 0.0 + + def objective(A): + F_0, G_0 = A + U = odeint(CBLFun, [u_0, F_0, h_0, G_0, g_0], eta) + u, F, h, G, g = U.T + return [u[Np-1] - 1.0, h[Np-1]] + + A = fsolve(objective, [0.01, 0.1]) + F_0, G_0 = A + + U = odeint(CBLFun, [u_0, F_0, h_0, G_0, g_0], eta) + u, F, h, G, g = U.T + T = 1.0 + 0.5*h*(gamma - 1.0)*MaInf**2 + v = (eta*u/T - g)*T*0.5 + return eta, u, v, T + +etaB, uB, vB, TB = GetCBL() + +# Compute distance from leading edge +deltaStarNorm = 0.0 +for i in range(Np-1): + deltaStarNorm += (1.0 - 0.5*(uB[i+1]/TB[i+1] + uB[i]/TB[i]))*(etaB[i+1]- etaB[i]) + +x0 = (deltaStarIn/deltaStarNorm)**2*rhoInf*UInf/muInf +Rex0 = UInf*rhoInf*x0/muInf + +############################################################################## +# Compute Grid # +############################################################################## + +xGrid, dx = gridGen.GetGrid(config["Grid"]["origin"][0], + config["Grid"]["xWidth"], + config["Grid"]["xNum"], + config["Grid"]["xType"], + config["Grid"]["xStretching"], + False) + +yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + config["Grid"]["yWidth"], + config["Grid"]["yNum"], + config["Grid"]["yType"], + config["Grid"]["yStretching"], + False) + +# Correct boundaries that are staggered +yGrid[0] += 0.5*dy[0] + +############################################################################## +# Load reference solution # +############################################################################## + +CfProf = pandas.read_csv("Cf.csv") +StProf = pandas.read_csv("St.csv") +UProf = pandas.read_csv("Uprof.csv") + +############################################################################## +# Load average files # +############################################################################## + +Xavg = Averages.avg(args.input_dir+"/YZAverages/0,0-" + str(xNum+1) + ",0.hdf") + +yrakes = [] +for i in range(4): + yrakes.append(Averages.avg(args.input_dir+"/XZAverages/0," + str(i) + "-" + str(yNum+1) + "," + str(i) + ".hdf")) +rakesNames = ["x=400", "x=650", "x=800", "x=950"] + +############################################################################## +# Plot stuff # +############################################################################## + +figureDir = "Figures" +if not os.path.exists(figureDir): + os.makedirs(figureDir) + +# Skin Friction coefficients +def getCfTurb(xGrid): + + cf = np.zeros(xGrid.size) + + for i,x in enumerate(cf): + def VanDriestII(Cf): + if (xGrid[i] > 500): + Rexv = (xGrid[i]-xTurb)*ReIn + + a = np.sqrt(r*0.5*(gamma - 1.0)*MaInf**2*TInf/Tw) + b = (Taw/Tw - 1.0) + + A = (2*a**2 - b)/np.sqrt(b**2 + 4*a**2) + B = b /np.sqrt(b**2 + 4*a**2) + + res = (np.arcsin(A) + np.arcsin(B))/np.sqrt(Cf*(Taw/TInf - 1.0)) + res-= 4.15*np.log10(Rexv*Cf*muInf/muW) + res-= 1.7 + else: + res = Cf + + return res + + cf[i] = fsolve(VanDriestII, 1e-4, xtol=1e-10) + + indT = next((i for i, x in enumerate(cf) if x), None) + + return cf, indT + +cfLam = 0.664*np.sqrt((rhoW*muW)/(rhoInf*muInf))/np.sqrt((rhoInf*UInf*xGrid/muInf)) +cfTurb, indT = getCfTurb((xGrid-xOrigin)/deltaStarIn) + +plt.figure(0) +plt.plot((xGrid-xOrigin)/deltaStarIn/100, 2.0*Xavg.tau[:,3]/(rhoInf*UInf**2)*1e4, label="Present formulation") +plt.plot((xGrid-xOrigin)/deltaStarIn/100, cfLam*1e4, '--k', label="Laminar BL") +plt.plot((xGrid[indT:]-xOrigin)/deltaStarIn/100, cfTurb[indT:]*1e4, '-.k', label="Turbulent BL") +plt.plot( CfProf["x"][:].values, CfProf["Cf"][:].values, 'ok', label="Franko and Lele (2013)") +plt.xlabel(r"$(x-x_0)/\delta_0^* \times 10^{-2}$", fontsize = 20) +plt.ylabel(r"$\overline{C_f} \times 10^{4}$" , fontsize = 20) +plt.gca().set_xlim(0, 10) +plt.gca().set_ylim(0, 25) +plt.legend() +plt.savefig(os.path.join(figureDir, "Cf.eps"), bbox_inches='tight') + +cp = gamma/(gamma-1)*R +StLam = cfLam*(Pr/(Taw/TInf - TwOvT)*((TB[1]-TB[0])/(uB[1]-uB[0]))) +StTurb = cfTurb/(2.0*Pr**(2.0/3.0)) +St = -Xavg.q[:,1]/(rhoInf*UInf*cp*(Taw - Tw)) + +plt.figure(1) +plt.plot( (xGrid-xOrigin)/deltaStarIn/100, St*1e4, label="Present formulation") +plt.plot( (xGrid-xOrigin)/deltaStarIn/100, StLam*1e4, '--k', label="Laminar BL") +plt.plot((xGrid[indT:]-xOrigin)/deltaStarIn/100, StTurb[indT:]*1e4, '-.k', label="Turbulent BL") +plt.plot( StProf["x"][:].values, StProf["St"][:].values, 'ok', label="Franko and Lele (2013)") +plt.xlabel(r"$(x-x_0)/\delta_0^* \times 10^{-2}$", fontsize = 20) +plt.ylabel(r"$\overline{St} \times 10^{4}$" , fontsize = 20) +plt.gca().set_xlim(0, 10) +plt.gca().set_ylim(0, 25) +plt.legend() +plt.savefig(os.path.join(figureDir, "St.eps"), bbox_inches='tight') + +plt.show() diff --git a/testcases/GrossmanCinnellaProblem/600.json b/testcases/GrossmanCinnellaProblem/600.json new file mode 100644 index 0000000..6a1420d --- /dev/null +++ b/testcases/GrossmanCinnellaProblem/600.json @@ -0,0 +1,182 @@ +{ + "Mapping" : { + "tiles" : [1,1,1], + "tilesPerRank" : [1,1,1], + "sampleId" : -1, + "outDir" : "", + "wallTime" : 10000 + }, + + "Grid" : { + "xNum" : 600, + "yNum" : 1, + "zNum" : 1, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 1.0, + "yWidth" : 1.0, + "zWidth" : 1.0, + "xType" : "Uniform", + "yType" : "Uniform", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 900, + "maxTime" : 0.2, + "cfl" : -0.002, + "fixedDeltaTime" : 1.0e-07, + "implicitChemistry" : true + }, + + "BC" : { + "xBCLeft" : "Periodic", + "xBCLeft" : "NSCBC_Inflow", + "xBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCLeftP" : 1.95256e5, + "xBCLeftHeat" : { + "type" : "Constant", + "temperature" : 9000.0 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 1.279631e-02 }, + {"Name" : "O2", "MolarFrac" : 3.695112e-06 }, + {"Name" : "NO", "MolarFrac" : 2.694521e-04 }, + {"Name" : "N", "MolarFrac" : 7.743854e-01 }, + {"Name" : "O", "MolarFrac" : 2.125451e-01 }] + } + }, + "xBCRight" : "Periodic", + "xBCRight" : "NSCBC_Outflow", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : 1.0e4, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : 300.0 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + } + }, + "yBCLeft" : "Periodic", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : 0.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + } + }, + "yBCRight" : "Periodic", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : 0.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + } + } + }, + + "Flow" : { + "mixture": "AirMix", + "gasConstant" : 287.15, + "gamma" : 1.4, + "prandtl" : 0.71, + "viscosityModel" : "Constant", + "constantVisc" : 0.0, + "powerlawViscRef" : -1.0, + "powerlawTempRef" : -1.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "Uniform", + "initCase" : "GrossmanCinnellaProblem", + "restartDir" : "", + "initParams" : [1.95256e5, 9000.0, 0.0, 0.0, 0.0], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { "type" : "OFF" } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 100, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } +} diff --git a/testcases/GrossmanCinnellaProblem/Spec.csv b/testcases/GrossmanCinnellaProblem/Spec.csv new file mode 100644 index 0000000..7492990 --- /dev/null +++ b/testcases/GrossmanCinnellaProblem/Spec.csv @@ -0,0 +1,31 @@ +0.225 0.04652 0.00196 0.00205 0.71837 0.23099 +0.25 0.04706 0.00197 0.00288 0.71816 0.23091 +0.275 0.05141 0.00199 0.00302 0.71217 0.23083 +0.3 0.0582 0.00201 0.00223 0.70523 0.23074 +0.325 0.06475 0.00203 0.00155 0.69811 0.23026 +0.35 0.07029 0.00205 0.00188 0.6936 0.2287 +0.375 0.07464 0.00207 0.00079 0.69027 0.23004 +0.4 0.07508 0.00209 0.0003 0.68798 0.22938 +0.425 0.07573 0.00211 0.00024 0.68665 0.22898 +0.45 0.07666 0.00212 0.00095 0.68657 0.2302 +0.475 0.07516 0.00214 0.00151 0.68649 0.2287 +0.5 0.07585 0.00216 0.00024 0.68641 0.22915 +0.525 0.07602 0.00218 0.0000 0.68633 0.23002 +0.55 0.07534 0.0022 0.0000 0.68625 0.22994 +0.575 0.43259 0.00222 0.00918 0.45035 0.09399 +0.6 0.76813 0.21793 0.0012 0.00065 0.00024 +0.625 0.76536 0.22969 0.00112 0.00057 0.000 +0.65 0.7638 0.22961 0.00041 0.00049 0.000 +0.675 0.76478 0.22953 0.00056 0.0004 0.00 +0.7 0.76453 0.22945 0.00087 0.00064 0.000 +0.725 0.76375 0.22827 0.00079 0.00088 0.0000 +0.75 0.76509 0.22795 0.00047 0.00112 0.0000 +0.775 0.76378 0.22921 0.00000 0.00135 0.0000 +0.8 0.76396 0.22913 0.00000 0.00159 0.0000 +0.825 0.7646 0.22905 0.00000 0.00183 0.0000 +0.85 0.76294 0.22896 0.00000 0.00207 0.0000 +0.875 0.76286 0.22888 0.00000 0.00231 0.0000 +0.9 0.76278 0.2288 0.00000 0.00255 0.0000 +0.925 0.7627 0.22872 0.00000 0.00278 0.0000 +0.95 0.76262 0.22864 0.00000 0.00302 0.0000 +0.975 0.7641 0.22856 0.00000 0.00326 0.0000 diff --git a/testcases/GrossmanCinnellaProblem/p.csv b/testcases/GrossmanCinnellaProblem/p.csv new file mode 100644 index 0000000..39f7ce5 --- /dev/null +++ b/testcases/GrossmanCinnellaProblem/p.csv @@ -0,0 +1,16 @@ +0.11079 19.4942 +0.24817 19.5081 +0.28393 18.8441 +0.29259 17.9949 +0.30259 17.1456 +0.31396 16.2963 +0.32532 15.4315 +0.336 14.5823 +0.34737 13.7638 +0.36076 12.8837 +0.40944 12.5285 +0.5191 12.5285 +0.58679 12.5285 +0.60236 12.5285 +0.60988 1.0245 +0.80552 1.0554 diff --git a/testcases/GrossmanCinnellaProblem/postProc.py b/testcases/GrossmanCinnellaProblem/postProc.py new file mode 100644 index 0000000..2b48664 --- /dev/null +++ b/testcases/GrossmanCinnellaProblem/postProc.py @@ -0,0 +1,138 @@ +import numpy as np +import json +import matplotlib.pyplot as plt +from matplotlib.legend_handler import HandlerTuple +import sys +import os +import h5py +import pandas as pd + +########################################################################### +### Read Exact Solution ## +########################################################################### + +def readExact(name): + # Open file + f = open(name, 'r') + x = [] + u = [] + # Loop over lines and extract variables of interest + for line in f: + line = line.strip() + columns = line.split() + x.append( float(columns[0])) + u.append( float(columns[1])) + f.close() + return x, u + +def Yi2Xi(Yi): + W = np.array([2*14.0067e-3, 2*15.9994e-3, 14.0067e-3+15.9994e-3, 14.0067e-3, 15.9994e-3]) + Wmix = 1.0/sum(Yi/W) + Xi = Yi*Wmix/W + return Xi + +def L2(err,dx): + tot = sum(map(sum, err**2*dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + vol = sum(map(sum, dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + return np.sqrt(tot/vol) + +def process(case, i): + dir_name = os.path.join(os.environ['HTR_DIR'], 'testcases/GrossmanCinnellaProblem') + prometeo_input_file = os.path.join(dir_name, str(case)+'.json') + +############################################################################## +# Read Prometeo Input File # +############################################################################## + + with open(prometeo_input_file) as f: + data = json.load(f) + + xNum = data["Grid"]["xNum"] + xWidth = data["Grid"]["xWidth"] + + dt = data["Integrator"]["fixedDeltaTime"] + nstep = data["Integrator"]["maxIter"] + time = dt*nstep + + filename = os.path.join(dir_name, str(case)+'/sample0/fluid_iter'+str(nstep).zfill(10)+'/0,0,0-'+str(xNum+1)+',0,0.hdf') + +############################################################################## +# Read Prometeo Output Data # +############################################################################## + + f = h5py.File(filename, 'r') + + SpNames = f.attrs.get("SpeciesNames") + + # Get the data + x = f['centerCoordinates'][0,0,:][:,0] + dx = f['cellWidth' ][0,0,:][:,0] + u = f['velocity' ][0,0,:][:,0] + p = f['pressure' ][0,0,:] + rho = f['rho' ][0,0,:] + T = f['temperature' ][0,0,:] + Xi = f['MolarFracs' ][0,0,:][:,:] + + u /= 3.477201e+02 + p /= abs( p[xNum-1]) + rho /= abs(rho[xNum-1]) + + + ############################################################################## + # Plot # + ############################################################################## + + plt.figure(1) + xExact, uExact = readExact("u.csv") + plt.plot(xExact, uExact, 'xk', label='Reference solution') + plt.plot( x, u, '-b', label='HTR solver') + plt.xlabel(r'$x$' , fontsize = 20) + plt.ylabel(r'$u/a_R$', fontsize = 20) + plt.ylim(-0.25, 3.2) + plt.legend() + plt.savefig('Velocity_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(2) + xExact, pExact = readExact("p.csv") + plt.plot(xExact, pExact, 'xk', label='Reference solution') + plt.plot( x, p, '-b', label='HTR solver') + plt.xlabel(r'$x$' , fontsize = 20) + plt.ylabel(r'$p/p_R$', fontsize = 20) + plt.legend() + plt.savefig('Pressure_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(3) + xExact, rhoExact = readExact("rho.csv") + plt.plot(xExact, rhoExact, 'xk', label='Reference solution') + plt.plot( x, rho, '-b', label='HTR solver') + plt.xlabel(r'$x$' , fontsize = 20) + plt.ylabel(r'$\rho/\rho_R$', fontsize = 20) + plt.legend() + plt.savefig('Density_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(4) + plt.xlabel(r'$x$' , fontsize = 20) + plt.ylabel(r'$X_i$', fontsize = 20) + df=pd.read_csv('Spec.csv', sep='\t',header=None) + xExact = np.array(df)[:,0] + YiExact = np.array(df)[:,1:6] + XiExact = YiExact + for i, y in enumerate(YiExact): + XiExact [i,:] = Yi2Xi(YiExact[i,:]) + line = [] + lable = [] + for isp, sp in enumerate(SpNames): + l1, = plt.plot( x, Xi[:,isp], '-') + l2, = plt.plot(xExact, XiExact[:,isp], 'x', color=l1.get_color()) + lable.append(r'$X_{'+sp.decode()+'}$') + line.append((l1, l2)) + plt.legend(line, + lable, + handler_map={tuple: HandlerTuple(ndivide=None)}, handlelength=8.0) + plt.savefig('Species_'+str(case)+'.eps', bbox_inches='tight') + + return x, u, p, rho + +plt.rcParams.update({'font.size': 12}) +x, u, p, r = process(600, 0) +plt.show() diff --git a/testcases/GrossmanCinnellaProblem/rho.csv b/testcases/GrossmanCinnellaProblem/rho.csv new file mode 100644 index 0000000..061bb7f --- /dev/null +++ b/testcases/GrossmanCinnellaProblem/rho.csv @@ -0,0 +1,14 @@ +0.10899 0.33511 +0.24852 0.33339 +0.28227 0.32315 +0.2985 0.31068 +0.30917 0.29335 +0.32284 0.27845 +0.34035 0.2635 +0.36042 0.23624 +0.40956 0.23564 +0.51897 0.23675 +0.58838 4.25358 +0.60205 4.2485 +0.61051 0.98956 +0.80709 0.98714 diff --git a/testcases/GrossmanCinnellaProblem/run.sh b/testcases/GrossmanCinnellaProblem/run.sh new file mode 100644 index 0000000..bf877d2 --- /dev/null +++ b/testcases/GrossmanCinnellaProblem/run.sh @@ -0,0 +1,7 @@ +rm -rf sample* slurm* + +for cases in 600; do + rm -r $cases + mkdir $cases + USE_CUDA=0 PROFILE=0 QUEUE="gpu" $HTR_DIR/src/prometeo.sh -i $cases.json -o $cases +done diff --git a/testcases/GrossmanCinnellaProblem/u.csv b/testcases/GrossmanCinnellaProblem/u.csv new file mode 100644 index 0000000..63cdd6d --- /dev/null +++ b/testcases/GrossmanCinnellaProblem/u.csv @@ -0,0 +1,16 @@ +0.11036 -0.0042 +0.2488 0.00173 +0.28334 0.20722 +0.29429 0.47531 +0.30457 0.75149 +0.31388 1.04617 +0.32456 1.35933 +0.33696 1.68057 +0.34836 2.01569 +0.36015 2.38087 +0.41017 2.53308 +0.52017 2.5369 +0.58752 2.53063 +0.60106 2.53053 +0.60927 0.00604 +0.80424 0.0104 diff --git a/testcases/LaxProblem/100.json b/testcases/LaxProblem/100.json new file mode 100644 index 0000000..76b7276 --- /dev/null +++ b/testcases/LaxProblem/100.json @@ -0,0 +1,169 @@ +{ + "Mapping" : { + "tiles" : [1,1,1], + "tilesPerRank" : [1,1,1], + "sampleId" : -1, + "outDir" : "100", + "wallTime" : 10000 + }, + + "Grid" : { + "xNum" : 100, + "yNum" : 1, + "zNum" : 1, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 1.0, + "yWidth" : 1.0, + "zWidth" : 1.0, + "xType" : "Uniform", + "yType" : "Uniform", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 175, + "maxTime" : 0.14, + "cfl" : -0.4, + "fixedDeltaTime" : 8.0e-4, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "Dirichlet", + "xBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.698, 0.0, 0.0] + }, + "xBCLeftP" : 3.528, + "xBCLeftHeat" : { + "type" : "Constant", + "temperature" : 7.92808988764 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "Dirichlet", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : 0.5710, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : 1.142 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "Periodic", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : 0.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "Periodic", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : 0.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 1.0, + "gamma" : 1.4, + "prandtl" : 0.71, + "viscosityModel" : "Constant", + "constantVisc" : 0.0, + "powerlawViscRef" : -1.0, + "powerlawTempRef" : -1.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "LaxProblem", + "restartDir" : "", + "initParams" : [1.0, 1.0, 0.80, 0.0, 0.0], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { "type" : "OFF" } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 10, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } +} diff --git a/testcases/LaxProblem/exact.txt b/testcases/LaxProblem/exact.txt new file mode 100644 index 0000000..2edb9d0 --- /dev/null +++ b/testcases/LaxProblem/exact.txt @@ -0,0 +1,1001 @@ + -0.100000000000E+01 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.998000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.996000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.994000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.992000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.990000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.988000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.986000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.984000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.982000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.980000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.978000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.976000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.974000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.972000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.970000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.968000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.966000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.964000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.962000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.960000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.958000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.956000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.954000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.952000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.950000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.948000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.946000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.944000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.942000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.940000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.938000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.936000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.934000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.932000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.930000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.928000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.926000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.924000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.922000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.920000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.918000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.916000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.914000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.912000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.910000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.908000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.906000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.904000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.902000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.900000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.898000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.896000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.894000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.892000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.890000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.888000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.886000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.884000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.882000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.880000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.878000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.876000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.874000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.872000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.870000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.868000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.866000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.864000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.862000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.860000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.858000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.856000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.854000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.852000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.850000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.848000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.846000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.844000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.842000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.840000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.838000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.836000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.834000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.832000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.830000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.828000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.826000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.824000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.822000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.820000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.818000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.816000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.814000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.812000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.810000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.808000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.806000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.804000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.802000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.800000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.798000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.796000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.794000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.792000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.790000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.788000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.786000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.784000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.782000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.780000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.778000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.776000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.774000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.772000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.770000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.768000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.766000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.764000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.762000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.760000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.758000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.756000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.754000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.752000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.750000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.748000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.746000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.744000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.742000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.740000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.738000000000E+00 0.445000000000E+00 0.698000000000E+00 0.352800000000E+01 + -0.736000000000E+00 0.444444439723E+00 0.702161371241E+00 0.352183519552E+01 + -0.734000000000E+00 0.443650736856E+00 0.708113752193E+00 0.351303317578E+01 + -0.732000000000E+00 0.442858168330E+00 0.714066133145E+00 0.350425001874E+01 + -0.730000000000E+00 0.442066732928E+00 0.720018514098E+00 0.349548569072E+01 + -0.728000000000E+00 0.441276429435E+00 0.725970895050E+00 0.348674015804E+01 + -0.726000000000E+00 0.440487256637E+00 0.731923276002E+00 0.347801338713E+01 + -0.724000000000E+00 0.439699213320E+00 0.737875656955E+00 0.346930534442E+01 + -0.722000000000E+00 0.438912298271E+00 0.743828037907E+00 0.346061599641E+01 + -0.720000000000E+00 0.438126510277E+00 0.749780418860E+00 0.345194530964E+01 + -0.718000000000E+00 0.437341848129E+00 0.755732799812E+00 0.344329325070E+01 + -0.716000000000E+00 0.436558310615E+00 0.761685180764E+00 0.343465978623E+01 + -0.714000000000E+00 0.435775896527E+00 0.767637561717E+00 0.342604488292E+01 + -0.712000000000E+00 0.434994604655E+00 0.773589942669E+00 0.341744850750E+01 + -0.710000000000E+00 0.434214433793E+00 0.779542323621E+00 0.340887062675E+01 + -0.708000000000E+00 0.433435382733E+00 0.785494704574E+00 0.340031120750E+01 + -0.706000000000E+00 0.432657450270E+00 0.791447085526E+00 0.339177021663E+01 + -0.704000000000E+00 0.431880635198E+00 0.797399466479E+00 0.338324762107E+01 + -0.702000000000E+00 0.431104936314E+00 0.803351847431E+00 0.337474338778E+01 + -0.700000000000E+00 0.430330352413E+00 0.809304228383E+00 0.336625748379E+01 + -0.698000000000E+00 0.429556882294E+00 0.815256609336E+00 0.335778987616E+01 + -0.696000000000E+00 0.428784524755E+00 0.821208990288E+00 0.334934053201E+01 + -0.694000000000E+00 0.428013278596E+00 0.827161371241E+00 0.334090941849E+01 + -0.692000000000E+00 0.427243142616E+00 0.833113752193E+00 0.333249650282E+01 + -0.690000000000E+00 0.426474115617E+00 0.839066133145E+00 0.332410175226E+01 + -0.688000000000E+00 0.425706196399E+00 0.845018514098E+00 0.331572513410E+01 + -0.686000000000E+00 0.424939383768E+00 0.850970895050E+00 0.330736661570E+01 + -0.684000000000E+00 0.424173676524E+00 0.856923276002E+00 0.329902616446E+01 + -0.682000000000E+00 0.423409073475E+00 0.862875656955E+00 0.329070374781E+01 + -0.680000000000E+00 0.422645573423E+00 0.868828037907E+00 0.328239933326E+01 + -0.678000000000E+00 0.421883175177E+00 0.874780418860E+00 0.327411288833E+01 + -0.676000000000E+00 0.421121877542E+00 0.880732799812E+00 0.326584438062E+01 + -0.674000000000E+00 0.420361679327E+00 0.886685180764E+00 0.325759377775E+01 + -0.672000000000E+00 0.419602579341E+00 0.892637561717E+00 0.324936104740E+01 + -0.670000000000E+00 0.418844576392E+00 0.898589942669E+00 0.324114615731E+01 + -0.668000000000E+00 0.418087669293E+00 0.904542323621E+00 0.323294907524E+01 + -0.666000000000E+00 0.417331856853E+00 0.910494704574E+00 0.322476976900E+01 + -0.664000000000E+00 0.416577137886E+00 0.916447085526E+00 0.321660820648E+01 + -0.662000000000E+00 0.415823511204E+00 0.922399466479E+00 0.320846435557E+01 + -0.660000000000E+00 0.415070975622E+00 0.928351847431E+00 0.320033818423E+01 + -0.658000000000E+00 0.414319529953E+00 0.934304228383E+00 0.319222966048E+01 + -0.656000000000E+00 0.413569173015E+00 0.940256609336E+00 0.318413875235E+01 + -0.654000000000E+00 0.412819903622E+00 0.946208990288E+00 0.317606542795E+01 + -0.652000000000E+00 0.412071720593E+00 0.952161371241E+00 0.316800965542E+01 + -0.650000000000E+00 0.411324622747E+00 0.958113752193E+00 0.315997140296E+01 + -0.648000000000E+00 0.410578608901E+00 0.964066133145E+00 0.315195063878E+01 + -0.646000000000E+00 0.409833677876E+00 0.970018514098E+00 0.314394733119E+01 + -0.644000000000E+00 0.409089828493E+00 0.975970895050E+00 0.313596144850E+01 + -0.642000000000E+00 0.408347059573E+00 0.981923276002E+00 0.312799295909E+01 + -0.640000000000E+00 0.407605369939E+00 0.987875656955E+00 0.312004183137E+01 + -0.638000000000E+00 0.406864758415E+00 0.993828037907E+00 0.311210803383E+01 + -0.636000000000E+00 0.406125223824E+00 0.999780418860E+00 0.310419153495E+01 + -0.634000000000E+00 0.405386764992E+00 0.100573279981E+01 0.309629230331E+01 + -0.632000000000E+00 0.404649380744E+00 0.101168518076E+01 0.308841030751E+01 + -0.630000000000E+00 0.403913069907E+00 0.101763756172E+01 0.308054551619E+01 + -0.628000000000E+00 0.403177831310E+00 0.102358994267E+01 0.307269789805E+01 + -0.626000000000E+00 0.402443663780E+00 0.102954232362E+01 0.306486742182E+01 + -0.624000000000E+00 0.401710566147E+00 0.103549470457E+01 0.305705405630E+01 + -0.622000000000E+00 0.400978537241E+00 0.104144708553E+01 0.304925777032E+01 + -0.620000000000E+00 0.400247575893E+00 0.104739946648E+01 0.304147853274E+01 + -0.618000000000E+00 0.399517680935E+00 0.105335184743E+01 0.303371631250E+01 + -0.616000000000E+00 0.398788851200E+00 0.105930422838E+01 0.302597107856E+01 + -0.614000000000E+00 0.398061085522E+00 0.106525660934E+01 0.301824279993E+01 + -0.612000000000E+00 0.397334382734E+00 0.107120899029E+01 0.301053144567E+01 + -0.610000000000E+00 0.396608741673E+00 0.107716137124E+01 0.300283698488E+01 + -0.608000000000E+00 0.395884161174E+00 0.108311375219E+01 0.299515938672E+01 + -0.606000000000E+00 0.395160640074E+00 0.108906613315E+01 0.298749862036E+01 + -0.604000000000E+00 0.394438177212E+00 0.109501851410E+01 0.297985465506E+01 + -0.602000000000E+00 0.393716771425E+00 0.110097089505E+01 0.297222746009E+01 + -0.600000000000E+00 0.392996421555E+00 0.110692327600E+01 0.296461700479E+01 + -0.598000000000E+00 0.392277126440E+00 0.111287565695E+01 0.295702325852E+01 + -0.596000000000E+00 0.391558884922E+00 0.111882803791E+01 0.294944619070E+01 + -0.594000000000E+00 0.390841695844E+00 0.112478041886E+01 0.294188577080E+01 + -0.592000000000E+00 0.390125558049E+00 0.113073279981E+01 0.293434196832E+01 + -0.590000000000E+00 0.389410470379E+00 0.113668518076E+01 0.292681475281E+01 + -0.588000000000E+00 0.388696431681E+00 0.114263756172E+01 0.291930409388E+01 + -0.586000000000E+00 0.387983440799E+00 0.114858994267E+01 0.291180996116E+01 + -0.584000000000E+00 0.387271496580E+00 0.115454232362E+01 0.290433232434E+01 + -0.582000000000E+00 0.386560597870E+00 0.116049470457E+01 0.289687115315E+01 + -0.580000000000E+00 0.385850743519E+00 0.116644708553E+01 0.288942641735E+01 + -0.578000000000E+00 0.385141932374E+00 0.117239946648E+01 0.288199808679E+01 + -0.576000000000E+00 0.384434163287E+00 0.117835184743E+01 0.287458613130E+01 + -0.574000000000E+00 0.383727435106E+00 0.118430422838E+01 0.286719052082E+01 + -0.572000000000E+00 0.383021746684E+00 0.119025660934E+01 0.285981122527E+01 + -0.570000000000E+00 0.382317096873E+00 0.119620899029E+01 0.285244821467E+01 + -0.568000000000E+00 0.381613484527E+00 0.120216137124E+01 0.284510145905E+01 + -0.566000000000E+00 0.380910908498E+00 0.120811375219E+01 0.283777092850E+01 + -0.564000000000E+00 0.380209367643E+00 0.121406613315E+01 0.283045659315E+01 + -0.562000000000E+00 0.379508860815E+00 0.122001851410E+01 0.282315842316E+01 + -0.560000000000E+00 0.378809386873E+00 0.122597089505E+01 0.281587638875E+01 + -0.558000000000E+00 0.378110944674E+00 0.123192327600E+01 0.280861046019E+01 + -0.556000000000E+00 0.377413533075E+00 0.123787565695E+01 0.280136060778E+01 + -0.554000000000E+00 0.376717150936E+00 0.124382803791E+01 0.279412680187E+01 + -0.552000000000E+00 0.376021797116E+00 0.124978041886E+01 0.278690901285E+01 + -0.550000000000E+00 0.375327470477E+00 0.125573279981E+01 0.277970721115E+01 + -0.548000000000E+00 0.374634169879E+00 0.126168518076E+01 0.277252136726E+01 + -0.546000000000E+00 0.373941894186E+00 0.126763756172E+01 0.276535145169E+01 + -0.544000000000E+00 0.373250642260E+00 0.127358994267E+01 0.275819743502E+01 + -0.542000000000E+00 0.372560412966E+00 0.127954232362E+01 0.275105928785E+01 + -0.540000000000E+00 0.371871205168E+00 0.128549470457E+01 0.274393698083E+01 + -0.538000000000E+00 0.371183017732E+00 0.129144708553E+01 0.273683048468E+01 + -0.536000000000E+00 0.370495849526E+00 0.129739946648E+01 0.272973977011E+01 + -0.534000000000E+00 0.369809699415E+00 0.130335184743E+01 0.272266480793E+01 + -0.532000000000E+00 0.369124566269E+00 0.130930422838E+01 0.271560556895E+01 + -0.530000000000E+00 0.368440448957E+00 0.131525660934E+01 0.270856202404E+01 + -0.528000000000E+00 0.367757346349E+00 0.132120899029E+01 0.270153414413E+01 + -0.526000000000E+00 0.367075257315E+00 0.132716137124E+01 0.269452190015E+01 + -0.524000000000E+00 0.366394180727E+00 0.133311375219E+01 0.268752526313E+01 + -0.522000000000E+00 0.365714115458E+00 0.133906613315E+01 0.268054420409E+01 + -0.520000000000E+00 0.365035060381E+00 0.134501851410E+01 0.267357869412E+01 + -0.518000000000E+00 0.364357014370E+00 0.135097089505E+01 0.266662870436E+01 + -0.516000000000E+00 0.363679976300E+00 0.135692327600E+01 0.265969420597E+01 + -0.514000000000E+00 0.363003945047E+00 0.136287565695E+01 0.265277517017E+01 + -0.512000000000E+00 0.362328919487E+00 0.136882803791E+01 0.264587156821E+01 + -0.510000000000E+00 0.361654898498E+00 0.137478041886E+01 0.263898337139E+01 + -0.508000000000E+00 0.360981880959E+00 0.138073279981E+01 0.263211055107E+01 + -0.506000000000E+00 0.360309865748E+00 0.138668518076E+01 0.262525307861E+01 + -0.504000000000E+00 0.359638851746E+00 0.139263756172E+01 0.261841092546E+01 + -0.502000000000E+00 0.358968837834E+00 0.139858994267E+01 0.261158406308E+01 + -0.500000000000E+00 0.358299822892E+00 0.140454232362E+01 0.260477246298E+01 + -0.498000000000E+00 0.357631805804E+00 0.141049470457E+01 0.259797609672E+01 + -0.496000000000E+00 0.356964785453E+00 0.141644708553E+01 0.259119493590E+01 + -0.494000000000E+00 0.356298760722E+00 0.142239946648E+01 0.258442895216E+01 + -0.492000000000E+00 0.355633730498E+00 0.142835184743E+01 0.257767811717E+01 + -0.490000000000E+00 0.354969693666E+00 0.143430422838E+01 0.257094240268E+01 + -0.488000000000E+00 0.354306649113E+00 0.144025660934E+01 0.256422178043E+01 + -0.486000000000E+00 0.353644595725E+00 0.144620899029E+01 0.255751622225E+01 + -0.484000000000E+00 0.352983532392E+00 0.145216137124E+01 0.255082569998E+01 + -0.482000000000E+00 0.352323458003E+00 0.145811375219E+01 0.254415018551E+01 + -0.480000000000E+00 0.351664371447E+00 0.146406613315E+01 0.253748965079E+01 + -0.478000000000E+00 0.351006271616E+00 0.147001851410E+01 0.253084406779E+01 + -0.476000000000E+00 0.350349157400E+00 0.147597089505E+01 0.252421340853E+01 + -0.474000000000E+00 0.349693027694E+00 0.148192327600E+01 0.251759764507E+01 + -0.472000000000E+00 0.349037881389E+00 0.148787565695E+01 0.251099674951E+01 + -0.470000000000E+00 0.348383717380E+00 0.149382803791E+01 0.250441069400E+01 + -0.468000000000E+00 0.347730534562E+00 0.149978041886E+01 0.249783945073E+01 + -0.466000000000E+00 0.347078331831E+00 0.150573279981E+01 0.249128299193E+01 + -0.464000000000E+00 0.346427108084E+00 0.151168518076E+01 0.248474128986E+01 + -0.462000000000E+00 0.345776862217E+00 0.151763756172E+01 0.247821431683E+01 + -0.460000000000E+00 0.345127593130E+00 0.152358994267E+01 0.247170204521E+01 + -0.458000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.456000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.454000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.452000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.450000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.448000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.446000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.444000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.442000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.440000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.438000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.436000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.434000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.432000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.430000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.428000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.426000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.424000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.422000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.420000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.418000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.416000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.414000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.412000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.410000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.408000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.406000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.404000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.402000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.400000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.398000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.396000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.394000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.392000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.390000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.388000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.386000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.384000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.382000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.380000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.378000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.376000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.374000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.372000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.370000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.368000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.366000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.364000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.362000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.360000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.358000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.356000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.354000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.352000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.350000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.348000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.346000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.344000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.342000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.340000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.338000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.336000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.334000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.332000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.330000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.328000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.326000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.324000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.322000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.320000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.318000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.316000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.314000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.312000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.310000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.308000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.306000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.304000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.302000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.300000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.298000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.296000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.294000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.292000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.290000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.288000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.286000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.284000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.282000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.280000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.278000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.276000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.274000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.272000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.270000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.268000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.266000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.264000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.262000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.260000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.258000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.256000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.254000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.252000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.250000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.248000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.246000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.244000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.242000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.240000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.238000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.236000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.234000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.232000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.230000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.228000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.226000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.224000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.222000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.220000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.218000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.216000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.214000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.212000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.210000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.208000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.206000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.204000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.202000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.200000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.198000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.196000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.194000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.192000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.190000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.188000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.186000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.184000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.182000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.180000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.178000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.176000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.174000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.172000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.170000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.168000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.166000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.164000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.162000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.160000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.158000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.156000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.154000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.152000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.150000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.148000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.146000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.144000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.142000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.140000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.138000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.136000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.134000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.132000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.130000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.128000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.126000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.124000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.122000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.120000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.118000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.116000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.114000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.112000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.110000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.108000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.106000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.104000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.102000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.100000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.980000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.960000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.940000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.920000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.900000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.880000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.860000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.840000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.820000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.800000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.780000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.760000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.740000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.720000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.700000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.680000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.660000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.640000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.620000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.600000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.580000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.560000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.540000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.520000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.500000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.480000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.460000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.440000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.420000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.400000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.380000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.360000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.340000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.320000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.300000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.280000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.260000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.240000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.220000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.200000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.180000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.160000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.140000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.120000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.100000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.800000000000E-02 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.600000000000E-02 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.400000000000E-02 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + -0.200000000000E-02 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.000000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.200000000000E-02 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.400000000000E-02 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.600000000000E-02 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.800000000000E-02 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.100000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.120000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.140000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.160000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.180000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.200000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.220000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.240000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.260000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.280000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.300000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.320000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.340000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.360000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.380000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.400000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.420000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.440000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.460000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.480000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.500000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.520000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.540000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.560000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.580000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.600000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.620000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.640000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.660000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.680000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.700000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.720000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.740000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.760000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.780000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.800000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.820000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.840000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.860000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.880000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.900000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.920000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.940000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.960000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.980000000000E-01 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.100000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.102000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.104000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.106000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.108000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.110000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.112000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.114000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.116000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.118000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.120000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.122000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.124000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.126000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.128000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.130000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.132000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.134000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.136000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.138000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.140000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.142000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.144000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.146000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.148000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.150000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.152000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.154000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.156000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.158000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.160000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.162000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.164000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.166000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.168000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.170000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.172000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.174000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.176000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.178000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.180000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.182000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.184000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.186000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.188000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.190000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.192000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.194000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.196000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.198000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.200000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.202000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.204000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.206000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.208000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.210000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.212000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.214000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.216000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.218000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.220000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.222000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.224000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.226000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.228000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.230000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.232000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.234000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.236000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.238000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.240000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.242000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.244000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.246000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.248000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.250000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.252000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.254000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.256000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.258000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.260000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.262000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.264000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.266000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.268000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.270000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.272000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.274000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.276000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.278000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.280000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.282000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.284000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.286000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.288000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.290000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.292000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.294000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.296000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.298000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.300000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.302000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.304000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.306000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.308000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.310000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.312000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.314000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.316000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.318000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.320000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.322000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.324000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.326000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.328000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.330000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.332000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.334000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.336000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.338000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.340000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.342000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.344000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.346000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.348000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.350000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.352000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.354000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.356000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.358000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.360000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.362000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.364000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.366000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.368000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.370000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.372000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.374000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.376000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.378000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.380000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.382000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.384000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.386000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.388000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.390000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.392000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.394000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.396000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.398000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.400000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.402000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.404000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.406000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.408000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.410000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.412000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.414000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.416000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.418000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.420000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.422000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.424000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.426000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.428000000000E+00 0.344568474190E+00 0.152872302663E+01 0.246609791921E+01 + 0.430000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.432000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.434000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.436000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.438000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.440000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.442000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.444000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.446000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.448000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.450000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.452000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.454000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.456000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.458000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.460000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.462000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.464000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.466000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.468000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.470000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.472000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.474000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.476000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.478000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.480000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.482000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.484000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.486000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.488000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.490000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.492000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.494000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.496000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.498000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.500000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.502000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.504000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.506000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.508000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.510000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.512000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.514000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.516000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.518000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.520000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.522000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.524000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.526000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.528000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.530000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.532000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.534000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.536000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.538000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.540000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.542000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.544000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.546000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.548000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.550000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.552000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.554000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.556000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.558000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.560000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.562000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.564000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.566000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.568000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.570000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.572000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.574000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.576000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.578000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.580000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.582000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.584000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.586000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.588000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.590000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.592000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.594000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.596000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.598000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.600000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.602000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.604000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.606000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.608000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.610000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.612000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.614000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.616000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.618000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.620000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.622000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.624000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.626000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.628000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.630000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.632000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.634000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.636000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.638000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.640000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.642000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.644000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.646000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.648000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.650000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.652000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.654000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.656000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.658000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.660000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.662000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.664000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.666000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.668000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.670000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.672000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.674000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.676000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.678000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.680000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.682000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.684000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.686000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.688000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.690000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.692000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.694000000000E+00 0.130408453203E+01 0.152872302663E+01 0.246609791921E+01 + 0.696000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.698000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.700000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.702000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.704000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.706000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.708000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.710000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.712000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.714000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.716000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.718000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.720000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.722000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.724000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.726000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.728000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.730000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.732000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.734000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.736000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.738000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.740000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.742000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.744000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.746000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.748000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.750000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.752000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.754000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.756000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.758000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.760000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.762000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.764000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.766000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.768000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.770000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.772000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.774000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.776000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.778000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.780000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.782000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.784000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.786000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.788000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.790000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.792000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.794000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.796000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.798000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.800000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.802000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.804000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.806000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.808000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.810000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.812000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.814000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.816000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.818000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.820000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.822000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.824000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.826000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.828000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.830000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.832000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.834000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.836000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.838000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.840000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.842000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.844000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.846000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.848000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.850000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.852000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.854000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.856000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.858000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.860000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.862000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.864000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.866000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.868000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.870000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.872000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.874000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.876000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.878000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.880000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.882000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.884000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.886000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.888000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.890000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.892000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.894000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.896000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.898000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.900000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.902000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.904000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.906000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.908000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.910000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.912000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.914000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.916000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.918000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.920000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.922000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.924000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.926000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.928000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.930000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.932000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.934000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.936000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.938000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.940000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.942000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.944000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.946000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.948000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.950000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.952000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.954000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.956000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.958000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.960000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.962000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.964000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.966000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.968000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.970000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.972000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.974000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.976000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.978000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.980000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.982000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.984000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.986000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.988000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.990000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.992000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.994000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.996000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.998000000000E+00 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 + 0.100000000000E+01 0.500000000000E+00 0.000000000000E+00 0.571000000000E+00 diff --git a/testcases/LaxProblem/postProc.py b/testcases/LaxProblem/postProc.py new file mode 100644 index 0000000..7c60e4e --- /dev/null +++ b/testcases/LaxProblem/postProc.py @@ -0,0 +1,132 @@ +import numpy as np +import json +import matplotlib.pyplot as plt +import sys +import os +import h5py + +############################################################################### +## Read Exact Solution ## +############################################################################### + +def readExact(): + # Open file + f = open('exact.txt', 'r') + + x = [] + u = [] + p = [] + rho = [] + e = [] + + # Loop over lines and extract variables of interest + for line in f: + line = line.strip() + columns = line.split() + x.append( float(columns[0])) + rho.append(float(columns[1])) + u.append( float(columns[2])) + p.append( float(columns[3])) + + f.close() + + x = [(xp+1)*0.5 for xp in x] + + e = [xp/xr/0.4 for xp, xr in zip(p,rho)] + + return x, u, p, rho, e + +############################################################################### +# Read Exact Solution # +############################################################################### + +xExact, uExact, pExact, rhoExact, eExact = readExact() + +def L2(err,dx): + tot = sum(map(sum, err**2*dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + vol = sum(map(sum, dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + return np.sqrt(tot/vol) + +def process(case, i): + dir_name = os.path.join(os.environ['HTR_DIR'], 'testcases/LaxProblem') + soleil_input_file = os.path.join(dir_name, str(case)+'.json') + +############################################################################## +# Read Prometeo Input File # +############################################################################## + + with open(soleil_input_file) as f: + data = json.load(f) + + xNum = data["Grid"]["xNum"] + xWidth = data["Grid"]["xWidth"] + + dt = data["Integrator"]["fixedDeltaTime"] + nstep = data["Integrator"]["maxIter"] + time = dt*nstep + + filename = os.path.join(dir_name, str(case)+'/sample0/fluid_iter'+str(nstep).zfill(10)+'/0,0,0-'+str(case+1)+',0,0.hdf') + hdf_filename = filename + +############################################################################## +# Read Prometeo Output Data # +############################################################################## + + f = h5py.File(hdf_filename, 'r') + + # Get the data + x = f['centerCoordinates'][0,0,:][:,0] + dx = f['cellWidth' ][0,0,:][:,0] + u = f['velocity' ][0,0,:][:,0] + p = f['pressure' ][0,0,:] + rho = f['rho' ][0,0,:] + T = f['temperature' ][0,0,:] + + e = T/0.4 + + ############################################################################## + # Plot # + ############################################################################## + + plt.figure(1+i*4) + plt.plot(xExact, uExact, '-k', label='Reference solution') + plt.plot( x, u, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$', fontsize = 20) + plt.ylabel(r'$u$', fontsize = 20) + plt.legend() + plt.savefig('Velocity_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(2+i*4) + plt.plot(xExact, pExact, '-k', label='Reference solution') + plt.plot( x, p, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$', fontsize = 20) + plt.ylabel(r'$P$', fontsize = 20) + plt.legend() + plt.savefig('Pressure_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(3+i*4) + plt.plot(xExact, rhoExact, '-k', label='Reference solution') + plt.plot( x, rho, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$' , fontsize = 20) + plt.ylabel(r'$\rho$', fontsize = 20) + plt.legend() + plt.savefig('Density_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(4+i*4) + plt.plot(xExact, eExact, '-k', label='Reference solution') + plt.plot( x, e, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$', fontsize = 20) + plt.ylabel(r'$e$', fontsize = 20) + plt.legend() + plt.savefig('InternalEnergy_'+str(case)+'.eps', bbox_inches='tight') + + return x, u, p, rho, e + +plt.rcParams.update({'font.size': 16}) + +#cases = (100, 100) +#for i, case in enumerate(cases): +# x, u, p, r, e = process(case, i) +x, u, p, r, e = process(100, 0) + +plt.show() diff --git a/testcases/LaxProblem/run.sh b/testcases/LaxProblem/run.sh new file mode 100644 index 0000000..6b8f731 --- /dev/null +++ b/testcases/LaxProblem/run.sh @@ -0,0 +1,7 @@ +rm -rf sample* slurm* + +for cases in 100; do + rm -r $cases + mkdir $cases + USE_CUDA=1 PROFILE=0 QUEUE="gpu" $HTR_DIR/src/prometeo.sh -i $cases.json -o $cases +done diff --git a/testcases/MultispeciesTBL/MakeInput.py b/testcases/MultispeciesTBL/MakeInput.py new file mode 100755 index 0000000..b48c405 --- /dev/null +++ b/testcases/MultispeciesTBL/MakeInput.py @@ -0,0 +1,355 @@ +#!/usr/bin/env python2 + +import argparse +import sys +import os +import json +import numpy as np +import h5py +from random import * +from scipy.integrate import odeint +from scipy.optimize import fsolve +from joblib import Parallel, delayed +import pandas + +# load local modules +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen + +parser = argparse.ArgumentParser() +parser.add_argument('--np', nargs='?', default=1, type=int, + help='number of cores') +parser.add_argument('base_json', type=argparse.FileType('r'), default='base.json') +args = parser.parse_args() + +############################################################################## +# Read similarity solution # +############################################################################## + +CBL = pandas.read_csv("SimilaritySolution.dat") +etaB = CBL["eta"][:].values +fB = CBL["f"][:].values +uB = CBL["u"][:].values +TB = CBL["T"][:].values +N2B = CBL["X_N2"][:].values +O2B = CBL["X_O2"][:].values +NOB = CBL["X_NO"][:].values +NB = CBL["X_N" ][:].values +OB = CBL["X_O" ][:].values +muB = CBL["mu"][:].values +rhoB = CBL["rho"][:].values +cB = CBL["SoS"][:].values +Rex0 = CBL["Rex"][0] + +x0 = Rex0*muB[-1]/(uB[-1]*rhoB[-1]) +deltaStarIn = 0.0 +for i in range(uB.size-1): + deltaStarIn += 0.5*((1.0 - uB[i+1]*rhoB[i+1]/(uB[-1]*rhoB[-1]))*rhoB[-1]/rhoB[i+1] + + (1.0 - uB[i ]*rhoB[i ]/(uB[-1]*rhoB[-1]))*rhoB[-1]/rhoB[i ] )*(etaB[i+1] - etaB[i]) +deltaStarIn *= x0*np.sqrt(2.0/Rex0) +print("Re_delta0 = ", uB[-1]*rhoB[-1]*deltaStarIn/muB[-1]) + +yB = np.zeros(etaB.size) +for i in range(etaB.size): + if (i != 0) : + rhoMid = 0.5*(rhoB[i ] + rhoB[i-1]) + dyB = x0*np.sqrt(2/Rex0)*rhoB[-1]/rhoMid*(etaB[i] - etaB[i-1]) + yB[i] = yB[i-1] + dyB + +vB = 0.5*yB/x0*uB - rhoB[-1]/rhoB*1.0/np.sqrt(2*Rex0)*fB + +############################################################################## +# Setup Case # +############################################################################## + +# Read base config +config = json.load(args.base_json) + +ReIn = config["Case"]["ReInlet"] +MaInf = config["Case"]["MaInf"] +TInf = config["Case"]["TInf"] +PInf = config["Case"]["PInf"] +TwOvT = config["Case"]["TwOvTInf"] +xTurb = config["Case"]["xTurb"] +yPlus = config["Case"]["yPlus"] +FTT = config["Case"]["FlowThroughTimesNoStat"] +FTTS = config["Case"]["FlowThroughTimesStat"] + +# Read properties +Pr = config["Flow"]["prandtl"] +gamma = config["Flow"]["gamma"] +R = config["Flow"]["gasConstant"] + +# Simulation setup +assert config["Flow"]["turbForcing"]["type"] == "OFF" +assert config["Flow"]["initCase"] == "Restart" +restartDir = "InitialCase" +config["Flow"]["restartDir"] = restartDir + +# Free-stream mixture properties +cInf = cB[-1] +muInf = muB[-1] + + +# Free-stream conditions +assert abs(TB[-1] - TInf) < 1e-3 +UInf = uB[-1] +rhoInf = rhoB[-1] +TInf = TB[-1] +assert abs(UInf/cInf - MaInf) < 1e-3 + +# Inlet displacement thickness +assert abs(deltaStarIn -muInf*ReIn/(UInf*rhoInf)) < 1e-3 + +# Wall properties +Tw = TB[0] +muW = muB[0] +rhoW = rhoB[0] +assert abs(Tw/TB[-1] - TwOvT) < 1e-3 + +############################################################################## +# Compute similarity solution # +############################################################################## + +# Reference friction coefficient +def getCfTurb(xGrid): + + def VanDriestII(Cf): + Rexv = (xGrid-xTurb)*ReIn + + r = Pr**(1.0/3.0) + Taw = TInf*(1.0 + r*0.5*(gamma - 1.0)*MaInf**2) + + a = np.sqrt(r*0.5*(gamma - 1.0)*MaInf**2*TInf/Tw) + b = (Taw/Tw - 1.0) + + A = (2*a**2 - b)/np.sqrt(b**2 + 4*a**2) + B = b /np.sqrt(b**2 + 4*a**2) + + res = (np.arcsin(A) + np.arcsin(B))/np.sqrt(Cf*(Taw/TInf - 1.0)) + res-= 4.15*np.log10(Rexv*Cf*muInf/muW) + res-= 1.7 + return res + + cf = fsolve(VanDriestII, 1e-4, xtol=1e-10) + + return cf + +Cf = getCfTurb(config["Grid"]["xWidth"]+x0) +TauW = Cf*(rhoInf*UInf**2)*0.5 +uTau = np.sqrt(TauW/rhoW) +deltaNu = muW/(uTau*rhoW) +tNu = deltaNu**2*rhoW/muW + +config["Grid"]["origin"][0] = x0 +config["Grid"]["xWidth"] *= deltaStarIn +config["Grid"]["yWidth"] *= deltaStarIn +config["Grid"]["zWidth"] *= deltaStarIn + +############################################################################## +# Boundary conditions # +############################################################################## +assert config["BC"]["xBCLeft"] == "NSCBC_Inflow" +assert config["BC"]["xBCLeftInflowProfile"]["type"] == "File" +config["BC"]["xBCLeftInflowProfile"]["FileDir"] = restartDir +assert config["BC"]["xBCLeftHeat"]["type"] == "File" +config["BC"]["xBCLeftHeat"]["FileDir"] = restartDir +assert config["BC"]["xBCLeftMixture"]["type"] == "File" +config["BC"]["xBCLeftMixture"]["FileDir"] = restartDir +config["BC"]["xBCLeftP"] = PInf + +assert config["BC"]["xBCRight"] == "NSCBC_Outflow" +config["BC"]["xBCRightP"] = PInf + +assert config["BC"]["yBCLeft"] == "SuctionAndBlowingWall" +assert config["BC"]["yBCLeftHeat"]["type"] == "Constant" +config['BC']["yBCLeftHeat"]["temperature"] = Tw +assert config["BC"]["yBCLeftInflowProfile"]["type"] == "SuctionAndBlowing" + +config["BC"]["yBCLeftInflowProfile"]["Xmin"] = 15*deltaStarIn + x0 +config["BC"]["yBCLeftInflowProfile"]["Xmax"] = 20*deltaStarIn + x0 +config["BC"]["yBCLeftInflowProfile"]["X0"] = 0.5*(config["BC"]["yBCLeftInflowProfile"]["Xmin"] + config["BC"]["yBCLeftInflowProfile"]["Xmax"]) +config["BC"]["yBCLeftInflowProfile"]["sigma"] = 0.3*(config["BC"]["yBCLeftInflowProfile"]["X0"] - config["BC"]["yBCLeftInflowProfile"]["Xmin"]) +config["BC"]["yBCLeftInflowProfile"]["Zw"] = 0.1*config["Grid"]["zWidth"] + +config["BC"]["yBCLeftInflowProfile"]["A"] = [ 0.05*UInf, 0.05*UInf] +config["BC"]["yBCLeftInflowProfile"]["omega"] = [ 0.9*cInf/deltaStarIn, 0.9*cInf/deltaStarIn] +config["BC"]["yBCLeftInflowProfile"]["beta"] = [ 0.3/deltaStarIn, -0.3/deltaStarIn] + +assert config["BC"]["yBCRight"] == "NSCBC_Outflow" +config["BC"]["yBCRightP"] = PInf + +############################################################################## +# Generate Grid # +############################################################################## + +def objective(yStretching): + yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + config["Grid"]["yWidth"], + config["Grid"]["yNum"], + config["Grid"]["yType"], + yStretching, + False) + return dy[1]/deltaNu - yPlus + +config["Grid"]["yStretching"], = fsolve(objective, 1.0) + +xGrid, dx = gridGen.GetGrid(config["Grid"]["origin"][0], + config["Grid"]["xWidth"], + config["Grid"]["xNum"], + config["Grid"]["xType"], + 1.0, + False) + +yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + config["Grid"]["yWidth"], + config["Grid"]["yNum"], + config["Grid"]["yType"], + config["Grid"]["yStretching"], + False, + yPlus*deltaNu) + +zGrid, dz = gridGen.GetGrid(config["Grid"]["origin"][2], + config["Grid"]["zWidth"], + config["Grid"]["zNum"], + config["Grid"]["zType"], + 1.0, + True) + +print(" L_x x L_y x L_z") + +print(config["Grid"]["xWidth"]/deltaNu, " x ", + config["Grid"]["yWidth"]/deltaNu, " x ", + config["Grid"]["zWidth"]/deltaNu) + +print(dx[0]/deltaNu, " x ", + dy[0]/deltaNu, " x ", + dz[0]/deltaNu) + +# Load mapping +Ntiles = config["Mapping"]["tiles"] + +assert config["Grid"]["xNum"] % Ntiles[0] == 0 +assert config["Grid"]["yNum"] % Ntiles[1] == 0 +assert config["Grid"]["zNum"] % Ntiles[2] == 0 + +NxTile = int(config["Grid"]["xNum"]/Ntiles[0]) +NyTile = int(config["Grid"]["yNum"]/Ntiles[1]) +NzTile = int(config["Grid"]["zNum"]/Ntiles[2]) + +halo = [1, 1, 0] + +# Set maxTime +config["Integrator"]["maxTime"] = config["Grid"]["xWidth"]/UInf*FTT + +with open("NoStats.json", 'w') as fout: + json.dump(config, fout, indent=3) + +config["Integrator"]["maxTime"] = config["Grid"]["xWidth"]/UInf*FTT + FTTS*2*np.pi/config["BC"]["yBCLeftInflowProfile"]["omega"][0] + +# Setup averages +config["IO"]["YZAverages"] = [{"fromCell" : [0, 0, 0], "uptoCell" : [config["Grid"]["xNum"]+1, 0, config["Grid"]["zNum"]]}] + +with open("Stats.json", 'w') as fout: + json.dump(config, fout, indent=3) + +############################################################################## +# Produce restart and profile files # +############################################################################## +if not os.path.exists(restartDir): + os.makedirs(restartDir) + +def writeTile(xt, yt, zt): + lo_bound = [(xt )*NxTile +halo[0], (yt )*NyTile +halo[1], (zt )*NzTile +halo[2]] + hi_bound = [(xt+1)*NxTile-1+halo[0], (yt+1)*NyTile-1+halo[1], (zt+1)*NzTile-1+halo[2]] + if (xt == 0): lo_bound[0] -= halo[0] + if (yt == 0): lo_bound[1] -= halo[1] + if (zt == 0): lo_bound[2] -= halo[2] + if (xt == Ntiles[0]-1): hi_bound[0] += halo[0] + if (yt == Ntiles[1]-1): hi_bound[1] += halo[1] + if (zt == Ntiles[2]-1): hi_bound[2] += halo[2] + filename = ('%s,%s,%s-%s,%s,%s.hdf' + % (lo_bound[0], lo_bound[1], lo_bound[2], + hi_bound[0], hi_bound[1], hi_bound[2])) + print("Working on: ", filename) + + shape = [hi_bound[2] - lo_bound[2] +1, + hi_bound[1] - lo_bound[1] +1, + hi_bound[0] - lo_bound[0] +1] + + centerCoordinates = np.ndarray(shape, dtype=np.dtype('(3,)f8')) + cellWidth = np.ndarray(shape, dtype=np.dtype('(3,)f8')) + rho = np.ndarray(shape) + pressure = np.ndarray(shape) + temperature = np.ndarray(shape) + MolarFracs = np.ndarray(shape, dtype=np.dtype('(5,)f8')) + velocity = np.ndarray(shape, dtype=np.dtype('(3,)f8')) + dudtBoundary = np.ndarray(shape) + dTdtBoundary = np.ndarray(shape) + pressure[:] = PInf + for (k,kc) in enumerate(centerCoordinates): + for (j,jc) in enumerate(kc): + for (i,ic) in enumerate(jc): + Re = rhoInf*UInf*xGrid[i+lo_bound[0]]/muInf + yB1 = yB*np.sqrt(Re/Rex0) + vB1 = vB*np.sqrt(Rex0/Re) + + u = np.interp(yGrid[j+lo_bound[1]], yB1, uB) + v = np.interp(yGrid[j+lo_bound[1]], yB1, vB1) + T = np.interp(yGrid[j+lo_bound[1]], yB1, TB) + N2 = np.interp(yGrid[j+lo_bound[1]], yB1, N2B) + O2 = np.interp(yGrid[j+lo_bound[1]], yB1, O2B) + NO = np.interp(yGrid[j+lo_bound[1]], yB1, NOB) + N = np.interp(yGrid[j+lo_bound[1]], yB1, NB) + O = np.interp(yGrid[j+lo_bound[1]], yB1, OB) + rh = np.interp(yGrid[j+lo_bound[1]], yB1, rhoB) + + centerCoordinates[k,j,i] = [xGrid[i+lo_bound[0]], yGrid[j+lo_bound[1]], zGrid[k+lo_bound[2]]] + cellWidth [k,j,i] = [ dx[i+lo_bound[0]], dy[j+lo_bound[1]], dz[k+lo_bound[2]]] + temperature [k,j,i] = T + rho [k,j,i] = rh + MolarFracs [k,j,i] = [N2, O2, NO, N, O] + velocity [k,j,i] = [u, v, 0.0] + + with h5py.File(os.path.join(restartDir, filename), 'w') as fout: + fout.attrs.create("SpeciesNames", ["N2".encode(), + "O2".encode(), + "NO".encode(), + "N".encode(), + "O".encode()], dtype="S20") + fout.attrs.create("timeStep", 0) + fout.attrs.create("simTime", 0.0) + fout.attrs.create("channelForcing", 0.0) + + fout.create_dataset("centerCoordinates", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("cellWidth", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("rho", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("pressure", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("temperature", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("MolarFracs", shape=shape, dtype = np.dtype("(5,)f8")) + fout.create_dataset("velocity", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("dudtBoundary", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("dTdtBoundary", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("velocity_old_NSCBC", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("temperature_old_NSCBC", shape=shape, dtype = np.dtype("f8")) + fout.create_dataset("MolarFracs_profile", shape=shape, dtype = np.dtype("(5,)f8")) + fout.create_dataset("velocity_profile", shape=shape, dtype = np.dtype("(3,)f8")) + fout.create_dataset("temperature_profile", shape=shape, dtype = np.dtype("f8")) + + fout["centerCoordinates"][:] = centerCoordinates + fout["cellWidth"][:] = cellWidth + fout["rho"][:] = rho + fout["pressure"][:] = pressure + fout["temperature"][:] = temperature + fout["MolarFracs"][:] = MolarFracs + fout["velocity"][:] = velocity + fout["dudtBoundary"][:] = dudtBoundary + fout["dTdtBoundary"][:] = dTdtBoundary + fout["velocity_old_NSCBC"][:] = velocity + fout["temperature_old_NSCBC"][:] = temperature + fout["MolarFracs_profile"][:] = MolarFracs + fout["velocity_profile"][:] = velocity + fout["temperature_profile"][:] = temperature + +Parallel(n_jobs=args.np)(delayed(writeTile)(x, y, z) for x, y, z in np.ndindex((Ntiles[0], Ntiles[1], Ntiles[2]))) + diff --git a/testcases/MultispeciesTBL/SimilaritySolution.dat b/testcases/MultispeciesTBL/SimilaritySolution.dat new file mode 100644 index 0000000..84a50d3 --- /dev/null +++ b/testcases/MultispeciesTBL/SimilaritySolution.dat @@ -0,0 +1,201 @@ +eta,f,u,T,X_N2,X_O2,X_NO,X_N,X_O,mu,rho,SoS,Rex +0,0,0,2925,0.789919,0.210065,2.91798e-08,1.54269e-09,1.596e-05,8.59825e-05,0.120201,1177.56,96203.8 +0.0502513,0.00085799,99.2566,2934.01,0.789919,0.210065,2.91798e-08,1.54269e-09,1.596e-05,8.61535e-05,0.119832,1179.36,96203.8 +0.100503,0.00343384,198.581,2937.69,0.789919,0.210065,2.9074e-08,1.529e-09,1.59024e-05,8.62232e-05,0.119682,1180.09,96203.8 +0.150754,0.00772802,297.886,2936.03,0.789919,0.210065,2.88622e-08,1.50089e-09,1.57859e-05,8.61917e-05,0.119749,1179.76,96203.8 +0.201005,0.0137393,397.065,2929.04,0.789919,0.210065,2.85463e-08,1.45844e-09,1.56113e-05,8.60592e-05,0.120035,1178.36,96203.8 +0.251256,0.0214647,495.999,2916.76,0.789919,0.210065,2.81304e-08,1.4025e-09,1.53812e-05,8.5826e-05,0.120541,1175.91,96203.8 +0.301508,0.0308987,594.553,2899.23,0.789919,0.210066,2.76205e-08,1.3346e-09,1.51001e-05,8.54928e-05,0.12127,1172.4,96203.8 +0.351759,0.0420336,692.577,2876.55,0.789919,0.210066,2.70244e-08,1.25681e-09,1.47739e-05,8.50604e-05,0.122226,1167.85,96203.8 +0.40201,0.0548588,789.909,2848.82,0.789919,0.210066,2.63511e-08,1.17155e-09,1.44093e-05,8.45302e-05,0.123415,1162.25,96203.8 +0.452261,0.0693609,886.376,2816.2,0.78992,0.210066,2.56107e-08,1.08144e-09,1.40135e-05,8.39039e-05,0.124845,1155.64,96203.8 +0.502513,0.0855234,981.796,2778.86,0.78992,0.210067,2.48137e-08,9.89059e-10,1.35939e-05,8.31836e-05,0.126523,1148.03,96203.8 +0.552764,0.103327,1075.98,2737,0.78992,0.210067,2.39705e-08,8.96828e-10,1.31572e-05,8.23722e-05,0.128458,1139.44,96203.8 +0.603015,0.122748,1168.73,2690.88,0.78992,0.210068,2.30915e-08,8.06867e-10,1.27094e-05,8.14727e-05,0.13066,1129.91,96203.8 +0.653266,0.14376,1259.86,2640.76,0.78992,0.210068,2.21864e-08,7.20909e-10,1.22557e-05,8.0489e-05,0.133139,1119.47,96203.8 +0.703518,0.166333,1349.18,2586.96,0.78992,0.210068,2.1264e-08,6.40263e-10,1.18004e-05,7.94253e-05,0.135908,1108.15,96203.8 +0.753769,0.190435,1436.48,2529.8,0.78992,0.210069,2.03324e-08,5.65813e-10,1.13468e-05,7.82864e-05,0.138979,1096.01,96203.8 +0.80402,0.216029,1521.59,2469.65,0.78992,0.210069,1.93986e-08,4.98045e-10,1.08975e-05,7.70776e-05,0.142364,1083.11,96203.8 +0.854271,0.243076,1604.34,2406.87,0.78992,0.210069,1.8469e-08,4.37104e-10,1.04542e-05,7.58046e-05,0.146077,1069.48,96203.8 +0.904523,0.271532,1684.57,2341.86,0.78992,0.21007,1.75487e-08,3.82863e-10,1.00185e-05,7.44734e-05,0.150133,1055.2,96203.8 +0.954774,0.301354,1762.13,2275,0.78992,0.21007,1.66422e-08,3.3499e-10,9.59137e-06,7.30905e-05,0.154545,1040.34,96203.8 +1.00503,0.332494,1836.9,2206.72,0.78992,0.21007,1.57534e-08,2.93023e-10,9.1736e-06,7.16625e-05,0.159327,1024.95,96203.8 +1.05528,0.364903,1908.76,2137.39,0.78992,0.210071,1.48854e-08,2.56421e-10,8.7658e-06,7.01963e-05,0.164495,1009.11,96203.8 +1.10553,0.398529,1977.62,2067.41,0.789921,0.210071,1.40408e-08,2.24619e-10,8.36847e-06,6.86988e-05,0.170063,992.891,96203.8 +1.15578,0.433319,2043.42,1997.16,0.789921,0.210071,1.32218e-08,1.97056e-10,7.98202e-06,6.71769e-05,0.176045,976.367,96203.8 +1.20603,0.469222,2106.12,1927.01,0.789921,0.210072,1.24302e-08,1.73204e-10,7.60675e-06,6.56374e-05,0.182454,959.609,96203.8 +1.25628,0.506182,2165.68,1857.28,0.789921,0.210072,1.16674e-08,1.52577e-10,7.24295e-06,6.40872e-05,0.189304,942.69,96203.8 +1.30653,0.544145,2222.1,1788.29,0.789921,0.210072,1.09343e-08,1.34738e-10,6.89082e-06,6.25326e-05,0.196607,925.678,96203.8 +1.35678,0.583057,2275.4,1720.33,0.789921,0.210073,1.02318e-08,1.19303e-10,6.55049e-06,6.09798e-05,0.204374,908.641,96203.8 +1.40704,0.622863,2325.6,1653.65,0.789921,0.210073,9.56034e-09,1.05934e-10,6.22207e-06,5.94348e-05,0.212614,891.643,96203.8 +1.45729,0.663512,2372.77,1588.49,0.789921,0.210073,8.92013e-09,9.43398e-11,5.90559e-06,5.79028e-05,0.221336,874.743,96203.8 +1.50754,0.704951,2416.96,1525.04,0.789921,0.210073,8.3112e-09,8.42672e-11,5.60105e-06,5.63891e-05,0.230545,857.996,96203.8 +1.55779,0.747128,2458.26,1463.46,0.789921,0.210073,7.73334e-09,7.54993e-11,5.30839e-06,5.48982e-05,0.240246,841.454,96203.8 +1.60804,0.789995,2496.76,1403.89,0.789921,0.210074,7.18617e-09,6.78496e-11,5.0275e-06,5.34341e-05,0.250441,825.161,96203.8 +1.65829,0.833505,2532.57,1346.44,0.789921,0.210074,6.66916e-09,6.11583e-11,4.75825e-06,5.20006e-05,0.261127,809.158,96203.8 +1.70854,0.877611,2565.79,1291.18,0.789921,0.210074,6.18161e-09,5.52886e-11,4.50046e-06,5.06009e-05,0.272301,793.48,96203.8 +1.75879,0.92227,2596.54,1238.19,0.789922,0.210074,5.72274e-09,5.01238e-11,4.25391e-06,4.92377e-05,0.283955,778.156,96203.8 +1.80905,0.96744,2624.94,1187.49,0.789922,0.210074,5.29165e-09,4.55641e-11,4.01836e-06,4.79133e-05,0.29608,763.21,96203.8 +1.8593,1.01308,2651.11,1139.09,0.789922,0.210075,4.88737e-09,4.15244e-11,3.79356e-06,4.66296e-05,0.30866,748.663,96203.8 +1.90955,1.05916,2675.19,1092.99,0.789922,0.210075,4.50887e-09,3.79322e-11,3.57921e-06,4.53882e-05,0.321677,734.53,96203.8 +1.9598,1.10563,2697.29,1049.18,0.789922,0.210075,4.15506e-09,3.47259e-11,3.37501e-06,4.41901e-05,0.335108,720.821,96203.8 +2.01005,1.15247,2717.54,1007.63,0.789922,0.210075,3.82485e-09,3.18531e-11,3.18065e-06,4.30364e-05,0.348929,707.544,96203.8 +2.0603,1.19965,2736.05,968.283,0.789922,0.210075,3.5171e-09,2.92693e-11,2.9958e-06,4.19274e-05,0.363107,694.722,96203.8 +2.11055,1.24713,2752.96,931.101,0.789922,0.210075,3.2307e-09,2.69368e-11,2.82013e-06,4.08637e-05,0.377608,682.354,96203.8 +2.1608,1.29489,2768.36,896.026,0.789922,0.210075,2.9645e-09,2.48234e-11,2.6533e-06,3.98453e-05,0.392389,670.444,96203.8 +2.21106,1.3429,2782.38,862.997,0.789922,0.210075,2.71741e-09,2.29019e-11,2.49497e-06,3.88723e-05,0.407407,658.993,96203.8 +2.26131,1.39114,2795.11,831.944,0.789922,0.210075,2.48834e-09,2.11492e-11,2.34481e-06,3.79443e-05,0.422614,648.002,96203.8 +2.31156,1.4396,2806.66,802.794,0.789922,0.210076,2.27622e-09,1.95457e-11,2.20247e-06,3.70608e-05,0.437959,637.469,96203.8 +2.36181,1.48824,2817.12,775.475,0.789922,0.210076,2.08002e-09,1.80746e-11,2.06763e-06,3.62213e-05,0.453388,627.389,96203.8 +2.41206,1.53706,2826.57,749.908,0.789922,0.210076,1.89876e-09,1.67216e-11,1.93995e-06,3.5425e-05,0.468846,617.758,96203.8 +2.46231,1.58603,2835.11,726.016,0.789922,0.210076,1.73147e-09,1.54746e-11,1.81913e-06,3.4671e-05,0.484274,608.572,96203.8 +2.51256,1.63514,2842.81,703.722,0.789922,0.210076,1.57725e-09,1.4323e-11,1.70485e-06,3.39584e-05,0.499616,599.827,96203.8 +2.56281,1.68438,2849.74,682.949,0.789923,0.210076,1.43523e-09,1.32577e-11,1.59682e-06,3.32862e-05,0.514813,591.515,96203.8 +2.61307,1.73373,2855.97,663.62,0.789923,0.210076,1.30457e-09,1.2271e-11,1.49473e-06,3.26531e-05,0.529808,583.631,96203.8 +2.66332,1.78318,2861.56,645.658,0.789923,0.210076,1.1845e-09,1.13559e-11,1.39832e-06,3.20579e-05,0.544547,576.169,96203.8 +2.71357,1.83272,2866.57,628.991,0.789923,0.210076,1.07428e-09,1.05065e-11,1.3073e-06,3.14995e-05,0.558977,569.119,96203.8 +2.76382,1.88235,2871.06,613.544,0.789923,0.210076,9.73193e-10,9.71743e-12,1.22142e-06,3.09764e-05,0.573049,562.474,96203.8 +2.81407,1.93205,2875.07,599.248,0.789923,0.210076,8.80593e-10,8.98406e-12,1.14043e-06,3.04874e-05,0.58672,556.224,96203.8 +2.86432,1.98182,2878.65,586.035,0.789923,0.210076,7.95857e-10,8.30218e-12,1.06409e-06,3.00309e-05,0.599949,550.357,96203.8 +2.91457,2.03164,2881.84,573.838,0.789923,0.210076,7.18402e-10,7.66803e-12,9.92175e-07,2.96057e-05,0.612701,544.863,96203.8 +2.96482,2.08151,2884.68,562.593,0.789923,0.210076,6.47683e-10,7.07822e-12,9.24459e-07,2.92102e-05,0.624947,539.729,96203.8 +3.01508,2.13144,2887.2,552.241,0.789923,0.210076,5.83188e-10,6.52966e-12,8.60735e-07,2.88431e-05,0.636663,534.941,96203.8 +3.06533,2.1814,2889.44,542.721,0.789923,0.210076,5.24439e-10,6.01956e-12,8.00804e-07,2.85029e-05,0.64783,530.485,96203.8 +3.11558,2.2314,2891.42,533.98,0.789923,0.210076,4.70989e-10,5.54532e-12,7.44475e-07,2.81882e-05,0.658435,526.349,96203.8 +3.16583,2.28143,2893.17,525.964,0.789923,0.210076,4.22419e-10,5.10457e-12,6.91564e-07,2.78976e-05,0.66847,522.516,96203.8 +3.21608,2.33149,2894.71,518.622,0.789923,0.210076,3.78341e-10,4.69513e-12,6.41897e-07,2.76297e-05,0.677934,518.971,96203.8 +3.26633,2.38157,2896.07,511.906,0.789923,0.210076,3.38392e-10,4.31496e-12,5.95307e-07,2.73833e-05,0.686827,515.701,96203.8 +3.31658,2.43168,2897.27,505.773,0.789923,0.210076,3.02232e-10,3.96217e-12,5.51636e-07,2.71569e-05,0.695156,512.69,96203.8 +3.36683,2.48181,2898.32,500.178,0.789923,0.210076,2.69548e-10,3.63499e-12,5.1073e-07,2.69493e-05,0.702932,509.922,96203.8 +3.41709,2.53195,2899.24,495.082,0.789923,0.210076,2.40047e-10,3.33177e-12,4.72445e-07,2.67594e-05,0.710167,507.384,96203.8 +3.46734,2.58211,2900.05,490.447,0.789923,0.210076,2.13457e-10,3.05097e-12,4.36642e-07,2.65859e-05,0.716879,505.061,96203.8 +3.51759,2.63228,2900.75,486.237,0.789923,0.210076,1.89526e-10,2.79114e-12,4.03186e-07,2.64276e-05,0.723086,502.939,96203.8 +3.56784,2.68246,2901.36,482.418,0.789923,0.210076,1.6802e-10,2.55091e-12,3.71951e-07,2.62836e-05,0.728809,501.004,96203.8 +3.61809,2.73265,2901.89,478.96,0.789923,0.210076,1.48724e-10,2.329e-12,3.42815e-07,2.61527e-05,0.734071,499.244,96203.8 +3.66834,2.78285,2902.35,475.833,0.789923,0.210077,1.31437e-10,2.12421e-12,3.15662e-07,2.60339e-05,0.738896,497.645,96203.8 +3.71859,2.83306,2902.75,473.01,0.789923,0.210077,1.15975e-10,1.93539e-12,2.9038e-07,2.59264e-05,0.743306,496.195,96203.8 +3.76884,2.88327,2903.1,470.464,0.789923,0.210077,1.02167e-10,1.76148e-12,2.66862e-07,2.58292e-05,0.747328,494.884,96203.8 +3.8191,2.93349,2903.39,468.173,0.789923,0.210077,8.98571e-11,1.60146e-12,2.45007e-07,2.57415e-05,0.750986,493.7,96203.8 +3.86935,2.98372,2903.65,466.114,0.789923,0.210077,7.89006e-11,1.45437e-12,2.24717e-07,2.56626e-05,0.754303,492.633,96203.8 +3.9196,3.03395,2903.87,464.266,0.789923,0.210077,6.91652e-11,1.31933e-12,2.059e-07,2.55916e-05,0.757306,491.672,96203.8 +3.96985,3.08418,2904.06,462.611,0.789923,0.210077,6.05297e-11,1.19547e-12,1.88466e-07,2.55279e-05,0.760016,490.81,96203.8 +4.0201,3.13442,2904.22,461.13,0.789923,0.210077,5.2883e-11,1.08201e-12,1.7233e-07,2.54708e-05,0.762456,490.037,96203.8 +4.07035,3.18465,2904.35,459.808,0.789923,0.210077,4.61238e-11,9.78196e-13,1.57413e-07,2.54198e-05,0.764648,489.346,96203.8 +4.1206,3.23489,2904.47,458.629,0.789923,0.210077,4.01597e-11,8.83312e-13,1.43636e-07,2.53742e-05,0.766614,488.728,96203.8 +4.17085,3.28513,2904.57,457.58,0.789923,0.210077,3.49065e-11,7.96696e-13,1.30926e-07,2.53336e-05,0.768371,488.178,96203.8 +4.22111,3.33538,2904.65,456.648,0.789923,0.210077,3.02879e-11,7.17724e-13,1.19215e-07,2.52975e-05,0.76994,487.688,96203.8 +4.27136,3.38562,2904.72,455.821,0.789923,0.210077,2.62345e-11,6.45811e-13,1.08435e-07,2.52655e-05,0.771337,487.253,96203.8 +4.32161,3.43587,2904.78,455.088,0.789923,0.210077,2.26837e-11,5.80406e-13,9.85231e-08,2.52371e-05,0.772578,486.868,96203.8 +4.37186,3.48611,2904.83,454.441,0.789923,0.210077,1.95789e-11,5.20996e-13,8.94205e-08,2.52119e-05,0.773678,486.527,96203.8 +4.42211,3.53636,2904.87,453.87,0.789923,0.210077,1.68692e-11,4.67099e-13,8.10706e-08,2.51897e-05,0.774652,486.226,96203.8 +4.47236,3.58661,2904.91,453.367,0.789923,0.210077,1.45086e-11,4.18266e-13,7.34199e-08,2.51702e-05,0.775512,485.96,96203.8 +4.52261,3.63686,2904.94,452.924,0.789923,0.210077,1.2456e-11,3.74079e-13,6.64181e-08,2.5153e-05,0.77627,485.726,96203.8 +4.57286,3.68711,2904.96,452.535,0.789923,0.210077,1.06746e-11,3.34148e-13,6.00177e-08,2.51378e-05,0.776937,485.521,96203.8 +4.62312,3.73736,2904.98,452.195,0.789923,0.210077,9.13155e-12,2.98109e-13,5.41739e-08,2.51246e-05,0.777522,485.341,96203.8 +4.67337,3.78761,2905,451.897,0.789923,0.210077,7.79741e-12,2.65627e-13,4.88447e-08,2.5113e-05,0.778034,485.183,96203.8 +4.72362,3.83786,2905.01,451.636,0.789923,0.210077,6.64613e-12,2.36388e-13,4.39906e-08,2.51029e-05,0.778483,485.045,96203.8 +4.77387,3.88811,2905.02,451.41,0.789923,0.210077,5.65454e-12,2.10105e-13,3.95744e-08,2.5094e-05,0.778874,484.925,96203.8 +4.82412,3.93836,2905.03,451.212,0.789923,0.210077,4.80212e-12,1.86509e-13,3.55616e-08,2.50863e-05,0.779215,484.821,96203.8 +4.87437,3.98861,2905.04,451.041,0.789923,0.210077,4.07076e-12,1.65354e-13,3.19196e-08,2.50796e-05,0.779511,484.73,96203.8 +4.92462,4.03886,2905.04,450.892,0.789923,0.210077,3.44446e-12,1.46414e-13,2.86182e-08,2.50739e-05,0.779769,484.651,96203.8 +4.97487,4.08911,2905.05,450.763,0.789923,0.210077,2.90917e-12,1.29479e-13,2.56292e-08,2.50688e-05,0.779991,484.583,96203.8 +5.02513,4.13936,2905.05,450.652,0.789923,0.210077,2.45255e-12,1.14357e-13,2.29263e-08,2.50645e-05,0.780184,484.524,96203.8 +5.07538,4.18961,2905.06,450.556,0.789923,0.210077,2.06379e-12,1.00872e-13,2.04851e-08,2.50608e-05,0.78035,484.473,96203.8 +5.12563,4.23986,2905.06,450.473,0.789923,0.210077,1.73345e-12,8.88643e-14,1.8283e-08,2.50575e-05,0.780493,484.429,96203.8 +5.17588,4.29012,2905.06,450.402,0.789923,0.210077,1.45329e-12,7.81856e-14,1.62989e-08,2.50548e-05,0.780616,484.392,96203.8 +5.22613,4.34037,2905.06,450.341,0.789923,0.210077,1.21615e-12,6.8702e-14,1.45135e-08,2.50524e-05,0.780722,484.359,96203.8 +5.27638,4.39062,2905.07,450.289,0.789923,0.210077,1.01582e-12,6.02912e-14,1.29089e-08,2.50503e-05,0.780813,484.332,96203.8 +5.32663,4.44087,2905.07,450.244,0.789923,0.210077,8.46913e-13,5.28421e-14,1.14685e-08,2.50486e-05,0.78089,484.308,96203.8 +5.37688,4.49112,2905.07,450.206,0.789923,0.210077,7.04778e-13,4.62537e-14,1.0177e-08,2.50471e-05,0.780956,484.288,96203.8 +5.42714,4.54137,2905.07,450.174,0.789923,0.210077,5.85405e-13,4.04344e-14,9.02061e-09,2.50459e-05,0.781012,484.271,96203.8 +5.47739,4.59162,2905.07,450.146,0.789923,0.210077,4.85344e-13,3.53017e-14,7.98637e-09,2.50448e-05,0.78106,484.256,96203.8 +5.52764,4.64187,2905.07,450.123,0.789923,0.210077,4.01634e-13,3.07806e-14,7.06252e-09,2.50439e-05,0.781101,484.244,96203.8 +5.57789,4.69212,2905.07,450.103,0.789923,0.210077,3.31742e-13,2.68037e-14,6.23832e-09,2.50431e-05,0.781135,484.233,96203.8 +5.62814,4.74238,2905.07,450.086,0.789923,0.210077,2.73499e-13,2.33104e-14,5.50391e-09,2.50424e-05,0.781164,484.224,96203.8 +5.67839,4.79263,2905.07,450.072,0.789923,0.210077,2.25059e-13,2.0246e-14,4.85033e-09,2.50419e-05,0.781189,484.217,96203.8 +5.72864,4.84288,2905.07,450.06,0.789923,0.210077,1.84852e-13,1.75616e-14,4.26939e-09,2.50414e-05,0.78121,484.21,96203.8 +5.77889,4.89313,2905.07,450.05,0.789923,0.210077,1.51543e-13,1.52133e-14,3.75366e-09,2.5041e-05,0.781227,484.205,96203.8 +5.82915,4.94338,2905.07,450.041,0.789923,0.210077,1.24002e-13,1.31618e-14,3.29638e-09,2.50407e-05,0.781242,484.201,96203.8 +5.8794,4.99363,2905.07,450.034,0.789923,0.210077,1.01276e-13,1.13721e-14,2.89144e-09,2.50404e-05,0.781254,484.197,96203.8 +5.92965,5.04388,2905.07,450.029,0.789923,0.210077,8.25596e-14,9.81289e-15,2.53328e-09,2.50402e-05,0.781264,484.194,96203.8 +5.9799,5.09413,2905.07,450.024,0.789923,0.210077,6.71752e-14,8.4564e-15,2.21689e-09,2.504e-05,0.781273,484.191,96203.8 +6.03015,5.14439,2905.07,450.019,0.789923,0.210077,5.45547e-14,7.27789e-15,1.93775e-09,2.50398e-05,0.78128,484.189,96203.8 +6.0804,5.19464,2905.07,450.016,0.789923,0.210077,4.42217e-14,6.25541e-15,1.69177e-09,2.50397e-05,0.781286,484.187,96203.8 +6.13065,5.24489,2905.07,450.013,0.789923,0.210077,3.57782e-14,5.36952e-15,1.47529e-09,2.50396e-05,0.781291,484.186,96203.8 +6.1809,5.29514,2905.07,450.011,0.789923,0.210077,2.88923e-14,4.60305e-15,1.285e-09,2.50395e-05,0.781295,484.184,96203.8 +6.23116,5.34539,2905.07,450.009,0.789923,0.210077,2.32875e-14,3.94079e-15,1.11794e-09,2.50394e-05,0.781298,484.183,96203.8 +6.28141,5.39564,2905.07,450.007,0.789923,0.210077,1.87346e-14,3.36938e-15,9.71456e-10,2.50394e-05,0.781301,484.182,96203.8 +6.33166,5.44589,2905.07,450.006,0.789923,0.210077,1.50433e-14,2.87704e-15,8.43174e-10,2.50393e-05,0.781304,484.182,96203.8 +6.38191,5.49614,2905.07,450.005,0.789923,0.210077,1.20564e-14,2.45339e-15,7.3097e-10,2.50393e-05,0.781305,484.181,96203.8 +6.43216,5.5464,2905.07,450.004,0.789923,0.210077,9.64435e-15,2.08937e-15,6.32951e-10,2.50392e-05,0.781307,484.181,96203.8 +6.48241,5.59665,2905.07,450.003,0.789923,0.210077,7.70023e-15,1.77702e-15,5.4743e-10,2.50392e-05,0.781308,484.18,96203.8 +6.53266,5.6469,2905.07,450.003,0.789923,0.210077,6.13636e-15,1.50936e-15,4.72906e-10,2.50392e-05,0.781309,484.18,96203.8 +6.58291,5.69715,2905.07,450.002,0.789923,0.210077,4.88084e-15,1.28032e-15,4.08044e-10,2.50392e-05,0.78131,484.18,96203.8 +6.63317,5.7474,2905.07,450.002,0.789923,0.210077,3.87485e-15,1.0846e-15,3.51663e-10,2.50391e-05,0.781311,484.179,96203.8 +6.68342,5.79765,2905.07,450.001,0.789923,0.210077,3.07037e-15,9.17588e-16,3.02713e-10,2.50391e-05,0.781311,484.179,96203.8 +6.73367,5.8479,2905.07,450.001,0.789923,0.210077,2.4283e-15,7.75261e-16,2.60269e-10,2.50391e-05,0.781312,484.179,96203.8 +6.78392,5.89815,2905.07,450.001,0.789923,0.210077,1.91686e-15,6.54142e-16,2.23511e-10,2.50391e-05,0.781312,484.179,96203.8 +6.83417,5.94841,2905.07,450.001,0.789923,0.210077,1.51026e-15,5.51213e-16,1.91717e-10,2.50391e-05,0.781313,484.179,96203.8 +6.88442,5.99866,2905.07,450.001,0.789923,0.210077,1.18766e-15,4.63864e-16,1.6425e-10,2.50391e-05,0.781313,484.179,96203.8 +6.93467,6.04891,2905.07,450,0.789923,0.210077,9.32192e-16,3.89837e-16,1.40552e-10,2.50391e-05,0.781313,484.179,96203.8 +6.98492,6.09916,2905.07,450,0.789923,0.210077,7.30289e-16,3.27189e-16,1.2013e-10,2.50391e-05,0.781313,484.179,96203.8 +7.03518,6.14941,2905.07,450,0.789923,0.210077,5.71031e-16,2.74243e-16,1.02553e-10,2.50391e-05,0.781313,484.179,96203.8 +7.08543,6.19966,2905.07,450,0.789923,0.210077,4.45657e-16,2.29558e-16,8.74437e-11,2.50391e-05,0.781313,484.179,96203.8 +7.13568,6.24991,2905.07,450,0.789923,0.210077,3.4715e-16,1.91898e-16,7.44719e-11,2.50391e-05,0.781313,484.179,96203.8 +7.18593,6.30016,2905.07,450,0.789923,0.210077,2.69905e-16,1.60203e-16,6.33488e-11,2.50391e-05,0.781314,484.179,96203.8 +7.23618,6.35042,2905.07,450,0.789923,0.210077,2.0945e-16,1.33564e-16,5.38228e-11,2.50391e-05,0.781314,484.179,96203.8 +7.28643,6.40067,2905.07,450,0.789923,0.210077,1.62229e-16,1.11206e-16,4.56747e-11,2.50391e-05,0.781314,484.179,96203.8 +7.33668,6.45092,2905.07,450,0.789923,0.210077,1.25416e-16,9.24671e-17,3.87139e-11,2.50391e-05,0.781314,484.179,96203.8 +7.38693,6.50117,2905.07,450,0.789923,0.210077,9.67733e-17,7.67829e-17,3.27748e-11,2.50391e-05,0.781314,484.179,96203.8 +7.43719,6.55142,2905.07,450,0.789923,0.210077,7.45311e-17,6.36738e-17,2.77135e-11,2.50391e-05,0.781314,484.179,96203.8 +7.48744,6.60167,2905.07,450,0.789923,0.210077,5.72927e-17,5.2732e-17,2.34059e-11,2.50391e-05,0.781314,484.179,96203.8 +7.53769,6.65192,2905.07,450,0.789923,0.210077,4.39584e-17,4.3612e-17,1.97441e-11,2.50391e-05,0.781314,484.179,96203.8 +7.58794,6.70217,2905.07,450,0.789923,0.210077,3.36641e-17,3.6021e-17,1.66353e-11,2.50391e-05,0.781314,484.179,96203.8 +7.63819,6.75243,2905.07,450,0.789923,0.210077,2.57321e-17,2.97113e-17,1.39991e-11,2.50391e-05,0.781314,484.179,96203.8 +7.68844,6.80268,2905.07,450,0.789923,0.210077,1.96321e-17,2.4474e-17,1.17666e-11,2.50391e-05,0.781314,484.179,96203.8 +7.73869,6.85293,2905.07,450,0.789923,0.210077,1.49501e-17,2.01328e-17,9.87821e-12,2.50391e-05,0.781314,484.179,96203.8 +7.78894,6.90318,2905.07,450,0.789923,0.210077,1.13635e-17,1.65393e-17,8.28291e-12,2.50391e-05,0.781314,484.179,96203.8 +7.8392,6.95343,2905.07,450,0.789923,0.210077,8.62118e-18,1.3569e-17,6.93689e-12,2.50391e-05,0.781314,484.179,96203.8 +7.88945,7.00368,2905.07,450,0.789923,0.210077,6.52851e-18,1.11171e-17,5.8026e-12,2.50391e-05,0.781314,484.179,96203.8 +7.9397,7.05393,2905.07,450,0.789923,0.210077,4.93464e-18,9.096e-18,4.84793e-12,2.50391e-05,0.781314,484.179,96203.8 +7.98995,7.10418,2905.07,450,0.789923,0.210077,3.72301e-18,7.43229e-18,4.04543e-12,2.50391e-05,0.781314,484.179,96203.8 +8.0402,7.15444,2905.07,450,0.789923,0.210077,2.8037e-18,6.06467e-18,3.37168e-12,2.50391e-05,0.781314,484.179,96203.8 +8.09045,7.20469,2905.07,450,0.789923,0.210077,2.10752e-18,4.94202e-18,2.80673e-12,2.50391e-05,0.781314,484.179,96203.8 +8.1407,7.25494,2905.07,450,0.789923,0.210077,1.58132e-18,4.02173e-18,2.3336e-12,2.50391e-05,0.781314,484.179,96203.8 +8.19095,7.30519,2905.07,450,0.789923,0.210077,1.18434e-18,3.26837e-18,1.93785e-12,2.50391e-05,0.781314,484.179,96203.8 +8.24121,7.35544,2905.07,450,0.789923,0.210077,8.85415e-19,2.65252e-18,1.60725e-12,2.50391e-05,0.781314,484.179,96203.8 +8.29146,7.40569,2905.07,450,0.789923,0.210077,6.60749e-19,2.14978e-18,1.33141e-12,2.50391e-05,0.781314,484.179,96203.8 +8.34171,7.45594,2905.07,450,0.789923,0.210077,4.92209e-19,1.73994e-18,1.10155e-12,2.50391e-05,0.781314,484.179,96203.8 +8.39196,7.50619,2905.07,450,0.789923,0.210077,3.66009e-19,1.40631e-18,9.10237e-13,2.50391e-05,0.781314,484.179,96203.8 +8.44221,7.55645,2905.07,450,0.789923,0.210077,2.71687e-19,1.13508e-18,7.51211e-13,2.50391e-05,0.781314,484.179,96203.8 +8.49246,7.6067,2905.07,450,0.789923,0.210077,2.01319e-19,9.14897e-19,6.19185e-13,2.50391e-05,0.781314,484.179,96203.8 +8.54271,7.65695,2905.07,450,0.789923,0.210077,1.48919e-19,7.36396e-19,5.09712e-13,2.50391e-05,0.781314,484.179,96203.8 +8.59296,7.7072,2905.07,450,0.789923,0.210077,1.09968e-19,5.9189e-19,4.19052e-13,2.50391e-05,0.781314,484.179,96203.8 +8.64322,7.75745,2905.07,450,0.789923,0.210077,8.10677e-20,4.75066e-19,3.44065e-13,2.50391e-05,0.781314,484.179,96203.8 +8.69347,7.8077,2905.07,450,0.789923,0.210077,5.96617e-20,3.80753e-19,2.82119e-13,2.50391e-05,0.781314,484.179,96203.8 +8.74372,7.85795,2905.07,450,0.789923,0.210077,4.38348e-20,3.0472e-19,2.3101e-13,2.50391e-05,0.781314,484.179,96203.8 +8.79397,7.9082,2905.07,450,0.789923,0.210077,3.21532e-20,2.43508e-19,1.88895e-13,2.50391e-05,0.781314,484.179,96203.8 +8.84422,7.95846,2905.07,450,0.789923,0.210077,2.35461e-20,1.94297e-19,1.54233e-13,2.50391e-05,0.781314,484.179,96203.8 +8.89447,8.00871,2905.07,450,0.789923,0.210077,1.7215e-20,1.54788e-19,1.25742e-13,2.50391e-05,0.781314,484.179,96203.8 +8.94472,8.05896,2905.07,450,0.789923,0.210077,1.25658e-20,1.23114e-19,1.02352e-13,2.50391e-05,0.781314,484.179,96203.8 +8.99497,8.10921,2905.07,450,0.789923,0.210077,9.1574e-21,9.77562e-20,8.31731e-14,2.50391e-05,0.781314,484.179,96203.8 +9.04523,8.15946,2905.07,450,0.789923,0.210077,6.6626e-21,7.74828e-20,6.74674e-14,2.50391e-05,0.781314,484.179,96203.8 +9.09548,8.20971,2905.07,450,0.789923,0.210077,4.83944e-21,6.12972e-20,5.46218e-14,2.50391e-05,0.781314,484.179,96203.8 +9.14573,8.25996,2905.07,450,0.789923,0.210077,3.50916e-21,4.8393e-20,4.41284e-14,2.50391e-05,0.781314,484.179,96203.8 +9.19598,8.31021,2905.07,450,0.789923,0.210077,2.53999e-21,3.81194e-20,3.55673e-14,2.50391e-05,0.781314,484.179,96203.8 +9.24623,8.36047,2905.07,450,0.789923,0.210077,1.83496e-21,2.99514e-20,2.85913e-14,2.50391e-05,0.781314,484.179,96203.8 +9.29648,8.41072,2905.07,450,0.789923,0.210077,1.32282e-21,2.34665e-20,2.29141e-14,2.50391e-05,0.781314,484.179,96203.8 +9.34673,8.46097,2905.07,450,0.789923,0.210077,9.5132e-22,1.83251e-20,1.82995e-14,2.50391e-05,0.781314,484.179,96203.8 +9.39698,8.51122,2905.07,450,0.789923,0.210077,6.82221e-22,1.42545e-20,1.45534e-14,2.50391e-05,0.781314,484.179,96203.8 +9.44724,8.56147,2905.07,450,0.789923,0.210077,4.87559e-22,1.10362e-20,1.15161e-14,2.50391e-05,0.781314,484.179,96203.8 +9.49749,8.61172,2905.07,450,0.789923,0.210077,3.46936e-22,8.49518e-21,9.05657e-15,2.50391e-05,0.781314,484.179,96203.8 +9.54774,8.66197,2905.07,450,0.789923,0.210077,2.45486e-22,6.49177e-21,7.06736e-15,2.50391e-05,0.781314,484.179,96203.8 +9.59799,8.71222,2905.07,450,0.789923,0.210077,1.72398e-22,4.91439e-21,5.46056e-15,2.50391e-05,0.781314,484.179,96203.8 +9.64824,8.76248,2905.07,450,0.789923,0.210077,1.19819e-22,3.67417e-21,4.16426e-15,2.50391e-05,0.781314,484.179,96203.8 +9.69849,8.81273,2905.07,450,0.789923,0.210077,8.20511e-23,2.70038e-21,3.11978e-15,2.50391e-05,0.781314,484.179,96203.8 +9.74874,8.86298,2905.07,450,0.789923,0.210077,5.49691e-23,1.93684e-21,2.27924e-15,2.50391e-05,0.781314,484.179,96203.8 +9.79899,8.91323,2905.07,450,0.789923,0.210077,3.55881e-23,1.33898e-21,1.60366e-15,2.50391e-05,0.781314,484.179,96203.8 +9.84925,8.96348,2905.07,450,0.789923,0.210077,2.17516e-23,8.71477e-22,1.06136e-15,2.50391e-05,0.781314,484.179,96203.8 +9.8995,9.01373,2905.07,450,0.789923,0.210077,1.19035e-23,5.06412e-22,6.26571e-16,2.50391e-05,0.781314,484.179,96203.8 +9.94975,9.06398,2905.07,450,0.789923,0.210077,4.92226e-24,2.2172e-22,2.78424e-16,2.50391e-05,0.781314,484.179,96203.8 +10,9.11423,2905.07,450,0.789923,0.210077,9.61492e-61,2.05977e-60,1.80323e-60,2.50391e-05,0.781314,484.179,96203.8 diff --git a/testcases/MultispeciesTBL/base.json b/testcases/MultispeciesTBL/base.json new file mode 100644 index 0000000..6b80e12 --- /dev/null +++ b/testcases/MultispeciesTBL/base.json @@ -0,0 +1,194 @@ +{ + "Case" : { + "ReInlet" : 4000, + "MaInf" : 6.0, + "TInf" : 450.0, + "PInf" : 101325.0, + "TwOvTInf" : 6.5, + "xTurb" : 375.7, + "yPlus" : 0.32, + "FlowThroughTimesNoStat" : 5, + "FlowThroughTimesStat" : 10 + }, + + "Mapping" : { + "tiles" : [128,1,1], + "tilesPerRank" : [4,1,1], + "sampleId" : -1, + "outDir" : "", + "wallTime" : 720 + }, + + "Grid" : { + "xNum" : 4096, + "yNum" : 250, + "zNum" : 288, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 1000.0, + "yWidth" : 75.0, + "zWidth" : 62.83, + "xType" : "Uniform", + "yType" : "TanhMinus", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 1000000, + "maxTime" : 20.0, + "cfl" : 0.8, + "fixedDeltaTime" : 4.0e-3, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "NSCBC_Inflow", + "xBCLeftInflowProfile" : { + "type" : "File", + "FileDir" : "" + }, + "xBCLeftP" : -1.0, + "xBCLeftHeat" : { + "type" : "File", + "FileDir" : "" + }, + "xBCLeftMixture" : { + "type" : "File", + "FileDir" : "" + }, + "xBCRight" : "NSCBC_Outflow", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : -1.0, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + } + }, + "yBCLeft" : "SuctionAndBlowingWall", + "yBCLeftInflowProfile" : { + "type" : "SuctionAndBlowing", + "Xmin" : 0.0, + "Xmax" : 0.0, + "X0" : 0.0, + "sigma" : 0.0, + "A" : [0.0, 0.0, 0.0], + "omega" : [0.0, 0.0, 0.0], + "beta" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : -1.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + } + }, + "yBCRight" : "NSCBC_Outflow", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : -1.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + } + } + }, + + "Flow" : { + "mixture": "AirMix", + "gasConstant" : 287.15, + "gamma" : 1.4, + "prandtl" : 0.71, + "viscosityModel" : "PowerLaw", + "constantVisc" : -1.0, + "powerlawViscRef" : 1.716e-5, + "powerlawTempRef" : 273.0, + "sutherlandViscRef" : 1.81e-5, + "sutherlandTempRef" : 300.0, + "sutherlandSRef" : 110.4, + "initCase" : "Restart", + "restartDir" : "", + "initParams" : [1.01325e5, 300.0, 0.0, 0.1, 0.05], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "N2", "MolarFrac" : 0.79 }, + {"Name" : "O2", "MolarFrac" : 0.21 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { + "type" : "OFF" + } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 5000, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } + +} diff --git a/testcases/MultispeciesTBL/postProc.py b/testcases/MultispeciesTBL/postProc.py new file mode 100755 index 0000000..203fe60 --- /dev/null +++ b/testcases/MultispeciesTBL/postProc.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python2 + +import numpy as np +import json +import argparse +import matplotlib.pyplot as plt +import matplotlib.ticker +import sys +import os +import h5py +import pandas +from scipy.integrate import odeint +from scipy.optimize import fsolve +import pandas + +# load grid generator +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen +import Averages + +parser = argparse.ArgumentParser() +parser.add_argument("-json", "--json_file", type=argparse.FileType('r')) +parser.add_argument("-in", "--input_dir") +args = parser.parse_args() + +############################################################################## +# Read similarity solution # +############################################################################## + +CBL = pandas.read_csv("SimilaritySolution.dat") +etaB = CBL["eta"][:].values +fB = CBL["f"][:].values +uB = CBL["u"][:].values +TB = CBL["T"][:].values +N2B = CBL["X_N2"][:].values +O2B = CBL["X_O2"][:].values +NOB = CBL["X_NO"][:].values +NB = CBL["X_N" ][:].values +OB = CBL["X_O" ][:].values +muB = CBL["mu"][:].values +rhoB = CBL["rho"][:].values +cB = CBL["SoS"][:].values +Rex0 = CBL["Rex"][0] + +x0 = Rex0*muB[-1]/(uB[-1]*rhoB[-1]) +deltaStarIn = 0.0 +for i in range(uB.size-1): + deltaStarIn += 0.5*((1.0 - uB[i+1]*rhoB[i+1]/(uB[-1]*rhoB[-1]))*rhoB[-1]/rhoB[i+1] + + (1.0 - uB[i ]*rhoB[i ]/(uB[-1]*rhoB[-1]))*rhoB[-1]/rhoB[i ] )*(etaB[i+1] - etaB[i]) +deltaStarIn *= x0*np.sqrt(2.0/Rex0) +print("Re_delta0 = ", uB[-1]*rhoB[-1]*deltaStarIn/muB[-1]) + +yB = np.zeros(etaB.size) +for i in range(etaB.size): + if (i != 0) : + rhoMid = 0.5*(rhoB[i ] + rhoB[i-1]) + dyB = x0*np.sqrt(2/Rex0)*rhoB[-1]/rhoMid*(etaB[i] - etaB[i-1]) + yB[i] = yB[i-1] + dyB + +vB = 0.5*yB/x0*uB - rhoB[-1]/rhoB*1.0/np.sqrt(2*Rex0)*fB + +############################################################################## +# Read Prometeo Input File # +############################################################################## + +config = json.load(args.json_file) + +xNum = config["Grid"]["xNum"] +yNum = config["Grid"]["yNum"] +zNum = config["Grid"]["zNum"] +xWidth = config["Grid"]["xWidth"] +yWidth = config["Grid"]["yWidth"] +zWidth = config["Grid"]["zWidth"] +xOrigin = config["Grid"]["origin"][0] +yOrigin = config["Grid"]["origin"][1] +zOrigin = config["Grid"]["origin"][2] + +ReIn = config["Case"]["ReInlet"] +MaInf = config["Case"]["MaInf"] +TInf = config["Case"]["TInf"] +PInf = config["Case"]["PInf"] +TwOvT = config["Case"]["TwOvTInf"] +xTurb = config["Case"]["xTurb"] +yPlus = config["Case"]["yPlus"] + +# Free-stream mixture properties +cInf = cB[-1] +muInf = muB[-1] + +# Free-stream conditions +assert abs(TB[-1] - TInf) < 1e-3 +UInf = uB[-1] +rhoInf = rhoB[-1] +TInf = TB[-1] +assert abs(UInf/cInf - MaInf) < 1e-3 + +# Inlet displacement thickness +assert abs(deltaStarIn -muInf*ReIn/(UInf*rhoInf)) < 1e-3 + +# Wall properties +Tw = TB[0] +muW = muB[0] +rhoW = rhoB[0] +assert abs(Tw/TB[-1] - TwOvT) < 1e-3 + +############################################################################## +# Compute Grid # +############################################################################## + +xGrid, dx = gridGen.GetGrid(config["Grid"]["origin"][0], + config["Grid"]["xWidth"], + config["Grid"]["xNum"], + config["Grid"]["xType"], + config["Grid"]["xStretching"], + False) + +yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + config["Grid"]["yWidth"], + config["Grid"]["yNum"], + config["Grid"]["yType"], + config["Grid"]["yStretching"], + False) + +# Correct boundaries that are staggered +yGrid[0] += 0.5*dy[0] + +############################################################################## +# Load average files # +############################################################################## + +Xavg = Averages.avg(args.input_dir+"/YZAverages/0,0-" + str(xNum+1) + ",0.hdf") + +############################################################################## +# Plot stuff # +############################################################################## + +figureDir = "Figures" +if not os.path.exists(figureDir): + os.makedirs(figureDir) + +Cf = 2.0*Xavg.tau[:,3]/(rhoInf*UInf**2) +Q = -Xavg.q[:,1]/(rhoInf*UInf*UInf*UInf) + +plt.rcParams.update({'font.size': 12}) + +plt.figure(0) +plt.plot((xGrid-xOrigin)/deltaStarIn/100, Cf*1e4, "-k",label=r"$C_f \times 10^{4}$") +plt.plot((xGrid-xOrigin)/deltaStarIn/100, Q*1e5, "--k",label=r"$-q_w/(\rho_{\infty} U_{\infty}^3) \times 10^{5}$") +plt.xlabel(r"$(x-x_0)/\delta_0^* \times 10^{-2}$") +#plt.xlabel(r"$(x-x_0)/\delta_0^* \times 10^{-2}$", fontsize = 20) +plt.gca().set_xlim(0, 10) +plt.gca().set_ylim(0, 25) +plt.gca().set_aspect(0.15) +plt.legend() +plt.savefig(os.path.join(figureDir, "Coefficients.eps"), bbox_inches='tight') + +plt.show() diff --git a/testcases/README.md b/testcases/README.md new file mode 100644 index 0000000..c3d166f --- /dev/null +++ b/testcases/README.md @@ -0,0 +1,129 @@ +How to run the testcases +=============== + +### Sod shock-tube + +``` +cd SodProblem +bash run.sh +python postProc.py +``` + +### Lax shock-tube + +``` +cd LaxProblem +bash run.sh +python postProc.py +``` + +### Shu-Osher shock-tube + +``` +cd ShuOsherProblem +bash run.sh +python postProc.py +``` + +### Grossman-Cinnella shock-tube + +``` +cd GrossmanCinnellaProblem +bash run.sh +python postProc.py +``` + +### Incompressible boundary layer + +``` +cd Blasius +python MakeProfile.py +bash run.sh +python postProc.py +``` + +### Compressible boundary layer + +``` +cd CompressibleBL +python MakeInput.py CBL.json +bash run.sh +python postProc.py +``` + +### 2D Vortex advection + +``` +cd VortexAdvection2D +bash run.sh [Number of refinements] +python postProc.py -n [Number of refinements] +``` + +### 2D Taylor-Green vortex + +``` +cd TaylorGreen2D +bash run.sh [Number of refinements] +python postProc.py -n [Number of refinements] +``` + +### Coleman's channel flow + +The number of nodes for the calculation is set using the `Mapping/tiles` and `Mapping/tilesPerRank` parameters in base.json. +It is strongly advised to run with one tile per GPU + +``` +cd Coleman +python MakeChannel.py base.json +$HTR_DIR/src/prometeo.sh -i ChannelFlow.json +$HTR_DIR/src/prometeo.sh -i ChannelFlowStats.json +python postProc.py -json ChannelFlowStats.json -in [Averages files produced by the code] +``` + +### Sciacovelli's channel flow + +The number of nodes for the calculation is set using the `Mapping/tiles` and `Mapping/tilesPerRank` parameters in base.json. +It is strongly advised to run with one tile per GPU + +``` +cd Sciacovelli +python MakeChannel.py base.json +$HTR_DIR/src/prometeo.sh -i ChannelFlow.json +$HTR_DIR/src/prometeo.sh -i ChannelFlowStats.json +python postProc.py -json ChannelFlowStats.json -in [Averages files produced by the code] +``` + +### Franko's boundary layer + +The number of nodes for the calculation is set using the `Mapping/tiles` and `Mapping/tilesPerRank` parameters in base.json. +It is strongly advised to run with one tile per GPU + +``` +cd Franko +python MakeInput.py base.json +$HTR_DIR/src/prometeo.sh -i NoStats.json +$HTR_DIR/src/prometeo.sh -i Stats.json +python postProc.py -json Stats.json -in [Averages files produced by the code] +``` + +### Multispecies hypersonic boundary layer + +The number of nodes for the calculation is set using the `Mapping/tiles` and `Mapping/tilesPerRank` parameters in base.json. +It is strongly advised to run with one tile per GPU + +``` +cd MultispeciesTBL +python MakeInput.py base.json +$HTR_DIR/src/prometeo.sh -i NoStats.json +$HTR_DIR/src/prometeo.sh -i Stats.json +python postProc.py -json Stats.json -in [Averages files produced by the code] +``` + +### Weak scaling test + +``` +cd scalingTest/WS +python scale_up.py -n [Number of refinements] -out [output dir] base.json +python postProc.py -n [Number of refinements] -out [output dir] +``` + diff --git a/testcases/Sciacovelli/MakeChannel.py b/testcases/Sciacovelli/MakeChannel.py new file mode 100755 index 0000000..32b1032 --- /dev/null +++ b/testcases/Sciacovelli/MakeChannel.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python2 + +import argparse +import json +import sys +import os +import numpy as np +from scipy.optimize import fsolve + +# load local modules +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen +import ConstPropMix + +parser = argparse.ArgumentParser() +parser.add_argument("base_json", type=argparse.FileType("r"), default="base.json") +args = parser.parse_args() + +# Read base config +config = json.load(args.base_json) +ReB = config["Case"]["ReB"] +MaB = config["Case"]["MaB"] +ReTau = config["Case"]["Retau"] +dTplus = config["Case"]["DeltaT"] +dTplusStat = config["Case"]["DeltaTStat"] +del config["Case"] + +# Read boundary conditions +assert config["BC"]["yBCLeft"] == "IsothermalWall" +assert config["BC"]["yBCLeftHeat"]["type"] == "Constant" +assert config["BC"]["yBCRight"] == "IsothermalWall" +assert config["BC"]["yBCRightHeat"]["type"] == "Constant" +assert config["BC"]["yBCLeftHeat"]["temperature"] == config["BC"]["yBCRightHeat"]["temperature"] +Tw = config["BC"]["yBCLeftHeat"]["temperature"] + +# Read properties +Pb = config["Flow"]["initParams"][0] +Tb = config["Flow"]["initParams"][1] +gamma = config["Flow"]["gamma"] +R = config["Flow"]["gasConstant"] +assert config["Flow"]["turbForcing"]["type"] == "CHANNEL" +assert config["Flow"]["initCase"] == "ChannelFlow" +assert Tw == Tb + +cW = np.sqrt(gamma*R*Tw) +muW = ConstPropMix.GetViscosity(Tw, config) + +uB = cW*MaB +rhoB = Pb/(R*Tb) + +h = ReB*muW/(rhoB*uB) +print("h = ", h) + +rhoW = rhoB +uTau = ReTau*muW/(rhoW*h) +deltaNu = muW/(uTau*rhoW) +TauW = uTau**2*rhoB + +yPlusTrg = 0.8 + +def objective(yStretching): + yGrid, dy = gridGen.GetGrid(config["Grid"]["origin"][1], + 2.0*h, + config["Grid"]["yNum"], + config["Grid"]["yType"], + yStretching, + False) + return dy[1]/deltaNu - yPlusTrg + +yStretching, = fsolve(objective, 1.0) + +tNu = deltaNu**2*rhoW/muW + +# Grid section +config["Grid"]["xWidth"] = 8.0*h*np.pi +config["Grid"]["yWidth"] = 2.0*h +config["Grid"]["zWidth"] = 2.0*h*np.pi +config["Grid"]["yStretching"] = yStretching + +# Flow section +config["Flow"]["initParams"][2] = uB +config["Flow"]["turbForcing"]["RhoUbulk"] = rhoB*uB +config["Flow"]["turbForcing"]["Forcing"] = TauW/h + +config["Integrator"]["maxTime"] = tNu*dTplus + +with open("ChannelFlow.json", "w") as fout: + json.dump(config, fout, indent=3) + +config["Integrator"]["maxTime"] = tNu*(dTplus+dTplusStat) + +config["Flow"]["initCase"] == "Restart" + +config["IO"]["XZAverages"] = [{"fromCell" : [0, 0, 0], "uptoCell" : [1024, 1024, 1024]}] + +with open("ChannelFlowStats.json", "w") as fout: + json.dump(config, fout, indent=3) diff --git a/testcases/Sciacovelli/base.json b/testcases/Sciacovelli/base.json new file mode 100644 index 0000000..bba296b --- /dev/null +++ b/testcases/Sciacovelli/base.json @@ -0,0 +1,181 @@ +{ + "Case" : { + "ReB" : 7000.0, + "MaB" : 3.0, + "Retau" : 627, + "DeltaT" : 5000, + "DeltaTStat" : 3000 + }, + + "Mapping" : { + "tiles" : [128,1,1], + "tilesPerRank" : [4,1,1], + "sampleId" : -1, + "outDir" : "", + "wallTime" : 720 + }, + + "Grid" : { + "xNum" : 1024, + "yNum" : 512, + "zNum" : 768, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 0.0, + "yWidth" : 0.0, + "zWidth" : 0.0, + "xType" : "Uniform", + "yType" : "Tanh", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 2000000, + "maxTime" : 20.0, + "cfl" : 0.8, + "fixedDeltaTime" : 4.0e-3, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "Periodic", + "xBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCLeftP" : -1.0, + "xBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "Periodic", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : -1.0, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "IsothermalWall", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : -1.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : 300.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "IsothermalWall", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : -1.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : 300.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 287.15, + "gamma" : 1.4, + "prandtl" : 0.70, + "viscosityModel" : "PowerLaw", + "constantVisc" : -1.0, + "powerlawViscRef" : 1.716e-5, + "powerlawTempRef" : 273.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "ChannelFlow", + "restartDir" : "", + "initParams" : [1.01325e5, 300.0, 0.0, 0.10, 0.01], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { + "type" : "CHANNEL", + "RhoUbulk" : 0.0 + } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 10000, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": true, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } + +} diff --git a/testcases/Sciacovelli/postProc.py b/testcases/Sciacovelli/postProc.py new file mode 100755 index 0000000..52ee2fe --- /dev/null +++ b/testcases/Sciacovelli/postProc.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python2 + +import numpy as np +import json +import argparse +import matplotlib.pyplot as plt +import matplotlib.ticker +from matplotlib.legend_handler import HandlerTuple +import sys +import os +import h5py +import pandas + +# load grid generator +sys.path.insert(0, os.path.expandvars("$HTR_DIR/scripts/modules")) +import gridGen +import Averages + +parser = argparse.ArgumentParser() +parser.add_argument("-json", "--json_file", type=argparse.FileType('r')) +parser.add_argument("-in", "--input_file") +args = parser.parse_args() + +############################################################################## +# Read Soleil Input File # +############################################################################## + +data = json.load(args.json_file) + +xNum = data["Grid"]["xNum"] +yNum = data["Grid"]["yNum"] +zNum = data["Grid"]["zNum"] +xWidth = data["Grid"]["xWidth"] +yWidth = data["Grid"]["yWidth"] +zWidth = data["Grid"]["zWidth"] +xOrigin = data["Grid"]["origin"][0] +yOrigin = data["Grid"]["origin"][1] +zOrigin = data["Grid"]["origin"][2] + +############################################################################## +# Compute Grid # +############################################################################## + +yGrid, dy = gridGen.GetGrid(data["Grid"]["origin"][1], + data["Grid"]["yWidth"], + data["Grid"]["yNum"], + data["Grid"]["yType"], + data["Grid"]["yStretching"], + False) + +# Correct boundaries that are staggered +yGrid[ 0] += 0.5*dy[0] +yGrid[yNum+1] -= 0.5*dy[yNum+1] + +############################################################################## +# Load reference solution # +############################################################################## + +sciacoEtAl = pandas.read_csv("sciacoEtAl.dat") + +############################################################################## +# Load average files # +############################################################################## + +avg = Averages.avg(args.input_file, True) + +############################################################################## +# Print quantities # +############################################################################## + +rhoU_avg = avg.velocity_favg[:,0] + +rhoW = avg.rho_avg[0] +muW = avg.mu_avg[0] +tauW = avg.tau[0,3] +uTau = np.sqrt(tauW/rhoW) +ReTau = rhoW*uTau*yWidth*0.5/muW + +uStar = np.sqrt(tauW/avg.rho_avg) + +yPlusGrid = yGrid*uTau *rhoW /muW +yStarGrid = yGrid*uStar*avg.rho_avg/avg.mu_avg + +rhoBulk = 0.0 +rhoUBulk = 0.0 +for i in range(yNum+1): + rhoBulk += 0.5*(avg.rho_avg[i+1] + avg.rho_avg[i])*(yGrid[i+1] - yGrid[i]) + rhoUBulk += 0.5*( rhoU_avg[i+1] + rhoU_avg[i])*(yGrid[i+1] - yGrid[i]) +rhoBulk /= yGrid[yNum+1] - yGrid[0] +rhoUBulk /= yGrid[yNum+1] - yGrid[0] +UBulk = rhoUBulk/rhoBulk + +print("Re_tau = ", ReTau) +print("rho_Bulk = ", rhoBulk) +print("rho_Bulk = ", rhoBulk/(101325/(287.15*300.0))) +print("Re_Bulk = ", rhoUBulk*yWidth*0.5/muW) +print("Ma_Bulk = ", UBulk/avg.SoS_avg[0]) +print("rho_cl/rho_w = ", avg.rho_avg[int(yNum*0.5)]/ avg.rho_avg[0]) +print("T_cl/T_w = ", avg.temperature_avg[int(yNum*0.5)]/avg.temperature_avg[0]) +print("mu_cl/mu_w = ", avg.mu_avg[int(yNum*0.5)]/ avg.mu_avg[0]) +print("Bq = ", avg.q[0,1]/(rhoW*uTau*3.5*287.15*avg.temperature_avg[0])) + +############################################################################## +# Plot stuff # +############################################################################## + +figureDir = "Figures" +if not os.path.exists(figureDir): + os.makedirs(figureDir) + +plt.figure(0) +Umy, = plt.plot(2.0*yGrid/data["Grid"]["yWidth"], avg.velocity_avg[:,0]/rhoUBulk*rhoBulk, "k") +Rmy, = plt.plot(2.0*yGrid/data["Grid"]["yWidth"], avg.rho_avg[:]/avg.rho_avg[0], "r") +Tmy, = plt.plot(2.0*yGrid/data["Grid"]["yWidth"], avg.temperature_avg[:]/avg.temperature_avg[0], "b") +URe, = plt.plot( sciacoEtAl["y"][::6].values, sciacoEtAl["ub"][::6].values, "ko", markersize=6) +RRe, = plt.plot( sciacoEtAl["y"][::6].values, sciacoEtAl["rhow"][::6].values, "ro", markersize=6) +TRe, = plt.plot( sciacoEtAl["y"][::6].values, sciacoEtAl["Tw"][::6].values, "bo", markersize=6) +plt.xlabel(r"$y/h$") +plt.gca().set_xlim(0, 1) +plt.legend([(Umy, URe), (Tmy, TRe), (Rmy, RRe)], + [r"$\overline{u}/ u_b$", r"$\overline{T}/T_w$", r"$\overline{\rho}/\rho_b$"], + handler_map={tuple: HandlerTuple(ndivide=None)}, handlelength=8.0, + loc="center right", bbox_to_anchor=(1.0,0.75)) +plt.savefig(os.path.join(figureDir, "AvgComp.eps"), bbox_inches='tight') + +plt.figure(1) +UUmy, = plt.plot(2.0*yGrid/data["Grid"]["yWidth"], avg.velocity_rms[:,0]/UBulk**2, "k") +VVmy, = plt.plot(2.0*yGrid/data["Grid"]["yWidth"], avg.velocity_rms[:,1]/UBulk**2, "r") +WWmy, = plt.plot(2.0*yGrid/data["Grid"]["yWidth"], avg.velocity_rms[:,2]/UBulk**2, "b") +UURe, = plt.plot( sciacoEtAl["y"][::6].values, sciacoEtAl["upupb"][::6].values, "ko", markersize=6) +VVRe, = plt.plot( sciacoEtAl["y"][::6].values, sciacoEtAl["vpvpb"][::6].values, "ro", markersize=6) +WWRe, = plt.plot( sciacoEtAl["y"][::6].values, sciacoEtAl["wpwpb"][::6].values, "bo", markersize=6) +plt.xlabel(r"$y/h$") +plt.gca().set_xlim(0, 1) +plt.legend([(UUmy, UURe), (VVmy, VVRe), (WWmy, WWRe)], + [r"$\overline{u' u'}/ u_b^2$", r"$\overline{v' v'}/u_b^2$", r"$\overline{w' w'}/u_b^2$"], + handler_map={tuple: HandlerTuple(ndivide=None)}, handlelength=8.0) +plt.savefig(os.path.join(figureDir, "rmsComp.eps"), bbox_inches='tight') + +plt.show() diff --git a/testcases/Sciacovelli/run.sh b/testcases/Sciacovelli/run.sh new file mode 100644 index 0000000..6fb76e7 --- /dev/null +++ b/testcases/Sciacovelli/run.sh @@ -0,0 +1,3 @@ +rm -rf sample0 slurm* + +USE_CUDA=1 PROFILE=0 QUEUE="gpu" $HTR_DIR/src/prometeo.sh -i ChannelFlow.json #-lg:inorder diff --git a/testcases/Sciacovelli/sciacoEtAl.dat b/testcases/Sciacovelli/sciacoEtAl.dat new file mode 100644 index 0000000..a8add62 --- /dev/null +++ b/testcases/Sciacovelli/sciacoEtAl.dat @@ -0,0 +1,257 @@ +y,y+,y*,rhob,rhow,ub,ut,Tb,Tw,ew,hw,cw,sm,Gm,mum,lam,cpm,cvm,Prm,Eckm,Tmfw,umfb,umft,Tffw,uffb,ufft,upupb,upupt,vpvpb,vpvpt,wpwpb,wpwpt,upvpb,upvpt,TpTpw,vpTpb,vpTpt,ufufb,ufuft,ufuftauw,vfvfb,vfvft,vfvftauw,wfwfb,wfwft,wfwftauw,ufvfb,ufvft,ufvftauw,TfTfw,vfTfb,vfTfw,,,,,,,,,,,,Shear1,Shear2,M1,M2,Re,rhormsj,rhormsw,Mrms,Trmsj,Trmsw,prmsj,crmsj,Grms,T0rmsj,srms,cprms,cvrms,murmsj,larmsj,Prrms,Eckrms,Mt,urmsb,urms+,urms*,vrmsb,vrms+,vrms*,wrmsb,wrms+,wrms*,vrt+,vrt*,vrtx+,vrtx*,vrty+,vrty*,vrtz+,vrtz*,divrms+,divrms*,ducrrms,-rhoupvp,-rhovpTp,-upvp_duy,T0,ducros,qtot,retaus,ropup,ropvp,ropwp" +0.000000000E+00,0.000000000E+00,0.000000000E+00,2.491690397E+00,1.000000000E+00,0.000000000E+00,0.000000000E+00,1.000000000E+00,1.000000000E+00,1.000000000E+00,1.000000000E+00,1.000000000E+00,2.068961334E+02,1.200000048E+00,1.000000000E+00,1.000000000E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,0.000000000E+00,1.000000000E+00,0.000000000E+00,0.000000000E+00,-1.885561070E-13,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,8.056189315E-14,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,3.277310763E-16,0.000000000E+00,0.000000000E+00,1.000000000E+00,1.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,3.313668072E-02,3.313668072E-02,0.000000000E+00,0.000000000E+00,0.000000000E+00,3.313679248E-02,3.088134463E-06,2.756875801E-06,0.000000000E+00,2.747829676E+00,9.876584045E-06,5.543031421E-06,2.191514568E-06,1.274279839E-06,2.009986474E-06,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,3.994205594E-01,1.356799752E-01,0.000000000E+00,3.756691515E-01,1.000000000E+00,1.115705003E-03,-2.231410006E-03,1.115705003E-03,1.251039468E-02,1.251039468E-02,0.000000000E+00,0.000000000E+00,0.000000000E+00,0.000000000E+00,1.000000000E+00,0.000000000E+00,2.873900032E+01,6.264213257E+02,0.000000000E+00,0.000000000E+00,0.000000000E+00 +1.230769209E-03,7.709800601E-01,7.112438083E-01,2.330562115E+00,9.353337884E-01,2.681238949E-02,7.650011182E-01,1.069349766E+00,1.069888830E+00,1.069875360E+00,1.069875360E+00,1.034271836E+00,2.274249725E+02,1.200000048E+00,1.048354030E+00,1.048354030E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,2.887037583E-03,1.069349766E+00,2.661724389E-02,7.594332695E-01,5.391548621E-04,1.951459853E-04,5.567832384E-03,1.006319071E-04,8.191978186E-02,8.765304216E-08,7.135429041E-05,1.226746008E-05,9.986371733E-03,5.388250290E-09,4.386325145E-06,7.364891935E-04,8.292060016E-08,2.365859700E-06,9.252663585E-05,7.532165200E-02,7.532165200E-02,8.313165267E-08,6.767363084E-05,6.767363084E-05,1.124533992E-05,9.154311381E-03,9.154311381E-03,4.936171472E-09,4.018309028E-06,4.018309028E-06,6.776124937E-04,7.040612360E-08,2.008801175E-06,1.006699895E-04,8.195078373E-02,8.765388060E-08,7.135496708E-05,1.226746008E-05,9.986372665E-03,5.566754613E-09,4.531637842E-06,7.367798826E-04,8.341378077E-08,2.379930947E-06,9.987692237E-01,1.033642054E+00,7.999356091E-02,7.969351858E-02,4.275503235E+02,3.834022209E-02,3.586091101E-02,2.861158550E-02,2.536556311E-02,2.713833377E-02,3.314466029E-02,1.262656413E-02,2.756875801E-06,2.642342076E-02,8.192249298E+00,9.876584045E-06,5.543031421E-06,1.770843565E-02,1.770843565E-02,2.009986474E-06,2.146083862E-03,3.159374744E-02,1.003153808E-02,2.862161100E-01,2.768072188E-01,2.960558922E-04,8.446956985E-03,8.169278502E-03,3.502426669E-03,9.992993623E-02,9.664491564E-02,4.023985565E-01,1.293235123E-01,8.438246325E-03,3.809573054E-01,1.033644915E+00,-2.547499491E-03,5.055166781E-03,-2.507667523E-03,1.148580108E-02,1.204118133E-02,0.000000000E+00,4.018712389E-06,-1.508132996E-08,2.651175464E-06,1.071461201E+00,0.000000000E+00,2.848461151E+01,5.778856201E+02,-8.003519058E+00,-3.751560673E-02,1.735707186E-02 +2.471205778E-03,1.548015952E+00,1.330270529E+00,2.197808266E+00,8.820551038E-01,5.296256393E-02,1.511108160E+00,1.133668184E+00,1.135662436E+00,1.135648131E+00,1.135648131E+00,1.065408826E+00,2.473429260E+02,1.200000048E+00,1.092907310E+00,1.092907310E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.044297405E-02,1.133668184E+00,5.221206322E-02,1.489695191E+00,1.994227758E-03,7.504991372E-04,2.141296118E-02,3.833840892E-04,3.120952547E-01,3.055025388E-07,2.486954909E-04,4.445774175E-05,3.619099036E-02,1.392455999E-07,1.133534024E-04,2.609323710E-03,6.758332916E-07,1.928262282E-05,3.281079989E-04,2.670975626E-01,2.670975626E-01,2.753345996E-07,2.241371694E-04,2.241371694E-04,3.797054887E-05,3.091006726E-02,3.091006726E-02,1.181628377E-07,9.619090270E-05,9.619090270E-05,2.237970708E-03,5.651075980E-07,1.612343840E-05,3.839473356E-04,3.125537634E-01,3.055094737E-07,2.487011370E-04,4.445774175E-05,3.619099408E-02,1.412193313E-07,1.149601303E-04,2.613300690E-03,6.810779496E-07,1.943226198E-05,9.975287914E-01,1.037505269E+00,1.528310329E-01,1.528181434E-01,7.639667358E+02,5.099169165E-02,4.497748986E-02,5.244148150E-02,4.497950897E-02,5.108153820E-02,3.303925321E-02,2.233806252E-02,2.756875801E-06,4.867693409E-02,1.551734066E+01,9.876584045E-06,5.543031421E-06,3.135717288E-02,3.135717288E-02,2.009986474E-06,7.384506986E-03,5.970379338E-02,1.958018169E-02,5.586544275E-01,5.246759653E-01,5.527109606E-04,1.576974429E-02,1.481060125E-02,6.667540409E-03,1.902357787E-01,1.786653101E-01,3.878921866E-01,1.200786084E-01,1.721043140E-02,3.684358597E-01,1.037601471E+00,-2.169221698E-04,2.911248012E-04,-7.420263137E-05,1.022731978E-02,1.117750537E-02,0.000000000E+00,-9.760812100E-05,-1.212453071E-07,1.803739724E-05,1.141773343E+00,0.000000000E+00,2.772490501E+01,5.383082886E+02,-3.169618416E+01,-1.110685021E-01,6.170487031E-02 +3.721385496E-03,2.331155062E+00,1.882073641E+00,2.088043690E+00,8.380028605E-01,7.812895626E-02,2.229146242E+00,1.193357110E+00,1.197212219E+00,1.197197080E+00,1.197197080E+00,1.093685627E+00,2.664100952E+02,1.200000048E+00,1.133854508E+00,1.133854508E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,2.128315531E-02,1.193357110E+00,7.663389295E-02,2.186489582E+00,3.855205141E-03,1.495062606E-03,4.265657067E-02,8.088565082E-04,6.584526896E-01,6.359366012E-07,5.176865961E-04,9.001624858E-05,7.327806205E-02,2.894751560E-06,2.356483368E-03,5.179557018E-03,6.198811661E-06,1.768621732E-04,6.525001372E-04,5.311701894E-01,5.311701894E-01,5.437790946E-07,4.426653904E-04,4.426653904E-04,7.242587162E-05,5.895855278E-02,5.895855278E-02,2.246552867E-06,1.828814740E-03,1.828814740E-03,4.194578156E-03,4.815959073E-06,1.374071435E-04,8.110917406E-04,6.602722406E-01,6.359369422E-07,5.176868872E-04,9.001625585E-05,7.327806950E-02,-2.895598072E-06,-2.357172547E-03,5.194419529E-03,-6.200993994E-06,-1.769244554E-04,9.962786436E-01,1.034142852E+00,2.190424204E-01,2.196047455E-01,1.032032227E+03,6.287647039E-02,5.269066244E-02,7.230696082E-02,6.011393294E-02,7.196913660E-02,3.297864273E-02,2.982437424E-02,2.756875801E-06,6.735724956E-02,2.231926155E+01,9.876584045E-06,5.543031421E-06,4.188227281E-02,4.188227281E-02,2.009986474E-06,1.437944360E-02,8.430083096E-02,2.844038233E-02,8.114504218E-01,7.428220510E-01,7.974373293E-04,2.275218442E-02,2.082793042E-02,9.487519041E-03,2.706943452E-01,2.478004992E-01,3.719664216E-01,1.109868959E-01,2.600394003E-02,3.540684283E-01,1.032314062E+00,2.905906586E-04,-8.678361773E-04,5.772455479E-04,9.503657930E-03,1.077575609E-02,0.000000000E+00,1.829392277E-03,1.025275992E-06,8.633603284E-05,1.210449576E+00,0.000000000E+00,2.682246399E+01,5.057454224E+02,-6.478005219E+01,2.453486621E-02,1.205445677E-01 +4.981385078E-03,3.120445728E+00,2.382553577E+00,1.994500279E+00,8.004607558E-01,1.024697274E-01,2.923628092E+00,1.249213696E+00,1.255109191E+00,1.255093336E+00,1.255093336E+00,1.119602442E+00,2.847474060E+02,1.200000048E+00,1.171774387E+00,1.171774387E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,3.458021581E-02,1.249213696E+00,1.001179144E-01,2.856527090E+00,5.895535462E-03,2.351810457E-03,6.710097939E-02,1.352674677E-03,1.101149917E+00,1.084904852E-06,8.831708692E-04,1.446656242E-04,1.177655980E-01,6.381315416E-06,5.194733851E-03,8.171080612E-03,1.321598211E-05,3.770734766E-04,1.036889153E-03,8.440835476E-01,8.440835476E-01,8.816512036E-07,7.177114603E-04,7.177114603E-04,1.104770854E-04,8.993428946E-02,8.993428946E-02,4.646624348E-06,3.782602260E-03,3.782602260E-03,6.299679633E-03,9.608215805E-06,2.741380304E-04,1.358205685E-03,1.105652452E+00,1.084916789E-06,8.831805899E-04,1.446656388E-04,1.177656129E-01,-6.389425380E-06,-5.201335996E-03,8.205838501E-03,-1.323631022E-05,-3.776534868E-04,9.950186014E-01,1.031909823E+00,2.800805271E-01,2.813545763E-01,1.251078979E+03,7.314828038E-02,5.855232105E-02,8.947305381E-02,7.202084363E-02,9.039402753E-02,3.287206218E-02,3.572287038E-02,2.756875801E-06,8.335500211E-02,2.861715889E+01,9.876584045E-06,5.543031421E-06,5.016997084E-02,5.016997084E-02,2.009986474E-06,2.250038646E-02,1.062858477E-01,3.677869961E-02,1.049356222E+00,9.388430715E-01,1.041560317E-03,2.971740998E-02,2.658773400E-02,1.202749368E-02,3.431639671E-01,3.070237637E-01,3.604266942E-01,1.037333682E-01,3.482647613E-02,3.434146941E-01,1.028127193E+00,-8.075846563E-05,-2.954401716E-04,3.761986445E-04,8.874434978E-03,1.039882377E-02,0.000000000E+00,3.787886817E-03,2.048192528E-06,1.333362452E-04,1.277786970E+00,0.000000000E+00,2.598888206E+01,4.782914124E+02,-1.042646179E+02,1.528812051E-01,1.879229099E-01 +6.251281127E-03,3.915935755E+00,2.843099833E+00,1.913908482E+00,7.681164742E-01,1.260898709E-01,3.597549438E+00,1.301895618E+00,1.309852362E+00,1.309835792E+00,1.309835792E+00,1.143553019E+00,3.023936157E+02,1.200000048E+00,1.207138300E+00,1.207138300E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,4.978065938E-02,1.301895618E+00,1.228312552E-01,3.504575491E+00,7.956678048E-03,3.258621553E-03,9.297377616E-02,1.993558370E-03,1.622863770E+00,1.747705369E-06,1.422726200E-03,2.056897938E-04,1.674425453E-01,1.417666226E-05,1.154056564E-02,1.139972731E-02,2.919251165E-05,8.329098928E-04,1.462252112E-03,1.190351844E+00,1.190351844E+00,1.346502359E-06,1.096125226E-03,1.096125226E-03,1.500200451E-04,1.221243814E-01,1.221243814E-01,9.841806786E-06,8.011760190E-03,8.011760190E-03,8.424694650E-03,2.024026435E-05,5.774876918E-04,2.004177077E-03,1.631507874E+00,1.747844180E-06,1.422839123E-03,2.056898229E-04,1.674425751E-01,-1.421503293E-05,-1.157180034E-02,1.146303676E-02,-2.928619870E-05,-8.355829050E-04,9.937487245E-01,1.031787395E+00,3.369197249E-01,3.389581740E-01,1.433980835E+03,8.166576922E-02,6.272882223E-02,1.045788601E-01,8.151262254E-02,1.067695022E-01,3.279076517E-02,4.044080526E-02,2.756875801E-06,9.723579884E-02,3.440839005E+01,9.876584045E-06,5.543031421E-06,5.678995699E-02,5.678995699E-02,2.009986474E-06,3.133832291E-02,1.261174232E-01,4.464925453E-02,1.273915887E+00,1.116488814E+00,1.321968390E-03,3.771791235E-02,3.305686265E-02,1.434164867E-02,4.091905653E-01,3.586241007E-01,3.518709838E-01,9.776866436E-02,4.361927509E-02,3.351888359E-01,1.023775578E+00,1.243309962E-04,-8.921085391E-04,7.677775575E-04,8.485211059E-03,1.024281047E-02,0.000000000E+00,8.035751991E-03,4.322655514E-06,2.059913240E-04,1.344061732E+00,0.000000000E+00,2.517786789E+01,4.548027344E+02,-1.474772491E+02,5.329121351E-01,2.586854100E-01 +7.531152107E-03,4.717674255E+00,3.271581888E+00,1.843173265E+00,7.397280335E-01,1.490896940E-01,4.253771782E+00,1.351745486E+00,1.361729503E+00,1.361712337E+00,1.361712337E+00,1.165790915E+00,3.194152832E+02,1.200000048E+00,1.240241408E+00,1.240241408E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,6.653102487E-02,1.351745486E+00,1.448924690E-01,4.134017944E+00,9.984017350E-03,4.197223112E-03,1.197536066E-01,2.720774617E-03,2.214856863E+00,2.624334002E-06,2.136348980E-03,2.711055859E-04,2.206945270E-01,2.314155245E-05,1.883846708E-02,1.473361906E-02,4.635998994E-05,1.322725904E-03,1.918838476E-03,1.562037706E+00,1.562037706E+00,1.927533503E-06,1.569115906E-03,1.569115906E-03,1.897196489E-04,1.544419974E-01,1.544419974E-01,1.539035111E-05,1.252857316E-02,1.252857316E-02,1.048817486E-02,3.078762165E-05,8.784210077E-04,2.738391282E-03,2.229197741E+00,2.624748504E-06,2.136686351E-03,2.711056441E-04,2.206945568E-01,-2.322698310E-05,-1.890801452E-02,1.483330037E-02,-4.656320380E-05,-1.328523969E-03,9.924688339E-01,1.029858589E+00,3.903245032E-01,3.931417465E-01,1.589302490E+03,8.889079839E-02,6.575500965E-02,1.182130948E-01,8.913818747E-02,1.213821098E-01,3.267712519E-02,4.424849898E-02,2.756875801E-06,1.094337478E-01,3.976742935E+01,9.876584045E-06,5.543031421E-06,6.212301552E-02,6.212301552E-02,2.009986474E-06,4.072519764E-02,1.442991048E-01,5.216101557E-02,1.488238692E+00,1.279996276E+00,1.619925140E-03,4.621909931E-02,3.975191340E-02,1.646501757E-02,4.697737396E-01,4.040407240E-01,3.444173038E-01,9.281170368E-02,5.239501968E-02,3.275113702E-01,1.017329931E+00,1.707075571E-04,-1.179559156E-03,1.008851686E-03,8.149117231E-03,1.010685880E-02,0.000000000E+00,1.258001849E-02,6.583920367E-06,2.724919177E-04,1.409400940E+00,0.000000000E+00,2.436319542E+01,4.344065552E+02,-1.935667114E+02,9.387122989E-01,3.309722245E-01 +8.821075782E-03,5.525710106E+00,3.674484015E+00,1.780865550E+00,7.147218585E-01,1.714695543E-01,4.892305374E+00,1.399100900E+00,1.411000252E+00,1.410982370E+00,1.410982370E+00,1.186527252E+00,3.358076172E+02,1.200000048E+00,1.271335840E+00,1.271335840E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,8.449233323E-02,1.399100900E+00,1.663416624E-01,4.745998383E+00,1.189929713E-02,5.127890967E-03,1.463070810E-01,3.513497533E-03,2.860175848E+00,3.876330538E-06,3.155541373E-03,3.394483938E-04,2.763292491E-01,3.752369958E-05,3.054630756E-02,1.806887798E-02,7.392906991E-05,2.109316643E-03,2.393786330E-03,1.948670745E+00,1.948670745E+00,2.718176802E-06,2.212742111E-03,2.212742111E-03,2.288819232E-04,1.863221973E-01,1.863221973E-01,2.410489469E-05,1.962267980E-02,1.962267980E-02,1.244554017E-02,4.747433195E-05,1.354519860E-03,3.539792728E-03,2.881581545E+00,3.877537438E-06,3.156523919E-03,3.394484520E-04,2.763293087E-01,-3.770181866E-05,-3.069130704E-02,1.821047068E-02,-7.434238796E-05,-2.121109283E-03,9.911789298E-01,1.029179811E+00,4.406782985E-01,4.442541897E-01,1.722887329E+03,9.484023601E-02,6.778437644E-02,1.305122674E-01,9.526610374E-02,1.344204992E-01,3.258733824E-02,4.732734337E-02,2.756875801E-06,1.201650575E-01,4.467398834E+01,9.876584045E-06,5.543031421E-06,6.642471254E-02,6.642471254E-02,2.009986474E-06,5.040381104E-02,1.609010994E-01,5.927473307E-02,1.691204667E+00,1.429765344E+00,1.968766795E-03,5.617212132E-02,4.748866707E-02,1.842383668E-02,5.256620049E-01,4.444015026E-01,3.382140696E-01,8.889555186E-02,6.104943901E-02,3.205603063E-01,1.009557128E+00,3.488744842E-04,-1.732488512E-03,1.383614028E-03,7.881738245E-03,1.002032124E-02,0.000000000E+00,1.972631551E-02,1.016590340E-05,3.587899264E-04,1.473860860E+00,0.000000000E+00,2.355708694E+01,4.165573425E+02,-2.405885315E+02,1.629729271E+00,4.011875987E-01 +1.012113132E-02,6.340092659E+00,4.056147575E+00,1.725166559E+00,6.923679709E-01,1.933184564E-01,5.515690327E+00,1.444166780E+00,1.457869768E+00,1.457851410E+00,1.457851410E+00,1.205927014E+00,3.516310730E+02,1.200000048E+00,1.300619960E+00,1.300619960E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.034997180E-01,1.444166780E+00,1.872659624E-01,5.343002796E+00,1.370306686E-02,6.052491721E-03,1.726874262E-01,4.366625566E-03,3.554667950E+00,5.446146588E-06,4.433456343E-03,4.098209320E-04,3.336162865E-01,5.328090629E-05,4.337352142E-02,2.133741789E-02,1.026274695E-04,2.928128699E-03,2.883672481E-03,2.347464561E+00,2.347464561E+00,3.669586249E-06,2.987240674E-03,2.987240674E-03,2.671157999E-04,2.174466103E-01,2.174466103E-01,3.317289156E-05,2.700451761E-02,2.700451761E-02,1.426763926E-02,6.392387877E-05,1.823852188E-03,4.403258208E-03,3.584488869E+00,5.448571301E-06,4.435429815E-03,4.098210193E-04,3.336163461E-01,-5.357885675E-05,-4.361607134E-02,2.152519301E-02,-1.033020308E-04,-2.947374946E-03,9.898788929E-01,1.027566433E+00,4.884979725E-01,4.928043485E-01,1.839301758E+03,9.989644587E-02,6.916508079E-02,1.418414265E-01,1.001963764E-01,1.460732967E-01,3.247477859E-02,4.982277006E-02,2.756875801E-06,1.297013462E-01,4.919745255E+01,9.876584045E-06,5.543031421E-06,6.990116835E-02,6.990116835E-02,2.009986474E-06,6.034553424E-02,1.762791127E-01,6.608042121E-02,1.885381937E+00,1.568801165E+00,2.333604498E-03,6.658153236E-02,5.540168285E-02,2.024372667E-02,5.775864720E-01,4.806023836E-01,3.333924413E-01,8.598088473E-02,6.960465759E-02,3.145036101E-01,1.000561953E+00,3.565731749E-04,-1.941758208E-03,1.585185062E-03,7.589577232E-03,9.871139191E-03,0.000000000E+00,2.717245184E-02,1.370306563E-05,4.416422453E-04,1.537543058E+00,0.000000000E+00,2.275869751E+01,4.007602539E+02,-2.885163269E+02,2.346678734E+00,4.691401422E-01 +1.143139880E-02,7.160871983E+00,4.420656681E+00,1.675336123E+00,6.723693013E-01,2.146177590E-01,6.123394012E+00,1.487161756E+00,1.502513885E+00,1.502494931E+00,1.502494931E+00,1.224127173E+00,3.668748779E+02,1.200000048E+00,1.328260064E+00,1.328260064E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.233195439E-01,1.487161756E+00,2.076749951E-01,5.925305843E+00,1.535222400E-02,6.942761596E-03,1.980882883E-01,5.261166021E-03,4.282871723E+00,7.538970294E-06,6.137127057E-03,4.814329441E-04,3.919122815E-01,7.478018961E-05,6.087509543E-02,2.448267676E-02,1.414904546E-04,4.036952741E-03,3.379188478E-03,2.750841141E+00,2.750841141E+00,4.894420726E-06,3.984321374E-03,3.984321374E-03,3.042553435E-04,2.476802021E-01,2.476802021E-01,4.534346954E-05,3.691202030E-02,3.691202030E-02,1.594353467E-02,8.593360690E-05,2.451825654E-03,5.309368018E-03,4.322111130E+00,7.543726042E-06,6.140998565E-03,4.814330605E-04,3.919124007E-01,-7.525890396E-05,-6.126479432E-02,2.471836843E-02,-1.425489754E-04,-4.067154136E-03,9.885686040E-01,1.026862264E+00,5.339738727E-01,5.389659405E-01,1.941706177E+03,1.040495411E-01,6.995969266E-02,1.522193104E-01,1.041383594E-01,1.564693600E-01,3.238363937E-02,5.183646455E-02,2.756875801E-06,1.381520927E-01,5.332167435E+01,9.876584045E-06,5.543031421E-06,7.269636542E-02,7.269636542E-02,2.009986474E-06,7.036677003E-02,1.904296726E-01,7.253387570E-02,2.069509506E+00,1.696959257E+00,2.745601814E-03,7.833648473E-02,6.423456967E-02,2.194125764E-02,6.260198355E-01,5.133250356E-01,3.293872476E-01,8.395712078E-02,7.797241956E-02,3.088153005E-01,9.899502397E-01,5.237156292E-04,-2.463506535E-03,1.939790789E-03,7.346549071E-03,9.758110158E-03,0.000000000E+00,3.717404231E-02,1.843903738E-05,5.403190153E-04,1.600439429E+00,0.000000000E+00,2.196490288E+01,3.867117920E+02,-3.358404846E+02,3.335398197E+00,5.321430564E-01 +1.275195833E-02,7.988098145E+00,4.770657539E+00,1.630230308E+00,6.542668343E-01,2.354289144E-01,6.717170238E+00,1.528203964E+00,1.545067787E+00,1.545048237E+00,1.545048237E+00,1.241235733E+00,3.815855103E+02,1.200000048E+00,1.354386568E+00,1.354386568E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.438590437E-01,1.528203964E+00,2.276222557E-01,6.494433403E+00,1.686381176E-02,7.806665730E-03,2.227368802E-01,6.193540525E-03,5.041874886E+00,1.004111618E-05,8.174008690E-03,5.538626574E-04,4.508739710E-01,9.772484918E-05,7.955328375E-02,2.746593207E-02,1.812887494E-04,5.172463134E-03,3.878619289E-03,3.157404661E+00,3.157404661E+00,6.313060112E-06,5.139170215E-03,5.139170215E-03,3.402156581E-04,2.769538462E-01,2.769538462E-01,5.785754911E-05,4.709915444E-02,4.709915444E-02,1.746161655E-02,1.076144181E-04,3.070414532E-03,6.254484877E-03,5.091486931E+00,1.004898149E-05,8.180410601E-03,5.538627738E-04,4.508740902E-01,-9.841707652E-05,-8.011679351E-02,2.775032260E-02,-1.827840460E-04,-5.215126090E-03,9.872480631E-01,1.025309563E+00,5.774461031E-01,5.830794573E-01,2.032661865E+03,1.075688675E-01,7.037871331E-02,1.618752331E-01,1.072628573E-01,1.657284200E-01,3.227697685E-02,5.345057324E-02,2.756875801E-06,1.456883401E-01,5.710156250E+01,9.876584045E-06,5.543031421E-06,7.492710650E-02,7.492710650E-02,2.009986474E-06,8.047658205E-02,2.035912275E-01,7.869902998E-02,2.245411396E+00,1.816240788E+00,3.168630647E-03,9.040619433E-02,7.312678546E-02,2.353395335E-02,6.714619994E-01,5.431244373E-01,3.265526891E-01,8.278384060E-02,8.616757393E-02,3.039045036E-01,9.782104492E-01,5.342821823E-04,-2.662908752E-03,2.128626686E-03,7.065983023E-03,9.570054710E-03,0.000000000E+00,4.746784270E-02,2.310968011E-05,6.375645753E-04,1.662599444E+00,0.000000000E+00,2.118114662E+01,3.741117859E+02,-3.828184509E+02,4.348282814E+00,5.907320380E-01 +1.408288907E-02,8.821822166E+00,5.108901501E+00,1.589423180E+00,6.378895044E-01,2.557320893E-01,7.296452522E+00,1.567458153E+00,1.585671425E+00,1.585651398E+00,1.585651398E+00,1.257352591E+00,3.957548523E+02,1.200000048E+00,1.379124880E+00,1.379124880E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.649444550E-01,1.567458153E+00,2.471089512E-01,7.050420284E+00,1.821328513E-02,8.623137139E-03,2.460321486E-01,7.147166878E-03,5.818178177E+00,1.318779141E-05,1.073557045E-02,6.266979617E-04,5.101658702E-01,1.262603182E-04,1.027826816E-01,3.026149794E-02,2.302141947E-04,6.568385754E-03,4.375087097E-03,3.561556101E+00,3.561556101E+00,8.050210454E-06,6.553303916E-03,6.553303916E-03,3.750415053E-04,3.053039610E-01,3.053039610E-01,7.321740122E-05,5.960290134E-02,5.960290134E-02,1.882666722E-02,1.339969604E-04,3.823151113E-03,7.221525535E-03,5.878710270E+00,1.320051069E-05,1.074592583E-02,6.266981363E-04,5.101659894E-01,-1.272326917E-04,-1.035742536E-01,3.059322387E-02,-2.322679647E-04,-6.626983173E-03,9.859170914E-01,1.024610281E+00,6.190231442E-01,6.252451539E-01,2.114073975E+03,1.104302481E-01,7.044226676E-02,1.707965434E-01,1.097063273E-01,1.739582270E-01,3.218977526E-02,5.473079532E-02,2.756875801E-06,1.523808986E-01,6.052877808E+01,9.876584045E-06,5.543031421E-06,7.668673992E-02,7.668673992E-02,2.009986474E-06,9.053725004E-02,2.157503963E-01,8.454090357E-02,2.412089586E+00,1.926487684E+00,3.631332656E-03,1.036078259E-01,8.274965733E-02,2.503359318E-02,7.142491341E-01,5.704570413E-01,3.244394362E-01,8.233199269E-02,9.412437677E-02,2.993696332E-01,9.650073647E-01,6.755408249E-04,-3.112655133E-03,2.437114250E-03,6.827605888E-03,9.416101500E-03,0.000000000E+00,6.010784209E-02,2.879476051E-05,7.481031353E-04,1.723996878E+00,0.000000000E+00,2.040471077E+01,3.627736511E+02,-4.282499695E+02,5.600311756E+00,6.428893805E-01 +1.542427484E-02,9.662095070E+00,5.437112331E+00,1.552147985E+00,6.229296923E-01,2.755701840E-01,7.862465858E+00,1.604993820E+00,1.624415874E+00,1.624395370E+00,1.624395370E+00,1.272551417E+00,4.094191284E+02,1.200000048E+00,1.402563691E+00,1.402563691E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.865168959E-01,1.604993820E+00,2.661682069E-01,7.594212532E+00,1.942200586E-02,9.401971474E-03,2.682535350E-01,8.119162172E-03,6.609434128E+00,1.681984031E-05,1.369225513E-02,6.997500313E-04,5.696341395E-01,1.561352983E-04,1.271025240E-01,3.284681216E-02,2.796627814E-04,7.979234681E-03,4.867477808E-03,3.962388515E+00,3.962388515E+00,1.000511202E-05,8.144699037E-03,8.144699037E-03,4.087514535E-04,3.327456415E-01,3.327456415E-01,8.885575517E-05,7.233335823E-02,7.233335823E-02,2.003394440E-02,1.598972158E-04,4.562127870E-03,8.207558654E-03,6.681394100E+00,1.683852861E-05,1.370746735E-02,6.997502060E-04,5.696343184E-01,-1.574203488E-04,-1.281486303E-01,3.322402760E-02,-2.823173127E-04,-8.054971695E-03,9.845757484E-01,1.023109436E+00,6.589400172E-01,6.657008529E-01,2.187468262E+03,1.128261536E-01,7.028272003E-02,1.791375577E-01,1.115703881E-01,1.812367737E-01,3.209240735E-02,5.572583526E-02,2.756875801E-06,1.583432555E-01,6.364670563E+01,9.876584045E-06,5.543031421E-06,7.804461569E-02,7.804461569E-02,2.009986474E-06,1.005697250E-01,2.270743698E-01,9.010638297E-02,2.570881844E+00,2.029091597E+00,4.101005848E-03,1.170083657E-01,9.235011041E-02,2.645243891E-02,7.547311187E-01,5.956789851E-01,3.232773840E-01,8.252219856E-02,1.018532589E-01,2.955051959E-01,9.507761002E-01,6.812317879E-04,-3.278642194E-03,2.597410465E-03,6.557134911E-03,9.196779691E-03,0.000000000E+00,7.298500836E-02,3.437971100E-05,8.586847107E-04,1.784644723E+00,0.000000000E+00,1.964017487E+01,3.525035706E+02,-4.725025940E+02,6.869029045E+00,6.895577908E-01 +1.677619666E-02,1.050896740E+01,5.757232666E+00,1.518139601E+00,6.092810035E-01,2.949256003E-01,8.414707184E+00,1.640944839E+00,1.661421299E+00,1.661400318E+00,1.661400318E+00,1.286910176E+00,4.225744324E+02,1.200000048E+00,1.424803972E+00,1.424803972E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,2.084396183E-01,1.640944839E+00,2.847983241E-01,8.125760078E+00,2.047638036E-02,1.012726128E-02,2.889472544E-01,9.095531888E-03,7.404252052E+00,2.119165583E-05,1.725114696E-02,7.728068740E-04,6.291063428E-01,1.911356085E-04,1.555946618E-01,3.521635756E-02,3.368102771E-04,9.609745815E-03,5.350693595E-03,4.355752468E+00,4.355752468E+00,1.230939779E-05,1.002051122E-02,1.002051122E-02,4.414612486E-04,3.593731821E-01,3.593731821E-01,1.069812861E-04,8.708851784E-02,8.708851784E-02,2.109563164E-02,1.895668393E-04,5.408650264E-03,9.198093787E-03,7.487742901E+00,2.121857324E-05,1.727305911E-02,7.728070486E-04,6.291064620E-01,-1.927968697E-04,-1.569470167E-01,3.563564271E-02,-3.401691210E-04,-9.705577977E-03,9.832237959E-01,1.022387028E+00,6.972627640E-01,7.045087814E-01,2.254073242E+03,1.147294417E-01,6.990242004E-02,1.868786961E-01,1.129514724E-01,1.876600534E-01,3.201268241E-02,5.648191646E-02,2.756875801E-06,1.636294425E-01,6.645375824E+01,9.876584045E-06,5.543031421E-06,7.906652987E-02,7.906652987E-02,2.009986474E-06,1.104682013E-01,2.375537306E-01,9.537050128E-02,2.721075535E+00,2.123975039E+00,4.603217822E-03,1.313372850E-01,1.025174782E-01,2.779904753E-02,7.931520343E-01,6.191071272E-01,3.227365613E-01,8.323027939E-02,1.093080267E-01,2.920313478E-01,9.352984428E-01,7.949721767E-04,-3.647486446E-03,2.852514153E-03,6.326337811E-03,9.013771079E-03,0.000000000E+00,8.791248500E-02,4.077733320E-05,9.809348267E-04,1.844512105E+00,0.000000000E+00,1.888662720E+01,3.431786804E+02,-5.146216431E+02,8.335874557E+00,7.292662263E-01 +1.813873649E-02,1.136249161E+01,6.070444584E+00,1.486859322E+00,5.967271924E-01,3.138292432E-01,8.954059601E+00,1.675354481E+00,1.696752071E+00,1.696730733E+00,1.696730733E+00,1.300481200E+00,4.352499390E+02,1.200000048E+00,1.445909381E+00,1.445909381E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,2.306715548E-01,1.675354481E+00,3.030202687E-01,8.645661354E+00,2.139763348E-02,1.080899127E-02,3.083981276E-01,1.007392351E-02,8.200715065E+00,2.611215132E-05,2.125669457E-02,8.457921213E-04,6.885202527E-01,2.272512647E-04,1.849947423E-01,3.735756874E-02,3.939661838E-04,1.124049630E-02,5.823911633E-03,4.740977287E+00,4.740977287E+00,1.484986115E-05,1.208858564E-02,1.208858564E-02,4.732168745E-04,3.852239847E-01,3.852239847E-01,1.252855145E-04,1.019891426E-01,1.019891426E-01,2.201012336E-02,2.185756748E-04,6.236319896E-03,1.019075792E-02,8.295825005E+00,2.614864934E-05,2.128640749E-02,8.457922959E-04,6.885204315E-01,-2.293159778E-04,-1.866755337E-01,3.781543300E-02,-3.980534384E-04,-1.135711279E-02,9.818612337E-01,1.020934939E+00,7.341611385E-01,7.418421507E-01,2.314841309E+03,1.162809357E-01,6.938794255E-02,1.941296309E-01,1.139122024E-01,1.932808608E-01,3.192673996E-02,5.702905729E-02,2.756875801E-06,1.683185697E-01,6.898467255E+01,9.876584045E-06,5.543031421E-06,7.979521900E-02,7.979521900E-02,2.009986474E-06,1.202566922E-01,2.473104447E-01,1.003689393E-01,2.863689184E+00,2.212145805E+00,5.109754391E-03,1.457896084E-01,1.126200184E-01,2.908214368E-02,8.297609091E-01,6.409754753E-01,3.229287267E-01,8.436964452E-02,1.164971888E-01,2.891227305E-01,9.189458489E-01,7.927270490E-04,-3.770357464E-03,2.977630356E-03,6.072190590E-03,8.779816329E-03,0.000000000E+00,1.029921249E-01,4.703424565E-05,1.104464289E-03,1.903589606E+00,0.000000000E+00,1.814704323E+01,3.346674194E+02,-5.550117188E+02,9.808526039E+00,7.631992698E-01 +1.951198094E-02,1.222272015E+01,6.378168583E+00,1.458132148E+00,5.851979852E-01,3.322669268E-01,9.480116844E+00,1.708336115E+00,1.730515003E+00,1.730493188E+00,1.730493188E+00,1.313328505E+00,4.474457703E+02,1.200000048E+00,1.465964317E+00,1.465964317E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,2.531015873E-01,1.708336115E+00,3.208317459E-01,9.153851509E+00,2.217893675E-02,1.143520419E-02,3.262649775E-01,1.104292925E-02,8.989538193E+00,3.184475645E-05,2.592334338E-02,9.185936069E-04,7.477846146E-01,2.678438032E-04,2.180392593E-01,3.927764669E-02,4.572679172E-04,1.304659806E-02,6.283424795E-03,5.115045547E+00,5.115045547E+00,1.776026511E-05,1.445781067E-02,1.445781067E-02,5.041454569E-04,4.104015231E-01,4.104015231E-01,1.456752943E-04,1.185875237E-01,1.185875237E-01,2.279268578E-02,2.504540898E-04,7.145862561E-03,1.117369346E-02,9.095987320E+00,3.189341442E-05,2.596295439E-02,9.185938397E-04,7.477847934E-01,-2.703659120E-04,-2.200923711E-01,3.976956010E-02,-4.621594853E-04,-1.318616234E-02,9.804880023E-01,1.020170927E+00,7.696780562E-01,7.777427435E-01,2.370607178E+03,1.174553931E-01,6.873460114E-02,2.008723170E-01,1.145240217E-01,1.981856525E-01,3.185676038E-02,5.740150064E-02,2.756875801E-06,1.724558473E-01,7.124266815E+01,9.876584045E-06,5.543031421E-06,8.027943969E-02,8.027943969E-02,2.009986474E-06,1.298534721E-01,2.563418150E-01,1.050853431E-01,2.998255730E+00,2.293612480E+00,5.642836913E-03,1.609993130E-01,1.231619716E-01,3.030794486E-02,8.647349477E-01,6.615078449E-01,3.236086369E-01,8.583799005E-02,1.233901978E-01,2.865798175E-01,9.015834332E-01,8.796082693E-04,-4.057637881E-03,3.178029554E-03,5.854325835E-03,8.582211100E-03,0.000000000E+00,1.197890118E-01,5.390844672E-05,1.238644822E-03,1.961847901E+00,0.000000000E+00,1.742183113E+01,3.268847351E+02,-5.929218140E+02,1.143622494E+01,7.903341651E-01 +2.089601010E-02,1.308970547E+01,6.681243896E+00,1.431565762E+00,5.745359659E-01,3.502618372E-01,9.993539810E+00,1.739918828E+00,1.762758613E+00,1.762736320E+00,1.762736320E+00,1.325490713E+00,4.591862793E+02,1.200000048E+00,1.485016584E+00,1.485016584E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,2.756988406E-01,1.739918828E+00,3.382464051E-01,9.650720596E+00,2.283979952E-02,1.201541536E-02,3.428193331E-01,1.200070139E-02,9.769215584E+00,3.817920515E-05,3.107992560E-02,9.911835659E-04,8.068767190E-01,3.092572442E-04,2.517520189E-01,4.097064584E-02,5.200362648E-04,1.483748108E-02,6.728614215E-03,5.477453709E+00,5.477453709E+00,2.092177056E-05,1.703144610E-02,1.703144610E-02,5.342902150E-04,4.349409640E-01,4.349409640E-01,1.661239803E-04,1.352338493E-01,1.352338493E-01,2.344338223E-02,2.814894251E-04,8.031351492E-03,1.214507222E-02,9.886741638E+00,3.824147643E-05,3.113061748E-02,9.911837988E-04,8.068769574E-01,-3.122552007E-04,-2.541925311E-01,4.149230942E-02,-5.257349112E-04,-1.500007231E-02,9.791039824E-01,1.018760085E+00,8.039404750E-01,8.123408556E-01,2.421986816E+03,1.183581799E-01,6.800097227E-02,2.071878016E-01,1.148266420E-01,2.024117857E-01,3.178348020E-02,5.761835724E-02,2.756875801E-06,1.760987639E-01,7.325596619E+01,9.876584045E-06,5.543031421E-06,8.054637164E-02,8.054637164E-02,2.009986474E-06,1.392820925E-01,2.647395432E-01,1.095477045E-01,3.125574350E+00,2.369127274E+00,6.178624462E-03,1.762862056E-01,1.336220652E-01,3.148270026E-02,8.982527256E-01,6.808598638E-01,3.248085380E-01,8.756379783E-02,1.299950480E-01,2.844875157E-01,8.835262060E-01,8.681094041E-04,-4.134113435E-03,3.266003914E-03,5.621030927E-03,8.347301744E-03,0.000000000E+00,1.366360039E-01,6.060067244E-05,1.375218271E-03,2.019264698E+00,0.000000000E+00,1.671259689E+01,3.197377930E+02,-6.287603760E+02,1.305708218E+01,8.119841814E-01 +2.229090966E-02,1.396350098E+01,6.980737686E+00,1.407038212E+00,5.646922588E-01,3.678033650E-01,1.049402905E+01,1.770201683E+00,1.793579340E+00,1.793556571E+00,1.793556571E+00,1.337021470E+00,4.704749146E+02,1.200000048E+00,1.503138661E+00,1.503138661E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,2.983715534E-01,1.770201683E+00,3.552626073E-01,1.013621998E+01,2.337764762E-02,1.254076883E-02,3.578085303E-01,1.293825079E-02,1.053243160E+01,4.537915083E-05,3.694107011E-02,1.063494594E-03,8.657417893E-01,3.544140200E-04,2.885120809E-01,4.245122522E-02,5.874328781E-04,1.676041633E-02,7.156877778E-03,5.826083183E+00,5.826083183E+00,2.446618964E-05,1.991679333E-02,1.991679333E-02,5.637655850E-04,4.589354992E-01,4.589354992E-01,1.882510551E-04,1.532464772E-01,1.532464772E-01,2.397822030E-02,3.145785886E-04,8.975438774E-03,1.309552230E-02,1.066045952E+01,4.545769480E-05,3.700500727E-02,1.063494827E-03,8.657419682E-01,-3.579281911E-04,-2.913728058E-01,4.299774766E-02,-5.939836265E-04,-1.694731973E-02,9.777091146E-01,1.017943501E+00,8.369787335E-01,8.456672430E-01,2.469570801E+03,1.189677492E-01,6.718009710E-02,2.130620778E-01,1.148744673E-01,2.060366124E-01,3.172461316E-02,5.770579726E-02,2.756875801E-06,1.792865247E-01,7.503088379E+01,9.876584045E-06,5.543031421E-06,8.063321561E-02,8.063321561E-02,2.009986474E-06,1.484795958E-01,2.725069523E-01,1.137464121E-01,3.245370150E+00,2.438765764E+00,6.736068521E-03,1.921909899E-01,1.444242895E-01,3.261089697E-02,9.304419160E-01,6.991909742E-01,3.263470829E-01,8.947268873E-02,1.362932473E-01,2.827010453E-01,8.646970391E-01,9.303480620E-04,-4.344632849E-03,3.414284671E-03,5.419658963E-03,8.146476001E-03,0.000000000E+00,1.548619121E-01,6.773285713E-05,1.521850703E-03,2.075814724E+00,0.000000000E+00,1.602047920E+01,3.131652222E+02,-6.619470825E+02,1.479154968E+01,8.274767995E-01 +2.369676717E-02,1.484415913E+01,7.277264118E+00,1.384255767E+00,5.555489063E-01,3.849096596E-01,1.098209953E+01,1.799206138E+00,1.823015928E+00,1.822992921E+00,1.822992921E+00,1.347950816E+00,4.813328247E+02,1.200000048E+00,1.520368099E+00,1.520368099E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,3.210952878E-01,1.799206138E+00,3.718896210E-01,1.061061668E+01,2.380977944E-02,1.302004419E-02,3.714830577E-01,1.385423169E-02,1.127808952E+01,5.322596917E-05,4.332879931E-02,1.135513885E-03,9.243693352E-01,4.000662302E-04,3.256753981E-01,4.371791705E-02,6.537789013E-04,1.865337603E-02,7.567781024E-03,6.160580635E+00,6.160580635E+00,2.827418029E-05,2.301670425E-02,2.301670425E-02,5.926015438E-04,4.824095368E-01,4.824095368E-01,2.103098523E-04,1.712035239E-01,1.712035239E-01,2.439825982E-02,3.466548224E-04,9.890626185E-03,1.402375475E-02,1.141609001E+01,5.332219371E-05,4.340713471E-02,1.135514118E-03,9.243695736E-01,-4.041045031E-04,-3.289628029E-01,4.428483546E-02,-6.611636491E-04,-1.886407472E-02,9.763032198E-01,1.016563773E+00,8.688907623E-01,8.778229356E-01,2.513768555E+03,1.193643808E-01,6.631267816E-02,2.185567319E-01,1.146933138E-01,2.090879232E-01,3.166459128E-02,5.767634884E-02,2.756875801E-06,1.820623428E-01,7.659068298E+01,9.876584045E-06,5.543031421E-06,8.055772632E-02,8.055772632E-02,2.009986474E-06,1.574677378E-01,2.797144949E-01,1.177039668E-01,3.358285666E+00,2.503102541E+00,7.295247633E-03,2.081452906E-01,1.551418900E-01,3.369701654E-02,9.614307284E-01,7.166048884E-01,3.282131255E-01,9.151407331E-02,1.422929466E-01,2.812479436E-01,8.453602791E-01,9.096931899E-04,-4.376100842E-03,3.466407536E-03,5.209087394E-03,7.919707336E-03,0.000000000E+00,1.730298400E-01,7.464487135E-05,1.671921229E-03,2.131470203E+00,0.000000000E+00,1.534605694E+01,3.070994568E+02,-6.928774414E+02,1.650616264E+01,8.381596804E-01 +2.511366643E-02,1.573173523E+01,7.571639538E+00,1.363129854E+00,5.470703244E-01,4.015737474E-01,1.145755291E+01,1.827020288E+00,1.851156473E+00,1.851133108E+00,1.851133108E+00,1.358324528E+00,4.917660217E+02,1.200000048E+00,1.536768436E+00,1.536768436E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,3.437938988E-01,1.827020288E+00,3.881269395E-01,1.107389259E+01,2.413626574E-02,1.344683021E-02,3.836599588E-01,1.474179979E-02,1.200061798E+01,6.197629409E-05,5.045203865E-02,1.207190100E-03,9.827176332E-01,4.487119731E-04,3.652756512E-01,4.478920996E-02,7.233617362E-04,2.063868754E-02,7.959594019E-03,6.479537487E+00,6.479537487E+00,3.247237328E-05,2.643425763E-02,2.643425763E-02,6.208918057E-04,5.054393411E-01,5.054393411E-01,2.336580364E-04,1.902102083E-01,1.902102083E-01,2.471895143E-02,3.800755076E-04,1.084417198E-02,1.492261980E-02,1.214781475E+01,6.209272397E-05,5.054681748E-02,1.207190333E-03,9.827178121E-01,-4.532996099E-04,-3.690102696E-01,4.537177831E-02,-7.315961993E-04,-2.087363042E-02,9.748863578E-01,1.015688539E+00,8.996998668E-01,9.088327289E-01,2.555012207E+03,1.195305362E-01,6.539153308E-02,2.236620486E-01,1.143252701E-01,2.116341740E-01,3.161756322E-02,5.755038187E-02,2.756875801E-06,1.844604611E-01,7.794339752E+01,9.876584045E-06,5.543031421E-06,8.034879714E-02,8.034879714E-02,2.009986474E-06,1.661983132E-01,2.863698900E-01,1.214157566E-01,3.464189053E+00,2.562258720E+00,7.872109301E-03,2.246040851E-01,1.661271602E-01,3.474427015E-02,9.913105965E-01,7.332160473E-01,3.302755952E-01,9.363813698E-02,1.479847133E-01,2.800233364E-01,8.254783154E-01,9.502672474E-04,-4.517611582E-03,3.567344276E-03,5.025746766E-03,7.723386399E-03,0.000000000E+00,1.922533065E-01,8.184274338E-05,1.831768430E-03,2.186211586E+00,0.000000000E+00,1.469078064E+01,3.014948120E+02,-7.211132812E+02,1.829670715E+01,8.436128497E-01 +2.654169314E-02,1.662628365E+01,7.864323616E+00,1.343435287E+00,5.391662121E-01,4.178104401E-01,1.192081261E+01,1.853662014E+00,1.878034234E+00,1.878010511E+00,1.878010511E+00,1.368166685E+00,5.017933655E+02,1.200000048E+00,1.552370191E+00,1.552370191E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,3.664473891E-01,1.853662014E+00,4.039813876E-01,1.152624607E+01,2.437214740E-02,1.382908132E-02,3.945661783E-01,1.560009457E-02,1.269931602E+01,7.141166861E-05,5.813293532E-02,1.278509502E-03,1.040775537E+00,4.975250340E-04,4.050121307E-01,4.566662386E-02,7.914328598E-04,2.258086763E-02,8.332061581E-03,6.782746315E+00,6.782746315E+00,3.694460975E-05,3.007489815E-02,3.007489815E-02,6.486515631E-04,5.280372500E-01,5.280372500E-01,2.568127820E-04,2.090594172E-01,2.090594172E-01,2.494197898E-02,4.123364051E-04,1.176462881E-02,1.579134166E-02,1.285500050E+01,7.154952618E-05,5.824516341E-02,1.278509852E-03,1.040775657E+00,-5.026590079E-04,-4.091914892E-01,4.626064003E-02,-8.004808333E-04,-2.283902094E-02,9.734582901E-01,1.014329791E+00,9.294836521E-01,9.387769103E-01,2.593579590E+03,1.195282936E-01,6.444554031E-02,2.284258455E-01,1.137874871E-01,2.136970162E-01,3.157093376E-02,5.733631924E-02,2.756875801E-06,1.865142584E-01,7.910845184E+01,9.876584045E-06,5.543031421E-06,8.001831919E-02,8.001831919E-02,2.009986474E-06,1.746908575E-01,2.925284207E-01,1.249002442E-01,3.563607216E+00,2.616682291E+00,8.450121619E-03,2.410957068E-01,1.770322025E-01,3.575588390E-02,1.020173550E+00,7.490935326E-01,3.325056136E-01,9.581226110E-02,1.533771902E-01,2.790235579E-01,8.052703142E-01,9.214341408E-04,-4.508287180E-03,3.586853156E-03,4.837822635E-03,7.510067895E-03,0.000000000E+00,2.113127857E-01,8.878769586E-05,1.996057108E-03,2.240009546E+00,0.000000000E+00,1.405448151E+01,2.963007507E+02,-7.470285645E+02,2.005508232E+01,8.451395631E-01 +2.798093855E-02,1.752785683E+01,8.155950546E+00,1.325105190E+00,5.318097472E-01,4.336160123E-01,1.237177086E+01,1.879210114E+00,1.903729200E+00,1.903705239E+00,1.903705239E+00,1.377516985E+00,5.114227905E+02,1.200000048E+00,1.567229271E+00,1.567229271E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,3.889925480E-01,1.879210114E+00,4.194537103E-01,1.196769714E+01,2.451907098E-02,1.416229643E-02,4.040733874E-01,1.642410085E-02,1.337010193E+01,8.177609561E-05,6.657013297E-02,1.349423430E-03,1.098503232E+00,5.486115115E-04,4.465992451E-01,4.637001827E-02,8.615207043E-04,2.458058856E-02,8.684135973E-03,7.069353580E+00,7.069353580E+00,4.180994802E-05,3.403554484E-02,3.403554484E-02,6.759530515E-04,5.502621531E-01,5.502621531E-01,2.809002763E-04,2.286679298E-01,2.286679298E-01,2.508156374E-02,4.453448055E-04,1.270641200E-02,1.662467606E-02,1.353337955E+01,8.193760004E-05,6.670161337E-02,1.349423663E-03,1.098503470E+00,-5.543022417E-04,-4.512318075E-01,4.697121680E-02,-8.713729330E-04,-2.486168779E-02,9.720190763E-01,1.013392448E+00,9.582617879E-01,9.676771164E-01,2.629795166E+03,1.193438321E-01,6.346812844E-02,2.328421175E-01,1.131128222E-01,2.153364420E-01,3.153600544E-02,5.705020577E-02,2.756875801E-06,1.882535368E-01,8.009464264E+01,9.876584045E-06,5.543031421E-06,7.958896458E-02,7.958896458E-02,2.009986474E-06,1.829088926E-01,2.982006371E-01,1.281564236E-01,3.656511307E+00,2.666519880E+00,9.042565711E-03,2.579990923E-01,1.881472468E-01,3.673413396E-02,1.048084617E+00,7.643198967E-01,3.348115981E-01,9.800463915E-02,1.584675163E-01,2.781738639E-01,7.847245336E-01,9.436420514E-04,-4.589966498E-03,3.646324389E-03,4.672647454E-03,7.323086727E-03,0.000000000E+00,2.311315835E-01,9.588908870E-05,2.170071471E-03,2.292850733E+00,0.000000000E+00,1.343865776E+01,2.914823914E+02,-7.703016968E+02,2.185657310E+01,8.424858451E-01 +2.943148836E-02,1.843651199E+01,8.446869850E+00,1.307964206E+00,5.249304771E-01,4.490031898E-01,1.281079197E+01,1.903681517E+00,1.928271413E+00,1.928247094E+00,1.928247094E+00,1.386395454E+00,5.206714478E+02,1.200000048E+00,1.581372023E+00,1.581372023E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,4.114131033E-01,1.903681517E+00,4.345495999E-01,1.239840698E+01,2.458994836E-02,1.445359830E-02,4.123846889E-01,1.721341163E-02,1.401264191E+01,9.285751730E-05,7.559101284E-02,1.419911161E-03,1.155884027E+00,5.995536922E-04,4.880689383E-01,4.690283164E-02,9.297083598E-04,2.652609162E-02,9.015734307E-03,7.339292526E+00,7.339292526E+00,4.695792450E-05,3.822627291E-02,3.822627291E-02,7.027984248E-04,5.721157193E-01,5.721157193E-01,3.046776401E-04,2.480239868E-01,2.480239868E-01,2.513975091E-02,4.770756932E-04,1.361174602E-02,1.742232218E-02,1.418270683E+01,9.304361447E-05,7.574250549E-02,1.419911394E-03,1.155884266E+00,-6.057879655E-04,-4.931440055E-01,4.750750959E-02,-9.403147269E-04,-2.682870813E-02,9.705685377E-01,1.012044549E+00,9.860972166E-01,9.955989122E-01,2.663851318E+03,1.190257072E-01,6.248012930E-02,2.369486839E-01,1.123128906E-01,2.165700048E-01,3.150258958E-02,5.669784918E-02,2.756875801E-06,1.897045821E-01,8.091831207E+01,9.876584045E-06,5.543031421E-06,7.906887680E-02,7.906887680E-02,2.009986474E-06,1.908697337E-01,3.034305274E-01,1.311997175E-01,3.743341208E+00,2.712126970E+00,9.635785595E-03,2.749246657E-01,1.991893500E-01,3.768134862E-02,1.075110197E+00,7.789409161E-01,3.371619880E-01,1.001954228E-01,1.632648706E-01,2.774571776E-01,7.640206218E-01,9.080867167E-04,-4.545563366E-03,3.637476591E-03,4.506163299E-03,7.125896867E-03,0.000000000E+00,2.506880462E-01,1.027115723E-04,2.349502174E-03,2.344707966E+00,0.000000000E+00,1.284261799E+01,2.870010986E+02,-7.912805176E+02,2.361500168E+01,8.368518353E-01 +3.089343198E-02,1.935230446E+01,8.737580299E+00,1.291959882E+00,5.185074210E-01,4.639710486E-01,1.323784924E+01,1.927146792E+00,1.951734066E+00,1.951709390E+00,1.951709390E+00,1.394836426E+00,5.295486450E+02,1.200000048E+00,1.594847679E+00,1.594847679E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,4.336568415E-01,1.927146792E+00,4.492710829E-01,1.281843472E+01,2.458729036E-02,1.469996385E-02,4.194138944E-01,1.796452701E-02,1.462409115E+01,1.048832419E-04,8.538059890E-02,1.489921357E-03,1.212876081E+00,6.521068863E-04,5.308501124E-01,4.728469625E-02,9.988801321E-04,2.849967405E-02,9.326333180E-03,7.592136860E+00,7.592136860E+00,5.249837341E-05,4.273649678E-02,4.273649678E-02,7.292410592E-04,5.936414599E-01,5.936414599E-01,3.290710447E-04,2.678815126E-01,2.678815126E-01,2.512922511E-02,5.090661580E-04,1.452448685E-02,1.818061993E-02,1.480000210E+01,1.050957144E-04,8.555356413E-02,1.489921589E-03,1.212876201E+00,-6.588819670E-04,-5.363653302E-01,4.788924754E-02,-1.010212000E-03,-2.882299200E-02,9.691065550E-01,1.011044025E+00,1.013007760E+00,1.022562146E+00,2.695996826E+03,1.185632795E-01,6.147584319E-02,2.407425642E-01,1.114134789E-01,2.174497843E-01,3.147970513E-02,5.629195273E-02,2.756875801E-06,1.908932030E-01,8.158840179E+01,9.876584045E-06,5.543031421E-06,7.847594470E-02,7.847594470E-02,2.009986474E-06,1.985462159E-01,3.082303405E-01,1.340315789E-01,3.824139118E+00,2.753663063E+00,1.024075225E-02,2.921853065E-01,2.103959918E-01,3.859914094E-02,1.101296306E+00,7.930167317E-01,3.394951522E-01,1.023648530E-01,1.677710563E-01,2.768215239E-01,7.431625128E-01,9.152427665E-04,-4.576972220E-03,3.661729395E-03,4.358451813E-03,6.951042451E-03,0.000000000E+00,2.707412243E-01,1.095850530E-04,2.538784640E-03,2.395573616E+00,0.000000000E+00,1.226774788E+01,2.828296814E+02,-8.097374878E+02,2.538899040E+01,8.280811310E-01 +3.236686066E-02,2.027529144E+01,9.028349876E+00,1.276953340E+00,5.124847889E-01,4.785310626E-01,1.365326977E+01,1.949622631E+00,1.974144697E+00,1.974119782E+00,1.974119782E+00,1.402857304E+00,5.380701294E+02,1.200000048E+00,1.607679248E+00,1.607679248E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,4.557106197E-01,1.949622631E+00,4.636233449E-01,1.322792816E+01,2.452207543E-02,1.490771491E-02,4.253413677E-01,1.867744885E-02,1.520444679E+01,1.176518563E-04,9.577493370E-02,1.559425262E-03,1.269456029E+00,7.042329526E-04,5.732834935E-01,4.752017930E-02,1.065842109E-03,3.041020967E-02,9.616013616E-03,7.827951908E+00,7.827951908E+00,5.832808529E-05,4.748219624E-02,4.748219624E-02,7.552729803E-04,6.148328185E-01,6.148328185E-01,3.530503891E-04,2.874020040E-01,2.874020040E-01,2.505220473E-02,5.396929337E-04,1.539831795E-02,1.889969409E-02,1.538536644E+01,1.178913153E-04,9.596987069E-02,1.559425495E-03,1.269456148E+00,-7.115269545E-04,-5.792211890E-01,4.812152684E-02,-1.077840105E-03,-3.075253218E-02,9.676331282E-01,1.009697795E+00,1.039045691E+00,1.048621416E+00,2.726367432E+03,1.179948449E-01,6.047046930E-02,2.442541122E-01,1.104226038E-01,2.179905176E-01,3.145910054E-02,5.583662540E-02,2.756875801E-06,1.918404549E-01,8.211875916E+01,9.876584045E-06,5.543031421E-06,7.781586796E-02,7.781586796E-02,2.009986474E-06,2.059537768E-01,3.126356602E-01,1.366651654E-01,3.899279594E+00,2.791415453E+00,1.084621903E-02,3.094602823E-01,2.215373963E-01,3.948920593E-02,1.126691341E+00,8.065775037E-01,3.417842090E-01,1.045014039E-01,1.719957292E-01,2.762468457E-01,7.222957611E-01,8.746096282E-04,-4.503772594E-03,3.629162675E-03,4.211651161E-03,6.770959590E-03,0.000000000E+00,2.904449999E-01,1.161608816E-04,2.734436421E-03,2.445424080E+00,0.000000000E+00,1.171300888E+01,2.789380798E+02,-8.259925537E+02,2.711087990E+01,8.172343373E-01 +3.385185823E-02,2.120552635E+01,9.319575310E+00,1.262902856E+00,5.068458319E-01,4.926846325E-01,1.405709362E+01,1.971172929E+00,1.995570183E+00,1.995544910E+00,1.995544910E+00,1.410488009E+00,5.462460938E+02,1.200000048E+00,1.619910836E+00,1.619910836E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,4.775317311E-01,1.971172929E+00,4.776096642E-01,1.362698078E+01,2.439719997E-02,1.507495623E-02,4.301130474E-01,1.934990846E-02,1.575186634E+01,1.313712128E-04,1.069432274E-01,1.628368162E-03,1.325579286E+00,7.573812036E-04,6.165490150E-01,4.762773216E-02,1.132941106E-03,3.232465312E-02,9.884648956E-03,8.046635628E+00,8.046635628E+00,6.454667164E-05,5.254445970E-02,5.254445970E-02,7.809320232E-04,6.357206106E-01,6.357206106E-01,3.773720236E-04,3.072011173E-01,3.072011173E-01,2.491974644E-02,5.701920018E-04,1.626850665E-02,1.957716979E-02,1.593686867E+01,1.316389389E-04,1.071611792E-01,1.628368394E-03,1.325579405E+00,-7.651803899E-04,-6.228979826E-01,4.822297394E-02,-1.145563205E-03,-3.268478438E-02,9.661481380E-01,1.008634090E+00,1.064227819E+00,1.073795676E+00,2.755157471E+03,1.173124090E-01,5.945920572E-02,2.474827170E-01,1.093605682E-01,2.182370275E-01,3.144796938E-02,5.534197018E-02,2.756875801E-06,1.925684661E-01,8.251802063E+01,9.876584045E-06,5.543031421E-06,7.710282505E-02,7.710282505E-02,2.009986474E-06,2.130725831E-01,3.166594207E-01,1.391035914E-01,3.968851566E+00,2.825545788E+00,1.146117970E-02,3.270061016E-01,2.328066975E-01,4.035269842E-02,1.151328087E+00,8.196675777E-01,3.439895511E-01,1.065930277E-01,1.759438366E-01,2.756982446E-01,7.014329433E-01,8.698438178E-04,-4.494172521E-03,3.624328412E-03,4.080252722E-03,6.609620061E-03,0.000000000E+00,3.104190826E-01,1.227043103E-04,2.940203529E-03,2.494257927E+00,0.000000000E+00,1.117958927E+01,2.753046875E+02,-8.398925171E+02,2.882599068E+01,8.042049408E-01 +3.534852341E-02,2.214306831E+01,9.611464500E+00,1.249696851E+00,5.015458465E-01,5.064424872E-01,1.444962883E+01,1.991814613E+00,2.016036510E+00,2.016011000E+00,2.016011000E+00,1.417743802E+00,5.540912476E+02,1.200000048E+00,1.631562710E+00,1.631562710E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,4.991099536E-01,1.991814613E+00,4.912352264E-01,1.401574039E+01,2.422192134E-02,1.520726085E-02,4.338878989E-01,1.998226717E-02,1.626663971E+01,1.458531042E-04,1.187322661E-01,1.696714899E-03,1.381217122E+00,8.098550024E-04,6.592655182E-01,4.761246219E-02,1.197599224E-03,3.416945413E-02,1.013246644E-02,8.248372078E+00,8.248372078E+00,7.105897384E-05,5.784582719E-02,5.784582719E-02,8.062031120E-04,6.562926769E-01,6.562926769E-01,4.011908895E-04,3.265909553E-01,3.265909553E-01,2.473409660E-02,5.992723163E-04,1.709821448E-02,2.021353506E-02,1.645490456E+01,1.461493521E-04,1.189734265E-01,1.696715131E-03,1.381217241E+00,-8.181310259E-04,-6.660026312E-01,4.819918051E-02,-1.210781047E-03,-3.454555571E-02,9.646514654E-01,1.007281184E+00,1.088598728E+00,1.098131657E+00,2.782464355E+03,1.165463775E-01,5.845324695E-02,2.504531443E-01,1.082329750E-01,2.182019800E-01,3.143962473E-02,5.481094122E-02,2.756875801E-06,1.930943578E-01,8.279798126E+01,9.876584045E-06,5.543031421E-06,7.634087652E-02,7.634087652E-02,2.009986474E-06,2.199165523E-01,3.203309178E-01,1.413582116E-01,4.033179760E+00,2.856290579E+00,1.207639463E-02,3.445591927E-01,2.440174371E-01,4.119085893E-02,1.175242305E+00,8.323067427E-01,3.460914195E-01,1.086334437E-01,1.796252877E-01,2.751578987E-01,6.806901693E-01,8.257690351E-04,-4.398411140E-03,3.572642105E-03,3.951177467E-03,6.446568295E-03,0.000000000E+00,3.299699426E-01,1.289384090E-04,3.153275931E-03,2.542056799E+00,0.000000000E+00,1.066623688E+01,2.719057007E+02,-8.517288208E+02,3.048199844E+01,7.898963094E-01 +3.685694188E-02,2.308797455E+01,9.904335976E+00,1.237301111E+00,4.965710044E-01,5.198079944E-01,1.483096790E+01,2.011605263E+00,2.035604477E+00,2.035578728E+00,2.035578728E+00,1.424650908E+00,5.616160889E+02,1.200000048E+00,1.642674088E+00,1.642674088E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,5.204108357E-01,2.011605263E+00,5.045043826E-01,1.439433193E+01,2.399921231E-02,1.530357637E-02,4.366359413E-01,2.057323605E-02,1.674772072E+01,1.612843334E-04,1.312941164E-01,1.764408429E-03,1.436323285E+00,8.628424839E-04,7.024001479E-01,4.749111459E-02,1.261720434E-03,3.599893674E-02,1.035963744E-02,8.433301926E+00,8.433301926E+00,7.795391139E-05,6.345867366E-02,6.345867366E-02,8.311120910E-04,6.765698791E-01,6.765698791E-01,4.251213395E-04,3.460716307E-01,3.460716307E-01,2.450472489E-02,6.279268418E-04,1.791577414E-02,2.080744319E-02,1.693837738E+01,1.616098743E-04,1.315591335E-01,1.764408546E-03,1.436323404E+00,-8.715731092E-04,-7.095073462E-01,4.806709290E-02,-1.275411807E-03,-3.638957441E-02,9.631430507E-01,1.006155014E+00,1.112174749E+00,1.121647716E+00,2.808441895E+03,1.156908274E-01,5.744860321E-02,2.531665266E-01,1.070558280E-01,2.179237008E-01,3.143979609E-02,5.425159633E-02,2.756875801E-06,1.934370100E-01,8.296675110E+01,9.876584045E-06,5.543031421E-06,7.554126531E-02,7.554126531E-02,2.009986474E-06,2.264716774E-01,3.236632645E-01,1.434332132E-01,4.092382908E+00,2.883808374E+00,1.269918308E-02,3.623283803E-01,2.553258240E-01,4.200452939E-02,1.198457599E+00,8.445279598E-01,3.480659723E-01,1.106154993E-01,1.830471009E-01,2.746033669E-01,6.600834131E-01,8.119068225E-04,-4.356348421E-03,3.544441657E-03,3.834727686E-03,6.299181841E-03,0.000000000E+00,3.496008813E-01,1.350762905E-04,3.376834095E-03,2.588823557E+00,0.000000000E+00,1.017390728E+01,2.687237549E+02,-8.614061890E+02,3.211376572E+01,7.742210031E-01 +3.837721050E-02,2.404030228E+01,1.019835091E+01,1.225625515E+00,4.918851554E-01,5.327913761E-01,1.520140553E+01,2.030561924E+00,2.054298878E+00,2.054272890E+00,2.054272890E+00,1.431222916E+00,5.688344116E+02,1.200000048E+00,1.653263569E+00,1.653263569E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,5.414269567E-01,2.030561924E+00,5.174226165E-01,1.476290894E+01,2.373682335E-02,1.536878943E-02,4.384965897E-01,2.112348005E-02,1.719564819E+01,1.774911507E-04,1.444873363E-01,1.831409056E-03,1.490865469E+00,9.149474790E-04,7.448164821E-01,4.726891220E-02,1.323242905E-03,3.775427490E-02,1.056651585E-02,8.601711273E+00,8.601711273E+00,8.514463843E-05,6.931231171E-02,6.931231171E-02,8.556394023E-04,6.965364814E-01,6.965364814E-01,4.484767269E-04,3.650841713E-01,3.650841713E-01,2.423379198E-02,6.551367114E-04,1.869211718E-02,2.135968767E-02,1.738793373E+01,1.778458827E-04,1.447761059E-01,1.831409289E-03,1.490865588E+00,-9.240998188E-04,-7.522669435E-01,4.783236980E-02,-1.337378519E-03,-3.815758601E-02,9.616227746E-01,1.004788280E+00,1.134994388E+00,1.144384384E+00,2.833161377E+03,1.147700250E-01,5.645356700E-02,2.556433976E-01,1.058331132E-01,2.174132466E-01,3.144306317E-02,5.366610736E-02,2.756875801E-06,1.936104894E-01,8.303439331E+01,9.876584045E-06,5.543031421E-06,7.470693439E-02,7.470693439E-02,2.009986474E-06,2.327506691E-01,3.266808093E-01,1.453385800E-01,4.146746159E+00,2.908296824E+00,1.332196686E-02,3.800973892E-01,2.665805817E-01,4.279464483E-02,1.221000791E+00,8.563445210E-01,3.499006629E-01,1.125361919E-01,1.862192601E-01,2.740212083E-01,6.397041082E-01,7.658950053E-04,-4.243831150E-03,3.477936145E-03,3.721415065E-03,6.152453367E-03,0.000000000E+00,3.687489629E-01,1.408996905E-04,3.608618630E-03,2.634545565E+00,0.000000000E+00,9.701232910E+00,2.657397766E+02,-8.691878052E+02,3.368145752E+01,7.579223514E-01 +3.990941867E-02,2.500011063E+01,1.049376583E+01,1.214641213E+00,4.874767661E-01,5.453975797E-01,1.556108093E+01,2.048737288E+00,2.072174788E+00,2.072148800E+00,2.072148800E+00,1.437482715E+00,5.757568359E+02,1.200000048E+00,1.663366079E+00,1.663366079E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,5.621308684E-01,2.048737288E+00,5.299951434E-01,1.512162304E+01,2.343760245E-02,1.540246326E-02,4.394573569E-01,2.163247578E-02,1.760999870E+01,1.946386619E-04,1.584463269E-01,1.897659968E-03,1.544797301E+00,9.671386215E-04,7.873028517E-01,4.696067795E-02,1.383709488E-03,3.947948292E-02,1.075349003E-02,8.753918648E+00,8.753918648E+00,9.270930605E-05,7.547035813E-02,7.547035813E-02,8.798018098E-04,7.162060142E-01,7.162060142E-01,4.717541742E-04,3.840332627E-01,3.840332627E-01,2.392929420E-02,6.816998939E-04,1.945000887E-02,2.186972089E-02,1.780312729E+01,1.950228761E-04,1.587591022E-01,1.897660200E-03,1.544797421E+00,-9.766847361E-04,-7.950738668E-01,4.751001671E-02,-1.398235559E-03,-3.989393637E-02,9.600905776E-01,1.003601313E+00,1.157073855E+00,1.166359782E+00,2.856746582E+03,1.137796789E-01,5.546484515E-02,2.578862309E-01,1.045774519E-01,2.167031765E-01,3.145397455E-02,5.306088552E-02,2.756875801E-06,1.936308593E-01,8.300833893E+01,9.876584045E-06,5.543031421E-06,7.384681702E-02,7.384681702E-02,2.009986474E-06,2.387441993E-01,3.293964565E-01,1.470791250E-01,4.196406841E+00,2.929907560E+00,1.395066269E-02,3.980351090E-01,2.779074311E-01,4.356182739E-02,1.242889881E+00,8.677812815E-01,3.515825868E-01,1.143915281E-01,1.891499460E-01,2.733978629E-01,6.195680499E-01,7.453970611E-04,-4.176911898E-03,3.431514604E-03,3.618479241E-03,6.018827669E-03,0.000000000E+00,3.878214657E-01,1.465798559E-04,3.851344343E-03,2.679230928E+00,0.000000000E+00,9.248937607E+00,2.629395752E+02,-8.750222778E+02,3.521181488E+01,7.409138083E-01 +4.145366326E-02,2.596745872E+01,1.079070854E+01,1.204274535E+00,4.833163023E-01,5.576366186E-01,1.591027927E+01,2.066148281E+00,2.089256287E+00,2.089229822E+00,2.089229822E+00,1.443442583E+00,5.823961182E+02,1.200000048E+00,1.672998428E+00,1.672998428E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,5.825178623E-01,2.066148281E+00,5.422277451E-01,1.547063923E+01,2.310799249E-02,1.540886518E-02,4.396399856E-01,2.210114151E-02,1.799151802E+01,2.125678438E-04,1.730416566E-01,1.963119721E-03,1.598084927E+00,1.018279232E-03,8.289340734E-01,4.657146707E-02,1.441485598E-03,4.112793133E-02,1.092101913E-02,8.890296936E+00,8.890296936E+00,1.005692611E-04,8.186878264E-02,8.186878264E-02,9.035776602E-04,7.355607748E-01,7.355607748E-01,4.944007960E-04,4.024688005E-01,4.024688005E-01,2.359323949E-02,7.068184204E-04,2.016668022E-02,2.233858407E-02,1.818480873E+01,2.129811037E-04,1.733780652E-01,1.963119721E-03,1.598085046E+00,-1.028183615E-03,-8.369967341E-01,4.710546508E-02,-1.456338679E-03,-4.155171290E-02,9.585463405E-01,1.002214432E+00,1.178447247E+00,1.187609553E+00,2.879251221E+03,1.127392203E-01,5.448859558E-02,2.599122822E-01,1.032916903E-01,2.158032507E-01,3.146813810E-02,5.243755877E-02,2.756875801E-06,1.935097575E-01,8.289719391E+01,9.876584045E-06,5.543031421E-06,7.296306640E-02,7.296306640E-02,2.009986474E-06,2.444640249E-01,3.318308294E-01,1.486637294E-01,4.241618156E+00,2.948808670E+00,1.457905583E-02,4.159641862E-01,2.891834676E-01,4.430680349E-02,1.264145255E+00,8.788471818E-01,3.531053364E-01,1.161805391E-01,1.918490231E-01,2.727245390E-01,5.997456312E-01,6.987538654E-04,-4.052803386E-03,3.354049521E-03,3.519067308E-03,5.887365434E-03,0.000000000E+00,4.063656330E-01,1.519461221E-04,4.103203770E-03,2.722871780E+00,0.000000000E+00,8.815610886E+00,2.603077087E+02,-8.791457520E+02,3.667503738E+01,7.237868309E-01 +4.301003739E-02,2.694240379E+01,1.108938503E+01,1.194501162E+00,4.793939292E-01,5.695144534E-01,1.624917412E+01,2.082842112E+00,2.105592728E+00,2.105566263E+00,2.105566263E+00,1.449122906E+00,5.887628784E+02,1.200000048E+00,1.682191610E+00,1.682191610E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,6.025667191E-01,2.082842112E+00,5.541264415E-01,1.581013012E+01,2.275060862E-02,1.538799144E-02,4.390444458E-01,2.252954058E-02,1.834025764E+01,2.314221492E-04,1.883900762E-01,2.027732786E-03,1.650683522E+00,1.069156220E-03,8.703505993E-01,4.611412063E-02,1.497821533E-03,4.273528606E-02,1.106964611E-02,9.011286736E+00,9.011286736E+00,1.087921119E-04,8.856263012E-02,8.856263012E-02,9.269771399E-04,7.546092272E-01,7.546092272E-01,5.168179632E-04,4.207175970E-01,4.207175970E-01,2.323228493E-02,7.311342633E-04,2.086045034E-02,2.276634052E-02,1.853302574E+01,2.318643237E-04,1.887500286E-01,2.027733019E-03,1.650683761E+00,-1.079387381E-03,-8.786793351E-01,4.663173109E-02,-1.512947958E-03,-4.316686839E-02,9.569899440E-01,1.000968218E+00,1.199130535E+00,1.208151698E+00,2.900775391E+03,1.116456017E-01,5.352211371E-02,2.617250085E-01,1.019857824E-01,2.147409767E-01,3.148915619E-02,5.180123448E-02,2.756875801E-06,1.932608038E-01,8.270767212E+01,9.876584045E-06,5.543031421E-06,7.206276804E-02,7.206276804E-02,2.009986474E-06,2.499045879E-01,3.339963257E-01,1.500975490E-01,4.282526970E+00,2.965142965E+00,1.521189790E-02,4.340201914E-01,3.005093932E-01,4.503006488E-02,1.284781098E+00,8.895616531E-01,3.544634879E-01,1.179012731E-01,1.943252534E-01,2.719938457E-01,5.802506208E-01,6.736986106E-04,-3.967603669E-03,3.293905174E-03,3.428227268E-03,5.766905844E-03,0.000000000E+00,4.247103631E-01,1.571362809E-04,4.366526380E-03,2.765480518E+00,0.000000000E+00,8.401762962E+00,2.578324890E+02,-8.815393677E+02,3.809161758E+01,7.064481378E-01 +4.457863793E-02,2.792500877E+01,1.138989735E+01,1.185260653E+00,4.756853878E-01,5.810410380E-01,1.657804680E+01,2.098836422E+00,2.121207237E+00,2.121180534E+00,2.121180534E+00,1.454534531E+00,5.948690186E+02,1.200000048E+00,1.690961480E+00,1.690961480E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,6.222749352E-01,2.098836422E+00,5.656974912E-01,1.614027023E+01,2.237076312E-02,1.534355339E-02,4.377765357E-01,2.291879244E-02,1.865712929E+01,2.510569466E-04,2.043738365E-01,2.091458999E-03,1.702559948E+00,1.118853455E-03,9.108068943E-01,4.559335485E-02,1.551432535E-03,4.426489398E-02,1.119991206E-02,9.117330551E+00,9.117330551E+00,1.173070123E-04,9.549421072E-02,9.549421072E-02,9.499780135E-04,7.733331919E-01,7.733331919E-01,5.385645200E-04,4.384204745E-01,4.384204745E-01,2.284824476E-02,7.540274528E-04,2.151362970E-02,2.315422706E-02,1.884878731E+01,2.515272936E-04,2.047567368E-01,2.091458999E-03,1.702560186E+00,-1.129375189E-03,-9.193721414E-01,4.609382525E-02,-1.566773164E-03,-4.470258951E-02,9.554213881E-01,9.995562434E-01,1.219154119E+00,1.228017926E+00,2.921360596E+03,1.105144024E-01,5.256997794E-02,2.633391619E-01,1.006617844E-01,2.135249674E-01,3.151345253E-02,5.115313828E-02,2.756875801E-06,1.928937435E-01,8.244712067E+01,9.876584045E-06,5.543031421E-06,7.114752382E-02,7.114752382E-02,2.009986474E-06,2.550768554E-01,3.359106183E-01,1.513885409E-01,4.319361687E+00,2.979055882E+00,1.584409177E-02,4.520577490E-01,3.117853403E-01,4.573219270E-02,1.304813981E+00,8.999308944E-01,3.556554019E-01,1.195540354E-01,1.965881586E-01,2.712010741E-01,5.611357689E-01,6.275020423E-04,-3.836335149E-03,3.208833281E-03,3.341005417E-03,5.649481434E-03,0.000000000E+00,4.424948394E-01,1.620179246E-04,4.639877006E-03,2.807054281E+00,0.000000000E+00,8.005989075E+00,2.555012512E+02,-8.824135132E+02,3.943969727E+01,6.893540025E-01 +4.615955427E-02,2.891532898E+01,1.169241428E+01,1.176531911E+00,4.721822143E-01,5.922232866E-01,1.689709282E+01,2.114173651E+00,2.136144400E+00,2.136117458E+00,2.136117458E+00,1.459695339E+00,6.007247925E+02,1.200000048E+00,1.699335337E+00,1.699335337E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,6.416268349E-01,2.114173651E+00,5.769473910E-01,1.646124840E+01,2.197078243E-02,1.527584624E-02,4.358447492E-01,2.326940373E-02,1.894254684E+01,2.715945884E-04,2.210926116E-01,2.154246438E-03,1.753672481E+00,1.168009010E-03,9.508221149E-01,4.502012208E-02,1.603333047E-03,4.574570060E-02,1.131246425E-02,9.208953857E+00,9.208953857E+00,1.261715079E-04,1.027103961E-01,1.027103961E-01,9.725862765E-04,7.917374969E-01,7.917374969E-01,5.599642755E-04,4.558410347E-01,4.558410347E-01,2.244660072E-02,7.760157459E-04,2.214099281E-02,2.350276709E-02,1.913251495E+01,2.720926714E-04,2.214980572E-01,2.154246671E-03,1.753672600E+00,-1.178788370E-03,-9.595971107E-01,4.550285637E-02,-1.618836890E-03,-4.618805274E-02,9.538404346E-01,9.982525110E-01,1.238533974E+00,1.247225881E+00,2.941089111E+03,1.093435287E-01,5.162996054E-02,2.647588551E-01,9.932751209E-02,2.121783942E-01,3.154387698E-02,5.049733073E-02,2.756875801E-06,1.924200803E-01,8.212152100E+01,9.876584045E-06,5.543031421E-06,7.022294402E-02,7.022294402E-02,2.009986474E-06,2.599782944E-01,3.375854790E-01,1.525420249E-01,4.352272034E+00,2.990680456E+00,1.647942886E-02,4.701849520E-01,3.230914176E-01,4.641359672E-02,1.324255466E+00,9.099703431E-01,3.566804528E-01,1.211381927E-01,1.986466348E-01,2.703430355E-01,5.424114466E-01,5.995965912E-04,-3.738402855E-03,3.138806205E-03,3.260910278E-03,5.541349296E-03,0.000000000E+00,4.599844813E-01,1.667022298E-04,4.925264977E-03,2.847609043E+00,0.000000000E+00,7.628614426E+00,2.533043060E+02,-8.817727051E+02,4.073500824E+01,6.724058986E-01 +4.775289074E-02,2.991342926E+01,1.199701595E+01,1.168264747E+00,4.688643515E-01,6.030708551E-01,1.720659256E+01,2.128871202E+00,2.150426149E+00,2.150398970E+00,2.150398970E+00,1.464615345E+00,6.063412476E+02,1.200000048E+00,1.707327843E+00,1.707327843E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,6.606220007E-01,2.128871202E+00,5.878827572E-01,1.677325249E+01,2.155501023E-02,1.518808026E-02,4.333406687E-01,2.358264290E-02,1.919754028E+01,2.929039765E-04,2.384395897E-01,2.216057386E-03,1.803989887E+00,1.215892145E-03,9.898015857E-01,4.439867660E-02,1.652522595E-03,4.714915901E-02,1.140790619E-02,9.286648750E+00,9.286648750E+00,1.353219850E-04,1.101593748E-01,1.101593748E-01,9.947804501E-04,8.098047972E-01,8.098047972E-01,5.806685076E-04,4.726953804E-01,4.726953804E-01,2.202894539E-02,7.966214907E-04,2.272890694E-02,2.381333150E-02,1.938533211E+01,2.934288059E-04,2.388668060E-01,2.216057619E-03,1.803990006E+00,-1.226893626E-03,-9.987573028E-01,4.486331344E-02,-1.668135985E-03,-4.759463295E-02,9.522470832E-01,9.968112707E-01,1.257297397E+00,1.265804410E+00,2.959993408E+03,1.081454828E-01,5.070545152E-02,2.659968734E-01,9.798446298E-02,2.107088566E-01,3.157752007E-02,4.983474687E-02,2.756875801E-06,1.918480247E-01,8.173715973E+01,9.876584045E-06,5.543031421E-06,6.929022819E-02,6.929022819E-02,2.009986474E-06,2.646193206E-01,3.390362859E-01,1.535652131E-01,4.381465435E+00,3.000144005E+00,1.711372659E-02,4.882825017E-01,3.343464136E-01,4.707476869E-02,1.343119740E+00,9.196847677E-01,3.575403392E-01,1.226548180E-01,2.005098015E-01,2.694180906E-01,5.241159201E-01,5.546950269E-04,-3.603656543E-03,3.048961516E-03,3.184337867E-03,5.436677020E-03,0.000000000E+00,4.768944085E-01,1.710873330E-04,5.221562460E-03,2.887146711E+00,0.000000000E+00,7.268279076E+00,2.512311859E+02,-8.798031616E+02,4.196190262E+01,6.559484005E-01 +4.935874417E-02,3.091936874E+01,1.230383968E+01,1.160441041E+00,4.657244384E-01,6.135912538E-01,1.750675774E+01,2.142967224E+00,2.164092779E+00,2.164065361E+00,2.164065361E+00,1.469310403E+00,6.117281494E+02,1.200000048E+00,1.714963317E+00,1.714963317E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,6.792493463E-01,2.142967224E+00,5.985105038E-01,1.707647896E+01,2.112546749E-02,1.508074719E-02,4.302782714E-01,2.385934256E-02,1.942278671E+01,3.150875564E-04,2.564982176E-01,2.276845742E-03,1.853474855E+00,1.263019862E-03,1.028166056E+00,4.373823106E-02,1.699825982E-03,4.849880189E-02,1.148695033E-02,9.350995064E+00,9.350995064E+00,1.448065887E-04,1.178803444E-01,1.178803444E-01,1.016563969E-03,8.275376558E-01,8.275376558E-01,6.009385688E-04,4.891963005E-01,4.891963005E-01,2.159974538E-02,8.162635495E-04,2.328932658E-02,2.408678271E-02,1.960793495E+01,3.156383464E-04,2.569465637E-01,2.276845975E-03,1.853474975E+00,-1.274210634E-03,-1.037275910E+00,4.418453202E-02,-1.715502469E-03,-4.894607514E-02,9.506412745E-01,9.954517484E-01,1.275460362E+00,1.283770800E+00,2.978142090E+03,1.069188714E-01,4.979462177E-02,2.670578659E-01,9.663877636E-02,2.091357708E-01,3.161662072E-02,4.916860908E-02,2.756875801E-06,1.911873370E-01,8.129930115E+01,9.876584045E-06,5.543031421E-06,6.835379452E-02,6.835379452E-02,2.009986474E-06,2.689997256E-01,3.402741253E-01,1.544633955E-01,4.407092094E+00,3.007569551E+00,1.774998382E-02,5.064359307E-01,3.456136882E-01,4.771606997E-02,1.361417055E+00,9.290869236E-01,3.582374752E-01,1.241041198E-01,2.021863312E-01,2.684257030E-01,5.062554479E-01,5.253037671E-04,-3.497565165E-03,2.972261282E-03,3.113733139E-03,5.339905620E-03,0.000000000E+00,4.934389889E-01,1.752631797E-04,5.530511495E-03,2.925685883E+00,0.000000000E+00,6.925150871E+00,2.492737579E+02,-8.765256958E+02,4.313251114E+01,6.398860216E-01 +5.097721145E-02,3.193321037E+01,1.261295128E+01,1.153019190E+00,4.627457857E-01,6.237941384E-01,1.779786110E+01,2.156478882E+00,2.177164555E+00,2.177137136E+00,2.177137136E+00,1.473789334E+00,6.168958130E+02,1.200000048E+00,1.722255111E+00,1.722255111E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,6.975104213E-01,2.156478882E+00,6.088375449E-01,1.737112617E+01,2.068568021E-02,1.495661307E-02,4.267365336E-01,2.410087548E-02,1.961940765E+01,3.380264970E-04,2.751717567E-01,2.336577745E-03,1.902099967E+00,1.308815437E-03,1.065446138E+00,4.304253682E-02,1.744471374E-03,4.977260530E-02,1.155024208E-02,9.402518272E+00,9.402518272E+00,1.545682317E-04,1.258268505E-01,1.258268505E-01,1.037917100E-03,8.449202776E-01,8.449202776E-01,6.205013487E-04,5.051214695E-01,5.051214695E-01,2.116036415E-02,8.345771930E-04,2.381184511E-02,2.432458661E-02,1.980152130E+01,3.386021126E-04,2.756403387E-01,2.336577978E-03,1.902100086E+00,-1.320161507E-03,-1.074682474E+00,4.347044975E-02,-1.760163694E-03,-5.022033304E-02,9.490227699E-01,9.939779639E-01,1.293047667E+00,1.301151037E+00,2.995561768E+03,1.056737527E-01,4.889997467E-02,2.679530680E-01,9.529153258E-02,2.074658424E-01,3.165880218E-02,4.849962890E-02,2.756875801E-06,1.904449612E-01,8.081332397E+01,9.876584045E-06,5.543031421E-06,6.741455942E-02,6.741455942E-02,2.009986474E-06,2.731295824E-01,3.413124979E-01,1.552431583E-01,4.429339886E+00,3.013070345E+00,1.838476583E-02,5.245472789E-01,3.568270802E-01,4.833794013E-02,1.379160047E+00,9.381807446E-01,3.587756455E-01,1.254876256E-01,2.036848217E-01,2.673662901E-01,4.888564944E-01,4.823302152E-04,-3.362311050E-03,2.879980719E-03,3.046445316E-03,5.246722605E-03,0.000000000E+00,5.093955398E-01,1.791521499E-04,5.851238500E-03,2.963232517E+00,0.000000000E+00,6.597940922E+00,2.474233246E+02,-8.721042480E+02,4.423596954E+01,6.244792938E-01 +5.260838941E-02,3.295501328E+01,1.292446232E+01,1.145983100E+00,4.599219561E-01,6.336873174E-01,1.808012962E+01,2.169440746E+00,2.189678192E+00,2.189650536E+00,2.189650536E+00,1.478066087E+00,6.218534546E+02,1.200000048E+00,1.729224920E+00,1.729224920E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,7.153979540E-01,2.169440746E+00,6.188710332E-01,1.765739822E+01,2.023735642E-02,1.481628325E-02,4.227326810E-01,2.430830151E-02,1.978826523E+01,3.618046467E-04,2.945284545E-01,2.395214047E-03,1.949832916E+00,1.353698201E-03,1.101983190E+00,4.231924564E-02,1.787131885E-03,5.098978058E-02,1.159852743E-02,9.441824913E+00,9.441824913E+00,1.646464225E-04,1.340310425E-01,1.340310425E-01,1.058841823E-03,8.619540930E-01,8.619540930E-01,6.395683158E-04,5.206429958E-01,5.206429958E-01,2.071440406E-02,8.519027615E-04,2.430617251E-02,2.452783659E-02,1.996697807E+01,3.624041274E-04,2.950164378E-01,2.395214047E-03,1.949833035E+00,-1.365168486E-03,-1.111320496E+00,4.272881523E-02,-1.802799059E-03,-5.143678933E-02,9.473916292E-01,9.925643802E-01,1.310074925E+00,1.317962170E+00,3.012309570E+03,1.044092104E-01,4.801998287E-02,2.686874270E-01,9.394751489E-02,2.057153136E-01,3.170581535E-02,4.783035815E-02,2.756875801E-06,1.896291673E-01,8.028382874E+01,9.876584045E-06,5.543031421E-06,6.647598743E-02,6.647598743E-02,2.009986474E-06,2.770105004E-01,3.421617448E-01,1.559097022E-01,4.448357582E+00,3.016759634E+00,1.902042329E-02,5.426836610E-01,3.680363595E-01,4.894071445E-02,1.396358252E+00,9.469771981E-01,3.591589332E-01,1.268060952E-01,2.050135881E-01,2.662408948E-01,4.719213545E-01,4.525130207E-04,-3.251750022E-03,2.799236914E-03,2.984195249E-03,5.160310306E-03,0.000000000E+00,5.249374509E-01,1.828273234E-04,6.185261533E-03,2.999807358E+00,0.000000000E+00,6.286690712E+00,2.456730347E+02,-8.665699463E+02,4.528169632E+01,6.096476912E-01 +5.425237864E-02,3.398484421E+01,1.323842716E+01,1.139298081E+00,4.572390318E-01,6.432801485E-01,1.835383034E+01,2.181869030E+00,2.201652527E+00,2.201624632E+00,2.201624632E+00,1.482149005E+00,6.266105347E+02,1.200000048E+00,1.735885024E+00,1.735885024E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,7.329151034E-01,2.181869030E+00,6.286180019E-01,1.793549538E+01,1.978333667E-02,1.466213353E-02,4.183345437E-01,2.448306605E-02,1.993053246E+01,3.863143211E-04,3.144806325E-01,2.452726010E-03,1.996650815E+00,1.397217857E-03,1.137410402E+00,4.157159477E-02,1.827218104E-03,5.213350430E-02,1.163247786E-02,9.469462395E+00,9.469462395E+00,1.749899675E-04,1.424512416E-01,1.424512416E-01,1.079321024E-03,8.786253333E-01,8.786253333E-01,6.579278852E-04,5.355886817E-01,5.355886817E-01,2.026300505E-02,8.679647581E-04,2.476444654E-02,2.469805628E-02,2.010554504E+01,3.869363572E-04,3.149870038E-01,2.452726243E-03,1.996650934E+00,-1.408780692E-03,-1.146823287E+00,4.196299240E-02,-1.842819736E-03,-5.257864669E-02,9.457476139E-01,9.910553694E-01,1.326565027E+00,1.334228039E+00,3.028407715E+03,1.031333432E-01,4.715648293E-02,2.692709267E-01,9.260749817E-02,2.038900256E-01,3.175571188E-02,4.716133326E-02,2.756875801E-06,1.887459159E-01,7.971539307E+01,9.876584045E-06,5.543031421E-06,6.553876400E-02,6.553876400E-02,2.009986474E-06,2.806521654E-01,3.428339064E-01,1.564690620E-01,4.464316845E+00,3.018739223E+00,1.965413429E-02,5.607644320E-01,3.791875243E-01,4.952481017E-02,1.413023472E+00,9.554799795E-01,3.593923748E-01,1.280613244E-01,2.061806172E-01,2.650512755E-01,4.554666877E-01,4.119095684E-04,-3.118310124E-03,2.706400584E-03,2.925002249E-03,5.077432375E-03,0.000000000E+00,5.398925543E-01,1.862301724E-04,6.531917490E-03,3.035420179E+00,0.000000000E+00,5.990196228E+00,2.440156097E+02,-8.600664062E+02,4.626245880E+01,5.955951810E-01 +5.590927973E-02,3.502276611E+01,1.355493736E+01,1.132949948E+00,4.546913207E-01,6.525807381E-01,1.861919022E+01,2.193795204E+00,2.213120222E+00,2.213092089E+00,2.213092089E+00,1.486050248E+00,6.311758423E+02,1.200000048E+00,1.742254734E+00,1.742254734E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,7.500579357E-01,2.193795204E+00,6.380859613E-01,1.820562935E+01,1.932504214E-02,1.449482236E-02,4.135608673E-01,2.462637611E-02,2.004719353E+01,4.116221971E-04,3.350825906E-01,2.509081736E-03,2.042527437E+00,1.439715619E-03,1.172005892E+00,4.080586880E-02,1.865281723E-03,5.321952328E-02,1.165285055E-02,9.486046791E+00,9.486046791E+00,1.856304734E-04,1.511131823E-01,1.511131823E-01,1.099356217E-03,8.949350715E-01,8.949350715E-01,6.757516530E-04,5.500981808E-01,5.500981808E-01,1.980904117E-02,8.830407751E-04,2.519459091E-02,2.483648807E-02,2.021823692E+01,4.122657119E-04,3.356064558E-01,2.509081969E-03,2.042527437E+00,-1.451342134E-03,-1.181470513E+00,4.117934033E-02,-1.880782773E-03,-5.366179347E-02,9.440907240E-01,9.895893335E-01,1.342533231E+00,1.349965096E+00,3.043905029E+03,1.018455997E-01,4.630820453E-02,2.697086632E-01,9.127521515E-02,2.020035237E-01,3.180985153E-02,4.649456590E-02,2.756875801E-06,1.878021806E-01,7.911203003E+01,9.876584045E-06,5.543031421E-06,6.460561603E-02,6.460561603E-02,2.009986474E-06,2.840577066E-01,3.433385789E-01,1.569262445E-01,4.477361202E+00,3.019112825E+00,2.028772421E-02,5.788417459E-01,3.903193772E-01,5.009055510E-02,1.429165125E+00,9.636987448E-01,3.594809473E-01,1.292544603E-01,2.071937323E-01,2.637992799E-01,4.394911826E-01,3.824647865E-04,-3.006191226E-03,2.623726614E-03,2.870095661E-03,5.000401288E-03,0.000000000E+00,5.544016361E-01,1.894203015E-04,6.892536767E-03,3.070092916E+00,0.000000000E+00,5.708402157E+00,2.424452209E+02,-8.526309204E+02,4.718563461E+01,5.822669268E-01 +5.757919699E-02,3.606883621E+01,1.387403774E+01,1.126909614E+00,4.522671402E-01,6.615982056E-01,1.887647438E+01,2.205234528E+00,2.224099398E+00,2.224071264E+00,2.224071264E+00,1.489777446E+00,6.355579224E+02,1.200000048E+00,1.748345256E+00,1.748345256E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,7.668309808E-01,2.205234528E+00,6.472818255E-01,1.846800423E+01,1.886473224E-02,1.431638375E-02,4.084697366E-01,2.473970689E-02,2.013945198E+01,4.376303987E-04,3.562546670E-01,2.564258873E-03,2.087444782E+00,1.480843755E-03,1.205486417E+00,4.002480581E-02,1.900878153E-03,5.423514917E-02,1.166032255E-02,9.492129326E+00,9.492129326E+00,1.965219417E-04,1.599794328E-01,1.599794328E-01,1.118933316E-03,9.108718634E-01,9.108718634E-01,6.928774528E-04,5.640394688E-01,5.640394688E-01,1.935344003E-02,8.969253395E-04,2.559074014E-02,2.494467795E-02,2.030630875E+01,4.382940533E-04,3.567949235E-01,2.564259106E-03,2.087444782E+00,-1.492505427E-03,-1.214979649E+00,4.038069770E-02,-1.916245092E-03,-5.467358977E-02,9.424207807E-01,9.880431890E-01,1.358000398E+00,1.365195036E+00,3.058820068E+03,1.005524620E-01,4.547647014E-02,2.700096965E-01,8.995120227E-02,2.000609040E-01,3.186663240E-02,4.583045840E-02,2.756875801E-06,1.868031025E-01,7.847763062E+01,9.876584045E-06,5.543031421E-06,6.367702782E-02,6.367702782E-02,2.009986474E-06,2.872365117E-01,3.436865211E-01,1.572868377E-01,4.487649441E+00,3.017972469E+00,2.091886289E-02,5.968492031E-01,4.013876915E-01,5.063834786E-02,1.444794416E+00,9.716371298E-01,3.594303429E-01,1.303873956E-01,2.080603093E-01,2.624874711E-01,4.240036905E-01,3.445120528E-04,-2.876322716E-03,2.531810664E-03,2.817963716E-03,4.926736467E-03,0.000000000E+00,5.683329701E-01,1.923541713E-04,7.266629487E-03,3.103838444E+00,0.000000000E+00,5.440198421E+00,2.409557343E+02,-8.443886719E+02,4.804672241E+01,5.698319674E-01 +5.926223099E-02,3.712312698E+01,1.419580460E+01,1.121164560E+00,4.499614537E-01,6.703407168E-01,1.912590981E+01,2.216215372E+00,2.234618902E+00,2.234590769E+00,2.234590769E+00,1.493341208E+00,6.397649536E+02,1.200000048E+00,1.754173636E+00,1.754173636E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,7.832330465E-01,2.216215372E+00,6.562132239E-01,1.872282982E+01,1.840356737E-02,1.412748825E-02,4.030802250E-01,2.482435666E-02,2.020836067E+01,4.643901484E-04,3.780385554E-01,2.618233208E-03,2.131382465E+00,1.520881080E-03,1.238078952E+00,3.923350945E-02,1.934461878E-03,5.519334599E-02,1.165564544E-02,9.488322258E+00,9.488322258E+00,2.076889505E-04,1.690699756E-01,1.690699756E-01,1.138053834E-03,9.264370203E-01,9.264370203E-01,7.094452158E-04,5.775265098E-01,5.775265098E-01,1.889847219E-02,9.098460432E-04,2.595938928E-02,2.502395399E-02,2.037084389E+01,4.650727496E-04,3.785942197E-01,2.618233440E-03,2.131382704E+00,-1.532551832E-03,-1.247579575E+00,3.957221285E-02,-1.949665253E-03,-5.562712252E-02,9.407377839E-01,9.865261912E-01,1.372981429E+00,1.379933834E+00,3.073194092E+03,9.925363213E-02,4.466021061E-02,2.701792121E-01,8.863834292E-02,1.980734169E-01,3.192710504E-02,4.517059028E-02,2.756875801E-06,1.857546121E-01,7.781564331E+01,9.876584045E-06,5.543031421E-06,6.275513768E-02,6.275513768E-02,2.009986474E-06,2.901927531E-01,3.438867033E-01,1.575556248E-01,4.495318413E+00,3.015413761E+00,2.154895850E-02,6.148268580E-01,4.124225378E-01,5.116852373E-02,1.459921241E+00,9.793041348E-01,3.592458963E-01,1.314615011E-01,2.087876052E-01,2.611181438E-01,4.089996517E-01,3.160204797E-04,-2.764893463E-03,2.448872896E-03,2.769498155E-03,4.858142696E-03,0.000000000E+00,5.818014741E-01,1.950806472E-04,7.655368652E-03,3.136679649E+00,0.000000000E+00,5.185455799E+00,2.395421906E+02,-8.353796387E+02,4.885156631E+01,5.582641363E-01 +6.095848605E-02,3.818569565E+01,1.452027512E+01,1.115690351E+00,4.477644563E-01,6.788169742E-01,1.936775208E+01,2.226752520E+00,2.244695902E+00,2.244667530E+00,2.244667530E+00,1.496748447E+00,6.438049316E+02,1.200000048E+00,1.759750366E+00,1.759750366E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,7.992697358E-01,2.226752520E+00,6.648870707E-01,1.897031021E+01,1.794333011E-02,1.392986719E-02,3.974417746E-01,2.488180250E-02,2.025512505E+01,4.918121849E-04,4.003615379E-01,2.670988906E-03,2.174328566E+00,1.559562748E-03,1.269567847E+00,3.843425214E-02,1.965702046E-03,5.608468130E-02,1.163949072E-02,9.475171089E+00,9.475171089E+00,2.190900559E-04,1.783510894E-01,1.783510894E-01,1.156706945E-03,9.416216016E-01,9.416216016E-01,7.253324147E-04,5.904595852E-01,5.904595852E-01,1.844487526E-02,9.216521285E-04,2.629623562E-02,2.507585660E-02,2.041309547E+01,4.925123067E-04,4.009315073E-01,2.670988906E-03,2.174328566E+00,-1.571217435E-03,-1.279055476E+00,3.875622898E-02,-1.980714966E-03,-5.651302263E-02,9.390414953E-01,9.849413633E-01,1.387495637E+00,1.394201636E+00,3.087044189E+03,9.795431793E-02,4.386036471E-02,2.702253461E-01,8.733699471E-02,1.960454881E-01,3.198992833E-02,4.451525956E-02,2.756875801E-06,1.846611351E-01,7.712939453E+01,9.876584045E-06,5.543031421E-06,6.184028834E-02,6.184028834E-02,2.009986474E-06,2.929355502E-01,3.439487219E-01,1.577377468E-01,4.500514507E+00,3.011519909E+00,2.217608504E-02,6.327197552E-01,4.233875573E-01,5.168147013E-02,1.474556446E+00,9.867035747E-01,3.589334488E-01,1.324786693E-01,2.093824148E-01,2.596942186E-01,3.944817781E-01,2.808686113E-04,-2.639875980E-03,2.359007252E-03,2.723520156E-03,4.792677239E-03,0.000000000E+00,5.947077870E-01,1.975678315E-04,8.058409207E-03,3.168631554E+00,0.000000000E+00,4.943161488E+00,2.381994019E+02,-8.257124023E+02,4.959766388E+01,5.477073193E-01 +6.266806275E-02,3.925661087E+01,1.484751415E+01,1.110475779E+00,4.456716478E-01,6.870350838E-01,1.960222816E+01,2.236871243E+00,2.254356146E+00,2.254327774E+00,2.254327774E+00,1.500008583E+00,6.476852417E+02,1.200000048E+00,1.765090585E+00,1.765090585E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,8.149418831E-01,2.236871243E+00,6.733108759E-01,1.921065521E+01,1.748494431E-02,1.372417528E-02,3.915730417E-01,2.491338551E-02,2.028083420E+01,5.199338193E-04,4.232540727E-01,2.722508973E-03,2.216268539E+00,1.597117516E-03,1.300139546E+00,3.763113916E-02,1.994975377E-03,5.691989139E-02,1.161258947E-02,9.453271866E+00,9.453271866E+00,2.307435789E-04,1.878376901E-01,1.878376901E-01,1.174894976E-03,9.564276338E-01,9.564276338E-01,7.406537188E-04,6.029319763E-01,6.029319763E-01,1.799441315E-02,9.325311403E-04,2.660663240E-02,2.510174923E-02,2.043417358E+01,5.206502392E-04,4.238373041E-01,2.722508973E-03,2.216268778E+00,-1.608733088E-03,-1.309595227E+00,3.793687373E-02,-2.009774093E-03,-5.734212324E-02,9.373319149E-01,9.833747745E-01,1.401557326E+00,1.408013582E+00,3.100405518E+03,9.665437788E-02,4.307602346E-02,2.701532841E-01,8.604937047E-02,1.939864159E-01,3.205591068E-02,4.386569560E-02,2.756875801E-06,1.835277528E-01,7.642184448E+01,9.876584045E-06,5.543031421E-06,6.093414128E-02,6.093414128E-02,2.009986474E-06,2.954699397E-01,3.438809216E-01,1.578377485E-01,4.503367901E+00,3.006378651E+00,2.280130424E-02,6.505583525E-01,4.343057871E-01,5.217754096E-02,1.488710165E+00,9.938437343E-01,3.584983945E-01,1.334403604E-01,2.098513991E-01,2.582181692E-01,3.804427981E-01,2.537349646E-04,-2.530826954E-03,2.277092077E-03,2.680691425E-03,4.731623922E-03,0.000000000E+00,6.071460843E-01,1.998560183E-04,8.476790972E-03,3.199717760E+00,0.000000000E+00,4.713134766E+00,2.369231415E+02,-8.154276123E+02,5.028970718E+01,5.381554365E-01 +6.439106911E-02,4.033593750E+01,1.517755222E+01,1.105500102E+00,4.436747432E-01,6.950035095E-01,1.982958221E+01,2.246585608E+00,2.263615608E+00,2.263586998E+00,2.263586998E+00,1.503128052E+00,6.514132080E+02,1.200000048E+00,1.770203710E+00,1.770203710E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,8.302561641E-01,2.246585608E+00,6.814916730E-01,1.944406509E+01,1.702979952E-02,1.351188216E-02,3.855159879E-01,2.492055483E-02,2.028667068E+01,5.486731534E-04,4.466494620E-01,2.772784792E-03,2.257195950E+00,1.633346896E-03,1.329632163E+00,3.682602569E-02,2.022040309E-03,5.769209936E-02,1.157559548E-02,9.423156738E+00,9.423156738E+00,2.426120482E-04,1.974992603E-01,1.974992603E-01,1.192610012E-03,9.708486795E-01,9.708486795E-01,7.553180330E-04,6.148694754E-01,6.148694754E-01,1.754765958E-02,9.423746960E-04,2.688748203E-02,2.510313690E-02,2.043530273E+01,5.494045909E-04,4.472448826E-01,2.772784792E-03,2.257195950E+00,-1.644901698E-03,-1.339038372E+00,3.711605072E-02,-2.036603633E-03,-5.810761452E-02,9.356089234E-01,9.817501307E-01,1.415184379E+00,1.421388268E+00,3.113293213E+03,9.535797685E-02,4.230783880E-02,2.699704766E-01,8.477569371E-02,1.919000596E-01,3.212393075E-02,4.322211072E-02,2.756875801E-06,1.823582798E-01,7.569580841E+01,9.876584045E-06,5.543031421E-06,6.003693119E-02,6.003693119E-02,2.009986474E-06,2.978046536E-01,3.436920047E-01,1.578603983E-01,4.504014015E+00,3.000066042E+00,2.342302538E-02,6.682970524E-01,4.451473057E-01,5.265712366E-02,1.502393365E+00,1.000728965E+00,3.579464257E-01,1.343483925E-01,2.102007568E-01,2.566929162E-01,3.668806553E-01,2.214323031E-04,-2.411546651E-03,2.190114232E-03,2.640076214E-03,4.673432559E-03,0.000000000E+00,6.190428138E-01,2.019223029E-04,8.910289966E-03,3.229954958E+00,0.000000000E+00,4.494458675E+00,2.357089539E+02,-8.046187744E+02,5.092664337E+01,5.297234058E-01 +6.612760574E-02,4.142374420E+01,1.551044369E+01,1.100753546E+00,4.417698085E-01,7.027301192E-01,2.005003548E+01,2.255918264E+00,2.272496939E+00,2.272468090E+00,2.272468090E+00,1.506114960E+00,6.549957886E+02,1.200000048E+00,1.775103092E+00,1.775103092E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,8.452151418E-01,2.255918264E+00,6.894365549E-01,1.967074585E+01,1.657861657E-02,1.329360530E-02,3.792881966E-01,2.490465529E-02,2.027372932E+01,5.780553911E-04,4.705681801E-01,2.821807051E-03,2.297102690E+00,1.668439829E-03,1.358199716E+00,3.602216765E-02,2.047210466E-03,5.841024220E-02,1.152920909E-02,9.385396004E+00,9.385396004E+00,2.547083423E-04,2.073462754E-01,2.073462754E-01,1.209855778E-03,9.848876595E-01,9.848876595E-01,7.694198866E-04,6.263491511E-01,6.263491511E-01,1.710596681E-02,9.513382684E-04,2.714322880E-02,2.508138679E-02,2.041759682E+01,5.788005656E-04,4.711747468E-01,2.821807051E-03,2.297102690E+00,-1.679913956E-03,-1.367540240E+00,3.629702702E-02,-2.061520237E-03,-5.881852657E-02,9.338724017E-01,9.801350832E-01,1.428390503E+00,1.434340000E+00,3.125737549E+03,9.406507760E-02,4.155502468E-02,2.696820498E-01,8.351764828E-02,1.897940636E-01,3.219459578E-02,4.258546233E-02,2.756875801E-06,1.811570674E-01,7.495383453E+01,9.876584045E-06,5.543031421E-06,5.914993212E-02,5.914993212E-02,2.009986474E-06,2.999453545E-01,3.433896601E-01,1.578099877E-01,4.502575397E+00,2.992662191E+00,2.404204011E-02,6.859585643E-01,4.559295177E-01,5.312057585E-02,1.515616536E+00,1.007367134E+00,3.572826982E-01,1.352041811E-01,2.104365975E-01,2.551208436E-01,3.537859619E-01,1.959215297E-04,-2.306112088E-03,2.110190457E-03,2.602176508E-03,4.619091284E-03,0.000000000E+00,6.304755211E-01,2.038000966E-04,9.359836578E-03,3.259367228E+00,0.000000000E+00,4.286917210E+00,2.345532227E+02,-7.933256226E+02,5.151230240E+01,5.224053264E-01 +6.787778437E-02,4.252009201E+01,1.584621620E+01,1.096218467E+00,4.399497211E-01,7.102230787E-01,2.026382065E+01,2.264882565E+00,2.281014919E+00,2.280986071E+00,2.280986071E+00,1.508975148E+00,6.584395142E+02,1.200000048E+00,1.779797554E+00,1.779797554E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,8.598260283E-01,2.264882565E+00,6.971524954E-01,1.989089394E+01,1.613246463E-02,1.307058800E-02,3.729251325E-01,2.486709692E-02,2.024315453E+01,6.080050953E-04,4.949488044E-01,2.869573422E-03,2.335986853E+00,1.702249981E-03,1.385722995E+00,3.522104770E-02,2.070314251E-03,5.906943232E-02,1.147405989E-02,9.340501785E+00,9.340501785E+00,2.669983660E-04,2.173510343E-01,2.173510343E-01,1.226627384E-03,9.985406399E-01,9.985406399E-01,7.828929229E-04,6.373169422E-01,6.373169422E-01,1.666975766E-02,9.593460127E-04,2.737170272E-02,2.503794804E-02,2.038223457E+01,6.087626098E-04,4.955655038E-01,2.869573422E-03,2.335987091E+00,-1.713625272E-03,-1.394983053E+00,3.548131511E-02,-2.084354404E-03,-5.947002023E-02,9.321222305E-01,9.784699678E-01,1.441192150E+00,1.446886063E+00,3.137752197E+03,9.277901053E-02,4.081801698E-02,2.692947984E-01,8.227534592E-02,1.876717508E-01,3.226695955E-02,4.195588455E-02,2.756875801E-06,1.799274534E-01,7.419829559E+01,9.876584045E-06,5.543031421E-06,5.827329308E-02,5.827329308E-02,2.009986474E-06,3.019004762E-01,3.429817557E-01,1.576908827E-01,4.499177456E+00,2.984237194E+00,2.465702407E-02,7.035050392E-01,4.666277468E-01,5.356830359E-02,1.528390884E+00,1.013762832E+00,3.565125167E-01,1.360094398E-01,2.105645835E-01,2.535046339E-01,3.411530554E-01,1.664396405E-04,-2.193135675E-03,2.026696224E-03,2.566235606E-03,4.567338619E-03,0.000000000E+00,6.413909197E-01,2.054734505E-04,9.825307876E-03,3.287971973E+00,0.000000000E+00,4.089686871E+00,2.334521484E+02,-7.816284180E+02,5.204663086E+01,5.162708759E-01 +6.964171678E-02,4.362505341E+01,1.618491554E+01,1.091886163E+00,4.382110238E-01,7.174898386E-01,2.047115326E+01,2.273498535E+00,2.289190292E+00,2.289161444E+00,2.289161444E+00,1.511715889E+00,6.617507935E+02,1.200000048E+00,1.784299016E+00,1.784299016E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,8.740926981E-01,2.273498535E+00,7.046464682E-01,2.010470963E+01,1.569188759E-02,1.284339745E-02,3.664430380E-01,2.480919473E-02,2.019601822E+01,6.385365850E-04,5.198031068E-01,2.916081576E-03,2.373847246E+00,1.734934747E-03,1.412330151E+00,3.442522883E-02,2.091614297E-03,5.967716128E-02,1.141080912E-02,9.289011955E+00,9.289011955E+00,2.794903412E-04,2.275201529E-01,2.275201529E-01,1.242929720E-03,1.011811614E+00,1.011811614E+00,7.958156057E-04,6.478366852E-01,6.478366852E-01,1.624005474E-02,9.665276739E-04,2.757660672E-02,2.497415803E-02,2.033030701E+01,6.393053336E-04,5.204288960E-01,2.916081809E-03,2.373847246E+00,-1.746194437E-03,-1.421496153E+00,3.467147052E-02,-2.105371328E-03,-6.006967276E-02,9.303582907E-01,9.768075943E-01,1.453602314E+00,1.459040046E+00,3.149363770E+03,9.149979800E-02,4.009614140E-02,2.688137591E-01,8.105004579E-02,1.855394244E-01,3.234146908E-02,4.133411497E-02,2.756875801E-06,1.786731631E-01,7.343136597E+01,9.876584045E-06,5.543031421E-06,5.740798265E-02,5.740798265E-02,2.009986474E-06,3.036760092E-01,3.424754441E-01,1.575071514E-01,4.493935585E+00,2.974864006E+00,2.526855655E-02,7.209530473E-01,4.772549272E-01,5.400066823E-02,1.540726900E+00,1.019923687E+00,3.556406498E-01,1.367655396E-01,2.105902880E-01,2.518464029E-01,3.289708793E-01,1.427078678E-04,-2.092178911E-03,1.949470956E-03,2.532640472E-03,4.518946167E-03,0.000000000E+00,6.518533230E-01,2.069701877E-04,1.030754298E-02,3.315793037E+00,0.000000000E+00,3.902530670E+00,2.324026031E+02,-7.695645142E+02,5.253281021E+01,5.112861991E-01 +7.141949236E-02,4.473869324E+01,1.652656746E+01,1.087741613E+00,4.365476668E-01,7.245382667E-01,2.067225456E+01,2.281778812E+00,2.297036409E+00,2.297007322E+00,2.297007322E+00,1.514342427E+00,6.649356079E+02,1.200000048E+00,1.788615227E+00,1.788615227E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,8.880228400E-01,2.281778812E+00,7.119251490E-01,2.031238365E+01,1.525768917E-02,1.261307951E-02,3.598716855E-01,2.473229915E-02,2.013342094E+01,6.695801276E-04,5.450742245E-01,2.961335937E-03,2.410686731E+00,1.766389003E-03,1.437935591E+00,3.363585845E-02,2.110993024E-03,6.023006514E-02,1.134005468E-02,9.231413841E+00,9.231413841E+00,2.921531268E-04,2.378283590E-01,2.378283590E-01,1.258760924E-03,1.024699092E+00,1.024699092E+00,8.081409032E-04,6.578701138E-01,6.578701138E-01,1.581715234E-02,9.728322038E-04,2.775648609E-02,2.489139885E-02,2.026293755E+01,6.703587715E-04,5.457080603E-01,2.961336169E-03,2.410686731E+00,-1.777517959E-03,-1.446995139E+00,3.386866301E-02,-2.124455525E-03,-6.061417237E-02,9.285805225E-01,9.751013517E-01,1.465636373E+00,1.470817685E+00,3.160584473E+03,9.023007005E-02,3.938965127E-02,2.682451606E-01,7.984177768E-02,1.833999008E-01,3.241732344E-02,4.072023928E-02,2.756875801E-06,1.773971170E-01,7.265505219E+01,9.876584045E-06,5.543031421E-06,5.655407533E-02,5.655407533E-02,2.009986474E-06,3.052801192E-01,3.418777883E-01,1.572628319E-01,4.486964703E+00,2.964606762E+00,2.587553300E-02,7.382710576E-01,4.877906144E-01,5.441807956E-02,1.552636385E+00,1.025854945E+00,3.546718955E-01,1.374740601E-01,2.105188370E-01,2.501485050E-01,3.172312379E-01,1.159620588E-04,-1.985819545E-03,1.869857428E-03,2.500770614E-03,4.472874571E-03,0.000000000E+00,6.618250012E-01,2.082796273E-04,1.080650371E-02,3.342848778E+00,0.000000000E+00,3.724711895E+00,2.314013519E+02,-7.572024536E+02,5.297148132E+01,5.074546337E-01 +7.321123779E-02,4.586108017E+01,1.687121201E+01,1.083776951E+00,4.349565208E-01,7.313755155E-01,2.086733246E+01,2.289741278E+00,2.304571390E+00,2.304542303E+00,2.304542303E+00,1.516861200E+00,6.679996948E+02,1.200000048E+00,1.792756915E+00,1.792756915E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,9.016214013E-01,2.289741278E+00,7.189953327E-01,2.051410675E+01,1.483026799E-02,1.238014456E-02,3.532256782E-01,2.463768050E-02,2.005639648E+01,7.011409616E-04,5.707664490E-01,3.005340695E-03,2.446508884E+00,1.796744182E-03,1.462646365E+00,3.285491467E-02,2.128671622E-03,6.073446572E-02,1.126241405E-02,9.168210030E+00,9.168210030E+00,3.049909137E-04,2.482790053E-01,2.482790053E-01,1.274127513E-03,1.037208319E+00,1.037208319E+00,8.199342410E-04,6.674705744E-01,6.674705744E-01,1.540180389E-02,9.783684509E-04,2.791444585E-02,2.479095757E-02,2.018117142E+01,7.019283366E-04,5.714074373E-01,3.005340928E-03,2.446509123E+00,-1.807728666E-03,-1.471588373E+00,3.307485580E-02,-2.141830279E-03,-6.110990420E-02,9.267887473E-01,9.733925462E-01,1.477306604E+00,1.482231855E+00,3.171437500E+03,8.896990120E-02,3.869796917E-02,2.675938308E-01,7.865148038E-02,1.812583804E-01,3.249483928E-02,4.011480510E-02,2.756875801E-06,1.761024892E-01,7.187120819E+01,9.876584045E-06,5.543031421E-06,5.571230128E-02,5.571230128E-02,2.009986474E-06,3.067189455E-01,3.411954045E-01,1.569616944E-01,4.478372574E+00,2.953532457E+00,2.647836506E-02,7.554708719E-01,4.982443452E-01,5.482091382E-02,1.564129949E+00,1.031563759E+00,3.536105454E-01,1.381362528E-01,2.103553563E-01,2.484126091E-01,3.059220016E-01,9.408186452E-05,-1.889905077E-03,1.795823220E-03,2.470932202E-03,4.429738037E-03,0.000000000E+00,6.713598967E-01,2.094251104E-04,1.132295560E-02,3.369162560E+00,0.000000000E+00,3.555984735E+00,2.304456482E+02,-7.445768433E+02,5.336530685E+01,5.046903491E-01 +7.501705736E-02,4.699228287E+01,1.721886826E+01,1.079979539E+00,4.334324896E-01,7.380089164E-01,2.105659485E+01,2.297397852E+00,2.311808109E+00,2.311778784E+00,2.311778784E+00,1.519276977E+00,6.709486084E+02,1.200000048E+00,1.796731353E+00,1.796731353E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,9.148962498E-01,2.297397852E+00,7.258634567E-01,2.071006393E+01,1.441021357E-02,1.214546710E-02,3.465299308E-01,2.452661097E-02,1.996598053E+01,7.331541274E-04,5.968268514E-01,3.048106097E-03,2.481322289E+00,1.825927175E-03,1.486402869E+00,3.208326921E-02,2.144573256E-03,6.118816882E-02,1.117844600E-02,9.099856377E+00,9.099856377E+00,3.179752093E-04,2.588489056E-01,2.588489056E-01,1.289030188E-03,1.049339890E+00,1.049339890E+00,8.311634883E-04,6.766117811E-01,6.766117811E-01,1.499419287E-02,9.831041098E-04,2.804956213E-02,2.467413247E-02,2.008607101E+01,7.339490694E-04,5.974739790E-01,3.048106097E-03,2.481322289E+00,-1.836755080E-03,-1.495217443E+00,3.229092807E-02,-2.157420618E-03,-6.155472249E-02,9.249829650E-01,9.716448784E-01,1.488627076E+00,1.493297100E+00,3.181934082E+03,8.772136271E-02,3.802122176E-02,2.668655515E-01,7.747909427E-02,1.791172028E-01,3.257333860E-02,3.951785341E-02,2.756875801E-06,1.747918725E-01,7.108152008E+01,9.876584045E-06,5.543031421E-06,5.488267541E-02,5.488267541E-02,2.009986474E-06,3.080003262E-01,3.404347301E-01,1.566074789E-01,4.468266010E+00,2.941699743E+00,2.707613073E-02,7.725260854E-01,5.085991025E-01,5.520958826E-02,1.575219393E+00,1.037055731E+00,3.524609208E-01,1.387535334E-01,2.101045102E-01,2.466407269E-01,2.950331271E-01,6.994762225E-05,-1.790275797E-03,1.720328233E-03,2.442616969E-03,4.388683010E-03,0.000000000E+00,6.804322600E-01,2.103999286E-04,1.185693126E-02,3.394753456E+00,0.000000000E+00,3.395694256E+00,2.295327148E+02,-7.317457886E+02,5.371537399E+01,5.029206872E-01 +7.683706284E-02,4.813237381E+01,1.756957626E+01,1.076342225E+00,4.319727123E-01,7.444453835E-01,2.124023819E+01,2.304764509E+00,2.318762302E+00,2.318732977E+00,2.318732977E+00,1.521595359E+00,6.737875366E+02,1.200000048E+00,1.800547600E+00,1.800547600E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,9.278529286E-01,2.304764509E+00,7.325358391E-01,2.090044022E+01,1.399779879E-02,1.190949790E-02,3.397973478E-01,2.440029941E-02,1.986315536E+01,7.656171219E-04,6.232535243E-01,3.089642152E-03,2.515134811E+00,1.854048460E-03,1.509295106E+00,3.132241592E-02,2.158886055E-03,6.159653142E-02,1.108872332E-02,9.026816368E+00,9.026816368E+00,3.311067703E-04,2.695387006E-01,2.695387006E-01,1.303476864E-03,1.061100245E+00,1.061100245E+00,8.418836514E-04,6.853385568E-01,6.853385568E-01,1.459485386E-02,9.871310322E-04,2.816445567E-02,2.454214357E-02,1.997862434E+01,7.664185250E-04,6.239058971E-01,3.089642385E-03,2.515134811E+00,-1.864709076E-03,-1.517973423E+00,3.151835874E-02,-2.171416068E-03,-6.195403636E-02,9.231629372E-01,9.698904753E-01,1.499609470E+00,1.504025578E+00,3.192094727E+03,8.648452163E-02,3.735889494E-02,2.660648823E-01,7.632529736E-02,1.769806147E-01,3.265303373E-02,3.892979398E-02,2.756875801E-06,1.734679937E-01,7.028754425E+01,9.876584045E-06,5.543031421E-06,5.406572297E-02,5.406572297E-02,2.009986474E-06,3.091305196E-01,3.396017551E-01,1.562036723E-01,4.456745148E+00,2.929169655E+00,2.766911499E-02,7.894448638E-01,5.188617110E-01,5.558448657E-02,1.585915804E+00,1.042338133E+00,3.512268066E-01,1.393270493E-01,2.097709626E-01,2.448341995E-01,2.845519483E-01,4.992831964E-05,-1.699732034E-03,1.649803715E-03,2.416075207E-03,4.350214731E-03,0.000000000E+00,6.890873313E-01,2.112237416E-04,1.240913104E-02,3.419643641E+00,0.000000000E+00,3.243592978E+00,2.286601715E+02,-7.187403564E+02,5.402395248E+01,5.020027757E-01 +7.867135853E-02,4.928141785E+01,1.792335320E+01,1.072854161E+00,4.305728376E-01,7.506917715E-01,2.141845894E+01,2.311852455E+00,2.325445890E+00,2.325416565E+00,2.325416565E+00,1.523820758E+00,6.765215454E+02,1.200000048E+00,1.804212570E+00,1.804212570E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,9.404995441E-01,2.311852455E+00,7.390187979E-01,2.108540916E+01,1.359343901E-02,1.167296059E-02,3.330485821E-01,2.425993234E-02,1.974888992E+01,7.984692929E-04,6.499969363E-01,3.129964229E-03,2.547959089E+00,1.881059259E-03,1.531283379E+00,3.057298437E-02,2.171563683E-03,6.195824221E-02,1.099376101E-02,8.949512482E+00,8.949512482E+00,3.443594032E-04,2.803270817E-01,2.803270817E-01,1.317471033E-03,1.072492242E+00,1.072492242E+00,8.520737174E-04,6.936337948E-01,6.936337948E-01,1.420388278E-02,9.904307080E-04,2.825859934E-02,2.439619787E-02,1.985981750E+01,7.992760511E-04,6.506536603E-01,3.129964229E-03,2.547959328E+00,-1.891543041E-03,-1.539817691E+00,3.075777180E-02,-2.183772391E-03,-6.230657920E-02,9.213286638E-01,9.681012034E-01,1.510266662E+00,1.514430523E+00,3.201929688E+03,8.526100963E-02,3.671101853E-02,2.651971281E-01,7.518997043E-02,1.748505682E-01,3.273334354E-02,3.835061938E-02,2.756875801E-06,1.721330881E-01,6.949069977E+01,9.876584045E-06,5.543031421E-06,5.326141790E-02,5.326141790E-02,2.009986474E-06,3.101169467E-01,3.387023807E-01,1.557537168E-01,4.443907261E+00,2.915995598E+00,2.825654484E-02,8.062052131E-01,5.290181041E-01,5.594602227E-02,1.596231103E+00,1.047416449E+00,3.499121368E-01,1.398580521E-01,2.093589902E-01,2.429947406E-01,2.744673491E-01,2.825457159E-05,-1.606792444E-03,1.578537864E-03,2.390892478E-03,4.313633777E-03,0.000000000E+00,6.973084807E-01,2.118927659E-04,1.297964621E-02,3.443852186E+00,0.000000000E+00,3.099101543E+00,2.278256378E+02,-7.056095581E+02,5.429238510E+01,5.017989874E-01 +8.052006364E-02,5.043948364E+01,1.828023148E+01,1.069509149E+00,4.292303324E-01,7.567546964E-01,2.159144211E+01,2.318675756E+00,2.331872940E+00,2.331843615E+00,2.331843615E+00,1.525958180E+00,6.791552734E+02,1.200000048E+00,1.807734489E+00,1.807734489E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,9.528421760E-01,2.318675756E+00,7.453184128E-01,2.126514816E+01,1.319730189E-02,1.143624727E-02,3.262947500E-01,2.410663664E-02,1.962409782E+01,8.317018510E-04,6.770499945E-01,3.169087926E-03,2.579807758E+00,1.907052821E-03,1.552443504E+00,2.983607166E-02,2.182765864E-03,6.227786466E-02,1.089408062E-02,8.868367195E+00,8.868367195E+00,3.577311873E-04,2.912124097E-01,2.912124097E-01,1.331021544E-03,1.083523035E+00,1.083523035E+00,8.617801359E-04,7.015354037E-01,7.015354037E-01,1.382163540E-02,9.930807864E-04,2.833421156E-02,2.423743159E-02,1.973057175E+01,8.325129165E-04,6.777102351E-01,3.169087926E-03,2.579807997E+00,-1.917351503E-03,-1.560827255E+00,3.001024574E-02,-2.194650704E-03,-6.261695921E-02,9.194799066E-01,9.663018584E-01,1.520609856E+00,1.524523258E+00,3.211456787E+03,8.405086398E-02,3.607712686E-02,2.642666399E-01,7.407356799E-02,1.727305055E-01,3.281440586E-02,3.778062016E-02,2.756875801E-06,1.707895398E-01,6.869228363E+01,9.876584045E-06,5.543031421E-06,5.247012153E-02,5.247012153E-02,2.009986474E-06,3.109657764E-01,3.377420604E-01,1.552608460E-01,4.429844379E+00,2.902232885E+00,2.883860469E-02,8.228123188E-01,5.390729904E-01,5.629459769E-02,1.606176376E+00,1.052297950E+00,3.485204279E-01,1.403475404E-01,2.088728398E-01,2.411235869E-01,2.647665143E-01,1.005978356E-05,-1.521765371E-03,1.511705574E-03,2.367272042E-03,4.279354122E-03,0.000000000E+00,7.051339149E-01,2.124236489E-04,1.356911659E-02,3.467401028E+00,0.000000000E+00,2.961977720E+00,2.270270233E+02,-6.923807983E+02,5.452263641E+01,5.021262765E-01 +8.238328993E-02,5.160665131E+01,1.864023018E+01,1.066297650E+00,4.279414415E-01,7.626405358E-01,2.175937462E+01,2.325244665E+00,2.338054419E+00,2.338024855E+00,2.338024855E+00,1.528011441E+00,6.816934204E+02,1.200000048E+00,1.811119318E+00,1.811119318E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,9.648887515E-01,2.325244665E+00,7.514405847E-01,2.143982124E+01,1.280966122E-02,1.119994838E-02,3.195527494E-01,2.394150756E-02,1.948967361E+01,8.652579272E-04,7.043665051E-01,3.207032336E-03,2.610696793E+00,1.931998762E-03,1.572750807E+00,2.911209874E-02,2.192470012E-03,6.255473197E-02,1.079015248E-02,8.783763885E+00,8.783763885E+00,3.711979080E-04,3.021750450E-01,3.021750450E-01,1.344133867E-03,1.094197273E+00,1.094197273E+00,8.709903923E-04,7.090330124E-01,7.090330124E-01,1.344813034E-02,9.950732347E-04,2.839105763E-02,2.406695299E-02,1.959179306E+01,8.660723106E-04,7.050294280E-01,3.207032569E-03,2.610696793E+00,-1.942105242E-03,-1.580978036E+00,2.927619219E-02,-2.204029122E-03,-6.288453937E-02,9.176167250E-01,9.644708037E-01,1.530650735E+00,1.534316063E+00,3.220685547E+03,8.285534382E-02,3.545718640E-02,2.632782161E-01,7.297592610E-02,1.706220210E-01,3.289571777E-02,3.721975535E-02,2.756875801E-06,1.694392562E-01,6.789348602E+01,9.876584045E-06,5.543031421E-06,5.169175193E-02,5.169175193E-02,2.009986474E-06,3.116841018E-01,3.367260098E-01,1.547281742E-01,4.414646626E+00,2.887930155E+00,2.941465005E-02,8.392478228E-01,5.490146875E-01,5.663061514E-02,1.615763545E+00,1.056988478E+00,3.470553458E-01,1.407966167E-01,2.083164155E-01,2.392224818E-01,2.554378510E-01,-9.318529010E-06,-1.435364946E-03,1.444683527E-03,2.344869543E-03,4.246792756E-03,0.000000000E+00,7.125537395E-01,2.128147462E-04,1.417767350E-02,3.490308285E+00,0.000000000E+00,2.831710577E+00,2.262622528E+02,-6.790949707E+02,5.471617126E+01,5.028104782E-01 +8.426115662E-02,5.278298187E+01,1.900337791E+01,1.063214064E+00,4.267039299E-01,7.683554292E-01,2.192243195E+01,2.331572294E+00,2.344002962E+00,2.343973398E+00,2.343973398E+00,1.529985189E+00,6.841401367E+02,1.200000048E+00,1.814374447E+00,1.814374447E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,9.766457081E-01,2.331572294E+00,7.573910356E-01,2.160959816E+01,1.243059896E-02,1.096439548E-02,3.128320575E-01,2.376558073E-02,1.934646034E+01,8.991237846E-04,7.319350839E-01,3.243817715E-03,2.640642166E+00,1.955976011E-03,1.592269540E+00,2.840183862E-02,2.200812334E-03,6.279276311E-02,1.068244595E-02,8.696085930E+00,8.696085930E+00,3.847554617E-04,3.132116199E-01,3.132116199E-01,1.356818015E-03,1.104522824E+00,1.104522824E+00,8.797436603E-04,7.161586285E-01,7.161586285E-01,1.308358461E-02,9.964739438E-04,2.843102254E-02,2.388580516E-02,1.944432831E+01,8.999404963E-04,7.325999737E-01,3.243817948E-03,2.640642166E+00,-1.965884119E-03,-1.600335479E+00,2.855636366E-02,-2.212045947E-03,-6.311326474E-02,9.157388210E-01,9.626272917E-01,1.540399790E+00,1.543819427E+00,3.229631836E+03,8.167447150E-02,3.485077247E-02,2.622359395E-01,7.189732045E-02,1.685278267E-01,3.297736123E-02,3.666821495E-02,2.756875801E-06,1.680842787E-01,6.709536743E+01,9.876584045E-06,5.543031421E-06,5.092655122E-02,5.092655122E-02,2.009986474E-06,3.122779131E-01,3.356591761E-01,1.541586518E-01,4.398396969E+00,2.873136997E+00,2.998479642E-02,8.555150032E-01,5.588464141E-01,5.695447326E-02,1.625003815E+00,1.061495066E+00,3.455204666E-01,1.412062049E-01,2.076936066E-01,2.372930050E-01,2.464686334E-01,-2.575417238E-05,-1.355868997E-03,1.381623209E-03,2.323841909E-03,4.216272850E-03,0.000000000E+00,7.196003795E-01,2.130802022E-04,1.480589900E-02,3.512595415E+00,0.000000000E+00,2.708067179E+00,2.255295258E+02,-6.657758179E+02,5.487470627E+01,5.036562681E-01 +8.615376800E-02,5.396855545E+01,1.936969376E+01,1.060250401E+00,4.255144894E-01,7.739055157E-01,2.208078384E+01,2.337667942E+00,2.349728346E+00,2.349698544E+00,2.349698544E+00,1.531882763E+00,6.864996338E+02,1.200000048E+00,1.817505360E+00,1.817505360E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,9.881209135E-01,2.337667942E+00,7.631754279E-01,2.177463722E+01,1.206027437E-02,1.073006820E-02,3.061463237E-01,2.357985266E-02,1.919526672E+01,9.332461050E-04,7.597125173E-01,3.279466648E-03,2.669662237E+00,1.978967106E-03,1.610985637E+00,2.770553716E-02,2.207786776E-03,6.299175322E-02,1.057138480E-02,8.605675697E+00,8.605675697E+00,3.983814968E-04,3.243039548E-01,3.243039548E-01,1.369081088E-03,1.114505529E+00,1.114505529E+00,8.880335954E-04,7.229070663E-01,7.229070663E-01,1.272795442E-02,9.972820990E-04,2.845408022E-02,2.369499207E-02,1.928899765E+01,9.340642719E-04,7.603785396E-01,3.279466880E-03,2.669662237E+00,-1.988672186E-03,-1.618886113E+00,2.785099111E-02,-2.218695125E-03,-6.330298632E-02,9.138462543E-01,9.607543945E-01,1.549867868E+00,1.553044677E+00,3.238304688E+03,8.050919324E-02,3.425779194E-02,2.611441612E-01,7.083752751E-02,1.664492190E-01,3.305890411E-02,3.612592816E-02,2.756875801E-06,1.667262763E-01,6.629891968E+01,9.876584045E-06,5.543031421E-06,5.017439276E-02,5.017439276E-02,2.009986474E-06,3.127538562E-01,3.345462978E-01,1.535551101E-01,4.381176949E+00,2.857897043E+00,3.054850176E-02,8.715984225E-01,5.685583949E-01,5.726657808E-02,1.633908629E+00,1.065823317E+00,3.439195454E-01,1.415772438E-01,2.070079744E-01,2.353372872E-01,2.378473282E-01,-4.300387445E-05,-1.275788411E-03,1.318792230E-03,2.303897636E-03,4.187299870E-03,0.000000000E+00,7.262688279E-01,2.132199152E-04,1.545394771E-02,3.534280062E+00,0.000000000E+00,2.590598106E+00,2.248270111E+02,-6.524570312E+02,5.499974823E+01,5.044813752E-01 +8.806124330E-02,5.516344070E+01,1.973920250E+01,1.057401538E+00,4.243711531E-01,7.792965174E-01,2.223459816E+01,2.343543291E+00,2.355242014E+00,2.355212212E+00,2.355212212E+00,1.533708215E+00,6.887758789E+02,1.200000048E+00,1.820518732E+00,1.820518732E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,9.993208647E-01,2.343543291E+00,7.687993050E-01,2.193509483E+01,1.169870049E-02,1.049724035E-02,2.995033562E-01,2.338526212E-02,1.903685951E+01,9.676071350E-04,7.876842618E-01,3.314002184E-03,2.697775841E+00,2.001039684E-03,1.628953815E+00,2.702370472E-02,2.213510917E-03,6.315506995E-02,1.045738533E-02,8.512873650E+00,8.512873650E+00,4.120702506E-04,3.354473412E-01,3.354473412E-01,1.380933449E-03,1.124154091E+00,1.124154091E+00,8.958936087E-04,7.293055654E-01,7.293055654E-01,1.238134596E-02,9.975542780E-04,2.846184559E-02,2.349545993E-02,1.912656784E+01,9.684258839E-04,7.883507609E-01,3.314002184E-03,2.697776079E+00,-2.010537311E-03,-1.636685491E+00,2.716056630E-02,-2.224095864E-03,-6.345707923E-02,9.119387269E-01,9.588671327E-01,1.559064746E+00,1.562001824E+00,3.246717773E+03,7.935950905E-02,3.367785364E-02,2.600066364E-01,6.979668140E-02,1.643883437E-01,3.314038366E-02,3.559300303E-02,2.756875801E-06,1.653669477E-01,6.550501251E+01,9.876584045E-06,5.543031421E-06,4.943540692E-02,4.943540692E-02,2.009986474E-06,3.131176829E-01,3.333916962E-01,1.529202163E-01,4.363062382E+00,2.842254400E+00,3.110583127E-02,8.874999881E-01,5.781528950E-01,5.756732076E-02,1.642489314E+00,1.069980145E+00,3.422563076E-01,1.419106424E-01,2.062630355E-01,2.333575040E-01,2.295615971E-01,-5.776019680E-05,-1.201750594E-03,1.259510755E-03,2.285151044E-03,4.160113167E-03,0.000000000E+00,7.325866818E-01,2.132459776E-04,1.612233929E-02,3.555382490E+00,0.000000000E+00,2.479081392E+00,2.241531219E+02,-6.391588745E+02,5.509281158E+01,5.050966144E-01 +8.998370171E-02,5.636771011E+01,2.011192131E+01,1.054660439E+00,4.232710600E-01,7.845340967E-01,2.238403511E+01,2.349206924E+00,2.360552788E+00,2.360522985E+00,2.360522985E+00,1.535464883E+00,6.909724731E+02,1.200000048E+00,1.823419452E+00,1.823419452E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.010253310E+00,2.349206924E+00,7.742678523E-01,2.209112167E+01,1.134595089E-02,1.026629657E-02,2.929141521E-01,2.318270504E-02,1.887196922E+01,1.002157107E-03,8.158097267E-01,3.347449237E-03,2.725003719E+00,2.022185596E-03,1.646167755E+00,2.635644376E-02,2.217990346E-03,6.328286976E-02,1.034082472E-02,8.417986870E+00,8.417986870E+00,4.258011177E-04,3.466250002E-01,3.466250002E-01,1.392383361E-03,1.133474946E+00,1.133474946E+00,9.033217793E-04,7.353524566E-01,7.353524566E-01,1.204366703E-02,9.972946718E-04,2.845443971E-02,2.328810655E-02,1.895777130E+01,1.002975507E-03,8.164760470E-01,3.347449470E-03,2.725003719E+00,-2.031472977E-03,-1.653728247E+00,2.648517676E-02,-2.228254452E-03,-6.357572228E-02,9.100162983E-01,9.569525719E-01,1.568000436E+00,1.570700884E+00,3.254879639E+03,7.822613418E-02,3.311082721E-02,2.588272691E-01,6.877453625E-02,1.623461843E-01,3.322142735E-02,3.506935015E-02,2.756875801E-06,1.640077382E-01,6.471443939E+01,9.876584045E-06,5.543031421E-06,4.870944843E-02,4.870944843E-02,2.009986474E-06,3.133756220E-01,3.321995735E-01,1.522565186E-01,4.344126225E+00,2.826248407E+00,3.165633231E-02,9.032067060E-01,5.876216888E-01,5.785709620E-02,1.650757074E+00,1.073971391E+00,3.405346870E-01,1.422072947E-01,2.054620385E-01,2.313562781E-01,2.216000706E-01,-7.304094470E-05,-1.127732452E-03,1.200773404E-03,2.267356729E-03,4.134295043E-03,0.000000000E+00,7.385525703E-01,2.131593646E-04,1.681123860E-02,3.575920105E+00,0.000000000E+00,2.373121500E+00,2.235062714E+02,-6.259088745E+02,5.515539551E+01,5.053226948E-01 +9.192126244E-02,5.758143997E+01,2.048787689E+01,1.052022576E+00,4.222124219E-01,7.896237373E-01,2.252925110E+01,2.354669333E+00,2.365671158E+00,2.365641356E+00,2.365641356E+00,1.537156105E+00,6.930931396E+02,1.200000048E+00,1.826213360E+00,1.826213360E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.020924807E+00,2.354669333E+00,7.795862556E-01,2.224286461E+01,1.100198273E-02,1.003746036E-02,2.863850594E-01,2.297302336E-02,1.870127678E+01,1.036875299E-03,8.440722227E-01,3.379833186E-03,2.751365900E+00,2.042462351E-03,1.662674189E+00,2.570406348E-02,2.221326344E-03,6.337805837E-02,1.022206992E-02,8.321314812E+00,8.321314812E+00,4.395670549E-04,3.578312099E-01,3.578312099E-01,1.403441769E-03,1.142477036E+00,1.142477036E+00,9.103465709E-04,7.410710454E-01,7.410710454E-01,1.171494182E-02,9.965519421E-04,2.843325026E-02,2.307377942E-02,1.878329659E+01,1.037692651E-03,8.447375894E-01,3.379833419E-03,2.751366138E+00,-2.051536925E-03,-1.670061231E+00,2.582510933E-02,-2.231272869E-03,-6.366185099E-02,9.080787301E-01,9.550220370E-01,1.576684117E+00,1.579151392E+00,3.262802246E+03,7.710902393E-02,3.255636245E-02,2.576095164E-01,6.777111441E-02,1.603244096E-01,3.330203891E-02,3.455501050E-02,2.756875801E-06,1.626500785E-01,6.392792130E+01,9.876584045E-06,5.543031421E-06,4.799655825E-02,4.799655825E-02,2.009986474E-06,3.135330975E-01,3.309738040E-01,1.515664309E-01,4.324436665E+00,2.809918165E+00,3.220003843E-02,9.187195301E-01,5.969662666E-01,5.813628063E-02,1.658722758E+00,1.077803493E+00,3.387584984E-01,1.424680799E-01,2.046081722E-01,2.293362021E-01,2.139510065E-01,-8.620320295E-05,-1.059022383E-03,1.145225600E-03,2.250596881E-03,4.110022914E-03,0.000000000E+00,7.441899776E-01,2.129704517E-04,1.752110012E-02,3.595912218E+00,0.000000000E+00,2.272508621E+00,2.228850708E+02,-6.127239380E+02,5.518884659E+01,5.049769282E-01 +9.387404472E-02,5.880470276E+01,2.086708450E+01,1.049481988E+00,4.211927950E-01,7.945706844E-01,2.267039490E+01,2.359938383E+00,2.370605230E+00,2.370575190E+00,2.370575190E+00,1.538784981E+00,6.951411133E+02,1.200000048E+00,1.828905225E+00,1.828905225E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.031342983E+00,2.359938383E+00,7.847596407E-01,2.239046860E+01,1.066680532E-02,9.811035357E-03,2.799248099E-01,2.275701798E-02,1.852543640E+01,1.071715029E-03,8.724336624E-01,3.411180805E-03,2.776884556E+00,2.061869251E-03,1.678472400E+00,2.506655641E-02,2.223533345E-03,6.344103068E-02,1.010145433E-02,8.223126411E+00,8.223126411E+00,4.533490282E-04,3.690505028E-01,3.690505028E-01,1.414117520E-03,1.151167631E+00,1.151167631E+00,9.169693221E-04,7.464622855E-01,7.464622855E-01,1.139504276E-02,9.953341214E-04,2.839850262E-02,2.285327762E-02,1.860379791E+01,1.072530635E-03,8.730975986E-01,3.411181038E-03,2.776884794E+00,-2.070729155E-03,-1.685684919E+00,2.518033795E-02,-2.233166480E-03,-6.371586770E-02,9.061259627E-01,9.530657530E-01,1.585125089E+00,1.587362647E+00,3.270493896E+03,7.600871474E-02,3.201430291E-02,2.563568950E-01,6.678614020E-02,1.583237946E-01,3.338189796E-02,3.404987603E-02,2.756875801E-06,1.612951905E-01,6.314610672E+01,9.876584045E-06,5.543031421E-06,4.729656875E-02,4.729656875E-02,2.009986474E-06,3.135958612E-01,3.297180831E-01,1.508522183E-01,4.304059505E+00,2.793298483E+00,3.273657337E-02,9.340277314E-01,6.061798930E-01,5.840526149E-02,1.666397214E+00,1.081481934E+00,3.369317353E-01,1.426939219E-01,2.037043869E-01,2.273002565E-01,2.066034377E-01,-9.966453217E-05,-9.907881031E-04,1.090452657E-03,2.234666143E-03,4.086945206E-03,0.000000000E+00,7.495001554E-01,2.126810141E-04,1.825207658E-02,3.615375519E+00,0.000000000E+00,2.176894665E+00,2.222881317E+02,-5.996265259E+02,5.519462967E+01,5.038832426E-01 +9.584216028E-02,6.003757095E+01,2.124956894E+01,1.047034502E+00,4.202105403E-01,7.993800044E-01,2.280761147E+01,2.365023851E+00,2.375364065E+00,2.375334024E+00,2.375334024E+00,1.540354490E+00,6.971197510E+02,1.200000048E+00,1.831500053E+00,1.831500053E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.041514158E+00,2.365023851E+00,7.897927761E-01,2.253407288E+01,1.034033671E-02,9.587201290E-03,2.735384703E-01,2.253543586E-02,1.834505653E+01,1.106653712E-03,9.008756876E-01,3.441518871E-03,2.801581383E+00,2.080454957E-03,1.693602204E+00,2.444406971E-02,2.224699827E-03,6.347431242E-02,9.979299270E-03,8.123685837E+00,8.123685837E+00,4.671392380E-04,3.802764416E-01,3.802764416E-01,1.424421789E-03,1.159555912E+00,1.159555912E+00,9.232144803E-04,7.515462637E-01,7.515462637E-01,1.108393259E-02,9.936831193E-04,2.835139632E-02,2.262735367E-02,1.841988373E+01,1.107466873E-03,9.015375376E-01,3.441519104E-03,2.801581383E+00,-2.089099493E-03,-1.700639367E+00,2.455099300E-02,-2.234023763E-03,-6.374032795E-02,9.041578174E-01,9.510924220E-01,1.593331814E+00,1.595343232E+00,3.277965332E+03,7.492516190E-02,3.148432449E-02,2.550725043E-01,6.581956148E-02,1.563456059E-01,3.346099332E-02,3.355395049E-02,2.756875801E-06,1.599442512E-01,6.236957932E+01,9.876584045E-06,5.543031421E-06,4.660946131E-02,4.660946131E-02,2.009986474E-06,3.135690689E-01,3.284358680E-01,1.501160413E-01,4.283055305E+00,2.776423931E+00,3.326594457E-02,9.491315484E-01,6.152634621E-01,5.866440386E-02,1.673790932E+00,1.085013032E+00,3.350579441E-01,1.428855807E-01,2.027535737E-01,2.252509147E-01,1.995461881E-01,-1.113196122E-04,-9.272345924E-04,1.038554241E-03,2.219605260E-03,4.065159243E-03,0.000000000E+00,7.545033097E-01,2.122999867E-04,1.900455914E-02,3.634327888E+00,0.000000000E+00,2.086081505E+00,2.217142029E+02,-5.866307373E+02,5.517395782E+01,5.018708110E-01 +9.782573581E-02,6.128012848E+01,2.163534546E+01,1.044674873E+00,4.192635417E-01,8.040566444E-01,2.294104385E+01,2.369932652E+00,2.379955292E+00,2.379925251E+00,2.379925251E+00,1.541867375E+00,6.990321045E+02,1.200000048E+00,1.834002137E+00,1.834002137E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.051445842E+00,2.369932652E+00,7.946904302E-01,2.267381096E+01,1.002253313E-02,9.366198443E-03,2.672328949E-01,2.230898850E-02,1.816071701E+01,1.141647925E-03,9.293627739E-01,3.470874624E-03,2.825478554E+00,2.098223893E-03,1.708067179E+00,2.383651026E-02,2.224845579E-03,6.347846985E-02,9.855897166E-03,8.023230553E+00,8.023230553E+00,4.809201055E-04,3.914948106E-01,3.914948106E-01,1.434363890E-03,1.167649269E+00,1.167649269E+00,9.290856542E-04,7.563256621E-01,7.563256621E-01,1.078145765E-02,9.916092968E-04,2.829222567E-02,2.239671722E-02,1.823213196E+01,1.142457826E-03,9.300220609E-01,3.470874857E-03,2.825478792E+00,-2.106652828E-03,-1.714928627E+00,2.393696271E-02,-2.233865205E-03,-6.373581290E-02,9.021742344E-01,9.490944743E-01,1.601312995E+00,1.603102088E+00,3.285223877E+03,7.385873049E-02,3.096625768E-02,2.537595928E-01,6.487107277E-02,1.543904245E-01,3.353903815E-02,3.306711093E-02,2.756875801E-06,1.585983187E-01,6.159885788E+01,9.876584045E-06,5.543031421E-06,4.593504965E-02,4.593504965E-02,2.009986474E-06,3.134580255E-01,3.271303177E-01,1.493599564E-01,4.261482716E+00,2.759325504E+00,3.378784284E-02,9.640221596E-01,6.242114902E-01,5.891407281E-02,1.680914283E+00,1.088402152E+00,3.331410289E-01,1.430441141E-01,2.017583549E-01,2.231912762E-01,1.927688271E-01,-1.231050264E-04,-8.644846384E-04,9.875897085E-04,2.205345081E-03,4.044559784E-03,0.000000000E+00,7.592024207E-01,2.118296397E-04,1.977867633E-02,3.652785778E+00,0.000000000E+00,1.999761939E+00,2.211620941E+02,-5.737546387E+02,5.512821579E+01,4.987860322E-01 +9.982489794E-02,6.253244400E+01,2.202443695E+01,1.042399406E+00,4.183502793E-01,8.086053729E-01,2.307082748E+01,2.374673843E+00,2.384387016E+00,2.384356976E+00,2.384356976E+00,1.543326378E+00,7.008810425E+02,1.200000048E+00,1.836416006E+00,1.836416006E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.061144471E+00,2.374673843E+00,7.994571924E-01,2.280981445E+01,9.713285603E-03,9.148166515E-03,2.610120773E-01,2.207833901E-02,1.797295570E+01,1.176673570E-03,9.578755498E-01,3.499276005E-03,2.848598719E+00,2.115218202E-03,1.721901298E+00,2.324390970E-02,2.224047901E-03,6.345570832E-02,9.731530212E-03,7.921988487E+00,7.921988487E+00,4.946832196E-04,4.026987553E-01,4.026987553E-01,1.443955116E-03,1.175457120E+00,1.175457120E+00,9.346039733E-04,7.608178854E-01,7.608178854E-01,1.048753597E-02,9.891489753E-04,2.822203189E-02,2.216203138E-02,1.804108429E+01,1.177479629E-03,9.585317373E-01,3.499276238E-03,2.848598957E+00,-2.123431303E-03,-1.728587270E+00,2.333825827E-02,-2.232768573E-03,-6.370452046E-02,9.001750946E-01,9.470787644E-01,1.609076500E+00,1.610646963E+00,3.292279541E+03,7.280936092E-02,3.045980632E-02,2.524209321E-01,6.394056976E-02,1.524592191E-01,3.361600637E-02,3.258932009E-02,2.756875801E-06,1.572583765E-01,6.083441544E+01,9.876584045E-06,5.543031421E-06,4.527328163E-02,4.527328163E-02,2.009986474E-06,3.132674992E-01,3.258045614E-01,1.485858858E-01,4.239397049E+00,2.742033958E+00,3.430226445E-02,9.786993861E-01,6.330244541E-01,5.915461481E-02,1.687777519E+00,1.091655254E+00,3.311840892E-01,1.431702375E-01,2.007215321E-01,2.211233377E-01,1.862608641E-01,-1.333391410E-04,-8.058887324E-04,9.392278735E-04,2.191646025E-03,4.024726339E-03,0.000000000E+00,7.636149526E-01,2.112777147E-04,2.057474107E-02,3.670766354E+00,0.000000000E+00,1.917751789E+00,2.206307068E+02,-5.610097046E+02,5.505851364E+01,-5.052908063E-01 +1.018397585E-01,6.379459381E+01,2.241686058E+01,1.040203452E+00,4.174689651E-01,8.130308390E-01,2.319709206E+01,2.379253626E+00,2.388666153E+00,2.388635874E+00,2.388635874E+00,1.544734001E+00,7.026693726E+02,1.200000048E+00,1.838745594E+00,1.838745594E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.070616961E+00,2.379253626E+00,8.040975332E-01,2.294221115E+01,9.412507527E-03,8.933289908E-03,2.548812926E-01,2.184411325E-02,1.778228188E+01,1.211690134E-03,9.863808751E-01,3.526750254E-03,2.870964289E+00,2.131445333E-03,1.735110998E+00,2.266610041E-02,2.222330775E-03,6.340671331E-02,9.606450796E-03,7.820167542E+00,7.820167542E+00,5.084125441E-04,4.138751328E-01,4.138751328E-01,1.453204895E-03,1.182986856E+00,1.182986856E+00,9.397745598E-04,7.650269866E-01,7.650269866E-01,1.020199154E-02,9.863143787E-04,2.814115398E-02,2.192392014E-02,1.784724998E+01,1.212491770E-03,9.870334864E-01,3.526750486E-03,2.870964527E+00,-2.139443764E-03,-1.741622210E+00,2.275469713E-02,-2.230758313E-03,-6.364716589E-02,8.981602192E-01,9.450393319E-01,1.616630435E+00,1.617986321E+00,3.299139404E+03,7.177728415E-02,2.996478230E-02,2.510594428E-01,6.302774698E-02,1.505523622E-01,3.369165957E-02,3.212044388E-02,2.756875801E-06,1.559252739E-01,6.007666779E+01,9.876584045E-06,5.543031421E-06,4.462394863E-02,4.462394863E-02,2.009986474E-06,3.130024374E-01,3.244613707E-01,1.477956623E-01,4.216850758E+00,2.724576712E+00,3.480895236E-02,9.931560159E-01,6.416980028E-01,5.938638374E-02,1.694390178E+00,1.094777346E+00,3.291901648E-01,1.432648599E-01,1.996453702E-01,2.190492302E-01,1.800123006E-01,-1.435765298E-04,-7.483285735E-04,8.919051033E-04,2.178728115E-03,4.006079398E-03,0.000000000E+00,7.677451968E-01,2.106467873E-04,2.139285766E-02,3.688284874E+00,0.000000000E+00,1.839780331E+00,2.201189423E+02,-5.484103394E+02,5.496617508E+01,-5.128544569E-01 +1.038704440E-01,6.506665802E+01,2.281263542E+01,1.038083673E+00,4.166182578E-01,8.173374534E-01,2.331996727E+01,2.383679867E+00,2.392799854E+00,2.392769575E+00,2.392769575E+00,1.546092749E+00,7.043997803E+02,1.200000048E+00,1.840995073E+00,1.840995073E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.079869866E+00,2.383679867E+00,8.086157441E-01,2.307112312E+01,9.120066650E-03,8.721675724E-03,2.488435954E-01,2.160689607E-02,1.758917618E+01,1.246672939E-03,1.014858842E+00,3.553324845E-03,2.892597437E+00,2.146941610E-03,1.747725964E+00,2.210301347E-02,2.219761256E-03,6.333340704E-02,9.480903856E-03,7.717965126E+00,7.717965126E+00,5.220992607E-04,4.250168800E-01,4.250168800E-01,1.462123939E-03,1.190247416E+00,1.190247416E+00,9.446158074E-04,7.689680457E-01,7.689680457E-01,9.924706072E-03,9.831367061E-04,2.805048972E-02,2.168296650E-02,1.765110016E+01,1.247469685E-03,1.015507460E+00,3.553325078E-03,2.892597675E+00,-2.154726535E-03,-1.754063249E+00,2.218618989E-02,-2.227901947E-03,-6.356566399E-02,8.961295485E-01,9.429814219E-01,1.623982072E+00,1.625127316E+00,3.305812012E+03,7.076240331E-02,2.948090620E-02,2.496776432E-01,6.213242188E-02,1.486705691E-01,3.376595303E-02,3.166041896E-02,2.756875801E-06,1.545998603E-01,5.932598877E+01,9.876584045E-06,5.543031421E-06,4.398695379E-02,4.398695379E-02,2.009986474E-06,3.126672506E-01,3.231034875E-01,1.469910294E-01,4.193892956E+00,2.706980944E+00,3.530789167E-02,1.007391572E+00,6.502322555E-01,5.960969999E-02,1.700761795E+00,1.097774029E+00,3.271625042E-01,1.433289796E-01,1.985322386E-01,2.169713229E-01,1.740133613E-01,-1.525029511E-04,-6.944173365E-04,8.469203021E-04,2.166546183E-03,3.988553304E-03,0.000000000E+00,7.716082335E-01,2.099435806E-04,2.223324962E-02,3.705357552E+00,0.000000000E+00,1.765675783E+00,2.196258698E+02,-5.359656982E+02,5.485217285E+01,-5.207474828E-01 +1.059170812E-01,6.634871674E+01,2.321178246E+01,1.036036134E+00,4.157964885E-01,8.215295076E-01,2.343957329E+01,2.387958765E+00,2.396794558E+00,2.396764278E+00,2.396764278E+00,1.547404766E+00,7.060748291E+02,1.200000048E+00,1.843167782E+00,1.843167782E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.088909745E+00,2.387958765E+00,8.130160570E-01,2.319667053E+01,8.835850284E-03,8.513459936E-03,2.429028600E-01,2.136723883E-02,1.739408112E+01,1.281584380E-03,1.043278575E+00,3.579028184E-03,2.913521290E+00,2.161717275E-03,1.759754062E+00,2.155443840E-02,2.216365421E-03,6.323651224E-02,9.355109185E-03,7.615561485E+00,7.615561485E+00,5.357287009E-04,4.361119568E-01,4.361119568E-01,1.470722258E-03,1.197247028E+00,1.197247028E+00,9.491336532E-04,7.726458311E-01,7.726458311E-01,9.655494243E-03,9.796285303E-04,2.795039676E-02,2.143971995E-02,1.745308495E+01,1.282375655E-03,1.043922782E+00,3.579028416E-03,2.913521528E+00,-2.169290092E-03,-1.765918732E+00,2.163251117E-02,-2.224225318E-03,-6.346076727E-02,8.940829039E-01,9.409005642E-01,1.631138921E+00,1.632077575E+00,3.312304199E+03,6.976487488E-02,2.900799178E-02,2.482781708E-01,6.125430018E-02,1.468140781E-01,3.383868188E-02,3.120910749E-02,2.756875801E-06,1.532828659E-01,5.858270264E+01,9.876584045E-06,5.543031421E-06,4.336208850E-02,4.336208850E-02,2.009986474E-06,3.122665286E-01,3.217333555E-01,1.461735964E-01,4.170570850E+00,2.689271450E+00,3.579888120E-02,1.021400332E+00,6.586238146E-01,5.982490256E-02,1.706901789E+00,1.100650072E+00,3.251035511E-01,1.433633715E-01,1.973846555E-01,2.148908675E-01,1.682547480E-01,-1.613279310E-04,-6.417199038E-04,8.030478493E-04,2.154765651E-03,3.971547354E-03,0.000000000E+00,7.752090693E-01,2.091707429E-04,2.309595235E-02,3.721999168E+00,0.000000000E+00,1.695200682E+00,2.191505280E+02,-5.236871338E+02,5.471771622E+01,-5.288515091E-01 +1.079797894E-01,6.764083862E+01,2.361432076E+01,1.034057736E+00,4.150024951E-01,8.256112337E-01,2.355603218E+01,2.392097235E+00,2.400656939E+00,2.400626659E+00,2.400626659E+00,1.548672318E+00,7.076968384E+02,1.200000048E+00,1.845267534E+00,1.845267534E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.097742915E+00,2.392097235E+00,8.173025250E-01,2.331897163E+01,8.559701964E-03,8.308717981E-03,2.370612472E-01,2.112565003E-02,1.719741440E+01,1.316399546E-03,1.071619987E+00,3.603886580E-03,2.933757305E+00,2.175803762E-03,1.771221161E+00,2.102022432E-02,2.212202875E-03,6.311774999E-02,9.229274467E-03,7.513125896E+00,7.513125896E+00,5.492919590E-04,4.471531808E-01,4.471531808E-01,1.479010214E-03,1.203993797E+00,1.203993797E+00,9.533443372E-04,7.760735750E-01,7.760735750E-01,9.394206107E-03,9.758176166E-04,2.784166485E-02,2.119468711E-02,1.725361443E+01,1.317184884E-03,1.072259307E+00,3.603886580E-03,2.933757544E+00,-2.183166565E-03,-1.777215004E+00,2.109349333E-02,-2.219788497E-03,-6.333417445E-02,8.920202255E-01,9.388008118E-01,1.638108015E+00,1.638844013E+00,3.318624268E+03,6.878455728E-02,2.854576521E-02,2.468633354E-01,6.039315462E-02,1.449833363E-01,3.390979394E-02,3.076640889E-02,2.756875801E-06,1.519749463E-01,5.784708786E+01,9.876584045E-06,5.543031421E-06,4.274921864E-02,4.274921864E-02,2.009986474E-06,3.118043542E-01,3.203533590E-01,1.453449428E-01,4.146927834E+00,2.671471834E+00,3.628190234E-02,1.035181761E+00,6.668726802E-01,6.003229320E-02,1.712818980E+00,1.103410721E+00,3.230158985E-01,1.433690041E-01,1.962046623E-01,2.128094435E-01,1.627272367E-01,-1.690251083E-04,-5.922721466E-04,7.612972986E-04,2.143693622E-03,3.955641296E-03,0.000000000E+00,7.785609961E-01,2.083341678E-04,2.398111299E-02,3.738224745E+00,0.000000000E+00,1.628197789E+00,2.186920471E+02,-5.115814819E+02,5.456373596E+01,-5.370356441E-01 +1.100587025E-01,6.894311523E+01,2.402026749E+01,1.032145023E+00,4.142348766E-01,8.295866251E-01,2.366945648E+01,2.396100998E+00,2.404392481E+00,2.404362202E+00,2.404362202E+00,1.549897313E+00,7.092681885E+02,1.200000048E+00,1.847297430E+00,1.847297430E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.106375933E+00,2.396100998E+00,8.214790821E-01,2.343813515E+01,8.291485719E-03,8.107545786E-03,2.313214689E-01,2.088260837E-02,1.699956512E+01,1.351083396E-03,1.099854469E+00,3.627927275E-03,2.953327894E+00,2.189212246E-03,1.782136440E+00,2.050011232E-02,2.207299927E-03,6.297786534E-02,9.103588760E-03,7.410810471E+00,7.410810471E+00,5.627755309E-04,4.581295550E-01,4.581295550E-01,1.486997236E-03,1.210495710E+00,1.210495710E+00,9.572543786E-04,7.792565227E-01,7.792565227E-01,9.140646085E-03,9.717163048E-04,2.772464789E-02,2.094834298E-02,1.705307770E+01,1.351862331E-03,1.100488663E+00,3.627927275E-03,2.953327894E+00,-2.196367597E-03,-1.787961245E+00,2.056886256E-02,-2.214617794E-03,-6.318665296E-02,8.899412751E-01,9.366786480E-01,1.644896150E+00,1.645433664E+00,3.324778320E+03,6.782148778E-02,2.809403092E-02,2.454354316E-01,5.954866484E-02,1.431784332E-01,3.397911042E-02,3.033217788E-02,2.756875801E-06,1.506767124E-01,5.711938477E+01,9.876584045E-06,5.543031421E-06,4.214811698E-02,4.214811698E-02,2.009986474E-06,3.112848699E-01,3.189656436E-01,1.445064992E-01,4.123005867E+00,2.653603554E+00,3.675679117E-02,1.048731089E+00,6.749760509E-01,6.023218110E-02,1.718522191E+00,1.106060386E+00,3.209018409E-01,1.433466524E-01,1.949944645E-01,2.107283473E-01,1.574221551E-01,-1.765653433E-04,-5.441152607E-04,7.206806331E-04,2.133043716E-03,3.940319642E-03,0.000000000E+00,7.816693783E-01,2.074365475E-04,2.488868497E-02,3.754048824E+00,0.000000000E+00,1.564457536E+00,2.182496033E+02,-4.996572266E+02,5.439131927E+01,-5.451472998E-01 +1.121539474E-01,7.025562286E+01,2.442964363E+01,1.030295253E+00,4.134924710E-01,8.334595561E-01,2.377995682E+01,2.399976492E+00,2.408007383E+00,2.407977104E+00,2.407977104E+00,1.551081777E+00,7.107910767E+02,1.200000048E+00,1.849260926E+00,1.849260926E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.114814758E+00,2.399976492E+00,8.255496025E-01,2.355427361E+01,8.031032048E-03,7.909989916E-03,2.256848812E-01,2.063855343E-02,1.680089188E+01,1.385611366E-03,1.127962112E+00,3.651176114E-03,2.972253561E+00,2.201970434E-03,1.792522311E+00,1.999389566E-02,2.201709198E-03,6.281834096E-02,8.978226222E-03,7.308759212E+00,7.308759212E+00,5.761707434E-04,4.690339565E-01,4.690339565E-01,1.494693453E-03,1.216760755E+00,1.216760755E+00,9.608778637E-04,7.822062373E-01,7.822062373E-01,8.894646540E-03,9.673488676E-04,2.760003693E-02,2.070112340E-02,1.685182762E+01,1.386383432E-03,1.128590703E+00,3.651176346E-03,2.972253799E+00,-2.208920894E-03,-1.798180223E+00,2.005839348E-02,-2.208765829E-03,-6.301968545E-02,8.878460526E-01,9.345372319E-01,1.651509762E+00,1.651852965E+00,3.330773682E+03,6.687551737E-02,2.765253186E-02,2.439965457E-01,5.872057006E-02,1.413996220E-01,3.404657543E-02,2.990629338E-02,2.756875801E-06,1.493887007E-01,5.639979553E+01,9.876584045E-06,5.543031421E-06,4.155861959E-02,4.155861959E-02,2.009986474E-06,3.107119501E-01,3.175722361E-01,1.436596364E-01,4.098843575E+00,2.635687590E+00,3.722352907E-02,1.062047839E+00,6.829339862E-01,6.042485684E-02,1.724019527E+00,1.108603835E+00,3.187637031E-01,1.432970762E-01,1.937561035E-01,2.086489350E-01,1.523309946E-01,-1.831349218E-04,-4.988575820E-04,6.819925038E-04,2.122945851E-03,3.925834317E-03,0.000000000E+00,7.845457196E-01,2.064829896E-04,2.581870183E-02,3.769485235E+00,0.000000000E+00,1.503836274E+00,2.178224182E+02,-4.879194946E+02,5.420130539E+01,-5.530289412E-01 +1.142656431E-01,7.157843781E+01,2.484246635E+01,1.028505325E+00,4.127741158E-01,8.372338414E-01,2.388764381E+01,2.403728485E+00,2.411506653E+00,2.411476135E+00,2.411476135E+00,1.552227616E+00,7.122675171E+02,1.200000048E+00,1.851160765E+00,1.851160765E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.123065710E+00,2.403728485E+00,8.295177221E-01,2.366749001E+01,7.778186351E-03,7.716112304E-03,2.201532423E-01,2.039389685E-02,1.660172844E+01,1.419950626E-03,1.155916214E+00,3.673658939E-03,2.990556002E+00,2.214090200E-03,1.802388549E+00,1.950128376E-02,2.195456764E-03,6.263995171E-02,8.853346109E-03,7.207099438E+00,7.207099438E+00,5.894650822E-04,4.798562825E-01,4.798562825E-01,1.502107596E-03,1.222796440E+00,1.222796440E+00,9.642215446E-04,7.849282026E-01,7.849282026E-01,8.656002581E-03,9.627275867E-04,2.746818587E-02,2.045343630E-02,1.665019608E+01,1.420715591E-03,1.156538844E+00,3.673659172E-03,2.990556002E+00,-2.220838564E-03,-1.807881951E+00,1.956178434E-02,-2.202259377E-03,-6.283403933E-02,8.857343793E-01,9.323738217E-01,1.657955527E+00,1.658108473E+00,3.336616211E+03,6.594660133E-02,2.722106315E-02,2.425487190E-01,5.790853873E-02,1.396468729E-01,3.411202505E-02,2.948859893E-02,2.756875801E-06,1.481113732E-01,5.568848038E+01,9.876584045E-06,5.543031421E-06,4.098049924E-02,4.098049924E-02,2.009986474E-06,3.100893199E-01,3.161749840E-01,1.428056508E-01,4.074477673E+00,2.617742777E+00,3.768198192E-02,1.075128317E+00,6.907443404E-01,6.061059982E-02,1.729319096E+00,1.111045241E+00,3.166036010E-01,1.432209462E-01,1.924915463E-01,2.065724581E-01,1.474456638E-01,-1.895042515E-04,-4.549407458E-04,6.444450119E-04,2.113230526E-03,3.911883570E-03,0.000000000E+00,7.871957421E-01,2.054761280E-04,2.677102946E-02,3.784547567E+00,0.000000000E+00,1.446149826E+00,2.174097595E+02,-4.763742981E+02,5.399469757E+01,-5.605074763E-01 +1.163939312E-01,7.291164398E+01,2.525875664E+01,1.026772738E+00,4.120787680E-01,8.409131169E-01,2.399261856E+01,2.407362938E+00,2.414895773E+00,2.414865255E+00,2.414865255E+00,1.553336620E+00,7.136995850E+02,1.200000048E+00,1.853000045E+00,1.853000045E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.131134748E+00,2.407362938E+00,8.333871365E-01,2.377789116E+01,7.532774471E-03,7.525935303E-03,2.147271782E-01,2.014900930E-02,1.640237617E+01,1.454077545E-03,1.183697224E+00,3.695400432E-03,3.008254528E+00,2.225595992E-03,1.811754704E+00,1.902202703E-02,2.188588958E-03,6.244400144E-02,8.729092777E-03,7.105950832E+00,7.105950832E+00,6.026501069E-04,4.905895591E-01,4.905895591E-01,1.509249210E-03,1.228610039E+00,1.228610039E+00,9.672979941E-04,7.874325514E-01,7.874325514E-01,8.424538188E-03,9.578736499E-04,2.732969448E-02,2.020565048E-02,1.644848633E+01,1.454834826E-03,1.184313774E+00,3.695400432E-03,3.008254766E+00,-2.232145285E-03,-1.817086220E+00,1.907876879E-02,-2.195144305E-03,-6.263104081E-02,8.836060762E-01,9.301908612E-01,1.664239287E+00,1.664206147E+00,3.342312988E+03,6.503456831E-02,2.679938078E-02,2.410938144E-01,5.711229146E-02,1.379202455E-01,3.417541087E-02,2.907896228E-02,2.756875801E-06,1.468451619E-01,5.498557281E+01,9.876584045E-06,5.543031421E-06,4.041356221E-02,4.041356221E-02,2.009986474E-06,3.094204962E-01,3.147756159E-01,1.419457048E-01,4.049942017E+00,2.599786997E+00,3.813213855E-02,1.087972045E+00,6.984069943E-01,6.078967825E-02,1.734428406E+00,1.113389015E+00,3.144236207E-01,1.431187540E-01,1.912027448E-01,2.045002133E-01,1.427582949E-01,-1.950380538E-04,-4.136155185E-04,6.086535868E-04,2.103936160E-03,3.898548195E-03,0.000000000E+00,7.896295786E-01,2.044204593E-04,2.774557099E-02,3.799249172E+00,0.000000000E+00,1.391266584E+00,2.170109406E+02,-4.650250244E+02,5.377225113E+01,-5.674064755E-01 +1.185389385E-01,7.425531769E+01,2.567853165E+01,1.025094748E+00,4.114053547E-01,8.445008397E-01,2.409498405E+01,2.410884857E+00,2.418179512E+00,2.418148994E+00,2.418148994E+00,1.554410338E+00,7.150891113E+02,1.200000048E+00,1.854781389E+00,1.854781389E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.139027596E+00,2.410884857E+00,8.371613622E-01,2.388557625E+01,7.294632029E-03,7.339492440E-03,2.094076574E-01,1.990424097E-02,1.620312119E+01,1.487961505E-03,1.211280584E+00,3.716423642E-03,3.025368690E+00,2.236499451E-03,1.820630908E+00,1.855581440E-02,2.181131626E-03,6.223123893E-02,8.605597541E-03,7.005418777E+00,7.005418777E+00,6.157143507E-04,5.012245774E-01,5.012245774E-01,1.516126329E-03,1.234208345E+00,1.234208345E+00,9.701139643E-04,7.897249460E-01,7.897249460E-01,8.200048469E-03,9.527989896E-04,2.718490548E-02,1.995811053E-02,1.624697495E+01,1.488710870E-03,1.211890697E+00,3.716423875E-03,3.025368690E+00,-2.242853167E-03,-1.825803161E+00,1.860902645E-02,-2.187446691E-03,-6.241141260E-02,8.814610839E-01,9.279863238E-01,1.670367241E+00,1.670151949E+00,3.347869385E+03,6.413932890E-02,2.638727985E-02,2.396335900E-01,5.633148178E-02,1.362196356E-01,3.423659131E-02,2.867721952E-02,2.756875801E-06,1.455904245E-01,5.429118729E+01,9.876584045E-06,5.543031421E-06,3.985757753E-02,3.985757753E-02,2.009986474E-06,3.087088764E-01,3.133757114E-01,1.410809457E-01,4.025269032E+00,2.581836462E+00,3.857389465E-02,1.100576043E+00,7.059203982E-01,6.096233428E-02,1.739354610E+00,1.115638614E+00,3.122257888E-01,1.429909468E-01,1.898915470E-01,2.024335265E-01,1.382613778E-01,-2.003439440E-04,-3.736486251E-04,5.739925546E-04,2.094961936E-03,3.885651473E-03,0.000000000E+00,7.918528318E-01,2.033185301E-04,2.874208800E-02,3.813602924E+00,0.000000000E+00,1.339024305E+00,2.166252899E+02,-4.538757324E+02,5.353488159E+01,-5.735360980E-01 +1.207007915E-01,7.560954285E+01,2.610181427E+01,1.023469210E+00,4.107529521E-01,8.480005860E-01,2.419483566E+01,2.414299011E+00,2.421362638E+00,2.421331882E+00,2.421331882E+00,1.555450559E+00,7.164379272E+02,1.200000048E+00,1.856507421E+00,1.856507421E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.146750212E+00,2.414299011E+00,8.408437967E-01,2.399064064E+01,7.063580211E-03,7.156786975E-03,2.041947693E-01,1.965990476E-02,1.600421906E+01,1.521579456E-03,1.238647461E+00,3.736750456E-03,3.041915655E+00,2.246822463E-03,1.829034209E+00,1.810237393E-02,2.173125977E-03,6.200282276E-02,8.482979611E-03,6.905601501E+00,6.905601501E+00,6.286497228E-04,5.117546916E-01,5.117546916E-01,1.522746985E-03,1.239597917E+00,1.239597917E+00,9.726805729E-04,7.918142676E-01,7.918142676E-01,7.982350886E-03,9.475222323E-04,2.703435160E-02,1.971112564E-02,1.604591560E+01,1.522320672E-03,1.239250898E+00,3.736750456E-03,3.041915894E+00,-2.252983861E-03,-1.834050059E+00,1.815226860E-02,-2.179207280E-03,-6.217633188E-02,8.792992234E-01,9.257618785E-01,1.676345110E+00,1.675951838E+00,3.353291992E+03,6.326067448E-02,2.598452941E-02,2.381696850E-01,5.556581914E-02,1.345449835E-01,3.429550305E-02,2.828322910E-02,2.756875801E-06,1.443474740E-01,5.360539627E+01,9.876584045E-06,5.543031421E-06,3.931234777E-02,3.931234777E-02,2.009986474E-06,3.079576790E-01,3.119766712E-01,1.402123868E-01,4.000487328E+00,2.563906431E+00,3.900723904E-02,1.112940073E+00,7.132844925E-01,6.112880632E-02,1.744104266E+00,1.117797852E+00,3.100120425E-01,1.428379267E-01,1.885597557E-01,2.003737390E-01,1.339475811E-01,-2.049287577E-04,-3.360062547E-04,5.409350269E-04,2.086324384E-03,3.873232286E-03,0.000000000E+00,7.938745618E-01,2.021742839E-04,2.976035699E-02,3.827621222E+00,0.000000000E+00,1.289302588E+00,2.162522278E+02,-4.429284668E+02,5.328328705E+01,-5.787021518E-01 +1.228796244E-01,7.697441101E+01,2.652861977E+01,1.021893501E+00,4.101206064E-01,8.514155149E-01,2.429227066E+01,2.417609930E+00,2.424449444E+00,2.424418688E+00,2.424418688E+00,1.556458592E+00,7.177477417E+02,1.200000048E+00,1.858180642E+00,1.858180642E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.154308200E+00,2.417609930E+00,8.444376588E-01,2.409318161E+01,6.839450914E-03,6.977829151E-03,1.990888268E-01,1.941629313E-02,1.580590630E+01,1.554903458E-03,1.265775084E+00,3.756400198E-03,3.057911634E+00,2.256576670E-03,1.836974740E+00,1.766138710E-02,2.164596925E-03,6.175947189E-02,8.361346088E-03,6.806585312E+00,6.806585312E+00,6.414458039E-04,5.221713781E-01,5.221713781E-01,1.529117930E-03,1.244784236E+00,1.244784236E+00,9.750046302E-04,7.937061787E-01,7.937061787E-01,7.771244273E-03,9.420547867E-04,2.687835693E-02,1.946498454E-02,1.584554386E+01,1.555636292E-03,1.266371489E+00,3.756400431E-03,3.057911873E+00,-2.262549708E-03,-1.841837049E+00,1.770816557E-02,-2.170451451E-03,-6.192651391E-02,8.771203756E-01,9.235160947E-01,1.682178378E+00,1.681611180E+00,3.358585938E+03,6.239848584E-02,2.559092641E-02,2.367036641E-01,5.481496453E-02,1.328960955E-01,3.435203433E-02,2.789683081E-02,2.756875801E-06,1.431165934E-01,5.292826080E+01,9.876584045E-06,5.543031421E-06,3.877763823E-02,3.877763823E-02,2.009986474E-06,3.071699440E-01,3.105798066E-01,1.393410116E-01,3.975625753E+00,2.546010733E+00,3.943209723E-02,1.125061870E+00,7.204980254E-01,6.128929928E-02,1.748683453E+00,1.119869709E+00,3.077843785E-01,1.426600516E-01,1.872090846E-01,1.983222663E-01,1.298099011E-01,-2.092708601E-04,-2.997129923E-04,5.089838523E-04,2.077952726E-03,3.861167235E-03,0.000000000E+00,7.957003117E-01,2.009901509E-04,3.080002777E-02,3.841316462E+00,0.000000000E+00,1.241958141E+00,2.158911133E+02,-4.321856689E+02,5.301828766E+01,-5.826991796E-01 +1.250755638E-01,7.834999847E+01,2.695896912E+01,1.020365953E+00,4.095075130E-01,8.547489047E-01,2.438737679E+01,2.420822382E+00,2.427444458E+00,2.427413702E+00,2.427413702E+00,1.557435989E+00,7.190202637E+02,1.200000048E+00,1.859803438E+00,1.859803438E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.161706924E+00,2.420822382E+00,8.479462862E-01,2.419328690E+01,6.622065790E-03,6.802606862E-03,1.940894425E-01,1.917366870E-02,1.560839748E+01,1.587911509E-03,1.292645335E+00,3.775390331E-03,3.073370695E+00,2.265781397E-03,1.844467878E+00,1.723256335E-02,2.155580558E-03,6.150222197E-02,8.240793832E-03,6.708449364E+00,6.708449364E+00,6.540948525E-04,5.324683785E-01,5.324683785E-01,1.535245334E-03,1.249772310E+00,1.249772310E+00,9.770960314E-04,7.954087257E-01,7.954087257E-01,7.566545159E-03,9.364130092E-04,2.671738714E-02,1.921994425E-02,1.564606857E+01,1.588635496E-03,1.293234706E+00,3.775390564E-03,3.073370934E+00,-2.271569567E-03,-1.849179745E+00,1.727641560E-02,-2.161215292E-03,-6.166298687E-02,8.749244213E-01,9.212502837E-01,1.687872410E+00,1.687135458E+00,3.363757324E+03,6.155253947E-02,2.520624921E-02,2.352369279E-01,5.407861993E-02,1.312728077E-01,3.440612182E-02,2.751787379E-02,2.756875801E-06,1.418980062E-01,5.225982285E+01,9.876584045E-06,5.543031421E-06,3.825324029E-02,3.825324029E-02,2.009986474E-06,3.063485622E-01,3.091862798E-01,1.384677142E-01,3.950709343E+00,2.528162241E+00,3.984845430E-02,1.136941314E+00,7.275612354E-01,6.144400686E-02,1.753097534E+00,1.121857047E+00,3.055446744E-01,1.424578130E-01,1.858412176E-01,1.962804347E-01,1.258415133E-01,-2.129894274E-04,-2.655100834E-04,4.784995108E-04,2.069852315E-03,3.849474946E-03,0.000000000E+00,7.973383069E-01,1.997695799E-04,3.186075017E-02,3.854700327E+00,0.000000000E+00,1.196881056E+00,2.155414429E+02,-4.216481628E+02,5.274052811E+01,-5.853201747E-01 +1.272887588E-01,7.973639679E+01,2.739288139E+01,1.018884063E+00,4.089127779E-01,8.580037951E-01,2.448024368E+01,2.423940182E+00,2.430351257E+00,2.430320740E+00,2.430320740E+00,1.558384061E+00,7.202570190E+02,1.200000048E+00,1.861377954E+00,1.861377954E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.168952107E+00,2.423940182E+00,8.513726592E-01,2.429104805E+01,6.411254406E-03,6.631112657E-03,1.891964376E-01,1.893227361E-02,1.541188812E+01,1.620577765E-03,1.319237351E+00,3.793735523E-03,3.088304758E+00,2.274448751E-03,1.851523519E+00,1.681558229E-02,2.146101091E-03,6.123175472E-02,8.121409453E-03,6.611263752E+00,6.611263752E+00,6.665874971E-04,5.426380634E-01,5.426380634E-01,1.541134203E-03,1.254566073E+00,1.254566073E+00,9.789615870E-04,7.969273925E-01,7.969273925E-01,7.368057966E-03,9.306076681E-04,2.655175142E-02,1.897624508E-02,1.544768333E+01,1.621292788E-03,1.319819450E+00,3.793735756E-03,3.088304758E+00,-2.280055778E-03,-1.856088042E+00,1.685668714E-02,-2.151522320E-03,-6.138643250E-02,8.727112412E-01,9.189631939E-01,1.693432570E+00,1.692529798E+00,3.368810791E+03,6.072266772E-02,2.483029850E-02,2.337708473E-01,5.335645005E-02,1.296748668E-01,3.445766866E-02,2.714619786E-02,2.756875801E-06,1.406918764E-01,5.160010147E+01,9.876584045E-06,5.543031421E-06,3.773892298E-02,3.773892298E-02,2.009986474E-06,3.054963350E-01,3.077971637E-01,1.375933439E-01,3.925761938E+00,2.510373116E+00,4.025626555E-02,1.148576736E+00,7.344731092E-01,6.159308553E-02,1.757351041E+00,1.123762131E+00,3.032948673E-01,1.422317624E-01,1.844577491E-01,1.942495704E-01,1.220358387E-01,-2.164601174E-04,-2.326268877E-04,4.490870051E-04,2.061966108E-03,3.838055534E-03,0.000000000E+00,7.987938523E-01,1.985148701E-04,3.294207156E-02,3.867784262E+00,0.000000000E+00,1.153944492E+00,2.152026672E+02,-4.113171082E+02,5.245074844E+01,-5.863554478E-01 +1.295193434E-01,8.113367462E+01,2.783037949E+01,1.017446041E+00,4.083356857E-01,8.611832261E-01,2.457095909E+01,2.426967621E+00,2.433174372E+00,2.433143616E+00,2.433143616E+00,1.559304237E+00,7.214595337E+02,1.200000048E+00,1.862906456E+00,1.862906456E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.176048875E+00,2.426967621E+00,8.547198772E-01,2.438654900E+01,6.206839811E-03,6.463319995E-03,1.844090372E-01,1.869232394E-02,1.521655750E+01,1.652881503E-03,1.345534444E+00,3.811447648E-03,3.102723360E+00,2.282595495E-03,1.858155489E+00,1.641014405E-02,2.136190422E-03,6.094899029E-02,8.003269322E-03,6.515091419E+00,6.515091419E+00,6.789164618E-04,5.526745319E-01,5.526745319E-01,1.546788611E-03,1.259169102E+00,1.259169102E+00,9.806101443E-04,7.982693911E-01,7.982693911E-01,7.175599691E-03,9.246532572E-04,2.638186142E-02,1.873409934E-02,1.525056458E+01,1.653587329E-03,1.346109033E+00,3.811447881E-03,3.102723598E+00,-2.288025571E-03,-1.862575889E+00,1.644866914E-02,-2.141405130E-03,-6.109777465E-02,8.704806566E-01,9.166558981E-01,1.698863864E+00,1.697799206E+00,3.373752197E+03,5.990863591E-02,2.446286194E-02,2.323066741E-01,5.264814198E-02,1.281020641E-01,3.450662270E-02,2.678165212E-02,2.756875801E-06,1.394983977E-01,5.094910049E+01,9.876584045E-06,5.543031421E-06,3.723447770E-02,3.723447770E-02,2.009986474E-06,3.046157956E-01,3.064133823E-01,1.367186606E-01,3.900805950E+00,2.492654085E+00,4.065552726E-02,1.159968376E+00,7.412339449E-01,6.173667684E-02,1.761447906E+00,1.125586867E+00,3.010368049E-01,1.419825852E-01,1.830602139E-01,1.922308952E-01,1.183864847E-01,-2.193900873E-04,-2.016283397E-04,4.210184270E-04,2.054287121E-03,3.826902714E-03,0.000000000E+00,8.000743985E-01,1.972290775E-04,3.404352069E-02,3.880579472E+00,0.000000000E+00,1.113048196E+00,2.148743134E+02,-4.011923828E+02,5.214953613E+01,-5.856027007E-01 +1.317674369E-01,8.254193115E+01,2.827147865E+01,1.016050220E+00,4.077754617E-01,8.642901182E-01,2.465960312E+01,2.429908514E+00,2.435917139E+00,2.435886383E+00,2.435886383E+00,1.560197711E+00,7.226292114E+02,1.200000048E+00,1.864390969E+00,1.864390969E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.183002472E+00,2.429908514E+00,8.579909205E-01,2.447987556E+01,6.008651573E-03,6.299206987E-03,1.797266304E-01,1.845402457E-02,1.502256775E+01,1.684799325E-03,1.371517181E+00,3.828536253E-03,3.116634369E+00,2.290233970E-03,1.864373565E+00,1.601593010E-02,2.125871601E-03,6.065457687E-02,7.886442356E-03,6.419988155E+00,6.419988155E+00,6.910733064E-04,5.625708103E-01,5.625708103E-01,1.552211354E-03,1.263583541E+00,1.263583541E+00,9.820483392E-04,7.994401455E-01,7.994401455E-01,6.988979410E-03,9.185597301E-04,2.620800398E-02,1.849370450E-02,1.505486965E+01,1.685495838E-03,1.372084141E+00,3.828536253E-03,3.116634369E+00,-2.295490820E-03,-1.868653059E+00,1.605203375E-02,-2.130886074E-03,-6.079764664E-02,8.682325482E-01,9.143274426E-01,1.704171062E+00,1.702948689E+00,3.378585938E+03,5.911025405E-02,2.410374023E-02,2.308455706E-01,5.195337161E-02,1.265540421E-01,3.455289826E-02,2.642407082E-02,2.756875801E-06,1.383176744E-01,5.030679703E+01,9.876584045E-06,5.543031421E-06,3.673966974E-02,3.673966974E-02,2.009986474E-06,3.037094772E-01,3.050357699E-01,1.358444244E-01,3.875862360E+00,2.475015402E+00,4.104620591E-02,1.171115041E+00,7.478431463E-01,6.187489256E-02,1.765391350E+00,1.127332807E+00,2.987722754E-01,1.417111009E-01,1.816501170E-01,1.902255118E-01,1.148872972E-01,-2.220731694E-04,-1.719069842E-04,3.939801536E-04,2.046762966E-03,3.815924749E-03,0.000000000E+00,8.011851907E-01,1.959143265E-04,3.516453505E-02,3.893096447E+00,0.000000000E+00,1.074079752E+00,2.145558777E+02,-3.912740173E+02,5.183755875E+01,-5.828684568E-01 +1.340332031E-01,8.396125031E+01,2.871620369E+01,1.014694571E+00,4.072314203E-01,8.673272133E-01,2.474625587E+01,2.432766676E+00,2.438583136E+00,2.438552380E+00,2.438552380E+00,1.561065674E+00,7.237673950E+02,1.200000048E+00,1.865833521E+00,1.865833521E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.189817786E+00,2.432766676E+00,8.611884713E-01,2.457110786E+01,5.816514138E-03,6.138736848E-03,1.751481593E-01,1.821755059E-02,1.483006573E+01,1.716311905E-03,1.397170186E+00,3.845008090E-03,3.130043268E+00,2.297379542E-03,1.870190501E+00,1.563263498E-02,2.115173265E-03,6.034933403E-02,7.770989090E-03,6.326003075E+00,6.326003075E+00,7.030513952E-04,5.723216534E-01,5.723216534E-01,1.557404874E-03,1.267811298E+00,1.267811298E+00,9.832842043E-04,8.004462123E-01,8.004462123E-01,6.808016449E-03,9.123398922E-04,2.603054233E-02,1.825523563E-02,1.486074352E+01,1.716998871E-03,1.397729397E+00,3.845008090E-03,3.130043268E+00,-2.302467357E-03,-1.874332190E+00,1.566646621E-02,-2.119994024E-03,-6.048687920E-02,8.659667969E-01,9.119785428E-01,1.709359050E+00,1.707982659E+00,3.383317627E+03,5.832727253E-02,2.375272848E-02,2.293886244E-01,5.127181858E-02,1.250305176E-01,3.459645808E-02,2.607329935E-02,2.756875801E-06,1.371498108E-01,4.967316818E+01,9.876584045E-06,5.543031421E-06,3.625428304E-02,3.625428304E-02,2.009986474E-06,3.027796745E-01,3.036651015E-01,1.349712908E-01,3.850950480E+00,2.457466602E+00,4.142830521E-02,1.182016969E+00,7.543011308E-01,6.200782582E-02,1.769184113E+00,1.129001021E+00,2.965030670E-01,1.414182335E-01,1.802288592E-01,1.882344186E-01,1.115323007E-01,-2.242847549E-04,-1.438910986E-04,3.681758535E-04,2.039377810E-03,3.805098590E-03,0.000000000E+00,8.021328449E-01,1.945733093E-04,3.630453348E-02,3.905346155E+00,0.000000000E+00,1.036947846E+00,2.142469482E+02,-3.815610046E+02,5.151535416E+01,-5.779769421E-01 +1.363167614E-01,8.539172363E+01,2.916457176E+01,1.013377666E+00,4.067029059E-01,8.702972531E-01,2.483099747E+01,2.435545444E+00,2.441175699E+00,2.441144943E+00,2.441144943E+00,1.561909199E+00,7.248754883E+02,1.200000048E+00,1.867235661E+00,1.867235661E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.196500063E+00,2.435545444E+00,8.643153906E-01,2.466032410E+01,5.630258005E-03,5.981874652E-03,1.706726104E-01,1.798306778E-02,1.463918495E+01,1.747398055E-03,1.422475934E+00,3.860868281E-03,3.142954350E+00,2.304043621E-03,1.875615478E+00,1.525993831E-02,2.104116604E-03,6.003387272E-02,7.656961679E-03,6.233178616E+00,6.233178616E+00,7.148431032E-04,5.819207430E-01,5.819207430E-01,1.562370453E-03,1.271853566E+00,1.271853566E+00,9.843241423E-04,8.012927771E-01,8.012927771E-01,6.632525939E-03,9.060030570E-04,2.584974281E-02,1.801885106E-02,1.466831398E+01,1.748075243E-03,1.423027158E+00,3.860868514E-03,3.142954588E+00,-2.308966359E-03,-1.879622698E+00,1.529163867E-02,-2.108749934E-03,-6.016606838E-02,8.636832237E-01,9.096084833E-01,1.714432240E+00,1.712905884E+00,3.387951416E+03,5.755946785E-02,2.340963297E-02,2.279368639E-01,5.060315877E-02,1.235311180E-01,3.463723511E-02,2.572917193E-02,2.756875801E-06,1.359948665E-01,4.904816055E+01,9.876584045E-06,5.543031421E-06,3.577808291E-02,3.577808291E-02,2.009986474E-06,3.018286526E-01,3.023020029E-01,1.340998858E-01,3.826087713E+00,2.440015793E+00,4.180181399E-02,1.192673802E+00,7.606076002E-01,6.213555112E-02,1.772828341E+00,1.130592227E+00,2.942309082E-01,1.411050260E-01,1.787978411E-01,1.862585545E-01,1.083157435E-01,-2.262535127E-04,-1.171033655E-04,3.433568636E-04,2.032084623E-03,3.794340882E-03,0.000000000E+00,8.029225469E-01,1.932080049E-04,3.746284544E-02,3.917338371E+00,0.000000000E+00,1.001552105E+00,2.139470825E+02,-3.720525208E+02,5.118352890E+01,-5.707750916E-01 +1.386182457E-01,8.683341980E+01,2.961660385E+01,1.012097955E+00,4.061892927E-01,8.732028604E-01,2.491389847E+01,2.438248396E+00,2.443698168E+00,2.443667412E+00,2.443667412E+00,1.562729359E+00,7.259546509E+02,1.200000048E+00,1.868599534E+00,1.868599534E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.203053832E+00,2.438248396E+00,8.673743010E-01,2.474760056E+01,5.449711811E-03,5.828573834E-03,1.662987024E-01,1.775072142E-02,1.445004082E+01,1.778039732E-03,1.447420001E+00,3.876120783E-03,3.155370712E+00,2.310240641E-03,1.880660176E+00,1.489753835E-02,2.092727693E-03,5.970892683E-02,7.544406224E-03,6.141551971E+00,6.141551971E+00,7.264423766E-04,5.913631320E-01,5.913631320E-01,1.567109255E-03,1.275711179E+00,1.275711179E+00,9.851754876E-04,8.019858003E-01,8.019858003E-01,6.462330930E-03,8.995605749E-04,2.566592768E-02,1.778469421E-02,1.447769642E+01,1.778707141E-03,1.447963238E+00,3.876121016E-03,3.155370951E+00,-2.315002261E-03,-1.884536266E+00,1.492723729E-02,-2.097179648E-03,-5.983594805E-02,8.613817692E-01,9.072178602E-01,1.719395161E+00,1.717722654E+00,3.392491943E+03,5.680658296E-02,2.307425626E-02,2.264911979E-01,4.994707182E-02,1.220554635E-01,3.467519954E-02,2.539152838E-02,2.756875801E-06,1.348529011E-01,4.843171692E+01,9.876584045E-06,5.543031421E-06,3.531084582E-02,3.531084582E-02,2.009986474E-06,3.008584380E-01,3.009470701E-01,1.332307905E-01,3.801290989E+00,2.422671080E+00,4.216674343E-02,1.203085780E+00,7.667630315E-01,6.225812808E-02,1.776325703E+00,1.132107139E+00,2.919576168E-01,1.407725364E-01,1.773583442E-01,1.842988580E-01,1.052320302E-01,-2.278077882E-04,-9.186644456E-05,3.196742327E-04,2.024865476E-03,3.783623455E-03,0.000000000E+00,8.035602570E-01,1.918208000E-04,3.863878176E-02,3.929083109E+00,0.000000000E+00,9.678093791E-01,2.136558838E+02,-3.627468262E+02,5.084257889E+01,-5.611445308E-01 +1.409378201E-01,8.828645325E+01,3.007232094E+01,1.010853648E+00,4.056899250E-01,8.760465384E-01,2.499503326E+01,2.440878630E+00,2.446153402E+00,2.446122408E+00,2.446122408E+00,1.563527226E+00,7.270060425E+02,1.200000048E+00,1.869926572E+00,1.869926572E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.209483981E+00,2.440878630E+00,8.703677654E-01,2.483300781E+01,5.274709314E-03,5.678790156E-03,1.620251238E-01,1.752063632E-02,1.426274014E+01,1.808218192E-03,1.471986771E+00,3.890768392E-03,3.167294741E+00,2.315981546E-03,1.885333538E+00,1.454512030E-02,2.081026323E-03,5.937506631E-02,7.433359977E-03,6.051154613E+00,6.051154613E+00,7.378425216E-04,6.006434560E-01,6.006434560E-01,1.571621979E-03,1.279384732E+00,1.279384732E+00,9.858441772E-04,8.025301695E-01,8.025301695E-01,6.297254004E-03,8.930211188E-04,2.547934651E-02,1.755288616E-02,1.428899288E+01,1.808875590E-03,1.472522020E+00,3.890768392E-03,3.167294741E+00,-2.320586005E-03,-1.889081836E+00,1.457294263E-02,-2.085303189E-03,-5.949709192E-02,8.590621948E-01,9.048060179E-01,1.724251986E+00,1.722437263E+00,3.396943848E+03,5.606838316E-02,2.274641022E-02,2.250524908E-01,4.930322617E-02,1.206031516E-01,3.471029922E-02,2.506020479E-02,2.756875801E-06,1.337239295E-01,4.782375336E+01,9.876584045E-06,5.543031421E-06,3.485234827E-02,3.485234827E-02,2.009986474E-06,2.998710275E-01,2.996007502E-01,1.323645264E-01,3.776575565E+00,2.405439377E+00,4.252309352E-02,1.213253021E+00,7.727674246E-01,6.237561628E-02,1.779677868E+00,1.133546233E+00,2.896848619E-01,1.404218674E-01,1.759116650E-01,1.823563725E-01,1.022758111E-01,-2.291252022E-04,-6.780541298E-05,2.969306079E-04,2.017683117E-03,3.772880882E-03,0.000000000E+00,8.040508032E-01,1.904135279E-04,3.983156756E-02,3.940589666E+00,0.000000000E+00,9.356294870E-01,2.133729858E+02,-3.536423035E+02,5.049305344E+01,-5.490114689E-01 +1.432756037E-01,8.975089264E+01,3.053174591E+01,1.009643674E+00,4.052043259E-01,8.788307905E-01,2.507447243E+01,2.443439245E+00,2.448544502E+00,2.448513508E+00,2.448513508E+00,1.564303875E+00,7.280309448E+02,1.200000048E+00,1.871218443E+00,1.871218443E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.215794921E+00,2.443439245E+00,8.732982874E-01,2.491662216E+01,5.105085671E-03,5.532470997E-03,1.578503996E-01,1.729292981E-02,1.407737446E+01,1.837916789E-03,1.496163130E+00,3.904813435E-03,3.178728104E+00,2.321279375E-03,1.889646292E+00,1.420238614E-02,2.069036011E-03,5.903296545E-02,7.323855069E-03,5.962011814E+00,5.962011814E+00,7.490380085E-04,6.097572446E-01,6.097572446E-01,1.575909322E-03,1.282874942E+00,1.282874942E+00,9.863371961E-04,8.029314876E-01,8.029314876E-01,6.137125660E-03,8.863947587E-04,2.529028431E-02,1.732353866E-02,1.410229206E+01,1.838564174E-03,1.496690154E+00,3.904813668E-03,3.178728104E+00,-2.325730864E-03,-1.893269897E+00,1.422844734E-02,-2.073143609E-03,-5.915015936E-02,8.567243814E-01,9.023733735E-01,1.729006767E+00,1.727053642E+00,3.401311035E+03,5.534460396E-02,2.242590673E-02,2.236215174E-01,4.867131636E-02,1.191737652E-01,3.474251181E-02,2.473504283E-02,2.756875801E-06,1.326079369E-01,4.722419357E+01,9.876584045E-06,5.543031421E-06,3.440236300E-02,3.440236300E-02,2.009986474E-06,2.988682985E-01,2.982634902E-01,1.315016150E-01,3.751955032E+00,2.388326883E+00,4.287088662E-02,1.223176241E+00,7.786213756E-01,6.248806044E-02,1.782886028E+00,1.134909868E+00,2.874144912E-01,1.400540322E-01,1.744590104E-01,1.804321557E-01,9.944187850E-02,-2.300759224E-04,-4.515998444E-05,2.752359142E-04,2.010528697E-03,3.762100823E-03,0.000000000E+00,8.043997884E-01,1.889883279E-04,4.104040936E-02,3.951867580E+00,0.000000000E+00,9.049360156E-01,2.130980072E+02,-3.447367554E+02,5.013541412E+01,-5.343580842E-01 +1.456317455E-01,9.122682953E+01,3.099489784E+01,1.008466482E+00,4.047318697E-01,8.815579414E-01,2.515228271E+01,2.445933342E+00,2.450873852E+00,2.450842857E+00,2.450842857E+00,1.565060139E+00,7.290302734E+02,1.200000048E+00,1.872476697E+00,1.872476697E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.221991301E+00,2.445933342E+00,8.761683702E-01,2.499850845E+01,4.940680694E-03,5.389566068E-03,1.537730843E-01,1.706769876E-02,1.389402485E+01,1.867118757E-03,1.519935012E+00,3.918258939E-03,3.189673424E+00,2.326144604E-03,1.893606782E+00,1.386903506E-02,2.056775382E-03,5.868314952E-02,7.215918042E-03,5.874145031E+00,5.874145031E+00,7.600229583E-04,6.186995506E-01,6.186995506E-01,1.579972100E-03,1.286182165E+00,1.286182165E+00,9.866598994E-04,8.031942248E-01,8.031942248E-01,5.981777329E-03,8.796895272E-04,2.509897389E-02,1.709674671E-02,1.391767120E+01,1.867755898E-03,1.520453811E+00,3.918258939E-03,3.189673424E+00,-2.330446849E-03,-1.897109151E+00,1.389344502E-02,-2.060719533E-03,-5.879567936E-02,8.543682694E-01,8.999194503E-01,1.733663678E+00,1.731575966E+00,3.405597900E+03,5.463500321E-02,2.211256139E-02,2.221990079E-01,4.805101827E-02,1.177668646E-01,3.477180749E-02,2.441588230E-02,2.756875801E-06,1.315049380E-01,4.663294601E+01,9.876584045E-06,5.543031421E-06,3.396067023E-02,3.396067023E-02,2.009986474E-06,2.978519797E-01,2.969356179E-01,1.306424588E-01,3.727442026E+00,2.371339560E+00,4.321013391E-02,1.232855439E+00,7.843250036E-01,6.259550899E-02,1.785951853E+00,1.136198521E+00,2.851481736E-01,1.396700144E-01,1.730015278E-01,1.785273105E-01,9.672522545E-02,-2.307985851E-04,-2.363384010E-05,2.544324379E-04,2.003381960E-03,3.751249053E-03,0.000000000E+00,8.046117425E-01,1.875468879E-04,4.226444662E-02,3.962925673E+00,0.000000000E+00,8.756476045E-01,2.128306274E+02,-3.360280457E+02,4.977017212E+01,-5.172267556E-01 +1.480064094E-01,9.271437073E+01,3.146179771E+01,1.007320881E+00,4.042721093E-01,8.842302561E-01,2.522852707E+01,2.448363304E+00,2.453144550E+00,2.453113556E+00,2.453113556E+00,1.565796852E+00,7.300051270E+02,1.200000048E+00,1.873702765E+00,1.873702765E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.228077412E+00,2.448363304E+00,8.789802194E-01,2.507873535E+01,4.781336524E-03,5.250018090E-03,1.497915685E-01,1.684503071E-02,1.371276093E+01,1.895809080E-03,1.543290496E+00,3.931107931E-03,3.200133324E+00,2.330589341E-03,1.897224903E+00,1.354478113E-02,2.044265857E-03,5.832623318E-02,7.109569386E-03,5.787571907E+00,5.787571907E+00,7.707924233E-04,6.274664998E-01,6.274664998E-01,1.583811361E-03,1.289307594E+00,1.289307594E+00,9.868188063E-04,8.033235073E-01,8.033235073E-01,5.831049290E-03,8.729145047E-04,2.490567043E-02,1.687259413E-02,1.373519897E+01,1.896436093E-03,1.543800950E+00,3.931107931E-03,3.200133324E+00,-2.334746532E-03,-1.900609136E+00,1.356764231E-02,-2.048051916E-03,-5.843425542E-02,8.519936204E-01,8.974445462E-01,1.738226414E+00,1.736007810E+00,3.409808594E+03,5.393932387E-02,2.180619910E-02,2.207855880E-01,4.744203761E-02,1.163820475E-01,3.479816765E-02,2.410257235E-02,2.756875801E-06,1.304148734E-01,4.604991531E+01,9.876584045E-06,5.543031421E-06,3.352705762E-02,3.352705762E-02,2.009986474E-06,2.968236804E-01,2.956174314E-01,1.297874898E-01,3.703048468E+00,2.354482412E+00,4.354086146E-02,1.242291570E+00,7.898791432E-01,6.269802153E-02,1.788876534E+00,1.137412667E+00,2.828875184E-01,1.392706782E-01,1.715403348E-01,1.766429096E-01,9.412098676E-02,-2.311967255E-04,1.478097602E-05,2.345975954E-04,1.996242208E-03,3.740328830E-03,0.000000000E+00,8.046916723E-01,1.860911143E-04,4.350281134E-02,3.973772526E+00,0.000000000E+00,8.476939201E-01,2.125705109E+02,-3.275136108E+02,4.939775467E+01,-4.977205098E-01 +1.503997147E-01,9.421358490E+01,3.193247032E+01,1.006205678E+00,4.038245082E-01,8.868499398E-01,2.530327225E+01,2.450732231E+00,2.455358982E+00,2.455327988E+00,2.455327988E+00,1.566514969E+00,7.309565430E+02,1.200000048E+00,1.874898076E+00,1.874898076E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.234057426E+00,2.450732231E+00,8.817361593E-01,2.515736771E+01,4.626900889E-03,5.113773979E-03,1.459042877E-01,1.662500016E-02,1.353364468E+01,1.923972624E-03,1.566217184E+00,3.943364602E-03,3.210110903E+00,2.334623365E-03,1.900508881E+00,1.322933845E-02,2.031524666E-03,5.796270818E-02,7.004826330E-03,5.702305317E+00,5.702305317E+00,7.813412230E-04,6.360538006E-01,6.360538006E-01,1.587428502E-03,1.292252183E+00,1.292252183E+00,9.868190391E-04,8.033237457E-01,8.033237457E-01,5.684783682E-03,8.660770254E-04,2.471058816E-02,1.665115170E-02,1.355493259E+01,1.924589393E-03,1.566719174E+00,3.943364602E-03,3.210110903E+00,-2.338639228E-03,-1.903778076E+00,1.325074676E-02,-2.035158454E-03,-5.806637928E-02,8.496002555E-01,8.949482441E-01,1.742698908E+00,1.740352869E+00,3.413946777E+03,5.325732008E-02,2.150664665E-02,2.193818688E-01,4.684406519E-02,1.150188595E-01,3.482156992E-02,2.379495837E-02,2.756875801E-06,1.293376982E-01,4.547499847E+01,9.876584045E-06,5.543031421E-06,3.310130909E-02,3.310130909E-02,2.009986474E-06,2.957850099E-01,2.943092287E-01,1.289370954E-01,3.678785086E+00,2.337760210E+00,4.386309162E-02,1.251485348E+00,7.952840328E-01,6.279564649E-02,1.791661978E+00,1.138552904E+00,2.806340158E-01,1.388568282E-01,1.700765193E-01,1.747798175E-01,9.162449092E-02,-2.313792065E-04,1.577496914E-05,2.156042319E-04,1.989094075E-03,3.729313379E-03,0.000000000E+00,8.046439290E-01,1.846225787E-04,4.475457221E-02,3.984416723E+00,0.000000000E+00,8.210014701E-01,2.123173523E+02,-3.191909485E+02,4.901863480E+01,-4.759956598E-01 +1.528118253E-01,9.572458649E+01,3.240693665E+01,1.005119562E+00,4.033886492E-01,8.894191384E-01,2.537657547E+01,2.453042269E+00,2.457519531E+00,2.457488537E+00,2.457488537E+00,1.567215204E+00,7.318853760E+02,1.200000048E+00,1.876063943E+00,1.876063943E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.239935398E+00,2.453042269E+00,8.844383359E-01,2.523446465E+01,4.477224778E-03,4.980775528E-03,1.421096325E-01,1.640767418E-02,1.335672855E+01,1.951596234E-03,1.588704228E+00,3.955033608E-03,3.219609976E+00,2.338257618E-03,1.903467536E+00,1.292243600E-02,2.018571133E-03,5.759311840E-02,6.901701912E-03,5.618356228E+00,5.618356228E+00,7.916650502E-04,6.444578767E-01,6.444578767E-01,1.590825384E-03,1.295017481E+00,1.295017481E+00,9.866664186E-04,8.031994700E-01,8.031994700E-01,5.542830098E-03,8.591852384E-04,2.451395243E-02,1.643248275E-02,1.337692451E+01,1.952202641E-03,1.589197874E+00,3.955033608E-03,3.219609976E+00,-2.342136344E-03,-1.906625032E+00,1.294248179E-02,-2.022057772E-03,-5.769259855E-02,8.471881747E-01,8.924307227E-01,1.747084498E+00,1.744614959E+00,3.418016357E+03,5.258873478E-02,2.121373452E-02,2.179883868E-01,4.625681788E-02,1.136768833E-01,3.484201059E-02,2.349289507E-02,2.756875801E-06,1.282733679E-01,4.490809631E+01,9.876584045E-06,5.543031421E-06,3.268322349E-02,3.268322349E-02,2.009986474E-06,2.947373688E-01,2.930112183E-01,1.280915886E-01,3.654661417E+00,2.321176767E+00,4.417685792E-02,1.260437608E+00,8.005405068E-01,6.288844347E-02,1.794309616E+00,1.139620066E+00,2.783887982E-01,1.384291500E-01,1.686111093E-01,1.729386598E-01,8.923121542E-02,-2.312754514E-04,3.377082248E-05,1.975046325E-04,1.981930807E-03,3.718194552E-03,0.000000000E+00,8.044731617E-01,1.831429690E-04,4.601879045E-02,3.994865894E+00,0.000000000E+00,7.955058217E-01,2.120708771E+02,-3.110573730E+02,4.863320923E+01,-4.522531033E-01 +1.552428752E-01,9.724745178E+01,3.288521957E+01,1.004061699E+00,4.029640555E-01,8.919398785E-01,2.544849586E+01,2.455296040E+00,2.459628344E+00,2.459597111E+00,2.459597111E+00,1.567898273E+00,7.327925415E+02,1.200000048E+00,1.877201557E+00,1.877201557E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.245715499E+00,2.455296040E+00,8.870888948E-01,2.531009102E+01,4.332163837E-03,4.850967322E-03,1.384059936E-01,1.619310863E-02,1.318206120E+01,1.978666289E-03,1.610740662E+00,3.966120537E-03,3.228635311E+00,2.341502113E-03,1.906108618E+00,1.262380555E-02,2.005421091E-03,5.721792951E-02,6.800204515E-03,5.535732269E+00,5.535732269E+00,8.017592481E-04,6.526750922E-01,6.526750922E-01,1.594003988E-03,1.297605038E+00,1.297605038E+00,9.863658343E-04,8.029548526E-01,8.029548526E-01,5.405042320E-03,8.522457792E-04,2.431595884E-02,1.621664129E-02,1.320121765E+01,1.979262335E-03,1.611225843E+00,3.966120537E-03,3.228635311E+00,-2.345247427E-03,-1.909157515E+00,1.264257357E-02,-2.008765936E-03,-5.731335655E-02,8.447571397E-01,8.898916245E-01,1.751386762E+00,1.748797178E+00,3.422020752E+03,5.193333328E-02,2.092730440E-02,2.166056782E-01,4.568001255E-02,1.123557016E-01,3.485947475E-02,2.319623902E-02,2.756875801E-06,1.272218227E-01,4.434910583E+01,9.876584045E-06,5.543031421E-06,3.227260709E-02,3.227260709E-02,2.009986474E-06,2.936822176E-01,2.917236090E-01,1.272513121E-01,3.630687237E+00,2.304736137E+00,4.448218644E-02,1.269149184E+00,8.056491613E-01,6.297647953E-02,1.796821475E+00,1.140614748E+00,2.761528194E-01,1.379882097E-01,1.671451032E-01,1.711197048E-01,8.693679422E-02,-2.309711417E-04,5.077563765E-05,1.801954932E-04,1.974731451E-03,3.706935095E-03,0.000000000E+00,8.041834235E-01,1.816536824E-04,4.729447886E-02,4.005127907E+00,0.000000000E+00,7.711408734E-01,2.118307800E+02,-3.031101990E+02,4.824190903E+01,-4.267253876E-01 +1.576930285E-01,9.878227234E+01,3.336734390E+01,1.003030896E+00,4.025503695E-01,8.944141269E-01,2.551909065E+01,2.457495928E+00,2.461687565E+00,2.461656570E+00,2.461656570E+00,1.568565011E+00,7.336788330E+02,1.200000048E+00,1.878312111E+00,1.878312111E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.251401544E+00,2.457495928E+00,8.896898627E-01,2.538430023E+01,4.191577900E-03,4.724292085E-03,1.347917467E-01,1.598135382E-02,1.300968075E+01,2.005170798E-03,1.632316828E+00,3.976630978E-03,3.237191677E+00,2.344366862E-03,1.908440590E+00,1.233319286E-02,1.992091769E-03,5.683762208E-02,6.700342055E-03,5.454438686E+00,5.454438686E+00,8.116200333E-04,6.607023478E-01,6.607023478E-01,1.596966758E-03,1.300016761E+00,1.300016761E+00,9.859227575E-04,8.025941253E-01,8.025941253E-01,5.271280184E-03,8.452656912E-04,2.411680669E-02,1.600367203E-02,1.302785015E+01,2.005756367E-03,1.632793546E+00,3.976631444E-03,3.237191677E+00,-2.347982256E-03,-1.911383867E+00,1.235076226E-02,-1.995299710E-03,-5.692914873E-02,8.423069715E-01,8.873311877E-01,1.755609035E+00,1.752903104E+00,3.425964111E+03,5.129086599E-02,2.064719237E-02,2.152341902E-01,4.511338100E-02,1.110548899E-01,3.487396613E-02,2.290485427E-02,2.756875801E-06,1.261829883E-01,4.379792023E+01,9.876584045E-06,5.543031421E-06,3.186925873E-02,3.186925873E-02,2.009986474E-06,2.926208675E-01,2.904465199E-01,1.264165789E-01,3.606870651E+00,2.288441896E+00,4.477912560E-02,1.277621269E+00,8.106107116E-01,6.305982918E-02,1.799199581E+00,1.141537905E+00,2.739267051E-01,1.375344545E-01,1.656794846E-01,1.693228781E-01,8.473703265E-02,-2.304154477E-04,6.670536095E-05,1.637100795E-04,1.967482967E-03,3.695514286E-03,0.000000000E+00,8.037789464E-01,1.801562466E-04,4.858063906E-02,4.015211105E+00,0.000000000E+00,7.478482127E-01,2.115968323E+02,-2.953466187E+02,4.784511185E+01,-3.996636868E-01 +1.601624191E-01,1.003291550E+02,3.385333252E+01,1.002026081E+00,4.021471143E-01,8.968438506E-01,2.558841515E+01,2.459644079E+00,2.463699341E+00,2.463668346E+00,2.463668346E+00,1.569216132E+00,7.345451050E+02,1.200000048E+00,1.879396677E+00,1.879396677E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.256997466E+00,2.459644079E+00,8.922432065E-01,2.545714951E+01,4.055330995E-03,4.600694869E-03,1.312653124E-01,1.577245258E-02,1.283962440E+01,2.031097887E-03,1.653422952E+00,3.986572381E-03,3.245284081E+00,2.346860478E-03,1.910470486E+00,1.205034647E-02,1.978597604E-03,5.645260960E-02,6.602118723E-03,5.374479294E+00,5.374479294E+00,8.212433895E-04,6.685363054E-01,6.685363054E-01,1.599716023E-03,1.302254796E+00,1.302254796E+00,9.853417287E-04,8.021211028E-01,8.021211028E-01,5.141407251E-03,8.382510860E-04,2.391666733E-02,1.579361781E-02,1.285685444E+01,2.031673212E-03,1.653891206E+00,3.986572381E-03,3.245284081E+00,-2.350350143E-03,-1.913311362E+00,1.206679177E-02,-1.981673529E-03,-5.654037371E-02,8.398375511E-01,8.847489953E-01,1.759754658E+00,1.756935716E+00,3.429849365E+03,5.066109449E-02,2.037325129E-02,2.138743699E-01,4.455665499E-02,1.097740456E-01,3.488547727E-02,2.261860482E-02,2.756875801E-06,1.251568049E-01,4.325443268E+01,9.876584045E-06,5.543031421E-06,3.147299960E-02,3.147299960E-02,2.009986474E-06,2.915546000E-01,2.891801596E-01,1.255876422E-01,3.583219767E+00,2.272297382E+00,4.506769776E-02,1.285854816E+00,8.154258132E-01,6.313855946E-02,1.801445723E+00,1.142390490E+00,2.717108130E-01,1.370681673E-01,1.642152071E-01,1.675477773E-01,8.262789249E-02,-2.296760649E-04,8.171226364E-05,1.479638013E-04,1.960164169E-03,3.683894174E-03,0.000000000E+00,8.032634854E-01,1.786518988E-04,4.987624288E-02,4.025121689E+00,0.000000000E+00,7.255691290E-01,2.113687592E+02,-2.877638550E+02,4.744320679E+01,-3.713231683E-01 +1.626512110E-01,1.018881836E+02,3.434321213E+01,1.001046538E+00,4.017539918E-01,8.992308378E-01,2.565651894E+01,2.461742401E+00,2.465665817E+00,2.465634584E+00,2.465634584E+00,1.569852114E+00,7.353921509E+02,1.200000048E+00,1.880456567E+00,1.880456567E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.262506723E+00,2.461742401E+00,8.947507143E-01,2.552869415E+01,3.923289943E-03,4.480117932E-03,1.278250664E-01,1.556644030E-02,1.267191887E+01,2.056437079E-03,1.674050450E+00,3.995949868E-03,3.252918005E+00,2.348992275E-03,1.912206054E+00,1.177502610E-02,1.964953495E-03,5.606332421E-02,6.505534984E-03,5.295855522E+00,5.295855522E+00,8.306260570E-04,6.761742830E-01,6.761742830E-01,1.602254342E-03,1.304321170E+00,1.304321170E+00,9.846274043E-04,8.015396595E-01,8.015396595E-01,5.015293602E-03,8.312079590E-04,2.371571586E-02,1.558651216E-02,1.268825817E+01,2.057002159E-03,1.674510360E+00,3.995949868E-03,3.252918005E+00,-2.352359705E-03,-1.914947391E+00,1.179041807E-02,-1.967902528E-03,-5.614745989E-02,8.373487592E-01,8.821451664E-01,1.763826728E+00,1.760898232E+00,3.433680176E+03,5.004377663E-02,2.010532469E-02,2.125266343E-01,4.400958493E-02,1.085127592E-01,3.489401564E-02,2.233736217E-02,2.756875801E-06,1.241431832E-01,4.271854401E+01,9.876584045E-06,5.543031421E-06,3.108364530E-02,3.108364530E-02,2.009986474E-06,2.904846370E-01,2.879246175E-01,1.247647777E-01,3.559742212E+00,2.256305456E+00,4.534795135E-02,1.293850899E+00,8.200953603E-01,6.321272999E-02,1.803562045E+00,1.143173456E+00,2.695052624E-01,1.365895420E-01,1.627532095E-01,1.657938510E-01,8.060549945E-02,-2.287175303E-04,9.574204887E-05,1.329754741E-04,1.952764811E-03,3.672057996E-03,0.000000000E+00,8.026409745E-01,1.771419193E-04,5.118023604E-02,4.034866810E+00,0.000000000E+00,7.042513490E-01,2.111463623E+02,-2.803591003E+02,4.703654480E+01,-3.419512212E-01 +1.651595533E-01,1.034594650E+02,3.483700180E+01,1.000091314E+00,4.013706148E-01,9.015768766E-01,2.572345543E+01,2.463793039E+00,2.467588425E+00,2.467557192E+00,2.467557192E+00,1.570473671E+00,7.362206421E+02,1.200000048E+00,1.881492496E+00,1.881492496E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.267933011E+00,2.463793039E+00,8.972143531E-01,2.559898567E+01,3.795326455E-03,4.362506326E-03,1.244694069E-01,1.536334772E-02,1.250659084E+01,2.081177896E-03,1.694190741E+00,4.004769959E-03,3.260098219E+00,2.350771101E-03,1.913653970E+00,1.150699519E-02,1.951172482E-03,5.567012727E-02,6.410591304E-03,5.218565941E+00,5.218565941E+00,8.397646016E-04,6.836135387E-01,6.836135387E-01,1.604584046E-03,1.306217670E+00,1.306217670E+00,9.837842081E-04,8.008532524E-01,8.008532524E-01,4.892811179E-03,8.241416072E-04,2.351410128E-02,1.538237929E-02,1.252208328E+01,2.081732498E-03,1.694642186E+00,4.004769959E-03,3.260098219E+00,-2.354019787E-03,-1.916298747E+00,1.152139995E-02,-1.953999046E-03,-5.575076863E-02,8.348404765E-01,8.795194030E-01,1.767828226E+00,1.764793515E+00,3.437459717E+03,4.943867400E-02,1.984326914E-02,2.111913711E-01,4.347191378E-02,1.072706282E-01,3.489958122E-02,2.206099406E-02,2.756875801E-06,1.231420636E-01,4.219013596E+01,9.876584045E-06,5.543031421E-06,3.070101887E-02,3.070101887E-02,2.009986474E-06,2.894121706E-01,2.866799831E-01,1.239482239E-01,3.536444664E+00,2.240468979E+00,4.561992735E-02,1.301610708E+00,8.246201277E-01,6.328240782E-02,1.805550098E+00,1.143887401E+00,2.673102021E-01,1.360986531E-01,1.612944156E-01,1.640604734E-01,7.866614312E-02,-2.275939623E-04,1.089189100E-04,1.186750524E-04,1.945272787E-03,3.659985494E-03,0.000000000E+00,8.019148111E-01,1.756274287E-04,5.249153823E-02,4.044454098E+00,0.000000000E+00,6.838431954E-01,2.109293823E+02,-2.731294861E+02,4.662548828E+01,-3.117780685E-01 +1.676875949E-01,1.050430832E+02,3.533473206E+01,9.991595149E-01,4.009966552E-01,9.038836360E-01,2.578927231E+01,2.465797901E+00,2.469469309E+00,2.469438076E+00,2.469438076E+00,1.571081400E+00,7.370313110E+02,1.200000048E+00,1.882505536E+00,1.882505536E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.273279905E+00,2.465797901E+00,8.996358514E-01,2.566807556E+01,3.671312705E-03,4.247802310E-03,1.211967096E-01,1.516319718E-02,1.234365749E+01,2.105311025E-03,1.713836312E+00,4.013037775E-03,3.266828775E+00,2.352204639E-03,1.914821148E+00,1.124602649E-02,1.937267371E-03,5.527339131E-02,6.317283027E-03,5.142608166E+00,5.142608166E+00,8.486560546E-04,6.908516288E-01,6.908516288E-01,1.606707228E-03,1.307946086E+00,1.307946086E+00,9.828165639E-04,8.000655174E-01,8.000655174E-01,4.773837049E-03,8.170571527E-04,2.331197076E-02,1.518124156E-02,1.235834694E+01,2.105855383E-03,1.714279413E+00,4.013038240E-03,3.266828775E+00,-2.355338540E-03,-1.917372227E+00,1.125950459E-02,-1.939975773E-03,-5.535066873E-02,8.323124051E-01,8.768717647E-01,1.771762013E+00,1.768624544E+00,3.441191406E+03,4.884553328E-02,1.958693378E-02,2.098689079E-01,4.294340312E-02,1.060472429E-01,3.490219265E-02,2.178937942E-02,2.756875801E-06,1.221533716E-01,4.166910172E+01,9.876584045E-06,5.543031421E-06,3.032494523E-02,3.032494523E-02,2.009986474E-06,2.883382738E-01,2.854463458E-01,1.231382042E-01,3.513333559E+00,2.224790096E+00,4.588366672E-02,1.309135675E+00,8.290009499E-01,6.334765255E-02,1.807411671E+00,1.144533277E+00,2.651256919E-01,1.355955303E-01,1.598396748E-01,1.623471230E-01,7.680628449E-02,-2.262818016E-04,1.212111529E-04,1.050706487E-04,1.937687048E-03,3.647676669E-03,0.000000000E+00,8.010884523E-01,1.741094893E-04,5.380903184E-02,4.053889275E+00,0.000000000E+00,6.642988920E-01,2.107176361E+02,-2.660720215E+02,4.621036530E+01,-2.810129225E-01 +1.702354848E-01,1.066391373E+02,3.583642960E+01,9.982503653E-01,4.006317854E-01,9.061528444E-01,2.585401535E+01,2.467758656E+00,2.471309662E+00,2.471278429E+00,2.471278429E+00,1.571675897E+00,7.378247070E+02,1.200000048E+00,1.883496642E+00,1.883496642E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.278550625E+00,2.467758656E+00,9.020168781E-01,2.573600960E+01,3.551124129E-03,4.135948140E-03,1.180053353E-01,1.496600639E-02,1.218313313E+01,2.128827386E-03,1.732979894E+00,4.020757508E-03,3.273112774E+00,2.353301039E-03,1.915713668E+00,1.099189371E-02,1.923248987E-03,5.487342551E-02,6.225605030E-03,5.067977428E+00,5.067977428E+00,8.572976221E-04,6.978863478E-01,6.978863478E-01,1.608625404E-03,1.309507608E+00,1.309507608E+00,9.817280807E-04,7.991794944E-01,7.991794944E-01,4.658249673E-03,8.099589613E-04,2.310944721E-02,1.498311199E-02,1.219705868E+01,2.129361266E-03,1.733414531E+00,4.020757508E-03,3.273112774E+00,-2.356323414E-03,-1.918173909E+00,1.100450382E-02,-1.925843884E-03,-5.494746193E-02,8.297644854E-01,8.742020130E-01,1.775630951E+00,1.772394061E+00,3.444877686E+03,4.826409742E-02,1.933616959E-02,2.085595578E-01,4.242379963E-02,1.048421785E-01,3.490186110E-02,2.152238972E-02,2.756875801E-06,1.211770102E-01,4.115531540E+01,9.876584045E-06,5.543031421E-06,2.995525114E-02,2.995525114E-02,2.009986474E-06,2.872639894E-01,2.842236757E-01,1.223349199E-01,3.490414381E+00,2.209270954E+00,4.613921791E-02,1.316426992E+00,8.332387209E-01,6.340850890E-02,1.809147954E+00,1.145111442E+00,2.629519403E-01,1.350802779E-01,1.583898365E-01,1.606534868E-01,7.502255589E-02,-2.248246747E-04,1.327206555E-04,9.210401186E-05,1.930003986E-03,3.635126865E-03,0.000000000E+00,8.001651168E-01,1.725890324E-04,5.513156205E-02,4.063179016E+00,0.000000000E+00,6.455734372E-01,2.105109100E+02,-2.591836853E+02,4.579150391E+01,-2.498428375E-01 +1.728034019E-01,1.082477341E+02,3.634211349E+01,9.973631501E-01,4.002757072E-01,9.083859921E-01,2.591773033E+01,2.469676971E+00,2.473111629E+00,2.473080397E+00,2.473080397E+00,1.572257638E+00,7.386016235E+02,1.200000048E+00,1.884466767E+00,1.884466767E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.283748388E+00,2.469676971E+00,9.043591022E-01,2.580283737E+01,3.434637794E-03,4.026886076E-03,1.148936152E-01,1.477178372E-02,1.202502632E+01,2.151719062E-03,1.751614928E+00,4.027931020E-03,3.278952599E+00,2.354067750E-03,1.916337729E+00,1.074437704E-02,1.909128507E-03,5.447054282E-02,6.135548465E-03,4.994666576E+00,4.994666576E+00,8.656869177E-04,7.047156692E-01,7.047156692E-01,1.610339619E-03,1.310902953E+00,1.310902953E+00,9.805229492E-04,7.981984019E-01,7.981984019E-01,4.545932170E-03,8.028513403E-04,2.290665545E-02,1.478799991E-02,1.203822708E+01,2.152242698E-03,1.752041221E+00,4.027931020E-03,3.278952599E+00,-2.356981859E-03,-1.918709874E+00,1.075617410E-02,-1.911614090E-03,-5.454146117E-02,8.271965981E-01,8.715101480E-01,1.779437900E+00,1.776104569E+00,3.448522217E+03,4.769410938E-02,1.909083128E-02,2.072636038E-01,4.191286862E-02,1.036550328E-01,3.489859775E-02,2.125989832E-02,2.756875801E-06,1.202128902E-01,4.064865112E+01,9.876584045E-06,5.543031421E-06,2.959175967E-02,2.959175967E-02,2.009986474E-06,2.861903012E-01,2.830120027E-01,1.215385273E-01,3.467692137E+00,2.193913460E+00,4.638662562E-02,1.323485851E+00,8.373343349E-01,6.346500665E-02,1.810759783E+00,1.145622373E+00,2.607893646E-01,1.345530599E-01,1.569456607E-01,1.589794308E-01,7.331176847E-02,-2.232073457E-04,1.434310834E-04,7.977626956E-05,1.922223251E-03,3.622337477E-03,0.000000000E+00,7.991479039E-01,1.710669458E-04,5.645793304E-02,4.072329044E+00,0.000000000E+00,6.276266575E-01,2.103090210E+02,-2.524614105E+02,4.536920547E+01,-2.184338570E-01 +1.753914803E-01,1.098689651E+02,3.685181808E+01,9.964970350E-01,3.999281228E-01,9.105846286E-01,2.598046303E+01,2.471554756E+00,2.474876404E+00,2.474845171E+00,2.474845171E+00,1.572827101E+00,7.393625488E+02,1.200000048E+00,1.885416627E+00,1.885416627E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.288876653E+00,2.471554756E+00,9.066640735E-01,2.586860275E+01,3.321732860E-03,3.920556046E-03,1.118598431E-01,1.458053384E-02,1.186933899E+01,2.173978370E-03,1.769735336E+00,4.034559708E-03,3.284348488E+00,2.354511293E-03,1.916698813E+00,1.050326042E-02,1.894915127E-03,5.406501517E-02,6.047102157E-03,4.922666073E+00,4.922666073E+00,8.738216711E-04,7.113378048E-01,7.113378048E-01,1.611849875E-03,1.312132478E+00,1.312132478E+00,9.792044293E-04,7.971250415E-01,7.971250415E-01,4.436768591E-03,7.957379567E-04,2.270369790E-02,1.459590532E-02,1.188185120E+01,2.174491994E-03,1.770153284E+00,4.034559708E-03,3.284348726E+00,-2.357320627E-03,-1.918985844E+00,1.051429473E-02,-1.897295355E-03,-5.413292721E-02,8.246085048E-01,8.687959313E-01,1.783185363E+00,1.779758930E+00,3.452127441E+03,4.713528976E-02,1.885076612E-02,2.059812695E-01,4.141036049E-02,1.024853513E-01,3.489242867E-02,2.100178041E-02,2.756875801E-06,1.192608997E-01,4.014897919E+01,9.876584045E-06,5.543031421E-06,2.923429944E-02,2.923429944E-02,2.009986474E-06,2.851181328E-01,2.818112373E-01,1.207491979E-01,3.445171118E+00,2.178718567E+00,4.662594199E-02,1.330314040E+00,8.412887454E-01,6.351716071E-02,1.812247992E+00,1.146065950E+00,2.586384416E-01,1.340142041E-01,1.555078924E-01,1.573250294E-01,7.167088985E-02,-2.214642154E-04,1.534244511E-04,6.803976430E-05,1.914337976E-03,3.609296866E-03,0.000000000E+00,7.980396748E-01,1.695439860E-04,5.778689682E-02,4.081345558E+00,0.000000000E+00,6.104194522E-01,2.101117859E+02,-2.459019470E+02,4.494377136E+01,-1.869318038E-01 +1.779998988E-01,1.115029297E+02,3.736556244E+01,9.956514239E-01,3.995887637E-01,9.127503037E-01,2.604225159E+01,2.473393440E+00,2.476605654E+00,2.476574421E+00,2.476574421E+00,1.573384762E+00,7.401080322E+02,1.200000048E+00,1.886346936E+00,1.886346936E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.293938279E+00,2.473393440E+00,9.089334607E-01,2.593334961E+01,3.212291049E-03,3.816897515E-03,1.089022979E-01,1.439225487E-02,1.171606922E+01,2.195599256E-03,1.787335753E+00,4.040643107E-03,3.289300680E+00,2.354638884E-03,1.916802645E+00,1.026833337E-02,1.880618045E-03,5.365709588E-02,5.960252136E-03,4.851965904E+00,4.851965904E+00,8.817000780E-04,7.177512646E-01,7.177512646E-01,1.613156055E-03,1.313195705E+00,1.313195705E+00,9.777760133E-04,7.959622145E-01,7.959622145E-01,4.330647178E-03,7.886221865E-04,2.250067517E-02,1.440682355E-02,1.172792912E+01,2.196102403E-03,1.787745476E+00,4.040643107E-03,3.289300680E+00,-2.357346704E-03,-1.919006944E+00,1.027865149E-02,-1.882896991E-03,-5.372211337E-02,8.220000863E-01,8.660593033E-01,1.786875725E+00,1.783359528E+00,3.455696289E+03,4.658737406E-02,1.861582883E-02,2.047127932E-01,4.091603681E-02,1.013327092E-01,3.488337621E-02,2.074791119E-02,2.756875801E-06,1.183209419E-01,3.965615463E+01,9.876584045E-06,5.543031421E-06,2.888269909E-02,2.888269909E-02,2.009986474E-06,2.840483487E-01,2.806212902E-01,1.199670583E-01,3.422855377E+00,2.163687468E+00,4.685721919E-02,1.336912751E+00,8.451029658E-01,6.356498599E-02,1.813612461E+00,1.146442175E+00,2.564998567E-01,1.334641427E-01,1.540772021E-01,1.556905359E-01,7.009705156E-02,-2.195849083E-04,1.626926824E-04,5.689222235E-05,1.906339661E-03,3.595990827E-03,0.000000000E+00,7.968430519E-01,1.680208952E-04,5.911716819E-02,4.090234756E+00,0.000000000E+00,5.939161181E-01,2.099190216E+02,-2.395020142E+02,4.451548767E+01,-1.554621756E-01 +1.806287915E-01,1.131497269E+02,3.788338089E+01,9.948256016E-01,3.992573321E-01,9.148844481E-01,2.610314178E+01,2.475194454E+00,2.478300571E+00,2.478269339E+00,2.478269339E+00,1.573931217E+00,7.408387451E+02,1.200000048E+00,1.887258649E+00,1.887258649E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.298936248E+00,2.475194454E+00,9.111685753E-01,2.599712372E+01,3.106197109E-03,3.715850180E-03,1.060192510E-01,1.420693845E-02,1.156521130E+01,2.216574969E-03,1.804411292E+00,4.046179354E-03,3.293807507E+00,2.354456345E-03,1.916654110E+00,1.003938913E-02,1.866245293E-03,5.324701592E-02,5.874983501E-03,4.782552242E+00,4.782552242E+00,8.893203922E-04,7.239546180E-01,7.239546180E-01,1.614257111E-03,1.314092159E+00,1.314092159E+00,9.762408445E-04,7.947125435E-01,7.947125435E-01,4.227460362E-03,7.815072313E-04,2.229767293E-02,1.422074623E-02,1.157645226E+01,2.217068337E-03,1.804812789E+00,4.046179354E-03,3.293807507E+00,-2.357065910E-03,-1.918778419E+00,1.004903764E-02,-1.868426683E-03,-5.330925435E-02,8.193712234E-01,8.633000255E-01,1.790511727E+00,1.786908627E+00,3.459231445E+03,4.605009407E-02,1.838587411E-02,2.034583241E-01,4.042965919E-02,1.001966670E-01,3.487146273E-02,2.049816772E-02,2.756875801E-06,1.173928827E-01,3.917004395E+01,9.876584045E-06,5.543031421E-06,2.853678726E-02,2.853678726E-02,2.009986474E-06,2.829817235E-01,2.794420123E-01,1.191922054E-01,3.400747538E+00,2.148820877E+00,4.708051309E-02,1.343283653E+00,8.487780094E-01,6.360847503E-02,1.814853191E+00,1.146750569E+00,2.543744147E-01,1.329035163E-01,1.526542008E-01,1.540763378E-01,6.858751178E-02,-2.175952541E-04,1.712993690E-04,4.629587784E-05,1.898213173E-03,3.582392819E-03,0.000000000E+00,7.955606580E-01,1.664983138E-04,6.044743210E-02,4.099000931E+00,0.000000000E+00,5.780816674E-01,2.097305756E+02,-2.332582550E+02,4.408463669E+01,-1.241284460E-01 +1.832783371E-01,1.148094559E+02,3.840529633E+01,9.940189123E-01,3.989335895E-01,9.169883728E-01,2.616316986E+01,2.476959229E+00,2.479962587E+00,2.479931355E+00,2.479931355E+00,1.574466705E+00,7.415551147E+02,1.200000048E+00,1.888152361E+00,1.888152361E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.303873658E+00,2.476959229E+00,9.133710265E-01,2.605996132E+01,3.003340214E-03,3.617353039E-03,1.032089666E-01,1.402457245E-02,1.141675568E+01,2.236901084E-03,1.820957661E+00,4.051166121E-03,3.297866821E+00,2.353969961E-03,1.916258097E+00,9.816232137E-03,1.851804671E-03,5.283499882E-02,5.791278090E-03,4.714411736E+00,4.714411736E+00,8.966813330E-04,7.299468517E-01,7.299468517E-01,1.615152112E-03,1.314820647E+00,1.314820647E+00,9.746020078E-04,7.933784127E-01,7.933784127E-01,4.127104767E-03,7.743960596E-04,2.209478058E-02,1.403765753E-02,1.142740822E+01,2.237384208E-03,1.821350932E+00,4.051166121E-03,3.297866821E+00,-2.356484300E-03,-1.918305039E+00,9.825252928E-03,-1.853892230E-03,-5.289456248E-02,8.167216778E-01,8.605180979E-01,1.794095635E+00,1.790408850E+00,3.462735596E+03,4.552317783E-02,1.816076040E-02,2.022180259E-01,3.995100036E-02,9.907680750E-02,3.485672176E-02,2.025243267E-02,2.756875801E-06,1.164766103E-01,3.869049835E+01,9.876584045E-06,5.543031421E-06,2.819640189E-02,2.819640189E-02,2.009986474E-06,2.819190025E-01,2.782732844E-01,1.184247434E-01,3.378850698E+00,2.134119034E+00,4.729588330E-02,1.349428535E+00,8.523149490E-01,6.364761293E-02,1.815970063E+00,1.146991014E+00,2.522630394E-01,1.323329955E-01,1.512394696E-01,1.524830014E-01,6.713966280E-02,-2.154874528E-04,1.792402618E-04,3.624718738E-05,1.889943727E-03,3.568476299E-03,0.000000000E+00,7.941949964E-01,1.649768674E-04,6.177636608E-02,4.107650757E+00,0.000000000E+00,5.628834367E-01,2.095462952E+02,-2.271673279E+02,4.365149307E+01,-9.301078320E-02 +1.859486997E-01,1.164822235E+02,3.893133926E+01,9.932308197E-01,3.986172676E-01,9.190635085E-01,2.622237587E+01,2.478689432E+00,2.481592894E+00,2.481561661E+00,2.481561661E+00,1.574991822E+00,7.422576904E+02,1.200000048E+00,1.889028907E+00,1.889028907E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.308753252E+00,2.478689432E+00,9.155421257E-01,2.612190628E+01,2.903615125E-03,3.521346953E-03,1.004697531E-01,1.384514105E-02,1.127068901E+01,2.256572247E-03,1.836971164E+00,4.055601079E-03,3.301477194E+00,2.353185322E-03,1.915619493E+00,9.598677047E-03,1.837303396E-03,5.242125690E-02,5.709118675E-03,4.647529602E+00,4.647529602E+00,9.037817363E-04,7.357268929E-01,7.357268929E-01,1.615839894E-03,1.315380573E+00,1.315380573E+00,9.728624718E-04,7.919623256E-01,7.919623256E-01,4.029482137E-03,7.672914071E-04,2.189207263E-02,1.385754067E-02,1.128078365E+01,2.257045591E-03,1.837356329E+00,4.055601079E-03,3.301477194E+00,-2.355607692E-03,-1.917591333E+00,9.607107379E-03,-1.839300850E-03,-5.247824639E-02,8.140513301E-01,8.577132821E-01,1.797629833E+00,1.793862224E+00,3.466210938E+03,4.500637949E-02,1.794035733E-02,2.009920031E-01,3.947984800E-02,9.797273576E-02,3.483917564E-02,2.001059428E-02,2.756875801E-06,1.155719906E-01,3.821739578E+01,9.876584045E-06,5.543031421E-06,2.786139026E-02,2.786139026E-02,2.009986474E-06,2.808608711E-01,2.771148980E-01,1.176647469E-01,3.357166529E+00,2.119582653E+00,4.750338942E-02,1.355348945E+00,8.557148576E-01,6.368240714E-02,1.816962600E+00,1.147162914E+00,2.501666546E-01,1.317533106E-01,1.498335600E-01,1.509110928E-01,6.575096399E-02,-2.132806985E-04,1.865645463E-04,2.671615221E-05,1.881514094E-03,3.554209834E-03,0.000000000E+00,7.927483916E-01,1.634571236E-04,6.310266256E-02,4.116188049E+00,0.000000000E+00,5.482887030E-01,2.093660126E+02,-2.212259369E+02,4.321633530E+01,-6.216808781E-02 +1.886400282E-01,1.181681366E+02,3.946153259E+01,9.924606681E-01,3.983081877E-01,9.211110473E-01,2.628079796E+01,2.480385780E+00,2.483192682E+00,2.483161449E+00,2.483161449E+00,1.575506926E+00,7.429468994E+02,1.200000048E+00,1.889888763E+00,1.889888763E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.313577771E+00,2.480385780E+00,9.176833034E-01,2.618299675E+01,2.806921955E-03,3.427774413E-03,9.779997915E-02,1.366862562E-02,1.112699604E+01,2.275585197E-03,1.852448583E+00,4.059482832E-03,3.304637194E+00,2.352108480E-03,1.914742708E+00,9.386547841E-03,1.822748920E-03,5.200599134E-02,5.628485698E-03,4.581890106E+00,4.581890106E+00,9.106207290E-04,7.412942052E-01,7.412942052E-01,1.616319641E-03,1.315770984E+00,1.315770984E+00,9.710250306E-04,7.904666066E-01,7.904666066E-01,3.934501205E-03,7.601959514E-04,2.168962732E-02,1.368037518E-02,1.113656139E+01,2.276048530E-03,1.852825761E+00,4.059482832E-03,3.304637194E+00,-2.354441676E-03,-1.916642070E+00,9.394426830E-03,-1.824659528E-03,-5.206050351E-02,8.113599420E-01,8.548855186E-01,1.801116347E+00,1.797271013E+00,3.469660400E+03,4.449946433E-02,1.772453822E-02,1.997803599E-01,3.901600838E-02,9.688408673E-02,3.481886163E-02,1.977255009E-02,2.756875801E-06,1.146789119E-01,3.775061035E+01,9.876584045E-06,5.543031421E-06,2.753161080E-02,2.753161080E-02,2.009986474E-06,2.798080146E-01,2.759667039E-01,1.169122756E-01,3.335697412E+00,2.105211258E+00,4.770308733E-02,1.361046672E+00,8.589789867E-01,6.371283531E-02,1.817830801E+00,1.147266030E+00,2.480860800E-01,1.311651021E-01,1.484369934E-01,1.493609995E-01,6.441894174E-02,-2.109698980E-04,1.932724990E-04,1.769740993E-05,1.872908906E-03,3.539565951E-03,0.000000000E+00,7.912231088E-01,1.619396498E-04,6.442504376E-02,4.124619007E+00,0.000000000E+00,5.342664719E-01,2.091896057E+02,-2.154308472E+02,4.277943802E+01,-3.164705634E-02 +1.913525015E-01,1.198672867E+02,3.999591064E+01,9.917079210E-01,3.980060816E-01,9.231323600E-01,2.633846855E+01,2.482050180E+00,2.484763384E+00,2.484731913E+00,2.484731913E+00,1.576012254E+00,7.436231689E+02,1.200000048E+00,1.890732646E+00,1.890732646E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.318349957E+00,2.482050180E+00,9.197957516E-01,2.624326897E+01,2.713167807E-03,3.336581169E-03,9.519809484E-02,1.349500753E-02,1.098566151E+01,2.293935977E-03,1.867387295E+00,4.062810913E-03,3.307346344E+00,2.350744558E-03,1.913632393E+00,9.179684334E-03,1.808147645E-03,5.158939585E-02,5.549360998E-03,4.517478466E+00,4.517478466E+00,9.171975544E-04,7.466481328E-01,7.466481328E-01,1.616591006E-03,1.315991998E+00,1.315991998E+00,9.690924780E-04,7.888934016E-01,7.888934016E-01,3.842077451E-03,7.531122537E-04,2.148751915E-02,1.350614056E-02,1.099472427E+01,2.294389531E-03,1.867756486E+00,4.062810913E-03,3.307346344E+00,-2.352991374E-03,-1.915461540E+00,9.187045507E-03,-1.809974900E-03,-5.164152756E-02,8.086475134E-01,8.520345688E-01,1.804557443E+00,1.800637245E+00,3.473086182E+03,4.400221631E-02,1.751318574E-02,1.985831559E-01,3.855929524E-02,9.581054747E-02,3.479580209E-02,1.953821070E-02,2.756875801E-06,1.137972400E-01,3.729004288E+01,9.876584045E-06,5.543031421E-06,2.720694058E-02,2.720694058E-02,2.009986474E-06,2.787609696E-01,2.748284936E-01,1.161674038E-01,3.314445019E+00,2.091005087E+00,4.789504409E-02,1.366523623E+00,8.621083498E-01,6.373890489E-02,1.818574667E+00,1.147300243E+00,2.460218370E-01,1.305689365E-01,1.470502466E-01,1.478328407E-01,6.314118207E-02,-2.085708984E-04,1.994058694E-04,9.165026313E-06,1.864114311E-03,3.524519037E-03,0.000000000E+00,7.896214128E-01,1.604249701E-04,6.574232131E-02,4.132947922E+00,0.000000000E+00,5.207856297E-01,2.090169220E+02,-2.097790680E+02,4.234107208E+01,1.044798829E-02 +1.940862834E-01,1.215797806E+02,4.053450012E+01,9.909721017E-01,3.977107704E-01,9.251285195E-01,2.639542389E+01,2.483683348E+00,2.486305714E+00,2.486274242E+00,2.486274242E+00,1.576508403E+00,7.442870483E+02,1.200000048E+00,1.891561151E+00,1.891561151E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.323072433E+00,2.483683348E+00,9.218808413E-01,2.630276108E+01,2.622265136E-03,3.247715533E-03,9.266261011E-02,1.332426630E-02,1.084666920E+01,2.311622258E-03,1.881784797E+00,4.065586254E-03,3.309605837E+00,2.349099144E-03,1.912292957E+00,8.977936581E-03,1.793506672E-03,5.117166415E-02,5.471726414E-03,4.454279423E+00,4.454279423E+00,9.235119214E-04,7.517883778E-01,7.517883778E-01,1.616654801E-03,1.316043973E+00,1.316043973E+00,9.670676081E-04,7.872450352E-01,7.872450352E-01,3.752132645E-03,7.460428169E-04,2.128581516E-02,1.333481446E-02,1.085525608E+01,2.312066033E-03,1.882146120E+00,4.065586254E-03,3.309605837E+00,-2.351262840E-03,-1.914054275E+00,8.984813467E-03,-1.795253600E-03,-5.122150481E-02,8.059137464E-01,8.491603136E-01,1.807955384E+00,1.803963184E+00,3.476490723E+03,4.351443052E-02,1.730619371E-02,1.974004656E-01,3.810956329E-02,9.475184232E-02,3.477003053E-02,1.930749603E-02,2.756875801E-06,1.129268706E-01,3.683560562E+01,9.876584045E-06,5.543031421E-06,2.688726597E-02,2.688726597E-02,2.009986474E-06,2.777203321E-01,2.737001479E-01,1.154301912E-01,3.293411255E+00,2.076964378E+00,4.807932302E-02,1.371781349E+00,8.651041985E-01,6.376063079E-02,1.819194674E+00,1.147265434E+00,2.439742088E-01,1.299652010E-01,1.456738114E-01,1.463264376E-01,6.191531196E-02,-2.060825500E-04,2.049722971E-04,-4.617544164E-06,1.855123905E-03,3.509058384E-03,0.000000000E+00,7.879455090E-01,1.589136227E-04,6.705337018E-02,4.141179562E+00,0.000000000E+00,5.078168511E-01,2.088478394E+02,-2.042676544E+02,4.190151215E+01,2.820223756E-02 +1.968415380E-01,1.233057327E+02,4.107733154E+01,9.902526140E-01,3.974220157E-01,9.271008372E-01,2.645169640E+01,2.485286474E+00,2.487820625E+00,2.487789392E+00,2.487789392E+00,1.576995492E+00,7.449389038E+02,1.200000048E+00,1.892374873E+00,1.892374873E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.327747822E+00,2.485286474E+00,9.239397049E-01,2.636150360E+01,2.534131519E-03,3.161128843E-03,9.019214660E-02,1.315638330E-02,1.071000290E+01,2.328641713E-03,1.895639539E+00,4.067812115E-03,3.311417818E+00,2.347177826E-03,1.910728931E+00,8.781167679E-03,1.778831938E-03,5.075297132E-02,5.395563785E-03,4.392279148E+00,4.392279148E+00,9.295634809E-04,7.567146420E-01,7.567146420E-01,1.616512192E-03,1.315927863E+00,1.315927863E+00,9.649529820E-04,7.855235934E-01,7.855235934E-01,3.664592979E-03,7.389898528E-04,2.108458430E-02,1.316637546E-02,1.071813774E+01,2.329075942E-03,1.895992994E+00,4.067812115E-03,3.311417818E+00,-2.349260729E-03,-1.912424564E+00,8.787589148E-03,-1.780501800E-03,-5.080061406E-02,8.031584620E-01,8.462626338E-01,1.811311960E+00,1.807250738E+00,3.479876221E+03,4.303591698E-02,1.710345782E-02,1.962323338E-01,3.766667098E-02,9.370773286E-02,3.474157304E-02,1.908033527E-02,2.756875801E-06,1.120676920E-01,3.638722229E+01,9.876584045E-06,5.543031421E-06,2.657249011E-02,2.657249011E-02,2.009986474E-06,2.766866386E-01,2.725815177E-01,1.147006899E-01,3.272597551E+00,2.063089132E+00,4.825599119E-02,1.376821995E+00,8.679677844E-01,6.377805024E-02,1.819691539E+00,1.147162199E+00,2.419432402E-01,1.293542236E-01,1.443081498E-01,1.448412985E-01,6.073899195E-02,-2.035198995E-04,2.100114507E-04,-6.491560271E-06,1.845938386E-03,3.493186552E-03,0.000000000E+00,7.861975431E-01,1.574060589E-04,6.835716963E-02,4.149317741E+00,0.000000000E+00,4.953314066E-01,2.086822510E+02,-1.988939209E+02,4.146102142E+01,5.733995512E-02 +1.996184289E-01,1.250452347E+02,4.162443924E+01,9.895491004E-01,3.971396685E-01,9.290503263E-01,2.650731850E+01,2.486860752E+00,2.489309549E+00,2.489278078E+00,2.489278078E+00,1.577473998E+00,7.455790405E+02,1.200000048E+00,1.893174291E+00,1.893174291E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.332378507E+00,2.486860752E+00,9.259735942E-01,2.641953278E+01,2.448688261E-03,3.076773835E-03,8.778537065E-02,1.299133617E-02,1.057564640E+01,2.344992710E-03,1.908950210E+00,4.069493152E-03,3.312786341E+00,2.344985958E-03,1.908944607E+00,8.589247242E-03,1.764129731E-03,5.033349246E-02,5.320856348E-03,4.331462860E+00,4.331462860E+00,9.353523492E-04,7.614271045E-01,7.614271045E-01,1.616165624E-03,1.315645695E+00,1.315645695E+00,9.627513355E-04,7.837313414E-01,7.837313414E-01,3.579389770E-03,7.319555734E-04,2.088388428E-02,1.300080307E-02,1.058335304E+01,2.345417393E-03,1.909295917E+00,4.069493152E-03,3.312786341E+00,-2.346991096E-03,-1.910576940E+00,8.595243096E-03,-1.765725552E-03,-5.037902296E-02,8.003816009E-01,8.433412313E-01,1.814629197E+00,1.810501695E+00,3.483245117E+03,4.256648570E-02,1.690487750E-02,1.950788051E-01,3.723049164E-02,9.267802536E-02,3.471045569E-02,1.885666512E-02,2.756875801E-06,1.112196147E-01,3.594483185E+01,9.876584045E-06,5.543031421E-06,2.626252361E-02,2.626252361E-02,2.009986474E-06,2.756603360E-01,2.714724839E-01,1.139789745E-01,3.252005577E+00,2.049379349E+00,4.842511192E-02,1.381647229E+00,8.707002401E-01,6.379119307E-02,1.820066452E+00,1.146990895E+00,2.399288863E-01,1.287363172E-01,1.429536492E-01,1.433767974E-01,5.960992724E-02,-2.008861047E-04,2.145390026E-04,-1.365290245E-05,1.836565323E-03,3.476918209E-03,0.000000000E+00,7.843796015E-01,1.559027151E-04,6.965281069E-02,4.157368183E+00,0.000000000E+00,4.833025634E-01,2.085200195E+02,-1.936552277E+02,4.101985550E+01,8.575404435E-02 +2.024171203E-01,1.267984009E+02,4.217584610E+01,9.888610244E-01,3.968635499E-01,9.309781194E-01,2.656232071E+01,2.488407135E+00,2.490772963E+00,2.490741491E+00,2.490741491E+00,1.577944160E+00,7.462078247E+02,1.200000048E+00,1.893959761E+00,1.893959761E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.336966753E+00,2.488407135E+00,9.279835224E-01,2.647688103E+01,2.365859225E-03,2.994605573E-03,8.544097096E-02,1.282910723E-02,1.044358349E+01,2.360674320E-03,1.921715856E+00,4.070636351E-03,3.313716888E+00,2.342529129E-03,1.906944752E+00,8.402050473E-03,1.749405521E-03,4.991338402E-02,5.247585941E-03,4.271817207E+00,4.271817207E+00,9.408785263E-04,7.659257054E-01,7.659257054E-01,1.615617890E-03,1.315199852E+00,1.315199852E+00,9.604651132E-04,7.818702459E-01,7.818702459E-01,3.496456891E-03,7.249417249E-04,2.068376727E-02,1.283807494E-02,1.045088291E+01,2.361089690E-03,1.922053933E+00,4.070636351E-03,3.313716888E+00,-2.344459295E-03,-1.908515811E+00,8.407647721E-03,-1.750930212E-03,-4.995688796E-02,7.975828648E-01,8.403961062E-01,1.817909122E+00,1.813717961E+00,3.486599365E+03,4.210595787E-02,1.671035588E-02,1.939398795E-01,3.680090979E-02,9.166251123E-02,3.467670083E-02,1.863642223E-02,2.756875801E-06,1.103825346E-01,3.550837326E+01,9.876584045E-06,5.543031421E-06,2.595728450E-02,2.595728450E-02,2.009986474E-06,2.746419013E-01,2.703729570E-01,1.132650971E-01,3.231637478E+00,2.035835505E+00,4.858675599E-02,1.386259198E+00,8.733028769E-01,6.380011141E-02,1.820321083E+00,1.146752477E+00,2.379310727E-01,1.281118244E-01,1.416107416E-01,1.419322640E-01,5.852586403E-02,-1.981964742E-04,2.185945923E-04,-2.039811807E-05,1.827012282E-03,3.460268490E-03,0.000000000E+00,7.824937105E-01,1.544039987E-04,7.093948871E-02,4.165333748E+00,0.000000000E+00,4.717050493E-01,2.083610535E+02,-1.885490265E+02,4.057825851E+01,1.132486761E-01 +2.052378207E-01,1.285653381E+02,4.273159027E+01,9.881880879E-01,3.965934515E-01,9.328852296E-01,2.661673355E+01,2.489926338E+00,2.492211819E+00,2.492180347E+00,2.492180347E+00,1.578406215E+00,7.468257446E+02,1.200000048E+00,1.894731998E+00,1.894731998E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.341515183E+00,2.489926338E+00,9.299706221E-01,2.653357506E+01,2.285569441E-03,2.914578654E-03,8.315767348E-02,1.266967319E-02,1.031379509E+01,2.375686076E-03,1.933936119E+00,4.071249627E-03,3.314215899E+00,2.339813160E-03,1.904733658E+00,8.219456300E-03,1.734664314E-03,4.949279875E-02,5.175735801E-03,4.213327408E+00,4.213327408E+00,9.461426525E-04,7.702109814E-01,7.702109814E-01,1.614872948E-03,1.314593434E+00,1.314593434E+00,9.580968181E-04,7.799423337E-01,7.799423337E-01,3.415729851E-03,7.179500535E-04,2.048428357E-02,1.267816871E-02,1.032071114E+01,2.376092132E-03,1.934266686E+00,4.071249627E-03,3.314215899E+00,-2.341670450E-03,-1.906245589E+00,8.224680088E-03,-1.736120787E-03,-4.953435436E-02,7.947621942E-01,8.374269605E-01,1.821153283E+00,1.816901326E+00,3.489941162E+03,4.165413231E-02,1.651979238E-02,1.928155720E-01,3.637780994E-02,9.066101164E-02,3.464033827E-02,1.841955073E-02,2.756875801E-06,1.095563546E-01,3.507778549E+01,9.876584045E-06,5.543031421E-06,2.565668896E-02,2.565668896E-02,2.009986474E-06,2.736316919E-01,2.692828476E-01,1.125591099E-01,3.211494684E+00,2.022457600E+00,4.874099419E-02,1.390659809E+00,8.757769465E-01,6.380488724E-02,1.820457220E+00,1.146447897E+00,2.359497696E-01,1.274811178E-01,1.402797699E-01,1.405071467E-01,5.748461559E-02,-1.954577747E-04,2.222004550E-04,-2.674268762E-05,1.817286597E-03,3.443252761E-03,0.000000000E+00,7.805419564E-01,1.529102447E-04,7.221650332E-02,4.173218727E+00,0.000000000E+00,4.605157077E-01,2.082052460E+02,-1.835727844E+02,4.013645554E+01,1.396148801E-01 +2.080806494E-01,1.303461609E+02,4.329170227E+01,9.875297546E-01,3.963292241E-01,9.347725511E-01,2.667058182E+01,2.491419315E+00,2.493627071E+00,2.493595600E+00,2.493595600E+00,1.578860521E+00,7.474329224E+02,1.200000048E+00,1.895491242E+00,1.895491242E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.346025705E+00,2.491419315E+00,9.319359064E-01,2.658964920E+01,2.207746031E-03,2.836648142E-03,8.093418926E-02,1.251301169E-02,1.018626499E+01,2.390028210E-03,1.945611477E+00,4.071342759E-03,3.314291716E+00,2.336842706E-03,1.902315617E+00,8.041345514E-03,1.719910768E-03,4.907185212E-02,5.105287768E-03,4.155978680E+00,4.155978680E+00,9.511452517E-04,7.742834091E-01,7.742834091E-01,1.613934990E-03,1.313829899E+00,1.313829899E+00,9.556488949E-04,7.779495716E-01,7.779495716E-01,3.337145550E-03,7.109817816E-04,2.028546669E-02,1.252105832E-02,1.019281483E+01,2.390425187E-03,1.945934534E+00,4.071342759E-03,3.314291716E+00,-2.338629914E-03,-1.903770447E+00,8.046219125E-03,-1.721301582E-03,-4.911153764E-02,7.919193506E-01,8.344336152E-01,1.824363708E+00,1.820053458E+00,3.493272461E+03,4.121082649E-02,1.633309200E-02,1.917058676E-01,3.596108034E-02,8.967332542E-02,3.460138664E-02,1.820599101E-02,2.756875801E-06,1.087409779E-01,3.465299988E+01,9.876584045E-06,5.543031421E-06,2.536065876E-02,2.536065876E-02,2.009986474E-06,2.726300955E-01,2.682020962E-01,1.118610576E-01,3.191578150E+00,2.009245396E+00,4.888789356E-02,1.394851208E+00,8.781238198E-01,6.380558759E-02,1.820477247E+00,1.146078587E+00,2.339850068E-01,1.268445104E-01,1.389610469E-01,1.391010135E-01,5.648406968E-02,-1.926853729E-04,2.253958082E-04,-3.271043533E-05,1.807393972E-03,3.425881965E-03,0.000000000E+00,7.785261869E-01,1.514217147E-04,7.348324358E-02,4.181027412E+00,0.000000000E+00,4.497134089E-01,2.080525055E+02,-1.787239227E+02,3.969464874E+01,1.646587104E-01 +2.109458297E-01,1.321409607E+02,4.385621643E+01,9.868856668E-01,3.960707486E-01,9.366411567E-01,2.672389603E+01,2.492887020E+00,2.495019436E+00,2.494987726E+00,2.494987726E+00,1.579307199E+00,7.480298462E+02,1.200000048E+00,1.896238089E+00,1.896238089E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.350500464E+00,2.492887020E+00,9.338803887E-01,2.664512634E+01,2.132316120E-03,2.760768868E-03,7.876922935E-02,1.235909667E-02,1.006096935E+01,2.403701656E-03,1.956742287E+00,4.070926923E-03,3.313953400E+00,2.333623590E-03,1.899695158E+00,7.867598906E-03,1.705148374E-03,4.865065962E-02,5.036221817E-03,4.099755287E+00,4.099755287E+00,9.558872553E-04,7.781436443E-01,7.781436443E-01,1.612809021E-03,1.312913299E+00,1.312913299E+00,9.531235555E-04,7.758938074E-01,7.758938074E-01,3.260642057E-03,7.040380733E-04,2.008735202E-02,1.236671861E-02,1.006717396E+01,2.404089551E-03,1.957058072E+00,4.070926923E-03,3.313953400E+00,-2.335343044E-03,-1.901094913E+00,7.872145623E-03,-1.706476440E-03,-4.868854955E-02,7.890541553E-01,8.314160109E-01,1.827541709E+00,1.823175788E+00,3.496594971E+03,4.077583551E-02,1.615015231E-02,1.906107366E-01,3.555060178E-02,8.869924396E-02,3.455987573E-02,1.799568161E-02,2.756875801E-06,1.079363003E-01,3.423394394E+01,9.876584045E-06,5.543031421E-06,2.506910823E-02,2.506910823E-02,2.009986474E-06,2.716374695E-01,2.671305835E-01,1.111709774E-01,3.171889067E+00,1.996199012E+00,4.902753979E-02,1.398835421E+00,8.803448677E-01,6.380230188E-02,1.820383430E+00,1.145645738E+00,2.320367694E-01,1.262021959E-01,1.376548409E-01,1.377135068E-01,5.552220345E-02,-1.898878400E-04,2.282059868E-04,-3.831815047E-05,1.797339763E-03,3.408167046E-03,0.000000000E+00,7.764481902E-01,1.499386563E-04,7.473915070E-02,4.188762665E+00,0.000000000E+00,4.392792583E-01,2.079027405E+02,-1.739998627E+02,3.925302505E+01,1.882267892E-01 +2.138335109E-01,1.339498596E+02,4.442516327E+01,9.862554669E-01,3.958178163E-01,9.384918213E-01,2.677669907E+01,2.494330168E+00,2.496389389E+00,2.496357918E+00,2.496357918E+00,1.579746604E+00,7.486166992E+02,1.200000048E+00,1.896972775E+00,1.896972775E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.354941726E+00,2.494330168E+00,9.358049631E-01,2.670003891E+01,2.059207996E-03,2.686894033E-03,7.666146010E-02,1.220790017E-02,9.937887192E+00,2.416707575E-03,1.967329979E+00,4.070015159E-03,3.313211203E+00,2.330160700E-03,1.896876097E+00,7.698098198E-03,1.690380508E-03,4.822930694E-02,4.968518391E-03,4.044641018E+00,4.044641018E+00,9.603697690E-04,7.817926407E-01,7.817926407E-01,1.611500396E-03,1.311847925E+00,1.311847925E+00,9.505228954E-04,7.737767100E-01,7.737767100E-01,3.186156973E-03,6.971197436E-04,1.988996007E-02,1.221511979E-02,9.943764687E+00,2.417086624E-03,1.967638493E+00,4.070015159E-03,3.313211203E+00,-2.331814962E-03,-1.898222685E+00,7.702338509E-03,-1.691648271E-03,-4.826547578E-02,7.861664891E-01,8.283738494E-01,1.830689192E+00,1.826270103E+00,3.499910645E+03,4.034896567E-02,1.597087644E-02,1.895301342E-01,3.514625505E-02,8.773853630E-02,3.451582789E-02,1.778855920E-02,2.756875801E-06,1.071422026E-01,3.382053757E+01,9.876584045E-06,5.543031421E-06,2.478194982E-02,2.478194982E-02,2.009986474E-06,2.706540525E-01,2.660682499E-01,1.104888916E-01,3.152427912E+00,1.983317971E+00,4.915999621E-02,1.402614713E+00,8.824414015E-01,6.379512697E-02,1.820178866E+00,1.145151138E+00,2.301049829E-01,1.255541891E-01,1.363614202E-01,1.363444328E-01,5.459713191E-02,-1.870789274E-04,2.306665119E-04,-4.358758088E-05,1.787127112E-03,3.390115220E-03,0.000000000E+00,7.743096948E-01,1.484612003E-04,7.598368078E-02,4.196428776E+00,0.000000000E+00,4.291964769E-01,2.077558594E+02,-1.693979340E+02,3.881175232E+01,2.102213800E-01 +2.167438567E-01,1.357729797E+02,4.499857712E+01,9.856387377E-01,3.955703378E-01,9.403254986E-01,2.682901764E+01,2.495749474E+00,2.497737885E+00,2.497706413E+00,2.497706413E+00,1.580178976E+00,7.491937866E+02,1.200000048E+00,1.897695780E+00,1.897695780E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.359351277E+00,2.495749474E+00,9.377105236E-01,2.675440788E+01,1.988350879E-03,2.614977537E-03,7.460956275E-02,1.205938961E-02,9.816991806E+00,2.429048531E-03,1.977376103E+00,4.068619572E-03,3.312075138E+00,2.326458693E-03,1.893862486E+00,7.532724645E-03,1.675609732E-03,4.780787230E-02,4.902155604E-03,3.990618467E+00,3.990618467E+00,9.645940736E-04,7.852314711E-01,7.852314711E-01,1.610014471E-03,1.310638309E+00,1.310638309E+00,9.478488355E-04,7.715999484E-01,7.715999484E-01,3.113629529E-03,6.902272580E-04,1.969330758E-02,1.206622832E-02,9.822558403E+00,2.429418731E-03,1.977677464E+00,4.068620037E-03,3.312075377E+00,-2.328049624E-03,-1.895157576E+00,7.536678575E-03,-1.676819520E-03,-4.784239084E-02,7.832561135E-01,8.253070116E-01,1.833807468E+00,1.829337716E+00,3.503221436E+03,3.993000835E-02,1.579516381E-02,1.884640008E-01,3.474791348E-02,8.679097891E-02,3.446927667E-02,1.758455671E-02,2.756875801E-06,1.063585803E-01,3.341270065E+01,9.876584045E-06,5.543031421E-06,2.449909225E-02,2.449909225E-02,2.009986474E-06,2.696801126E-01,2.650150061E-01,1.098148003E-01,3.133194923E+00,1.970601439E+00,4.928535223E-02,1.406191349E+00,8.844149709E-01,6.378416717E-02,1.819866180E+00,1.144596457E+00,2.281895727E-01,1.249003261E-01,1.350809932E-01,1.349937022E-01,5.370710418E-02,-1.842661877E-04,2.328002593E-04,-4.853406062E-05,1.776758581E-03,3.371731611E-03,0.000000000E+00,7.721122503E-01,1.469894632E-04,7.721625268E-02,4.204028606E+00,0.000000000E+00,4.194503725E-01,2.076117706E+02,-1.649154358E+02,3.837096786E+01,2.306000143E-01 +2.196770757E-01,1.376104126E+02,4.557648849E+01,9.850352407E-01,3.953281045E-01,9.421429634E-01,2.688087082E+01,2.497145891E+00,2.499065638E+00,2.499034166E+00,2.499034166E+00,1.580604434E+00,7.497614136E+02,1.200000048E+00,1.898407340E+00,1.898407340E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.363731027E+00,2.497145891E+00,9.395979643E-01,2.680825996E+01,1.919675502E-03,2.544972114E-03,7.261219621E-02,1.191353053E-02,9.698253632E+00,2.440726850E-03,1.986882806E+00,4.066753667E-03,3.310556173E+00,2.322521526E-03,1.890657425E+00,7.371361367E-03,1.660838141E-03,4.738641530E-02,4.837111570E-03,3.937668800E+00,3.937668800E+00,9.685616824E-04,7.884612679E-01,7.884612679E-01,1.608356601E-03,1.309288740E+00,1.309288740E+00,9.451031801E-04,7.693647742E-01,7.693647742E-01,3.042999422E-03,6.833610823E-04,1.949740387E-02,1.192000695E-02,9.703526497E+00,2.441088203E-03,1.987177134E+00,4.066753667E-03,3.310556173E+00,-2.324051689E-03,-1.891903162E+00,7.375046611E-03,-1.661992399E-03,-4.741934687E-02,7.803229094E-01,8.222153187E-01,1.836898208E+00,1.832380056E+00,3.506528320E+03,3.951877356E-02,1.562291943E-02,1.874122173E-01,3.435545042E-02,8.585631847E-02,3.442024812E-02,1.738360897E-02,2.756875801E-06,1.055852845E-01,3.301033401E+01,9.876584045E-06,5.543031421E-06,2.422044426E-02,2.422044426E-02,2.009986474E-06,2.687158585E-01,2.639706731E-01,1.091486886E-01,3.114189863E+00,1.958048582E+00,4.940368235E-02,1.409567475E+00,8.862668872E-01,6.376951933E-02,1.819448113E+00,1.143983126E+00,2.262904942E-01,1.242403835E-01,1.338137686E-01,1.336613595E-01,5.285054073E-02,-1.814597053E-04,2.346348774E-04,-5.317517207E-05,1.766235218E-03,3.353019012E-03,0.000000000E+00,7.698572278E-01,1.455235324E-04,7.843621075E-02,4.211565495E+00,0.000000000E+00,4.100278616E-01,2.074703827E+02,-1.605496521E+02,3.793080139E+01,2.493606210E-01 +2.226333320E-01,1.394622650E+02,4.615893555E+01,9.844445586E-01,3.950910568E-01,9.439449906E-01,2.693228722E+01,2.498520136E+00,2.500373125E+00,2.500341654E+00,2.500341654E+00,1.581023335E+00,7.503198853E+02,1.200000048E+00,1.899108052E+00,1.899108052E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.368082762E+00,2.498520136E+00,9.414681792E-01,2.686161804E+01,1.853114576E-03,2.476830967E-03,7.066801935E-02,1.177028101E-02,9.581641197E+00,2.451745560E-03,1.995852590E+00,4.064428620E-03,3.308663607E+00,2.318353392E-03,1.887264252E+00,7.213892881E-03,1.646067481E-03,4.696498439E-02,4.773360677E-03,3.885772467E+00,3.885772467E+00,9.722742252E-04,7.914834619E-01,7.914834619E-01,1.606531674E-03,1.307803154E+00,1.307803154E+00,9.422873845E-04,7.670726180E-01,7.670726180E-01,2.974207979E-03,6.765213911E-04,1.930225641E-02,1.177641563E-02,9.586635590E+00,2.452098532E-03,1.996140003E+00,4.064428620E-03,3.308663607E+00,-2.319824882E-03,-1.888462186E+00,7.217326667E-03,-1.647168421E-03,-4.699639603E-02,7.773666382E-01,8.190985918E-01,1.839962602E+00,1.835398555E+00,3.509833252E+03,3.911506012E-02,1.545404643E-02,1.863746792E-01,3.396873176E-02,8.493429422E-02,3.436876833E-02,1.718564890E-02,2.756875801E-06,1.048221737E-01,3.261334991E+01,9.876584045E-06,5.543031421E-06,2.394591458E-02,2.394591458E-02,2.009986474E-06,2.677614689E-01,2.629351616E-01,1.084905192E-01,3.095411062E+00,1.945657849E+00,4.951507226E-02,1.412745595E+00,8.879987597E-01,6.375126541E-02,1.818927407E+00,1.143312693E+00,2.244077474E-01,1.235741898E-01,1.325598806E-01,1.323476285E-01,5.202600732E-02,-1.786644279E-04,2.361875231E-04,-5.752309517E-05,1.755560865E-03,3.333985340E-03,0.000000000E+00,7.675458789E-01,1.440634369E-04,7.964281738E-02,4.219042301E+00,0.000000000E+00,4.009173512E-01,2.073316498E+02,-1.562978210E+02,3.749135590E+01,2.665187716E-01 +2.256128192E-01,1.413286743E+02,4.674595261E+01,9.838663340E-01,3.948589861E-01,9.457323551E-01,2.698328400E+01,2.499872684E+00,2.501661301E+00,2.501629591E+00,2.501629591E+00,1.581435680E+00,7.508693237E+02,1.200000048E+00,1.899798036E+00,1.899798036E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.372408152E+00,2.499872684E+00,9.433218837E-01,2.691450882E+01,1.788602443E-03,2.410507761E-03,6.877570599E-02,1.162959728E-02,9.467117310E+00,2.462108154E-03,2.004288435E+00,4.061655141E-03,3.306405544E+00,2.313957317E-03,1.883685708E+00,7.060206030E-03,1.631299267E-03,4.654362053E-02,4.710878246E-03,3.834908247E+00,3.834908247E+00,9.757335065E-04,7.942995429E-01,7.942995429E-01,1.604543882E-03,1.306185007E+00,1.306185007E+00,9.394029039E-04,7.647244930E-01,7.647244930E-01,2.907197690E-03,6.697083008E-04,1.910786889E-02,1.163540781E-02,9.471847534E+00,2.462452743E-03,2.004569054E+00,4.061655141E-03,3.306405544E+00,-2.315372229E-03,-1.884837508E+00,7.063405123E-03,-1.632349100E-03,-4.657357931E-02,7.743871808E-01,8.159566522E-01,1.843002081E+00,1.838394403E+00,3.513137451E+03,3.871867806E-02,1.528845541E-02,1.853512377E-01,3.358763084E-02,8.402466029E-02,3.431487456E-02,1.699060760E-02,2.756875801E-06,1.040690914E-01,3.222165680E+01,9.876584045E-06,5.543031421E-06,2.367541008E-02,2.367541008E-02,2.009986474E-06,2.668170333E-01,2.619082630E-01,1.078402326E-01,3.076857328E+00,1.933427691E+00,4.961960390E-02,1.415727973E+00,8.896119595E-01,6.372949481E-02,1.818306208E+00,1.142586589E+00,2.225413918E-01,1.229016334E-01,1.313194931E-01,1.310526878E-01,5.123221129E-02,-1.758869184E-04,2.374782198E-04,-6.159130862E-05,1.744742622E-03,3.314644797E-03,0.000000000E+00,7.651792765E-01,1.426092058E-04,8.083524555E-02,4.226462364E+00,0.000000000E+00,3.921080232E-01,2.071954651E+02,-1.521572418E+02,3.705273438E+01,2.820870280E-01 +2.286157012E-01,1.432097473E+02,4.733757019E+01,9.833002687E-01,3.946318030E-01,9.475058913E-01,2.703388405E+01,2.501204252E+00,2.502930403E+00,2.502898693E+00,2.502898693E+00,1.581841946E+00,7.514100952E+02,1.200000048E+00,1.900477767E+00,1.900477767E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.376709104E+00,2.501204252E+00,9.451599121E-01,2.696694946E+01,1.726075890E-03,2.345956396E-03,6.693395227E-02,1.149143279E-02,9.354643822E+00,2.471819054E-03,2.012193441E+00,4.058441147E-03,3.303789139E+00,2.309336793E-03,1.879924297E+00,6.910190918E-03,1.616534777E-03,4.612236843E-02,4.649637267E-03,3.785054684E+00,3.785054684E+00,9.789415635E-04,7.969110608E-01,7.969110608E-01,1.602396835E-03,1.304437160E+00,1.304437160E+00,9.364509024E-04,7.623214126E-01,7.623214126E-01,2.841913607E-03,6.629219861E-04,1.891424321E-02,1.149693597E-02,9.359124184E+00,2.472155262E-03,2.012467384E+00,4.058441147E-03,3.303789139E+00,-2.310697222E-03,-1.881031632E+00,6.913170218E-03,-1.617535716E-03,-4.615092650E-02,7.713842988E-01,8.127893209E-01,1.846017957E+00,1.841368914E+00,3.516442383E+03,3.832944483E-02,1.512605511E-02,1.843416840E-01,3.321202099E-02,8.312715590E-02,3.425859660E-02,1.679842174E-02,2.756875801E-06,1.033258662E-01,3.183515549E+01,9.876584045E-06,5.543031421E-06,2.340883762E-02,2.340883762E-02,2.009986474E-06,2.658826709E-01,2.608897090E-01,1.071977466E-01,3.058526039E+00,1.921355844E+00,4.971735552E-02,1.418517113E+00,8.911080956E-01,6.370425969E-02,1.817586184E+00,1.141805530E+00,2.206915021E-01,1.222227439E-01,1.300926805E-01,1.297766268E-01,5.046796426E-02,-1.731302473E-04,2.385198168E-04,-6.538956222E-05,1.733790268E-03,3.295016708E-03,0.000000000E+00,7.627584338E-01,1.411608246E-04,8.201261610E-02,4.233828545E+00,0.000000000E+00,3.835899830E-01,2.070617676E+02,-1.481252136E+02,3.661502457E+01,2.960637510E-01 +2.316421717E-01,1.451055908E+02,4.793382263E+01,9.827460051E-01,3.944093585E-01,9.492661953E-01,2.708410835E+01,2.502515554E+00,2.504181147E+00,2.504149437E+00,2.504149437E+00,1.582242131E+00,7.519424438E+02,1.200000048E+00,1.901147604E+00,1.901147604E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.380987167E+00,2.502515554E+00,9.469830394E-01,2.701896667E+01,1.665472868E-03,2.283131238E-03,6.514145434E-02,1.135573536E-02,9.244178772E+00,2.480882220E-03,2.019571543E+00,4.054792225E-03,3.300818920E+00,2.304494381E-03,1.875982404E+00,6.763739977E-03,1.601775293E-03,4.570125788E-02,4.589609802E-03,3.736189127E+00,3.736189127E+00,9.819003753E-04,7.993196845E-01,7.993196845E-01,1.600092975E-03,1.302561641E+00,1.302561641E+00,9.334325441E-04,7.598642707E-01,7.598642707E-01,2.778301248E-03,6.561623304E-04,1.872137934E-02,1.136094797E-02,9.248422623E+00,2.481210278E-03,2.019838572E+00,4.054792225E-03,3.300818920E+00,-2.305802191E-03,-1.877047062E+00,6.766513456E-03,-1.602729317E-03,-4.572847486E-02,7.683578134E-01,8.095964193E-01,1.849011540E+00,1.844323277E+00,3.519749268E+03,3.794718161E-02,1.496676076E-02,1.833458394E-01,3.284177184E-02,8.224152774E-02,3.419997171E-02,1.660902426E-02,2.756875801E-06,1.025923118E-01,3.145375443E+01,9.876584045E-06,5.543031421E-06,2.314610966E-02,2.314610966E-02,2.009986474E-06,2.649583519E-01,2.598792315E-01,1.065629646E-01,3.040414810E+00,1.909440041E+00,4.980841652E-02,1.421115160E+00,8.924885988E-01,6.367560476E-02,1.816768527E+00,1.140970111E+00,2.188580781E-01,1.215377077E-01,1.288795173E-01,1.285194308E-01,4.973215237E-02,-1.703982562E-04,2.393264731E-04,-6.892822421E-05,1.722714864E-03,3.275122494E-03,0.000000000E+00,7.602841854E-01,1.397183223E-04,8.317403495E-02,4.241143703E+00,0.000000000E+00,3.753536940E-01,2.069304657E+02,-1.441990356E+02,3.617830276E+01,3.084332943E-01 +2.346924096E-01,1.470163269E+02,4.853474426E+01,9.822033048E-01,3.941915631E-01,9.510139823E-01,2.713397598E+01,2.503807306E+00,2.505414009E+00,2.505382538E+00,2.505382538E+00,1.582636476E+00,7.524666138E+02,1.200000048E+00,1.901807785E+00,1.901807785E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.385243773E+00,2.503807306E+00,9.487919807E-01,2.707057953E+01,1.606732956E-03,2.221986884E-03,6.339690089E-02,1.122245286E-02,9.135680199E+00,2.489303006E-03,2.026426554E+00,4.050711636E-03,3.297497034E+00,2.299433341E-03,1.871862411E+00,6.620746106E-03,1.587022096E-03,4.528032243E-02,4.530766979E-03,3.688287973E+00,3.688287973E+00,9.846123867E-04,8.015274405E-01,8.015274405E-01,1.597633469E-03,1.300559521E+00,1.300559521E+00,9.303489351E-04,7.573540807E-01,7.573540807E-01,2.716307528E-03,6.494294503E-04,1.852927916E-02,1.122739073E-02,9.139698982E+00,2.489623148E-03,2.026687145E+00,4.050711636E-03,3.297497272E+00,-2.300690627E-03,-1.872885823E+00,6.623327732E-03,-1.587931067E-03,-4.530625790E-02,7.653076053E-01,8.063777685E-01,1.851984024E+00,1.847258687E+00,3.523059326E+03,3.757170588E-02,1.481048577E-02,1.823634505E-01,3.247675672E-02,8.136751503E-02,3.413903713E-02,1.642234623E-02,2.756875801E-06,1.018682420E-01,3.107735252E+01,9.876584045E-06,5.543031421E-06,2.288712934E-02,2.288712934E-02,2.009986474E-06,2.640440464E-01,2.588765621E-01,1.059357747E-01,3.022520065E+00,1.897677660E+00,4.989287630E-02,1.423524857E+00,8.937550187E-01,6.364354491E-02,1.815853834E+00,1.140080690E+00,2.170411795E-01,1.208469123E-01,1.276800334E-01,1.272809058E-01,4.902370274E-02,-1.676918910E-04,2.399066288E-04,-7.221472333E-05,1.711520134E-03,3.254970070E-03,0.000000000E+00,7.577574849E-01,1.382816845E-04,8.431862295E-02,4.248410702E+00,0.000000000E+00,3.673900664E-01,2.068015137E+02,-1.403760071E+02,3.574264526E+01,3.191747665E-01 +2.377666086E-01,1.489420624E+02,4.914036942E+01,9.816717505E-01,3.939782381E-01,9.527500272E-01,2.718350792E+01,2.505080223E+00,2.506629944E+00,2.506598234E+00,2.506598234E+00,1.583025217E+00,7.529827881E+02,1.200000048E+00,1.902458549E+00,1.902458549E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.389480710E+00,2.505080223E+00,9.505875707E-01,2.712180901E+01,1.549796551E-03,2.162477933E-03,6.169901416E-02,1.109153125E-02,9.029103279E+00,2.497086767E-03,2.032762766E+00,4.046199378E-03,3.293823957E+00,2.294156235E-03,1.867566586E+00,6.481104530E-03,1.572276233E-03,4.485959932E-02,4.473080859E-03,3.641328335E+00,3.641328335E+00,9.870800423E-04,8.035362363E-01,8.035362363E-01,1.595018664E-03,1.298430920E+00,1.298430920E+00,9.272011230E-04,7.547915578E-01,7.547915578E-01,2.655880060E-03,6.427234039E-04,1.833794452E-02,1.109620836E-02,9.032910347E+00,2.497398993E-03,2.033016920E+00,4.046199378E-03,3.293823957E+00,-2.295364626E-03,-1.868550181E+00,6.483506411E-03,-1.573142246E-03,-4.488430545E-02,7.622333765E-01,8.031331301E-01,1.854936719E+00,1.850176334E+00,3.526374023E+03,3.720284626E-02,1.465714816E-02,1.813942939E-01,3.211684152E-02,8.050482720E-02,3.407583386E-02,1.623832062E-02,2.756875801E-06,1.011534482E-01,3.070585060E+01,9.876584045E-06,5.543031421E-06,2.263180353E-02,2.263180353E-02,2.009986474E-06,2.631397247E-01,2.578813434E-01,1.053160578E-01,3.004838467E+00,1.886065960E+00,4.997081310E-02,1.425748706E+00,8.949089646E-01,6.360808015E-02,1.814841986E+00,1.139137030E+00,2.152409106E-01,1.201509982E-01,1.264942288E-01,1.260607988E-01,4.834156856E-02,-1.650114282E-04,2.402673563E-04,-7.525592082E-05,1.700214576E-03,3.234575968E-03,0.000000000E+00,7.551791072E-01,1.368508965E-04,8.544559032E-02,4.255631447E+00,0.000000000E+00,3.596898019E-01,2.066748199E+02,-1.366534424E+02,3.530812836E+01,3.282760084E-01 +2.408649474E-01,1.508829346E+02,4.975073242E+01,9.811511040E-01,3.937692642E-01,9.544749260E-01,2.723272324E+01,2.506334782E+00,2.507829428E+00,2.507797718E+00,2.507797718E+00,1.583408594E+00,7.534912720E+02,1.200000048E+00,1.903100371E+00,1.903100371E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.393699408E+00,2.506334782E+00,9.523703456E-01,2.717267609E+01,1.494605676E-03,2.104558749E-03,6.004649028E-02,1.096291747E-02,8.924404144E+00,2.504239324E-03,2.038585424E+00,4.041253123E-03,3.289797068E+00,2.288665855E-03,1.863097072E+00,6.344710942E-03,1.557539334E-03,4.443912953E-02,4.416522570E-03,3.595286608E+00,3.595286608E+00,9.893059032E-04,8.053482175E-01,8.053482175E-01,1.592247514E-03,1.296175122E+00,1.296175122E+00,9.239901556E-04,7.521776557E-01,7.521776557E-01,2.596967155E-03,6.360441912E-04,1.814737543E-02,1.096734591E-02,8.928009033E+00,2.504543867E-03,2.038833380E+00,4.041253123E-03,3.289797068E+00,-2.289827215E-03,-1.864042401E+00,6.346944720E-03,-1.558363903E-03,-4.446265846E-02,7.591350675E-01,7.998623848E-01,1.857870579E+00,1.853077292E+00,3.529694092E+03,3.684043139E-02,1.450666692E-02,1.804381162E-01,3.176189214E-02,7.965318114E-02,3.401040658E-02,1.605687477E-02,2.756875801E-06,1.004477292E-01,3.033913994E+01,9.876584045E-06,5.543031421E-06,2.238003537E-02,2.238003537E-02,2.009986474E-06,2.622452676E-01,2.568932176E-01,1.047036871E-01,2.987366676E+00,1.874602079E+00,5.004232749E-02,1.427789092E+00,8.959519863E-01,6.356918067E-02,1.813732147E+00,1.138138413E+00,2.134574205E-01,1.194507480E-01,1.253220588E-01,1.248586923E-01,4.768471420E-02,-1.623549178E-04,2.404115949E-04,-7.805667701E-05,1.688788761E-03,3.213923192E-03,0.000000000E+00,7.525498867E-01,1.354259875E-04,8.655422181E-02,4.262809753E+00,0.000000000E+00,3.522433639E-01,2.065503235E+02,-1.330286255E+02,3.487483215E+01,3.357477188E-01 +2.439876348E-01,1.528390503E+02,5.036586761E+01,9.806410670E-01,3.935645819E-01,9.561893344E-01,2.728163719E+01,2.507571459E+00,2.509012699E+00,2.508980989E+00,2.508980989E+00,1.583786607E+00,7.539922485E+02,1.200000048E+00,1.903733373E+00,1.903733373E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.397901297E+00,2.507571459E+00,9.541411400E-01,2.722319984E+01,1.441103523E-03,2.048184862E-03,5.843804404E-02,1.083655655E-02,8.821539879E+00,2.510767430E-03,2.043899775E+00,4.035867285E-03,3.285412788E+00,2.282964997E-03,1.858456254E+00,6.211463362E-03,1.542812679E-03,4.401895776E-02,4.361063242E-03,3.550140142E+00,3.550140142E+00,9.912929963E-04,8.069657683E-01,8.069657683E-01,1.589318388E-03,1.293790698E+00,1.293790698E+00,9.207170224E-04,7.495131493E-01,7.495131493E-01,2.539518755E-03,6.293920451E-04,1.795757934E-02,1.084075216E-02,8.824954987E+00,2.511064289E-03,2.044141293E+00,4.035867285E-03,3.285412788E+00,-2.284080721E-03,-1.859364510E+00,6.213540211E-03,-1.543597784E-03,-4.404135421E-02,7.560123801E-01,7.965652347E-01,1.860786796E+00,1.855962634E+00,3.533020508E+03,3.648429364E-02,1.435896195E-02,1.794946939E-01,3.141176701E-02,7.881230116E-02,3.394279629E-02,1.587794162E-02,2.756875801E-06,9.975087643E-02,2.997711563E+01,9.876584045E-06,5.543031421E-06,2.213172615E-02,2.213172615E-02,2.009986474E-06,2.613606155E-01,2.559118271E-01,1.040985435E-01,2.970100880E+00,1.863283157E+00,5.010750890E-02,1.429648757E+00,8.968857527E-01,6.352680176E-02,1.812523007E+00,1.137084007E+00,2.116907686E-01,1.187470332E-01,1.241634563E-01,1.236740798E-01,4.705208540E-02,-1.597188093E-04,2.403394901E-04,-8.062068082E-05,1.677254797E-03,3.193035256E-03,0.000000000E+00,7.498705983E-01,1.340070012E-04,8.764396608E-02,4.269947529E+00,0.000000000E+00,3.450404704E-01,2.064279633E+02,-1.294989014E+02,3.444283676E+01,3.416328728E-01 +2.471348345E-01,1.548105316E+02,5.098581314E+01,9.801413417E-01,3.933640122E-01,9.578938484E-01,2.733027077E+01,2.508791208E+00,2.510180235E+00,2.510148525E+00,2.510148525E+00,1.584159493E+00,7.544859619E+02,1.200000048E+00,1.904358029E+00,1.904358029E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.402087808E+00,2.508791208E+00,9.559005499E-01,2.727339745E+01,1.389235491E-03,1.993311569E-03,5.687242374E-02,1.071240008E-02,8.720469475E+00,2.516678534E-03,2.048711538E+00,4.030035809E-03,3.280665874E+00,2.277056454E-03,1.853646278E+00,6.081263069E-03,1.528098364E-03,4.359913245E-02,4.306677263E-03,3.505866766E+00,3.505866766E+00,9.930442320E-04,8.083913922E-01,8.083913922E-01,1.586228842E-03,1.291275501E+00,1.291275501E+00,9.173828294E-04,7.467989326E-01,7.467989326E-01,2.483486664E-03,6.227672566E-04,1.776856370E-02,1.071637310E-02,8.723704338E+00,2.516967710E-03,2.048947096E+00,4.030035809E-03,3.280665874E+00,-2.278128406E-03,-1.854519010E+00,6.083193235E-03,-1.528845401E-03,-4.362044856E-02,7.528651357E-01,7.932415605E-01,1.863686562E+00,1.858833432E+00,3.536354980E+03,3.613427281E-02,1.421395876E-02,1.785637736E-01,3.106633946E-02,7.798189670E-02,3.387305140E-02,1.570144854E-02,2.756875801E-06,9.906270355E-02,2.961966896E+01,9.876584045E-06,5.543031421E-06,2.188678272E-02,2.188678272E-02,2.009986474E-06,2.604856491E-01,2.549368441E-01,1.035005078E-01,2.953037977E+00,1.852106690E+00,5.016645417E-02,1.431330562E+00,8.977119923E-01,6.348089129E-02,1.811213136E+00,1.135972738E+00,2.099409550E-01,1.180407479E-01,1.230183616E-01,1.225063130E-01,4.644261673E-02,-1.570995519E-04,2.400515223E-04,-8.295197040E-05,1.665586722E-03,3.171863034E-03,0.000000000E+00,7.471421957E-01,1.325939666E-04,8.871442080E-02,4.277046680E+00,0.000000000E+00,3.380700648E-01,2.063076630E+02,-1.260615845E+02,3.401224899E+01,3.460083902E-01 +2.503067553E-01,1.567975006E+02,5.161059570E+01,9.796515703E-01,3.931674659E-01,9.595891237E-01,2.737863922E+01,2.509994030E+00,2.511332989E+00,2.511301279E+00,2.511301279E+00,1.584527493E+00,7.549726562E+02,1.200000048E+00,1.904974461E+00,1.904974461E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.406260371E+00,2.509994030E+00,9.576492310E-01,2.732328987E+01,1.338948612E-03,1.939896261E-03,5.534839630E-02,1.059040055E-02,8.621154785E+00,2.521979855E-03,2.053027153E+00,4.023751710E-03,3.275550365E+00,2.270942787E-03,1.848669410E+00,5.954016466E-03,1.513398369E-03,4.317971691E-02,4.253338091E-03,3.462445736E+00,3.462445736E+00,9.945632191E-04,8.096278906E-01,8.096278906E-01,1.582975732E-03,1.288627386E+00,1.288627386E+00,9.139886242E-04,7.440358996E-01,7.440358996E-01,2.428824548E-03,6.161703495E-04,1.758034341E-02,1.059416309E-02,8.624218941E+00,2.522261813E-03,2.053256750E+00,4.023751710E-03,3.275550365E+00,-2.271972597E-03,-1.849507809E+00,5.955809262E-03,-1.514109201E-03,-4.319999740E-02,7.496932149E-01,7.898911238E-01,1.866570711E+00,1.861690760E+00,3.539697754E+03,3.579021245E-02,1.407158282E-02,1.776451468E-01,3.072547726E-02,7.716169208E-02,3.380121663E-02,1.552733127E-02,2.756875801E-06,9.838302433E-02,2.926669502E+01,9.876584045E-06,5.543031421E-06,2.164511196E-02,2.164511196E-02,2.009986474E-06,2.596203089E-01,2.539679408E-01,1.029094681E-01,2.936174631E+00,1.841070294E+00,5.021926388E-02,1.432837248E+00,8.984324336E-01,6.343137473E-02,1.809800386E+00,1.134803057E+00,2.082079053E-01,1.173326820E-01,1.218866631E-01,1.213546470E-01,4.585523531E-02,-1.544915285E-04,2.395446209E-04,-8.505309961E-05,1.653815969E-03,3.150467295E-03,0.000000000E+00,7.443655133E-01,1.311870146E-04,8.976535499E-02,4.284111023E+00,0.000000000E+00,3.313202858E-01,2.061893768E+02,-1.227141266E+02,3.358317566E+01,3.489806652E-01 +2.535036206E-01,1.588000641E+02,5.224025726E+01,9.791716337E-01,3.929748535E-01,9.612756968E-01,2.742675972E+01,2.511181116E+00,2.512471199E+00,2.512439489E+00,2.512439489E+00,1.584890723E+00,7.554524536E+02,1.200000048E+00,1.905583024E+00,1.905583024E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.410420299E+00,2.511181116E+00,9.593877792E-01,2.737289429E+01,1.290192478E-03,1.887897030E-03,5.386477336E-02,1.047051232E-02,8.523559570E+00,2.526680473E-03,2.056853771E+00,4.017007072E-03,3.270059824E+00,2.264626790E-03,1.843527913E+00,5.829633679E-03,1.498715021E-03,4.276077822E-02,4.201021511E-03,3.419857264E+00,3.419857264E+00,9.958533337E-04,8.106781244E-01,8.106781244E-01,1.579556148E-03,1.285843611E+00,1.285843611E+00,9.105354548E-04,7.412248254E-01,7.412248254E-01,2.375488635E-03,6.096017896E-04,1.739293151E-02,1.047407649E-02,8.526460648E+00,2.526955213E-03,2.057077408E+00,4.017007072E-03,3.270059824E+00,-2.265616087E-03,-1.844333291E+00,5.831298418E-03,-1.499391161E-03,-4.278006777E-02,7.464963794E-01,7.865136862E-01,1.869440317E+00,1.864535451E+00,3.543050049E+03,3.545195982E-02,1.393176243E-02,1.767386198E-01,3.038906492E-02,7.635143399E-02,3.372734413E-02,1.535552740E-02,2.756875801E-06,9.771167487E-02,2.891809845E+01,9.876584045E-06,5.543031421E-06,2.140662819E-02,2.140662819E-02,2.009986474E-06,2.587645352E-01,2.530047596E-01,1.023253351E-01,2.919508457E+00,1.830171585E+00,5.026603863E-02,1.434171915E+00,8.990489244E-01,6.337819993E-02,1.808283091E+00,1.133573771E+00,2.064914256E-01,1.166236028E-01,1.207682565E-01,1.202182025E-01,4.528884590E-02,-1.518928620E-04,2.388233406E-04,-8.693048585E-05,1.641899464E-03,3.128766082E-03,0.000000000E+00,7.415412664E-01,1.297862182E-04,9.079670906E-02,4.291141510E+00,0.000000000E+00,3.247786462E-01,2.060730286E+02,-1.194540100E+02,3.315574646E+01,3.506800234E-01 +2.567255795E-01,1.608183594E+02,5.287482834E+01,9.787011147E-01,3.927860260E-01,9.629540443E-01,2.747464752E+01,2.512352228E+00,2.513595343E+00,2.513563395E+00,2.513563395E+00,1.585249305E+00,7.559255981E+02,1.200000048E+00,1.906183839E+00,1.906183839E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.414568782E+00,2.512352228E+00,9.611167908E-01,2.742222595E+01,1.242918312E-03,1.837273710E-03,5.242040753E-02,1.035269257E-02,8.427648544E+00,2.530789468E-03,2.060198545E+00,4.009794444E-03,3.264188528E+00,2.258111490E-03,1.838224173E+00,5.708030891E-03,1.484051230E-03,4.234239832E-02,4.149703775E-03,3.378082037E+00,3.378082037E+00,9.969185339E-04,8.115453124E-01,8.115453124E-01,1.575967064E-03,1.282921910E+00,1.282921910E+00,9.070243686E-04,7.383666039E-01,7.383666039E-01,2.323437715E-03,6.030623335E-04,1.720635034E-02,1.035606861E-02,8.430396080E+00,2.531056758E-03,2.060416460E+00,4.009794910E-03,3.264188528E+00,-2.259061672E-03,-1.838997602E+00,5.709575955E-03,-1.484693959E-03,-4.236073792E-02,7.432744503E-01,7.831090689E-01,1.872296453E+00,1.867368460E+00,3.546412842E+03,3.511936218E-02,1.379442867E-02,1.758439839E-01,3.005698696E-02,7.555088401E-02,3.365147859E-02,1.518597733E-02,2.756875801E-06,9.704851359E-02,2.857378578E+01,9.876584045E-06,5.543031421E-06,2.117125317E-02,2.117125317E-02,2.009986474E-06,2.579182982E-01,2.520470619E-01,1.017480195E-01,2.903036594E+00,1.819408536E+00,5.030689016E-02,1.435337424E+00,8.995633721E-01,6.332128495E-02,1.806659222E+00,1.132283688E+00,2.047913074E-01,1.159142479E-01,1.196630001E-01,1.190961450E-01,4.474242777E-02,-1.492995652E-04,2.378884819E-04,-8.858892397E-05,1.629902166E-03,3.106883727E-03,0.000000000E+00,7.386704087E-01,1.283917372E-04,9.180845320E-02,4.298141003E+00,0.000000000E+00,3.184321821E-01,2.059585724E+02,-1.162788162E+02,3.273008728E+01,3.512568176E-01 +2.599728405E-01,1.628525238E+02,5.351435471E+01,9.782398343E-01,3.926008940E-01,9.646248221E-01,2.752231598E+01,2.513508320E+00,2.514705420E+00,2.514673710E+00,2.514673710E+00,1.585603356E+00,7.563922729E+02,1.200000048E+00,1.906777263E+00,1.906777263E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.418707013E+00,2.513508320E+00,9.628368616E-01,2.747130203E+01,1.197080244E-03,1.787986956E-03,5.101417750E-02,1.023690123E-02,8.333388329E+00,2.534316387E-03,2.063069820E+00,4.002108239E-03,3.257931471E+00,2.251399215E-03,1.832759976E+00,5.589130335E-03,1.469409210E-03,4.192463681E-02,4.099362995E-03,3.337101936E+00,3.337101936E+00,9.977630107E-04,8.122327328E-01,8.122327328E-01,1.572206151E-03,1.279860377E+00,1.279860377E+00,9.034563554E-04,7.354620099E-01,7.354620099E-01,2.272633137E-03,5.965525052E-04,1.702061296E-02,1.024009846E-02,8.335989952E+00,2.534576925E-03,2.063281775E+00,4.002108239E-03,3.257931471E+00,-2.252311679E-03,-1.833502769E+00,5.590563640E-03,-1.470020157E-03,-4.194206744E-02,7.400271893E-01,7.796769738E-01,1.875139952E+00,1.870190740E+00,3.549786621E+03,3.479227424E-02,1.365951262E-02,1.749610454E-01,2.972914837E-02,7.475984097E-02,3.357366100E-02,1.501863170E-02,2.756875801E-06,9.639339149E-02,2.823367500E+01,9.876584045E-06,5.543031421E-06,2.093891241E-02,2.093891241E-02,2.009986474E-06,2.570815384E-01,2.510945499E-01,1.011774242E-01,2.886756659E+00,1.808779120E+00,5.034193024E-02,1.436337233E+00,8.999778032E-01,6.326057762E-02,1.804927230E+00,1.130931497E+00,2.031068504E-01,1.152050421E-01,1.185708717E-01,1.179869100E-01,4.421494156E-02,-1.467116526E-04,2.367489651E-04,-9.003731248E-05,1.617743867E-03,3.084668191E-03,0.000000000E+00,7.357536554E-01,1.270036882E-04,9.280068427E-02,4.305111408E+00,0.000000000E+00,3.122691512E-01,2.058459473E+02,-1.131861877E+02,3.230634689E+01,3.508786261E-01 +2.632455826E-01,1.649026489E+02,5.415886307E+01,9.777875543E-01,3.924193680E-01,9.662884474E-01,2.756978226E+01,2.514649868E+00,2.515802383E+00,2.515770674E+00,2.515770674E+00,1.585953116E+00,7.568526001E+02,1.200000048E+00,1.907363296E+00,1.907363296E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.422836423E+00,2.514649868E+00,9.645484686E-01,2.752013779E+01,1.152630546E-03,1.739998581E-03,4.964499176E-02,1.012309454E-02,8.240742683E+00,2.537271939E-03,2.065475702E+00,3.993942402E-03,3.251283884E+00,2.244492527E-03,1.827137709E+00,5.472851917E-03,1.454791753E-03,4.150757566E-02,4.049975425E-03,3.296897650E+00,3.296897650E+00,9.983909549E-04,8.127439022E-01,8.127439022E-01,1.568270964E-03,1.276656866E+00,1.276656866E+00,8.998322301E-04,7.325118184E-01,7.325118184E-01,2.223035088E-03,5.900728283E-04,1.683573797E-02,1.012612227E-02,8.243207932E+00,2.537525492E-03,2.065682173E+00,3.993942402E-03,3.251283884E+00,-2.245368902E-03,-1.827850938E+00,5.474180449E-03,-1.455372083E-03,-4.152413458E-02,7.367544174E-01,7.762173414E-01,1.877971649E+00,1.873003125E+00,3.553172852E+03,3.447053209E-02,1.352693979E-02,1.740895808E-01,2.940543555E-02,7.397805899E-02,3.349393606E-02,1.485342998E-02,2.756875801E-06,9.574617445E-02,2.789767075E+01,9.876584045E-06,5.543031421E-06,2.070952952E-02,2.070952952E-02,2.009986474E-06,2.562541664E-01,2.501469553E-01,1.006134525E-01,2.870665550E+00,1.798281074E+00,5.037127063E-02,1.437174320E+00,9.002941251E-01,6.319601834E-02,1.803085327E+00,1.129516244E+00,2.014384419E-01,1.144969538E-01,1.174914688E-01,1.168907136E-01,4.370550439E-02,-1.441414352E-04,2.354365570E-04,-9.129511454E-05,1.605616999E-03,3.062485950E-03,0.000000000E+00,7.327917218E-01,1.256221876E-04,9.377335012E-02,4.312054634E+00,0.000000000E+00,3.062763214E-01,2.057351227E+02,-1.101738052E+02,3.188465118E+01,3.497242928E-01 +2.665440738E-01,1.669688873E+02,5.480839920E+01,9.773440957E-01,3.922413886E-01,9.679454565E-01,2.761705971E+01,2.515776873E+00,2.516886234E+00,2.516854525E+00,2.516854525E+00,1.586298585E+00,7.573067627E+02,1.200000048E+00,1.907942414E+00,1.907942414E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.426957965E+00,2.515776873E+00,9.662522078E-01,2.756874657E+01,1.109530916E-03,1.693271683E-03,4.831179604E-02,1.001122873E-02,8.149678230E+00,2.539666602E-03,2.067425251E+00,3.985296469E-03,3.244245768E+00,2.237393521E-03,1.821358562E+00,5.359134171E-03,1.440200605E-03,4.109126702E-02,4.001517780E-03,3.257450581E+00,3.257450581E+00,9.988069069E-04,8.130825162E-01,8.130825162E-01,1.564161270E-03,1.273311377E+00,1.273311377E+00,8.961526328E-04,7.295164466E-01,7.295164466E-01,2.174613532E-03,5.836238270E-04,1.665173844E-02,1.001409627E-02,8.152012825E+00,2.539913403E-03,2.067625999E+00,3.985296469E-03,3.244245768E+00,-2.238234738E-03,-1.822043419E+00,5.360365380E-03,-1.440751948E-03,-4.110699520E-02,7.334559560E-01,7.727298141E-01,1.880792499E+00,1.875806332E+00,3.556571777E+03,3.415402770E-02,1.339665707E-02,1.732293516E-01,2.908579074E-02,7.320541888E-02,3.341235220E-02,1.469034143E-02,2.756875801E-06,9.510673583E-02,2.756572151E+01,9.876584045E-06,5.543031421E-06,2.048305981E-02,2.048305981E-02,2.009986474E-06,2.554360628E-01,2.492040396E-01,1.000560075E-01,2.854760647E+00,1.787912250E+00,5.039503425E-02,1.437852263E+00,9.005145431E-01,6.312759966E-02,1.801133275E+00,1.128037453E+00,1.997854114E-01,1.137896106E-01,1.164253429E-01,1.158062294E-01,4.321341217E-02,-1.415637671E-04,2.339119383E-04,-9.234817844E-05,1.593245077E-03,3.039811272E-03,0.000000000E+00,7.297850251E-01,1.242473081E-04,9.472606331E-02,4.318973064E+00,0.000000000E+00,3.004452884E-01,2.056260223E+02,-1.072394485E+02,3.146512413E+01,3.479784727E-01 +2.698684633E-01,1.690513458E+02,5.546299744E+01,9.769091606E-01,3.920668364E-01,9.695962667E-01,2.766415787E+01,2.516889811E+00,2.517957449E+00,2.517925739E+00,2.517925739E+00,1.586639762E+00,7.577548828E+02,1.200000048E+00,1.908514500E+00,1.908514500E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.431072831E+00,2.516889811E+00,9.679484963E-01,2.761714554E+01,1.067730132E-03,1.647766330E-03,4.701345414E-02,9.901254438E-03,8.060153008E+00,2.541511320E-03,2.068927050E+00,3.976166714E-03,3.236813545E+00,2.230104292E-03,1.815424800E+00,5.247891881E-03,1.425637864E-03,4.067576677E-02,3.953964915E-03,3.218739986E+00,3.218739986E+00,9.990154067E-04,8.132522106E-01,8.132522106E-01,1.559875207E-03,1.269822359E+00,1.269822359E+00,8.924183785E-04,7.264765501E-01,7.264765501E-01,2.127325628E-03,5.772058503E-04,1.646862179E-02,9.903969243E-03,8.062363625E+00,2.541751601E-03,2.069122553E+00,3.976166714E-03,3.236813545E+00,-2.230911981E-03,-1.816082239E+00,5.249031819E-03,-1.426161150E-03,-4.069070145E-02,7.301315665E-01,7.692143321E-01,1.883603334E+00,1.878601313E+00,3.559984375E+03,3.384253755E-02,1.326856948E-02,1.723800600E-01,2.877007797E-02,7.244162261E-02,3.332894668E-02,1.452929527E-02,2.756875801E-06,9.447488934E-02,2.723769951E+01,9.876584045E-06,5.543031421E-06,2.025940642E-02,2.025940455E-02,2.009986474E-06,2.546269894E-01,2.482654899E-01,9.950494021E-02,2.839037895E+00,1.777669430E+00,5.041332915E-02,1.438374400E+00,9.006410241E-01,6.305527687E-02,1.799069643E+00,1.126494169E+00,1.981474906E-01,1.130832806E-01,1.153716147E-01,1.147336438E-01,4.273780808E-02,-1.390155667E-04,2.322530781E-04,-9.323751874E-05,1.581003657E-03,3.017360112E-03,0.000000000E+00,7.267342806E-01,1.228791371E-04,9.565888345E-02,4.325867653E+00,0.000000000E+00,2.947678566E-01,2.055186310E+02,-1.043806839E+02,3.104796028E+01,3.458218873E-01 +2.732189298E-01,1.711501617E+02,5.612269592E+01,9.764825106E-01,3.918956220E-01,9.712412953E-01,2.771109390E+01,2.517989159E+00,2.519016266E+00,2.518984556E+00,2.518984556E+00,1.586977005E+00,7.581971436E+02,1.200000048E+00,1.909079909E+00,1.909079909E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.435182095E+00,2.517989159E+00,9.696378708E-01,2.766534615E+01,1.027185470E-03,1.603445620E-03,4.574891180E-02,9.793118574E-03,7.972125053E+00,2.542817965E-03,2.069990396E+00,3.966552671E-03,3.228987217E+00,2.222627169E-03,1.809338093E+00,5.139053799E-03,1.411105506E-03,4.026113451E-02,3.907290287E-03,3.180744171E+00,3.180744171E+00,9.990208782E-04,8.132567406E-01,8.132567406E-01,1.555412775E-03,1.266189575E+00,1.266189575E+00,8.886300493E-04,7.233926058E-01,7.233926058E-01,2.081136452E-03,5.708189565E-04,1.628639363E-02,9.795689955E-03,7.974218369E+00,2.543051727E-03,2.070180893E+00,3.966552671E-03,3.228987217E+00,-2.223402495E-03,-1.809969187E+00,5.140108988E-03,-1.411602134E-03,-4.027530551E-02,7.267810702E-01,7.656706572E-01,1.886404753E+00,1.881388783E+00,3.563411377E+03,3.353590518E-02,1.314260624E-02,1.715413928E-01,2.845820040E-02,7.168646157E-02,3.324376047E-02,1.437024027E-02,2.756875801E-06,9.385046363E-02,2.691351509E+01,9.876584045E-06,5.543031421E-06,2.003849670E-02,2.003849670E-02,2.009986474E-06,2.538267374E-01,2.473310083E-01,9.896009415E-02,2.823492527E+00,1.767549753E+00,5.042628199E-02,1.438743949E+00,9.006757140E-01,6.297902763E-02,1.796894073E+00,1.124886274E+00,1.965252906E-01,1.123779938E-01,1.143298820E-01,1.136744842E-01,4.227806255E-02,-1.365113130E-04,2.304940863E-04,-9.398276597E-05,1.568594016E-03,2.994562965E-03,0.000000000E+00,7.236399651E-01,1.215177035E-04,9.657154232E-02,4.332740784E+00,0.000000000E+00,2.892314494E-01,2.054129028E+02,-1.015952911E+02,3.063313866E+01,3.434232771E-01 +2.765957415E-01,1.732654724E+02,5.678753662E+01,9.760640264E-01,3.917276561E-01,9.728810191E-01,2.775787926E+01,2.519075155E+00,2.520062923E+00,2.520031214E+00,2.520031214E+00,1.587310195E+00,7.586336060E+02,1.200000048E+00,1.909638762E+00,1.909638762E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.439286947E+00,2.519075155E+00,9.713207483E-01,2.771336174E+01,9.878625860E-04,1.560273813E-03,4.451715201E-02,9.686772712E-03,7.885553837E+00,2.543597482E-03,2.070625067E+00,3.956459928E-03,3.220771074E+00,2.214963548E-03,1.803099394E+00,5.032566842E-03,1.396603649E-03,3.984737396E-02,3.861468285E-03,3.143442869E+00,3.143442869E+00,9.988283273E-04,8.130999804E-01,8.130999804E-01,1.550776185E-03,1.262415171E+00,1.262415171E+00,8.847879362E-04,7.202649117E-01,7.202649117E-01,2.036019461E-03,5.644630874E-04,1.610505022E-02,9.689207189E-03,7.887535572E+00,2.543824958E-03,2.070810318E+00,3.956459928E-03,3.220771313E+00,-2.215707675E-03,-1.803705096E+00,5.033542868E-03,-1.397074782E-03,-3.986081481E-02,7.234042287E-01,7.620986104E-01,1.889197946E+00,1.884169579E+00,3.566854004E+03,3.323402628E-02,1.301871985E-02,1.707130522E-01,2.815010771E-02,7.093983889E-02,3.315683454E-02,1.421314850E-02,2.756875801E-06,9.323327988E-02,2.659312630E+01,9.876584045E-06,5.543031421E-06,1.982029527E-02,1.982029527E-02,2.009986474E-06,2.530350089E-01,2.464003563E-01,9.842132032E-02,2.808120489E+00,1.757549882E+00,5.043400824E-02,1.438964367E+00,9.006206393E-01,6.289888173E-02,1.794607520E+00,1.123214006E+00,1.949185878E-01,1.116725951E-01,1.133010089E-01,1.126286462E-01,4.183368012E-02,-1.340170711E-04,2.285775554E-04,-9.456048429E-05,1.555987285E-03,2.971365582E-03,0.000000000E+00,7.205021977E-01,1.201629493E-04,9.746345878E-02,4.339593887E+00,0.000000000E+00,2.838324010E-01,2.053087769E+02,-9.888107300E+01,3.022079277E+01,3.409371376E-01 +2.799990773E-01,1.753973999E+02,5.745756149E+01,9.756535292E-01,3.915629089E-01,9.745159149E-01,2.780452538E+01,2.520148039E+00,2.521097898E+00,2.521065950E+00,2.521065950E+00,1.587639570E+00,7.590644531E+02,1.200000048E+00,1.910191059E+00,1.910191059E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.443388224E+00,2.520148039E+00,9.729976654E-01,2.776120758E+01,9.497150895E-04,1.518212492E-03,4.331707209E-02,9.582159109E-03,7.800392628E+00,2.543861279E-03,2.070839882E+00,3.945888020E-03,3.212165117E+00,2.207115758E-03,1.796710849E+00,4.928353708E-03,1.382134156E-03,3.943453729E-02,3.816472134E-03,3.106813431E+00,3.106813431E+00,9.984421777E-04,8.127855659E-01,8.127855659E-01,1.545965089E-03,1.258498669E+00,1.258498669E+00,8.808928542E-04,7.170941830E-01,7.170941830E-01,1.991936937E-03,5.581383011E-04,1.592459530E-02,9.584464133E-03,7.802268982E+00,2.544082468E-03,2.071019888E+00,3.945888020E-03,3.212165117E+00,-2.207829850E-03,-1.797292113E+00,4.929256160E-03,-1.382580842E-03,-3.944728151E-02,7.200009227E-01,7.584980726E-01,1.891983390E+00,1.886944294E+00,3.570312500E+03,3.293669596E-02,1.289682090E-02,1.698946655E-01,2.784567699E-02,7.020146400E-02,3.306820244E-02,1.405795477E-02,2.756875801E-06,9.262314439E-02,2.627640533E+01,9.876584045E-06,5.543031421E-06,1.960471459E-02,1.960471459E-02,2.009986474E-06,2.522515059E-01,2.454731762E-01,9.788843244E-02,2.792916298E+00,1.747666240E+00,5.043661967E-02,1.439038873E+00,9.004778266E-01,6.281482428E-02,1.792209268E+00,1.121477008E+00,1.933277547E-01,1.109671444E-01,1.122842506E-01,1.115975603E-01,4.140391573E-02,-1.315628615E-04,2.265668591E-04,-9.500399756E-05,1.543572289E-03,2.948510228E-03,0.000000000E+00,7.173217535E-01,1.188149254E-04,9.833476692E-02,4.346428871E+00,0.000000000E+00,2.785653770E-01,2.052062378E+02,-9.623570251E+01,2.981102562E+01,3.384911418E-01 +2.834291458E-01,1.775460663E+02,5.813280869E+01,9.752507210E-01,3.914012611E-01,9.761462808E-01,2.785104179E+01,2.521208286E+00,2.522120953E+00,2.522089005E+00,2.522089005E+00,1.587965131E+00,7.594898071E+02,1.200000048E+00,1.910737157E+00,1.910737157E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.447487235E+00,2.521208286E+00,9.746690392E-01,2.780889511E+01,9.127052035E-04,1.477226499E-03,4.214767739E-02,9.479227476E-03,7.716600895E+00,2.543620765E-03,2.070644140E+00,3.934839740E-03,3.203171015E+00,2.199086128E-03,1.790174246E+00,4.826353863E-03,1.367697609E-03,3.902263939E-02,3.772275755E-03,3.070835114E+00,3.070835114E+00,9.978668531E-04,8.123173118E-01,8.123173118E-01,1.540980884E-03,1.254441261E+00,1.254441261E+00,8.769455017E-04,7.138807774E-01,7.138807774E-01,1.948858495E-03,5.518445396E-04,1.574502327E-02,9.481409565E-03,7.718377113E+00,2.543835901E-03,2.070819139E+00,3.934839740E-03,3.203171015E+00,-2.199771116E-03,-1.790732026E+00,4.827187397E-03,-1.368120895E-03,-3.903471678E-02,7.165708542E-01,7.548688054E-01,1.894761920E+00,1.889713764E+00,3.573787842E+03,3.264377266E-02,1.277684607E-02,1.690859199E-01,2.754482627E-02,6.947118044E-02,3.297791258E-02,1.390461810E-02,2.756875801E-06,9.201985598E-02,2.596327400E+01,9.876584045E-06,5.543031421E-06,1.939169504E-02,1.939169504E-02,2.009986474E-06,2.514759600E-01,2.445491999E-01,9.736126661E-02,2.777875185E+00,1.737895608E+00,5.043423548E-02,1.438970804E+00,9.002493620E-01,6.272686273E-02,1.789699554E+00,1.119675279E+00,1.917523295E-01,1.102610007E-01,1.112796664E-01,1.105810329E-01,4.098803923E-02,-1.291476947E-04,2.244667121E-04,-9.531902469E-05,1.530978363E-03,2.925289795E-03,0.000000000E+00,7.140990496E-01,1.174735880E-04,9.918569028E-02,4.353247166E+00,0.000000000E+00,2.734231353E-01,2.051052551E+02,-9.365702820E+01,2.940387344E+01,3.361737132E-01 +2.868861556E-01,1.797116089E+02,5.881331635E+01,9.748555422E-01,3.912426531E-01,9.777725935E-01,2.789744377E+01,2.522255898E+00,2.523132801E+00,2.523100853E+00,2.523100853E+00,1.588286877E+00,7.599097290E+02,1.200000048E+00,1.911277056E+00,1.911277056E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.451584697E+00,2.522255898E+00,9.763352871E-01,2.785643578E+01,8.767939289E-04,1.437281258E-03,4.100797325E-02,9.377927519E-03,7.634137154E+00,2.542887349E-03,2.070046902E+00,3.923316021E-03,3.193789959E+00,2.190876985E-03,1.783491611E+00,4.726503510E-03,1.353294705E-03,3.861170262E-02,3.728854470E-03,3.035487890E+00,3.035487890E+00,9.971071268E-04,8.116988540E-01,8.116988540E-01,1.535824034E-03,1.250243306E+00,1.250243306E+00,8.729465189E-04,7.106254101E-01,7.106254101E-01,1.906753052E-03,5.455816281E-04,1.556633227E-02,9.379993193E-03,7.635818958E+00,2.543096431E-03,2.070217133E+00,3.923316021E-03,3.193789959E+00,-2.191534266E-03,-1.784026742E+00,4.727272317E-03,-1.353695756E-03,-3.862314299E-02,7.131138444E-01,7.512107491E-01,1.897534251E+00,1.892478585E+00,3.577280518E+03,3.235509992E-02,1.265872736E-02,1.682865471E-01,2.724746242E-02,6.874876469E-02,3.288599849E-02,1.375308819E-02,2.756875801E-06,9.142322838E-02,2.565364075E+01,9.876584045E-06,5.543031421E-06,1.918116957E-02,1.918116957E-02,2.009986474E-06,2.507080734E-01,2.436281443E-01,9.683965147E-02,2.762992859E+00,1.728234529E+00,5.042695627E-02,1.438763142E+00,8.999370337E-01,6.263498962E-02,1.787078023E+00,1.117808700E+00,1.901921332E-01,1.095539555E-01,1.102871001E-01,1.095792130E-01,4.058531672E-02,-1.267730986E-04,2.222864277E-04,-9.551332187E-05,1.518455218E-03,2.902181586E-03,0.000000000E+00,7.108347416E-01,1.161389009E-04,1.000165939E-01,4.360050201E+00,0.000000000E+00,2.684018910E-01,2.050057678E+02,-9.114293671E+01,2.899940872E+01,3.340230286E-01 +2.903703153E-01,1.818941650E+02,5.949913025E+01,9.744676948E-01,3.910869956E-01,9.793951511E-01,2.794373894E+01,2.523291349E+00,2.524133444E+00,2.524101496E+00,2.524101496E+00,1.588605046E+00,7.603243408E+02,1.200000048E+00,1.911810875E+00,1.911810875E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.455681801E+00,2.523291349E+00,9.779968262E-01,2.790384102E+01,8.419442456E-04,1.398343709E-03,3.989702091E-02,9.278213605E-03,7.552964687E+00,2.541671973E-03,2.069057465E+00,3.911317792E-03,3.184022903E+00,2.182491124E-03,1.776665092E+00,4.628740717E-03,1.338926377E-03,3.820174932E-02,3.686185461E-03,3.000753164E+00,3.000753164E+00,9.961674223E-04,8.109338284E-01,8.109338284E-01,1.530495239E-03,1.245905399E+00,1.245905399E+00,8.688967791E-04,7.073286772E-01,7.073286772E-01,1.865590923E-03,5.393495085E-04,1.538851857E-02,9.280169383E-03,7.554556370E+00,2.541875234E-03,2.069222927E+00,3.911317792E-03,3.184022903E+00,-2.183121629E-03,-1.777178407E+00,4.629449919E-03,-1.339306007E-03,-3.821258247E-02,7.096296549E-01,7.475236058E-01,1.900301099E+00,1.895239472E+00,3.580791504E+03,3.207053244E-02,1.254240051E-02,1.674962342E-01,2.695349790E-02,6.803402305E-02,3.279250488E-02,1.360331755E-02,2.756875801E-06,9.083308280E-02,2.534741211E+01,9.876584045E-06,5.543031421E-06,1.897307299E-02,1.897307299E-02,2.009986474E-06,2.499476373E-01,2.427097559E-01,9.632343799E-02,2.748264551E+00,1.718680263E+00,5.041490123E-02,1.438419223E+00,8.995429277E-01,6.253918260E-02,1.784344673E+00,1.115876794E+00,1.886468381E-01,1.088459045E-01,1.093064100E-01,1.085918024E-01,4.019493610E-02,-1.244453306E-04,2.200447343E-04,-9.559940372E-05,1.505879220E-03,2.878949512E-03,0.000000000E+00,7.075294256E-01,1.148108422E-04,1.008281335E-01,4.366839409E+00,0.000000000E+00,2.634968162E-01,2.049077454E+02,-8.869139862E+01,2.859766388E+01,3.320228457E-01 +2.938818634E-01,1.840938568E+02,6.019028854E+01,9.740871191E-01,3.909342587E-01,9.810143709E-01,2.798993683E+01,2.524314880E+00,2.525123119E+00,2.525091171E+00,2.525091171E+00,1.588919640E+00,7.607337646E+02,1.200000048E+00,1.912338734E+00,1.912338734E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.459779263E+00,2.524314880E+00,9.796540141E-01,2.795112228E+01,8.081207634E-04,1.360382303E-03,3.881392255E-02,9.180041961E-03,7.473047733E+00,2.539985813E-03,2.067685127E+00,3.898846218E-03,3.173870325E+00,2.173930872E-03,1.769696712E+00,4.533007741E-03,1.324593090E-03,3.779279813E-02,3.644246608E-03,2.966612816E+00,2.966612816E+00,9.950520471E-04,8.100259304E-01,8.100259304E-01,1.524994965E-03,1.241427898E+00,1.241427898E+00,8.647970390E-04,7.039912939E-01,7.039912939E-01,1.825343352E-03,5.331478314E-04,1.521157566E-02,9.181892499E-03,7.474554062E+00,2.540183486E-03,2.067845821E+00,3.898846218E-03,3.173870325E+00,-2.174535766E-03,-1.770188928E+00,4.533661064E-03,-1.324952347E-03,-3.780304641E-02,7.061181664E-01,7.438073754E-01,1.903063178E+00,1.897996902E+00,3.584321045E+03,3.178994358E-02,1.242780965E-02,1.667147577E-01,2.666284703E-02,6.732676923E-02,3.269748017E-02,1.345526241E-02,2.756875801E-06,9.024927020E-02,2.504450607E+01,9.876584045E-06,5.543031421E-06,1.876734383E-02,1.876734383E-02,2.009986474E-06,2.491944581E-01,2.417937815E-01,9.581249952E-02,2.733686447E+00,1.709229827E+00,5.039817467E-02,1.437941909E+00,8.990688324E-01,6.243944168E-02,1.781498909E+00,1.113879561E+00,1.871159673E-01,1.081368402E-01,1.083374619E-01,1.076182127E-01,3.981611505E-02,-1.221634302E-04,2.177466667E-04,-9.558323654E-05,1.493310789E-03,2.855709754E-03,0.000000000E+00,7.041836977E-01,1.134893537E-04,1.016210690E-01,4.373616219E+00,0.000000000E+00,2.587041855E-01,2.048111725E+02,-8.630050659E+01,2.819867897E+01,3.301074803E-01 +2.974209785E-01,1.863108368E+02,6.088683701E+01,9.737136364E-01,3.907843828E-01,9.826305509E-01,2.803604889E+01,2.525326729E+00,2.526102066E+00,2.526070118E+00,2.526070118E+00,1.589230776E+00,7.611380615E+02,1.200000048E+00,1.912860870E+00,1.912860870E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.463877797E+00,2.525326729E+00,9.813071489E-01,2.799829102E+01,7.752898382E-04,1.323367120E-03,3.775781766E-02,9.083371609E-03,7.394352436E+00,2.537840512E-03,2.065938711E+00,3.885901766E-03,3.163332939E+00,2.165199025E-03,1.762588501E+00,4.439247772E-03,1.310295309E-03,3.738485649E-02,3.603017423E-03,2.933049917E+00,2.933049917E+00,9.937656578E-04,8.089787364E-01,8.089787364E-01,1.519323559E-03,1.236811042E+00,1.236811042E+00,8.606480551E-04,7.006137967E-01,7.006137967E-01,1.785983332E-03,5.269765970E-04,1.503549889E-02,9.085122496E-03,7.395778179E+00,2.538032597E-03,2.066095114E+00,3.885901766E-03,3.163332939E+00,-2.165779006E-03,-1.763060570E+00,4.439848941E-03,-1.310635009E-03,-3.739454970E-02,7.025790215E-01,7.400618792E-01,1.905820847E+00,1.900751591E+00,3.587869873E+03,3.151320666E-02,1.231489982E-02,1.659418792E-01,2.637542412E-02,6.662681699E-02,3.260097280E-02,1.330887899E-02,2.756875801E-06,8.967162669E-02,2.474483681E+01,9.876584045E-06,5.543031421E-06,1.856392249E-02,1.856392249E-02,2.009986474E-06,2.484483868E-01,2.408799827E-01,9.530669451E-02,2.719254971E+00,1.699880600E+00,5.037688464E-02,1.437334538E+00,8.985167146E-01,6.233575195E-02,1.778540492E+00,1.111816525E+00,1.855990738E-01,1.074268967E-01,1.073801368E-01,1.066577211E-01,3.944807872E-02,-1.199305771E-04,2.154052345E-04,-9.547465015E-05,1.480712206E-03,2.832390368E-03,0.000000000E+00,7.007982135E-01,1.121744135E-04,1.023962051E-01,4.380382061E+00,0.000000000E+00,2.540205419E-01,2.047160187E+02,-8.396841431E+01,2.780247688E+01,3.281701505E-01 +3.009878695E-01,1.885452271E+02,6.158881378E+01,9.733470082E-01,3.906372488E-01,9.842439294E-01,2.808208084E+01,2.526326895E+00,2.527070284E+00,2.527038336E+00,2.527038336E+00,1.589538455E+00,7.615374146E+02,1.200000048E+00,1.913377166E+00,1.913377166E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.467978477E+00,2.526326895E+00,9.829566479E-01,2.804535294E+01,7.434196305E-04,1.287269406E-03,3.672789037E-02,8.988160640E-03,7.316845417E+00,2.535247477E-03,2.063827753E+00,3.872486064E-03,3.152411938E+00,2.156297909E-03,1.755342484E+00,4.347407259E-03,1.296033617E-03,3.697794676E-02,3.562477417E-03,2.900048256E+00,2.900048256E+00,9.923126781E-04,8.077958822E-01,8.077958822E-01,1.513481606E-03,1.232055426E+00,1.232055426E+00,8.564505260E-04,6.971967816E-01,6.971967816E-01,1.747484668E-03,5.208354560E-04,1.486028265E-02,8.989817463E-03,7.318194389E+00,2.535433974E-03,2.063979387E+00,3.872486297E-03,3.152411938E+00,-2.156853909E-03,-1.755795121E+00,4.347959999E-03,-1.296354691E-03,-3.698710725E-02,6.990121007E-01,7.362868190E-01,1.908574820E+00,1.903504014E+00,3.591438477E+03,3.124022298E-02,1.220362447E-02,1.651773155E-01,2.609115466E-02,6.593398750E-02,3.250303119E-02,1.316412445E-02,2.756875801E-06,8.910001069E-02,2.444832802E+01,9.876584045E-06,5.543031421E-06,1.836275123E-02,1.836275123E-02,2.009986474E-06,2.477092296E-01,2.399681658E-01,9.480588138E-02,2.704966068E+00,1.690629959E+00,5.035113543E-02,1.436599851E+00,8.978884220E-01,6.222810224E-02,1.775469065E+00,1.109687448E+00,1.840957105E-01,1.067162454E-01,1.064342782E-01,1.057095155E-01,3.909009323E-02,-1.177453960E-04,2.130243811E-04,-9.527898510E-05,1.468105009E-03,2.809033031E-03,0.000000000E+00,6.973735690E-01,1.108659562E-04,1.031543985E-01,4.387137890E+00,0.000000000E+00,2.494428903E-01,2.046222382E+02,-8.169335938E+01,2.740908241E+01,3.260731399E-01 +3.045828044E-01,1.907971649E+02,6.229626465E+01,9.729871750E-01,3.904927969E-01,9.858548641E-01,2.812804222E+01,2.527316093E+00,2.528028488E+00,2.527996540E+00,2.527996540E+00,1.589842677E+00,7.619318237E+02,1.200000048E+00,1.913887978E+00,1.913887978E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.472081780E+00,2.527316093E+00,9.846027493E-01,2.809231949E+01,7.124798722E-04,1.252061455E-03,3.572335094E-02,8.894366212E-03,7.240492344E+00,2.532217419E-03,2.061361313E+00,3.858601674E-03,3.141109228E+00,2.147229854E-03,1.747960448E+00,4.257434513E-03,1.281808363E-03,3.657208011E-02,3.522605868E-03,2.867590666E+00,2.867590666E+00,9.906974155E-04,8.064810038E-01,8.064810038E-01,1.507470035E-03,1.227161646E+00,1.227161646E+00,8.522050921E-04,6.937407851E-01,6.937407851E-01,1.709822798E-03,5.147242919E-04,1.468592137E-02,8.895934559E-03,7.241768837E+00,2.532398794E-03,2.061508656E+00,3.858601674E-03,3.141109228E+00,-2.147762803E-03,-1.748394370E+00,4.257942084E-03,-1.282111625E-03,-3.658073395E-02,6.954172254E-01,7.324822545E-01,1.911325574E+00,1.906254649E+00,3.595026855E+03,3.097089566E-02,1.209394261E-02,1.644207984E-01,2.580995858E-02,6.524811685E-02,3.240371495E-02,1.302096155E-02,2.756875801E-06,8.853426576E-02,2.415490913E+01,9.876584045E-06,5.543031421E-06,1.816377789E-02,1.816377789E-02,2.009986474E-06,2.469767779E-01,2.390580624E-01,9.430993348E-02,2.690815926E+00,1.681474924E+00,5.032103881E-02,1.435741067E+00,8.971857429E-01,6.211648881E-02,1.772284508E+00,1.107492328E+00,1.826054901E-01,1.060051322E-01,1.054997668E-01,1.047729254E-01,3.874146566E-02,-1.156078870E-04,2.106102183E-04,-9.500233864E-05,1.455477672E-03,2.785615856E-03,0.000000000E+00,6.939101815E-01,1.095639454E-04,1.038964689E-01,4.393885136E+00,0.000000000E+00,2.449684292E-01,2.045298157E+02,-7.947365570E+01,2.701851463E+01,3.236587942E-01 +3.082059622E-01,1.930667877E+02,6.300922775E+01,9.726338983E-01,3.903510273E-01,9.874635339E-01,2.817394066E+01,2.528293848E+00,2.528976440E+00,2.528944492E+00,2.528944492E+00,1.590143681E+00,7.623214111E+02,1.200000048E+00,1.914393187E+00,1.914393187E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.476188302E+00,2.528293848E+00,9.862458110E-01,2.813919830E+01,6.824419834E-04,1.217716490E-03,3.474343568E-02,8.801945485E-03,7.165256977E+00,2.528762445E-03,2.058548689E+00,3.844251391E-03,3.129427433E+00,2.137996722E-03,1.740444303E+00,4.169280175E-03,1.267620246E-03,3.616726771E-02,3.483381588E-03,2.835659742E+00,2.835659742E+00,9.889245266E-04,8.050377369E-01,8.050377369E-01,1.501290011E-03,1.222130775E+00,1.222130775E+00,8.479124517E-04,6.902462840E-01,6.902462840E-01,1.672973973E-03,5.086428719E-04,1.451240946E-02,8.803428151E-03,7.166463852E+00,2.528938465E-03,2.058691978E+00,3.844251391E-03,3.129427433E+00,-2.138507552E-03,-1.740860224E+00,4.169745836E-03,-1.267906511E-03,-3.617543355E-02,6.917940378E-01,7.286478281E-01,1.914073586E+00,1.909003735E+00,3.598635742E+03,3.070514649E-02,1.198581513E-02,1.636720151E-01,2.553176507E-02,6.456904113E-02,3.230306879E-02,1.287935022E-02,2.756875801E-06,8.797423542E-02,2.386450958E+01,9.876584045E-06,5.543031421E-06,1.796694845E-02,1.796694845E-02,2.009986474E-06,2.462507486E-01,2.381494492E-01,9.381867200E-02,2.676799297E+00,1.672412515E+00,5.028669536E-02,1.434761167E+00,8.964106441E-01,6.200092286E-02,1.768987179E+00,1.105231047E+00,1.811282635E-01,1.052938998E-01,1.045764610E-01,1.038474590E-01,3.840153664E-02,-1.135151979E-04,2.081627754E-04,-9.464757750E-05,1.442839857E-03,2.762157936E-03,0.000000000E+00,6.904086471E-01,1.082683375E-04,1.046232730E-01,4.400624752E+00,0.000000000E+00,2.405944467E-01,2.044387054E+02,-7.730767059E+01,2.663079834E+01,3.207631111E-01 +3.118575811E-01,1.953542328E+02,6.372775269E+01,9.722869992E-01,3.902118206E-01,9.890701771E-01,2.821978188E+01,2.529261112E+00,2.529914379E+00,2.529882431E+00,2.529882431E+00,1.590441346E+00,7.627062988E+02,1.200000048E+00,1.914893150E+00,1.914893150E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.480298877E+00,2.529261112E+00,9.878860116E-01,2.818599510E+01,6.532788393E-04,1.184209250E-03,3.378741816E-02,8.710850962E-03,7.091100693E+00,2.524893731E-03,2.055399179E+00,3.829440102E-03,3.117370129E+00,2.128601074E-03,1.732795715E+00,4.082896747E-03,1.253469731E-03,3.576353192E-02,3.444782458E-03,2.804238081E+00,2.804238081E+00,9.869983187E-04,8.034696579E-01,8.034696579E-01,1.494943164E-03,1.216964126E+00,1.216964126E+00,8.435731288E-04,6.867138743E-01,6.867138743E-01,1.636915724E-03,5.025911960E-04,1.433974411E-02,8.712253533E-03,7.092242718E+00,2.525064396E-03,2.055538177E+00,3.829440102E-03,3.117370129E+00,-2.129090484E-03,-1.733194113E+00,4.083323758E-03,-1.253739698E-03,-3.577123582E-02,6.881424189E-01,7.247835398E-01,1.916819334E+00,1.911751986E+00,3.602264893E+03,3.044289723E-02,1.187920757E-02,1.629306078E-01,2.525650710E-02,6.389661133E-02,3.220114857E-02,1.273925696E-02,2.756875801E-06,8.741973341E-02,2.357706642E+01,9.876584045E-06,5.543031421E-06,1.777221449E-02,1.777221449E-02,2.009986474E-06,2.455308139E-01,2.372420877E-01,9.333192557E-02,2.662911892E+00,1.663439155E+00,5.024820939E-02,1.433663130E+00,8.955649137E-01,6.188141182E-02,1.765577316E+00,1.102903843E+00,1.796639860E-01,1.045830250E-01,1.036642343E-01,1.029327810E-01,3.806966543E-02,-1.114641927E-04,2.056809317E-04,-9.421673894E-05,1.430187025E-03,2.738650655E-03,0.000000000E+00,6.868693829E-01,1.069791178E-04,1.053357348E-01,4.407357216E+00,0.000000000E+00,2.363179475E-01,2.043488922E+02,-7.519384003E+01,2.624596024E+01,3.172314167E-01 +3.155378997E-01,1.976596680E+02,6.445187378E+01,9.719464183E-01,3.900751173E-01,9.906750917E-01,2.826557350E+01,2.530217648E+00,2.530842543E+00,2.530810595E+00,2.530810595E+00,1.590735912E+00,7.630866089E+02,1.200000048E+00,1.915387750E+00,1.915387750E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.484413743E+00,2.530217648E+00,9.895235896E-01,2.823271751E+01,6.249647704E-04,1.151515404E-03,3.285460919E-02,8.621034212E-03,7.017985344E+00,2.520622220E-03,2.051922083E+00,3.814172931E-03,3.104941845E+00,2.119044540E-03,1.725016236E+00,3.998239525E-03,1.239357749E-03,3.536089137E-02,3.406786360E-03,2.773307323E+00,2.773307323E+00,9.849230992E-04,8.017804027E-01,8.017804027E-01,1.488431240E-03,1.211663008E+00,1.211663008E+00,8.391877636E-04,6.831439734E-01,6.831439734E-01,1.601626398E-03,4.965691478E-04,1.416792627E-02,8.622360416E-03,7.019064426E+00,2.520788228E-03,2.052057028E+00,3.814172931E-03,3.104941845E+00,-2.119513694E-03,-1.725398064E+00,3.998630214E-03,-1.239612233E-03,-3.536815569E-02,6.844621301E-01,7.208891511E-01,1.919563055E+00,1.914499521E+00,3.605915039E+03,3.018407710E-02,1.177408732E-02,1.621962041E-01,2.498411760E-02,6.323067844E-02,3.209800273E-02,1.260064635E-02,2.756875801E-06,8.687060326E-02,2.329252434E+01,9.876584045E-06,5.543031421E-06,1.757952943E-02,1.757952943E-02,2.009986474E-06,2.448166311E-01,2.363357097E-01,9.284951538E-02,2.649147749E+00,1.654551387E+00,5.020568520E-02,1.432449937E+00,8.946502805E-01,6.175797433E-02,1.762055516E+00,1.100511074E+00,1.782127023E-01,1.038730666E-01,1.027629599E-01,1.020285338E-01,3.774520010E-02,-1.094501858E-04,2.031601907E-04,-9.370999760E-05,1.417517196E-03,2.715090523E-03,0.000000000E+00,6.832928658E-01,1.056962719E-04,1.060348675E-01,4.414083958E+00,0.000000000E+00,2.321353704E-01,2.042603302E+02,-7.313067627E+01,2.586404037E+01,3.129392564E-01 +3.192470968E-01,1.999831848E+02,6.518164825E+01,9.716119766E-01,3.899409175E-01,9.922783971E-01,2.831131744E+01,2.531163931E+00,2.531761408E+00,2.531729221E+00,2.531729221E+00,1.591027260E+00,7.634623413E+02,1.200000048E+00,1.915877104E+00,1.915877104E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.488533497E+00,2.531163931E+00,9.911587834E-01,2.827937317E+01,5.974754458E-04,1.119612134E-03,3.194435686E-02,8.532446809E-03,6.945870399E+00,2.515959553E-03,2.048126221E+00,3.798455931E-03,3.092147350E+00,2.109329682E-03,1.717107654E+00,3.915266600E-03,1.225285348E-03,3.495938331E-02,3.369371407E-03,2.742849350E+00,2.742849350E+00,9.827035246E-04,7.999734282E-01,7.999734282E-01,1.481756568E-03,1.206229568E+00,1.206229568E+00,8.347569965E-04,6.795370579E-01,6.795370579E-01,1.567085856E-03,4.905769019E-04,1.399695687E-02,8.533700369E-03,6.946891308E+00,2.516120439E-03,2.048257351E+00,3.798456164E-03,3.092147350E+00,-2.109778812E-03,-1.717473388E+00,3.915623762E-03,-1.225525048E-03,-3.496622294E-02,6.807528734E-01,7.169646025E-01,1.922305226E+00,1.917246699E+00,3.609585693E+03,2.992861718E-02,1.167042088E-02,1.614684016E-01,2.471453696E-02,6.257111579E-02,3.199366853E-02,1.246348862E-02,2.756875801E-06,8.632665873E-02,2.301082802E+01,9.876584045E-06,5.543031421E-06,1.738885045E-02,1.738885045E-02,2.009986474E-06,2.441077828E-01,2.354300320E-01,9.237124026E-02,2.635501862E+00,1.645745516E+00,5.015922710E-02,1.431124330E+00,8.936685920E-01,6.163064390E-02,1.758422494E+00,1.098052979E+00,1.767744273E-01,1.031646356E-01,1.018725112E-01,1.011343077E-01,3.742749989E-02,-1.074687752E-04,2.005962742E-04,-9.312749899E-05,1.404824434E-03,2.691466827E-03,0.000000000E+00,6.796796918E-01,1.044198143E-04,1.067217961E-01,4.420805454E+00,0.000000000E+00,2.280424535E-01,2.041730194E+02,-7.111679077E+01,2.548509216E+01,3.078170419E-01 +3.229854405E-01,2.023249664E+02,6.591710663E+01,9.712835550E-01,3.898091018E-01,9.938802719E-01,2.835702133E+01,2.532099724E+00,2.532670498E+00,2.532638550E+00,2.532638550E+00,1.591315627E+00,7.638336182E+02,1.200000048E+00,1.916361451E+00,1.916361451E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.492658615E+00,2.532099724E+00,9.927918315E-01,2.832596588E+01,5.707879900E-04,1.088478602E-03,3.105606697E-02,8.445043117E-03,6.874719143E+00,2.510916209E-03,2.044020653E+00,3.782296786E-03,3.078992844E+00,2.099457895E-03,1.709071636E+00,3.833938390E-03,1.211253693E-03,3.455904126E-02,3.332515713E-03,2.712846994E+00,2.712846994E+00,9.803434368E-04,7.980523109E-01,7.980523109E-01,1.474922057E-03,1.200665832E+00,1.200665832E+00,8.302813512E-04,6.758936644E-01,6.758936644E-01,1.533275121E-03,4.846145748E-04,1.382684242E-02,8.446227759E-03,6.875683308E+00,2.511072438E-03,2.044147968E+00,3.782296786E-03,3.078993082E+00,-2.099888166E-03,-1.709421873E+00,3.834264120E-03,-1.211479306E-03,-3.456547856E-02,6.770145297E-01,7.130096555E-01,1.925046206E+00,1.919993877E+00,3.613277588E+03,2.967643924E-02,1.156817470E-02,1.607468426E-01,2.444771305E-02,6.191781163E-02,3.188818321E-02,1.232775580E-02,2.756875801E-06,8.578775078E-02,2.273193359E+01,9.876584045E-06,5.543031421E-06,1.720014028E-02,1.720014028E-02,2.009986474E-06,2.434038967E-01,2.345248461E-01,9.189691395E-02,2.621968508E+00,1.637017846E+00,5.010892451E-02,1.429689169E+00,8.926215172E-01,6.149945036E-02,1.754679322E+00,1.095530272E+00,1.753492206E-01,1.024583206E-01,1.009927467E-01,1.002497151E-01,3.711596504E-02,-1.055160392E-04,1.979856752E-04,-9.246962873E-05,1.392107573E-03,2.667777240E-03,0.000000000E+00,6.760302186E-01,1.031497959E-04,1.073976085E-01,4.427523136E+00,0.000000000E+00,2.240343094E-01,2.040869141E+02,-6.915089417E+01,2.510918427E+01,3.018722236E-01 +3.267531693E-01,2.046851501E+02,6.665830231E+01,9.709609747E-01,3.896796405E-01,9.954808950E-01,2.840269089E+01,2.533025503E+00,2.533570528E+00,2.533538342E+00,2.533538342E+00,1.591601014E+00,7.642005615E+02,1.200000048E+00,1.916840672E+00,1.916840672E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.496789336E+00,2.533025503E+00,9.944227934E-01,2.837250137E+01,5.448811571E-04,1.058095368E-03,3.018918261E-02,8.358776569E-03,6.804493427E+00,2.505502664E-03,2.039613962E+00,3.765703412E-03,3.065485001E+00,2.089431044E-03,1.700909257E+00,3.754219273E-03,1.197264413E-03,3.415990248E-02,3.296199022E-03,2.683283329E+00,2.683283329E+00,9.778472595E-04,7.960202098E-01,7.960202098E-01,1.467930735E-03,1.194974542E+00,1.194974542E+00,8.257613517E-04,6.722141504E-01,6.722141504E-01,1.500176964E-03,4.786825157E-04,1.365759131E-02,8.359896019E-03,6.805404663E+00,2.505654236E-03,2.039737225E+00,3.765703412E-03,3.065485001E+00,-2.089843154E-03,-1.701244593E+00,3.754516132E-03,-1.197476522E-03,-3.416595235E-02,6.732468605E-01,7.090241909E-01,1.927786112E+00,1.922741175E+00,3.616989990E+03,2.942746878E-02,1.146731339E-02,1.600311249E-01,2.418360487E-02,6.127067655E-02,3.178156540E-02,1.219342649E-02,2.756875801E-06,8.525372297E-02,2.245580482E+01,9.876584045E-06,5.543031421E-06,1.701336913E-02,1.701336913E-02,2.009986474E-06,2.427045554E-01,2.336199135E-01,9.142634273E-02,2.608542442E+00,1.628364801E+00,5.005487800E-02,1.428147078E+00,8.915106654E-01,6.136443466E-02,1.750827193E+00,1.092943668E+00,1.739370972E-01,1.017546058E-01,1.001235321E-01,9.937451780E-02,3.681006655E-02,-1.035899113E-04,1.953282481E-04,-9.173833678E-05,1.379372668E-03,2.644033870E-03,0.000000000E+00,6.723448038E-01,1.018862677E-04,1.080632582E-01,4.434236526E+00,0.000000000E+00,2.201055735E-01,2.040019989E+02,-6.723181152E+01,2.473639297E+01,2.951980233E-01 +3.305504620E-01,2.070638580E+02,6.740527344E+01,9.706441760E-01,3.895525038E-01,9.970803857E-01,2.844832611E+01,2.533941507E+00,2.534461260E+00,2.534429312E+00,2.534429312E+00,1.591883302E+00,7.645631714E+02,1.200000048E+00,1.917315006E+00,1.917315006E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.500926018E+00,2.533941507E+00,9.960519075E-01,2.841898155E+01,5.197349819E-04,1.028444851E-03,2.934320457E-02,8.273605257E-03,6.735158920E+00,2.499729162E-03,2.034914017E+00,3.748685587E-03,3.051631689E+00,2.079250757E-03,1.692621827E+00,3.676076652E-03,1.183318556E-03,3.376200423E-02,3.260401776E-03,2.654142380E+00,2.654142380E+00,9.752187761E-04,7.938805223E-01,7.938805223E-01,1.460786443E-03,1.189158678E+00,1.189158678E+00,8.211973472E-04,6.684987545E-01,6.684987545E-01,1.467775437E-03,4.727809574E-04,1.348921005E-02,8.274662308E-03,6.736020088E+00,2.499876311E-03,2.035033703E+00,3.748685587E-03,3.051631689E+00,-2.079645172E-03,-1.692942858E+00,3.676346969E-03,-1.183517859E-03,-3.376769274E-02,6.694495082E-01,7.050081491E-01,1.930525303E+00,1.925488949E+00,3.620723633E+03,2.918162011E-02,1.136780065E-02,1.593208760E-01,2.392217517E-02,6.062963605E-02,3.167383000E-02,1.206048205E-02,2.756875801E-06,8.472443372E-02,2.218240929E+01,9.876584045E-06,5.543031421E-06,1.682850905E-02,1.682850905E-02,2.009986474E-06,2.420093566E-01,2.327150255E-01,9.095935524E-02,2.595218420E+00,1.619783163E+00,4.999716952E-02,1.426500678E+00,8.903375864E-01,6.122565642E-02,1.746867657E+00,1.090293884E+00,1.725380719E-01,1.010537297E-01,9.926467389E-02,9.850867093E-02,3.650939465E-02,-1.016903989E-04,1.926278201E-04,-9.093741392E-05,1.366631710E-03,2.620259766E-03,0.000000000E+00,6.686238050E-01,1.006292805E-04,1.087194383E-01,4.440946579E+00,0.000000000E+00,2.162508368E-01,2.039182587E+02,-6.535845947E+01,2.436679840E+01,2.879641056E-01 +3.343775868E-01,2.094612579E+02,6.815808105E+01,9.703330398E-01,3.894276023E-01,9.986788034E-01,2.849393082E+01,2.534847736E+00,2.535342932E+00,2.535310984E+00,2.535310984E+00,1.592162728E+00,7.649215088E+02,1.200000048E+00,1.917784452E+00,1.917784452E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.505069017E+00,2.534847736E+00,9.976792932E-01,2.846541405E+01,4.953310126E-04,9.995111031E-04,2.851767652E-02,8.189487271E-03,6.666683197E+00,2.493605250E-03,2.029928684E+00,3.731253790E-03,3.037441254E+00,2.068917500E-03,1.684210181E+00,3.599480959E-03,1.169417636E-03,3.336538747E-02,3.225105349E-03,2.625409126E+00,2.625409126E+00,9.724618285E-04,7.916362286E-01,7.916362286E-01,1.453493722E-03,1.183222055E+00,1.183222055E+00,8.165893960E-04,6.647477150E-01,6.647477150E-01,1.436055871E-03,4.669101036E-04,1.332170516E-02,8.190486580E-03,6.667496681E+00,2.493747976E-03,2.030044794E+00,3.731253790E-03,3.037441254E+00,-2.069294918E-03,-1.684517384E+00,3.599726362E-03,-1.169604715E-03,-3.337072581E-02,6.656224132E-01,7.009613514E-01,1.933263898E+00,1.928237319E+00,3.624478027E+03,2.893880568E-02,1.126959734E-02,1.586157382E-01,2.366339602E-02,5.999464169E-02,3.156497329E-02,1.192890760E-02,2.756875801E-06,8.419974893E-02,2.191172600E+01,9.876584045E-06,5.543031421E-06,1.664554328E-02,1.664554328E-02,2.009986474E-06,2.413179129E-01,2.318100184E-01,9.049578756E-02,2.581992149E+00,1.611269832E+00,4.993588850E-02,1.424752235E+00,8.891037107E-01,6.108317152E-02,1.742802262E+00,1.087582231E+00,1.711519510E-01,1.003555134E-01,9.841597080E-02,9.765225649E-02,3.621365875E-02,-9.981977200E-05,1.898924966E-04,-9.007273184E-05,1.353897853E-03,2.596480539E-03,0.000000000E+00,6.648673415E-01,9.937888535E-05,1.093664914E-01,4.447654247E+00,0.000000000E+00,2.124652117E-01,2.038356628E+02,-6.352988052E+01,2.400047302E+01,2.803923786E-01 +3.382347822E-01,2.118774719E+02,6.891676331E+01,9.700274467E-01,3.893049657E-01,1.000276327E+00,2.853951073E+01,2.535744190E+00,2.536215782E+00,2.536183596E+00,2.536183596E+00,1.592439175E+00,7.652756348E+02,1.200000048E+00,1.918249011E+00,1.918249011E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.509218454E+00,2.535744190E+00,9.993050694E-01,2.851179886E+01,4.716520780E-04,9.712797473E-04,2.771219052E-02,8.106387220E-03,6.599035263E+00,2.487140009E-03,2.024665594E+00,3.713419428E-03,3.022922993E+00,2.058432437E-03,1.675674677E+00,3.524404718E-03,1.155562350E-03,3.297007456E-02,3.190292744E-03,2.597069740E+00,2.597069740E+00,9.695799672E-04,7.892902493E-01,7.892902493E-01,1.446056995E-03,1.177168131E+00,1.177168131E+00,8.119376726E-04,6.609609127E-01,6.609609127E-01,1.405004994E-03,4.610700416E-04,1.315507852E-02,8.107330650E-03,6.599803448E+00,2.487278311E-03,2.024778366E+00,3.713419428E-03,3.022922993E+00,-2.058793558E-03,-1.675968647E+00,3.524627304E-03,-1.155737787E-03,-3.297507763E-02,6.617652178E-01,6.968836188E-01,1.936002374E+00,1.930986524E+00,3.628253662E+03,2.869893052E-02,1.117266249E-02,1.579153687E-01,2.340724878E-02,5.936564878E-02,3.145498782E-02,1.179869287E-02,2.756875801E-06,8.367955685E-02,2.164373970E+01,9.876584045E-06,5.543031421E-06,1.646445692E-02,1.646445692E-02,2.009986474E-06,2.406298220E-01,2.309046984E-01,9.003548324E-02,2.568858862E+00,1.602821589E+00,4.987110943E-02,1.422903895E+00,8.878104687E-01,6.093705073E-02,1.738633156E+00,1.084809542E+00,1.697783470E-01,9.965939820E-02,9.757719189E-02,9.680540115E-02,3.592267632E-02,-9.798164683E-05,1.871330605E-04,-8.915141370E-05,1.341181458E-03,2.572716679E-03,0.000000000E+00,6.610754132E-01,9.813508223E-05,1.100044921E-01,4.454360008E+00,0.000000000E+00,2.087447196E-01,2.037542114E+02,-6.174518967E+01,2.363748550E+01,2.727288306E-01 +3.421222866E-01,2.143126831E+02,6.968136597E+01,9.697272778E-01,3.891845047E-01,1.001873016E+00,2.858506775E+01,2.536630869E+00,2.537079573E+00,2.537047625E+00,2.537047625E+00,1.592712760E+00,7.656256104E+02,1.200000048E+00,1.918708801E+00,1.918708801E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.513374925E+00,2.536630869E+00,1.000929356E+00,2.855814171E+01,4.486825492E-04,9.437379777E-04,2.692638151E-02,8.024269715E-03,6.532187462E+00,2.480341820E-03,2.019131660E+00,3.695192747E-03,3.008085728E+00,2.047795570E-03,1.667015672E+00,3.450823016E-03,1.141753281E-03,3.257608041E-02,3.155948361E-03,2.569111586E+00,2.569111586E+00,9.665766265E-04,7.868453264E-01,7.868453264E-01,1.438480336E-03,1.171000242E+00,1.171000242E+00,8.072421188E-04,6.571384668E-01,6.571384668E-01,1.374610467E-03,4.552607134E-04,1.298932917E-02,8.025160991E-03,6.532912254E+00,2.480475930E-03,2.019240856E+00,3.695192747E-03,3.008085728E+00,-2.048141090E-03,-1.667297006E+00,3.451024415E-03,-1.141917543E-03,-3.258076683E-02,6.578777432E-01,6.927748322E-01,1.938740611E+00,1.933736682E+00,3.632050293E+03,2.846189775E-02,1.107695512E-02,1.572194397E-01,2.315371856E-02,5.874264985E-02,3.134384751E-02,1.166983135E-02,2.756875801E-06,8.316372335E-02,2.137843704E+01,9.876584045E-06,5.543031421E-06,1.628523879E-02,1.628523879E-02,2.009986474E-06,2.399446368E-01,2.299989611E-01,8.957829326E-02,2.555814505E+00,1.594435930E+00,4.980290681E-02,1.420957923E+00,8.864591122E-01,6.078734994E-02,1.734362006E+00,1.081977129E+00,1.684168279E-01,9.896475822E-02,9.674809128E-02,9.596828371E-02,3.563633934E-02,-9.617990145E-05,1.843608043E-04,-8.818090282E-05,1.328491606E-03,2.548985183E-03,0.000000000E+00,6.572479606E-01,9.689787839E-05,1.106332764E-01,4.461063385E+00,0.000000000E+00,2.050865293E-01,2.036738586E+02,-6.000362015E+01,2.327787781E+01,2.652200162E-01 +3.460403085E-01,2.167670135E+02,7.045194244E+01,9.694324732E-01,3.890661895E-01,1.003469110E+00,2.863060570E+01,2.537508249E+00,2.537934780E+00,2.537902594E+00,2.537902594E+00,1.592983484E+00,7.659714966E+02,1.200000048E+00,1.919163823E+00,1.919163823E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.517538428E+00,2.537508249E+00,1.002552152E+00,2.860444641E+01,4.264082818E-04,9.168742690E-04,2.615991607E-02,7.943104021E-03,6.466114044E+00,2.473218832E-03,2.013333082E+00,3.676583059E-03,2.992936134E+00,2.037007362E-03,1.658233523E+00,3.378714202E-03,1.127990661E-03,3.218340874E-02,3.122057999E-03,2.541522980E+00,2.541522980E+00,9.634548333E-04,7.843040228E-01,7.843040228E-01,1.430767123E-03,1.164721370E+00,1.164721370E+00,8.025025018E-04,6.532801986E-01,6.532801986E-01,1.344861346E-03,4.494820314E-04,1.282445341E-02,7.943945006E-03,6.466798306E+00,2.473348752E-03,2.013438702E+00,3.676583059E-03,2.992936134E+00,-2.037337748E-03,-1.658502579E+00,3.378896043E-03,-1.128144446E-03,-3.218779713E-02,6.539596915E-01,6.886347532E-01,1.941479087E+00,1.936488032E+00,3.635868408E+03,2.822761051E-02,1.098243427E-02,1.565276682E-01,2.290280163E-02,5.812563747E-02,3.123152442E-02,1.154232025E-02,2.756875801E-06,8.265212923E-02,2.111582184E+01,9.876584045E-06,5.543031421E-06,1.610788517E-02,1.610788517E-02,2.009986474E-06,2.392619699E-01,2.290926427E-01,8.912409097E-02,2.542855501E+00,1.586110353E+00,4.973134026E-02,1.418916106E+00,8.850507736E-01,6.063411757E-02,1.729990005E+00,1.079085588E+00,1.670670807E-01,9.827113152E-02,9.592840075E-02,9.514114261E-02,3.535458818E-02,-9.441750444E-05,1.815854630E-04,-8.716796583E-05,1.315838657E-03,2.525306772E-03,0.000000000E+00,6.533848643E-01,9.566723020E-05,1.112525538E-01,4.467765808E+00,0.000000000E+00,2.014886737E-01,2.035946198E+02,-5.830446243E+01,2.292168617E+01,2.580955923E-01 +3.499890864E-01,2.192406311E+02,7.122853851E+01,9.691429734E-01,3.889500201E-01,1.005064487E+00,2.867612648E+01,2.538376331E+00,2.538781166E+00,2.538748980E+00,2.538748980E+00,1.593251467E+00,7.663132935E+02,1.200000048E+00,1.919614196E+00,1.919614196E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.521709442E+00,2.538376331E+00,1.004173875E+00,2.865071297E+01,4.048163828E-04,8.906780276E-04,2.541249245E-02,7.862862200E-03,6.400792599E+00,2.465778030E-03,2.007276058E+00,3.657595953E-03,2.977479696E+00,2.026068047E-03,1.649328351E+00,3.308057552E-03,1.114274724E-03,3.179207072E-02,3.088609083E-03,2.514293909E+00,2.514293909E+00,9.602176724E-04,7.816687822E-01,7.816687822E-01,1.422919566E-03,1.158333063E+00,1.158333063E+00,7.977187634E-04,6.493859291E-01,6.493859291E-01,1.315747621E-03,4.437337338E-04,1.266044565E-02,7.863655686E-03,6.401438236E+00,2.465903992E-03,2.007378578E+00,3.657595953E-03,2.977479696E+00,-2.026384231E-03,-1.649585605E+00,3.308221698E-03,-1.114418381E-03,-3.179617226E-02,6.500108838E-01,6.844633222E-01,1.944218040E+00,1.939240694E+00,3.639707520E+03,2.799597569E-02,1.088905986E-02,1.558397710E-01,2.265449800E-02,5.751463771E-02,3.111797944E-02,1.141616050E-02,2.756875801E-06,8.214465529E-02,2.085590363E+01,9.876584045E-06,5.543031421E-06,1.593239978E-02,1.593239978E-02,2.009986474E-06,2.385813743E-01,2.281856090E-01,8.867277950E-02,2.529978752E+00,1.577842951E+00,4.965647310E-02,1.416779995E+00,8.835864067E-01,6.047737971E-02,1.725517988E+00,1.076135397E+00,1.657290459E-01,9.757840633E-02,9.511784464E-02,9.432426095E-02,3.507735953E-02,-9.269586008E-05,1.788140216E-04,-8.611815429E-05,1.303235535E-03,2.501706127E-03,0.000000000E+00,6.494860053E-01,9.444310126E-05,1.118620634E-01,4.474467278E+00,0.000000000E+00,1.979496926E-01,2.035164642E+02,-5.664709091E+01,2.256892586E+01,2.515489161E-01 +3.539689183E-01,2.217336731E+02,7.201121521E+01,9.688587189E-01,3.888359070E-01,1.006659508E+00,2.872163200E+01,2.539235115E+00,2.539618969E+00,2.539586782E+00,2.539586782E+00,1.593516588E+00,7.666510620E+02,1.200000048E+00,1.920059919E+00,1.920059919E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.525888205E+00,2.539235115E+00,1.005794287E+00,2.869694901E+01,3.838946286E-04,8.651389508E-04,2.468382195E-02,7.783520967E-03,6.336204529E+00,2.458026865E-03,2.000966072E+00,3.638235619E-03,2.961719513E+00,2.014978090E-03,1.640300512E+00,3.238834441E-03,1.100605703E-03,3.140207008E-02,3.055590438E-03,2.487414837E+00,2.487414837E+00,9.568677051E-04,7.789417505E-01,7.789417505E-01,1.414939296E-03,1.151836634E+00,1.151836634E+00,7.928907289E-04,6.454557180E-01,6.454557180E-01,1.287259627E-03,4.380156752E-04,1.249730028E-02,7.784269284E-03,6.336813450E+00,2.458148869E-03,2.001065254E+00,3.638235619E-03,2.961719513E+00,-2.015280304E-03,-1.640546560E+00,3.238981823E-03,-1.100739813E-03,-3.140589595E-02,6.460310817E-01,6.802602410E-01,1.946957469E+00,1.941995025E+00,3.643568359E+03,2.776690386E-02,1.079679374E-02,1.551555544E-01,2.240881324E-02,5.690966919E-02,3.100317717E-02,1.129135489E-02,2.756875801E-06,8.164120466E-02,2.059869385E+01,9.876584045E-06,5.543031421E-06,1.575878449E-02,1.575878449E-02,2.009986474E-06,2.379024923E-01,2.272777408E-01,8.822426200E-02,2.517181873E+00,1.569631696E+00,4.957836121E-02,1.414551377E+00,8.820670843E-01,6.031713262E-02,1.720945954E+00,1.073126554E+00,1.644027084E-01,9.688672423E-02,9.431614727E-02,9.351779521E-02,3.480456024E-02,-9.101467003E-05,1.760505256E-04,-8.503585559E-05,1.290693646E-03,2.478206065E-03,0.000000000E+00,6.455513835E-01,9.322544065E-05,1.124616042E-01,4.481168270E+00,0.000000000E+00,1.944680512E-01,2.034393768E+02,-5.503087997E+01,2.221960449E+01,2.457071841E-01 +3.579799831E-01,2.242462921E+02,7.280001068E+01,9.685795903E-01,3.887238801E-01,1.008254051E+00,2.876712799E+01,2.540084362E+00,2.540448189E+00,2.540416002E+00,2.540416002E+00,1.593778849E+00,7.669848022E+02,1.200000048E+00,1.920500875E+00,1.920500875E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.530074954E+00,2.540084362E+00,1.007413745E+00,2.874315453E+01,3.636307665E-04,8.402467356E-04,2.397360653E-02,7.705059368E-03,6.272332668E+00,2.449971391E-03,1.994408488E+00,3.618504386E-03,2.945657253E+00,2.003737958E-03,1.631150484E+00,3.171023913E-03,1.086983830E-03,3.101341799E-02,3.022992285E-03,2.460878372E+00,2.460878372E+00,9.534076671E-04,7.761251330E-01,7.761251330E-01,1.406826894E-03,1.145232797E+00,1.145232797E+00,7.880184567E-04,6.414893866E-01,6.414893866E-01,1.259387005E-03,4.323277099E-04,1.233501360E-02,7.705765776E-03,6.272907257E+00,2.450089669E-03,1.994504690E+00,3.618504386E-03,2.945657253E+00,-2.004026901E-03,-1.631385684E+00,3.171156393E-03,-1.087108860E-03,-3.101698682E-02,6.420199871E-01,6.760254502E-01,1.949697733E+00,1.944751024E+00,3.647450684E+03,2.754030563E-02,1.070559863E-02,1.544748396E-01,2.216574363E-02,5.631074682E-02,3.088707849E-02,1.116790157E-02,2.756875801E-06,8.114165813E-02,2.034420586E+01,9.876584045E-06,5.543031421E-06,1.558703650E-02,1.558703650E-02,2.009986474E-06,2.372249216E-01,2.263689190E-01,8.777846396E-02,2.504462481E+00,1.561475396E+00,4.949705675E-02,1.412231565E+00,8.804937005E-01,6.015338004E-02,1.716273785E+00,1.070058942E+00,1.630879641E-01,9.619633108E-02,9.352303296E-02,9.272160381E-02,3.453605250E-02,-8.937239181E-05,1.732971141E-04,-8.392472955E-05,1.278219628E-03,2.454818925E-03,0.000000000E+00,6.415808201E-01,9.201423381E-05,1.130511537E-01,4.487869263E+00,0.000000000E+00,1.910419464E-01,2.033633575E+02,-5.345520020E+01,2.187372398E+01,2.405943573E-01 +3.620225787E-01,2.267786560E+02,7.359497833E+01,9.683055282E-01,3.886139095E-01,1.009848356E+00,2.881261635E+01,2.540924788E+00,2.541268826E+00,2.541236639E+00,2.541236639E+00,1.594038486E+00,7.673146362E+02,1.200000048E+00,1.920937300E+00,1.920937300E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.534270167E+00,2.540924788E+00,1.009032369E+00,2.878933525E+01,3.440119326E-04,8.159900317E-04,2.328152396E-02,7.627461106E-03,6.209163189E+00,2.441618126E-03,1.987608433E+00,3.598405048E-03,2.929295301E+00,1.992348582E-03,1.621878862E+00,3.104603849E-03,1.073409920E-03,3.062613122E-02,2.990805777E-03,2.434676647E+00,2.434676647E+00,9.498400032E-04,7.732208371E-01,7.732208371E-01,1.398583641E-03,1.138522267E+00,1.138522267E+00,7.831018884E-04,6.374870539E-01,6.374870539E-01,1.232118579E-03,4.266698088E-04,1.217358373E-02,7.628127001E-03,6.209705353E+00,2.441732679E-03,1.987701654E+00,3.598405048E-03,2.929295301E+00,-1.992624719E-03,-1.622103691E+00,3.104722360E-03,-1.073526335E-03,-3.062945232E-02,6.379774213E-01,6.717586517E-01,1.952438951E+00,1.947509050E+00,3.651354736E+03,2.731609903E-02,1.061543915E-02,1.537974477E-01,2.192528360E-02,5.571786314E-02,3.076964989E-02,1.104579587E-02,2.756875801E-06,8.064592630E-02,2.009243965E+01,9.876584045E-06,5.543031421E-06,1.541715115E-02,1.541715115E-02,2.009986474E-06,2.365483791E-01,2.254590392E-01,8.733533323E-02,2.491819143E+00,1.553372860E+00,4.941260070E-02,1.409821868E+00,8.788669705E-01,5.998610705E-02,1.711501241E+00,1.066932321E+00,1.617843807E-01,9.550736845E-02,9.273822606E-02,9.193507582E-02,3.427161649E-02,-8.776712639E-05,1.705556351E-04,-8.278850146E-05,1.265816158E-03,2.431550762E-03,0.000000000E+00,6.375743747E-01,9.080945165E-05,1.136309505E-01,4.494570255E+00,0.000000000E+00,1.876691878E-01,2.032883759E+02,-5.191937637E+01,2.153127861E+01,2.361043841E-01 +3.660968840E-01,2.293309021E+02,7.439617920E+01,9.680364728E-01,3.885059357E-01,1.011442423E+00,2.885809898E+01,2.541755915E+00,2.542080879E+00,2.542048931E+00,2.542048931E+00,1.594295263E+00,7.676404419E+02,1.200000048E+00,1.921369195E+00,1.921369195E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.538473845E+00,2.541755915E+00,1.010650158E+00,2.883549309E+01,3.250246518E-04,7.923567318E-04,2.260722779E-02,7.550708484E-03,6.146682739E+00,2.432973357E-03,1.980571151E+00,3.577942261E-03,2.912637234E+00,1.980811125E-03,1.612486720E+00,3.039549338E-03,1.059884555E-03,3.024023026E-02,2.959021833E-03,2.408802748E+00,2.408802748E+00,9.461670998E-04,7.702308893E-01,7.702308893E-01,1.390211401E-03,1.131706834E+00,1.131706834E+00,7.781411987E-04,6.334487796E-01,6.334487796E-01,1.205442473E-03,4.210419429E-04,1.201301161E-02,7.551336195E-03,6.147193909E+00,2.433084184E-03,1.980661392E+00,3.577942261E-03,2.912637472E+00,-1.981074922E-03,-1.612701535E+00,3.039655043E-03,-1.059992705E-03,-3.024331853E-02,6.339030862E-01,6.674597263E-01,1.955181360E+00,1.950269103E+00,3.655280762E+03,2.709420212E-02,1.052627992E-02,1.531232297E-01,2.168741450E-02,5.513099208E-02,3.065087087E-02,1.092502940E-02,2.756875801E-06,8.015390486E-02,1.984339523E+01,9.876584045E-06,5.543031421E-06,1.524911541E-02,1.524911541E-02,2.009986474E-06,2.358725816E-01,2.245480269E-01,8.689481020E-02,2.479250431E+00,1.545322776E+00,4.932504520E-02,1.407323837E+00,8.771878481E-01,5.981532857E-02,1.706628680E+00,1.063746929E+00,1.604912281E-01,9.481973201E-02,9.196149558E-02,9.115727991E-02,3.401093930E-02,-8.619746222E-05,1.678291010E-04,-8.163163875E-05,1.253486029E-03,2.408406464E-03,0.000000000E+00,6.335322261E-01,8.961110143E-05,1.142015383E-01,4.501272678E+00,0.000000000E+00,1.843475997E-01,2.032144470E+02,-5.042265701E+01,2.119225883E+01,2.320048362E-01 +3.702032268E-01,2.319031982E+02,7.520365906E+01,9.677723646E-01,3.883999288E-01,1.013036489E+00,2.890357971E+01,2.542578220E+00,2.542884827E+00,2.542852640E+00,2.542852640E+00,1.594549417E+00,7.679624023E+02,1.200000048E+00,1.921796560E+00,1.921796560E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.542686462E+00,2.542578220E+00,1.012267113E+00,2.888162994E+01,3.066548088E-04,7.693335065E-04,2.195033804E-02,7.474784739E-03,6.084876537E+00,2.424042905E-03,1.973301291E+00,3.557123011E-03,2.895689487E+00,1.969126519E-03,1.602974892E+00,2.975833369E-03,1.046408317E-03,2.985573187E-02,2.927631838E-03,2.383249760E+00,2.383249760E+00,9.423912852E-04,7.671571970E-01,7.671571970E-01,1.381712966E-03,1.124788642E+00,1.124788642E+00,7.731365622E-04,6.293747425E-01,6.293747425E-01,1.179345651E-03,4.154440248E-04,1.185329445E-02,7.475376595E-03,6.085358620E+00,2.424150473E-03,1.973388791E+00,3.557123011E-03,2.895689487E+00,-1.969378674E-03,-1.603180170E+00,2.975927433E-03,-1.046508783E-03,-2.985860035E-02,6.297967434E-01,6.631283760E-01,1.957925081E+00,1.953031421E+00,3.659228760E+03,2.687454224E-02,1.043809205E-02,1.524520665E-01,2.145211026E-02,5.455007404E-02,3.053072281E-02,1.080558728E-02,2.756875801E-06,7.966552675E-02,1.959705544E+01,9.876584045E-06,5.543031421E-06,1.508290973E-02,1.508290973E-02,2.009986474E-06,2.351972908E-01,2.236358374E-01,8.645683527E-02,2.466754198E+00,1.537324190E+00,4.923443869E-02,1.404738665E+00,8.754569888E-01,5.964107066E-02,1.701656818E+00,1.060503244E+00,1.592076123E-01,9.413304925E-02,9.119262546E-02,9.038727731E-02,3.375364840E-02,-8.466283180E-05,1.651222992E-04,-8.045946743E-05,1.241234248E-03,2.385396743E-03,0.000000000E+00,6.294544339E-01,8.841916861E-05,1.147637740E-01,4.507976055E+00,0.000000000E+00,1.810755134E-01,2.031415405E+02,-4.896422577E+01,2.085664177E+01,2.279765606E-01 +3.743418157E-01,2.344956970E+02,7.601746368E+01,9.675131440E-01,3.882958889E-01,1.014630437E+00,2.894905853E+01,2.543391228E+00,2.543680191E+00,2.543648005E+00,2.543648005E+00,1.594800830E+00,7.682804565E+02,1.200000048E+00,1.922219396E+00,1.922219396E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.546908140E+00,2.543391228E+00,1.013883591E+00,2.892774773E+01,2.888879098E-04,7.469063858E-04,2.131045610E-02,7.399671711E-03,6.023730755E+00,2.414833289E-03,1.965804219E+00,3.535956843E-03,2.878458977E+00,1.957296627E-03,1.593344808E+00,2.913427074E-03,1.032981672E-03,2.947264910E-02,2.896626247E-03,2.358009577E+00,2.358009577E+00,9.385150042E-04,7.640016675E-01,7.640016675E-01,1.373091829E-03,1.117770553E+00,1.117770553E+00,7.680883282E-04,6.252652407E-01,6.252652407E-01,1.153814839E-03,4.098759964E-04,1.169442851E-02,7.400229573E-03,6.024184704E+00,2.414937364E-03,1.965888858E+00,3.535956843E-03,2.878458977E+00,-1.957537606E-03,-1.593540788E+00,2.913510660E-03,-1.033074921E-03,-2.947530709E-02,6.256581545E-01,6.587645411E-01,1.960670352E+00,1.955796123E+00,3.663198730E+03,2.665705793E-02,1.035084669E-02,1.517837942E-01,2.121933736E-02,5.397504196E-02,3.040920384E-02,1.068745088E-02,2.756875801E-06,7.918068022E-02,1.935339928E+01,9.876584045E-06,5.543031421E-06,1.491850987E-02,1.491850987E-02,2.009986474E-06,2.345223278E-01,2.227223814E-01,8.602134138E-02,2.454329014E+00,1.529375672E+00,4.914081842E-02,1.402067542E+00,8.736753464E-01,5.946338177E-02,1.696587086E+00,1.057202101E+00,1.579326838E-01,9.344686568E-02,9.043144435E-02,8.962422609E-02,3.349930048E-02,-8.316322783E-05,1.624410506E-04,-7.927783008E-05,1.229069079E-03,2.362537431E-03,0.000000000E+00,6.253413558E-01,8.723361680E-05,1.153187454E-01,4.514680862E+00,0.000000000E+00,1.778521389E-01,2.030696564E+02,-4.754322433E+01,2.052439880E+01,2.236734331E-01 +3.785129189E-01,2.371085663E+02,7.683766174E+01,9.672586918E-01,3.881937861E-01,1.016224384E+00,2.899453735E+01,2.544195652E+00,2.544467449E+00,2.544435263E+00,2.544435263E+00,1.595049500E+00,7.685947266E+02,1.200000048E+00,1.922637820E+00,1.922637820E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.551138997E+00,2.544195652E+00,1.015499353E+00,2.897385025E+01,2.717090829E-04,7.250611670E-04,2.068717405E-02,7.325348910E-03,5.963228226E+00,2.405350795E-03,1.958084822E+00,3.514454234E-03,2.860954762E+00,1.945322845E-03,1.583597302E+00,2.852300415E-03,1.019604970E-03,2.909098752E-02,2.865995280E-03,2.333074331E+00,2.333074331E+00,9.345405851E-04,7.607662678E-01,7.607662678E-01,1.364352065E-03,1.110655904E+00,1.110655904E+00,7.629967877E-04,6.211203933E-01,6.211203933E-01,1.128835953E-03,4.043375957E-04,1.153640915E-02,7.325874642E-03,5.963655949E+00,2.405451378E-03,1.958166838E+00,3.514454234E-03,2.860954762E+00,-1.945552882E-03,-1.583784580E+00,2.852374222E-03,-1.019691117E-03,-2.909344807E-02,6.214870811E-01,6.543678641E-01,1.963417053E+00,1.958563209E+00,3.667190674E+03,2.644169144E-02,1.026452053E-02,1.511183232E-01,2.098905295E-02,5.340579897E-02,3.028631769E-02,1.057059877E-02,2.756875801E-06,7.869928330E-02,1.911240005E+01,9.876584045E-06,5.543031421E-06,1.475588512E-02,1.475588512E-02,2.009986474E-06,2.338475138E-01,2.218076438E-01,8.558825403E-02,2.441972017E+00,1.521475673E+00,4.904424027E-02,1.399312019E+00,8.718435764E-01,5.928232521E-02,1.691421270E+00,1.053844452E+00,1.566658169E-01,9.276095778E-02,8.967778832E-02,8.886741847E-02,3.324744105E-02,-8.169845387E-05,1.597907685E-04,-7.809231465E-05,1.216998324E-03,2.339844126E-03,0.000000000E+00,6.211931109E-01,8.605441690E-05,1.158676893E-01,4.521387100E+00,0.000000000E+00,1.746777445E-01,2.029987793E+02,-4.615877151E+01,2.019548035E+01,2.187728435E-01 +3.827167749E-01,2.397419434E+02,7.766429138E+01,9.670090675E-01,3.880935907E-01,1.017818451E+00,2.904001617E+01,2.544991255E+00,2.545246124E+00,2.545214176E+00,2.545214176E+00,1.595295548E+00,7.689050903E+02,1.200000048E+00,1.923051715E+00,1.923051715E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.555379152E+00,2.544991255E+00,1.017114639E+00,2.901993561E+01,2.551034268E-04,7.037835894E-04,2.008009143E-02,7.251795381E-03,5.903351307E+00,2.395601710E-03,1.950148582E+00,3.492625663E-03,2.843184948E+00,1.933205989E-03,1.573733687E+00,2.792422194E-03,1.006277744E-03,2.871074341E-02,2.835728694E-03,2.308435440E+00,2.308435440E+00,9.304705309E-04,7.574530244E-01,7.574530244E-01,1.355497399E-03,1.103447795E+00,1.103447795E+00,7.578621153E-04,6.169404984E-01,6.169404984E-01,1.104394789E-03,3.988285316E-04,1.137922704E-02,7.252290845E-03,5.903754711E+00,2.395699034E-03,1.950227857E+00,3.492625663E-03,2.843184948E+00,-1.933425665E-03,-1.573912382E+00,2.792487387E-03,-1.006357372E-03,-2.871301398E-02,6.172832251E-01,6.499381661E-01,1.966165543E+00,1.961332679E+00,3.671204346E+03,2.622839808E-02,1.017909311E-02,1.504554898E-01,2.076121233E-02,5.284223706E-02,3.016207553E-02,1.045500580E-02,2.756875801E-06,7.822123915E-02,1.887402344E+01,9.876584045E-06,5.543031421E-06,1.459500194E-02,1.459500194E-02,2.009986474E-06,2.331726998E-01,2.208915353E-01,8.515746891E-02,2.429681301E+00,1.513622403E+00,4.894474894E-02,1.396473289E+00,8.699626327E-01,5.909795314E-02,1.686160803E+00,1.050431252E+00,1.554067582E-01,9.207551926E-02,8.893151581E-02,8.811636269E-02,3.299766779E-02,-8.026741125E-05,1.571748580E-04,-7.690743951E-05,1.205023145E-03,2.317318693E-03,0.000000000E+00,6.170098782E-01,8.488148160E-05,1.164117157E-01,4.528095245E+00,0.000000000E+00,1.715533882E-01,2.029288788E+02,-4.480998611E+01,1.986983109E+01,2.129973173E-01 +3.869536519E-01,2.423960114E+02,7.849741364E+01,9.667640924E-01,3.879952729E-01,1.019412398E+00,2.908549500E+01,2.545777798E+00,2.546016932E+00,2.545984745E+00,2.545984745E+00,1.595538974E+00,7.692117310E+02,1.200000048E+00,1.923461199E+00,1.923461199E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.559628606E+00,2.545777798E+00,1.018729329E+00,2.906600761E+01,2.390560112E-04,6.830599159E-04,1.948881149E-02,7.178986911E-03,5.844081402E+00,2.385592554E-03,1.942000508E+00,3.470480209E-03,2.825157404E+00,1.920946990E-03,1.563754201E+00,2.733760746E-03,9.930001106E-04,2.833190933E-02,2.805815078E-03,2.284084320E+00,2.284084320E+00,9.263071697E-04,7.540638447E-01,7.540638447E-01,1.346531441E-03,1.096148968E+00,1.096148968E+00,7.526843110E-04,6.127254963E-01,6.127254963E-01,1.080476912E-03,3.933484841E-04,1.122287195E-02,7.179453503E-03,5.844461441E+00,2.385686617E-03,1.942077160E+00,3.470480209E-03,2.825157404E+00,-1.921156771E-03,-1.563924909E+00,2.733818023E-03,-9.930734523E-04,-2.833400294E-02,6.130463481E-01,6.454752088E-01,1.968915701E+00,1.964104652E+00,3.675239746E+03,2.601713501E-02,1.009454485E-02,1.497951895E-01,2.053576149E-02,5.228423700E-02,3.003649600E-02,1.034064405E-02,2.756875801E-06,7.774644345E-02,1.863823509E+01,9.876584045E-06,5.543031421E-06,1.443582214E-02,1.443582214E-02,2.009986474E-06,2.324977219E-01,2.199739665E-01,8.472890407E-02,2.417453527E+00,1.505814075E+00,4.884238914E-02,1.393552899E+00,8.680333495E-01,5.891031399E-02,1.680807114E+00,1.046963453E+00,1.541557312E-01,9.139106423E-02,8.819248527E-02,8.737107366E-02,3.274969384E-02,-7.886781532E-05,1.545940468E-04,-7.572623144E-05,1.193137956E-03,2.294951584E-03,0.000000000E+00,6.127917171E-01,8.371475269E-05,1.169516072E-01,4.534805298E+00,0.000000000E+00,1.684804112E-01,2.028599854E+02,-4.349602127E+01,1.954739380E+01,2.061119378E-01 +3.912238181E-01,2.450709381E+02,7.933707428E+01,9.665237665E-01,3.878988028E-01,1.021006465E+00,2.913097572E+01,2.546555996E+00,2.546779633E+00,2.546747446E+00,2.546747446E+00,1.595779777E+00,7.695145874E+02,1.200000048E+00,1.923866391E+00,1.923866391E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.563887358E+00,2.546555996E+00,1.020343542E+00,2.911206245E+01,2.235522843E-04,6.628772244E-04,1.891296543E-02,7.106898818E-03,5.785397530E+00,2.375329845E-03,1.933646083E+00,3.448026720E-03,2.806879044E+00,1.908545848E-03,1.553658962E+00,2.676285105E-03,9.797716048E-04,2.795447968E-02,2.776242560E-03,2.260010719E+00,2.260010719E+00,9.220530628E-04,7.506007552E-01,7.506007552E-01,1.337457099E-03,1.088762045E+00,1.088762045E+00,7.474633167E-04,6.084753275E-01,6.084753275E-01,1.057068468E-03,3.878971329E-04,1.106733643E-02,7.107337937E-03,5.785755157E+00,2.375420881E-03,1.933720350E+00,3.448026720E-03,2.806879044E+00,-1.908746082E-03,-1.553821921E+00,2.676335163E-03,-9.798391256E-04,-2.795640565E-02,6.087762117E-01,6.409786940E-01,1.971667409E+00,1.966879129E+00,3.679296631E+03,2.580787055E-02,1.001085993E-02,1.491372585E-01,2.031265013E-02,5.173168331E-02,2.990959771E-02,1.022748835E-02,2.756875801E-06,7.727478445E-02,1.840499306E+01,9.876584045E-06,5.543031421E-06,1.427830942E-02,1.427830942E-02,2.009986474E-06,2.318223715E-01,2.190548033E-01,8.430242538E-02,2.405285358E+00,1.498048306E+00,4.873721674E-02,1.390552163E+00,8.660565019E-01,5.871945247E-02,1.675361514E+00,1.043441653E+00,1.529132426E-01,9.070810676E-02,8.746051788E-02,8.663209528E-02,3.250337765E-02,-7.749642100E-05,1.520466612E-04,-7.455024752E-05,1.181337400E-03,2.272732556E-03,0.000000000E+00,6.085385084E-01,8.255416469E-05,1.174876243E-01,4.541517258E+00,0.000000000E+00,1.654599160E-01,2.027920380E+02,-4.221607590E+01,1.922810555E+01,1.979182065E-01 +3.955275118E-01,2.477668610E+02,8.018334198E+01,9.662879109E-01,3.878041804E-01,1.022600532E+00,2.917645645E+01,2.547325611E+00,2.547534227E+00,2.547502041E+00,2.547502041E+00,1.596017957E+00,7.698137207E+02,1.200000048E+00,1.924267173E+00,1.924267173E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.568155408E+00,2.547325611E+00,1.021957278E+00,2.915810585E+01,2.085779852E-04,6.432234659E-04,1.835221238E-02,7.035503164E-03,5.727277756E+00,2.364820102E-03,1.925090671E+00,3.425272182E-03,2.788355827E+00,1.896002213E-03,1.543447733E+00,2.619965235E-03,9.665924008E-04,2.757845446E-02,2.746998798E-03,2.236204624E+00,2.236204624E+00,9.177105967E-04,7.470657825E-01,7.470657825E-01,1.328277285E-03,1.081289172E+00,1.081289172E+00,7.421987248E-04,6.041896939E-01,6.041896939E-01,1.034156070E-03,3.824743035E-04,1.091261394E-02,7.035916671E-03,5.727614403E+00,2.364908112E-03,1.925162435E+00,3.425272182E-03,2.788355827E+00,-1.896193135E-03,-1.543603182E+00,2.620008774E-03,-9.666543338E-04,-2.758022211E-02,6.044724584E-01,6.364483833E-01,1.974420786E+00,1.969655871E+00,3.683374512E+03,2.560056373E-02,9.928022511E-03,1.484815180E-01,2.009182610E-02,5.118445680E-02,2.978139929E-02,1.011551078E-02,2.756875801E-06,7.680615038E-02,1.817426300E+01,9.876584045E-06,5.543031421E-06,1.412242744E-02,1.412242744E-02,2.009986474E-06,2.311464101E-01,2.181339115E-01,8.387790620E-02,2.393173218E+00,1.490322828E+00,4.862927645E-02,1.387472391E+00,8.640329838E-01,5.852539465E-02,1.669824839E+00,1.039866328E+00,1.516797543E-01,9.002689272E-02,8.673543483E-02,8.590018749E-02,3.225871548E-02,-7.614959759E-05,1.495295874E-04,-7.337998977E-05,1.169619500E-03,2.250657650E-03,0.000000000E+00,6.042499542E-01,8.139966667E-05,1.180195361E-01,4.548231125E+00,0.000000000E+00,1.624923199E-01,2.027250671E+02,-4.096940613E+01,1.891191673E+01,1.882620156E-01 +3.998650312E-01,2.504839630E+02,8.103625488E+01,9.660565853E-01,3.877113163E-01,1.024194598E+00,2.922193909E+01,2.548086643E+00,2.548280716E+00,2.548248529E+00,2.548248529E+00,1.596253633E+00,7.701092529E+02,1.200000048E+00,1.924663663E+00,1.924663663E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.572432637E+00,2.548086643E+00,1.023570538E+00,2.920413208E+01,1.941192313E-04,6.240875809E-04,1.780623570E-02,6.964773405E-03,5.669700146E+00,2.354069613E-03,1.916339278E+00,3.402223811E-03,2.769593239E+00,1.883315039E-03,1.533119678E+00,2.564772731E-03,9.534626734E-04,2.720384300E-02,2.718071453E-03,2.212656260E+00,2.212656260E+00,9.132822743E-04,7.434608340E-01,7.434608340E-01,1.318994211E-03,1.073732257E+00,1.073732257E+00,7.368901279E-04,5.998681784E-01,5.998681784E-01,1.011726679E-03,3.770798503E-04,1.075870171E-02,6.965163164E-03,5.670017242E+00,2.354154829E-03,1.916408658E+00,3.402223811E-03,2.769593239E+00,-1.883497229E-03,-1.533267975E+00,2.564810449E-03,-9.535193676E-04,-2.720545977E-02,6.001349688E-01,6.318839788E-01,1.977175832E+00,1.972434998E+00,3.687473145E+03,2.539517730E-02,9.846013971E-03,1.478277743E-01,1.987324283E-02,5.064244941E-02,2.965191938E-02,1.000468712E-02,2.756875801E-06,7.634042948E-02,1.794600677E+01,9.876584045E-06,5.543031421E-06,1.396814175E-02,1.396814175E-02,2.009986474E-06,2.304695547E-01,2.172111422E-01,8.345521986E-02,2.381113291E+00,1.482635140E+00,4.851861671E-02,1.384315133E+00,8.619636297E-01,5.832817405E-02,1.664197683E+00,1.036238074E+00,1.504554600E-01,8.934733272E-02,8.601703495E-02,8.517594635E-02,3.201578557E-02,-7.482379442E-05,1.470390416E-04,-7.221523992E-05,1.157982042E-03,2.228723140E-03,0.000000000E+00,5.999256968E-01,8.025123680E-05,1.185467988E-01,4.554946899E+00,0.000000000E+00,1.595772207E-01,2.026590271E+02,-3.975533295E+01,1.859878540E+01,1.770566106E-01 +4.042365849E-01,2.532224121E+02,8.189588165E+01,9.658296108E-01,3.876202404E-01,1.025788665E+00,2.926741982E+01,2.548839331E+00,2.549019575E+00,2.548987389E+00,2.548987389E+00,1.596486688E+00,7.704011230E+02,1.200000048E+00,1.925055981E+00,1.925055981E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.576719046E+00,2.548839331E+00,1.025183201E+00,2.925014496E+01,1.801626640E-04,6.054592086E-04,1.727473736E-02,6.894684862E-03,5.612644196E+00,2.343084896E-03,1.907397032E+00,3.378887428E-03,2.750596046E+00,1.870483509E-03,1.522674084E+00,2.510680119E-03,9.403830045E-04,2.683065832E-02,2.689448651E-03,2.189355850E+00,2.189355850E+00,9.087703074E-04,7.397878766E-01,7.397878766E-01,1.309610088E-03,1.066092968E+00,1.066092968E+00,7.315370021E-04,5.955104232E-01,5.955104232E-01,9.897683049E-04,3.717138316E-04,1.060560066E-02,6.895051338E-03,5.612942696E+00,2.343167318E-03,1.907464147E+00,3.378887428E-03,2.750596046E+00,-1.870657317E-03,-1.522815585E+00,2.510712482E-03,-9.404347511E-04,-2.683213353E-02,5.957633853E-01,6.272851229E-01,1.979932547E+00,1.975216508E+00,3.691592285E+03,2.519165911E-02,9.764812887E-03,1.471758038E-01,1.965685561E-02,5.010555685E-02,2.952116542E-02,9.894995019E-03,2.756875801E-06,7.587750256E-02,1.772018814E+01,9.876584045E-06,5.543031421E-06,1.381542068E-02,1.381542068E-02,2.009986474E-06,2.297915667E-01,2.162863165E-01,8.303423971E-02,2.369102001E+00,1.474982858E+00,4.840528220E-02,1.381081462E+00,8.598491549E-01,5.812780559E-02,1.658480883E+00,1.032557011E+00,1.492402107E-01,8.866918832E-02,8.530508727E-02,8.445968479E-02,3.177468479E-02,-7.351582462E-05,1.445712551E-04,-7.105543045E-05,1.146418159E-03,2.206916455E-03,0.000000000E+00,5.955652595E-01,7.910888235E-05,1.190687642E-01,4.561664581E+00,0.000000000E+00,1.567133814E-01,2.025939331E+02,-3.857321167E+01,1.828868103E+01,1.643083841E-01 +4.086425006E-01,2.559823761E+02,8.276226044E+01,9.656069279E-01,3.875308633E-01,1.027382851E+00,2.931290245E+01,2.549583673E+00,2.549750566E+00,2.549718142E+00,2.549718142E+00,1.596717358E+00,7.706894531E+02,1.200000048E+00,1.925444126E+00,1.925444126E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.581014752E+00,2.549583673E+00,1.026795506E+00,2.929614639E+01,1.666954777E-04,5.873287446E-04,1.675744541E-02,6.825215183E-03,5.556092262E+00,2.331871772E-03,1.898268938E+00,3.355267923E-03,2.731368542E+00,1.857506693E-03,1.512110353E+00,2.457662020E-03,9.273542673E-04,2.645892650E-02,2.661120147E-03,2.166295052E+00,2.166295052E+00,9.041771409E-04,7.360488176E-01,7.360488176E-01,1.300126431E-03,1.058372855E+00,1.058372855E+00,7.261388237E-04,5.911160707E-01,5.911160707E-01,9.682693635E-04,3.663763928E-04,1.045331452E-02,6.825560238E-03,5.556373119E+00,2.331951400E-03,1.898333788E+00,3.355267923E-03,2.731368542E+00,-1.857672469E-03,-1.512245297E+00,2.457689960E-03,-9.274012991E-04,-2.646026760E-02,5.913574696E-01,6.226515174E-01,1.982690930E+00,1.978000402E+00,3.695731689E+03,2.498995326E-02,9.684393182E-03,1.465254724E-01,1.944262348E-02,4.957369342E-02,2.938914113E-02,9.786413051E-03,2.756875801E-06,7.541729510E-02,1.749677467E+01,9.876584045E-06,5.543031421E-06,1.366423536E-02,1.366423536E-02,2.009986474E-06,2.291122377E-01,2.153593451E-01,8.261486143E-02,2.357136488E+00,1.467364073E+00,4.828931764E-02,1.377772808E+00,8.576903343E-01,5.792430043E-02,1.652674556E+00,1.028823376E+00,1.480337977E-01,8.799220622E-02,8.459938318E-02,8.375146240E-02,3.153546527E-02,-7.222325803E-05,1.421233901E-04,-6.990013208E-05,1.134917722E-03,2.185218036E-03,0.000000000E+00,5.911683440E-01,7.797262515E-05,1.195849180E-01,4.568384647E+00,0.000000000E+00,1.538988799E-01,2.025297394E+02,-3.742245483E+01,1.798158646E+01,1.501334906E-01 +4.130830169E-01,2.587640076E+02,8.363545227E+01,9.653885365E-01,3.874432147E-01,1.028976917E+00,2.935838699E+01,2.550319910E+00,2.550473690E+00,2.550441504E+00,2.550441504E+00,1.596945405E+00,7.709741821E+02,1.200000048E+00,1.925828218E+00,1.925828218E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.585319638E+00,2.550319910E+00,1.028407216E+00,2.934213257E+01,1.537053904E-04,5.696872249E-04,1.625410281E-02,6.756347604E-03,5.500030041E+00,2.320435597E-03,1.888959408E+00,3.331370419E-03,2.711914778E+00,1.844384009E-03,1.501427770E+00,2.405695384E-03,9.143774514E-04,2.608867735E-02,2.633077558E-03,2.143466711E+00,2.143466711E+00,8.995048702E-04,7.322453260E-01,7.322453260E-01,1.290544984E-03,1.050572991E+00,1.050572991E+00,7.206952432E-04,5.866846442E-01,5.866846442E-01,9.472193778E-04,3.610677377E-04,1.030184980E-02,6.756672170E-03,5.500294209E+00,2.320512664E-03,1.889022112E+00,3.331370419E-03,2.711914778E+00,-1.844542101E-03,-1.501556396E+00,2.405719133E-03,-9.144201176E-04,-2.608989365E-02,5.869169831E-01,6.179828048E-01,1.985450864E+00,1.980786562E+00,3.699891113E+03,2.478998527E-02,9.604725987E-03,1.458766013E-01,1.923051476E-02,4.904678091E-02,2.925583348E-02,9.678925388E-03,2.756875801E-06,7.495972514E-02,1.727573776E+01,9.876584045E-06,5.543031421E-06,1.351456344E-02,1.351456344E-02,2.009986474E-06,2.284314185E-01,2.144300938E-01,8.219700307E-02,2.345214367E+00,1.459777117E+00,4.817076027E-02,1.374390244E+00,8.554878235E-01,5.771766976E-02,1.646778941E+00,1.025037408E+00,1.468359083E-01,8.731629699E-02,8.389970660E-02,8.305104822E-02,3.129812330E-02,-7.094495231E-05,1.396945736E-04,-6.874961400E-05,1.123475609E-03,2.163618337E-03,0.000000000E+00,5.867344737E-01,7.684253069E-05,1.200949922E-01,4.575107098E+00,0.000000000E+00,1.511312872E-01,2.024664612E+02,-3.630250931E+01,1.767749786E+01,1.347623020E-01 +4.175584018E-01,2.615674744E+02,8.451551819E+01,9.651743174E-01,3.873572648E-01,1.030571103E+00,2.940387154E+01,2.551048279E+00,2.551189423E+00,2.551156998E+00,2.551156998E+00,1.597171068E+00,7.712554932E+02,1.200000048E+00,1.926208019E+00,1.926208019E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.589633942E+00,2.551048279E+00,1.030018568E+00,2.938810730E+01,1.411803387E-04,5.525258603E-04,1.576446183E-02,6.688069552E-03,5.444447994E+00,2.308782423E-03,1.879472971E+00,3.307200037E-03,2.692238569E+00,1.831114991E-03,1.490625978E+00,2.354758326E-03,9.014537791E-04,2.571994253E-02,2.605314367E-03,2.120866060E+00,2.120866060E+00,8.947555907E-04,7.283791900E-01,7.283791900E-01,1.280867262E-03,1.042694807E+00,1.042694807E+00,7.152058533E-04,5.822160244E-01,5.822160244E-01,9.266082197E-04,3.557881282E-04,1.015121490E-02,6.688374560E-03,5.444696426E+00,2.308856696E-03,1.879533529E+00,3.307200037E-03,2.692238569E+00,-1.831265632E-03,-1.490748644E+00,2.354778117E-03,-9.014922543E-04,-2.572104149E-02,5.824415684E-01,6.132785678E-01,1.988212585E+00,1.983575106E+00,3.704070557E+03,2.459166758E-02,9.525774978E-03,1.452291012E-01,1.902049966E-02,4.852475226E-02,2.912122756E-02,9.572515264E-03,2.756875801E-06,7.450475544E-02,1.705705261E+01,9.876584045E-06,5.543031421E-06,1.336638257E-02,1.336638257E-02,2.009986474E-06,2.277490497E-01,2.134985179E-01,8.178061992E-02,2.333334208E+00,1.452221155E+00,4.804965109E-02,1.370934725E+00,8.532422781E-01,5.750792101E-02,1.640794516E+00,1.021198988E+00,1.456461400E-01,8.664151281E-02,8.320586383E-02,8.235789090E-02,3.106258996E-02,-6.968141679E-05,1.372865809E-04,-6.760515680E-05,1.112100203E-03,2.142133657E-03,0.000000000E+00,5.822635293E-01,7.571862807E-05,1.205989197E-01,4.581831455E+00,0.000000000E+00,1.484081894E-01,2.024040680E+02,-3.521283722E+01,1.737641335E+01,1.185327321E-01 +4.220689535E-01,2.643930054E+02,8.540251160E+01,9.649642706E-01,3.872729540E-01,1.032165408E+00,2.944935799E+01,2.551768303E+00,2.551897287E+00,2.551865101E+00,2.551865101E+00,1.597394347E+00,7.715332642E+02,1.200000048E+00,1.926583886E+00,1.926583886E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.593957424E+00,2.551768303E+00,1.031629562E+00,2.943406868E+01,1.291083026E-04,5.358354538E-04,1.528825797E-02,6.620373111E-03,5.389339924E+00,2.296916908E-03,1.869813919E+00,3.282762598E-03,2.672345161E+00,1.817699173E-03,1.479704857E+00,2.304829424E-03,8.885841235E-04,2.535275184E-02,2.577825915E-03,2.098488808E+00,2.098488808E+00,8.899313980E-04,7.244520187E-01,7.244520187E-01,1.271095476E-03,1.034740090E+00,1.034740090E+00,7.096703048E-04,5.777097940E-01,5.777097940E-01,9.064262849E-04,3.505377390E-04,1.000141259E-02,6.620660424E-03,5.389573574E+00,2.296988852E-03,1.869872332E+00,3.282762598E-03,2.672345161E+00,-1.817842713E-03,-1.479821682E+00,2.304846188E-03,-8.886186988E-04,-2.535373904E-02,5.779310465E-01,6.085385680E-01,1.990975976E+00,1.986366034E+00,3.708269531E+03,2.439489961E-02,9.447498247E-03,1.445829421E-01,1.881254837E-02,4.800755531E-02,2.898529544E-02,9.467168711E-03,2.756875801E-06,7.405234128E-02,1.684068871E+01,9.876584045E-06,5.543031421E-06,1.321967319E-02,1.321967319E-02,2.009986474E-06,2.270651609E-01,2.125646174E-01,8.136567473E-02,2.321495056E+00,1.444695473E+00,4.792601988E-02,1.367407322E+00,8.509542942E-01,5.729507655E-02,1.634721756E+00,1.017308712E+00,1.444639564E-01,8.596795797E-02,8.251767606E-02,8.167112619E-02,3.082876652E-02,-6.843467418E-05,1.349035592E-04,-6.646887778E-05,1.100812689E-03,2.120805439E-03,0.000000000E+00,5.777550340E-01,7.460096822E-05,1.210967675E-01,4.588558197E+00,0.000000000E+00,1.457277089E-01,2.023425598E+02,-3.415287018E+01,1.707832718E+01,1.018683761E-01 +4.266149402E-01,2.672406921E+02,8.629649353E+01,9.647582769E-01,3.871902823E-01,1.033759594E+00,2.949484444E+01,2.552480459E+00,2.552597761E+00,2.552565575E+00,2.552565575E+00,1.597615123E+00,7.718075562E+02,1.200000048E+00,1.926955581E+00,1.926955581E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.598290205E+00,2.552480459E+00,1.033240080E+00,2.948001862E+01,1.174771751E-04,5.196058773E-04,1.482520066E-02,6.553254090E-03,5.334701061E+00,2.284844406E-03,1.859986067E+00,3.258065553E-03,2.652240515E+00,1.804136205E-03,1.468663812E+00,2.255887492E-03,8.757691248E-04,2.498711832E-02,2.550608246E-03,2.076332331E+00,2.076332331E+00,8.850341546E-04,7.204653621E-01,7.204653621E-01,1.261231955E-03,1.026710629E+00,1.026710629E+00,7.040883647E-04,5.731657743E-01,5.731657743E-01,8.866635617E-04,3.453165991E-04,9.852444753E-03,6.553523708E-03,5.334920883E+00,2.284913557E-03,1.860042572E+00,3.258065553E-03,2.652240515E+00,-1.804272993E-03,-1.468775272E+00,2.255901461E-03,-8.758000331E-04,-2.498800121E-02,5.733850598E-01,6.037623286E-01,1.993741035E+00,1.989159226E+00,3.712488037E+03,2.419956960E-02,9.369851090E-03,1.439381093E-01,1.860663295E-02,4.749511555E-02,2.884800546E-02,9.362868965E-03,2.756875801E-06,7.360248268E-02,1.662661171E+01,9.876584045E-06,5.543031421E-06,1.307441294E-02,1.307441294E-02,2.009986474E-06,2.263797671E-01,2.116283774E-01,8.095216751E-02,2.309697151E+00,1.437199950E+00,4.779990390E-02,1.363808990E+00,8.486244678E-01,5.707916245E-02,1.628561378E+00,1.013366818E+00,1.432887614E-01,8.529569954E-02,8.183495700E-02,8.098980784E-02,3.059655614E-02,-6.720745296E-05,1.325505000E-04,-6.534305430E-05,1.089639147E-03,2.099683974E-03,0.000000000E+00,5.732089281E-01,7.348955114E-05,1.215886250E-01,4.595287323E+00,0.000000000E+00,1.430889219E-01,2.022819366E+02,-3.312197495E+01,1.678323364E+01,8.523838222E-02 +4.311966300E-01,2.701107483E+02,8.719751740E+01,9.645563364E-01,3.871092200E-01,1.035353899E+00,2.954033279E+01,2.553184509E+00,2.553290844E+00,2.553258419E+00,2.553258419E+00,1.597833514E+00,7.720784912E+02,1.200000048E+00,1.927323341E+00,1.927323341E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.602632403E+00,2.553184509E+00,1.034850121E+00,2.952595711E+01,1.062750089E-04,5.038256641E-04,1.437496580E-02,6.486707367E-03,5.280528545E+00,2.272569109E-03,1.849993467E+00,3.233117051E-03,2.631931067E+00,1.790425857E-03,1.457502961E+00,2.207910176E-03,8.630090160E-04,2.462305129E-02,2.523658099E-03,2.054393291E+00,2.054393291E+00,8.800656069E-04,7.164207101E-01,7.164207101E-01,1.251279959E-03,1.018609166E+00,1.018609166E+00,6.984595675E-04,5.685836673E-01,5.685836673E-01,8.673099219E-04,3.401245922E-04,9.704308584E-03,6.486961152E-03,5.280735016E+00,2.272635931E-03,1.850047946E+00,3.233117051E-03,2.631931067E+00,-1.790556242E-03,-1.457609057E+00,2.207921352E-03,-8.630365483E-04,-2.462383732E-02,5.688033700E-01,5.989494920E-01,1.996507883E+00,1.991954684E+00,3.716726074E+03,2.400556952E-02,9.292788804E-03,1.432946026E-01,1.840271428E-02,4.698735103E-02,2.870932408E-02,9.259597398E-03,2.756875801E-06,7.315514982E-02,1.641477966E+01,9.876584045E-06,5.543031421E-06,1.293057483E-02,1.293057483E-02,2.009986474E-06,2.256929874E-01,2.106898725E-01,8.054009080E-02,2.297939777E+00,1.429734349E+00,4.767132923E-02,1.360140562E+00,8.462531567E-01,5.686021969E-02,1.622314572E+00,1.009374022E+00,1.421200484E-01,8.462490141E-02,8.115753531E-02,8.031305671E-02,3.036586940E-02,-6.600199413E-05,1.302312012E-04,-6.422919978E-05,1.078600879E-03,2.078810241E-03,0.000000000E+00,5.686247349E-01,7.238436228E-05,1.220745295E-01,4.602019310E+00,0.000000000E+00,1.404919177E-01,2.022221680E+02,-3.211943817E+01,1.649110985E+01,6.910549849E-02 +4.358142912E-01,2.730033569E+02,8.810563660E+01,9.643583298E-01,3.870297670E-01,1.036948323E+00,2.958582115E+01,2.553880930E+00,2.553976297E+00,2.553944111E+00,2.553944111E+00,1.598049521E+00,7.723460083E+02,1.200000048E+00,1.927687049E+00,1.927687049E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.606983900E+00,2.553880930E+00,1.036459804E+00,2.957188416E+01,9.549041715E-05,4.884827067E-04,1.393720601E-02,6.420727354E-03,5.226817131E+00,2.260095906E-03,1.839839458E+00,3.207925707E-03,2.611423969E+00,1.776567777E-03,1.446221709E+00,2.160873963E-03,8.503038553E-04,2.426055260E-02,2.496971283E-03,2.032668829E+00,2.032668829E+00,8.750275592E-04,7.123194337E-01,7.123194337E-01,1.241242629E-03,1.010438204E+00,1.010438204E+00,6.927836221E-04,5.639631152E-01,5.639631152E-01,8.483550628E-04,3.349615727E-04,9.556998499E-03,6.420965772E-03,5.227011681E+00,2.260160400E-03,1.839892030E+00,3.207925707E-03,2.611423969E+00,-1.776691875E-03,-1.446322680E+00,2.160883043E-03,-8.503281279E-04,-2.426124550E-02,5.641856790E-01,5.940997005E-01,1.999276400E+00,1.994752407E+00,3.720983154E+03,2.381280437E-02,9.216275066E-03,1.426524669E-01,1.820075326E-02,4.648416489E-02,2.856921591E-02,9.157330729E-03,2.756875801E-06,7.271031290E-02,1.620515442E+01,9.876584045E-06,5.543031421E-06,1.278812997E-02,1.278812997E-02,2.009986474E-06,2.250048667E-01,2.097490877E-01,8.012942970E-02,2.286222935E+00,1.422298312E+00,4.754032195E-02,1.356402755E+00,8.438409567E-01,5.663828552E-02,1.615982533E+00,1.005331159E+00,1.409575492E-01,8.395592123E-02,8.048524708E-02,7.964016497E-02,3.013660200E-02,-6.481917808E-05,1.279467688E-04,-6.312759797E-05,1.067709178E-03,2.058206825E-03,0.000000000E+00,5.640022159E-01,7.128534344E-05,1.225546226E-01,4.608753681E+00,0.000000000E+00,1.379374117E-01,2.021632538E+02,-3.114450836E+01,1.620193100E+01,5.387749523E-02 +4.404682517E-01,2.759187012E+02,8.902091980E+01,9.641642570E-01,3.869518936E-01,1.038542628E+00,2.963131142E+01,2.554569483E+00,2.554654598E+00,2.554622173E+00,2.554622173E+00,1.598263144E+00,7.726101685E+02,1.200000048E+00,1.928046823E+00,1.928046823E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.611344695E+00,2.554569483E+00,1.038069129E+00,2.961779976E+01,8.511311898E-05,4.735646071E-04,1.351156924E-02,6.355305202E-03,5.173560143E+00,2.247428754E-03,1.829527855E+00,3.182500834E-03,2.590726852E+00,1.762561733E-03,1.434819937E+00,2.114756498E-03,8.376534097E-04,2.389961481E-02,2.470542677E-03,2.011154652E+00,2.011154652E+00,8.699215250E-04,7.081629038E-01,7.081629038E-01,1.231123577E-03,1.002200723E+00,1.002200723E+00,6.870601210E-04,5.593038797E-01,5.593038797E-01,8.297890890E-04,3.298272495E-04,9.410508908E-03,6.355529651E-03,5.173742771E+00,2.247491153E-03,1.829578519E+00,3.182500834E-03,2.590726852E+00,-1.762679894E-03,-1.434916258E+00,2.114763716E-03,-8.376746555E-04,-2.390022203E-02,5.595317483E-01,5.892124772E-01,2.002046585E+00,1.997552395E+00,3.725259277E+03,2.362120152E-02,9.140279144E-03,1.420116276E-01,1.800070889E-02,4.598546773E-02,2.842765488E-02,9.056049399E-03,2.756875801E-06,7.226792723E-02,1.599769688E+01,9.876584045E-06,5.543031421E-06,1.264704764E-02,1.264704764E-02,2.009986474E-06,2.243154049E-01,2.088060528E-01,7.972014695E-02,2.274545670E+00,1.414891243E+00,4.740691185E-02,1.352596402E+00,8.413882852E-01,5.641341209E-02,1.609566450E+00,1.001238823E+00,1.398011595E-01,8.328914642E-02,7.981789112E-02,7.897078991E-02,2.990860492E-02,-6.365843001E-05,1.256957330E-04,-6.203731027E-05,1.056966139E-03,2.037877915E-03,0.000000000E+00,5.593411326E-01,7.019245822E-05,1.230292246E-01,4.615490437E+00,0.000000000E+00,1.354262531E-01,2.021051941E+02,-3.019640923E+01,1.591566563E+01,3.987475485E-02 +4.451587200E-01,2.788569031E+02,8.994341278E+01,9.639740586E-01,3.868755400E-01,1.040136933E+00,2.967680168E+01,2.555250168E+00,2.555325270E+00,2.555293083E+00,2.555293083E+00,1.598474383E+00,7.728709717E+02,1.200000048E+00,1.928402662E+00,1.928402662E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.615714669E+00,2.555250168E+00,1.039677978E+00,2.966370392E+01,7.513420860E-05,4.590594035E-04,1.309771184E-02,6.290427875E-03,5.120746613E+00,2.234572545E-03,1.819062114E+00,3.156852676E-03,2.569847822E+00,1.748407609E-03,1.423297763E+00,2.069537528E-03,8.250575629E-04,2.354023419E-02,2.444365993E-03,1.989845276E+00,1.989845276E+00,8.647492505E-04,7.039523721E-01,7.039523721E-01,1.220926875E-03,9.939001203E-01,9.939001203E-01,6.812888896E-04,5.546057820E-01,5.546057820E-01,8.116029203E-04,3.247214190E-04,9.264830500E-03,6.290638819E-03,5.120918274E+00,2.234632615E-03,1.819110990E+00,3.156852676E-03,2.569847822E+00,-1.748520066E-03,-1.423389435E+00,2.069543116E-03,-8.250759565E-04,-2.354076132E-02,5.548412800E-01,5.842874050E-01,2.004818439E+00,2.000354528E+00,3.729553711E+03,2.343071438E-02,9.064780548E-03,1.413720250E-01,1.780254766E-02,4.549117759E-02,2.828462422E-02,8.955734782E-03,2.756875801E-06,7.182792574E-02,1.579238892E+01,9.876584045E-06,5.543031421E-06,1.250730455E-02,1.250730455E-02,2.009986474E-06,2.236244678E-01,2.078607082E-01,7.931219041E-02,2.262905836E+00,1.407511830E+00,4.727112129E-02,1.348722100E+00,8.388954997E-01,5.618564785E-02,1.603067994E+00,9.970979691E-01,1.386508346E-01,8.262467384E-02,7.915527374E-02,7.830489427E-02,2.968165651E-02,-6.251825835E-05,1.234749798E-04,-6.095672143E-05,1.046366757E-03,2.017814200E-03,0.000000000E+00,5.546411872E-01,6.910565571E-05,1.234989911E-01,4.622229576E+00,0.000000000E+00,1.329590976E-01,2.020479584E+02,-2.927438736E+01,1.563228607E+01,2.731694467E-02 +4.498860836E-01,2.818182373E+02,9.087319183E+01,9.637876749E-01,3.868007362E-01,1.041731238E+00,2.972228813E+01,2.555923462E+00,2.555989027E+00,2.555956602E+00,2.555956602E+00,1.598683357E+00,7.731285400E+02,1.200000048E+00,1.928754687E+00,1.928754687E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.620093822E+00,2.555923462E+00,1.041286349E+00,2.970959282E+01,6.554597348E-05,4.449554253E-04,1.269530226E-02,6.226076279E-03,5.068360806E+00,2.221531468E-03,1.808446050E+00,3.130991012E-03,2.548794985E+00,1.734105521E-03,1.411655188E+00,2.025198890E-03,8.125159657E-04,2.318240330E-02,2.418432618E-03,1.968734145E+00,1.968734145E+00,8.595124236E-04,6.996893287E-01,6.996893287E-01,1.210656599E-03,9.855395555E-01,9.855395555E-01,6.754696951E-04,5.498686433E-01,5.498686433E-01,7.937886403E-04,3.196437901E-04,9.119957685E-03,6.226274185E-03,5.068521976E+00,2.221589442E-03,1.808493257E+00,3.130991012E-03,2.548794985E+00,-1.734212623E-03,-1.411742330E+00,2.025203314E-03,-8.125317399E-04,-2.318285219E-02,5.501139164E-01,5.793241262E-01,2.007591724E+00,2.003158808E+00,3.733866699E+03,2.324131876E-02,8.989769034E-03,1.407334358E-01,1.760624349E-02,4.500124604E-02,2.814011462E-02,8.856373839E-03,2.756875801E-06,7.139019668E-02,1.558922482E+01,9.876584045E-06,5.543031421E-06,1.236888394E-02,1.236888394E-02,2.009986474E-06,2.229318321E-01,2.069129795E-01,7.890544832E-02,2.251300812E+00,1.400158167E+00,4.713298380E-02,1.344780684E+00,8.363631368E-01,5.595505238E-02,1.596488714E+00,9.929096699E-01,1.375062317E-01,8.196221292E-02,7.849714160E-02,7.764250785E-02,2.945545502E-02,-6.139666220E-05,1.212804564E-04,-5.988379053E-05,1.035901136E-03,1.997996820E-03,0.000000000E+00,5.499023795E-01,6.802486314E-05,1.239649802E-01,4.628971577E+00,0.000000000E+00,1.305364370E-01,2.019915619E+02,-2.837771988E+01,1.535176563E+01,1.632269472E-02 +4.546505511E-01,2.848027954E+02,9.181029510E+01,9.636050463E-01,3.867274523E-01,1.043325424E+00,2.976777267E+01,2.556589127E+00,2.556645393E+00,2.556613207E+00,2.556613207E+00,1.598890066E+00,7.733828125E+02,1.200000048E+00,1.929102898E+00,1.929102898E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.624481797E+00,2.556589127E+00,1.042894244E+00,2.975547028E+01,5.634116314E-05,4.312411766E-04,1.230401266E-02,6.162225734E-03,5.016383171E+00,2.208311111E-03,1.797684073E+00,3.104924690E-03,2.527575493E+00,1.719656051E-03,1.399892569E+00,1.981724985E-03,8.000282105E-04,2.282610722E-02,2.392731840E-03,1.947812438E+00,1.947812438E+00,8.542129654E-04,6.953752637E-01,6.953752637E-01,1.200316357E-03,9.771220684E-01,9.771220684E-01,6.696025957E-04,5.450925231E-01,5.450925231E-01,7.763389731E-04,3.145940427E-04,8.975880221E-03,6.162411533E-03,5.016534328E+00,2.208366990E-03,1.797729492E+00,3.104924690E-03,2.527575493E+00,-1.719758031E-03,-1.399975538E+00,1.981728245E-03,-8.000415401E-04,-2.282648720E-02,5.453494787E-01,5.743221045E-01,2.010366678E+00,2.005964994E+00,3.738197266E+03,2.305301279E-02,8.915241808E-03,1.400955915E-01,1.741177961E-02,4.451563582E-02,2.799413726E-02,8.757959120E-03,2.756875801E-06,7.095462829E-02,1.538821125E+01,9.876584045E-06,5.543031421E-06,1.223177183E-02,1.223177183E-02,2.009986474E-06,2.222371101E-01,2.059627324E-01,7.849979401E-02,2.239726782E+00,1.392827868E+00,4.699252918E-02,1.340773344E+00,8.337918520E-01,5.572166294E-02,1.589829803E+00,9.886745214E-01,1.363667846E-01,8.130119741E-02,7.784324884E-02,7.698339224E-02,2.922960185E-02,-6.029102224E-05,1.191068586E-04,-5.881583638E-05,1.025557518E-03,1.978403656E-03,0.000000000E+00,5.451245904E-01,6.695002230E-05,1.244286820E-01,4.635715485E+00,0.000000000E+00,1.281586736E-01,2.019359741E+02,-2.750568199E+01,1.507408714E+01,6.916643586E-03 +4.594524503E-01,2.878107910E+02,9.275479889E+01,9.634260535E-01,3.866556287E-01,1.044919491E+00,2.981325340E+01,2.557247400E+00,2.557294846E+00,2.557262659E+00,2.557262659E+00,1.599094391E+00,7.736339111E+02,1.200000048E+00,1.929447174E+00,1.929447174E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.628878474E+00,2.557247400E+00,1.044501543E+00,2.980132866E+01,4.751227971E-05,4.179049283E-04,1.192350779E-02,6.098845974E-03,4.964788437E+00,2.194917761E-03,1.786780953E+00,3.078659065E-03,2.506193876E+00,1.705059898E-03,1.388010383E+00,1.939100563E-03,7.875940064E-04,2.247133851E-02,2.367251553E-03,1.927070022E+00,1.927070022E+00,8.488530293E-04,6.910119653E-01,6.910119653E-01,1.189908478E-03,9.686494470E-01,9.686494470E-01,6.636875914E-04,5.402774215E-01,5.402774215E-01,7.592471084E-04,3.095718566E-04,8.832588792E-03,6.099020597E-03,4.964930534E+00,2.194971545E-03,1.786824822E+00,3.078659065E-03,2.506193876E+00,-1.705156756E-03,-1.388089299E+00,1.939102774E-03,-7.876050076E-04,-2.247165330E-02,5.405475497E-01,5.692810416E-01,2.013142586E+00,2.008772850E+00,3.742544922E+03,2.286580577E-02,8.841200732E-03,1.394581348E-01,1.721914299E-02,4.403431714E-02,2.784671448E-02,8.660482243E-03,2.756875801E-06,7.052105665E-02,1.518935680E+01,9.876584045E-06,5.543031421E-06,1.209595893E-02,1.209595893E-02,2.009986474E-06,2.215397507E-01,2.050097436E-01,7.809504122E-02,2.228178501E+00,1.385517478E+00,4.684980959E-02,1.336701274E+00,8.311823010E-01,5.548549816E-02,1.583091617E+00,9.843927622E-01,1.352317780E-01,8.064111322E-02,7.719332725E-02,7.632716745E-02,2.900362387E-02,-5.919792238E-05,1.169471361E-04,-5.774921738E-05,1.015327172E-03,1.959017944E-03,0.000000000E+00,5.403079391E-01,6.588106044E-05,1.248920038E-01,4.642461300E+00,0.000000000E+00,1.258259416E-01,2.018811798E+02,-2.665754128E+01,1.479924297E+01,-4.222153220E-03 +4.642920494E-01,2.908424377E+02,9.370674896E+01,9.632506967E-01,3.865852356E-01,1.046513081E+00,2.985872269E+01,2.557898283E+00,2.557937384E+00,2.557904959E+00,2.557904959E+00,1.599296570E+00,7.738818359E+02,1.200000048E+00,1.929787874E+00,1.929787874E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.633283257E+00,2.557898283E+00,1.046108246E+00,2.984716988E+01,3.905116318E-05,4.049346026E-04,1.155344304E-02,6.035901606E-03,4.913548470E+00,2.181357937E-03,1.775742650E+00,3.052195301E-03,2.484651089E+00,1.690317527E-03,1.376009345E+00,1.897310256E-03,7.752131205E-04,2.211809158E-02,2.341976855E-03,1.906494975E+00,1.906494975E+00,8.434351766E-04,6.866015792E-01,6.866015792E-01,1.179433311E-03,9.601221085E-01,9.601221085E-01,6.577247987E-04,5.354233384E-01,5.354233384E-01,7.425058284E-04,3.045769990E-04,8.690077811E-03,6.036065519E-03,4.913681507E+00,2.181409858E-03,1.775784850E+00,3.052195301E-03,2.484651089E+00,-1.690409728E-03,-1.376084447E+00,1.897311769E-03,-7.752219681E-04,-2.211834490E-02,5.357079506E-01,5.642004013E-01,2.015919924E+00,2.011582375E+00,3.746909424E+03,2.267972007E-02,8.767653257E-03,1.388206333E-01,1.702831313E-02,4.355725273E-02,2.769788913E-02,8.563934825E-03,2.756875801E-06,7.008931786E-02,1.499266624E+01,9.876584045E-06,5.543031421E-06,1.196143311E-02,1.196143311E-02,2.009986474E-06,2.208391130E-01,2.040537149E-01,7.769097388E-02,2.216650009E+00,1.378223419E+00,4.670486972E-02,1.332566023E+00,8.285354972E-01,5.524653196E-02,1.576273441E+00,9.800639153E-01,1.341008395E-01,7.998162508E-02,7.654710859E-02,7.567373663E-02,2.877702378E-02,-5.811351366E-05,1.147932126E-04,-5.667969890E-05,1.005208353E-03,1.939836540E-03,0.000000000E+00,5.354523659E-01,6.481791934E-05,1.253570467E-01,4.649209023E+00,0.000000000E+00,1.235377342E-01,2.018271637E+02,-2.583253860E+01,1.452724266E+01,-1.451991871E-02 +4.691696763E-01,2.938978882E+02,9.466621399E+01,9.630788565E-01,3.865162730E-01,1.048106432E+00,2.990418053E+01,2.558542013E+00,2.558573008E+00,2.558540583E+00,2.558540583E+00,1.599496603E+00,7.741266479E+02,1.200000048E+00,1.930124760E+00,1.930124760E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.637695670E+00,2.558542013E+00,1.047714114E+00,2.989298630E+01,3.094909334E-05,3.923178301E-04,1.119346637E-02,5.973355379E-03,4.862632751E+00,2.167640487E-03,1.764575839E+00,3.025530372E-03,2.462944269E+00,1.675429754E-03,1.363889933E+00,1.856338233E-03,7.628856692E-04,2.176636830E-02,2.316892380E-03,1.886074901E+00,1.886074901E+00,8.379625506E-04,6.821466088E-01,6.821466088E-01,1.168889576E-03,9.515389204E-01,9.515389204E-01,6.517142756E-04,5.305304527E-01,5.305304527E-01,7.261081482E-04,2.996093535E-04,8.548342623E-03,5.973509513E-03,4.862757683E+00,2.167690312E-03,1.764616489E+00,3.025530372E-03,2.462944269E+00,-1.675517531E-03,-1.363961339E+00,1.856339164E-03,-7.628925378E-04,-2.176656574E-02,5.308303237E-01,5.590798259E-01,2.018697739E+00,2.014392853E+00,3.751289307E+03,2.249478921E-02,8.694609627E-03,1.381826103E-01,1.683927327E-02,4.308440536E-02,2.754771709E-02,8.468305692E-03,2.756875801E-06,6.965921074E-02,1.479813766E+01,9.876584045E-06,5.543031421E-06,1.182817947E-02,1.182817947E-02,2.009986474E-06,2.201344073E-01,2.030943036E-01,7.728737593E-02,2.205134630E+00,1.370941281E+00,4.655778781E-02,1.328369498E+00,8.258526325E-01,5.500469729E-02,1.569373608E+00,9.756867290E-01,1.329740137E-01,7.932262868E-02,7.590435445E-02,7.502359897E-02,2.854936197E-02,-5.703423085E-05,1.126376155E-04,-5.560338104E-05,9.952066466E-04,1.920870855E-03,0.000000000E+00,5.305580497E-01,6.376059173E-05,1.258257329E-01,4.655957222E+00,0.000000000E+00,1.212925464E-01,2.017739410E+02,-2.502989578E+01,1.425810909E+01,-2.665306814E-02 +4.740855992E-01,2.969773254E+02,9.563323975E+01,9.629104733E-01,3.864486814E-01,1.049698949E+00,2.994962120E+01,2.559178591E+00,2.559201717E+00,2.559169292E+00,2.559169292E+00,1.599694371E+00,7.743684082E+02,1.200000048E+00,1.930458069E+00,1.930458069E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.642115235E+00,2.559178591E+00,1.049318910E+00,2.993877792E+01,2.319709165E-05,3.800426202E-04,1.084323414E-02,5.911173299E-03,4.812013149E+00,2.153774956E-03,1.753288627E+00,2.998656826E-03,2.441067934E+00,1.660396811E-03,1.351652265E+00,1.816168427E-03,7.506122347E-04,2.141618915E-02,2.291983925E-03,1.865798116E+00,1.865798116E+00,8.324387018E-04,6.776498556E-01,6.776498556E-01,1.158274361E-03,9.428976178E-01,9.428976178E-01,6.456559058E-04,5.255985856E-01,5.255985856E-01,7.100467337E-04,2.946689492E-04,8.407385089E-03,5.911318120E-03,4.812130451E+00,2.153823152E-03,1.753327727E+00,2.998656826E-03,2.441067934E+00,-1.660480164E-03,-1.351720095E+00,1.816169010E-03,-7.506173570E-04,-2.141633444E-02,5.259143710E-01,5.539188981E-01,2.021476030E+00,2.017204285E+00,3.755684082E+03,2.231105976E-02,8.622086607E-03,1.375436336E-01,1.665199734E-02,4.261572286E-02,2.739627101E-02,8.373584598E-03,2.756875801E-06,6.923054904E-02,1.460576820E+01,9.876584045E-06,5.543031421E-06,1.169618219E-02,1.169618219E-02,2.009986474E-06,2.194248736E-01,2.021311671E-01,7.688402385E-02,2.193626404E+00,1.363667250E+00,4.640864953E-02,1.324114203E+00,8.231351972E-01,5.475989357E-02,1.562388778E+00,9.712593555E-01,1.318517029E-01,7.866418362E-02,7.526482642E-02,7.437758148E-02,2.832031436E-02,-5.595739640E-05,1.104750918E-04,-5.451769539E-05,9.853318334E-04,1.902139862E-03,0.000000000E+00,5.256248116E-01,6.270907033E-05,1.262995750E-01,4.662706375E+00,0.000000000E+00,1.190877855E-01,2.017214661E+02,-2.424886131E+01,1.399188232E+01,-4.049605876E-02 +4.790401757E-01,3.000809631E+02,9.660790253E+01,9.627454281E-01,3.863824606E-01,1.051290870E+00,2.999503708E+01,2.559808016E+00,2.559823751E+00,2.559791327E+00,2.559791327E+00,1.599889994E+00,7.746071167E+02,1.200000048E+00,1.930787802E+00,1.930787802E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.646541238E+00,2.559808016E+00,1.050922751E+00,2.998453522E+01,1.578603042E-05,3.680977097E-04,1.050242689E-02,5.849326495E-03,4.761666298E+00,2.139772521E-03,1.741889834E+00,2.971564885E-03,2.419013500E+00,1.645218232E-03,1.339296103E+00,1.776784426E-03,7.383938646E-04,2.106757835E-02,2.267239848E-03,1.845655084E+00,1.845655084E+00,8.268675883E-04,6.731146574E-01,6.731146574E-01,1.147583593E-03,9.341948032E-01,9.341948032E-01,6.395493401E-04,5.206275582E-01,5.206275582E-01,6.943143089E-04,2.897560480E-04,8.267211728E-03,5.849462003E-03,4.761776447E+00,2.139818622E-03,1.741927505E+00,2.971564885E-03,2.419013500E+00,-1.645297394E-03,-1.339360595E+00,1.776784658E-03,-7.383972406E-04,-2.106767520E-02,5.209598541E-01,5.487172604E-01,2.024254560E+00,2.020016432E+00,3.760092529E+03,2.212859504E-02,8.550107479E-03,1.369033456E-01,1.646646298E-02,4.215114564E-02,2.724363282E-02,8.279757574E-03,2.756875801E-06,6.880316138E-02,1.441555119E+01,9.876584045E-06,5.543031421E-06,1.156542357E-02,1.156542357E-02,2.009986474E-06,2.187098414E-01,2.011639625E-01,7.648073137E-02,2.182119608E+00,1.356397748E+00,4.625754431E-02,1.319802999E+00,8.203848004E-01,5.451197922E-02,1.555315495E+00,9.667792916E-01,1.307343096E-01,7.800664753E-02,7.462831587E-02,7.373626530E-02,2.808970213E-02,-5.488127863E-05,1.083031166E-04,-5.342184159E-05,9.755921783E-04,1.883659512E-03,0.000000000E+00,5.206524730E-01,6.166341336E-05,1.267794371E-01,4.669455051E+00,0.000000000E+00,1.169200838E-01,2.016697235E+02,-2.348872566E+01,1.372860432E+01,-5.580663681E-02 +4.840336442E-01,3.032089844E+02,9.759024811E+01,9.625836611E-01,3.863175213E-01,1.052881598E+00,3.004042625E+01,2.560430288E+00,2.560439110E+00,2.560406685E+00,2.560406685E+00,1.600083590E+00,7.748428955E+02,1.200000048E+00,1.931113958E+00,1.931113958E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.650973082E+00,2.560430288E+00,1.052525163E+00,3.003025627E+01,8.706472727E-06,3.564728249E-04,1.017074939E-02,5.787794013E-03,4.711575508E+00,2.125644824E-03,1.730389237E+00,2.944242442E-03,2.396771669E+00,1.629893435E-03,1.326820970E+00,1.738168881E-03,7.262316649E-04,2.072057128E-02,2.242651070E-03,1.825638533E+00,1.825638533E+00,8.212536341E-04,6.685445905E-01,6.685445905E-01,1.136812614E-03,9.254266024E-01,9.254266024E-01,6.333942874E-04,5.156170130E-01,5.156170130E-01,6.789033068E-04,2.848708828E-04,8.127829991E-03,5.787921138E-03,4.711678982E+00,2.125689527E-03,1.730425477E+00,2.944242442E-03,2.396771669E+00,-1.629968756E-03,-1.326882124E+00,1.738168998E-03,-7.262334693E-04,-2.072062343E-02,5.159663558E-01,5.434744954E-01,2.027032614E+00,2.022828341E+00,3.764513916E+03,2.194746211E-02,8.478695527E-03,1.362615079E-01,1.628263667E-02,4.169061035E-02,2.708989382E-02,8.186808787E-03,2.756875801E-06,6.837690622E-02,1.422747612E+01,9.876584045E-06,5.543031421E-06,1.143588126E-02,1.143588126E-02,2.009986474E-06,2.179887742E-01,2.001924515E-01,7.607736439E-02,2.170610905E+00,1.349130630E+00,4.610459134E-02,1.315438986E+00,8.176034689E-01,5.426080897E-02,1.548149109E+00,9.622438550E-01,1.296221614E-01,7.735063136E-02,7.399464399E-02,7.309975475E-02,2.785748988E-02,-5.380484072E-05,1.061215225E-04,-5.231667819E-05,9.659908828E-04,1.865436556E-03,0.000000000E+00,5.156406760E-01,6.062367538E-05,1.272656024E-01,4.676202297E+00,0.000000000E+00,1.147857159E-01,2.016187286E+02,-2.274884415E+01,1.346831989E+01,-7.224301249E-02 +4.890663326E-01,3.063615723E+02,9.858034515E+01,9.624251127E-01,3.862538934E-01,1.054471254E+00,3.008578300E+01,2.561045647E+00,2.561047554E+00,2.561015368E+00,2.561015368E+00,1.600274920E+00,7.750756836E+02,1.200000048E+00,1.931436419E+00,1.931436419E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.655410171E+00,2.561045647E+00,1.054126143E+00,3.007593536E+01,1.948374347E-06,3.451582743E-04,9.847926907E-03,5.726562813E-03,4.661729813E+00,2.111405600E-03,1.718797684E+00,2.916677389E-03,2.374332190E+00,1.614421490E-03,1.314225912E+00,1.700303634E-03,7.141269161E-04,2.037520334E-02,2.218211768E-03,1.805743694E+00,1.805743694E+00,8.156017284E-04,6.639436483E-01,6.639436483E-01,1.125956769E-03,9.165893793E-01,9.165893793E-01,6.271900493E-04,5.105664134E-01,5.105664134E-01,6.638055784E-04,2.800138318E-04,7.989251055E-03,5.726681557E-03,4.661827087E+00,2.111448441E-03,1.718832493E+00,2.916677389E-03,2.374332190E+00,-1.614492969E-03,-1.314284086E+00,1.700303634E-03,-7.141273236E-04,-2.037521452E-02,5.109336972E-01,5.381901860E-01,2.029810190E+00,2.025640249E+00,3.768947021E+03,2.176772431E-02,8.407874033E-03,1.356179267E-01,1.610048488E-02,4.123402014E-02,2.693515085E-02,8.094718680E-03,2.756875801E-06,6.795168668E-02,1.404152298E+01,9.876584045E-06,5.543031421E-06,1.130752731E-02,1.130752731E-02,2.009986474E-06,2.172612846E-01,1.992164403E-01,7.567383349E-02,2.159097433E+00,1.341863990E+00,4.594991356E-02,1.311025858E+00,8.147933483E-01,5.400622264E-02,1.540885448E+00,9.576501250E-01,1.285155118E-01,7.669681311E-02,7.336366922E-02,7.246795297E-02,2.762376890E-02,-5.272738417E-05,1.039314739E-04,-5.120408969E-05,9.565258515E-04,1.847467036E-03,0.000000000E+00,5.105888844E-01,5.958992551E-05,1.277576983E-01,4.682947636E+00,0.000000000E+00,1.126810163E-01,2.015684509E+02,-2.202860641E+01,1.321106625E+01,-8.938761055E-02 +4.941385388E-01,3.095389099E+02,9.957825470E+01,9.622696042E-01,3.861914873E-01,1.056059599E+00,3.013109779E+01,2.561654091E+00,2.561649561E+00,2.561617374E+00,2.561617374E+00,1.600464106E+00,7.753056030E+02,1.200000048E+00,1.931755424E+00,1.931755424E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.659851909E+00,2.561654091E+00,1.055725455E+00,3.012156487E+01,-4.499063834E-06,3.341447737E-04,9.533694014E-03,5.665623583E-03,4.612122059E+00,2.097068354E-03,1.707126260E+00,2.888860879E-03,2.351688147E+00,1.598800765E-03,1.301509738E+00,1.663168776E-03,7.020810153E-04,2.003151365E-02,2.193917753E-03,1.785966992E+00,1.785966992E+00,8.099170518E-04,6.593160033E-01,6.593160033E-01,1.115012332E-03,9.076799750E-01,9.076799750E-01,6.209359271E-04,5.054752231E-01,5.054752231E-01,6.490125670E-04,2.751852444E-04,7.851482369E-03,5.665734876E-03,4.612213135E+00,2.097109566E-03,1.707159877E+00,2.888860879E-03,2.351688147E+00,-1.598868635E-03,-1.301565051E+00,1.663168776E-03,-7.020800840E-04,-2.003148757E-02,5.058614612E-01,5.328640342E-01,2.032586575E+00,2.028451443E+00,3.773391113E+03,2.158943936E-02,8.337663487E-03,1.349725425E-01,1.591995917E-02,4.078127444E-02,2.677949704E-02,8.003463037E-03,2.756875801E-06,6.752741337E-02,1.385765934E+01,9.876584045E-06,5.543031421E-06,1.118033100E-02,1.118033100E-02,2.009986474E-06,2.165271193E-01,1.982358098E-01,7.527007163E-02,2.147577763E+00,1.334596634E+00,4.579364508E-02,1.306567192E+00,8.119567633E-01,5.374808609E-02,1.533520341E+00,9.529958367E-01,1.274147034E-01,7.604569197E-02,7.273529470E-02,7.184100896E-02,2.738876827E-02,-5.164807953E-05,1.017341856E-04,-5.008610242E-05,9.471936501E-04,1.829744782E-03,0.000000000E+00,5.054965615E-01,5.856224016E-05,1.282546967E-01,4.689690590E+00,0.000000000E+00,1.106026098E-01,2.015188904E+02,-2.132743263E+01,1.295687294E+01,-1.067783087E-01 +4.992505908E-01,3.127412109E+02,1.005840378E+02,9.621171951E-01,3.861303031E-01,1.057646275E+00,3.017637062E+01,2.562255621E+00,2.562245131E+00,2.562212706E+00,2.562212706E+00,1.600651264E+00,7.755325928E+02,1.200000048E+00,1.932070851E+00,1.932070851E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.664297700E+00,2.562255621E+00,1.057322860E+00,3.016714287E+01,-1.064725893E-05,3.234235628E-04,9.227800183E-03,5.604968406E-03,4.562745571E+00,2.082647290E-03,1.695386887E+00,2.860788023E-03,2.328835249E+00,1.583029516E-03,1.288671136E+00,1.626744168E-03,6.900951848E-04,1.968953758E-02,2.169764601E-03,1.766305089E+00,1.766305089E+00,8.042048430E-04,6.546660066E-01,6.546660066E-01,1.103977440E-03,8.986970186E-01,8.986970186E-01,6.146310479E-04,5.003427267E-01,5.003427267E-01,6.345154252E-04,2.703853825E-04,7.714535575E-03,5.605073180E-03,4.562830925E+00,2.082686871E-03,1.695419192E+00,2.860788256E-03,2.328835249E+00,-1.583093894E-03,-1.288723588E+00,1.626744284E-03,-6.900930312E-04,-1.968947798E-02,5.007494092E-01,5.274955630E-01,2.035361528E+00,2.031261683E+00,3.777844971E+03,2.141264826E-02,8.268077858E-03,1.343252808E-01,1.574101113E-02,4.033224657E-02,2.662302926E-02,7.913015783E-03,2.756875801E-06,6.710401922E-02,1.367583942E+01,9.876584045E-06,5.543031421E-06,1.105425507E-02,1.105425507E-02,2.009986474E-06,2.157860696E-01,1.972505152E-01,7.486603409E-02,2.136049747E+00,1.327327490E+00,4.563592374E-02,1.302067161E+00,8.090961576E-01,5.348630622E-02,1.526051402E+00,9.482791424E-01,1.263202876E-01,7.539769262E-02,7.210946828E-02,7.121953368E-02,2.715282328E-02,-5.056616646E-05,9.953082190E-05,-4.896465180E-05,9.379861876E-04,1.812254195E-03,0.000000000E+00,5.003629923E-01,5.754068115E-05,1.287549585E-01,4.696430206E+00,0.000000000E+00,1.085473374E-01,2.014700317E+02,-2.064476967E+01,1.270576382E+01,-1.239521205E-01 +5.044028163E-01,3.159686584E+02,1.015977554E+02,9.619677067E-01,3.860703409E-01,1.059231400E+00,3.022159386E+01,2.562850237E+00,2.562833786E+00,2.562801361E+00,2.562801361E+00,1.600836277E+00,7.757567139E+02,1.200000048E+00,1.932382703E+00,1.932382703E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.668747306E+00,2.562850237E+00,1.058918357E+00,3.021266365E+01,-1.650790364E-05,3.129868710E-04,8.930024691E-03,5.544590298E-03,4.513594627E+00,2.068157541E-03,1.683591366E+00,2.832461149E-03,2.305775642E+00,1.567105763E-03,1.275708318E+00,1.591010019E-03,6.781706470E-04,1.934931241E-02,2.145748818E-03,1.746754885E+00,1.746754885E+00,7.984706899E-04,6.499980688E-01,6.499980688E-01,1.092852559E-03,8.896407485E-01,8.896407485E-01,6.082745385E-04,4.951681793E-01,4.951681793E-01,6.203055382E-04,2.656146535E-04,7.578418590E-03,5.544688553E-03,4.513674736E+00,2.068195492E-03,1.683622360E+00,2.832461149E-03,2.305775642E+00,-1.567166881E-03,-1.275758147E+00,1.591010252E-03,-6.781673874E-04,-1.934921928E-02,4.955971837E-01,5.220844746E-01,2.038135052E+00,2.034070730E+00,3.782308350E+03,2.123737335E-02,8.199123666E-03,1.336760670E-01,1.556359045E-02,3.988681361E-02,2.646582946E-02,7.823351771E-03,2.756875801E-06,6.668141484E-02,1.349601078E+01,9.876584045E-06,5.543031421E-06,1.092926413E-02,1.092926413E-02,2.009986474E-06,2.150380313E-01,1.962605715E-01,7.446166128E-02,2.124512434E+00,1.320055604E+00,4.547689855E-02,1.297529936E+00,8.062141538E-01,5.322084948E-02,1.518477440E+00,9.434994459E-01,1.252330095E-01,7.475315034E-02,7.148621231E-02,7.060445100E-02,2.691631950E-02,-4.948081551E-05,9.732214676E-05,-4.784132761E-05,9.289013688E-04,1.794991433E-03,0.000000000E+00,4.951873720E-01,5.652532855E-05,1.292565018E-01,4.703165531E+00,0.000000000E+00,1.065121964E-01,2.014218750E+02,-1.998013115E+01,1.245775700E+01,-1.404927671E-01 +5.095955133E-01,3.192214661E+02,1.026194839E+02,9.618211389E-01,3.860115111E-01,1.060814500E+00,3.026676559E+01,2.563437939E+00,2.563415766E+00,2.563383341E+00,2.563383341E+00,1.601019144E+00,7.759779663E+02,1.200000048E+00,1.932690978E+00,1.932690978E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.673200130E+00,2.563437939E+00,1.060511708E+00,3.025812531E+01,-2.209266859E-05,3.028284700E-04,8.640188724E-03,5.484483670E-03,4.464664459E+00,2.053613309E-03,1.671751618E+00,2.803890500E-03,2.282517672E+00,1.551027759E-03,1.262619972E+00,1.555947703E-03,6.663085078E-04,1.901086606E-02,2.121866914E-03,1.727313757E+00,1.727313757E+00,7.927200641E-04,6.453167796E-01,6.453167796E-01,1.081641531E-03,8.805143237E-01,8.805143237E-01,6.018654676E-04,4.899508655E-01,4.899508655E-01,6.063749315E-04,2.608733193E-04,7.443140727E-03,5.484575406E-03,4.464739323E+00,2.053649863E-03,1.671781421E+00,2.803890500E-03,2.282517672E+00,-1.551085734E-03,-1.262667179E+00,1.555948285E-03,-6.663043168E-04,-1.901074685E-02,4.904045165E-01,5.166304708E-01,2.040906906E+00,2.036878347E+00,3.786780273E+03,2.106360905E-02,8.130799979E-03,1.330249012E-01,1.538765058E-02,3.944486752E-02,2.630796656E-02,7.734446786E-03,2.756875801E-06,6.625954807E-02,1.331811714E+01,9.876584045E-06,5.543031421E-06,1.080532558E-02,1.080532558E-02,2.009986474E-06,2.142829299E-01,1.952660680E-01,7.405691594E-02,2.112964153E+00,1.312780142E+00,4.531671479E-02,1.292959690E+00,8.033132553E-01,5.295176059E-02,1.510799885E+00,9.386574030E-01,1.241534054E-01,7.411213964E-02,7.086559385E-02,6.999657303E-02,2.667961456E-02,-4.839258690E-05,9.511128155E-05,-4.671869465E-05,9.199322085E-04,1.777943340E-03,0.000000000E+00,4.899690449E-01,5.551624054E-05,1.297574490E-01,4.709896088E+00,0.000000000E+00,1.044944003E-01,2.013743896E+02,-1.933312607E+01,1.221286488E+01,-1.560663879E-01 +5.148289800E-01,3.224998169E+02,1.036492844E+02,9.616773725E-01,3.859538138E-01,1.062395811E+00,3.031188011E+01,2.564018488E+00,2.563991070E+00,2.563958645E+00,2.563958645E+00,1.601199865E+00,7.761963501E+02,1.200000048E+00,1.932995677E+00,1.932995677E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.677656054E+00,2.564018488E+00,1.062102795E+00,3.030352211E+01,-2.741301978E-05,2.929434413E-04,8.358153515E-03,5.424645729E-03,4.415953159E+00,2.039029030E-03,1.659879208E+00,2.775095869E-03,2.259077311E+00,1.534793875E-03,1.249404788E+00,1.521540806E-03,6.545098149E-04,1.867423020E-02,2.098117257E-03,1.707980275E+00,1.707980275E+00,7.869583787E-04,6.406264305E-01,6.406264305E-01,1.070351456E-03,8.713236451E-01,8.713236451E-01,5.954031367E-04,4.846901894E-01,4.846901894E-01,5.927162711E-04,2.561616420E-04,7.308708504E-03,5.424731411E-03,4.416023254E+00,2.039064188E-03,1.659907818E+00,2.775095869E-03,2.259077311E+00,-1.534848823E-03,-1.249449492E+00,1.521541621E-03,-6.545046926E-04,-1.867408492E-02,4.851710498E-01,5.111331344E-01,2.043676615E+00,2.039684296E+00,3.791260498E+03,2.089133300E-02,8.063093759E-03,1.323717833E-01,1.521315333E-02,3.900631145E-02,2.614950202E-02,7.646280341E-03,2.756875801E-06,6.583836675E-02,1.314210320E+01,9.876584045E-06,5.543031421E-06,1.068241056E-02,1.068241056E-02,2.009986474E-06,2.135207653E-01,1.942672282E-01,7.365176082E-02,2.101404667E+00,1.305500507E+00,4.515552148E-02,1.288360476E+00,8.003960252E-01,5.267916620E-02,1.503022313E+00,9.337554574E-01,1.230813786E-01,7.347409427E-02,7.024771720E-02,6.939619780E-02,2.644295618E-02,-4.730232467E-05,9.290168964E-05,-4.559936133E-05,9.110923856E-04,1.761136344E-03,0.000000000E+00,4.847074449E-01,5.451347170E-05,1.302562952E-01,4.716621876E+00,0.000000000E+00,1.024918035E-01,2.013276062E+02,-1.870344925E+01,1.197109032E+01,-1.704417467E-01 +5.201035142E-01,3.258039246E+02,1.046872177E+02,9.615364075E-01,3.858972490E-01,1.063974977E+00,3.035693741E+01,2.564591885E+00,2.564559460E+00,2.564527035E+00,2.564527035E+00,1.601378441E+00,7.764118652E+02,1.200000048E+00,1.933296800E+00,1.933296800E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.682114840E+00,2.564591885E+00,1.063691616E+00,3.034885216E+01,-3.248017310E-05,2.833277977E-04,8.083803579E-03,5.365078337E-03,4.367462158E+00,2.024418442E-03,1.647985339E+00,2.746105893E-03,2.235477686E+00,1.518403180E-03,1.236061811E+00,1.487774076E-03,6.427751505E-04,1.833942160E-02,2.074499149E-03,1.688753843E+00,1.688753843E+00,7.811908727E-04,6.359313726E-01,6.359313726E-01,1.058993163E-03,8.620774150E-01,8.620774150E-01,5.888870801E-04,4.793857336E-01,4.793857336E-01,5.793227465E-04,2.514797088E-04,7.175125647E-03,5.365158431E-03,4.367527485E+00,2.024452202E-03,1.648012877E+00,2.746105893E-03,2.235477686E+00,-1.518455218E-03,-1.236104131E+00,1.487775124E-03,-6.427692133E-04,-1.833925024E-02,4.798964560E-01,5.055921674E-01,2.046444178E+00,2.042488337E+00,3.795748047E+03,2.072049305E-02,7.995984517E-03,1.317168176E-01,1.504006330E-02,3.857106343E-02,2.599047683E-02,7.558835205E-03,2.756875801E-06,6.541783363E-02,1.296791267E+01,9.876584045E-06,5.543031421E-06,1.056049578E-02,1.056049578E-02,2.009986474E-06,2.127517015E-01,1.932644099E-01,7.324621081E-02,2.089833736E+00,1.298216939E+00,4.499345645E-02,1.283736467E+00,7.974649072E-01,5.240328982E-02,1.495151162E+00,9.287973642E-01,1.220161244E-01,7.283779979E-02,6.963272393E-02,6.880307943E-02,2.620643377E-02,-4.621316111E-05,9.070123633E-05,-4.448807522E-05,9.023722960E-04,1.744552283E-03,0.000000000E+00,4.794020951E-01,5.351704021E-05,1.307523251E-01,4.723341942E+00,0.000000000E+00,1.005033776E-01,2.012814941E+02,-1.809085274E+01,1.173242664E+01,-1.834984720E-01 +5.254195333E-01,3.291340027E+02,1.057333603E+02,9.613981843E-01,3.858417571E-01,1.065551877E+00,3.040192986E+01,2.565158606E+00,2.565121174E+00,2.565088749E+00,2.565088749E+00,1.601554871E+00,7.766245117E+02,1.200000048E+00,1.933594227E+00,1.933594227E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.686576128E+00,2.565158606E+00,1.065277934E+00,3.039411354E+01,-3.730479875E-05,2.739781048E-04,7.817041129E-03,5.305786151E-03,4.319195271E+00,2.009794349E-03,1.636080623E+00,2.716954798E-03,2.211747408E+00,1.501855091E-03,1.222590804E+00,1.454633893E-03,6.311049219E-04,1.800645143E-02,2.051013289E-03,1.669635177E+00,1.669635177E+00,7.754224353E-04,6.312355399E-01,6.312355399E-01,1.047579572E-03,8.527861238E-01,8.527861238E-01,5.823168322E-04,4.740372300E-01,4.740372300E-01,5.661882460E-04,2.468275779E-04,7.042393088E-03,5.305861123E-03,4.319256306E+00,2.009826712E-03,1.636107087E+00,2.716954798E-03,2.211747408E+00,-1.501904335E-03,-1.222630978E+00,1.454635290E-03,-6.310982280E-04,-1.800625958E-02,4.745804667E-01,5.000072122E-01,2.049209595E+00,2.045290232E+00,3.800242920E+03,2.055102773E-02,7.929448038E-03,1.310601532E-01,1.486835442E-02,3.813906014E-02,2.583092451E-02,7.472096942E-03,2.756875801E-06,6.499795616E-02,1.279549408E+01,9.876584045E-06,5.543031421E-06,1.043956168E-02,1.043956168E-02,2.009986474E-06,2.119759917E-01,1.922580451E-01,7.284030318E-02,2.078252316E+00,1.290929675E+00,4.483065382E-02,1.279091597E+00,7.945222855E-01,5.212440714E-02,1.487194180E+00,9.237880707E-01,1.209565327E-01,7.220173627E-02,6.902076304E-02,6.821666658E-02,2.596999146E-02,-4.512598753E-05,8.851341408E-05,-4.338742656E-05,8.938031388E-04,1.728251460E-03,0.000000000E+00,4.740526974E-01,5.252695701E-05,1.312455684E-01,4.730055809E+00,0.000000000E+00,9.852925688E-02,2.012360687E+02,-1.749512291E+01,1.149684811E+01,-1.952259839E-01 +5.307772756E-01,3.324902039E+02,1.067877808E+02,9.612626433E-01,3.857873678E-01,1.067126632E+00,3.044685936E+01,2.565717936E+00,2.565675974E+00,2.565643549E+00,2.565643549E+00,1.601729035E+00,7.768342896E+02,1.200000048E+00,1.933887959E+00,1.933887959E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.691039920E+00,2.565717936E+00,1.066861749E+00,3.043930054E+01,-4.189675383E-05,2.648913069E-04,7.557779551E-03,5.246775225E-03,4.271157265E+00,1.995169325E-03,1.624175072E+00,2.687678672E-03,2.187914848E+00,1.485149376E-03,1.208991408E+00,1.422108267E-03,6.194995949E-04,1.767533086E-02,2.027661074E-03,1.650625110E+00,1.650625110E+00,7.696577813E-04,6.265428066E-01,6.265428066E-01,1.036124188E-03,8.434607983E-01,8.434607983E-01,5.756922183E-04,4.686444402E-01,4.686444402E-01,5.533072399E-04,2.422053076E-04,6.910511758E-03,5.246845540E-03,4.271214485E+00,1.995200291E-03,1.624200344E+00,2.687678672E-03,2.187914848E+00,-1.485196059E-03,-1.209029436E+00,1.422110014E-03,-6.194922025E-04,-1.767512038E-02,4.692226946E-01,4.943778813E-01,2.051972389E+00,2.048089981E+00,3.804744141E+03,2.038286813E-02,7.863456383E-03,1.304019094E-01,1.469800621E-02,3.771024942E-02,2.567086741E-02,7.386055309E-03,2.756875801E-06,6.457875669E-02,1.262480259E+01,9.876584045E-06,5.543031421E-06,1.031959429E-02,1.031959429E-02,2.009986474E-06,2.111938894E-01,1.912485957E-01,7.243406028E-02,2.066661596E+00,1.283639431E+00,4.466724768E-02,1.274429321E+00,7.915704846E-01,5.184281617E-02,1.479159951E+00,9.187327027E-01,1.199017540E-01,7.156495005E-02,6.841198355E-02,6.763634086E-02,2.573344298E-02,-4.404226638E-05,8.634272672E-05,-4.230046397E-05,8.853545878E-04,1.712175552E-03,0.000000000E+00,4.686591029E-01,5.154323298E-05,1.317367107E-01,4.736763477E+00,0.000000000E+00,9.657070041E-02,2.011913147E+02,-1.691607094E+01,1.126432896E+01,-2.057135552E-01 +5.361771584E-01,3.358728027E+02,1.078505478E+02,9.611297250E-01,3.857340217E-01,1.068698883E+00,3.049171638E+01,2.566270113E+00,2.566223860E+00,2.566191435E+00,2.566191435E+00,1.601901054E+00,7.770411987E+02,1.200000048E+00,1.934178114E+00,1.934178114E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.695505738E+00,2.566270113E+00,1.068442822E+00,3.048441124E+01,-4.626520604E-05,2.560650464E-04,7.305952255E-03,5.188050680E-03,4.223352432E+00,1.980554312E-03,1.612277746E+00,2.658309648E-03,2.164006948E+00,1.468285918E-03,1.195263624E+00,1.390186371E-03,6.079597515E-04,1.734608226E-02,2.004442737E-03,1.631724119E+00,1.631724119E+00,7.639012765E-04,6.218566895E-01,6.218566895E-01,1.024639350E-03,8.341115117E-01,8.341115117E-01,5.690130638E-04,4.632072449E-01,4.632072449E-01,5.406746641E-04,2.376129996E-04,6.779485382E-03,5.188116338E-03,4.223405838E+00,1.980584115E-03,1.612302065E+00,2.658309648E-03,2.164006948E+00,-1.468330156E-03,-1.195299745E+00,1.390188583E-03,-6.079517771E-04,-1.734585315E-02,4.638228714E-01,4.887038171E-01,2.054732800E+00,2.050887346E+00,3.809251709E+03,2.021594532E-02,7.797981147E-03,1.297422200E-01,1.452900376E-02,3.728460521E-02,2.551032230E-02,7.300701924E-03,2.756875801E-06,6.416023523E-02,1.245580006E+01,9.876584045E-06,5.543031421E-06,1.020058058E-02,1.020058058E-02,2.009986474E-06,2.104056478E-01,1.902364641E-01,7.202751189E-02,2.055062056E+00,1.276346564E+00,4.450335354E-02,1.269753098E+00,7.886115313E-01,5.155878887E-02,1.471056104E+00,9.136360884E-01,1.188520193E-01,7.092782110E-02,6.780637056E-02,6.706210226E-02,2.549657784E-02,-4.296363113E-05,8.419375808E-05,-4.123012695E-05,8.770892746E-04,1.696445746E-03,0.000000000E+00,4.632211328E-01,5.056588998E-05,1.322266310E-01,4.743463993E+00,0.000000000E+00,9.462761134E-02,2.011472321E+02,-1.635355568E+01,1.103482151E+01,-2.151296884E-01 +5.416194201E-01,3.392819214E+02,1.089217300E+02,9.609994292E-01,3.856817186E-01,1.070268512E+00,3.053650093E+01,2.566815138E+00,2.566764593E+00,2.566732168E+00,2.566732168E+00,1.602070808E+00,7.772452393E+02,1.200000048E+00,1.934464455E+00,1.934464455E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.699973226E+00,2.566815138E+00,1.070021033E+00,3.052943993E+01,-5.041628174E-05,2.474978392E-04,7.061516400E-03,5.129612982E-03,4.175780773E+00,1.965959789E-03,1.600396991E+00,2.628878225E-03,2.140048027E+00,1.451264252E-03,1.181407094E+00,1.358863898E-03,5.964870797E-04,1.701874658E-02,1.981357811E-03,1.612931728E+00,1.612931728E+00,7.581567625E-04,6.171803474E-01,6.171803474E-01,1.013136585E-03,8.247476816E-01,8.247476816E-01,5.622790195E-04,4.577253759E-01,4.577253759E-01,5.282882485E-04,2.330511925E-04,6.649329793E-03,5.129674450E-03,4.175830841E+00,1.965988427E-03,1.600420356E+00,2.628878225E-03,2.140048265E+00,-1.451306161E-03,-1.181441188E+00,1.358866342E-03,-5.964785232E-04,-1.701850258E-02,4.583806098E-01,4.829846323E-01,2.057490349E+00,2.053681850E+00,3.813764648E+03,2.005021460E-02,7.733004168E-03,1.290811151E-01,1.436136290E-02,3.686216846E-02,2.534930222E-02,7.216045167E-03,2.756875801E-06,6.374240667E-02,1.228849125E+01,9.876584045E-06,5.543031421E-06,1.008253265E-02,1.008253265E-02,2.009986474E-06,2.096113712E-01,1.892220080E-01,7.162066549E-02,2.043454170E+00,1.269051075E+00,4.433908686E-02,1.265066266E+00,7.856473923E-01,5.127257481E-02,1.462889910E+00,9.085026979E-01,1.178078353E-01,7.029097527E-02,6.720434129E-02,6.649377942E-02,2.525926381E-02,-4.188239109E-05,8.205261111E-05,-4.017022002E-05,8.689604001E-04,1.680971938E-03,0.000000000E+00,4.577385187E-01,4.959504440E-05,1.327158362E-01,4.750157356E+00,0.000000000E+00,9.270045161E-02,2.011038208E+02,-1.580748749E+01,1.080829811E+01,-2.236883491E-01 +5.471044183E-01,3.427178650E+02,1.100014038E+02,9.608716369E-01,3.856304288E-01,1.071835399E+00,3.058120728E+01,2.567352772E+00,2.567298412E+00,2.567265987E+00,2.567265987E+00,1.602238417E+00,7.774463501E+02,1.200000048E+00,1.934746981E+00,1.934746981E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.704441905E+00,2.567352772E+00,1.071596146E+00,3.057438278E+01,-5.435734784E-05,2.391881862E-04,6.824428216E-03,5.071456544E-03,4.128437996E+00,1.951394486E-03,1.588539958E+00,2.599406289E-03,2.116056442E+00,1.434083562E-03,1.167421103E+00,1.328132697E-03,5.850825110E-04,1.669335552E-02,1.958403038E-03,1.594245315E+00,1.594245315E+00,7.524276152E-04,6.125165224E-01,6.125165224E-01,1.001624390E-03,8.153761029E-01,8.153761029E-01,5.554896779E-04,4.521984458E-01,4.521984458E-01,5.161440931E-04,2.285201481E-04,6.520051975E-03,5.071513820E-03,4.128484726E+00,1.951421960E-03,1.588562369E+00,2.599406289E-03,2.116056442E+00,-1.434123144E-03,-1.167453408E+00,1.328135724E-03,-5.850734888E-04,-1.669309847E-02,4.528955817E-01,4.772199094E-01,2.060245037E+00,2.056473494E+00,3.818282715E+03,1.988560706E-02,7.668498438E-03,1.284185499E-01,1.419508457E-02,3.644295037E-02,2.518781275E-02,7.132084575E-03,2.756875801E-06,6.332521886E-02,1.212285995E+01,9.876584045E-06,5.543031421E-06,9.965452366E-03,9.965452366E-03,2.009986474E-06,2.088110149E-01,1.882054359E-01,7.121347636E-02,2.031836271E+00,1.261752129E+00,4.417453334E-02,1.260371327E+00,7.826796770E-01,5.098435655E-02,1.454666615E+00,9.033357501E-01,1.167702302E-01,6.965617090E-02,6.660539657E-02,6.593181938E-02,2.502147481E-02,-4.080844155E-05,7.993960025E-05,-3.913116234E-05,8.610571385E-04,1.665926771E-03,0.000000000E+00,4.522109032E-01,4.863075446E-05,1.332042217E-01,4.756841660E+00,0.000000000E+00,9.078922123E-02,2.010610809E+02,-1.527777195E+01,1.058474445E+01,-2.315945923E-01 +5.526325107E-01,3.461807861E+02,1.110896378E+02,9.607464075E-01,3.855801821E-01,1.073399425E+00,3.062583160E+01,2.567883253E+00,2.567825317E+00,2.567792892E+00,2.567792892E+00,1.602403641E+00,7.776445923E+02,1.200000048E+00,1.935025811E+00,1.935025811E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.708911538E+00,2.567883253E+00,1.073168278E+00,3.061923599E+01,-5.809376307E-05,2.311353892E-04,6.594668608E-03,5.013570189E-03,4.081315517E+00,1.936865970E-03,1.576712966E+00,2.569914795E-03,2.092048645E+00,1.416742569E-03,1.153304577E+00,1.297989627E-03,5.737482570E-04,1.636997052E-02,1.935573760E-03,1.575661063E+00,1.575661063E+00,7.467166870E-04,6.078675389E-01,6.078675389E-01,9.901105659E-04,8.060032129E-01,8.060032129E-01,5.486442824E-04,4.466259480E-01,4.466259480E-01,5.042403354E-04,2.240205940E-04,6.391671952E-03,5.013623741E-03,4.081359386E+00,1.936892280E-03,1.576734424E+00,2.569914795E-03,2.092048645E+00,-1.416780055E-03,-1.153335094E+00,1.297993003E-03,-5.737388274E-04,-1.636970229E-02,4.473675191E-01,4.714093208E-01,2.062996149E+00,2.059261799E+00,3.822804932E+03,1.972206309E-02,7.604440209E-03,1.277543902E-01,1.403019205E-02,3.602701426E-02,2.502584830E-02,7.048832718E-03,2.756875801E-06,6.290860474E-02,1.195891762E+01,9.876584045E-06,5.543031421E-06,9.849354625E-03,9.849354625E-03,2.009986474E-06,2.080044001E-01,1.871868521E-01,7.080585510E-02,2.020206213E+00,1.254448295E+00,4.400978610E-02,1.255670786E+00,7.797098756E-01,5.069430172E-02,1.446390986E+00,8.981381059E-01,1.157408580E-01,6.902515143E-02,6.600926071E-02,6.537757814E-02,2.478335612E-02,-3.974372521E-05,7.785909111E-05,-3.811536590E-05,8.533076616E-04,1.651171362E-03,0.000000000E+00,4.466377199E-01,4.767316568E-05,1.336907595E-01,4.763517380E+00,0.000000000E+00,8.889027685E-02,2.010190125E+02,-1.476437569E+01,1.036406040E+01,-2.389783561E-01 +5.582039952E-01,3.496708984E+02,1.121865082E+02,9.606237411E-01,3.855309486E-01,1.074960351E+00,3.067036819E+01,2.568406582E+00,2.568344831E+00,2.568312407E+00,2.568312407E+00,1.602566719E+00,7.778399048E+02,1.200000048E+00,1.935300827E+00,1.935300827E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.713381648E+00,2.568406582E+00,1.074736953E+00,3.066399574E+01,-6.162779755E-05,2.233392297E-04,6.372231524E-03,4.955940880E-03,4.034402370E+00,1.922380296E-03,1.564920902E+00,2.540425630E-03,2.068042994E+00,1.399239292E-03,1.139056087E+00,1.268437249E-03,5.624855985E-04,1.604863070E-02,1.912864042E-03,1.557174206E+00,1.557174206E+00,7.410263643E-04,6.032353044E-01,6.032353044E-01,9.786034934E-04,7.966359258E-01,7.966359258E-01,5.417421344E-04,4.410071969E-01,4.410071969E-01,4.925776739E-04,2.195529669E-04,6.264203694E-03,4.955990706E-03,4.034442902E+00,1.922405558E-03,1.564941525E+00,2.540425630E-03,2.068042994E+00,-1.399274799E-03,-1.139084935E+00,1.268441090E-03,-5.624758196E-04,-1.604835130E-02,4.417960048E-01,4.655523896E-01,2.065743923E+00,2.062046528E+00,3.827331299E+03,1.955955662E-02,7.540817373E-03,1.270884275E-01,1.386674214E-02,3.561450914E-02,2.486340143E-02,6.966318004E-03,2.756875801E-06,6.249247491E-02,1.179672432E+01,9.876584045E-06,5.543031421E-06,9.734279476E-03,9.734279476E-03,2.009986474E-06,2.071912289E-01,1.861663759E-01,7.039770484E-02,2.008561134E+00,1.247137547E+00,4.384490475E-02,1.250966549E+00,7.767391205E-01,5.040260032E-02,1.438068271E+00,8.929131031E-01,1.147210822E-01,6.839869916E-02,6.541642547E-02,6.483215839E-02,2.454519272E-02,-3.867905252E-05,7.579429075E-05,-3.711523459E-05,8.457199438E-04,1.636721543E-03,0.000000000E+00,4.410183430E-01,4.672237992E-05,1.341735274E-01,4.770183086E+00,0.000000000E+00,8.700240403E-02,2.009776154E+02,-1.426728725E+01,1.014623070E+01,-2.458510995E-01 +5.638192892E-01,3.531884155E+02,1.132920914E+02,9.605036378E-01,3.854827583E-01,1.076518059E+00,3.071481323E+01,2.568922281E+00,2.568857193E+00,2.568824768E+00,2.568824768E+00,1.602727532E+00,7.780322266E+02,1.200000048E+00,1.935572028E+00,1.935572028E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.717851758E+00,2.568922281E+00,1.076302290E+00,3.070865631E+01,-6.496384594E-05,2.157994022E-04,6.157108117E-03,4.898552783E-03,3.987685204E+00,1.907941652E-03,1.553167105E+00,2.510958584E-03,2.044055223E+00,1.381572336E-03,1.124674201E+00,1.239472302E-03,5.512955831E-04,1.572936028E-02,1.890267478E-03,1.538779378E+00,1.538779378E+00,7.353581605E-04,5.986210704E-01,5.986210704E-01,9.671109146E-04,7.872802615E-01,7.872802615E-01,5.347823608E-04,4.353415966E-01,4.353415966E-01,4.811543040E-04,2.151175431E-04,6.137653720E-03,4.898599349E-03,3.987723351E+00,1.907965867E-03,1.553186774E+00,2.510958584E-03,2.044055223E+00,-1.381605864E-03,-1.124701500E+00,1.239476609E-03,-5.512854550E-04,-1.572907157E-02,4.361807108E-01,4.596488476E-01,2.068488121E+00,2.064827681E+00,3.831861572E+03,1.939802244E-02,7.477606181E-03,1.264204830E-01,1.370476373E-02,3.520551696E-02,2.470045723E-02,6.884554867E-03,2.756875801E-06,6.207671762E-02,1.163630486E+01,9.876584045E-06,5.543031421E-06,9.620248340E-03,9.620248340E-03,2.009986474E-06,2.063711733E-01,1.851440370E-01,6.998890638E-02,1.996897340E+00,1.239817739E+00,4.367994145E-02,1.246259809E+00,7.737683058E-01,5.010941997E-02,1.429703355E+00,8.876637220E-01,1.137116253E-01,6.777775288E-02,6.482645124E-02,6.429628283E-02,2.430725098E-02,-3.762386041E-05,7.376477879E-05,-3.614091474E-05,8.383716922E-04,1.622727956E-03,0.000000000E+00,4.353521168E-01,4.577844811E-05,1.346506327E-01,4.776838303E+00,0.000000000E+00,8.512526006E-02,2.009368896E+02,-1.378649330E+01,9.931208611E+00,-2.521077693E-01 +5.694786310E-01,3.567335510E+02,1.144064713E+02,9.603860378E-01,3.854355514E-01,1.078072548E+00,3.075916481E+01,2.569430351E+00,2.569362164E+00,2.569329739E+00,2.569329739E+00,1.602885962E+00,7.782216187E+02,1.200000048E+00,1.935839295E+00,1.935839295E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.722321749E+00,2.569430351E+00,1.077864051E+00,3.075321579E+01,-6.810545892E-05,2.085159213E-04,5.949298386E-03,4.841390997E-03,3.941152334E+00,1.893552952E-03,1.541453958E+00,2.481536008E-03,2.020103693E+00,1.363740303E-03,1.110157967E+00,1.211092575E-03,5.401786184E-04,1.541217603E-02,1.867777784E-03,1.520471573E+00,1.520471573E+00,7.297131233E-04,5.940257311E-01,5.940257311E-01,9.556412115E-04,7.779433131E-01,7.779433131E-01,5.277644377E-04,4.296286404E-01,4.296286404E-01,4.699689453E-04,2.107144101E-04,6.012025289E-03,4.841434304E-03,3.941187859E+00,1.893576118E-03,1.541472793E+00,2.481536008E-03,2.020103693E+00,-1.363771968E-03,-1.110183716E+00,1.211097115E-03,-5.401682574E-04,-1.541187987E-02,4.305213392E-01,4.536983073E-01,2.071228504E+00,2.067604780E+00,3.836395264E+03,1.923741400E-02,7.414786145E-03,1.257503033E-01,1.354429033E-02,3.480012342E-02,2.453699708E-02,6.803559605E-03,2.756875801E-06,6.166121736E-02,1.147768974E+01,9.876584045E-06,5.543031421E-06,9.507283568E-03,9.507283568E-03,2.009986474E-06,2.055439055E-01,1.841199249E-01,6.957932562E-02,1.985211492E+00,1.232486963E+00,4.351492226E-02,1.241551638E+00,7.707979679E-01,4.981495813E-02,1.421301723E+00,8.823934793E-01,1.127119288E-01,6.716215611E-02,6.423921883E-02,6.376922876E-02,2.406966686E-02,-3.657902562E-05,7.177271618E-05,-3.519369420E-05,8.311714046E-04,1.609013416E-03,0.000000000E+00,4.296385944E-01,4.484139572E-05,1.351208389E-01,4.783483028E+00,0.000000000E+00,8.325789869E-02,2.008968506E+02,-1.332199860E+01,9.718931198E+00,-2.575738430E-01 +5.751824975E-01,3.603065796E+02,1.155297165E+02,9.602710605E-01,3.853894174E-01,1.079623580E+00,3.080341911E+01,2.569931030E+00,2.569859982E+00,2.569827557E+00,2.569827557E+00,1.603042006E+00,7.784080200E+02,1.200000048E+00,1.936102629E+00,1.936102629E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.726791382E+00,2.569931030E+00,1.079422116E+00,3.079767036E+01,-7.105654367E-05,2.014885104E-04,5.748795345E-03,4.784439690E-03,3.894791126E+00,1.879215240E-03,1.529782295E+00,2.452184446E-03,1.996209860E+00,1.345742610E-03,1.095506907E+00,1.183292479E-03,5.291344132E-04,1.509706490E-02,1.845388790E-03,1.502245665E+00,1.502245665E+00,7.240916602E-04,5.894495845E-01,5.894495845E-01,9.442044538E-04,7.686331868E-01,7.686331868E-01,5.206880742E-04,4.238680899E-01,4.238680899E-01,4.590191529E-04,2.063433349E-04,5.887310952E-03,4.784480203E-03,3.894824266E+00,1.879237359E-03,1.529800296E+00,2.452184446E-03,1.996209860E+00,-1.345772645E-03,-1.095531225E+00,1.183297485E-03,-5.291238194E-04,-1.509676315E-02,4.248175323E-01,4.477004707E-01,2.073964834E+00,2.070377827E+00,3.840932129E+03,1.907768101E-02,7.352339104E-03,1.250777096E-01,1.338533778E-02,3.439838067E-02,2.437299863E-02,6.723341066E-03,2.756875801E-06,6.124586239E-02,1.132090092E+01,9.876584045E-06,5.543031421E-06,9.395396337E-03,9.395396337E-03,2.009986474E-06,2.047091275E-01,1.830940843E-01,6.916885823E-02,1.973500013E+00,1.225142717E+00,4.334986582E-02,1.236842275E+00,7.678282261E-01,4.951945320E-02,1.412870526E+00,8.771066070E-01,1.117205992E-01,6.655105203E-02,6.365463883E-02,6.324955076E-02,2.383238450E-02,-3.554539580E-05,6.981952902E-05,-3.427413685E-05,8.241749601E-04,1.595686539E-03,0.000000000E+00,4.238774776E-01,4.391116454E-05,1.355839521E-01,4.790115833E+00,0.000000000E+00,8.140166849E-02,2.008574982E+02,-1.287379169E+01,9.509349823E+00,-2.620669603E-01 +5.809311271E-01,3.639076233E+02,1.166619110E+02,9.601586461E-01,3.853442967E-01,1.081171155E+00,3.084757233E+01,2.570424080E+00,2.570350170E+00,2.570317745E+00,2.570317745E+00,1.603195786E+00,7.785913086E+02,1.200000048E+00,1.936362028E+00,1.936362028E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.731260061E+00,2.570424080E+00,1.080976367E+00,3.084201622E+01,-7.382173499E-05,1.947161072E-04,5.555567797E-03,4.727681633E-03,3.848586798E+00,1.864928869E-03,1.518152356E+00,2.422932768E-03,1.972397566E+00,1.327579608E-03,1.080721140E+00,1.156062819E-03,5.181619199E-04,1.478400175E-02,1.823093276E-03,1.484095931E+00,1.484095931E+00,7.184938877E-04,5.848926306E-01,5.848926306E-01,9.328120505E-04,7.593591213E-01,7.593591213E-01,5.135531537E-04,4.180598557E-01,4.180598557E-01,4.483009689E-04,2.020038664E-04,5.763499066E-03,4.727719352E-03,3.848617792E+00,1.864950056E-03,1.518169641E+00,2.422932768E-03,1.972397566E+00,-1.327607897E-03,-1.080744267E+00,1.156068291E-03,-5.181511515E-04,-1.478369534E-02,4.190688729E-01,4.416549802E-01,2.076696873E+00,2.073146582E+00,3.845472168E+03,1.891878620E-02,7.290249690E-03,1.244024038E-01,1.322790328E-02,3.400028124E-02,2.420845442E-02,6.643895991E-03,2.756875801E-06,6.083052978E-02,1.116593552E+01,9.876584045E-06,5.543031421E-06,9.284583852E-03,9.284583852E-03,2.009986474E-06,2.038664222E-01,1.820666194E-01,6.875734031E-02,1.961758733E+00,1.217782497E+00,4.318477213E-02,1.232131839E+00,7.648592591E-01,4.922318831E-02,1.404417753E+00,8.718081117E-01,1.107359976E-01,6.594303995E-02,6.307265908E-02,6.273581833E-02,2.359512635E-02,-3.452756937E-05,6.791286432E-05,-3.338529859E-05,8.173519163E-04,1.582688419E-03,0.000000000E+00,4.180687368E-01,4.298766362E-05,1.360410601E-01,4.796736717E+00,0.000000000E+00,7.955920696E-02,2.008188324E+02,-1.244180870E+01,9.302403450E+00,-2.654502392E-01 +5.867248774E-01,3.675369873E+02,1.178031387E+02,9.600488544E-01,3.853002191E-01,1.082714915E+00,3.089161873E+01,2.570909262E+00,2.570832968E+00,2.570800543E+00,2.570800543E+00,1.603347182E+00,7.787716064E+02,1.200000048E+00,1.936617494E+00,1.936617494E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.735727549E+00,2.570909262E+00,1.082526803E+00,3.088624954E+01,-7.640625699E-05,1.881966309E-04,5.369556136E-03,4.671094473E-03,3.802521944E+00,1.850693137E-03,1.506563783E+00,2.393813338E-03,1.948692679E+00,1.309251762E-03,1.065801382E+00,1.129390439E-03,5.072596250E-04,1.447294373E-02,1.800882630E-03,1.466015339E+00,1.466015339E+00,7.129194564E-04,5.803547502E-01,5.803547502E-01,9.214760503E-04,7.501310110E-01,7.501310110E-01,5.063598510E-04,4.122041166E-01,4.122041166E-01,4.378088634E-04,1.976953208E-04,5.640569143E-03,4.671129864E-03,3.802550793E+00,1.850713394E-03,1.506580234E+00,2.393813338E-03,1.948692679E+00,-1.309278538E-03,-1.065823197E+00,1.129396260E-03,-5.072487984E-04,-1.447263267E-02,4.132750928E-01,4.355615675E-01,2.079424620E+00,2.075911045E+00,3.850015137E+03,1.876070909E-02,7.228508592E-03,1.237240732E-01,1.307195798E-02,3.360575810E-02,2.404335700E-02,6.565209478E-03,2.756875801E-06,6.041506305E-02,1.101277351E+01,9.876584045E-06,5.543031421E-06,9.174825624E-03,9.174825624E-03,2.009986474E-06,2.030153573E-01,1.810375899E-01,6.834460050E-02,1.949982643E+00,1.210403085E+00,4.301963374E-02,1.227420211E+00,7.618908882E-01,4.892647639E-02,1.395951986E+00,8.665034175E-01,1.097567081E-01,6.533651054E-02,6.249333173E-02,6.222721934E-02,2.335744910E-02,-3.352716158E-05,6.605351518E-05,-3.252635361E-05,8.107284084E-04,1.570070046E-03,0.000000000E+00,4.122125208E-01,4.207075108E-05,1.364943534E-01,4.803344727E+00,0.000000000E+00,7.773434371E-02,2.007808685E+02,-1.202591896E+01,9.098038673E+00,-2.676708102E-01 +5.925641656E-01,3.711948242E+02,1.189534683E+02,9.599416852E-01,3.852572143E-01,1.084254861E+00,3.093555641E+01,2.571387053E+00,2.571308136E+00,2.571275711E+00,2.571275711E+00,1.603496194E+00,7.789487915E+02,1.200000048E+00,1.936868906E+00,1.936868906E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.740193129E+00,2.571387053E+00,1.084072948E+00,3.093036652E+01,-7.881578495E-05,1.819271856E-04,5.190678407E-03,4.614652600E-03,3.756575346E+00,1.836507465E-03,1.495015860E+00,2.364856191E-03,1.925119996E+00,1.290760352E-03,1.050748348E+00,1.103258808E-03,4.964260734E-04,1.416384336E-02,1.778746722E-03,1.447995424E+00,1.447995424E+00,7.073679590E-04,5.758355856E-01,5.758355856E-01,9.102082113E-04,7.409583926E-01,7.409583926E-01,4.991084570E-04,4.063011408E-01,4.063011408E-01,4.275361425E-04,1.934170141E-04,5.518502090E-03,4.614685662E-03,3.756602287E+00,1.836526906E-03,1.495031595E+00,2.364856191E-03,1.925120115E+00,-1.290785614E-03,-1.050768852E+00,1.103264978E-03,-4.964150721E-04,-1.416353043E-02,4.074358046E-01,4.294199347E-01,2.082147837E+00,2.078670263E+00,3.854560059E+03,1.860344410E-02,7.167114411E-03,1.230423525E-01,1.291745342E-02,3.321469203E-02,2.387771569E-02,6.487256382E-03,2.756875801E-06,5.999928713E-02,1.086137676E+01,9.876584045E-06,5.543031421E-06,9.066087194E-03,9.066087194E-03,2.009986474E-06,2.021553665E-01,1.800069660E-01,6.793042272E-02,1.938165545E+00,1.203000784E+00,4.285444319E-02,1.222707033E+00,7.589229345E-01,4.862962291E-02,1.387482285E+00,8.611979485E-01,1.087818369E-01,6.473001093E-02,6.191676110E-02,6.172356009E-02,2.311879024E-02,-3.254694093E-05,6.424386811E-05,-3.169692718E-05,8.042982081E-04,1.557819429E-03,0.000000000E+00,4.063090682E-01,4.116027412E-05,1.369468570E-01,4.809938908E+00,0.000000000E+00,7.593131065E-02,2.007436066E+02,-1.162594604E+01,8.896198273E+00,-2.687781751E-01 +5.984493494E-01,3.748814392E+02,1.201129913E+02,9.598371387E-01,3.852152526E-01,1.085790753E+00,3.097937584E+01,2.571856976E+00,2.571775913E+00,2.571743488E+00,2.571743488E+00,1.603642821E+00,7.791229248E+02,1.200000048E+00,1.937116265E+00,1.937116265E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.744656205E+00,2.571856976E+00,1.085614800E+00,3.097435760E+01,-8.105610323E-05,1.759046281E-04,5.018845201E-03,4.558328539E-03,3.710724592E+00,1.822371152E-03,1.483508110E+00,2.336087637E-03,1.901700854E+00,1.272106427E-03,1.035562992E+00,1.077650231E-03,4.856596643E-04,1.385666057E-02,1.756674610E-03,1.430027604E+00,1.430027604E+00,7.018391625E-04,5.713347793E-01,5.713347793E-01,8.990184288E-04,7.318493128E-01,7.318493128E-01,4.917994374E-04,4.003511965E-01,4.003511965E-01,4.174755595E-04,1.891682768E-04,5.397278816E-03,4.558359738E-03,3.710749865E+00,1.822389662E-03,1.483523130E+00,2.336087637E-03,1.901700854E+00,-1.272130408E-03,-1.035582542E+00,1.077656751E-03,-4.856486339E-04,-1.385634579E-02,4.015506506E-01,4.232296944E-01,2.084865808E+00,2.081424475E+00,3.859106689E+03,1.844700612E-02,7.106071338E-03,1.223568171E-01,1.276433002E-02,3.282693774E-02,2.371154912E-02,6.410006899E-03,2.756875801E-06,5.958300829E-02,1.071169949E+01,9.876584045E-06,5.543031421E-06,8.958326653E-03,8.958326653E-03,2.009986474E-06,2.012858093E-01,1.789747328E-01,6.751458347E-02,1.926300883E+00,1.195571423E+00,4.268918931E-02,1.217992067E+00,7.559552193E-01,4.833288863E-02,1.379016042E+00,8.558964729E-01,1.078109443E-01,6.412260979E-02,6.134306267E-02,6.122492626E-02,2.287850715E-02,-3.158862091E-05,6.248399586E-05,-3.089537495E-05,7.980666123E-04,1.545947045E-03,0.000000000E+00,4.003587067E-01,4.025609815E-05,1.374022514E-01,4.816518307E+00,0.000000000E+00,7.415392995E-02,2.007070312E+02,-1.124169064E+01,8.696829796E+00,-2.689100206E-01 +6.043807268E-01,3.785969849E+02,1.212817764E+02,9.597351551E-01,3.851743340E-01,1.087322116E+00,3.102306938E+01,2.572319269E+00,2.572236061E+00,2.572203636E+00,2.572203636E+00,1.603787065E+00,7.792940063E+02,1.200000048E+00,1.937359810E+00,1.937359810E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.749115705E+00,2.572319269E+00,1.087152004E+00,3.101821518E+01,-8.313293074E-05,1.701258007E-04,4.853966180E-03,4.502096213E-03,3.664948225E+00,1.808284083E-03,1.472040415E+00,2.307525370E-03,1.878449678E+00,1.253291499E-03,1.020246625E+00,1.052547945E-03,4.749594082E-04,1.355136465E-02,1.734655933E-03,1.412103176E+00,1.412103176E+00,6.963328342E-04,5.668523312E-01,5.668523312E-01,8.879135130E-04,7.228093147E-01,7.228093147E-01,4.844331997E-04,3.943546712E-01,3.943546712E-01,4.076202167E-04,1.849486434E-04,5.276885815E-03,4.502125084E-03,3.664971828E+00,1.808301779E-03,1.472054839E+00,2.307525370E-03,1.878449678E+00,-1.253314083E-03,-1.020264983E+00,1.052554813E-03,-4.749483487E-04,-1.355104893E-02,3.956192732E-01,4.169905484E-01,2.087578058E+00,2.084172487E+00,3.863653564E+03,1.829142123E-02,7.045389619E-03,1.216670796E-01,1.261253189E-02,3.244235367E-02,2.354488336E-02,6.333431695E-03,2.756875801E-06,5.916603282E-02,1.056370068E+01,9.876584045E-06,5.543031421E-06,8.851502091E-03,8.851502091E-03,2.009986474E-06,2.004060447E-01,1.779407114E-01,6.709684432E-02,1.914382219E+00,1.188110948E+00,4.252387211E-02,1.213275313E+00,7.529877424E-01,4.803647473E-02,1.370558739E+00,8.506022692E-01,1.068439633E-01,6.351406127E-02,6.077234074E-02,6.073132902E-02,2.263588086E-02,-3.065416604E-05,6.077460057E-05,-3.012043635E-05,7.920248900E-04,1.534436480E-03,0.000000000E+00,3.943617642E-01,3.935811037E-05,1.378648728E-01,4.823081493E+00,0.000000000E+00,7.240524143E-02,2.006711578E+02,-1.087295723E+01,8.499876976E+00,-2.682422698E-01 +6.103587151E-01,3.823417053E+02,1.224598999E+02,9.596357942E-01,3.851344585E-01,1.088848829E+00,3.106662750E+01,2.572773933E+00,2.572689056E+00,2.572656393E+00,2.572656393E+00,1.603929043E+00,7.794620972E+02,1.200000048E+00,1.937599301E+00,1.937599301E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.753570557E+00,2.572773933E+00,1.088684201E+00,3.106193161E+01,-8.505167352E-05,1.645875454E-04,4.695950542E-03,4.445931874E-03,3.619227409E+00,1.794246957E-03,1.460613489E+00,2.279178472E-03,1.855373859E+00,1.234316849E-03,1.004800320E+00,1.027937746E-03,4.643246066E-04,1.324793696E-02,1.712681609E-03,1.394214869E+00,1.394214869E+00,6.908491487E-04,5.623883605E-01,5.623883605E-01,8.768967236E-04,7.138410807E-01,7.138410807E-01,4.770102096E-04,3.883119524E-01,3.883119524E-01,3.979642643E-04,1.807577501E-04,5.157312844E-03,4.445958883E-03,3.619249582E+00,1.794263837E-03,1.460627198E+00,2.279178472E-03,1.855373859E+00,-1.234338270E-03,-1.004817724E+00,1.027944963E-03,-4.643135471E-04,-1.324762125E-02,3.896412849E-01,4.107021093E-01,2.090284109E+00,2.086914301E+00,3.868199463E+03,1.813671924E-02,6.985079031E-03,1.209727451E-01,1.246201340E-02,3.206082806E-02,2.337775752E-02,6.257508416E-03,2.756875801E-06,5.874817446E-02,1.041734886E+01,9.876584045E-06,5.543031421E-06,8.745584637E-03,8.745584637E-03,2.009986474E-06,1.995154619E-01,1.769047529E-01,6.667700410E-02,1.902403474E+00,1.180615544E+00,4.235849902E-02,1.208557010E+00,7.500206232E-01,4.774047434E-02,1.362113357E+00,8.453171253E-01,1.058811098E-01,6.290482730E-02,6.020468473E-02,6.024257094E-02,2.239015512E-02,-2.974513882E-05,5.911606786E-05,-2.937093086E-05,7.861646591E-04,1.523271436E-03,0.000000000E+00,3.883186579E-01,3.846624531E-05,1.383395642E-01,4.829627514E+00,0.000000000E+00,7.068748772E-02,2.006359558E+02,-1.051954556E+01,8.305279732E+00,-2.669261098E-01 +6.163836122E-01,3.861158447E+02,1.236474457E+02,9.595389366E-01,3.850955665E-01,1.090370297E+00,3.111004066E+01,2.573221207E+00,2.573134422E+00,2.573101997E+00,2.573101997E+00,1.604068637E+00,7.796271362E+02,1.200000048E+00,1.937834859E+00,1.937834859E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.758019328E+00,2.573221207E+00,1.090211034E+00,3.110549545E+01,-8.681725012E-05,1.592864719E-04,4.544702359E-03,4.389817361E-03,3.573547363E+00,1.780261751E-03,1.449228764E+00,2.251047408E-03,1.832473516E+00,1.215184107E-03,9.892252088E-01,1.003809273E-03,4.537549394E-04,1.294636633E-02,1.690744190E-03,1.376356602E+00,1.376356602E+00,6.853888626E-04,5.579433441E-01,5.579433441E-01,8.659680025E-04,7.049445510E-01,7.049445510E-01,4.695309035E-04,3.822233975E-01,3.822233975E-01,3.885032493E-04,1.765953639E-04,5.038552918E-03,4.389842506E-03,3.573567867E+00,1.780277817E-03,1.449241877E+00,2.251047408E-03,1.832473516E+00,-1.215204364E-03,-9.892416596E-01,1.003816724E-03,-4.537439090E-04,-1.294605248E-02,3.836163580E-01,4.043639600E-01,2.092983246E+00,2.089648485E+00,3.872743164E+03,1.798293181E-02,6.925150752E-03,1.202735156E-01,1.231275313E-02,3.168231249E-02,2.321021073E-02,6.182224955E-03,2.756875801E-06,5.832927674E-02,1.027263355E+01,9.876584045E-06,5.543031421E-06,8.640556596E-03,8.640556596E-03,2.009986474E-06,1.986134499E-01,1.758666188E-01,6.625487655E-02,1.890359521E+00,1.173081875E+00,4.219309613E-02,1.203837633E+00,7.470541596E-01,4.744489864E-02,1.353680134E+00,8.400411606E-01,1.049227417E-01,6.229589134E-02,5.964014307E-02,5.975817889E-02,2.214054391E-02,-2.886202674E-05,5.750727360E-05,-2.864524504E-05,7.804750348E-04,1.512431074E-03,0.000000000E+00,3.822297454E-01,3.758044841E-05,1.388315707E-01,4.836153984E+00,0.000000000E+00,6.900203228E-02,2.006014404E+02,-1.018124390E+01,8.112971306E+00,-2.650473118E-01 +6.224558949E-01,3.899196472E+02,1.248444824E+02,9.594445825E-01,3.850577176E-01,1.091886282E+00,3.115329361E+01,2.573661089E+00,2.573572636E+00,2.573540211E+00,2.573540211E+00,1.604205847E+00,7.797891846E+02,1.200000048E+00,1.938066602E+00,1.938066602E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.762460589E+00,2.573661089E+00,1.091732025E+00,3.114889336E+01,-8.843406977E-05,1.542187092E-04,4.400110804E-03,4.333739169E-03,3.527896881E+00,1.766331610E-03,1.437888861E+00,2.223125892E-03,1.809744120E+00,1.195894438E-03,9.735223055E-01,9.801554261E-04,4.432504938E-04,1.264665741E-02,1.668838086E-03,1.358523965E+00,1.358523965E+00,6.799530238E-04,5.535182953E-01,5.535182953E-01,8.551249630E-04,6.961176991E-01,6.961176991E-01,4.619957181E-04,3.760893345E-01,3.760893345E-01,3.792341158E-04,1.724614558E-04,4.920606036E-03,4.333762918E-03,3.527916193E+00,1.766346977E-03,1.437901378E+00,2.223125892E-03,1.809744120E+00,-1.195913530E-03,-9.735378623E-01,9.801633423E-04,-4.432395217E-04,-1.264634449E-02,3.775441051E-01,3.979756534E-01,2.095674276E+00,2.092374802E+00,3.877282471E+03,1.783008687E-02,6.865615956E-03,1.195691377E-01,1.216474641E-02,3.130680695E-02,2.304228581E-02,6.107580382E-03,2.756875801E-06,5.790919811E-02,1.012956047E+01,9.876584045E-06,5.543031421E-06,8.536416106E-03,8.536416106E-03,2.009986474E-06,1.976994872E-01,1.748261005E-01,6.583032012E-02,1.878246188E+00,1.165507674E+00,4.202769324E-02,1.199118495E+00,7.440890670E-01,4.714970291E-02,1.345257759E+00,8.347734809E-01,1.039691940E-01,6.168836355E-02,5.907879397E-02,5.927749723E-02,2.188631520E-02,-2.800373113E-05,5.594451432E-05,-2.794078318E-05,7.749495562E-04,1.501903287E-03,0.000000000E+00,3.760953546E-01,3.670071237E-05,1.393460780E-01,4.842659950E+00,0.000000000E+00,6.734914333E-02,2.005675964E+02,-9.857808113E+00,7.922884464E+00,-2.626262009E-01 +6.285758615E-01,3.937532959E+02,1.260510788E+02,9.593526721E-01,3.850208223E-01,1.093396187E+00,3.119637108E+01,2.574093580E+00,2.574003458E+00,2.573971033E+00,2.573971033E+00,1.604340911E+00,7.799483032E+02,1.200000048E+00,1.938294530E+00,1.938294530E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.766892433E+00,2.574093580E+00,1.093246698E+00,3.119211006E+01,-8.990633796E-05,1.493795135E-04,4.262040369E-03,4.277688451E-03,3.482268572E+00,1.752461307E-03,1.426597714E+00,2.195405774E-03,1.787178397E+00,1.176448655E-03,9.576924443E-01,9.569725371E-04,4.328119685E-04,1.234882977E-02,1.646959339E-03,1.340713501E+00,1.340713501E+00,6.745433784E-04,5.491145849E-01,5.491145849E-01,8.443639963E-04,6.873577237E-01,6.873577237E-01,4.544048570E-04,3.699099720E-01,3.699099720E-01,3.701549431E-04,1.683562004E-04,4.803476389E-03,4.277710803E-03,3.482286692E+00,1.752475975E-03,1.426609635E+00,2.195405774E-03,1.787178397E+00,-1.176466700E-03,-9.577071071E-01,9.569806280E-04,-4.328010837E-04,-1.234851964E-02,3.714241683E-01,3.915368021E-01,2.098356485E+00,2.095091820E+00,3.881815674E+03,1.767821051E-02,6.806482561E-03,1.188593954E-01,1.201801002E-02,3.093434870E-02,2.287403308E-02,6.033582147E-03,2.756875801E-06,5.748783052E-02,9.988152504E+00,9.876584045E-06,5.543031421E-06,8.433173411E-03,8.433173411E-03,2.009986474E-06,1.967731118E-01,1.737830043E-01,6.540322304E-02,1.866060257E+00,1.157890439E+00,4.186235741E-02,1.194401145E+00,7.411262989E-01,4.685479403E-02,1.336843491E+00,8.295124769E-01,1.030206904E-01,6.108297408E-02,5.852071568E-02,5.880007520E-02,2.162683010E-02,-2.716759991E-05,5.442144175E-05,-2.725384184E-05,7.695854874E-04,1.491682720E-03,0.000000000E+00,3.699156344E-01,3.582707723E-05,1.398878694E-01,4.849142075E+00,0.000000000E+00,6.572777778E-02,2.005344086E+02,-9.548940659E+00,7.734954357E+00,-2.596453428E-01 +6.347438693E-01,3.976170654E+02,1.272673264E+02,9.592631459E-01,3.849849105E-01,1.094899297E+00,3.123925972E+01,2.574518681E+00,2.574427366E+00,2.574394703E+00,2.574394703E+00,1.604473710E+00,7.801045532E+02,1.200000048E+00,1.938518643E+00,1.938518643E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.771313071E+00,2.574518681E+00,1.094754577E+00,3.123512840E+01,-9.123835480E-05,1.447631803E-04,4.130329005E-03,4.221658222E-03,3.436656713E+00,1.738657127E-03,1.415360451E+00,2.167877741E-03,1.764769077E+00,1.156847226E-03,9.417358637E-01,9.342576377E-04,4.224407603E-04,1.205292251E-02,1.625104691E-03,1.322922587E+00,1.322922587E+00,6.691624294E-04,5.447341800E-01,5.447341800E-01,8.336814353E-04,6.786615252E-01,6.786615252E-01,4.467584076E-04,3.636853695E-01,3.636853695E-01,3.612642759E-04,1.642800198E-04,4.687176086E-03,4.221679177E-03,3.436673880E+00,1.738671097E-03,1.415371776E+00,2.167877741E-03,1.764769077E+00,-1.156864339E-03,-9.417497516E-01,9.342659614E-04,-4.224299919E-04,-1.205261517E-02,3.652561307E-01,3.850469589E-01,2.101028681E+00,2.097798347E+00,3.886340088E+03,1.752732694E-02,6.747759879E-03,1.181441247E-01,1.187256631E-02,3.056500852E-02,2.270550653E-02,5.960242357E-03,2.756875801E-06,5.706507340E-02,9.848434448E+00,9.876584045E-06,5.543031421E-06,8.330846205E-03,8.330846205E-03,2.009986474E-06,1.958339065E-01,1.727371514E-01,6.497346610E-02,1.853798747E+00,1.150228500E+00,4.169715568E-02,1.189687610E+00,7.381671071E-01,4.656008631E-02,1.328435063E+00,8.242565989E-01,1.020772606E-01,6.047975644E-02,5.796602741E-02,5.832578987E-02,2.136158943E-02,-2.635029523E-05,5.293068534E-05,-2.658038829E-05,7.643830613E-04,1.481770189E-03,0.000000000E+00,3.636907339E-01,3.495963392E-05,1.404611170E-01,4.855598927E+00,0.000000000E+00,6.413541734E-02,2.005018616E+02,-9.254278183E+00,7.549125671E+00,-2.560799718E-01 +6.409603357E-01,4.015112000E+02,1.284933014E+02,9.591759443E-01,3.849498928E-01,1.096395135E+00,3.128193855E+01,2.574936390E+00,2.574843884E+00,2.574811459E+00,2.574811459E+00,1.604604244E+00,7.802578735E+02,1.200000048E+00,1.938738942E+00,1.938738942E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.775720358E+00,2.574936390E+00,1.096254826E+00,3.127793312E+01,-9.243455133E-05,1.403630449E-04,4.004785791E-03,4.165643826E-03,3.391057968E+00,1.724926871E-03,1.404183269E+00,2.140534110E-03,1.742509723E+00,1.137090265E-03,9.256526232E-01,9.120085160E-04,4.121387610E-04,1.175898965E-02,1.603271463E-03,1.305149198E+00,1.305149198E+00,6.638129125E-04,5.403794050E-01,5.403794050E-01,8.230739622E-04,6.700264215E-01,6.700264215E-01,4.390563117E-04,3.574154377E-01,3.574154377E-01,3.525608336E-04,1.602335687E-04,4.571724683E-03,4.165663384E-03,3.391073942E+00,1.724940143E-03,1.404193997E+00,2.140534110E-03,1.742509723E+00,-1.137106447E-03,-9.256657958E-01,9.120170143E-04,-4.121281090E-04,-1.175868604E-02,3.590396643E-01,3.785056770E-01,2.103689432E+00,2.100493670E+00,3.890853760E+03,1.737746038E-02,6.689454895E-03,1.174231693E-01,1.172844414E-02,3.019886464E-02,2.253676392E-02,5.887574516E-03,2.756875801E-06,5.664085224E-02,9.710435867E+00,9.876584045E-06,5.543031421E-06,8.229454048E-03,8.229454048E-03,2.009986474E-06,1.948814690E-01,1.716884524E-01,6.454097480E-02,1.841459036E+00,1.142520189E+00,4.153218493E-02,1.184980869E+00,7.352132797E-01,4.626550153E-02,1.320030093E+00,8.190042973E-01,1.011386514E-01,5.987820402E-02,5.741481483E-02,5.785463750E-02,2.109021507E-02,-2.554872299E-05,5.146576950E-05,-2.591704651E-05,7.593415794E-04,1.472164528E-03,0.000000000E+00,3.574205041E-01,3.409851706E-05,1.410693377E-01,4.862027645E+00,0.000000000E+00,6.256848574E-02,2.004699707E+02,-8.973399162E+00,7.365353584E+00,-2.519264519E-01 +6.472256184E-01,4.054359131E+02,1.297290649E+02,9.590910673E-01,3.849158287E-01,1.097883105E+00,3.132439232E+01,2.575346947E+00,2.575253487E+00,2.575221062E+00,2.575221062E+00,1.604732513E+00,7.804083862E+02,1.200000048E+00,1.938955426E+00,1.938955426E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.780112267E+00,2.575346947E+00,1.097746968E+00,3.132050705E+01,-9.349933680E-05,1.361717441E-04,3.885201411E-03,4.109642003E-03,3.345469475E+00,1.711279619E-03,1.393073559E+00,2.113367431E-03,1.720394731E+00,1.117177424E-03,9.094424248E-01,8.902229602E-04,4.019082407E-04,1.146709640E-02,1.581457909E-03,1.287391782E+00,1.287391782E+00,6.584983203E-04,5.360530615E-01,5.360530615E-01,8.125387831E-04,6.614502668E-01,6.614502668E-01,4.312983074E-04,3.510999978E-01,3.510999978E-01,3.440434230E-04,1.562176185E-04,4.457143135E-03,4.109660629E-03,3.345484734E+00,1.711292192E-03,1.393083811E+00,2.113367431E-03,1.720394731E+00,-1.117192674E-03,-9.094548821E-01,8.902316913E-04,-4.018977343E-04,-1.146679651E-02,3.527743816E-01,3.719124794E-01,2.106337786E+00,2.103176117E+00,3.895354248E+03,1.722863689E-02,6.631578319E-03,1.166964173E-01,1.158567145E-02,2.983599529E-02,2.236786857E-02,5.815593060E-03,2.756875801E-06,5.621509627E-02,9.574185371E+00,9.876584045E-06,5.543031421E-06,8.129015565E-03,8.129015565E-03,2.009986474E-06,1.939155310E-01,1.706368178E-01,6.410566717E-02,1.829039097E+00,1.134764075E+00,4.136756063E-02,1.180283785E+00,7.322666049E-01,4.597096145E-02,1.311626315E+00,8.137542009E-01,1.002046838E-01,5.927781761E-02,5.686715245E-02,5.738675967E-02,2.081247605E-02,-2.476063673E-05,5.002237958E-05,-2.526174285E-05,7.544584223E-04,1.462860848E-03,0.000000000E+00,3.511047959E-01,3.324389399E-05,1.417153478E-01,4.868424892E+00,0.000000000E+00,6.102311239E-02,2.004387054E+02,-8.705836296E+00,7.183600426E+00,-2.472322136E-01 +6.535401344E-01,4.093914490E+02,1.309747162E+02,9.590083361E-01,3.848826289E-01,1.099362493E+00,3.136660004E+01,2.575750351E+00,2.575655937E+00,2.575623512E+00,2.575623512E+00,1.604858518E+00,7.805560913E+02,1.200000048E+00,1.939168215E+00,1.939168215E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.784486532E+00,2.575750351E+00,1.099230289E+00,3.136282921E+01,-9.443685849E-05,1.321817836E-04,3.771361429E-03,4.053651821E-03,3.299890280E+00,1.697725267E-03,1.382039666E+00,2.086371416E-03,1.698418498E+00,1.097107539E-03,8.931045532E-01,8.688993403E-04,3.917513823E-04,1.117730420E-02,1.559662633E-03,1.269649267E+00,1.269649267E+00,6.532224943E-04,5.317582488E-01,5.317582488E-01,8.020733367E-04,6.529307961E-01,6.529307961E-01,4.234839289E-04,3.447386920E-01,3.447386920E-01,3.357111418E-04,1.522329403E-04,4.343453795E-03,4.053669050E-03,3.299904585E+00,1.697737258E-03,1.382049441E+00,2.086371416E-03,1.698418498E+00,-1.097122091E-03,-8.931163549E-01,8.689082460E-04,-3.917410213E-04,-1.117700897E-02,3.464598656E-01,3.652669787E-01,2.108972549E+00,2.105844498E+00,3.899838867E+03,1.708089001E-02,6.574141793E-03,1.159637347E-01,1.144428458E-02,2.947649360E-02,2.219889313E-02,5.744315218E-03,2.756875801E-06,5.578775704E-02,9.439720154E+00,9.876584045E-06,5.543031421E-06,8.029555902E-03,8.029555902E-03,2.009986474E-06,1.929358095E-01,1.695822030E-01,6.366747618E-02,1.816536665E+00,1.126958847E+00,4.120340571E-02,1.175600290E+00,7.293294072E-01,4.567639530E-02,1.303221941E+00,8.085051179E-01,9.927570820E-02,5.867859349E-02,5.632308871E-02,5.692269281E-02,2.052827738E-02,-2.398460856E-05,4.859816181E-05,-2.461355143E-05,7.497304468E-04,1.453852979E-03,0.000000000E+00,3.447432220E-01,3.239592479E-05,1.424011886E-01,4.874788284E+00,0.000000000E+00,5.949572474E-02,2.004080811E+02,-8.451111794E+00,7.003832340E+00,-2.421137989E-01 +6.599042416E-01,4.133780823E+02,1.322303314E+02,9.589278102E-01,3.848503232E-01,1.100832462E+00,3.140854263E+01,2.576146603E+00,2.576051235E+00,2.576018810E+00,2.576018810E+00,1.604982376E+00,7.807009277E+02,1.200000048E+00,1.939377189E+00,1.939377189E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.788841009E+00,2.576146603E+00,1.100704193E+00,3.140488052E+01,-9.525105997E-05,1.283861784E-04,3.663066542E-03,3.997672349E-03,3.254320145E+00,1.684274757E-03,1.371090174E+00,2.059540013E-03,1.676576257E+00,1.076879678E-03,8.766379952E-01,8.480362594E-04,3.816701646E-04,1.088967081E-02,1.537885168E-03,1.251921177E+00,1.251921177E+00,6.479894510E-04,5.274982452E-01,5.274982452E-01,7.916752947E-04,6.444662809E-01,6.444662809E-01,4.156127106E-04,3.383311033E-01,3.383311033E-01,3.275632043E-04,1.482802036E-04,4.230675288E-03,3.997688647E-03,3.254333735E+00,1.684286166E-03,1.371099472E+00,2.059540013E-03,1.676576257E+00,-1.076893415E-03,-8.766491413E-01,8.480453398E-04,-3.816599783E-04,-1.088938024E-02,3.400957584E-01,3.585686982E-01,2.111592531E+00,2.108497858E+00,3.904305176E+03,1.693425514E-02,6.517156959E-03,1.152250245E-01,1.130431890E-02,2.912046202E-02,2.202990092E-02,5.673760083E-03,2.756875801E-06,5.535878986E-02,9.307079315E+00,9.876584045E-06,5.543031421E-06,7.931101136E-03,7.931101136E-03,2.009986474E-06,1.919420958E-01,1.685246080E-01,6.322633475E-02,1.803950191E+00,1.119103312E+00,4.103986174E-02,1.170933962E+00,7.264040709E-01,4.538173601E-02,1.294814825E+00,8.032557368E-01,9.835262597E-02,5.808105692E-02,5.578264222E-02,5.646345764E-02,2.023761719E-02,-2.321986904E-05,4.719217759E-05,-2.397230855E-05,7.451553247E-04,1.445136848E-03,0.000000000E+00,3.383353949E-01,3.155475497E-05,1.431284696E-01,4.881114960E+00,0.000000000E+00,5.798335746E-02,2.003780670E+02,-8.208782196E+00,6.826014519E+00,-2.367420048E-01 +6.663182974E-01,4.173959961E+02,1.334959869E+02,9.588494301E-01,3.848188818E-01,1.102292657E+00,3.145020103E+01,2.576535463E+00,2.576439619E+00,2.576406956E+00,2.576406956E+00,1.605103970E+00,7.808429565E+02,1.200000048E+00,1.939582467E+00,1.939582467E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.793173194E+00,2.576535463E+00,1.102167845E+00,3.144664192E+01,-9.594595031E-05,1.247789478E-04,3.560146317E-03,3.941704985E-03,3.208759785E+00,1.670938800E-03,1.360234022E+00,2.032868797E-03,1.654864550E+00,1.056492561E-03,8.600417972E-01,8.276318549E-04,3.716662177E-04,1.060424186E-02,1.516125281E-03,1.234207511E+00,1.234207511E+00,6.428033230E-04,5.232764482E-01,5.232764482E-01,7.813432021E-04,6.360553503E-01,6.360553503E-01,4.076840705E-04,3.318767548E-01,3.318767548E-01,3.195986210E-04,1.443599467E-04,4.118823912E-03,3.941720817E-03,3.208772659E+00,1.670949627E-03,1.360242844E+00,2.032868797E-03,1.654864550E+00,-1.056505600E-03,-8.600523472E-01,8.276410517E-04,-3.716562351E-04,-1.060395688E-02,3.336816728E-01,3.518172503E-01,2.114195824E+00,2.111134529E+00,3.908750488E+03,1.678876020E-02,6.460634992E-03,1.144801602E-01,1.116581168E-02,2.876799740E-02,2.186096087E-02,5.603944417E-03,2.756875801E-06,5.492817611E-02,9.176301956E+00,9.876584045E-06,5.543031421E-06,7.833676413E-03,7.833676413E-03,2.009986474E-06,1.909341663E-01,1.674640328E-01,6.278219074E-02,1.791278005E+00,1.111196637E+00,4.087706283E-02,1.166289091E+00,7.234929204E-01,4.508693889E-02,1.286403656E+00,7.980051637E-01,9.743642062E-02,5.748568103E-02,5.524581671E-02,5.601024628E-02,1.994050108E-02,-2.246599615E-05,4.580408131E-05,-2.333808516E-05,7.407323574E-04,1.436711056E-03,0.000000000E+00,3.318808079E-01,3.072049731E-05,1.438988745E-01,4.887401581E+00,0.000000000E+00,5.648379028E-02,2.003486786E+02,-7.978469372E+00,6.650110722E+00,-2.313040346E-01 +6.727827787E-01,4.214454651E+02,1.347717896E+02,9.587731957E-01,3.847882450E-01,1.103742003E+00,3.149155426E+01,2.576916933E+00,2.576820374E+00,2.576787949E+00,2.576787949E+00,1.605223179E+00,7.809821777E+02,1.200000048E+00,1.939783812E+00,1.939783812E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.797480941E+00,2.576916933E+00,1.103620648E+00,3.148809242E+01,-9.652590961E-05,1.213552750E-04,3.462463617E-03,3.885752289E-03,3.163211346E+00,1.657727989E-03,1.349479795E+00,2.006356604E-03,1.633282185E+00,1.035945141E-03,8.433150053E-01,8.076831000E-04,3.617407929E-04,1.032105368E-02,1.494383905E-03,1.216508865E+00,1.216508865E+00,6.376680685E-04,5.190960765E-01,5.190960765E-01,7.710765349E-04,6.276977658E-01,6.276977658E-01,3.996974847E-04,3.253752291E-01,3.253752291E-01,3.118159657E-04,1.404725626E-04,4.007910844E-03,3.885767190E-03,3.163223267E+00,1.657738350E-03,1.349488139E+00,2.006356604E-03,1.633282185E+00,-1.035957364E-03,-8.433250189E-01,8.076924132E-04,-3.617310140E-04,-1.032077521E-02,3.272172213E-01,3.450121284E-01,2.116781712E+00,2.113753319E+00,3.913172363E+03,1.664442383E-02,6.404581945E-03,1.137290299E-01,1.102879271E-02,2.841917612E-02,2.169213444E-02,5.534883589E-03,2.756875801E-06,5.449590459E-02,9.047414780E+00,9.876584045E-06,5.543031421E-06,7.737301756E-03,7.737301756E-03,2.009986474E-06,1.899118125E-01,1.664005369E-01,6.233499944E-02,1.778519034E+00,1.103237748E+00,4.071515054E-02,1.161669493E+00,7.205985785E-01,4.479197413E-02,1.277987957E+00,7.927529812E-01,9.652762860E-02,5.689245462E-02,5.471259356E-02,5.556400493E-02,1.963689364E-02,-2.172269524E-05,4.443361468E-05,-2.271092126E-05,7.364616031E-04,1.428575953E-03,0.000000000E+00,3.253791034E-01,2.989323912E-05,1.447146386E-01,4.893644810E+00,0.000000000E+00,5.499555916E-02,2.003199158E+02,-7.759866238E+00,6.476083279E+00,-2.259760499E-01 +6.792980433E-01,4.255267639E+02,1.360578003E+02,9.586989880E-01,3.847584724E-01,1.105179906E+00,3.153258324E+01,2.577291250E+00,2.577194214E+00,2.577161551E+00,2.577161551E+00,1.605340242E+00,7.811185303E+02,1.200000048E+00,1.939981341E+00,1.939981341E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.801761627E+00,2.577291250E+00,1.105061889E+00,3.152921295E+01,-9.699564544E-05,1.181113039E-04,3.369907849E-03,3.829818685E-03,3.117678165E+00,1.644652220E-03,1.338835359E+00,1.980004366E-03,1.611829996E+00,1.015236252E-03,8.264568448E-01,7.881856873E-04,3.518948797E-04,1.004013419E-02,1.472662552E-03,1.198826432E+00,1.198826432E+00,6.325874710E-04,5.149602294E-01,5.149602294E-01,7.608757587E-04,6.193937659E-01,6.193937659E-01,3.916525166E-04,3.188261986E-01,3.188261986E-01,3.042133758E-04,1.366183569E-04,3.897944232E-03,3.829832654E-03,3.117689610E+00,1.644661999E-03,1.338843226E+00,1.980004366E-03,1.611829996E+00,-1.015247894E-03,-8.264663219E-01,7.881951169E-04,-3.518853337E-04,-1.003986131E-02,3.207019567E-01,3.381529152E-01,2.119348764E+00,2.116353035E+00,3.917568359E+03,1.650124975E-02,6.348998751E-03,1.129715368E-01,1.089328155E-02,2.807406336E-02,2.152347751E-02,5.466587376E-03,2.756875801E-06,5.406199023E-02,8.920431137E+00,9.876584045E-06,5.543031421E-06,7.641992066E-03,7.641992066E-03,2.009986474E-06,1.888748556E-01,1.653342545E-01,6.188473478E-02,1.765672207E+00,1.095226407E+00,4.055425525E-02,1.157078862E+00,7.177231908E-01,4.449686036E-02,1.269567847E+00,7.874993682E-01,9.562633932E-02,5.630098656E-02,5.418294296E-02,5.512529984E-02,1.932671480E-02,-2.098994082E-05,4.308105053E-05,-2.209110971E-05,7.323455648E-04,1.420736429E-03,0.000000000E+00,3.188298345E-01,2.907304224E-05,1.455785781E-01,4.899841785E+00,0.000000000E+00,5.351785943E-02,2.002917633E+02,-7.552728176E+00,6.303894520E+00,-2.209193408E-01 +6.858644485E-01,4.296401062E+02,1.373541260E+02,9.586268067E-01,3.847295046E-01,1.106605768E+00,3.157326317E+01,2.577657938E+00,2.577560425E+00,2.577528000E+00,2.577528000E+00,1.605454922E+00,7.812520752E+02,1.200000048E+00,1.940174937E+00,1.940174937E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.806013107E+00,2.577657938E+00,1.106490731E+00,3.156998062E+01,-9.736014908E-05,1.150435419E-04,3.282379592E-03,3.773910459E-03,3.072165966E+00,1.631720341E-03,1.328308105E+00,1.953815110E-03,1.590510607E+00,9.943650803E-04,8.094666004E-01,7.691346691E-04,3.421291767E-04,9.761502035E-03,1.450963551E-03,1.181162357E+00,1.181162357E+00,6.275649648E-04,5.108715892E-01,5.108715892E-01,7.507420960E-04,6.111444235E-01,6.111444235E-01,3.835486714E-04,3.122292459E-01,3.122292459E-01,2.967886685E-04,1.327975333E-04,3.788929898E-03,3.773923730E-03,3.072176695E+00,1.631729654E-03,1.328315616E+00,1.953815343E-03,1.590510607E+00,-9.943761397E-04,-8.094756007E-01,7.691440987E-04,-3.421198344E-04,-9.761235677E-03,3.141355217E-01,3.312391043E-01,2.121895313E+00,2.118931770E+00,3.921935791E+03,1.635922678E-02,6.293880288E-03,1.122076362E-01,1.075929776E-02,2.773270197E-02,2.135503478E-02,5.399064161E-03,2.756875801E-06,5.362646282E-02,8.795352936E+00,9.876584045E-06,5.543031421E-06,7.547758985E-03,7.547758985E-03,2.009986474E-06,1.878231317E-01,1.642652899E-01,6.143137813E-02,1.752737164E+00,1.087162018E+00,4.039449990E-02,1.152520895E+00,7.148689628E-01,4.420161992E-02,1.261144161E+00,7.822448015E-01,9.473248571E-02,5.571085215E-02,5.365686119E-02,5.469441786E-02,1.900987141E-02,-2.026835682E-05,4.174810965E-05,-2.147975465E-05,7.283900632E-04,1.413203892E-03,0.000000000E+00,3.122327030E-01,2.825994852E-05,1.464938670E-01,4.905988693E+00,0.000000000E+00,5.205052346E-02,2.002642365E+02,-7.356834412E+00,6.133504391E+00,-2.162834853E-01 +6.924824715E-01,4.337857666E+02,1.386608429E+02,9.585566521E-01,3.847013414E-01,1.108018517E+00,3.161357307E+01,2.578016996E+00,2.577919483E+00,2.577886820E+00,2.577886820E+00,1.605567217E+00,7.813826904E+02,1.200000048E+00,1.940364718E+00,1.940364718E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.810232520E+00,2.578016996E+00,1.107906461E+00,3.161037254E+01,-9.762453556E-05,1.121481619E-04,3.199769650E-03,3.718036693E-03,3.026681900E+00,1.618940500E-03,1.317904592E+00,1.927793608E-03,1.569327712E+00,9.733305778E-04,7.923434377E-01,7.505240501E-04,3.324441786E-04,9.485173039E-03,1.429290161E-03,1.163519025E+00,1.163519025E+00,6.226035184E-04,5.068327188E-01,5.068327188E-01,7.406772929E-04,6.029511094E-01,6.029511094E-01,3.753854835E-04,3.055839539E-01,3.055839539E-01,2.895393118E-04,1.290102082E-04,3.680871101E-03,3.718049265E-03,3.026692152E+00,1.618949114E-03,1.317911625E+00,1.927793724E-03,1.569327712E+00,-9.733410552E-04,-7.923519611E-01,7.505335961E-04,-3.324350691E-04,-9.484913200E-03,3.075175285E-01,3.242702484E-01,2.124419928E+00,2.121488571E+00,3.926271729E+03,1.621833071E-02,6.239216775E-03,1.114373058E-01,1.062685065E-02,2.739512734E-02,2.118684724E-02,5.332319066E-03,2.756875801E-06,5.318935961E-02,8.672172546E+00,9.876584045E-06,5.543031421E-06,7.454609964E-03,7.454609964E-03,2.009986474E-06,1.867565960E-01,1.631938517E-01,6.097493693E-02,1.739714146E+00,1.079044819E+00,4.023599997E-02,1.147998571E+00,7.120379210E-01,4.390630126E-02,1.252718329E+00,7.769900560E-01,9.384613484E-02,5.512189120E-02,5.313437805E-02,5.427160487E-02,1.868629456E-02,-1.955890002E-05,4.043746594E-05,-2.087856592E-05,7.246006280E-04,1.405989286E-03,0.000000000E+00,3.055872321E-01,2.745398342E-05,1.474637836E-01,4.912082195E+00,0.000000000E+00,5.059400946E-02,2.002373199E+02,-7.171942234E+00,5.964866161E+00,-2.122000605E-01 +6.991524696E-01,4.379639893E+02,1.399780426E+02,9.584885240E-01,3.846740127E-01,1.109417677E+00,3.165349007E+01,2.578368664E+00,2.578270912E+00,2.578238487E+00,2.578238487E+00,1.605677247E+00,7.815104980E+02,1.200000048E+00,1.940550447E+00,1.940550447E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.814417362E+00,2.578368664E+00,1.109308243E+00,3.165036774E+01,-9.779397806E-05,1.094206818E-04,3.121950198E-03,3.662208561E-03,2.981234550E+00,1.606319449E-03,1.307630301E+00,1.901945448E-03,1.548285842E+00,9.521316970E-04,7.750863433E-01,7.323473692E-04,3.228402347E-04,9.211157449E-03,1.407646108E-03,1.145899653E+00,1.145899653E+00,6.177059258E-04,5.028458238E-01,5.028458238E-01,7.306835032E-04,5.948156714E-01,5.948156714E-01,3.671623417E-04,2.988898754E-01,2.988898754E-01,2.824625699E-04,1.252564398E-04,3.573770169E-03,3.662220435E-03,2.981244326E+00,1.606327598E-03,1.307637095E+00,1.901945448E-03,1.548285842E+00,-9.521415923E-04,-7.750944495E-01,7.323569735E-04,-3.228313581E-04,-9.210904129E-03,3.008475602E-01,3.172458410E-01,2.126921415E+00,2.124022007E+00,3.930573730E+03,1.607853174E-02,6.184996106E-03,1.106606051E-01,1.049594674E-02,2.706136182E-02,2.101894468E-02,5.266354885E-03,2.756875801E-06,5.275072902E-02,8.550874710E+00,9.876584045E-06,5.543031421E-06,7.362549193E-03,7.362549193E-03,2.009986474E-06,1.856752485E-01,1.621201485E-01,6.051542610E-02,1.726603627E+00,1.070875049E+00,4.007885605E-02,1.143514991E+00,7.092317939E-01,4.361097142E-02,1.244292021E+00,7.717363238E-01,9.296773374E-02,5.453434587E-02,5.261559412E-02,5.385721847E-02,1.835596003E-02,-1.886191421E-05,3.915082561E-05,-2.028891140E-05,7.209776086E-04,1.399093191E-03,0.000000000E+00,2.988929749E-01,2.665516331E-05,1.484914571E-01,4.918118954E+00,0.000000000E+00,4.914902151E-02,2.002110443E+02,-6.997766972E+00,5.797925949E+00,-2.087704986E-01 +7.058748007E-01,4.421750183E+02,1.413058167E+02,9.584223628E-01,3.846474588E-01,1.110802174E+00,3.169299316E+01,2.578712940E+00,2.578614950E+00,2.578582525E+00,2.578582525E+00,1.605784893E+00,7.816353760E+02,1.200000048E+00,1.940732241E+00,1.940732241E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.818564892E+00,2.578712940E+00,1.110695243E+00,3.168994522E+01,-9.787337331E-05,1.068564161E-04,3.048787592E-03,3.606439335E-03,2.935835361E+00,1.593863359E-03,1.297490358E+00,1.876277151E-03,1.527390480E+00,9.307669825E-04,7.576943636E-01,7.145981072E-04,3.133177524E-04,8.939465508E-03,1.386036398E-03,1.128308177E+00,1.128308177E+00,6.128743989E-04,4.989127219E-01,4.989127219E-01,7.207632298E-04,5.867400169E-01,5.867400169E-01,3.588786640E-04,2.921465337E-01,2.921465337E-01,2.755557070E-04,1.215363518E-04,3.467629896E-03,3.606450744E-03,2.935844898E+00,1.593871042E-03,1.297496676E+00,1.876277151E-03,1.527390480E+00,-9.307764121E-04,-7.577020526E-01,7.146077114E-04,-3.133091377E-04,-8.939219639E-03,2.941251695E-01,3.101654053E-01,2.129398346E+00,2.126529932E+00,3.934838867E+03,1.593980379E-02,6.131208036E-03,1.098776460E-01,1.036659442E-02,2.673142217E-02,2.085136063E-02,5.201173946E-03,2.756875801E-06,5.231063440E-02,8.431443214E+00,9.876584045E-06,5.543031421E-06,7.271579932E-03,7.271579932E-03,2.009986474E-06,1.845792532E-01,1.610444188E-01,6.005289406E-02,1.713406801E+00,1.062653542E+00,3.992315754E-02,1.139072657E+00,7.064521909E-01,4.331570491E-02,1.235867620E+00,7.664847970E-01,9.209798276E-02,5.394877866E-02,5.210066587E-02,5.345172063E-02,1.801886223E-02,-1.817669909E-05,3.788804315E-05,-1.971134407E-05,7.175164646E-04,1.392507111E-03,0.000000000E+00,2.921494842E-01,2.586350820E-05,1.495800614E-01,4.924095631E+00,0.000000000E+00,4.771565273E-02,2.001853790E+02,-6.834010124E+00,5.632628441E+00,-2.060595602E-01 +7.126500010E-01,4.464191589E+02,1.426442719E+02,9.583582282E-01,3.846217096E-01,1.112171292E+00,3.173205757E+01,2.579049349E+00,2.578951359E+00,2.578918934E+00,2.578918934E+00,1.605890274E+00,7.817573242E+02,1.200000048E+00,1.940909982E+00,1.940909982E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.822672486E+00,2.579049349E+00,1.112066865E+00,3.172907639E+01,-9.786718874E-05,1.044512828E-04,2.980165184E-03,3.550747642E-03,2.890499592E+00,1.581577701E-03,1.287489176E+00,1.850796631E-03,1.506647944E+00,9.092352702E-04,7.401663661E-01,6.972711417E-04,3.038773721E-04,8.670115843E-03,1.364467549E-03,1.110749960E+00,1.110749960E+00,6.081111496E-04,4.950351715E-01,4.950351715E-01,7.109193830E-04,5.787265897E-01,5.787265897E-01,3.505338682E-04,2.853534222E-01,2.853534222E-01,2.688165987E-04,1.178501043E-04,3.362455405E-03,3.550758585E-03,2.890508413E+00,1.581584918E-03,1.287495136E+00,1.850796631E-03,1.506647944E+00,-9.092441760E-04,-7.401736379E-01,6.972807460E-04,-3.038689902E-04,-8.669876494E-03,2.873499990E-01,3.030284047E-01,2.131848574E+00,2.129011631E+00,3.939064209E+03,1.580213197E-02,6.077846047E-03,1.090885997E-01,1.023880765E-02,2.640535682E-02,2.068414167E-02,5.136784166E-03,2.756875801E-06,5.186916515E-02,8.313877106E+00,9.876584045E-06,5.543031421E-06,7.181714289E-03,7.181713823E-03,2.009986474E-06,1.834688485E-01,1.599669605E-01,5.958742648E-02,1.700126290E+00,1.054381728E+00,3.976899385E-02,1.134674072E+00,7.037006617E-01,4.302059114E-02,1.227447510E+00,7.612371445E-01,9.123764932E-02,5.336587131E-02,5.158981308E-02,5.305546150E-02,1.767498069E-02,-1.750216506E-05,3.664821998E-05,-1.914605309E-05,7.142110844E-04,1.386219286E-03,0.000000000E+00,2.853562236E-01,2.507905810E-05,1.507332176E-01,4.930007935E+00,0.000000000E+00,4.629284889E-02,2.001603394E+02,-6.680412292E+00,5.468922615E+00,-2.040976286E-01 +7.194783688E-01,4.506965942E+02,1.439934845E+02,9.582960606E-01,3.845967650E-01,1.113524199E+00,3.177065849E+01,2.579378128E+00,2.579280376E+00,2.579247713E+00,2.579247713E+00,1.605993152E+00,7.818764038E+02,1.200000048E+00,1.941083789E+00,1.941083789E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.826737404E+00,2.579378128E+00,1.113422036E+00,3.176774216E+01,-9.777936066E-05,1.022022989E-04,2.915997757E-03,3.495159093E-03,2.845247507E+00,1.569467830E-03,1.277631164E+00,1.825512969E-03,1.486065745E+00,8.875354542E-04,7.225015759E-01,6.803636788E-04,2.945197048E-04,8.403126150E-03,1.342948992E-03,1.093232632E+00,1.093232632E+00,6.034181570E-04,4.912148118E-01,4.912148118E-01,7.011552807E-04,5.707781315E-01,5.707781315E-01,3.421274887E-04,2.785101533E-01,2.785101533E-01,2.622439351E-04,1.141979083E-04,3.258252051E-03,3.495169571E-03,2.845255852E+00,1.569474698E-03,1.277636766E+00,1.825512969E-03,1.486065745E+00,-8.875439526E-04,-7.225084901E-01,6.803732831E-04,-2.945115848E-04,-8.402894251E-03,2.805216014E-01,2.958343923E-01,2.134271383E+00,2.131464958E+00,3.943247070E+03,1.566552743E-02,6.024913862E-03,1.082937643E-01,1.011262182E-02,2.608325519E-02,2.051734179E-02,5.073201843E-03,2.756875801E-06,5.142646655E-02,8.198198318E+00,9.876584045E-06,5.543031421E-06,7.092974614E-03,7.092974614E-03,2.009986474E-06,1.823444664E-01,1.588882208E-01,5.911916494E-02,1.686766028E+00,1.046061993E+00,3.961644694E-02,1.130321741E+00,7.009786963E-01,4.272573814E-02,1.219034910E+00,7.559953332E-01,9.038742632E-02,5.278631672E-02,5.108327046E-02,5.266868696E-02,1.732422598E-02,-1.683774644E-05,3.543113417E-05,-1.859338772E-05,7.110534934E-04,1.380214118E-03,0.000000000E+00,2.785128057E-01,2.430185123E-05,1.519554406E-01,4.935852051E+00,0.000000000E+00,4.487859458E-02,2.001359253E+02,-6.536784649E+00,5.306762218E+00,-2.028877437E-01 +7.263604403E-01,4.550076599E+02,1.453535461E+02,9.582358599E-01,3.845726252E-01,1.114860058E+00,3.180877113E+01,2.579699039E+00,2.579601526E+00,2.579568863E+00,2.579568863E+00,1.606093645E+00,7.819924927E+02,1.200000048E+00,1.941253424E+00,1.941253424E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.830756545E+00,2.579699039E+00,1.114759922E+00,3.180591583E+01,-9.761346155E-05,1.001074488E-04,2.856228501E-03,3.439706983E-03,2.800106525E+00,1.557539450E-03,1.267920852E+00,1.800438389E-03,1.465653658E+00,8.656668942E-04,7.046993971E-01,6.638756604E-04,2.852452162E-04,8.138510399E-03,1.321493299E-03,1.075766563E+00,1.075766563E+00,5.987974582E-04,4.874533117E-01,4.874533117E-01,6.914756959E-04,5.628983974E-01,5.628983974E-01,3.336591471E-04,2.716164887E-01,2.716164887E-01,2.558375709E-04,1.105798801E-04,3.155023791E-03,3.439716995E-03,2.800114632E+00,1.557545853E-03,1.267926097E+00,1.800438389E-03,1.465653658E+00,-8.656749269E-04,-7.047059536E-01,6.638852064E-04,-2.852373582E-04,-8.138285950E-03,2.736395895E-01,2.885828912E-01,2.136664391E+00,2.133888245E+00,3.947384521E+03,1.553001907E-02,5.972422659E-03,1.074935496E-01,9.988092817E-03,2.576526813E-02,2.035104483E-02,5.010454450E-03,2.756875801E-06,5.098274350E-02,8.084449768E+00,9.876584045E-06,5.543031421E-06,7.005400490E-03,7.005400490E-03,2.009986474E-06,1.812066734E-01,1.578087360E-01,5.864833295E-02,1.673332334E+00,1.037698507E+00,3.946561366E-02,1.126018167E+00,6.982878447E-01,4.243129864E-02,1.210633993E+00,7.507618666E-01,8.954787254E-02,5.221067369E-02,5.058132485E-02,5.229143426E-02,1.696640998E-02,-1.618376882E-05,3.423757516E-05,-1.805380634E-05,7.080316427E-04,1.374468673E-03,0.000000000E+00,2.716189921E-01,2.353191849E-05,1.532527059E-01,4.941624641E+00,0.000000000E+00,4.347047955E-02,2.001121521E+02,-6.402999878E+00,5.146106243E+00,-2.024103850E-01 +7.332965136E-01,4.593525696E+02,1.467245789E+02,9.581776857E-01,3.845492601E-01,1.116177797E+00,3.184637070E+01,2.580012083E+00,2.579914808E+00,2.579882145E+00,2.579882145E+00,1.606191635E+00,7.821055908E+02,1.200000048E+00,1.941419005E+00,1.941419005E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.834727168E+00,2.580012083E+00,1.116079688E+00,3.184357071E+01,-9.737308574E-05,9.816508827E-05,2.800809685E-03,3.384434152E-03,2.755111456E+00,1.545798499E-03,1.258363008E+00,1.775588724E-03,1.445424676E+00,8.436294738E-04,6.867597699E-01,6.478095893E-04,2.760540519E-04,7.876271382E-03,1.300116652E-03,1.058364868E+00,1.058364868E+00,5.942513235E-04,4.837525189E-01,4.837525189E-01,6.818865659E-04,5.550923347E-01,5.550923347E-01,3.251287562E-04,2.646723092E-01,2.646723092E-01,2.495982626E-04,1.069960199E-04,3.052770626E-03,3.384443931E-03,2.755119324E+00,1.545804553E-03,1.258368015E+00,1.775588724E-03,1.445424676E+00,-8.436371572E-04,-6.867659688E-01,6.478190771E-04,-2.760464558E-04,-7.876054384E-03,2.667034864E-01,2.812734842E-01,2.139026403E+00,2.136280298E+00,3.951473633E+03,1.539565902E-02,5.920391995E-03,1.066885069E-01,9.865296073E-03,2.545159496E-02,2.018535696E-02,4.948581569E-03,2.756875801E-06,5.053826794E-02,7.972694874E+00,9.876584045E-06,5.543031421E-06,6.919045933E-03,6.919045933E-03,2.009986474E-06,1.800562590E-01,1.567292362E-01,5.817523226E-02,1.659834027E+00,1.029296398E+00,3.931657970E-02,1.121765971E+00,6.956298351E-01,4.213747010E-02,1.202250600E+00,7.455403209E-01,8.871911466E-02,5.163928121E-02,5.008431524E-02,5.192324147E-02,1.660118066E-02,-1.554152550E-05,3.306935105E-05,-1.752782555E-05,7.051331922E-04,1.368958852E-03,0.000000000E+00,2.646746933E-01,2.276925625E-05,1.546331644E-01,4.947320938E+00,0.000000000E+00,4.206629097E-02,2.000890045E+02,-6.278953552E+00,4.986916542E+00,-2.026191056E-01 +7.402870655E-01,4.637315979E+02,1.481066589E+02,9.581214786E-01,3.845266998E-01,1.117476702E+00,3.188342857E+01,2.580317259E+00,2.580220222E+00,2.580187559E+00,2.580187559E+00,1.606287122E+00,7.822156982E+02,1.200000048E+00,1.941580415E+00,1.941580415E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.838646054E+00,2.580317259E+00,1.117380381E+00,3.188067818E+01,-9.706217679E-05,9.637300536E-05,2.749678679E-03,3.329392988E-03,2.710304737E+00,1.534251496E-03,1.248963118E+00,1.750983996E-03,1.425395131E+00,8.214238915E-04,6.686831713E-01,6.321700057E-04,2.669457754E-04,7.616397459E-03,1.278838958E-03,1.041043639E+00,1.041043639E+00,5.897820811E-04,4.801143408E-01,4.801143408E-01,6.723955739E-04,5.473661423E-01,5.473661423E-01,3.165364906E-04,2.576777339E-01,2.576777339E-01,2.435276110E-04,1.034461166E-04,2.951486036E-03,3.329402301E-03,2.710312366E+00,1.534257201E-03,1.248967767E+00,1.750983996E-03,1.425395131E+00,-8.214311674E-04,-6.686891317E-01,6.321793771E-04,-2.669384412E-04,-7.616188377E-03,2.597129345E-01,2.739057541E-01,2.141355515E+00,2.138638973E+00,3.955510986E+03,1.526250783E-02,5.868844222E-03,1.058793440E-01,9.744330309E-03,2.514249086E-02,2.002040297E-02,4.887631163E-03,2.756875801E-06,5.009341240E-02,7.863008499E+00,9.876584045E-06,5.543031421E-06,6.833978929E-03,6.833978929E-03,2.009986474E-06,1.788943261E-01,1.556506604E-01,5.770026147E-02,1.646282434E+00,1.020862818E+00,3.916945681E-02,1.117568374E+00,6.930064559E-01,4.184450209E-02,1.193891764E+00,7.403351068E-01,8.790095150E-02,5.107238516E-02,4.959265515E-02,5.156307667E-02,1.622802019E-02,-1.491349667E-05,3.193006705E-05,-1.701657129E-05,7.023528451E-04,1.363674412E-03,0.000000000E+00,2.576799989E-01,2.201382267E-05,1.561076641E-01,4.952937603E+00,0.000000000E+00,4.066462442E-02,2.000665131E+02,-6.164505959E+00,4.829156399E+00,-2.034218460E-01 +7.473325133E-01,4.681450195E+02,1.494998932E+02,9.580672979E-01,3.845049441E-01,1.118755579E+00,3.191991615E+01,2.580614090E+00,2.580517530E+00,2.580484867E+00,2.580484867E+00,1.606380224E+00,7.823226929E+02,1.200000048E+00,1.941737413E+00,1.941737413E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.842509985E+00,2.580614090E+00,1.118660808E+00,3.191721344E+01,-9.668519488E-05,9.472754027E-05,2.702730941E-03,3.274644027E-03,2.665736198E+00,1.522905310E-03,1.239726782E+00,1.726647257E-03,1.405583739E+00,7.990509039E-04,6.504703760E-01,6.169627304E-04,2.579192806E-04,7.358856965E-03,1.257683150E-03,1.023821712E+00,1.023821712E+00,5.853924085E-04,4.765408933E-01,4.765408933E-01,6.630113348E-04,5.397268534E-01,5.397268534E-01,3.078826121E-04,2.506330013E-01,2.506330013E-01,2.376275952E-04,9.992968990E-05,2.851156751E-03,3.274652874E-03,2.665743589E+00,1.522910665E-03,1.239731193E+00,1.726647373E-03,1.405583739E+00,-7.990578306E-04,-6.504760385E-01,6.169721019E-04,-2.579122083E-04,-7.358655334E-03,2.526674569E-01,2.664793432E-01,2.143649817E+00,2.140962362E+00,3.959493408E+03,1.513063442E-02,5.817806348E-03,1.050669104E-01,9.625305422E-03,2.483824268E-02,1.985633932E-02,4.827660043E-03,2.756875801E-06,4.964861646E-02,7.755470276E+00,9.876584045E-06,5.543031421E-06,6.750277244E-03,6.750277244E-03,2.009986474E-06,1.777222008E-01,1.545740664E-01,5.722390488E-02,1.632691145E+00,1.012406230E+00,3.902435303E-02,1.113428354E+00,6.904196739E-01,4.155269265E-02,1.185565948E+00,7.351514697E-01,8.709315211E-02,5.051036179E-02,4.910683259E-02,5.120965466E-02,1.584634557E-02,-1.430327302E-05,3.082551848E-05,-1.652224455E-05,6.996942102E-04,1.358622336E-03,0.000000000E+00,2.506351471E-01,2.126551226E-05,1.576891392E-01,4.958468914E+00,0.000000000E+00,3.926550224E-02,2.000446777E+02,-6.059423923E+00,4.672782898E+00,-2.046606243E-01 +7.544333339E-01,4.725931396E+02,1.509043884E+02,9.580151439E-01,3.844840229E-01,1.120013237E+00,3.195580292E+01,2.580902815E+00,2.580806732E+00,2.580774069E+00,2.580774069E+00,1.606470585E+00,7.824266357E+02,1.200000048E+00,1.941890240E+00,1.941890240E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.846315265E+00,2.580902815E+00,1.119920015E+00,3.195314217E+01,-9.624720406E-05,9.322317783E-05,2.659809077E-03,3.220254555E-03,2.621460438E+00,1.511767623E-03,1.230660081E+00,1.702603535E-03,1.386010885E+00,7.765111513E-04,6.321218610E-01,6.021931767E-04,2.489726758E-04,7.103595417E-03,1.236674958E-03,1.006719828E+00,1.006719828E+00,5.810849252E-04,4.730343819E-01,4.730343819E-01,6.537432200E-04,5.321821570E-01,5.321821570E-01,2.991672081E-04,2.435381860E-01,2.435381860E-01,2.319000341E-04,9.644596139E-05,2.751760418E-03,3.220263403E-03,2.621467590E+00,1.511772512E-03,1.230664134E+00,1.702603535E-03,1.386010885E+00,-7.765177288E-04,-6.321272254E-01,6.022024318E-04,-2.489658655E-04,-7.103401702E-03,2.455666512E-01,2.589938641E-01,2.145907402E+00,2.143248796E+00,3.963417236E+03,1.500012632E-02,5.767310970E-03,1.042521894E-01,9.508331306E-03,2.453913912E-02,1.969333738E-02,4.768723156E-03,2.756875801E-06,4.920438305E-02,7.650154591E+00,9.876584045E-06,5.543031421E-06,6.668019574E-03,6.668019574E-03,2.009986474E-06,1.765415221E-01,1.535006911E-01,5.674672127E-02,1.619076252E+00,1.003936529E+00,3.888138756E-02,1.109349251E+00,6.878715754E-01,4.126236588E-02,1.177282453E+00,7.299951315E-01,8.629574627E-02,4.995388538E-02,4.862742126E-02,5.086182430E-02,1.545567531E-02,-1.371466533E-05,2.976223550E-05,-1.604757017E-05,6.971639814E-04,1.353815780E-03,0.000000000E+00,2.435402423E-01,2.052415948E-05,1.593912542E-01,4.963911057E+00,0.000000000E+00,3.787069023E-02,2.000234833E+02,-5.963355541E+00,4.517738342E+00,-2.061142027E-01 +7.615899444E-01,4.770761719E+02,1.523202515E+02,9.579649568E-01,3.844639063E-01,1.121248841E+00,3.199105263E+01,2.581183195E+00,2.581087589E+00,2.581054926E+00,2.581054926E+00,1.606558561E+00,7.825274048E+02,1.200000048E+00,1.942038655E+00,1.942038655E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.850058198E+00,2.581183195E+00,1.121156931E+00,3.198843193E+01,-9.575395234E-05,9.185291128E-05,2.620713087E-03,3.166295122E-03,2.577534437E+00,1.500845770E-03,1.221769214E+00,1.678878791E-03,1.366697669E+00,7.538043428E-04,6.136372685E-01,5.878642551E-04,2.401034726E-04,6.850542501E-03,1.215841155E-03,9.897600412E-01,9.897600412E-01,5.768625415E-04,4.695971310E-01,4.695971310E-01,6.446010084E-04,5.247398615E-01,5.247398615E-01,2.903901332E-04,2.363931835E-01,2.363931835E-01,2.263458446E-04,9.299390513E-05,2.653267467E-03,3.166303504E-03,2.577541351E+00,1.500850427E-03,1.221772909E+00,1.678878791E-03,1.366697669E+00,-7.538106292E-04,-6.136423349E-01,5.878733937E-04,-2.400969388E-04,-6.850356236E-03,2.384100705E-01,2.514489591E-01,2.148125887E+00,2.145495653E+00,3.967278564E+03,1.487108879E-02,5.717399064E-03,1.034362465E-01,9.393504821E-03,2.424543537E-02,1.953159831E-02,4.710869864E-03,2.756875801E-06,4.876125976E-02,7.547120571E+00,9.876584045E-06,5.543031421E-06,6.587272976E-03,6.587272976E-03,2.009986474E-06,1.753540784E-01,1.524318457E-01,5.626931041E-02,1.605455041E+00,9.954644442E-01,3.874068335E-02,1.105334759E+00,6.853643656E-01,4.097387940E-02,1.169051409E+00,7.248723507E-01,8.550934494E-02,4.940404743E-02,4.815502092E-02,5.051896721E-02,1.505579054E-02,-1.315040481E-05,2.874499296E-05,-1.559458724E-05,6.947664078E-04,1.349263010E-03,0.000000000E+00,2.363951355E-01,1.978954788E-05,1.612267047E-01,4.969258308E+00,0.000000000E+00,3.648328781E-02,2.000029755E+02,-5.875854015E+00,4.363949776E+00,-2.075215578E-01 +7.688027620E-01,4.815944214E+02,1.537475739E+02,9.579167962E-01,3.844445646E-01,1.122460961E+00,3.202563858E+01,2.581455231E+00,2.581360102E+00,2.581327438E+00,2.581327438E+00,1.606643796E+00,7.826250000E+02,1.200000048E+00,1.942182660E+00,1.942182660E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.853735089E+00,2.581455231E+00,1.122370362E+00,3.202305222E+01,-9.521186439E-05,9.060902812E-05,2.585222945E-03,3.112835577E-03,2.534015656E+00,1.490148017E-03,1.213060617E+00,1.655499917E-03,1.347665906E+00,7.309288485E-04,5.950154066E-01,5.739760818E-04,2.313089644E-04,6.599621382E-03,1.195208635E-03,9.729640484E-01,9.729640484E-01,5.727281095E-04,4.662314653E-01,4.662314653E-01,6.355945370E-04,5.174081326E-01,5.174081326E-01,2.815507178E-04,2.291974127E-01,2.291974127E-01,2.209647646E-04,8.957242244E-05,2.555646934E-03,3.112843959E-03,2.534022331E+00,1.490152325E-03,1.213064075E+00,1.655499917E-03,1.347665906E+00,-7.309348439E-04,-5.950202346E-01,5.739851040E-04,-2.313027071E-04,-6.599442568E-03,2.311972678E-01,2.438442707E-01,2.150303602E+00,2.147701025E+00,3.971073486E+03,1.474364940E-02,5.668118130E-03,1.026201844E-01,9.280903265E-03,2.395733073E-02,1.937134191E-02,4.654138349E-03,2.756875801E-06,4.831980169E-02,7.446403980E+00,9.876584045E-06,5.543031421E-06,6.508091465E-03,6.508091465E-03,2.009986474E-06,1.741617173E-01,1.513688713E-01,5.579229817E-02,1.591845036E+00,9.870007634E-01,3.860236704E-02,1.101388335E+00,6.829002500E-01,4.068759456E-02,1.160883188E+00,7.197895646E-01,8.473534882E-02,4.886244982E-02,4.769020900E-02,5.018132180E-02,1.464685518E-02,-1.261138914E-05,2.777530608E-05,-1.516391785E-05,6.925013731E-04,1.344964025E-03,0.000000000E+00,2.291992754E-01,1.906144098E-05,1.632055938E-01,4.974505424E+00,0.000000000E+00,3.510672227E-02,1.999831238E+02,-5.796427250E+00,4.211334705E+00,-2.085981667E-01 +7.760722041E-01,4.861481628E+02,1.551864471E+02,9.578706622E-01,3.844260275E-01,1.123648524E+00,3.205952072E+01,2.581718922E+00,2.581624269E+00,2.581591606E+00,2.581591606E+00,1.606726408E+00,7.827194824E+02,1.200000048E+00,1.942322135E+00,1.942322135E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.857342124E+00,2.581718922E+00,1.123558998E+00,3.205696869E+01,-9.462780872E-05,8.948383038E-05,2.553119324E-03,3.059943905E-03,2.490958929E+00,1.479682047E-03,1.204540730E+00,1.632495318E-03,1.328938961E+00,7.078817580E-04,5.762538314E-01,5.605265033E-04,2.225866483E-04,6.350759417E-03,1.174803125E-03,9.563528895E-01,9.563528895E-01,5.686845398E-04,4.629397690E-01,4.629397690E-01,6.267346325E-04,5.101956725E-01,5.101956725E-01,2.726477396E-04,2.219499350E-01,2.219499350E-01,2.157557028E-04,8.618048014E-05,2.458869247E-03,3.059951821E-03,2.490965366E+00,1.479686121E-03,1.204544067E+00,1.632495318E-03,1.328938961E+00,-7.078874041E-04,-5.762584209E-01,5.605354672E-04,-2.225806384E-04,-6.350588053E-03,2.239278108E-01,2.361793816E-01,2.152438164E+00,2.149862766E+00,3.974797607E+03,1.461794972E-02,5.619522650E-03,1.018051133E-01,9.170585312E-03,2.367498353E-02,1.921280473E-02,4.598558880E-03,2.756875801E-06,4.788055271E-02,7.348024845E+00,9.876584045E-06,5.543031421E-06,6.430516951E-03,6.430516485E-03,2.009986474E-06,1.729663014E-01,1.503131390E-01,5.531630293E-02,1.578264236E+00,9.785565734E-01,3.846656531E-02,1.097513795E+00,6.804814339E-01,4.040391371E-02,1.152789354E+00,7.147538066E-01,8.397581428E-02,4.833094031E-02,4.723349959E-02,4.985011742E-02,1.422944665E-02,-1.209692346E-05,2.685200161E-05,-1.475507725E-05,6.903654430E-04,1.340911957E-03,0.000000000E+00,2.219517082E-01,1.833962051E-05,1.653344482E-01,4.979648113E+00,0.000000000E+00,3.374369815E-02,1.999639282E+02,-5.724582672E+00,4.059806824E+00,-2.090378106E-01 +7.833987474E-01,4.907376709E+02,1.566369781E+02,9.578264356E-01,3.844082952E-01,1.124810457E+00,3.209267044E+01,2.581974030E+00,2.581880093E+00,2.581847429E+00,2.581847429E+00,1.606806397E+00,7.828107300E+02,1.200000048E+00,1.942457318E+00,1.942457318E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.860875368E+00,2.581974030E+00,1.124721885E+00,3.209014893E+01,-9.400846466E-05,8.847013669E-05,2.524196869E-03,3.007684601E-03,2.448416948E+00,1.469455543E-03,1.196215749E+00,1.609898172E-03,1.310543656E+00,6.846590550E-04,5.573492646E-01,5.475124926E-04,2.139342832E-04,6.103893276E-03,1.154649304E-03,9.399466515E-01,9.399466515E-01,5.647346261E-04,4.597243369E-01,4.597243369E-01,6.180335185E-04,5.031125546E-01,5.031125546E-01,2.636796853E-04,2.146494389E-01,2.146494389E-01,2.107172477E-04,8.281714690E-05,2.362908097E-03,3.007692285E-03,2.448423386E+00,1.469459268E-03,1.196218848E+00,1.609898172E-03,1.310543656E+00,-6.846644683E-04,-5.573536754E-01,5.475213402E-04,-2.139285352E-04,-6.103729364E-03,2.166012675E-01,2.284538746E-01,2.154527426E+00,2.151978731E+00,3.978447510E+03,1.449414622E-02,5.571671762E-03,1.009921283E-01,9.062605910E-03,2.339853905E-02,1.905623265E-02,4.544158000E-03,2.756875801E-06,4.744405299E-02,7.252000809E+00,9.876584045E-06,5.543031421E-06,6.354587153E-03,6.354587153E-03,2.009986474E-06,1.717697084E-01,1.492660940E-01,5.484194681E-02,1.564729929E+00,9.701427221E-01,3.833340853E-02,1.093714476E+00,6.781102419E-01,4.012330621E-02,1.144783139E+00,7.097734213E-01,8.323276788E-02,4.781075940E-02,4.678536952E-02,4.952709749E-02,1.380444597E-02,-1.160566626E-05,2.597307503E-05,-1.436740877E-05,6.883538445E-04,1.337097841E-03,0.000000000E+00,2.146511227E-01,1.762389002E-05,1.676166803E-01,4.984680653E+00,0.000000000E+00,3.239570558E-02,1.999454041E+02,-5.659862518E+00,3.909282207E+00,-2.085271031E-01 +7.907828093E-01,4.953632202E+02,1.580992737E+02,9.577841759E-01,3.843913376E-01,1.125945568E+00,3.212505722E+01,2.582220554E+00,2.582127333E+00,2.582094669E+00,2.582094669E+00,1.606883645E+00,7.828988647E+02,1.200000048E+00,1.942587852E+00,1.942587852E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.864331484E+00,2.582220554E+00,1.125857949E+00,3.212256241E+01,-9.335974028E-05,8.756142779E-05,2.498270012E-03,2.956120763E-03,2.406441212E+00,1.459475141E-03,1.188091278E+00,1.587748178E-03,1.292512298E+00,6.612565485E-04,5.382983685E-01,5.349315470E-04,2.053498611E-04,5.858965684E-03,1.134771388E-03,9.237648845E-01,9.237648845E-01,5.608809297E-04,4.565872252E-01,4.565872252E-01,6.095063873E-04,4.961709678E-01,4.961709678E-01,2.546448086E-04,2.072945684E-01,2.072945684E-01,2.058481332E-04,7.948160055E-05,2.267739270E-03,2.956128446E-03,2.406447411E+00,1.459478633E-03,1.188094020E+00,1.587748178E-03,1.292512417E+00,-6.612616708E-04,-5.383026004E-01,5.349402782E-04,-2.053443750E-04,-5.858809222E-03,2.092171609E-01,2.206673622E-01,2.156569242E+00,2.154046774E+00,3.982018799E+03,1.437241025E-02,5.524631590E-03,1.001823545E-01,8.957023732E-03,2.312815562E-02,1.890186779E-02,4.490964580E-03,2.756875801E-06,4.701083153E-02,7.158360481E+00,9.876584045E-06,5.543031421E-06,6.280342583E-03,6.280342583E-03,2.009986474E-06,1.705737412E-01,1.482292563E-01,5.436984450E-02,1.551260114E+00,9.617701769E-01,3.820300847E-02,1.089994073E+00,6.757885814E-01,3.984633088E-02,1.136880636E+00,7.048582435E-01,8.250714839E-02,4.730162397E-02,4.634630680E-02,4.921366647E-02,1.337279845E-02,-1.113657527E-05,2.513733307E-05,-1.400075689E-05,6.864608731E-04,1.333510503E-03,0.000000000E+00,2.072961777E-01,1.691407124E-05,1.700548381E-01,4.989598751E+00,0.000000000E+00,3.106336854E-02,1.999275513E+02,-5.601850510E+00,3.759676218E+00,-2.067951858E-01 +7.982249260E-01,5.000251160E+02,1.595734253E+02,9.577437639E-01,3.843751252E-01,1.127052903E+00,3.215665436E+01,2.582458735E+00,2.582365990E+00,2.582333565E+00,2.582333565E+00,1.606958389E+00,7.829838257E+02,1.200000048E+00,1.942713976E+00,1.942713976E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.867707014E+00,2.582458735E+00,1.126966238E+00,3.215417862E+01,-9.268643771E-05,8.675165009E-05,2.475165762E-03,2.905316884E-03,2.365083933E+00,1.449747011E-03,1.180172086E+00,1.566090155E-03,1.274881601E+00,6.376706879E-04,5.190982223E-01,5.227818619E-04,1.968313736E-04,5.615919363E-03,1.115193358E-03,9.078273773E-01,9.078273773E-01,5.571256042E-04,4.535301924E-01,4.535301924E-01,6.011702353E-04,4.893848896E-01,4.893848896E-01,2.455417416E-04,1.998841763E-01,1.998841763E-01,2.011475444E-04,7.617298252E-05,2.173339250E-03,2.905324334E-03,2.365090132E+00,1.449750271E-03,1.180174589E+00,1.566090155E-03,1.274881601E+00,-6.376755773E-04,-5.191022158E-01,5.227904767E-04,-1.968261349E-04,-5.615770351E-03,2.017750591E-01,2.128194124E-01,2.158562183E+00,2.156065226E+00,3.985508545E+03,1.425293740E-02,5.478476174E-03,9.937693924E-02,8.853905834E-03,2.286400832E-02,1.874996163E-02,4.439012147E-03,2.756875801E-06,4.658144340E-02,7.067157745E+00,9.876584045E-06,5.543031421E-06,6.207831204E-03,6.207831204E-03,2.009986474E-06,1.693803221E-01,1.472042501E-01,5.390065536E-02,1.537873387E+00,9.534503818E-01,3.807547688E-02,1.086355329E+00,6.735183597E-01,3.957363591E-02,1.129100323E+00,7.000197172E-01,8.179881424E-02,4.680200294E-02,4.591683298E-02,4.891055822E-02,1.293523423E-02,-1.068941310E-05,2.434496855E-05,-1.365555636E-05,6.846801843E-04,1.330137718E-03,0.000000000E+00,1.998857111E-01,1.620998410E-05,1.726541072E-01,4.994397640E+00,0.000000000E+00,2.974716201E-02,1.999103546E+02,-5.550159931E+00,3.610899448E+00,-2.036829591E-01 +8.057255149E-01,5.047236328E+02,1.610595398E+02,9.577052593E-01,3.843596578E-01,1.128131628E+00,3.218743134E+01,2.582688332E+00,2.582596302E+00,2.582563877E+00,2.582563877E+00,1.607030392E+00,7.830656128E+02,1.200000048E+00,1.942835689E+00,1.942835689E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.870998740E+00,2.582688332E+00,1.128045559E+00,3.218497467E+01,-9.199242777E-05,8.603490278E-05,2.454715781E-03,2.855340717E-03,2.324400902E+00,1.440276625E-03,1.172462583E+00,1.544967992E-03,1.257686973E+00,6.138991448E-04,4.997469187E-01,5.110621569E-04,1.883767254E-04,5.374694709E-03,1.095941290E-03,8.921551108E-01,8.921551108E-01,5.534706870E-04,4.505548775E-01,4.505548775E-01,5.930417683E-04,4.827678800E-01,4.827678800E-01,2.363694803E-04,1.924174577E-01,1.924174577E-01,1.966148120E-04,7.289041969E-05,2.079682425E-03,2.855348168E-03,2.324406862E+00,1.440279535E-03,1.172464967E+00,1.544967992E-03,1.257686973E+00,-6.139038014E-04,-4.997507036E-01,5.110706552E-04,-1.883717487E-04,-5.374552682E-03,1.942745149E-01,2.049095631E-01,2.160504341E+00,2.158031940E+00,3.988912842E+03,1.413595024E-02,5.433290266E-03,9.857713431E-02,8.753324859E-03,2.260628901E-02,1.860076934E-02,4.388336558E-03,2.756875801E-06,4.615649208E-02,6.978463173E+00,9.876584045E-06,5.543031421E-06,6.137102377E-03,6.137102377E-03,2.009986474E-06,1.681914181E-01,1.461927891E-01,5.343509093E-02,1.524590135E+00,9.451960325E-01,3.795091063E-02,1.082801223E+00,6.713014245E-01,3.930586576E-02,1.121460319E+00,6.952691078E-01,8.110748231E-02,4.631063715E-02,4.549749941E-02,4.861797020E-02,1.249210443E-02,-1.026436075E-05,2.359655628E-05,-1.333219552E-05,6.830065977E-04,1.326969475E-03,0.000000000E+00,1.924189180E-01,1.551144123E-05,1.754252315E-01,4.999073505E+00,0.000000000E+00,2.844776213E-02,1.998938141E+02,-5.504413605E+00,3.462853670E+00,-2.036575377E-01 +8.132849336E-01,5.094590149E+02,1.625577240E+02,9.576686621E-01,3.843449652E-01,1.129180551E+00,3.221735764E+01,2.582909584E+00,2.582818270E+00,2.582785606E+00,2.582785606E+00,1.607099771E+00,7.831442261E+02,1.200000048E+00,1.942952871E+00,1.942952871E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.874203324E+00,2.582909584E+00,1.129095197E+00,3.221492386E+01,-9.128134116E-05,8.540500858E-05,2.436743816E-03,2.806267934E-03,2.284453154E+00,1.431069104E-03,1.164967179E+00,1.524417079E-03,1.240957499E+00,5.899407552E-04,4.802434742E-01,4.997705691E-04,1.799836755E-04,5.135227460E-03,1.077043591E-03,8.767713308E-01,8.767713308E-01,5.499180988E-04,4.476629198E-01,4.476629198E-01,5.851346068E-04,4.763310552E-01,4.763310552E-01,2.271274716E-04,1.848939657E-01,1.848939657E-01,1.922490919E-04,6.963296619E-05,1.986742020E-03,2.806275385E-03,2.284458876E+00,1.431071782E-03,1.164969444E+00,1.524417079E-03,1.240957499E+00,-5.899451789E-04,-4.802470803E-01,4.997788928E-04,-1.799789461E-04,-5.135092419E-03,1.867150366E-01,1.969373971E-01,2.162393570E+00,2.159945488E+00,3.992228271E+03,1.402169000E-02,5.389166996E-03,9.778434783E-02,8.655348793E-03,2.235517837E-02,1.845455542E-02,4.338972270E-03,2.756875801E-06,4.573666304E-02,6.892351627E+00,9.876584045E-06,5.543031421E-06,6.068204064E-03,6.068204064E-03,2.009986474E-06,1.670092642E-01,1.451966017E-01,5.297395959E-02,1.511433363E+00,9.370213747E-01,3.782941028E-02,1.079334617E+00,6.691395044E-01,3.904357553E-02,1.113976717E+00,6.906163096E-01,8.043363690E-02,4.582802206E-02,4.508884251E-02,4.833571985E-02,1.204343606E-02,-9.861347280E-06,2.289170880E-05,-1.303036152E-05,6.814366789E-04,1.323999255E-03,0.000000000E+00,1.848953515E-01,1.481824165E-05,1.783851981E-01,5.003621578E+00,0.000000000E+00,2.716582082E-02,1.998779449E+02,-5.464217186E+00,3.315430880E+00,-2.111677676E-01 +8.209037781E-01,5.142316284E+02,1.640680695E+02,9.576338530E-01,3.843309879E-01,1.130198836E+00,3.224641037E+01,2.583122015E+00,2.583031416E+00,2.582998991E+00,2.582998991E+00,1.607166409E+00,7.832196655E+02,1.200000048E+00,1.943065524E+00,1.943065524E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.877317309E+00,2.583122015E+00,1.130113959E+00,3.224398804E+01,-9.055718692E-05,8.485522267E-05,2.421057550E-03,2.758183051E-03,2.245309353E+00,1.422130736E-03,1.157690883E+00,1.504462096E-03,1.224713087E+00,5.657947622E-04,4.605873525E-01,4.889043048E-04,1.716499246E-04,4.897451494E-03,1.058532041E-03,8.617020249E-01,8.617020249E-01,5.464701098E-04,4.448560476E-01,4.448560476E-01,5.774581223E-04,4.700819850E-01,4.700819850E-01,2.178153372E-04,1.773133874E-01,1.773133874E-01,1.880491764E-04,6.639964704E-05,1.894489978E-03,2.758190269E-03,2.245315075E+00,1.422133180E-03,1.157692909E+00,1.504462096E-03,1.224713087E+00,-5.657989532E-04,-4.605907798E-01,4.889125121E-04,-1.716454281E-04,-4.897323437E-03,1.790961921E-01,1.889024973E-01,2.164228201E+00,2.161803484E+00,3.995451416E+03,1.391040534E-02,5.346200895E-03,9.700018167E-02,8.560039103E-03,2.211083658E-02,1.831159368E-02,4.290949553E-03,2.756875801E-06,4.532272741E-02,6.808887482E+00,9.876584045E-06,5.543031421E-06,6.001179572E-03,6.001179572E-03,2.009986474E-06,1.658363789E-01,1.442174464E-01,5.251818150E-02,1.498429179E+00,9.289425015E-01,3.771108761E-02,1.075958729E+00,6.670344472E-01,3.878719360E-02,1.106661797E+00,6.860688925E-01,7.977875322E-02,4.535659775E-02,4.469133168E-02,4.806349427E-02,1.158910897E-02,-9.479530490E-06,2.222826151E-05,-1.274873011E-05,6.799675757E-04,1.321221585E-03,0.000000000E+00,1.773146987E-01,1.413017617E-05,1.815558374E-01,5.008037090E+00,0.000000000E+00,2.590149269E-02,1.998627167E+02,-5.429139614E+00,3.168517351E+00,-2.177368104E-01 +8.285824656E-01,5.190417480E+02,1.655906830E+02,9.576008320E-01,3.843177557E-01,1.131185293E+00,3.227455521E+01,2.583326101E+00,2.583236217E+00,2.583203793E+00,2.583203793E+00,1.607230425E+00,7.832920532E+02,1.200000048E+00,1.943173647E+00,1.943173647E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.880337358E+00,2.583326101E+00,1.131100893E+00,3.227214813E+01,-8.982439613E-05,8.437813813E-05,2.407445572E-03,2.711177571E-03,2.207044125E+00,1.413468504E-03,1.150639296E+00,1.485120738E-03,1.208968163E+00,5.414605839E-04,4.407780170E-01,4.784610064E-04,1.633729844E-04,4.661296960E-03,1.040441450E-03,8.469752669E-01,8.469752669E-01,5.431292229E-04,4.421363771E-01,4.421363771E-01,5.700189504E-04,4.640260935E-01,4.640260935E-01,2.084326989E-04,1.696754247E-01,1.696754247E-01,1.840140030E-04,6.318943633E-05,1.802897430E-03,2.711184556E-03,2.207050085E+00,1.413470716E-03,1.150641084E+00,1.485120738E-03,1.208968163E+00,-5.414645420E-04,-4.407812357E-01,4.784690973E-04,-1.633687352E-04,-4.661175888E-03,1.714175045E-01,1.808044314E-01,2.166006327E+00,2.163604021E+00,3.998578125E+03,1.380233746E-02,5.304483697E-03,9.622644633E-02,8.467460051E-03,2.187343687E-02,1.817217283E-02,4.244301002E-03,2.756875801E-06,4.491554201E-02,6.728128433E+00,9.876584045E-06,5.543031421E-06,5.936073605E-03,5.936073605E-03,2.009986474E-06,1.646756530E-01,1.432571262E-01,5.206877366E-02,1.485606790E+00,9.209775329E-01,3.759606555E-02,1.072676897E+00,6.649884582E-01,3.853707016E-02,1.099525332E+00,6.816328764E-01,7.914482802E-02,4.489952698E-02,4.430538788E-02,4.780122638E-02,1.112900302E-02,-9.117965419E-06,2.160384429E-05,-1.248587887E-05,6.785969017E-04,1.318631577E-03,0.000000000E+00,1.696766764E-01,1.344703014E-05,1.849625856E-01,5.012316704E+00,0.000000000E+00,2.465425245E-02,1.998481445E+02,-5.398707390E+00,3.021998882E+00,-2.229619473E-01 +8.363214731E-01,5.238895874E+02,1.671256561E+02,9.575695395E-01,3.843052089E-01,1.132138848E+00,3.230176544E+01,2.583521605E+00,2.583432674E+00,2.583400011E+00,2.583400011E+00,1.607291818E+00,7.833612061E+02,1.200000048E+00,1.943277359E+00,1.943277359E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.883259654E+00,2.583521605E+00,1.132054925E+00,3.229936981E+01,-8.908755262E-05,8.396573685E-05,2.395679010E-03,2.665347653E-03,2.169736147E+00,1.405090443E-03,1.143819094E+00,1.466411748E-03,1.193737984E+00,5.169374635E-04,4.208148718E-01,4.684400046E-04,1.551501337E-04,4.426685628E-03,1.022808137E-03,8.326207995E-01,8.326207995E-01,5.398984649E-04,4.395063818E-01,4.395063818E-01,5.628242507E-04,4.581692219E-01,4.581692219E-01,1.989792072E-04,1.619797647E-01,1.619797647E-01,1.801431936E-04,6.000122085E-05,1.711932477E-03,2.665354637E-03,2.169741869E+00,1.405092422E-03,1.143820763E+00,1.466411748E-03,1.193737984E+00,-5.169411888E-04,-4.208179414E-01,4.684479500E-04,-1.551461319E-04,-4.426571541E-03,1.636785120E-01,1.726427674E-01,2.167725801E+00,2.165345430E+00,4.001604980E+03,1.369771454E-02,5.264103413E-03,9.546511620E-02,8.377692662E-03,2.164319158E-02,1.803657971E-02,4.199067596E-03,2.756875801E-06,4.451602325E-02,6.650136948E+00,9.876584045E-06,5.543031421E-06,5.872943904E-03,5.872943904E-03,2.009986474E-06,1.635302752E-01,1.423176229E-01,5.162683502E-02,1.472997665E+00,9.131457806E-01,3.748448193E-02,1.069493294E+00,6.630039811E-01,3.829356655E-02,1.092577815E+00,6.773148179E-01,7.853335142E-02,4.445886612E-02,4.393141344E-02,4.754910991E-02,1.066300366E-02,-8.775842616E-06,2.101646169E-05,-1.224061998E-05,6.773244240E-04,1.316229231E-03,0.000000000E+00,1.619809568E-01,1.276856347E-05,1.886350513E-01,5.016454220E+00,0.000000000E+00,2.342330851E-02,1.998342285E+02,-5.372407913E+00,2.875760555E+00,-2.265119404E-01 +8.441212773E-01,5.287755737E+02,1.686731110E+02,9.575400352E-01,3.842933476E-01,1.133058548E+00,3.232800674E+01,2.583708763E+00,2.583620310E+00,2.583587646E+00,2.583587646E+00,1.607350588E+00,7.834273071E+02,1.200000048E+00,1.943376422E+00,1.943376422E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.886080623E+00,2.583708763E+00,1.132974982E+00,3.232561874E+01,-8.835119661E-05,8.360966604E-05,2.385519911E-03,2.620791085E-03,2.133464813E+00,1.397005981E-03,1.137237906E+00,1.448361902E-03,1.179044485E+00,4.922248772E-04,4.006974995E-01,4.588430165E-04,1.469782292E-04,4.193528090E-03,1.005669008E-03,8.186686635E-01,8.186686635E-01,5.367813283E-04,4.369688928E-01,4.369688928E-01,5.558840930E-04,4.525195658E-01,4.525195658E-01,1.894545276E-04,1.542261690E-01,1.542261690E-01,1.764372573E-04,5.683373820E-05,1.621559029E-03,2.620798070E-03,2.133470535E+00,1.397007727E-03,1.137239456E+00,1.448361902E-03,1.179044485E+00,-4.922284279E-04,-4.007004201E-01,4.588508164E-04,-1.469744602E-04,-4.193420522E-03,1.558787227E-01,1.644170731E-01,2.169384480E+00,2.167025328E+00,4.004527832E+03,1.359674707E-02,5.225140136E-03,9.471827745E-02,8.290839382E-03,2.142036892E-02,1.790509932E-02,4.155301023E-03,2.756875801E-06,4.412511364E-02,6.574987411E+00,9.876584045E-06,5.543031421E-06,5.811862182E-03,5.811862182E-03,2.009986474E-06,1.624036878E-01,1.414010376E-01,5.119351670E-02,1.460634351E+00,9.054675102E-01,3.737649322E-02,1.066412210E+00,6.610837579E-01,3.805716708E-02,1.085832953E+00,6.731231213E-01,7.794459164E-02,4.403465241E-02,4.356984794E-02,4.730718955E-02,1.019090600E-02,-8.452633665E-06,2.046474037E-05,-1.201210671E-05,6.761528202E-04,1.314019435E-03,0.000000000E+00,1.542272866E-01,1.209450875E-05,1.926098913E-01,5.020445824E+00,0.000000000E+00,2.220815979E-02,1.998209534E+02,-5.349707603E+00,2.729684830E+00,-2.281519026E-01 +8.519823551E-01,5.336998901E+02,1.702331543E+02,9.575121403E-01,3.842821717E-01,1.133943200E+00,3.235324478E+01,2.583887100E+00,2.583799601E+00,2.583766937E+00,2.583766937E+00,1.607406497E+00,7.834902954E+02,1.200000048E+00,1.943471074E+00,1.943471074E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.888796449E+00,2.583887100E+00,1.133859873E+00,3.235086823E+01,-8.761976642E-05,8.330195124E-05,2.376740333E-03,2.577604493E-03,2.098308563E+00,1.389225596E-03,1.130904317E+00,1.431006822E-03,1.164916515E+00,4.673226504E-04,3.804257512E-01,4.496740876E-04,1.388539240E-04,3.961728420E-03,9.890607325E-04,8.051486015E-01,8.051486015E-01,5.337818293E-04,4.345270991E-01,4.345270991E-01,5.492120399E-04,4.470881522E-01,4.470881522E-01,1.798585145E-04,1.464145035E-01,1.464145035E-01,1.728976349E-04,5.368565326E-05,1.531739021E-03,2.577611478E-03,2.098314285E+00,1.389227225E-03,1.130905628E+00,1.431006822E-03,1.164916515E+00,-4.673259973E-04,-3.804284930E-01,4.496817710E-04,-1.388503879E-04,-3.961627372E-03,1.480176598E-01,1.561268419E-01,2.170980692E+00,2.168641567E+00,4.007342773E+03,1.349962130E-02,5.187664647E-03,9.398804605E-02,8.207025938E-03,2.120529860E-02,1.777801476E-02,4.113065545E-03,2.756875801E-06,4.374378920E-02,6.502765179E+00,9.876584045E-06,5.543031421E-06,5.752917379E-03,5.752917379E-03,2.009986474E-06,1.612994224E-01,1.405096799E-01,5.076998472E-02,1.448550344E+00,8.979634047E-01,3.727227449E-02,1.063438654E+00,6.592308283E-01,3.782847524E-02,1.079307914E+00,6.690685153E-01,7.737790793E-02,4.362573475E-02,4.322120175E-02,4.707503319E-02,9.712344036E-03,-8.146477740E-06,1.994464765E-05,-1.179816900E-05,6.750833709E-04,1.312005101E-03,0.000000000E+00,1.464155614E-01,1.142458223E-05,1.969345212E-01,5.024286270E+00,0.000000000E+00,2.100847848E-02,1.998083191E+02,-5.330095291E+00,2.583657503E+00,-2.277488559E-01 +8.599051237E-01,5.386629028E+02,1.718058777E+02,9.574859142E-01,3.842716217E-01,1.134791493E+00,3.237744904E+01,2.584057093E+00,2.583970070E+00,2.583937407E+00,2.583937407E+00,1.607459903E+00,7.835501709E+02,1.200000048E+00,1.943561196E+00,1.943561196E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.891403317E+00,2.584057093E+00,1.134708524E+00,3.237508011E+01,-8.689752576E-05,8.303577488E-05,2.369145863E-03,2.535881009E-03,2.064343452E+00,1.381761394E-03,1.124828100E+00,1.414387953E-03,1.151387811E+00,4.422306665E-04,3.599995375E-01,4.409395333E-04,1.307740749E-04,3.731197212E-03,9.730185848E-04,7.920894623E-01,7.920894623E-01,5.309043918E-04,4.321846962E-01,4.321846962E-01,5.428236909E-04,4.418876469E-01,4.418876469E-01,1.701911096E-04,1.385447085E-01,1.385447085E-01,1.695266401E-04,5.055571091E-05,1.442436711E-03,2.535887994E-03,2.064349174E+00,1.381762908E-03,1.124829292E+00,1.414387953E-03,1.151387811E+00,-4.422338388E-04,-3.600021303E-01,4.409471003E-04,-1.307707716E-04,-3.731102683E-03,1.400948614E-01,1.477715671E-01,2.172511816E+00,2.170192003E+00,4.010044922E+03,1.340650115E-02,5.151738878E-03,9.327652305E-02,8.126400411E-03,2.099836804E-02,1.765559986E-02,4.072435666E-03,2.756875801E-06,4.337301105E-02,6.433569908E+00,9.876584045E-06,5.543031421E-06,5.696214270E-03,5.696214736E-03,2.009986474E-06,1.602210253E-01,1.396459341E-01,5.035742000E-02,1.436779141E+00,8.906542063E-01,3.717201576E-02,1.060578108E+00,6.574485302E-01,3.760818020E-02,1.073022604E+00,6.651630402E-01,7.683283836E-02,4.323104024E-02,4.288605228E-02,4.685238749E-02,9.226854891E-03,-7.854755495E-06,1.945059012E-05,-1.159583462E-05,6.741139805E-04,1.310181804E-03,0.000000000E+00,1.385457069E-01,1.075851651E-05,2.016689777E-01,5.027970314E+00,0.000000000E+00,1.982331648E-02,1.997963104E+02,-5.313136578E+00,2.437575102E+00,-2.252497673E-01 +8.678901792E-01,5.436649170E+02,1.733913879E+02,9.574612379E-01,3.842617273E-01,1.135602355E+00,3.240058517E+01,2.584218502E+00,2.584132195E+00,2.584099531E+00,2.584099531E+00,1.607510567E+00,7.836069336E+02,1.200000048E+00,1.943646789E+00,1.943646789E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.893896818E+00,2.584218502E+00,1.135519624E+00,3.239822006E+01,-8.618840366E-05,8.280629118E-05,2.362598199E-03,2.495712601E-03,2.031644344E+00,1.374627114E-03,1.119020343E+00,1.398547553E-03,1.138492823E+00,4.169485474E-04,3.394185305E-01,4.326471535E-04,1.227359317E-04,3.501855768E-03,9.575774311E-04,7.795194983E-01,7.795194983E-01,5.281542544E-04,4.299459755E-01,4.299459755E-01,5.367349368E-04,4.369310737E-01,4.369310737E-01,1.604520949E-04,1.306166202E-01,1.306166202E-01,1.663271541E-04,4.744281250E-05,1.353620668E-03,2.495719586E-03,2.031649828E+00,1.374628395E-03,1.119021416E+00,1.398547553E-03,1.138492942E+00,-4.169515159E-04,-3.394209445E-01,4.326545750E-04,-1.227328466E-04,-3.501767758E-03,1.321098357E-01,1.393506676E-01,2.173975468E+00,2.171674252E+00,4.012630127E+03,1.331753656E-02,5.117420107E-03,9.258580953E-02,8.049129508E-03,2.080000751E-02,1.753812097E-02,4.033495206E-03,2.756875801E-06,4.301376641E-02,6.367515087E+00,9.876584045E-06,5.543031421E-06,5.641869269E-03,5.641869269E-03,2.009986474E-06,1.591720283E-01,1.388122439E-01,4.995701090E-02,1.425354838E+00,8.835609555E-01,3.707593307E-02,1.057836652E+00,6.557407379E-01,3.739699721E-02,1.066997170E+00,6.614193320E-01,7.631000876E-02,4.285018891E-02,4.256501421E-02,4.664007947E-02,8.734042756E-03,-7.572813047E-06,1.897296897E-05,-1.140015593E-05,6.732387119E-04,1.308538252E-03,0.000000000E+00,1.306175590E-01,1.009607695E-05,2.068860829E-01,5.031492710E+00,0.000000000E+00,1.865016483E-02,1.997849426E+02,-5.298520565E+00,2.291361809E+00,-2.206534445E-01 +8.759379387E-01,5.487061768E+02,1.749897919E+02,9.574380517E-01,3.842524290E-01,1.136374354E+00,3.242261124E+01,2.584371090E+00,2.584285498E+00,2.584252834E+00,2.584252834E+00,1.607558489E+00,7.836606445E+02,1.200000048E+00,1.943727732E+00,1.943727732E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.896272779E+00,2.584371090E+00,1.136291742E+00,3.242025375E+01,-8.549620543E-05,8.261069161E-05,2.357017482E-03,2.457194496E-03,2.000288486E+00,1.367838006E-03,1.113493681E+00,1.383525785E-03,1.126264334E+00,3.914751578E-04,3.186818063E-01,4.248047189E-04,1.147370785E-04,3.273635404E-03,9.427735349E-04,7.674683332E-01,7.674683332E-01,5.255372962E-04,4.278156161E-01,4.278156161E-01,5.309610278E-04,4.322308302E-01,4.322308302E-01,1.506410044E-04,1.226298809E-01,1.226298809E-01,1.633020729E-04,4.434598668E-05,1.265263185E-03,2.457201248E-03,2.000293970E+00,1.367839170E-03,1.113494635E+00,1.383525785E-03,1.126264334E+00,-3.914779227E-04,-3.186840713E-01,4.248120240E-04,-1.147342118E-04,-3.273553681E-03,1.240620762E-01,1.308635771E-01,2.175369501E+00,2.173085690E+00,4.015093262E+03,1.323287562E-02,5.084765144E-03,9.191811085E-02,7.975379005E-03,2.061065100E-02,1.742584631E-02,3.996327985E-03,2.756875801E-06,4.266709089E-02,6.304715157E+00,9.876584045E-06,5.543031421E-06,5.589999724E-03,5.589999724E-03,2.009986474E-06,1.581560075E-01,1.380111426E-01,4.957001284E-02,1.414313078E+00,8.767057061E-01,3.698426858E-02,1.055221319E+00,6.541115642E-01,3.719561920E-02,1.061251521E+00,6.578497291E-01,7.581100613E-02,4.248347133E-02,4.225870222E-02,4.643988237E-02,8.233698085E-03,-7.297309821E-06,1.850502667E-05,-1.120771594E-05,6.724481354E-04,1.307056053E-03,0.000000000E+00,1.226307452E-01,9.437057997E-06,2.126721591E-01,5.034846783E+00,0.000000000E+00,1.748482324E-02,1.997742004E+02,-5.286068439E+00,2.144971371E+00,-2.140133083E-01 +8.840488791E-01,5.537870483E+02,1.766012115E+02,9.574162960E-01,3.842436969E-01,1.137106061E+00,3.244348907E+01,2.584515095E+00,2.584430218E+00,2.584397554E+00,2.584397554E+00,1.607603669E+00,7.837112427E+02,1.200000048E+00,1.943804145E+00,1.943804145E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.898526669E+00,2.584515095E+00,1.137023687E+00,3.244113541E+01,-8.482480916E-05,8.244794299E-05,2.352374140E-03,2.420431934E-03,1.970361710E+00,1.361410483E-03,1.108261347E+00,1.369358855E-03,1.114731669E+00,3.658090136E-04,2.977882028E-01,4.174187488E-04,1.067748963E-04,3.046461614E-03,9.286470013E-04,7.559685707E-01,7.559685707E-01,5.230598035E-04,4.257987738E-01,4.257987738E-01,5.255157594E-04,4.277980626E-01,4.277980626E-01,1.407572563E-04,1.145839766E-01,1.145839766E-01,1.604537829E-04,4.126418935E-05,1.177334459E-03,2.420438686E-03,1.970367193E+00,1.361411414E-03,1.108262062E+00,1.369358855E-03,1.114731669E+00,-3.658115747E-04,-2.977902889E-01,4.174259666E-04,-1.067722478E-04,-3.046385944E-03,1.159511134E-01,1.223097220E-01,2.176691294E+00,2.174423933E+00,4.017429932E+03,1.315267943E-02,5.053834524E-03,9.127583355E-02,7.905307226E-03,2.043071017E-02,1.731904596E-02,3.961013164E-03,2.756875801E-06,4.233412072E-02,6.245278358E+00,9.876584045E-06,5.543031421E-06,5.540715996E-03,5.540715996E-03,2.009986474E-06,1.571768820E-01,1.372452825E-01,4.919781163E-02,1.403693676E+00,8.701130152E-01,3.689727560E-02,1.052739263E+00,6.525655985E-01,3.700469807E-02,1.055804253E+00,6.544656157E-01,7.533777505E-02,4.213187099E-02,4.196772352E-02,4.625356942E-02,7.725747768E-03,-7.023943454E-06,1.803825398E-05,-1.101431099E-05,6.717292126E-04,1.305710059E-03,0.000000000E+00,1.145847812E-01,8.781236829E-06,2.191324383E-01,5.038027287E+00,0.000000000E+00,1.632198319E-02,1.997640839E+02,-5.275714397E+00,1.998397589E+00,-2.054777592E-01 +8.922235370E-01,5.589078369E+02,1.782257538E+02,9.573960304E-01,3.842355609E-01,1.137796283E+00,3.246318054E+01,2.584650040E+00,2.584565878E+00,2.584533215E+00,2.584533215E+00,1.607646108E+00,7.837586670E+02,1.200000048E+00,1.943875790E+00,1.943875790E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.900653958E+00,2.584650040E+00,1.137714028E+00,3.246083069E+01,-8.417834761E-05,8.231797256E-05,2.348665614E-03,2.385545289E-03,1.941962123E+00,1.355361193E-03,1.103336811E+00,1.356078428E-03,1.103920698E+00,3.399487759E-04,2.767365575E-01,4.104944528E-04,9.884632163E-05,2.820246387E-03,9.152438142E-04,7.450576425E-01,7.450576425E-01,5.207280628E-04,4.239006341E-01,4.239006341E-01,5.204112385E-04,4.236427546E-01,4.236427546E-01,1.308002684E-04,1.064784452E-01,1.064784452E-01,1.577841176E-04,3.819619815E-05,1.089799684E-03,2.385552041E-03,1.941967607E+00,1.355362008E-03,1.103337526E+00,1.356078428E-03,1.103920698E+00,-3.399511334E-04,-2.767385244E-01,4.105015541E-04,-9.884388419E-05,-2.820177004E-03,1.077764407E-01,1.136885211E-01,2.177938223E+00,2.175686359E+00,4.019635010E+03,1.307711657E-02,5.024693906E-03,9.066175669E-02,7.839059457E-03,2.026056312E-02,1.721800491E-02,3.927623853E-03,2.756875801E-06,4.201616719E-02,6.189298630E+00,9.876584045E-06,5.543031421E-06,5.494120531E-03,5.494120531E-03,2.009986474E-06,1.562390625E-01,1.365175247E-01,4.884197935E-02,1.393541217E+00,8.638106585E-01,3.681521118E-02,1.050397873E+00,6.511073709E-01,3.682482988E-02,1.050672293E+00,6.512775421E-01,7.489211112E-02,4.179710895E-02,4.169268161E-02,4.608194903E-02,7.210072130E-03,-6.753454272E-06,1.757426799E-05,-1.082081417E-05,6.710701273E-04,1.304476988E-03,0.000000000E+00,1.064791977E-01,8.128353329E-06,2.264032215E-01,5.041028500E+00,0.000000000E+00,1.515654195E-02,1.997545929E+02,-5.267453194E+00,1.851652026E+00,-1.953263283E-01 +9.004624486E-01,5.640688477E+02,1.798635559E+02,9.573771358E-01,3.842279911E-01,1.138443470E+00,3.248164749E+01,2.584776163E+00,2.584692478E+00,2.584659815E+00,2.584659815E+00,1.607685685E+00,7.838029175E+02,1.200000048E+00,1.943942666E+00,1.943942666E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.902650237E+00,2.584776163E+00,1.138361335E+00,3.247930145E+01,-8.356112085E-05,8.222117322E-05,2.345904009E-03,2.352669137E-03,1.915199161E+00,1.349706319E-03,1.098733544E+00,1.343713258E-03,1.093854785E+00,3.138937755E-04,2.555263937E-01,4.040362837E-04,9.094706911E-05,2.594867954E-03,9.026152547E-04,7.347773314E-01,7.347773314E-01,5.185484188E-04,4.221262932E-01,4.221262932E-01,5.156587576E-04,4.197739363E-01,4.197739363E-01,1.207697205E-04,9.831304848E-02,9.831304848E-02,1.552946778E-04,3.514033961E-05,1.002611010E-03,2.352675889E-03,1.915204763E+00,1.349707018E-03,1.098734140E+00,1.343713258E-03,1.093854785E+00,-3.138959582E-04,-2.555281818E-01,4.040432686E-04,-9.094484267E-05,-2.594804391E-03,9.953756630E-02,1.049994230E-01,2.179107904E+00,2.176870346E+00,4.021703857E+03,1.300636772E-02,4.997410811E-03,9.007897228E-02,7.776775863E-03,2.010056935E-02,1.712301001E-02,3.896229900E-03,2.756875801E-06,4.171469063E-02,6.136860847E+00,9.876584045E-06,5.543031421E-06,5.450311117E-03,5.450311117E-03,2.009986474E-06,1.553476304E-01,1.358308792E-01,4.850426689E-02,1.383905649E+00,8.578294516E-01,3.673833609E-02,1.048204541E+00,6.497413516E-01,3.665656224E-02,1.045871377E+00,6.482952237E-01,7.447531074E-02,4.148123786E-02,4.143422097E-02,4.592470080E-02,6.686375011E-03,-6.484557616E-06,1.711048571E-05,-1.062592855E-05,6.704608095E-04,1.303337398E-03,0.000000000E+00,9.831373394E-02,7.478051430E-06,2.346691340E-01,5.043843269E+00,0.000000000E+00,1.398440823E-02,1.997457581E+02,-5.261310577E+00,1.704778194E+00,-1.839695424E-01 +9.087660313E-01,5.692703857E+02,1.815147247E+02,9.573597312E-01,3.842209876E-01,1.139046192E+00,3.249884033E+01,2.584892750E+00,2.584809780E+00,2.584777117E+00,2.584777117E+00,1.607722402E+00,7.838438721E+02,1.200000048E+00,1.944004655E+00,1.944004655E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.904510736E+00,2.584892750E+00,1.138964057E+00,3.249649811E+01,-8.297738532E-05,8.215754497E-05,2.344088396E-03,2.321946668E-03,1.890189528E+00,1.344460761E-03,1.094463348E+00,1.332289656E-03,1.084555387E+00,2.876436920E-04,2.341574430E-01,3.980498295E-04,8.307214011E-05,2.370183356E-03,8.908159216E-04,7.251720428E-01,7.251720428E-01,5.165264593E-04,4.204803109E-01,4.204803109E-01,5.112684448E-04,4.161999822E-01,4.161999822E-01,1.106654308E-04,9.008760750E-02,9.008760750E-02,1.529874862E-04,3.209465649E-05,9.157127352E-04,2.321953420E-03,1.890195012E+00,1.344461460E-03,1.094463825E+00,1.332289656E-03,1.084555387E+00,-2.876457002E-04,-2.341590673E-01,3.980567271E-04,-8.307012467E-05,-2.370125847E-03,9.123396873E-02,9.624182433E-02,2.180197477E+00,2.177973032E+00,4.023631348E+03,1.294060890E-02,4.972053692E-03,8.953080326E-02,7.718602661E-03,1.995111629E-02,1.703435555E-02,3.866906278E-03,2.756875801E-06,4.143125936E-02,6.088055134E+00,9.876584045E-06,5.543031421E-06,5.409391131E-03,5.409391131E-03,2.009986474E-06,1.545080096E-01,1.351884454E-01,4.818653688E-02,1.374840260E+00,8.522024155E-01,3.666687757E-02,1.046165705E+00,6.484717131E-01,3.650042415E-02,1.041416407E+00,6.455278993E-01,7.408824563E-02,4.118596762E-02,4.119308665E-02,4.578108713E-02,6.154212635E-03,-6.223512628E-06,1.665911259E-05,-1.043559951E-05,6.698991056E-04,1.302286983E-03,0.000000000E+00,9.008823335E-02,6.829915037E-06,2.441839278E-01,5.046464920E+00,0.000000000E+00,1.280324627E-02,1.997375793E+02,-5.257287025E+00,1.557797074E+00,-1.719171554E-01 +9.171348214E-01,5.745128174E+02,1.831793976E+02,9.573436975E-01,3.842145503E-01,1.139602900E+00,3.251472473E+01,2.585000038E+00,2.584917545E+00,2.584884882E+00,2.584884882E+00,1.607756019E+00,7.838815308E+02,1.200000048E+00,1.944061518E+00,1.944061518E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.906230330E+00,2.585000038E+00,1.139520764E+00,3.251238251E+01,-8.243085904E-05,8.212643297E-05,2.343200846E-03,2.293520607E-03,1.867049098E+00,1.339638373E-03,1.090537667E+00,1.321831252E-03,1.076041698E+00,2.611984964E-04,2.126296312E-01,3.925429482E-04,7.521490625E-05,2.146003768E-03,8.799002389E-04,7.162861228E-01,7.162861228E-01,5.146675394E-04,4.189670384E-01,4.189670384E-01,5.072494387E-04,4.129283130E-01,4.129283130E-01,1.004872829E-04,8.180204779E-02,8.180204779E-02,1.508654677E-04,2.905656402E-05,8.290310507E-04,2.293527359E-03,1.867054701E+00,1.339638839E-03,1.090538025E+00,1.321831252E-03,1.076041698E+00,-2.612003300E-04,-2.126311064E-01,3.925497585E-04,-7.521309453E-05,-2.145951847E-03,8.286514878E-02,8.741520345E-02,2.181204081E+00,2.178991795E+00,4.025412598E+03,1.288001612E-02,4.948690068E-03,8.902060986E-02,7.664709352E-03,1.981263980E-02,1.695233025E-02,3.839737969E-03,2.756875801E-06,4.116747901E-02,6.042991638E+00,9.876584045E-06,5.543031421E-06,5.371480249E-03,5.371480249E-03,2.009986474E-06,1.537257284E-01,1.345933080E-01,4.789067805E-02,1.366398931E+00,8.469629884E-01,3.660106286E-02,1.044287920E+00,6.473022699E-01,3.635689244E-02,1.037321329E+00,6.429840922E-01,7.373170555E-02,4.091253132E-02,4.097007588E-02,4.565058649E-02,5.613154732E-03,-5.972189683E-06,1.622324635E-05,-1.025105576E-05,6.693830946E-04,1.301322016E-03,0.000000000E+00,8.180261403E-02,6.183393907E-06,2.552981079E-01,5.048887730E+00,0.000000000E+00,1.161230449E-02,1.997300568E+02,-5.255339622E+00,1.410763502E+00,-1.597233862E-01 +9.255694151E-01,5.797963867E+02,1.848577118E+02,9.573292136E-01,3.842087388E-01,1.140111804E+00,3.252924728E+01,2.585097551E+00,2.585015535E+00,2.584982872E+00,2.584982872E+00,1.607786655E+00,7.839157715E+02,1.200000048E+00,1.944113255E+00,1.944113255E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.907804012E+00,2.585097551E+00,1.140029788E+00,3.252690506E+01,-8.192479436E-05,8.212507237E-05,2.343161963E-03,2.267524134E-03,1.845886588E+00,1.335249981E-03,1.086965322E+00,1.312356675E-03,1.068328857E+00,2.345576504E-04,1.909425408E-01,3.875265538E-04,6.736897922E-05,1.922146534E-03,8.699191967E-04,7.081609964E-01,7.081609964E-01,5.129759084E-04,4.175899625E-01,4.175899625E-01,5.036087823E-04,4.099646211E-01,4.099646211E-01,9.023496386E-05,7.345611602E-02,7.345611602E-02,1.489327988E-04,2.602355744E-05,7.424944779E-04,2.267530886E-03,1.845892072E+00,1.335250447E-03,1.086965680E+00,1.312356675E-03,1.068328857E+00,-2.345592802E-04,-1.909438521E-01,3.875332477E-04,-6.736735668E-05,-1.922100433E-03,7.443059981E-02,7.851903141E-02,2.182124853E+00,2.179923534E+00,4.027042480E+03,1.282475516E-02,4.927383270E-03,8.855157346E-02,7.615292445E-03,1.968564652E-02,1.687721908E-02,3.814825090E-03,2.756875801E-06,4.092488438E-02,6.001805305E+00,9.876584045E-06,5.543031421E-06,5.336717702E-03,5.336717702E-03,2.009986474E-06,1.530060321E-01,1.340483129E-01,4.761849716E-02,1.358633161E+00,8.421429992E-01,3.654106706E-02,1.042576075E+00,6.462363601E-01,3.622637317E-02,1.033597469E+00,6.406710148E-01,7.340645045E-02,4.066172987E-02,4.076599702E-02,4.553303123E-02,5.062921438E-03,-5.738225809E-06,1.581746619E-05,-1.007924038E-05,6.689244183E-04,1.300464850E-03,0.000000000E+00,7.345662266E-02,5.537954621E-06,2.685045898E-01,5.051103592E+00,0.000000000E+00,1.041296031E-02,1.997232361E+02,-5.255291939E+00,1.263637900E+00,-1.479126513E-01 +9.340702295E-01,5.851214600E+02,1.865497894E+02,9.573161602E-01,3.842035234E-01,1.140571475E+00,3.254236221E+01,2.585185051E+00,2.585103512E+00,2.585070848E+00,2.585070848E+00,1.607814193E+00,7.839464722E+02,1.200000048E+00,1.944159746E+00,1.944159746E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.909226179E+00,2.585185051E+00,1.140489340E+00,3.254001617E+01,-8.146204345E-05,8.214955596E-05,2.343860688E-03,2.244074596E-03,1.826797366E+00,1.331307925E-03,1.083756208E+00,1.303878264E-03,1.061426997E+00,2.077205136E-04,1.690956652E-01,3.830126952E-04,5.952512583E-05,1.698348671E-03,8.609176148E-04,7.008332014E-01,7.008332014E-01,5.114562809E-04,4.163528979E-01,4.163528979E-01,5.003510742E-04,4.073126912E-01,4.073126912E-01,7.990814629E-05,6.504952163E-02,6.504952163E-02,1.471940341E-04,2.299203152E-05,6.560000475E-04,2.244081348E-03,1.826802969E+00,1.331308275E-03,1.083756447E+00,1.303878264E-03,1.061426997E+00,-2.077219542E-04,-1.690968275E-01,3.830193309E-04,-5.952370338E-05,-1.698308159E-03,6.592980027E-02,6.955274940E-02,2.182956457E+00,2.180765152E+00,4.028514893E+03,1.277498715E-02,4.908195231E-03,8.812656999E-02,7.570557296E-03,1.957067288E-02,1.680929959E-02,3.792271484E-03,2.756875801E-06,4.070488364E-02,5.964643002E+00,9.876584045E-06,5.543031421E-06,5.305247381E-03,5.305247381E-03,2.009986474E-06,1.523536146E-01,1.335559934E-01,4.737164080E-02,1.351590037E+00,8.377715945E-01,3.648708761E-02,1.041036010E+00,6.452773213E-01,3.610918298E-02,1.030253768E+00,6.385940909E-01,7.311316580E-02,4.043425247E-02,4.058163986E-02,4.542828724E-02,4.503223579E-03,-5.526688710E-06,1.545135819E-05,-9.924669939E-06,6.685166736E-04,1.299703144E-03,0.000000000E+00,6.504997611E-02,4.892830020E-06,2.845369577E-01,5.053104877E+00,0.000000000E+00,9.206891991E-03,1.997171021E+02,-5.256894588E+00,1.116455674E+00,-1.369077712E-01 +9.426378012E-01,5.904884033E+02,1.882557831E+02,9.573047161E-01,3.841989040E-01,1.140980124E+00,3.255401993E+01,2.585262299E+00,2.585181236E+00,2.585148573E+00,2.585148573E+00,1.607838392E+00,7.839736328E+02,1.200000048E+00,1.944200754E+00,1.944200754E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.910491347E+00,2.585262299E+00,1.140897870E+00,3.255167389E+01,-8.104568406E-05,8.219384472E-05,2.345124260E-03,2.223277930E-03,1.809867740E+00,1.327820355E-03,1.080917120E+00,1.296404167E-03,1.055342674E+00,1.806862565E-04,1.470883191E-01,3.790147603E-04,5.167715790E-05,1.474433462E-03,8.529359475E-04,6.943356991E-01,6.943356991E-01,5.101118004E-04,4.152584076E-01,4.152584076E-01,4.974792828E-04,4.049748778E-01,4.049748778E-01,6.950637180E-05,5.658192188E-02,5.658192188E-02,1.456542232E-04,1.995950333E-05,5.694771535E-04,2.223284682E-03,1.809873223E+00,1.327820588E-03,1.080917358E+00,1.296404167E-03,1.055342674E+00,-1.806875080E-04,-1.470893472E-01,3.790213377E-04,-5.167593190E-05,-1.474398421E-03,5.736222491E-02,6.051547825E-02,2.183696032E+00,2.181513309E+00,4.029824707E+03,1.273086108E-02,4.891183227E-03,8.774819225E-02,7.530719507E-03,1.946827210E-02,1.674885117E-02,3.772186115E-03,2.756875801E-06,4.050879925E-02,5.931653500E+00,9.876584045E-06,5.543031421E-06,5.277221091E-03,5.277221091E-03,2.009986474E-06,1.517726630E-01,1.331186295E-01,4.715162888E-02,1.345312715E+00,8.338756561E-01,3.643926606E-02,1.039671540E+00,6.444277167E-01,3.600556031E-02,1.027297258E+00,6.367576718E-01,7.285270095E-02,4.023124278E-02,4.041786119E-02,4.533598945E-02,3.933553584E-03,-5.333688023E-06,1.511709615E-05,-9.783408132E-06,6.681794766E-04,1.299074967E-03,0.000000000E+00,5.658231303E-02,4.247492143E-06,3.045640290E-01,5.054884434E+00,0.000000000E+00,7.994514890E-03,1.997116852E+02,-5.259759903E+00,9.690310955E-01,-1.269897968E-01 +9.512726665E-01,5.958974609E+02,1.899758148E+02,9.572947621E-01,3.841949105E-01,1.141335726E+00,3.256416702E+01,2.585329294E+00,2.585248470E+00,2.585215807E+00,2.585215807E+00,1.607859492E+00,7.839970703E+02,1.200000048E+00,1.944236279E+00,1.944236279E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.911593556E+00,2.585329294E+00,1.141253471E+00,3.256182098E+01,-8.067869203E-05,8.225406782E-05,2.346842317E-03,2.205226105E-03,1.795172691E+00,1.324800658E-03,1.078458905E+00,1.289937529E-03,1.050078511E+00,1.534559997E-04,1.249214411E-01,3.755456419E-04,4.381499457E-05,1.250113128E-03,8.460094105E-04,6.886971593E-01,6.886971593E-01,5.089477636E-04,4.143108428E-01,4.143108428E-01,4.949943395E-04,4.029519856E-01,4.029519856E-01,5.903002602E-05,4.805361480E-02,4.805361480E-02,1.443182555E-04,1.692202750E-05,4.828129895E-04,2.205233090E-03,1.795178175E+00,1.324800774E-03,1.078459024E+00,1.289937529E-03,1.050078511E+00,-1.534570620E-04,-1.249222979E-01,3.755521320E-04,-4.381395775E-05,-1.250083558E-03,4.872735962E-02,5.140732229E-02,2.184340000E+00,2.182164907E+00,4.030965332E+03,1.269253343E-02,4.876406863E-03,8.741871268E-02,7.495983038E-03,1.937897876E-02,1.669615321E-02,3.754672362E-03,2.756875801E-06,4.033782333E-02,5.902980328E+00,9.876584045E-06,5.543031421E-06,5.252784118E-03,5.252784118E-03,2.009986474E-06,1.512667686E-01,1.327382326E-01,4.695982486E-02,1.339840174E+00,8.304793239E-01,3.639780730E-02,1.038488746E+00,6.436912417E-01,3.591566533E-02,1.024732351E+00,6.351645589E-01,7.262747735E-02,4.005523399E-02,4.027551413E-02,4.525708407E-02,3.353708889E-03,-5.177743333E-06,1.485207304E-05,-9.674329704E-06,6.678781356E-04,1.298512798E-03,0.000000000E+00,4.805394262E-02,3.601100843E-06,3.305387199E-01,5.056434155E+00,0.000000000E+00,6.781072356E-03,1.997070007E+02,-5.263640404E+00,8.215055466E-01,-1.183080301E-01 +9.599753618E-01,6.013489990E+02,1.917100067E+02,9.572864175E-01,3.841915727E-01,1.141636729E+00,3.257275391E+01,2.585385561E+00,2.585305214E+00,2.585272551E+00,2.585272551E+00,1.607877135E+00,7.840168457E+02,1.200000048E+00,1.944266200E+00,1.944266200E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.912526488E+00,2.585385561E+00,1.141554356E+00,3.257040405E+01,-8.036557119E-05,8.232126129E-05,2.348759677E-03,2.189987805E-03,1.782767892E+00,1.322253840E-03,1.076385617E+00,1.284473343E-03,1.045630336E+00,1.260252175E-04,1.025912985E-01,3.726170107E-04,3.593475049E-05,1.025276841E-03,8.401637315E-04,6.839384437E-01,6.839384437E-01,5.079660332E-04,4.135116339E-01,4.135116339E-01,4.928942653E-04,4.012424350E-01,4.012424350E-01,4.847720993E-05,3.946305439E-02,3.946305439E-02,1.431905112E-04,1.387797874E-05,3.959613387E-04,2.189994557E-03,1.782773376E+00,1.322253956E-03,1.076385736E+00,1.284473343E-03,1.045630336E+00,-1.260260760E-04,-1.025920063E-01,3.726234718E-04,-3.593390284E-05,-1.025252743E-03,4.002466798E-02,4.222698510E-02,2.184885025E+00,2.182716131E+00,4.031930908E+03,1.266013738E-02,4.863918293E-03,8.713980764E-02,7.466536481E-03,1.930327527E-02,1.665149815E-02,3.739825217E-03,2.756875801E-06,4.019293189E-02,5.878724575E+00,9.876584045E-06,5.543031421E-06,5.232067779E-03,5.232067779E-03,2.009986474E-06,1.508384794E-01,1.324162483E-01,4.679729789E-02,1.335203052E+00,8.276014328E-01,3.636280820E-02,1.037490010E+00,6.430693865E-01,3.583952785E-02,1.022560000E+00,6.338153481E-01,7.243826240E-02,3.990743309E-02,4.015510157E-02,4.519136623E-02,2.763930010E-03,-5.020894150E-06,1.458096267E-05,-9.560068975E-06,6.676601479E-04,1.298109069E-03,0.000000000E+00,3.946332633E-02,2.953310741E-06,3.660441935E-01,5.057744980E+00,0.000000000E+00,5.567928776E-03,1.997030640E+02,-5.267963409E+00,6.734555960E-01,-1.109122410E-01 +9.687463641E-01,6.068433838E+02,1.934585266E+02,9.572796226E-01,3.841888607E-01,1.141880989E+00,3.257972336E+01,2.585431099E+00,2.585350990E+00,2.585318327E+00,2.585318327E+00,1.607891560E+00,7.840328979E+02,1.200000048E+00,1.944290400E+00,1.944290400E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.913284302E+00,2.585431099E+00,1.141798615E+00,3.257737350E+01,-8.011020691E-05,8.239254385E-05,2.350793453E-03,2.177641960E-03,1.772717714E+00,1.320197131E-03,1.074711442E+00,1.280027791E-03,1.042011499E+00,9.839180711E-05,8.009622246E-02,3.702394897E-04,2.801958544E-05,7.994443877E-04,8.354287129E-04,6.800838709E-01,6.800838709E-01,5.071733030E-04,4.128663540E-01,4.128663540E-01,4.911852884E-04,3.998512328E-01,3.998512328E-01,3.784703949E-05,3.080952540E-02,3.080952540E-02,1.422750065E-04,1.082080598E-05,3.087352088E-04,2.177648712E-03,1.772723198E+00,1.320197247E-03,1.074711561E+00,1.280027791E-03,1.042011499E+00,-9.839248378E-05,-8.009677380E-02,3.702458926E-04,-2.801892879E-05,-7.994256448E-04,3.125361726E-02,3.297326341E-02,2.185327530E+00,2.183163881E+00,4.032715088E+03,1.263382845E-02,4.853776190E-03,8.691339940E-02,7.442547940E-03,1.924159937E-02,1.661516726E-02,3.727729432E-03,2.756875801E-06,4.007514566E-02,5.858986378E+00,9.876584045E-06,5.543031421E-06,5.215190817E-03,5.215190817E-03,2.009986474E-06,1.504907310E-01,1.321546584E-01,4.666520655E-02,1.331434369E+00,8.252625465E-01,3.633451834E-02,1.036682844E+00,6.425668597E-01,3.577746451E-02,1.020789266E+00,6.327155232E-01,7.227803022E-02,3.978328407E-02,4.005731642E-02,4.513102770E-02,2.163738944E-03,-4.921079835E-06,1.441957556E-05,-9.498496183E-06,6.674499600E-04,1.297716633E-03,0.000000000E+00,3.080973774E-02,2.302727580E-06,4.189927280E-01,5.058809757E+00,0.000000000E+00,4.342221189E-03,1.996998596E+02,-5.272543430E+00,5.251505375E-01,-1.048275381E-01 +9.775863290E-01,6.123809204E+02,1.952214966E+02,9.572745562E-01,3.841868043E-01,1.142066836E+00,3.258502579E+01,2.585465670E+00,2.585385799E+00,2.585353136E+00,2.585353136E+00,1.607902408E+00,7.840449829E+02,1.200000048E+00,1.944308758E+00,1.944308758E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.913860798E+00,2.585465670E+00,1.141984344E+00,3.258267212E+01,-7.991556049E-05,8.245210483E-05,2.352492884E-03,2.168304753E-03,1.765116692E+00,1.318634022E-03,1.073439002E+00,1.276651630E-03,1.039263129E+00,7.055682363E-05,5.743704736E-02,3.684368276E-04,2.007775402E-05,5.728509859E-04,8.318482433E-04,6.771691442E-01,6.771691442E-01,5.065707956E-04,4.123758674E-01,4.123758674E-01,4.898870247E-04,3.987943828E-01,3.987943828E-01,2.713978756E-05,2.209324762E-02,2.209324762E-02,1.415808365E-04,7.753573300E-06,2.212220716E-04,2.168311737E-03,1.765122294E+00,1.318634022E-03,1.073439002E+00,1.276651630E-03,1.039263129E+00,-7.055731112E-05,-5.743744224E-02,3.684432304E-04,-2.007728472E-05,-5.728375982E-04,2.241367660E-02,2.364728227E-02,2.185664177E+00,2.183504343E+00,4.033311768E+03,1.261379942E-02,4.846055061E-03,8.674187958E-02,7.424309384E-03,1.919470355E-02,1.658751070E-02,3.718532855E-03,2.756875801E-06,3.998583928E-02,5.843982697E+00,9.876584045E-06,5.543031421E-06,5.202359054E-03,5.202359054E-03,2.009986474E-06,1.502273381E-01,1.319561899E-01,4.656505957E-02,1.328576922E+00,8.234891891E-01,3.631300107E-02,1.036069036E+00,6.421846151E-01,3.573025763E-02,1.019442320E+00,6.318789721E-01,7.215587050E-02,3.968912363E-02,3.998372704E-02,4.508370534E-02,1.554035698E-03,-4.839747817E-06,1.428955875E-05,-9.449810932E-06,6.673599128E-04,1.297553768E-03,0.000000000E+00,2.209339850E-02,1.650003696E-06,5.113495588E-01,5.059619427E+00,0.000000000E+00,3.101135138E-03,1.996974487E+02,-5.276369095E+00,3.760104179E-01,-1.000970453E-01 +9.864956737E-01,6.179619141E+02,1.969990692E+02,9.572710991E-01,3.841854334E-01,1.142192245E+00,3.258860397E+01,2.585488796E+00,2.585409164E+00,2.585376501E+00,2.585376501E+00,1.607909679E+00,7.840531006E+02,1.200000048E+00,1.944321036E+00,1.944321036E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.914250374E+00,2.585488796E+00,1.142109752E+00,3.258625031E+01,-7.978246140E-05,8.250764222E-05,2.354077296E-03,2.162023680E-03,1.760003567E+00,1.317585236E-03,1.072585225E+00,1.274366048E-03,1.037402511E+00,4.251731298E-05,3.461137787E-02,3.672186285E-04,1.209331731E-05,3.450420336E-04,8.294401341E-04,6.752088666E-01,6.752088666E-01,5.061667180E-04,4.120469391E-01,4.120469391E-01,4.890079726E-04,3.980787694E-01,3.980787694E-01,1.635421177E-05,1.331320684E-02,1.331320684E-02,1.411117555E-04,4.670091585E-06,1.332453103E-04,2.162030432E-03,1.760009050E+00,1.317585236E-03,1.072585225E+00,1.274366165E-03,1.037402511E+00,-4.251760765E-05,-3.461161628E-02,3.672249732E-04,-1.209303537E-05,-3.450339718E-04,1.350430027E-02,1.425155438E-02,2.185891628E+00,2.183734179E+00,4.033714844E+03,1.260025147E-02,4.840833135E-03,8.662644029E-02,7.411959581E-03,1.916294731E-02,1.656876318E-02,3.712305333E-03,2.756875801E-06,3.992560133E-02,5.833846569E+00,9.876584045E-06,5.543031421E-06,5.193670280E-03,5.193670280E-03,2.009986474E-06,1.500500441E-01,1.318223476E-01,4.649756476E-02,1.326651216E+00,8.222941756E-01,3.629855439E-02,1.035656929E+00,6.419280171E-01,3.569826111E-02,1.018529534E+00,6.313120127E-01,7.210994512E-02,3.965229914E-02,3.993437439E-02,4.508640245E-02,9.383470169E-04,-4.719805474E-06,1.407379023E-05,-9.353984751E-06,6.672277232E-04,1.297304872E-03,0.000000000E+00,1.331329904E-02,9.938215726E-07,7.490155697E-01,5.060166359E+00,0.000000000E+00,1.882218523E-03,1.996958313E+02,-5.279932499E+00,2.264202237E-01,-9.682776779E-02 +9.954750538E-01,6.235867920E+02,1.987913818E+02,9.572693110E-01,3.841846883E-01,1.142255902E+00,3.259041977E+01,2.585500956E+00,2.585421085E+00,2.585388422E+00,2.585388422E+00,1.607913375E+00,7.840573730E+02,1.200000048E+00,1.944327354E+00,1.944327354E+00,3.500000000E+00,2.500000000E+00,6.999999881E-01,1.914447904E+00,2.585500956E+00,1.142173409E+00,3.258806610E+01,-7.971818559E-05,8.252770203E-05,2.354649594E-03,2.158800839E-03,1.757379889E+00,1.317049260E-03,1.072148919E+00,1.273176284E-03,1.036433935E+00,1.422269816E-05,1.157804113E-02,3.665948170E-04,4.040346539E-06,1.152776604E-04,8.282044437E-04,6.742029190E-01,6.742029190E-01,5.059600808E-04,4.118787050E-01,4.118787050E-01,4.885501694E-04,3.977060914E-01,3.977060914E-01,5.470734322E-06,4.453471862E-03,4.453471862E-03,1.408714888E-04,1.560268288E-06,4.451699351E-05,2.158807591E-03,1.757385492E+00,1.317049260E-03,1.072148919E+00,1.273176284E-03,1.036433935E+00,-1.422279638E-05,-1.157812122E-02,3.666011617E-04,-4.040251952E-06,-1.152749610E-04,4.524943419E-03,4.767190199E-03,2.186006784E+00,2.183851004E+00,4.033918945E+03,1.259334385E-02,4.838170018E-03,8.656708896E-02,7.405627519E-03,1.914666593E-02,1.655926928E-02,3.709112294E-03,2.756875801E-06,3.989470005E-02,5.828595161E+00,9.876584045E-06,5.543031421E-06,5.189215299E-03,5.189215299E-03,2.009986474E-06,1.499587297E-01,1.317534000E-01,4.646289721E-02,1.325662017E+00,8.216802478E-01,3.629117087E-02,1.035446167E+00,6.417968273E-01,3.568159789E-02,1.018054008E+00,6.310166717E-01,7.202827185E-02,3.959047794E-02,3.990827128E-02,4.503327608E-02,3.563289356E-04,-4.744541911E-06,1.413679820E-05,-9.392256288E-06,6.671985611E-04,1.297252486E-03,0.000000000E+00,4.453502595E-03,3.320337782E-07,5.510860920E+00,5.060443878E+00,0.000000000E+00,1.736788079E-03,1.996949921E+02,-5.281220913E+00,7.594203949E-02,-9.513746202E-02 diff --git a/testcases/ShuOsherProblem/200.json b/testcases/ShuOsherProblem/200.json new file mode 100644 index 0000000..437430a --- /dev/null +++ b/testcases/ShuOsherProblem/200.json @@ -0,0 +1,169 @@ +{ + "Mapping" : { + "tiles" : [1,1,1], + "tilesPerRank" : [1,1,1], + "sampleId" : -1, + "outDir" : "100", + "wallTime" : 10000 + }, + + "Grid" : { + "xNum" : 200, + "yNum" : 1, + "zNum" : 1, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 10.0, + "yWidth" : 1.0, + "zWidth" : 1.0, + "xType" : "Uniform", + "yType" : "Uniform", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 450, + "maxTime" : 1.8, + "cfl" : -0.4, + "fixedDeltaTime" : 4.0e-3, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "Dirichlet", + "xBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [2.629, 0.0, 0.0] + }, + "xBCLeftP" : 10.333, + "xBCLeftHeat" : { + "type" : "Constant", + "temperature" : 2.67902514908 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "NSCBC_Outflow", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : 1.0, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : 1.02719008098016 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "Periodic", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : 0.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "Periodic", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : 0.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 1.0, + "gamma" : 1.4, + "prandtl" : 0.71, + "viscosityModel" : "Constant", + "constantVisc" : 0.0, + "powerlawViscRef" : -1.0, + "powerlawTempRef" : -1.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "ShuOsherProblem", + "restartDir" : "", + "initParams" : [1.0, 1.0, 0.80, 0.0, 0.0], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { "type" : "OFF" } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 10, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } +} diff --git a/testcases/ShuOsherProblem/exact.txt b/testcases/ShuOsherProblem/exact.txt new file mode 100644 index 0000000..f354b19 --- /dev/null +++ b/testcases/ShuOsherProblem/exact.txt @@ -0,0 +1,2001 @@ + 0.0000000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.9999998882412910E-03 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.9999997764825821E-03 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4999999664723873E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9999999552965164E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.5000000372529030E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.9999999329447746E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.5000000149011612E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.9999999105930328E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.5000001788139343E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.0000000745058060E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.4999999701976776E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.9999998658895493E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.4999997615814209E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.0000000298023224E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.5000002980232239E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.9999998211860657E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.5000000894069672E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.0000003576278687E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.4999998807907104E-02 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0000000149011612E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0499999672174454E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0999999940395355E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1500000208616257E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1999999731779099E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2500000000000000E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2999999523162842E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3500000536441803E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4000000059604645E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4499999582767487E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5000000596046448E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5500000119209290E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5999999642372131E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6500000655651093E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7000000178813934E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7499999701976776E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8000000715255737E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8500000238418579E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8999999761581421E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9499999284744263E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0000000298023224E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0499999821186066E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0999999344348907E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1500000357627869E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1999999880790710E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.2499999403953552E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.3000000417232513E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.3499999940395355E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.3999999463558197E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.4500000476837158E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.5000000000000000E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.5499999523162842E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.5999999046325684E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.6499998569488525E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.7000001072883606E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.7500000596046448E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.8000000119209290E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.8499999642372131E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.8999999165534973E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.9499998688697815E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.0000001192092896E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.0500000715255737E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.1000000238418579E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.1499999761581421E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.1999999284744263E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.2499998807907104E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.3000001311302185E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.3500000834465027E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.4000000357627869E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.4499999880790710E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.4999999403953552E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.5499998927116394E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.6000001430511475E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.6500000953674316E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.7000000476837158E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.7500000000000000E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.7999999523162842E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.8499999046325684E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.8999998569488525E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 3.9500001072883606E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.0000000596046448E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.0500000119209290E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.0999999642372131E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.1499999165534973E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.1999998688697815E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.2500001192092896E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.3000000715255737E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.3500000238418579E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.3999999761581421E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.4499999284744263E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.4999998807907104E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.5500001311302185E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.6000000834465027E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.6500000357627869E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.6999999880790710E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.7499999403953552E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.7999998927116394E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.8500001430511475E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.9000000953674316E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 4.9500000476837158E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.0000000000000000E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.0499999523162842E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.0999999046325684E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.1499998569488525E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.1999998092651367E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.2499997615814209E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.2999997138977051E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.3500002622604370E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.4000002145767212E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.4500001668930054E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.5000001192092896E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.5500000715255737E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.6000000238418579E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.6499999761581421E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.6999999284744263E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.7499998807907104E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.7999998331069946E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.8499997854232788E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.8999997377395630E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 5.9500002861022949E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.0000002384185791E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.0500001907348633E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.1000001430511475E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.1500000953674316E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.2000000476837158E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.2500000000000000E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.2999999523162842E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.3499999046325684E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.3999998569488525E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.4499998092651367E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.4999997615814209E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.5499997138977051E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.6000002622604370E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.6500002145767212E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.7000001668930054E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.7500001192092896E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.8000000715255737E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.8500000238418579E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.8999999761581421E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.9499999284744263E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 6.9999998807907104E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.0499998331069946E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.0999997854232788E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.1499997377395630E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.2000002861022949E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.2500002384185791E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.3000001907348633E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.3500001430511475E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.4000000953674316E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.4500000476837158E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.5000000000000000E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.5499999523162842E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.5999999046325684E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.6499998569488525E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.6999998092651367E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.7499997615814209E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.7999997138977051E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.8500002622604370E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.9000002145767212E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 7.9500001668930054E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.0000001192092896E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.0500000715255737E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.1000000238418579E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.1499999761581421E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.1999999284744263E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.2499998807907104E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.2999998331069946E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.3499997854232788E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.3999997377395630E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.4500002861022949E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.5000002384185791E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.5500001907348633E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.6000001430511475E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.6500000953674316E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.7000000476837158E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.7500000000000000E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.7999999523162842E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.8499999046325684E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.8999998569488525E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.9499998092651367E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 8.9999997615814209E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.0499997138977051E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.1000002622604370E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.1500002145767212E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.2000001668930054E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.2500001192092896E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.3000000715255737E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.3500000238418579E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.3999999761581421E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.4499999284744263E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.4999998807907104E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.5499998331069946E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.5999997854232788E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.6499997377395630E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.7000002861022949E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.7500002384185791E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.8000001907348633E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.8500001430511475E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.9000000953674316E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 9.9500000476837158E-01 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0000000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0049999952316284E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0099999904632568E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0149999856948853E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0199999809265137E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0249999761581421E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0299999713897705E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0349999666213989E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0399999618530273E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0449999570846558E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0499999523162842E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0549999475479126E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0599999427795410E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0650000572204590E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0700000524520874E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0750000476837158E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0800000429153442E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0850000381469727E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0900000333786011E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.0950000286102295E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1000000238418579E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1050000190734863E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1100000143051147E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1150000095367432E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1200000047683716E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1250000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1299999952316284E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1349999904632568E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1399999856948853E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1449999809265137E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1499999761581421E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1549999713897705E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1599999666213989E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1649999618530273E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1699999570846558E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1749999523162842E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1799999475479126E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1849999427795410E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1900000572204590E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.1950000524520874E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2000000476837158E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2050000429153442E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2100000381469727E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2150000333786011E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2200000286102295E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2250000238418579E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2300000190734863E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2350000143051147E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2400000095367432E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2450000047683716E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2500000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2549999952316284E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2599999904632568E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2649999856948853E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2699999809265137E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2749999761581421E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2799999713897705E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2849999666213989E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2899999618530273E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2949999570846558E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.2999999523162842E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3049999475479126E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3099999427795410E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3150000572204590E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3200000524520874E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3250000476837158E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3300000429153442E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3350000381469727E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3400000333786011E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3450000286102295E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3500000238418579E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3550000190734863E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3600000143051147E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3650000095367432E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3700000047683716E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3750000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3799999952316284E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3849999904632568E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3899999856948853E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3949999809265137E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.3999999761581421E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4049999713897705E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4099999666213989E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4149999618530273E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4199999570846558E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4249999523162842E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4299999475479126E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4349999427795410E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4400000572204590E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4450000524520874E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4500000476837158E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4550000429153442E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4600000381469727E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4650000333786011E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4700000286102295E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4750000238418579E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4800000190734863E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4850000143051147E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4900000095367432E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.4950000047683716E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5000000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5049999952316284E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5099999904632568E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5149999856948853E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5199999809265137E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5249999761581421E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5299999713897705E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5349999666213989E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5399999618530273E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5449999570846558E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5499999523162842E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5549999475479126E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5599999427795410E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5650000572204590E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5700000524520874E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5750000476837158E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5800000429153442E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5850000381469727E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5900000333786011E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.5950000286102295E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6000000238418579E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6050000190734863E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6100000143051147E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6150000095367432E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6200000047683716E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6250000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6299999952316284E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6349999904632568E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6399999856948853E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6449999809265137E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6499999761581421E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6549999713897705E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6599999666213989E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6649999618530273E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6699999570846558E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6749999523162842E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6799999475479126E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6849999427795410E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6900000572204590E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.6950000524520874E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7000000476837158E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7050000429153442E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7100000381469727E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7150000333786011E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7200000286102295E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7250000238418579E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7300000190734863E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7350000143051147E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7400000095367432E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7450000047683716E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7500000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7549999952316284E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7599999904632568E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7649999856948853E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7699999809265137E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7749999761581421E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7799999713897705E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7849999666213989E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7899999618530273E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7949999570846558E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.7999999523162842E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8049999475479126E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8099999427795410E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8150000572204590E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8200000524520874E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8250000476837158E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8300000429153442E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8350000381469727E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8400000333786011E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8450000286102295E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8500000238418579E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8550000190734863E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8600000143051147E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8650000095367432E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8700000047683716E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8750000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8799999952316284E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8849999904632568E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8899999856948853E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8949999809265137E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.8999999761581421E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9049999713897705E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9099999666213989E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9149999618530273E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9199999570846558E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9249999523162842E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9299999475479126E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9349999427795410E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9400000572204590E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9450000524520874E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9500000476837158E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9550000429153442E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9600000381469727E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9650000333786011E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9700000286102295E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9750000238418579E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9800000190734863E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9850000143051147E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9900000095367432E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 1.9950000047683716E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0000000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0050001144409180E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0099999904632568E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0150001049041748E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0199999809265137E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0250000953674316E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0299999713897705E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0350000858306885E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0399999618530273E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0450000762939453E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0499999523162842E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0550000667572021E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0599999427795410E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0650000572204590E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0699999332427979E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0750000476837158E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0799999237060547E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0850000381469727E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0899999141693115E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0950000286102295E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.0999999046325684E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1050000190734863E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1099998950958252E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1150000095367432E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1199998855590820E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1250000000000000E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1300001144409180E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1349999904632568E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1400001049041748E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1449999809265137E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1500000953674316E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1549999713897705E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1600000858306885E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1649999618530273E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1700000762939453E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1749999523162842E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1800000667572021E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1849999427795410E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571400642395020E+00 + 2.1900000572204590E+00 2.6293699741363525E+00 1.0333299636840820E+01 3.8571350574493408E+00 + 2.1949999332427979E+00 2.6293749809265137E+00 1.0333250045776367E+01 3.8571250438690186E+00 + 2.2000000476837158E+00 2.6293900012969971E+00 1.0333150863647461E+01 3.8571000099182129E+00 + 2.2049999237060547E+00 2.6294250488281250E+00 1.0332950592041016E+01 3.8570351600646973E+00 + 2.2100000381469727E+00 2.6294951438903809E+00 1.0332449913024902E+01 3.8569002151489258E+00 + 2.2149999141693115E+00 2.6296300888061523E+00 1.0331399917602539E+01 3.8566300868988037E+00 + 2.2200000286102295E+00 2.6298899650573730E+00 1.0329450607299805E+01 3.8561100959777832E+00 + 2.2249999046325684E+00 2.6303448677062988E+00 1.0326049804687500E+01 3.8551950454711914E+00 + 2.2300000190734863E+00 2.6310548782348633E+00 1.0320699691772461E+01 3.8537750244140625E+00 + 2.2349998950958252E+00 2.6320450305938721E+00 1.0313350677490234E+01 3.8518099784851074E+00 + 2.2400000095367432E+00 2.6332950592041016E+00 1.0304100036621094E+01 3.8493349552154541E+00 + 2.2449998855590820E+00 2.6347599029541016E+00 1.0293149948120117E+01 3.8464250564575195E+00 + 2.2500000000000000E+00 2.6363999843597412E+00 1.0280900001525879E+01 3.8431649208068848E+00 + 2.2550001144409180E+00 2.6381750106811523E+00 1.0267700195312500E+01 3.8396401405334473E+00 + 2.2599999904632568E+00 2.6400499343872070E+00 1.0253799438476562E+01 3.8359150886535645E+00 + 2.2650001049041748E+00 2.6420001983642578E+00 1.0239350318908691E+01 3.8320450782775879E+00 + 2.2699999809265137E+00 2.6440100669860840E+00 1.0224450111389160E+01 3.8280701637268066E+00 + 2.2750000953674316E+00 2.6460649967193604E+00 1.0209249496459961E+01 3.8240098953247070E+00 + 2.2799999713897705E+00 2.6481499671936035E+00 1.0193849563598633E+01 3.8198850154876709E+00 + 2.2850000858306885E+00 2.6502599716186523E+00 1.0178249359130859E+01 3.8157100677490234E+00 + 2.2899999618530273E+00 2.6523950099945068E+00 1.0162500381469727E+01 3.8114950656890869E+00 + 2.2950000762939453E+00 2.6545500755310059E+00 1.0146650314331055E+01 3.8072500228881836E+00 + 2.2999999523162842E+00 2.6567201614379883E+00 1.0130699157714844E+01 3.8029749393463135E+00 + 2.3050000667572021E+00 2.6589050292968750E+00 1.0114700317382812E+01 3.7986750602722168E+00 + 2.3099999427795410E+00 2.6610999107360840E+00 1.0098649978637695E+01 3.7943601608276367E+00 + 2.3150000572204590E+00 2.6633000373840332E+00 1.0082500457763672E+01 3.7900350093841553E+00 + 2.3199999332427979E+00 2.6655101776123047E+00 1.0066349983215332E+01 3.7856950759887695E+00 + 2.3250000476837158E+00 2.6677298545837402E+00 1.0050149917602539E+01 3.7813401222229004E+00 + 2.3299999237060547E+00 2.6699550151824951E+00 1.0033899307250977E+01 3.7769799232482910E+00 + 2.3350000381469727E+00 2.6721849441528320E+00 1.0017700195312500E+01 3.7726149559020996E+00 + 2.3399999141693115E+00 2.6744198799133301E+00 1.0001460075378418E+01 3.7682452201843262E+00 + 2.3450000286102295E+00 2.6766648292541504E+00 9.9851856231689453E+00 3.7638649940490723E+00 + 2.3499999046325684E+00 2.6789100170135498E+00 9.9689149856567383E+00 3.7594799995422363E+00 + 2.3550000190734863E+00 2.6811552047729492E+00 9.9526548385620117E+00 3.7550997734069824E+00 + 2.3599998950958252E+00 2.6834049224853516E+00 9.9364051818847656E+00 3.7507200241088867E+00 + 2.3650000095367432E+00 2.6856598854064941E+00 9.9201297760009766E+00 3.7463297843933105E+00 + 2.3699998855590820E+00 2.6879200935363770E+00 9.9038248062133789E+00 3.7419300079345703E+00 + 2.3750000000000000E+00 2.6901750564575195E+00 9.8875799179077148E+00 3.7375450134277344E+00 + 2.3800001144409180E+00 2.6924200057983398E+00 9.8714351654052734E+00 3.7331848144531250E+00 + 2.3849999904632568E+00 2.6946849822998047E+00 9.8551902770996094E+00 3.7287998199462891E+00 + 2.3900001049041748E+00 2.6969900131225586E+00 9.8386802673339844E+00 3.7243399620056152E+00 + 2.3949999809265137E+00 2.6992797851562500E+00 9.8222904205322266E+00 3.7199048995971680E+00 + 2.4000000953674316E+00 2.7014799118041992E+00 9.8065500259399414E+00 3.7156450748443604E+00 + 2.4049999713897705E+00 2.7037048339843750E+00 9.7906703948974609E+00 3.7113451957702637E+00 + 2.4100000858306885E+00 2.7061848640441895E+00 9.7730007171630859E+00 3.7065601348876953E+00 + 2.4149999618530273E+00 2.7087500095367432E+00 9.7547550201416016E+00 3.7016148567199707E+00 + 2.4200000762939453E+00 2.7105250358581543E+00 9.7421455383300781E+00 3.6981949806213379E+00 + 2.4249999523162842E+00 2.7100448608398438E+00 9.7455253601074219E+00 3.6991100311279297E+00 + 2.4300000667572021E+00 2.7033648490905762E+00 9.7931203842163086E+00 3.7119698524475098E+00 + 2.4349999427795410E+00 2.6757998466491699E+00 9.9927558898925781E+00 3.7658548355102539E+00 + 2.4400000572204590E+00 2.6172449588775635E+00 1.0427550315856934E+01 3.8821349143981934E+00 + 2.4449999332427979E+00 2.5584449768066406E+00 1.0875650405883789E+01 4.0005049705505371E+00 + 2.4500000476837158E+00 2.5301849842071533E+00 1.1096849441528320E+01 4.0582151412963867E+00 + 2.4549999237060547E+00 2.5223250389099121E+00 1.1159549713134766E+01 4.0745096206665039E+00 + 2.4600000381469727E+00 2.5200750827789307E+00 1.1177700042724609E+01 4.0792551040649414E+00 + 2.4649999141693115E+00 2.5194301605224609E+00 1.1182899475097656E+01 4.0807046890258789E+00 + 2.4700000286102295E+00 2.5192699432373047E+00 1.1184049606323242E+01 4.0811400413513184E+00 + 2.4749999046325684E+00 2.5192849636077881E+00 1.1183750152587891E+01 4.0811252593994141E+00 + 2.4800000190734863E+00 2.5193948745727539E+00 1.1182800292968750E+01 4.0808296203613281E+00 + 2.4849998950958252E+00 2.5195798873901367E+00 1.1181350708007812E+01 4.0803546905517578E+00 + 2.4900000095367432E+00 2.5198349952697754E+00 1.1179450035095215E+01 4.0797600746154785E+00 + 2.4949998855590820E+00 2.5201499462127686E+00 1.1177100181579590E+01 4.0790901184082031E+00 + 2.5000000000000000E+00 2.5205149650573730E+00 1.1174249649047852E+01 4.0783748626708984E+00 + 2.5050001144409180E+00 2.5209250450134277E+00 1.1170900344848633E+01 4.0776000022888184E+00 + 2.5099999904632568E+00 2.5213799476623535E+00 1.1167099952697754E+01 4.0767097473144531E+00 + 2.5150001049041748E+00 2.5218801498413086E+00 1.1162950515747070E+01 4.0756649971008301E+00 + 2.5199999809265137E+00 2.5224299430847168E+00 1.1158550262451172E+01 4.0744647979736328E+00 + 2.5250000953674316E+00 2.5230300426483154E+00 1.1153900146484375E+01 4.0731601715087891E+00 + 2.5299999713897705E+00 2.5236699581146240E+00 1.1148950576782227E+01 4.0717954635620117E+00 + 2.5350000858306885E+00 2.5243399143218994E+00 1.1143699645996094E+01 4.0704050064086914E+00 + 2.5399999618530273E+00 2.5250349044799805E+00 1.1138149261474609E+01 4.0690050125122070E+00 + 2.5450000762939453E+00 2.5257549285888672E+00 1.1132299423217773E+01 4.0675601959228516E+00 + 2.5499999523162842E+00 2.5265049934387207E+00 1.1126199722290039E+01 4.0660300254821777E+00 + 2.5550000667572021E+00 2.5272898674011230E+00 1.1119899749755859E+01 4.0643901824951172E+00 + 2.5599999427795410E+00 2.5281100273132324E+00 1.1113399505615234E+01 4.0626497268676758E+00 + 2.5650000572204590E+00 2.5289599895477295E+00 1.1106750488281250E+01 4.0608396530151367E+00 + 2.5699999332427979E+00 2.5298352241516113E+00 1.1099950790405273E+01 4.0589952468872070E+00 + 2.5750000476837158E+00 2.5307250022888184E+00 1.1092900276184082E+01 4.0571498870849609E+00 + 2.5799999237060547E+00 2.5316300392150879E+00 1.1085599899291992E+01 4.0552997589111328E+00 + 2.5850000381469727E+00 2.5325598716735840E+00 1.1078100204467773E+01 4.0534152984619141E+00 + 2.5899999141693115E+00 2.5335149765014648E+00 1.1070449829101562E+01 4.0514650344848633E+00 + 2.5950000286102295E+00 2.5344948768615723E+00 1.1062749862670898E+01 4.0494298934936523E+00 + 2.5999999046325684E+00 2.5355000495910645E+00 1.1054900169372559E+01 4.0473251342773438E+00 + 2.6050000190734863E+00 2.5365250110626221E+00 1.1046899795532227E+01 4.0451745986938477E+00 + 2.6099998950958252E+00 2.5375599861145020E+00 1.1038749694824219E+01 4.0430049896240234E+00 + 2.6150000095367432E+00 2.5386049747467041E+00 1.1030400276184082E+01 4.0408401489257812E+00 + 2.6199998855590820E+00 2.5396649837493896E+00 1.1021900177001953E+01 4.0386648178100586E+00 + 2.6250000000000000E+00 2.5407450199127197E+00 1.1013250350952148E+01 4.0364599227905273E+00 + 2.6300001144409180E+00 2.5418500900268555E+00 1.1004549980163574E+01 4.0342049598693848E+00 + 2.6349999904632568E+00 2.5429749488830566E+00 1.0995800018310547E+01 4.0318851470947266E+00 + 2.6400001049041748E+00 2.5441150665283203E+00 1.0986949920654297E+01 4.0295200347900391E+00 + 2.6449999809265137E+00 2.5452649593353271E+00 1.0978000640869141E+01 4.0271248817443848E+00 + 2.6500000953674316E+00 2.5464200973510742E+00 1.0968900680541992E+01 4.0247201919555664E+00 + 2.6549999713897705E+00 2.5475850105285645E+00 1.0959600448608398E+01 4.0223197937011719E+00 + 2.6600000858306885E+00 2.5487651824951172E+00 1.0950200080871582E+01 4.0199098587036133E+00 + 2.6649999618530273E+00 2.5499649047851562E+00 1.0940799713134766E+01 4.0174703598022461E+00 + 2.6700000762939453E+00 2.5511798858642578E+00 1.0931350708007812E+01 4.0149850845336914E+00 + 2.6749999523162842E+00 2.5524101257324219E+00 1.0921800613403320E+01 4.0124549865722656E+00 + 2.6800000667572021E+00 2.5536499023437500E+00 1.0912149429321289E+01 4.0098848342895508E+00 + 2.6849999427795410E+00 2.5548949241638184E+00 1.0902400016784668E+01 4.0072951316833496E+00 + 2.6900000572204590E+00 2.5561451911926270E+00 1.0892549514770508E+01 4.0047049522399902E+00 + 2.6949999332427979E+00 2.5574049949645996E+00 1.0882599830627441E+01 4.0021247863769531E+00 + 2.7000000476837158E+00 2.5586848258972168E+00 1.0872600555419922E+01 3.9995400905609131E+00 + 2.7049999237060547E+00 2.5599751472473145E+00 1.0862600326538086E+01 3.9969301223754883E+00 + 2.7100000381469727E+00 2.5612750053405762E+00 1.0852499961853027E+01 3.9942750930786133E+00 + 2.7149999141693115E+00 2.5625848770141602E+00 1.0842300415039062E+01 3.9915699958801270E+00 + 2.7200000286102295E+00 2.5638999938964844E+00 1.0832050323486328E+01 3.9888348579406738E+00 + 2.7249999046325684E+00 2.5652251243591309E+00 1.0821749687194824E+01 3.9860949516296387E+00 + 2.7300000190734863E+00 2.5665550231933594E+00 1.0811399459838867E+01 3.9833650588989258E+00 + 2.7349998950958252E+00 2.5678949356079102E+00 1.0800950050354004E+01 3.9806451797485352E+00 + 2.7400000095367432E+00 2.5692501068115234E+00 1.0790450096130371E+01 3.9779300689697266E+00 + 2.7449998855590820E+00 2.5706150531768799E+00 1.0779950141906738E+01 3.9751849174499512E+00 + 2.7500000000000000E+00 2.5719900131225586E+00 1.0769399642944336E+01 3.9723949432373047E+00 + 2.7550001144409180E+00 2.5733649730682373E+00 1.0758749961853027E+01 3.9695601463317871E+00 + 2.7599999904632568E+00 2.5747449398040771E+00 1.0748049736022949E+01 3.9667000770568848E+00 + 2.7650001049041748E+00 2.5761349201202393E+00 1.0737299919128418E+01 3.9638400077819824E+00 + 2.7699999809265137E+00 2.5775299072265625E+00 1.0726449966430664E+01 3.9609949588775635E+00 + 2.7750000953674316E+00 2.5789349079132080E+00 1.0715600013732910E+01 3.9581649303436279E+00 + 2.7799999713897705E+00 2.5803499221801758E+00 1.0704750061035156E+01 3.9553298950195312E+00 + 2.7850000858306885E+00 2.5817699432373047E+00 1.0693849563598633E+01 3.9524750709533691E+00 + 2.7899999618530273E+00 2.5831949710845947E+00 1.0682899475097656E+01 3.9495801925659180E+00 + 2.7950000762939453E+00 2.5846300125122070E+00 1.0671899795532227E+01 3.9466450214385986E+00 + 2.7999999523162842E+00 2.5860650539398193E+00 1.0660850524902344E+01 3.9436898231506348E+00 + 2.8050000667572021E+00 2.5875048637390137E+00 1.0649749755859375E+01 3.9407401084899902E+00 + 2.8099999427795410E+00 2.5889549255371094E+00 1.0638649940490723E+01 3.9378051757812500E+00 + 2.8150000572204590E+00 2.5904099941253662E+00 1.0627499580383301E+01 3.9348850250244141E+00 + 2.8199999332427979E+00 2.5918750762939453E+00 1.0616350173950195E+01 3.9319648742675781E+00 + 2.8250000476837158E+00 2.5933449268341064E+00 1.0605199813842773E+01 3.9290199279785156E+00 + 2.8299999237060547E+00 2.5948150157928467E+00 1.0593950271606445E+01 3.9260401725769043E+00 + 2.8350000381469727E+00 2.5962901115417480E+00 1.0582649230957031E+01 3.9230298995971680E+00 + 2.8399999141693115E+00 2.5977699756622314E+00 1.0571300506591797E+01 3.9200048446655273E+00 + 2.8450000286102295E+00 2.5992598533630371E+00 1.0559949874877930E+01 3.9169797897338867E+00 + 2.8499999046325684E+00 2.6007549762725830E+00 1.0548600196838379E+01 3.9139750003814697E+00 + 2.8550000190734863E+00 2.6022548675537109E+00 1.0537250518798828E+01 3.9109849929809570E+00 + 2.8599998950958252E+00 2.6037600040435791E+00 1.0525899887084961E+01 3.9079899787902832E+00 + 2.8650000095367432E+00 2.6052651405334473E+00 1.0514450073242188E+01 3.9049749374389648E+00 + 2.8699998855590820E+00 2.6067750453948975E+00 1.0502950668334961E+01 3.9019298553466797E+00 + 2.8750000000000000E+00 2.6082901954650879E+00 1.0491449356079102E+01 3.8988599777221680E+00 + 2.8800001144409180E+00 2.6098098754882812E+00 1.0479949951171875E+01 3.8957800865173340E+00 + 2.8849999904632568E+00 2.6113300323486328E+00 1.0468450546264648E+01 3.8927049636840820E+00 + 2.8900001049041748E+00 2.6128602027893066E+00 1.0456949234008789E+01 3.8896450996398926E+00 + 2.8949999809265137E+00 2.6143951416015625E+00 1.0445449829101562E+01 3.8866000175476074E+00 + 2.9000000953674316E+00 2.6159300804138184E+00 1.0433899879455566E+01 3.8835549354553223E+00 + 2.9049999713897705E+00 2.6174700260162354E+00 1.0422300338745117E+01 3.8804900646209717E+00 + 2.9100000858306885E+00 2.6190099716186523E+00 1.0410650253295898E+01 3.8773999214172363E+00 + 2.9149999618530273E+00 2.6205549240112305E+00 1.0399000167846680E+01 3.8742899894714355E+00 + 2.9200000762939453E+00 2.6221051216125488E+00 1.0387399673461914E+01 3.8711700439453125E+00 + 2.9249999523162842E+00 2.6236548423767090E+00 1.0375749588012695E+01 3.8680548667907715E+00 + 2.9300000667572021E+00 2.6252098083496094E+00 1.0364099502563477E+01 3.8649499416351318E+00 + 2.9349999427795410E+00 2.6267700195312500E+00 1.0352449417114258E+01 3.8618550300598145E+00 + 2.9400000572204590E+00 2.6283299922943115E+00 1.0340749740600586E+01 3.8587651252746582E+00 + 2.9449999332427979E+00 2.6298952102661133E+00 1.0329050064086914E+01 3.8556649684906006E+00 + 2.9500000476837158E+00 2.6314601898193359E+00 1.0317350387573242E+01 3.8525500297546387E+00 + 2.9549999237060547E+00 2.6330251693725586E+00 1.0305649757385254E+01 3.8494150638580322E+00 + 2.9600000381469727E+00 2.6346001625061035E+00 1.0293950080871582E+01 3.8462700843811035E+00 + 2.9649999141693115E+00 2.6361751556396484E+00 1.0282249450683594E+01 3.8431301116943359E+00 + 2.9700000286102295E+00 2.6377501487731934E+00 1.0270549774169922E+01 3.8399999141693115E+00 + 2.9749999046325684E+00 2.6393299102783203E+00 1.0258850097656250E+01 3.8368799686431885E+00 + 2.9800000190734863E+00 2.6409101486206055E+00 1.0247150421142578E+01 3.8337650299072266E+00 + 2.9849998950958252E+00 2.6424899101257324E+00 1.0235399246215820E+01 3.8306500911712646E+00 + 2.9900000095367432E+00 2.6440701484680176E+00 1.0223649978637695E+01 3.8275198936462402E+00 + 2.9949998855590820E+00 2.6456551551818848E+00 1.0211950302124023E+01 3.8243749141693115E+00 + 3.0000000000000000E+00 2.6472449302673340E+00 1.0200250625610352E+01 3.8212249279022217E+00 + 3.0050001144409180E+00 2.6488351821899414E+00 1.0188549995422363E+01 3.8180749416351318E+00 + 3.0099999904632568E+00 2.6504249572753906E+00 1.0176799774169922E+01 3.8149299621582031E+00 + 3.0150001049041748E+00 2.6520152091979980E+00 1.0165050506591797E+01 3.8117899894714355E+00 + 3.0199999809265137E+00 2.6536049842834473E+00 1.0153349876403809E+01 3.8086600303649902E+00 + 3.0250000953674316E+00 2.6552000045776367E+00 1.0141599655151367E+01 3.8055350780487061E+00 + 3.0299999713897705E+00 2.6567950248718262E+00 1.0129850387573242E+01 3.8024001121520996E+00 + 3.0350000858306885E+00 2.6583900451660156E+00 1.0118149757385254E+01 3.7992548942565918E+00 + 3.0399999618530273E+00 2.6599898338317871E+00 1.0106450080871582E+01 3.7961049079895020E+00 + 3.0450000762939453E+00 2.6615848541259766E+00 1.0094749450683594E+01 3.7929549217224121E+00 + 3.0499999523162842E+00 2.6631798744201660E+00 1.0083049774169922E+01 3.7898049354553223E+00 + 3.0550000667572021E+00 2.6647801399230957E+00 1.0071399688720703E+01 3.7866649627685547E+00 + 3.0599999427795410E+00 2.6663751602172852E+00 1.0059749603271484E+01 3.7835400104522705E+00 + 3.0650000572204590E+00 2.6679701805114746E+00 1.0048049926757812E+01 3.7804200649261475E+00 + 3.0699999332427979E+00 2.6695699691772461E+00 1.0036399841308594E+01 3.7773051261901855E+00 + 3.0750000476837158E+00 2.6711699962615967E+00 1.0024799346923828E+01 3.7741849422454834E+00 + 3.0799999237060547E+00 2.6727647781372070E+00 1.0013199806213379E+01 3.7710549831390381E+00 + 3.0850000381469727E+00 2.6743597984313965E+00 1.0001604080200195E+01 3.7679200172424316E+00 + 3.0899999141693115E+00 2.6759548187255859E+00 9.9900197982788086E+00 3.7647900581359863E+00 + 3.0950000286102295E+00 2.6775498390197754E+00 9.9784450531005859E+00 3.7616701126098633E+00 + 3.0999999046325684E+00 2.6791448593139648E+00 9.9668846130371094E+00 3.7585599422454834E+00 + 3.1050000190734863E+00 2.6807351112365723E+00 9.9553451538085938E+00 3.7554650306701660E+00 + 3.1099998950958252E+00 2.6823248863220215E+00 9.9438352584838867E+00 3.7523798942565918E+00 + 3.1150000095367432E+00 2.6839199066162109E+00 9.9323596954345703E+00 3.7492949962615967E+00 + 3.1199998855590820E+00 2.6855149269104004E+00 9.9209051132202148E+00 3.7462000846862793E+00 + 3.1250000000000000E+00 2.6870999336242676E+00 9.9094600677490234E+00 3.7430999279022217E+00 + 3.1300001144409180E+00 2.6886849403381348E+00 9.8980350494384766E+00 3.7400050163269043E+00 + 3.1349999904632568E+00 2.6902699470520020E+00 9.8866348266601562E+00 3.7369198799133301E+00 + 3.1400001049041748E+00 2.6918501853942871E+00 9.8752603530883789E+00 3.7338500022888184E+00 + 3.1449999809265137E+00 2.6934299468994141E+00 9.8639202117919922E+00 3.7307949066162109E+00 + 3.1500000953674316E+00 2.6950049400329590E+00 9.8526153564453125E+00 3.7277498245239258E+00 + 3.1549999713897705E+00 2.6965799331665039E+00 9.8413391113281250E+00 3.7247099876403809E+00 + 3.1600000858306885E+00 2.6981549263000488E+00 9.8300895690917969E+00 3.7216701507568359E+00 + 3.1649999618530273E+00 2.6997199058532715E+00 9.8188591003417969E+00 3.7186298370361328E+00 + 3.1700000762939453E+00 2.7012848854064941E+00 9.8076553344726562E+00 3.7155849933624268E+00 + 3.1749999523162842E+00 2.7028498649597168E+00 9.7964801788330078E+00 3.7125501632690430E+00 + 3.1800000667572021E+00 2.7044100761413574E+00 9.7853403091430664E+00 3.7095298767089844E+00 + 3.1849999427795410E+00 2.7059698104858398E+00 9.7742404937744141E+00 3.7065248489379883E+00 + 3.1900000572204590E+00 2.7075250148773193E+00 9.7631750106811523E+00 3.7035398483276367E+00 + 3.1949999332427979E+00 2.7090749740600586E+00 9.7521495819091797E+00 3.7005648612976074E+00 + 3.2000000476837158E+00 2.7106199264526367E+00 9.7411651611328125E+00 3.6975951194763184E+00 + 3.2049999237060547E+00 2.7121601104736328E+00 9.7302198410034180E+00 3.6946249008178711E+00 + 3.2100000381469727E+00 2.7136950492858887E+00 9.7193298339843750E+00 3.6916599273681641E+00 + 3.2149999141693115E+00 2.7152249813079834E+00 9.7084999084472656E+00 3.6887099742889404E+00 + 3.2200000286102295E+00 2.7167448997497559E+00 9.6977300643920898E+00 3.6857800483703613E+00 + 3.2249999046325684E+00 2.7182598114013672E+00 9.6870298385620117E+00 3.6828751564025879E+00 + 3.2300000190734863E+00 2.7197699546813965E+00 9.6763992309570312E+00 3.6799950599670410E+00 + 3.2349998950958252E+00 2.7212700843811035E+00 9.6658296585083008E+00 3.6771349906921387E+00 + 3.2400000095367432E+00 2.7227599620819092E+00 9.6553192138671875E+00 3.6742899417877197E+00 + 3.2449998855590820E+00 2.7242400646209717E+00 9.6448745727539062E+00 3.6714549064636230E+00 + 3.2500000000000000E+00 2.7257151603698730E+00 9.6345005035400391E+00 3.6686301231384277E+00 + 3.2550001144409180E+00 2.7271800041198730E+00 9.6241998672485352E+00 3.6658151149749756E+00 + 3.2599999904632568E+00 2.7286350727081299E+00 9.6139793395996094E+00 3.6630249023437500E+00 + 3.2650001049041748E+00 2.7300801277160645E+00 9.6038398742675781E+00 3.6602649688720703E+00 + 3.2699999809265137E+00 2.7315149307250977E+00 9.5937852859497070E+00 3.6575250625610352E+00 + 3.2750000953674316E+00 2.7329349517822266E+00 9.5838146209716797E+00 3.6548151969909668E+00 + 3.2799999713897705E+00 2.7343449592590332E+00 9.5739297866821289E+00 3.6521348953247070E+00 + 3.2850000858306885E+00 2.7357449531555176E+00 9.5641403198242188E+00 3.6494750976562500E+00 + 3.2899999618530273E+00 2.7371299266815186E+00 9.5544500350952148E+00 3.6468348503112793E+00 + 3.2950000762939453E+00 2.7385048866271973E+00 9.5448703765869141E+00 3.6442151069641113E+00 + 3.2999999523162842E+00 2.7398650646209717E+00 9.5354042053222656E+00 3.6416249275207520E+00 + 3.3050000667572021E+00 2.7412049770355225E+00 9.5260543823242188E+00 3.6390700340270996E+00 + 3.3099999427795410E+00 2.7425298690795898E+00 9.5168304443359375E+00 3.6365499496459961E+00 + 3.3150000572204590E+00 2.7438399791717529E+00 9.5077304840087891E+00 3.6340699195861816E+00 + 3.3199999332427979E+00 2.7451248168945312E+00 9.4987649917602539E+00 3.6316299438476562E+00 + 3.3250000476837158E+00 2.7463898658752441E+00 9.4899444580078125E+00 3.6292300224304199E+00 + 3.3299999237060547E+00 2.7476401329040527E+00 9.4812793731689453E+00 3.6268701553344727E+00 + 3.3350000381469727E+00 2.7488651275634766E+00 9.4727849960327148E+00 3.6245450973510742E+00 + 3.3399999141693115E+00 2.7500648498535156E+00 9.4644651412963867E+00 3.6222648620605469E+00 + 3.3450000286102295E+00 2.7512450218200684E+00 9.4563293457031250E+00 3.6200351715087891E+00 + 3.3499999046325684E+00 2.7523951530456543E+00 9.4483900070190430E+00 3.6178600788116455E+00 + 3.3550000190734863E+00 2.7535099983215332E+00 9.4406604766845703E+00 3.6157450675964355E+00 + 3.3599998950958252E+00 2.7545950412750244E+00 9.4331493377685547E+00 3.6136951446533203E+00 + 3.3650000095367432E+00 2.7556450366973877E+00 9.4258852005004883E+00 3.6117148399353027E+00 + 3.3699998855590820E+00 2.7566599845886230E+00 9.4188899993896484E+00 3.6098051071166992E+00 + 3.3750000000000000E+00 2.7576351165771484E+00 9.4121799468994141E+00 3.6079750061035156E+00 + 3.3800001144409180E+00 2.7585601806640625E+00 9.4057846069335938E+00 3.6062250137329102E+00 + 3.3849999904632568E+00 2.7594399452209473E+00 9.3997249603271484E+00 3.6045598983764648E+00 + 3.3900001049041748E+00 2.7602701187133789E+00 9.3940401077270508E+00 3.6029949188232422E+00 + 3.3949999809265137E+00 2.7610349655151367E+00 9.3887653350830078E+00 3.6015450954437256E+00 + 3.4000000953674316E+00 2.7617349624633789E+00 9.3839254379272461E+00 3.6002202033996582E+00 + 3.4049999713897705E+00 2.7623648643493652E+00 9.3796005249023438E+00 3.5990400314331055E+00 + 3.4100000858306885E+00 2.7629098892211914E+00 9.3758697509765625E+00 3.5980248451232910E+00 + 3.4149999618530273E+00 2.7633650302886963E+00 9.3727397918701172E+00 3.5971751213073730E+00 + 3.4200000762939453E+00 2.7637250423431396E+00 9.3702497482299805E+00 3.5964951515197754E+00 + 3.4249999523162842E+00 2.7639298439025879E+00 9.3688297271728516E+00 3.5961050987243652E+00 + 3.4300000667572021E+00 2.7637999057769775E+00 9.3697347640991211E+00 3.5963499546051025E+00 + 3.4349999427795410E+00 2.7627449035644531E+00 9.3769893646240234E+00 3.5983350276947021E+00 + 3.4400000572204590E+00 2.7585699558258057E+00 9.4057254791259766E+00 3.6061949729919434E+00 + 3.4449999332427979E+00 2.7428698539733887E+00 9.5147800445556641E+00 3.6360449790954590E+00 + 3.4500000476837158E+00 2.6922998428344727E+00 9.8751001358032227E+00 3.7339148521423340E+00 + 3.4549999237060547E+00 2.6137349605560303E+00 1.0454000473022461E+01 3.8885200023651123E+00 + 3.4600000381469727E+00 2.5569400787353516E+00 1.0886899948120117E+01 4.0024547576904297E+00 + 3.4649999141693115E+00 2.5359449386596680E+00 1.1051099777221680E+01 4.0456299781799316E+00 + 3.4700000286102295E+00 2.5295500755310059E+00 1.1101449966430664E+01 4.0590500831604004E+00 + 3.4749999046325684E+00 2.5267748832702637E+00 1.1123250007629395E+01 4.0648746490478516E+00 + 3.4800000190734863E+00 2.5250849723815918E+00 1.1136650085449219E+01 4.0683498382568359E+00 + 3.4849998950958252E+00 2.5237498283386230E+00 1.1147500038146973E+01 4.0710601806640625E+00 + 3.4900000095367432E+00 2.5226049423217773E+00 1.1156949996948242E+01 4.0733747482299805E+00 + 3.4949998855590820E+00 2.5216498374938965E+00 1.1164749145507812E+01 4.0753002166748047E+00 + 3.5000000000000000E+00 2.5208699703216553E+00 1.1170849800109863E+01 4.0769052505493164E+00 + 3.5050001144409180E+00 2.5202398300170898E+00 1.1175600051879883E+01 4.0782899856567383E+00 + 3.5099999904632568E+00 2.5197448730468750E+00 1.1179349899291992E+01 4.0794248580932617E+00 + 3.5150001049041748E+00 2.5193800926208496E+00 1.1182199478149414E+01 4.0802450180053711E+00 + 3.5199999809265137E+00 2.5191397666931152E+00 1.1184249877929688E+01 4.0807452201843262E+00 + 3.5250000953674316E+00 2.5190100669860840E+00 1.1185549736022949E+01 4.0809750556945801E+00 + 3.5299999713897705E+00 2.5189700126647949E+00 1.1186100006103516E+01 4.0809946060180664E+00 + 3.5350000858306885E+00 2.5190000534057617E+00 1.1185850143432617E+01 4.0808696746826172E+00 + 3.5399999618530273E+00 2.5190949440002441E+00 1.1184850692749023E+01 4.0806651115417480E+00 + 3.5450000762939453E+00 2.5192599296569824E+00 1.1183300018310547E+01 4.0803804397583008E+00 + 3.5499999523162842E+00 2.5195000171661377E+00 1.1181249618530273E+01 4.0799598693847656E+00 + 3.5550000667572021E+00 2.5198199748992920E+00 1.1178750038146973E+01 4.0793499946594238E+00 + 3.5599999427795410E+00 2.5202150344848633E+00 1.1175849914550781E+01 4.0785398483276367E+00 + 3.5650000572204590E+00 2.5206651687622070E+00 1.1172500610351562E+01 4.0775699615478516E+00 + 3.5699999332427979E+00 2.5211548805236816E+00 1.1168649673461914E+01 4.0764751434326172E+00 + 3.5750000476837158E+00 2.5216798782348633E+00 1.1164299964904785E+01 4.0753149986267090E+00 + 3.5799999237060547E+00 2.5222501754760742E+00 1.1159500122070312E+01 4.0741348266601562E+00 + 3.5850000381469727E+00 2.5228750705718994E+00 1.1154399871826172E+01 4.0729150772094727E+00 + 3.5899999141693115E+00 2.5235550403594971E+00 1.1149049758911133E+01 4.0715999603271484E+00 + 3.5950000286102295E+00 2.5242850780487061E+00 1.1143400192260742E+01 4.0701398849487305E+00 + 3.5999999046325684E+00 2.5250501632690430E+00 1.1137450218200684E+01 4.0685396194458008E+00 + 3.6050000190734863E+00 2.5258450508117676E+00 1.1131150245666504E+01 4.0668249130249023E+00 + 3.6099998950958252E+00 2.5266699790954590E+00 1.1124500274658203E+01 4.0650248527526855E+00 + 3.6150000095367432E+00 2.5275249481201172E+00 1.1117549896240234E+01 4.0632047653198242E+00 + 3.6199998855590820E+00 2.5284152030944824E+00 1.1110349655151367E+01 4.0613899230957031E+00 + 3.6250000000000000E+00 2.5293450355529785E+00 1.1102950096130371E+01 4.0595450401306152E+00 + 3.6300001144409180E+00 2.5303149223327637E+00 1.1095350265502930E+01 4.0576248168945312E+00 + 3.6349999904632568E+00 2.5313200950622559E+00 1.1087600708007812E+01 4.0555901527404785E+00 + 3.6400001049041748E+00 2.5323450565338135E+00 1.1079599380493164E+01 4.0534448623657227E+00 + 3.6449999809265137E+00 2.5333850383758545E+00 1.1071249961853027E+01 4.0512151718139648E+00 + 3.6500000953674316E+00 2.5344500541687012E+00 1.1062700271606445E+01 4.0489397048950195E+00 + 3.6549999713897705E+00 2.5355401039123535E+00 1.1053950309753418E+01 4.0466699600219727E+00 + 3.6600000858306885E+00 2.5366599559783936E+00 1.1045000076293945E+01 4.0444049835205078E+00 + 3.6649999618530273E+00 2.5378098487854004E+00 1.1035949707031250E+01 4.0421099662780762E+00 + 3.6700000762939453E+00 2.5389850139617920E+00 1.1026800155639648E+01 4.0397396087646484E+00 + 3.6749999523162842E+00 2.5401849746704102E+00 1.1017450332641602E+01 4.0372695922851562E+00 + 3.6800000667572021E+00 2.5413999557495117E+00 1.1007850646972656E+01 4.0347199440002441E+00 + 3.6849999427795410E+00 2.5426301956176758E+00 1.0998050689697266E+01 4.0321197509765625E+00 + 3.6900000572204590E+00 2.5438752174377441E+00 1.0988100051879883E+01 4.0294952392578125E+00 + 3.6949999332427979E+00 2.5451450347900391E+00 1.0978050231933594E+01 4.0268802642822266E+00 + 3.7000000476837158E+00 2.5464448928833008E+00 1.0967899322509766E+01 4.0242800712585449E+00 + 3.7049999237060547E+00 2.5477650165557861E+00 1.0957650184631348E+01 4.0216503143310547E+00 + 3.7100000381469727E+00 2.5491049289703369E+00 1.0947299957275391E+01 4.0189447402954102E+00 + 3.7149999141693115E+00 2.5504550933837891E+00 1.0936750411987305E+01 4.0161600112915039E+00 + 3.7200000286102295E+00 2.5518150329589844E+00 1.0926000595092773E+01 4.0133152008056641E+00 + 3.7249999046325684E+00 2.5531899929046631E+00 1.0915100097656250E+01 4.0104351043701172E+00 + 3.7300000190734863E+00 2.5545799732208252E+00 1.0904100418090820E+01 4.0075550079345703E+00 + 3.7349998950958252E+00 2.5559949874877930E+00 1.0893099784851074E+01 4.0046901702880859E+00 + 3.7400000095367432E+00 2.5574300289154053E+00 1.0881999969482422E+01 4.0018200874328613E+00 + 3.7449998855590820E+00 2.5588750839233398E+00 1.0870800018310547E+01 3.9989099502563477E+00 + 3.7500000000000000E+00 2.5603299140930176E+00 1.0859499931335449E+01 3.9959349632263184E+00 + 3.7550001144409180E+00 2.5617949962615967E+00 1.0847999572753906E+01 3.9929051399230957E+00 + 3.7599999904632568E+00 2.5632748603820801E+00 1.0836400032043457E+01 3.9898400306701660E+00 + 3.7650001049041748E+00 2.5647699832916260E+00 1.0824749946594238E+01 3.9867548942565918E+00 + 3.7699999809265137E+00 2.5662751197814941E+00 1.0812999725341797E+01 3.9836750030517578E+00 + 3.7750000953674316E+00 2.5678000450134277E+00 1.0801199913024902E+01 3.9806051254272461E+00 + 3.7799999713897705E+00 2.5693449974060059E+00 1.0789349555969238E+01 3.9775199890136719E+00 + 3.7850000858306885E+00 2.5708951950073242E+00 1.0777400016784668E+01 3.9743950366973877E+00 + 3.7899999618530273E+00 2.5724501609802246E+00 1.0765350341796875E+01 3.9712200164794922E+00 + 3.7950000762939453E+00 2.5740151405334473E+00 1.0753149986267090E+01 3.9679999351501465E+00 + 3.7999999523162842E+00 2.5755901336669922E+00 1.0740900039672852E+01 3.9647598266601562E+00 + 3.8050000667572021E+00 2.5771799087524414E+00 1.0728650093078613E+01 3.9615149497985840E+00 + 3.8099999427795410E+00 2.5787849426269531E+00 1.0716300010681152E+01 3.9582748413085938E+00 + 3.8150000572204590E+00 2.5804049968719482E+00 1.0703899383544922E+01 3.9550449848175049E+00 + 3.8199999332427979E+00 2.5820350646972656E+00 1.0691499710083008E+01 3.9517998695373535E+00 + 3.8250000476837158E+00 2.5836648941040039E+00 1.0678999900817871E+01 3.9485101699829102E+00 + 3.8299999237060547E+00 2.5852999687194824E+00 1.0666349411010742E+01 3.9451699256896973E+00 + 3.8350000381469727E+00 2.5869450569152832E+00 1.0653650283813477E+01 3.9418048858642578E+00 + 3.8399999141693115E+00 2.5886001586914062E+00 1.0640899658203125E+01 3.9384298324584961E+00 + 3.8450000286102295E+00 2.5902650356292725E+00 1.0628099441528320E+01 3.9350500106811523E+00 + 3.8499999046325684E+00 2.5919449329376221E+00 1.0615300178527832E+01 3.9316749572753906E+00 + 3.8550000190734863E+00 2.5936350822448730E+00 1.0602449417114258E+01 3.9283051490783691E+00 + 3.8599998950958252E+00 2.5953299999237061E+00 1.0589550018310547E+01 3.9249200820922852E+00 + 3.8650000095367432E+00 2.5970299243927002E+00 1.0576600074768066E+01 3.9214949607849121E+00 + 3.8699998855590820E+00 2.5987300872802734E+00 1.0563549995422363E+01 3.9180350303649902E+00 + 3.8750000000000000E+00 2.6004400253295898E+00 1.0550449371337891E+01 3.9145600795745850E+00 + 3.8800001144409180E+00 2.6021649837493896E+00 1.0537349700927734E+01 3.9110851287841797E+00 + 3.8849999904632568E+00 2.6038999557495117E+00 1.0524250030517578E+01 3.9076149463653564E+00 + 3.8900001049041748E+00 2.6056399345397949E+00 1.0511150360107422E+01 3.9041450023651123E+00 + 3.8949999809265137E+00 2.6073849201202393E+00 1.0497999191284180E+01 3.9006750583648682E+00 + 3.9000000953674316E+00 2.6091349124908447E+00 1.0484749794006348E+01 3.8971850872039795E+00 + 3.9049999713897705E+00 2.6108899116516113E+00 1.0471449851989746E+01 3.8936650753021240E+00 + 3.9100000858306885E+00 2.6126499176025391E+00 1.0458149909973145E+01 3.8901200294494629E+00 + 3.9149999618530273E+00 2.6144149303436279E+00 1.0444799423217773E+01 3.8865599632263184E+00 + 3.9200000762939453E+00 2.6161899566650391E+00 1.0431400299072266E+01 3.8830051422119141E+00 + 3.9249999523162842E+00 2.6179699897766113E+00 1.0418049812316895E+01 3.8794500827789307E+00 + 3.9300000667572021E+00 2.6197550296783447E+00 1.0404699325561523E+01 3.8759000301361084E+00 + 3.9349999427795410E+00 2.6215450763702393E+00 1.0391249656677246E+01 3.8723499774932861E+00 + 3.9400000572204590E+00 2.6233348846435547E+00 1.0377750396728516E+01 3.8687801361083984E+00 + 3.9449999332427979E+00 2.6251299381256104E+00 1.0364250183105469E+01 3.8651900291442871E+00 + 3.9500000476837158E+00 2.6269299983978271E+00 1.0350749969482422E+01 3.8615851402282715E+00 + 3.9549999237060547E+00 2.6287400722503662E+00 1.0337249755859375E+01 3.8579750061035156E+00 + 3.9600000381469727E+00 2.6305551528930664E+00 1.0323749542236328E+01 3.8543648719787598E+00 + 3.9649999141693115E+00 2.6323699951171875E+00 1.0310199737548828E+01 3.8507599830627441E+00 + 3.9700000286102295E+00 2.6341948509216309E+00 1.0296649932861328E+01 3.8471598625183105E+00 + 3.9749999046325684E+00 2.6360199451446533E+00 1.0283100128173828E+01 3.8435549736022949E+00 + 3.9800000190734863E+00 2.6378400325775146E+00 1.0269500732421875E+01 3.8399400711059570E+00 + 3.9849998950958252E+00 2.6396651268005371E+00 1.0255899429321289E+01 3.8363151550292969E+00 + 3.9900000095367432E+00 2.6414999961853027E+00 1.0242300033569336E+01 3.8326799869537354E+00 + 3.9949998855590820E+00 2.6433401107788086E+00 1.0228700637817383E+01 3.8290400505065918E+00 + 4.0000000000000000E+00 2.6451799869537354E+00 1.0215099334716797E+01 3.8254051208496094E+00 + 4.0050001144409180E+00 2.6470198631286621E+00 1.0201499938964844E+01 3.8217701911926270E+00 + 4.0100002288818359E+00 2.6488649845123291E+00 1.0187900543212891E+01 3.8181350231170654E+00 + 4.0149998664855957E+00 2.6507101058959961E+00 1.0174299240112305E+01 3.8145051002502441E+00 + 4.0199999809265137E+00 2.6525549888610840E+00 1.0160699844360352E+01 3.8108701705932617E+00 + 4.0250000953674316E+00 2.6544051170349121E+00 1.0147049903869629E+01 3.8072249889373779E+00 + 4.0300002098083496E+00 2.6562550067901611E+00 1.0133449554443359E+01 3.8035750389099121E+00 + 4.0349998474121094E+00 2.6581048965454102E+00 1.0119899749755859E+01 3.7999248504638672E+00 + 4.0399999618530273E+00 2.6599600315093994E+00 1.0106300354003906E+01 3.7962799072265625E+00 + 4.0450000762939453E+00 2.6618199348449707E+00 1.0092700004577637E+01 3.7926349639892578E+00 + 4.0500001907348633E+00 2.6636748313903809E+00 1.0079099655151367E+01 3.7889900207519531E+00 + 4.0549998283386230E+00 2.6655299663543701E+00 1.0065500259399414E+01 3.7853550910949707E+00 + 4.0599999427795410E+00 2.6673851013183594E+00 1.0051950454711914E+01 3.7817249298095703E+00 + 4.0650000572204590E+00 2.6692399978637695E+00 1.0038450241088867E+01 3.7780950069427490E+00 + 4.0700001716613770E+00 2.6711001396179199E+00 1.0024950027465820E+01 3.7744650840759277E+00 + 4.0749998092651367E+00 2.6729600429534912E+00 1.0011449813842773E+01 3.7708349227905273E+00 + 4.0799999237060547E+00 2.6748151779174805E+00 9.9979848861694336E+00 3.7672100067138672E+00 + 4.0850000381469727E+00 2.6766648292541504E+00 9.9845504760742188E+00 3.7635951042175293E+00 + 4.0900001525878906E+00 2.6785149574279785E+00 9.9711198806762695E+00 3.7599849700927734E+00 + 4.0949997901916504E+00 2.6803650856018066E+00 9.9577102661132812E+00 3.7563800811767578E+00 + 4.0999999046325684E+00 2.6822099685668945E+00 9.9443302154541016E+00 3.7527849674224854E+00 + 4.1050000190734863E+00 2.6840548515319824E+00 9.9309949874877930E+00 3.7491950988769531E+00 + 4.1100001335144043E+00 2.6858999729156494E+00 9.9177103042602539E+00 3.7456099987030029E+00 + 4.1149997711181641E+00 2.6877398490905762E+00 9.9044599533081055E+00 3.7420349121093750E+00 + 4.1199998855590820E+00 2.6895799636840820E+00 9.8912391662597656E+00 3.7384650707244873E+00 + 4.1250000000000000E+00 2.6914148330688477E+00 9.8780498504638672E+00 3.7349050045013428E+00 + 4.1300001144409180E+00 2.6932449340820312E+00 9.8648900985717773E+00 3.7313549518585205E+00 + 4.1350002288818359E+00 2.6950700283050537E+00 9.8517704010009766E+00 3.7278149127960205E+00 + 4.1399998664855957E+00 2.6968898773193359E+00 9.8387050628662109E+00 3.7242898941040039E+00 + 4.1449999809265137E+00 2.6987099647521973E+00 9.8257045745849609E+00 3.7207748889923096E+00 + 4.1500000953674316E+00 2.7005250453948975E+00 9.8127593994140625E+00 3.7172749042510986E+00 + 4.1550002098083496E+00 2.7023348808288574E+00 9.7998695373535156E+00 3.7137899398803711E+00 + 4.1599998474121094E+00 2.7041349411010742E+00 9.7870292663574219E+00 3.7103149890899658E+00 + 4.1649999618530273E+00 2.7059249877929688E+00 9.7742300033569336E+00 3.7068500518798828E+00 + 4.1700000762939453E+00 2.7077150344848633E+00 9.7614803314208984E+00 3.7034001350402832E+00 + 4.1750001907348633E+00 2.7094950675964355E+00 9.7487945556640625E+00 3.6999650001525879E+00 + 4.1799998283386230E+00 2.7112700939178467E+00 9.7361793518066406E+00 3.6965451240539551E+00 + 4.1849999427795410E+00 2.7130451202392578E+00 9.7236404418945312E+00 3.6931450366973877E+00 + 4.1900000572204590E+00 2.7148098945617676E+00 9.7111701965332031E+00 3.6897602081298828E+00 + 4.1950001716613770E+00 2.7165648937225342E+00 9.6987600326538086E+00 3.6863899230957031E+00 + 4.1999998092651367E+00 2.7183098793029785E+00 9.6864204406738281E+00 3.6830401420593262E+00 + 4.2049999237060547E+00 2.7200450897216797E+00 9.6741552352905273E+00 3.6797099113464355E+00 + 4.2100000381469727E+00 2.7217700481414795E+00 9.6619749069213867E+00 3.6764049530029297E+00 + 4.2150001525878906E+00 2.7234799861907959E+00 9.6498947143554688E+00 3.6731250286102295E+00 + 4.2199997901916504E+00 2.7251801490783691E+00 9.6379251480102539E+00 3.6698698997497559E+00 + 4.2249999046325684E+00 2.7268700599670410E+00 9.6260757446289062E+00 3.6666450500488281E+00 + 4.2300000190734863E+00 2.7285399436950684E+00 9.6143455505371094E+00 3.6634550094604492E+00 + 4.2350001335144043E+00 2.7301950454711914E+00 9.6027355194091797E+00 3.6602950096130371E+00 + 4.2399997711181641E+00 2.7318348884582520E+00 9.5912456512451172E+00 3.6571650505065918E+00 + 4.2449998855590820E+00 2.7334551811218262E+00 9.5798854827880859E+00 3.6540751457214355E+00 + 4.2500000000000000E+00 2.7350549697875977E+00 9.5686645507812500E+00 3.6510200500488281E+00 + 4.2550001144409180E+00 2.7366352081298828E+00 9.5575904846191406E+00 3.6480000019073486E+00 + 4.2600002288818359E+00 2.7382001876831055E+00 9.5466747283935547E+00 3.6450250148773193E+00 + 4.2649998664855957E+00 2.7397451400756836E+00 9.5359249114990234E+00 3.6420950889587402E+00 + 4.2699999809265137E+00 2.7412648200988770E+00 9.5253353118896484E+00 3.6392049789428711E+00 + 4.2750000953674316E+00 2.7427649497985840E+00 9.5149154663085938E+00 3.6363599300384521E+00 + 4.2800002098083496E+00 2.7442350387573242E+00 9.5046749114990234E+00 3.6335649490356445E+00 + 4.2849998474121094E+00 2.7456750869750977E+00 9.4946308135986328E+00 3.6308250427246094E+00 + 4.2899999618530273E+00 2.7470901012420654E+00 9.4847946166992188E+00 3.6281399726867676E+00 + 4.2950000762939453E+00 2.7484750747680664E+00 9.4751853942871094E+00 3.6255149841308594E+00 + 4.3000001907348633E+00 2.7498300075531006E+00 9.4658203125000000E+00 3.6229548454284668E+00 + 4.3049998283386230E+00 2.7511501312255859E+00 9.4567098617553711E+00 3.6204650402069092E+00 + 4.3099999427795410E+00 2.7524299621582031E+00 9.4478645324707031E+00 3.6180500984191895E+00 + 4.3150000572204590E+00 2.7536702156066895E+00 9.4393005371093750E+00 3.6157050132751465E+00 + 4.3200001716613770E+00 2.7548651695251465E+00 9.4310350418090820E+00 3.6134400367736816E+00 + 4.3249998092651367E+00 2.7560150623321533E+00 9.4230957031250000E+00 3.6112699508666992E+00 + 4.3299999237060547E+00 2.7571148872375488E+00 9.4155158996582031E+00 3.6091949939727783E+00 + 4.3350000381469727E+00 2.7581548690795898E+00 9.4083204269409180E+00 3.6072249412536621E+00 + 4.3400001525878906E+00 2.7591400146484375E+00 9.4015407562255859E+00 3.6053700447082520E+00 + 4.3449997901916504E+00 2.7600598335266113E+00 9.3952150344848633E+00 3.6036348342895508E+00 + 4.3499999046325684E+00 2.7609100341796875E+00 9.3893756866455078E+00 3.6020350456237793E+00 + 4.3550000190734863E+00 2.7616848945617676E+00 9.3840599060058594E+00 3.6005799770355225E+00 + 4.3600001335144043E+00 2.7623701095581055E+00 9.3793296813964844E+00 3.5992851257324219E+00 + 4.3649997711181641E+00 2.7629599571228027E+00 9.3752555847167969E+00 3.5981650352478027E+00 + 4.3699998855590820E+00 2.7634449005126953E+00 9.3719005584716797E+00 3.5972449779510498E+00 + 4.3750000000000000E+00 2.7638149261474609E+00 9.3693504333496094E+00 3.5965499877929688E+00 + 4.3800001144409180E+00 2.7640600204467773E+00 9.3677148818969727E+00 3.5961000919342041E+00 + 4.3850002288818359E+00 2.7641549110412598E+00 9.3670902252197266E+00 3.5959300994873047E+00 + 4.3899998664855957E+00 2.7640848159790039E+00 9.3675804138183594E+00 3.5960650444030762E+00 + 4.3949999809265137E+00 2.7638249397277832E+00 9.3693599700927734E+00 3.5965499877929688E+00 + 4.4000000953674316E+00 2.7633299827575684E+00 9.3727397918701172E+00 3.5974798202514648E+00 + 4.4050002098083496E+00 2.7625551223754883E+00 9.3780698776245117E+00 3.5989449024200439E+00 + 4.4099998474121094E+00 2.7614750862121582E+00 9.3854904174804688E+00 3.6009750366210938E+00 + 4.4149999618530273E+00 2.7600550651550293E+00 9.3952655792236328E+00 3.6036500930786133E+00 + 4.4200000762939453E+00 2.7581148147583008E+00 9.4086399078369141E+00 3.6073150634765625E+00 + 4.4250001907348633E+00 2.7554049491882324E+00 9.4273548126220703E+00 3.6124401092529297E+00 + 4.4299998283386230E+00 2.7518799304962158E+00 9.4517402648925781E+00 3.6191101074218750E+00 + 4.4349999427795410E+00 2.7474350929260254E+00 9.4825344085693359E+00 3.6275300979614258E+00 + 4.4400000572204590E+00 2.7409000396728516E+00 9.5279655456542969E+00 3.6399300098419189E+00 + 4.4450001716613770E+00 2.7280850410461426E+00 9.6177749633789062E+00 3.6643748283386230E+00 + 4.4499998092651367E+00 2.7000150680541992E+00 9.8172702789306641E+00 3.7186250686645508E+00 + 4.4549999237060547E+00 2.6573848724365234E+00 1.0126495361328125E+01 3.8018851280212402E+00 + 4.4600000381469727E+00 2.6171550750732422E+00 1.0425250053405762E+01 3.8813700675964355E+00 + 4.4650001525878906E+00 2.5918600559234619E+00 1.0616649627685547E+01 3.9320900440216064E+00 + 4.4699997901916504E+00 2.5785300731658936E+00 1.0718600273132324E+01 3.9592299461364746E+00 + 4.4749999046325684E+00 2.5697751045227051E+00 1.0786100387573242E+01 3.9771900177001953E+00 + 4.4800000190734863E+00 2.5626149177551270E+00 1.0841650009155273E+01 3.9918298721313477E+00 + 4.4850001335144043E+00 2.5564451217651367E+00 1.0889900207519531E+01 4.0044403076171875E+00 + 4.4899997711181641E+00 2.5512499809265137E+00 1.0930799484252930E+01 4.0150799751281738E+00 + 4.4949998855590820E+00 2.5468900203704834E+00 1.0965099334716797E+01 4.0240097045898438E+00 + 4.5000000000000000E+00 2.5431299209594727E+00 1.0994549751281738E+01 4.0317296981811523E+00 + 4.5050001144409180E+00 2.5398249626159668E+00 1.1020450592041016E+01 4.0385799407958984E+00 + 4.5100002288818359E+00 2.5369200706481934E+00 1.1043300628662109E+01 4.0446500778198242E+00 + 4.5149998664855957E+00 2.5343749523162842E+00 1.1063449859619141E+01 4.0499601364135742E+00 + 4.5199999809265137E+00 2.5321450233459473E+00 1.1081299781799316E+01 4.0545849800109863E+00 + 4.5250000953674316E+00 2.5301749706268311E+00 1.1097049713134766E+01 4.0586299896240234E+00 + 4.5300002098083496E+00 2.5284299850463867E+00 1.1110849380493164E+01 4.0622000694274902E+00 + 4.5349998474121094E+00 2.5268900394439697E+00 1.1122949600219727E+01 4.0653800964355469E+00 + 4.5399999618530273E+00 2.5255451202392578E+00 1.1133550643920898E+01 4.0682001113891602E+00 + 4.5450000762939453E+00 2.5243849754333496E+00 1.1142849922180176E+01 4.0706548690795898E+00 + 4.5500001907348633E+00 2.5233898162841797E+00 1.1150949478149414E+01 4.0727548599243164E+00 + 4.5549998283386230E+00 2.5225348472595215E+00 1.1157850265502930E+01 4.0745248794555664E+00 + 4.5599999427795410E+00 2.5218100547790527E+00 1.1163599967956543E+01 4.0760049819946289E+00 + 4.5650000572204590E+00 2.5212101936340332E+00 1.1168350219726562E+01 4.0772399902343750E+00 + 4.5700001716613770E+00 2.5207250118255615E+00 1.1172149658203125E+01 4.0782499313354492E+00 + 4.5749998092651367E+00 2.5203549861907959E+00 1.1175100326538086E+01 4.0790452957153320E+00 + 4.5799999237060547E+00 2.5200901031494141E+00 1.1177299499511719E+01 4.0796203613281250E+00 + 4.5850000381469727E+00 2.5199198722839355E+00 1.1178699493408203E+01 4.0799751281738281E+00 + 4.5900001525878906E+00 2.5198400020599365E+00 1.1179349899291992E+01 4.0801353454589844E+00 + 4.5949997901916504E+00 2.5198400020599365E+00 1.1179300308227539E+01 4.0801248550415039E+00 + 4.5999999046325684E+00 2.5199151039123535E+00 1.1178649902343750E+01 4.0799598693847656E+00 + 4.6050000190734863E+00 2.5200700759887695E+00 1.1177400588989258E+01 4.0796451568603516E+00 + 4.6100001335144043E+00 2.5202999114990234E+00 1.1175600051879883E+01 4.0791749954223633E+00 + 4.6149997711181641E+00 2.5206000804901123E+00 1.1173250198364258E+01 4.0785551071166992E+00 + 4.6199998855590820E+00 2.5209650993347168E+00 1.1170299530029297E+01 4.0777950286865234E+00 + 4.6250000000000000E+00 2.5213899612426758E+00 1.1166900634765625E+01 4.0769000053405762E+00 + 4.6300001144409180E+00 2.5218801498413086E+00 1.1163000106811523E+01 4.0758848190307617E+00 + 4.6350002288818359E+00 2.5224299430847168E+00 1.1158649444580078E+01 4.0747547149658203E+00 + 4.6399998664855957E+00 2.5230350494384766E+00 1.1153900146484375E+01 4.0735054016113281E+00 + 4.6449999809265137E+00 2.5236899852752686E+00 1.1148649215698242E+01 4.0721402168273926E+00 + 4.6500000953674316E+00 2.5243949890136719E+00 1.1142999649047852E+01 4.0706701278686523E+00 + 4.6550002098083496E+00 2.5251500606536865E+00 1.1136999130249023E+01 4.0691003799438477E+00 + 4.6599998474121094E+00 2.5259552001953125E+00 1.1130599975585938E+01 4.0674300193786621E+00 + 4.6649999618530273E+00 2.5268049240112305E+00 1.1123800277709961E+01 4.0656599998474121E+00 + 4.6700000762939453E+00 2.5276999473571777E+00 1.1116649627685547E+01 4.0637998580932617E+00 + 4.6750001907348633E+00 2.5286400318145752E+00 1.1109199523925781E+01 4.0618553161621094E+00 + 4.6799998283386230E+00 2.5296199321746826E+00 1.1101400375366211E+01 4.0598201751708984E+00 + 4.6849999427795410E+00 2.5306401252746582E+00 1.1093299865722656E+01 4.0577001571655273E+00 + 4.6900000572204590E+00 2.5317001342773438E+00 1.1084899902343750E+01 4.0555047988891602E+00 + 4.6950001716613770E+00 2.5327999591827393E+00 1.1076200485229492E+01 4.0532302856445312E+00 + 4.6999998092651367E+00 2.5339350700378418E+00 1.1067199707031250E+01 4.0508799552917480E+00 + 4.7049999237060547E+00 2.5351049900054932E+00 1.1057899475097656E+01 4.0484600067138672E+00 + 4.7100000381469727E+00 2.5363101959228516E+00 1.1048399925231934E+01 4.0459651947021484E+00 + 4.7150001525878906E+00 2.5375499725341797E+00 1.1038650512695312E+01 4.0433998107910156E+00 + 4.7199997901916504E+00 2.5388250350952148E+00 1.1028600692749023E+01 4.0407700538635254E+00 + 4.7249999046325684E+00 2.5401248931884766E+00 1.1018300056457520E+01 4.0380802154541016E+00 + 4.7300000190734863E+00 2.5414550304412842E+00 1.1007799148559570E+01 4.0353298187255859E+00 + 4.7350001335144043E+00 2.5428199768066406E+00 1.0997049331665039E+01 4.0325145721435547E+00 + 4.7399997711181641E+00 2.5442149639129639E+00 1.0986049652099609E+01 4.0296401977539062E+00 + 4.7449998855590820E+00 2.5456399917602539E+00 1.0974849700927734E+01 4.0267100334167480E+00 + 4.7500000000000000E+00 2.5470900535583496E+00 1.0963449478149414E+01 4.0237197875976562E+00 + 4.7550001144409180E+00 2.5485649108886719E+00 1.0951849937438965E+01 4.0206799507141113E+00 + 4.7600002288818359E+00 2.5500698089599609E+00 1.0940050125122070E+01 4.0175895690917969E+00 + 4.7649998664855957E+00 2.5515999794006348E+00 1.0928100585937500E+01 4.0144448280334473E+00 + 4.7699999809265137E+00 2.5531501770019531E+00 1.0915949821472168E+01 4.0112552642822266E+00 + 4.7750000953674316E+00 2.5547251701354980E+00 1.0903599739074707E+01 4.0080204010009766E+00 + 4.7800002098083496E+00 2.5563249588012695E+00 1.0891099929809570E+01 4.0047349929809570E+00 + 4.7849998474121094E+00 2.5579450130462646E+00 1.0878450393676758E+01 4.0014047622680664E+00 + 4.7899999618530273E+00 2.5595898628234863E+00 1.0865650177001953E+01 3.9980349540710449E+00 + 4.7950000762939453E+00 2.5612599849700928E+00 1.0852649688720703E+01 3.9946198463439941E+00 + 4.8000001907348633E+00 2.5629501342773438E+00 1.0839500427246094E+01 3.9911649227142334E+00 + 4.8049998283386230E+00 2.5646600723266602E+00 1.0826200485229492E+01 3.9876699447631836E+00 + 4.8099999427795410E+00 2.5663900375366211E+00 1.0812749862670898E+01 3.9841299057006836E+00 + 4.8150000572204590E+00 2.5681400299072266E+00 1.0799150466918945E+01 3.9805500507354736E+00 + 4.8200001716613770E+00 2.5699100494384766E+00 1.0785400390625000E+01 3.9769349098205566E+00 + 4.8249998092651367E+00 2.5717000961303711E+00 1.0771549224853516E+01 3.9732851982116699E+00 + 4.8299999237060547E+00 2.5735049247741699E+00 1.0757599830627441E+01 3.9696049690246582E+00 + 4.8350000381469727E+00 2.5753250122070312E+00 1.0743499755859375E+01 3.9658899307250977E+00 + 4.8400001525878906E+00 2.5771651268005371E+00 1.0729299545288086E+01 3.9621400833129883E+00 + 4.8449997901916504E+00 2.5790250301361084E+00 1.0715000152587891E+01 3.9583649635314941E+00 + 4.8499999046325684E+00 2.5809001922607422E+00 1.0700550079345703E+01 3.9545550346374512E+00 + 4.8550000190734863E+00 2.5827898979187012E+00 1.0686000823974609E+01 3.9507150650024414E+00 + 4.8600001335144043E+00 2.5847001075744629E+00 1.0671350479125977E+01 3.9468500614166260E+00 + 4.8649997711181641E+00 2.5866250991821289E+00 1.0656599998474121E+01 3.9429550170898438E+00 + 4.8699998855590820E+00 2.5885601043701172E+00 1.0641750335693359E+01 3.9390301704406738E+00 + 4.8750000000000000E+00 2.5905098915100098E+00 1.0626800537109375E+01 3.9350750446319580E+00 + 4.8800001144409180E+00 2.5924749374389648E+00 1.0611749649047852E+01 3.9310951232910156E+00 + 4.8850002288818359E+00 2.5944550037384033E+00 1.0596650123596191E+01 3.9270949363708496E+00 + 4.8899998664855957E+00 2.5964498519897461E+00 1.0581449508666992E+01 3.9230699539184570E+00 + 4.8949999809265137E+00 2.5984549522399902E+00 1.0566150665283203E+01 3.9190249443054199E+00 + 4.9000000953674316E+00 2.6004748344421387E+00 1.0550800323486328E+01 3.9149599075317383E+00 + 4.9050002098083496E+00 2.6025049686431885E+00 1.0535400390625000E+01 3.9108700752258301E+00 + 4.9099998474121094E+00 2.6045451164245605E+00 1.0519900321960449E+01 3.9067599773406982E+00 + 4.9149999618530273E+00 2.6066000461578369E+00 1.0504300117492676E+01 3.9026298522949219E+00 + 4.9200000762939453E+00 2.6086649894714355E+00 1.0488699913024902E+01 3.8984799385070801E+00 + 4.9250001907348633E+00 2.6107399463653564E+00 1.0473050117492676E+01 3.8943099975585938E+00 + 4.9299998283386230E+00 2.6128249168395996E+00 1.0457300186157227E+01 3.8901250362396240E+00 + 4.9349999427795410E+00 2.6149199008941650E+00 1.0441450119018555E+01 3.8859250545501709E+00 + 4.9400000572204590E+00 2.6170248985290527E+00 1.0425600051879883E+01 3.8817100524902344E+00 + 4.9450001716613770E+00 2.6191399097442627E+00 1.0409700393676758E+01 3.8774800300598145E+00 + 4.9499998092651367E+00 2.6212649345397949E+00 1.0393750190734863E+01 3.8732349872589111E+00 + 4.9549999237060547E+00 2.6233999729156494E+00 1.0377750396728516E+01 3.8689799308776855E+00 + 4.9600000381469727E+00 2.6255400180816650E+00 1.0361700057983398E+01 3.8647098541259766E+00 + 4.9650001525878906E+00 2.6276850700378418E+00 1.0345649719238281E+01 3.8604249954223633E+00 + 4.9699997901916504E+00 2.6298398971557617E+00 1.0329549789428711E+01 3.8561301231384277E+00 + 4.9749999046325684E+00 2.6320049762725830E+00 1.0313400268554688E+01 3.8518300056457520E+00 + 4.9800000190734863E+00 2.6341750621795654E+00 1.0297249794006348E+01 3.8475198745727539E+00 + 4.9850001335144043E+00 2.6363501548767090E+00 1.0281099319458008E+01 3.8431949615478516E+00 + 4.9899997711181641E+00 2.6385300159454346E+00 1.0264849662780762E+01 3.8388648033142090E+00 + 4.9949998855590820E+00 2.6407151222229004E+00 1.0248600006103516E+01 3.8345298767089844E+00 + 5.0000000000000000E+00 2.6429100036621094E+00 1.0232400894165039E+01 3.8301901817321777E+00 + 5.0050001144409180E+00 2.6451101303100586E+00 1.0216150283813477E+01 3.8258399963378906E+00 + 5.0100002288818359E+00 2.6473100185394287E+00 1.0199850082397461E+01 3.8214850425720215E+00 + 5.0149998664855957E+00 2.6495151519775391E+00 1.0183549880981445E+01 3.8171248435974121E+00 + 5.0199999809265137E+00 2.6517248153686523E+00 1.0167249679565430E+01 3.8127551078796387E+00 + 5.0250000953674316E+00 2.6539399623870850E+00 1.0150949478149414E+01 3.8083848953247070E+00 + 5.0300002098083496E+00 2.6561598777770996E+00 1.0134650230407715E+01 3.8040151596069336E+00 + 5.0349998474121094E+00 2.6583847999572754E+00 1.0118350028991699E+01 3.7996449470520020E+00 + 5.0399999618530273E+00 2.6606099605560303E+00 1.0102049827575684E+01 3.7952699661254883E+00 + 5.0450000762939453E+00 2.6628351211547852E+00 1.0085749626159668E+01 3.7908949851989746E+00 + 5.0500001907348633E+00 2.6650600433349609E+00 1.0069450378417969E+01 3.7865250110626221E+00 + 5.0549998283386230E+00 2.6672849655151367E+00 1.0053199768066406E+01 3.7821598052978516E+00 + 5.0599999427795410E+00 2.6695098876953125E+00 1.0037000656127930E+01 3.7778048515319824E+00 + 5.0650000572204590E+00 2.6717348098754883E+00 1.0020799636840820E+01 3.7734551429748535E+00 + 5.0700001716613770E+00 2.6739599704742432E+00 1.0004634857177734E+01 3.7691049575805664E+00 + 5.0749998092651367E+00 2.6761798858642578E+00 9.9885196685791016E+00 3.7647650241851807E+00 + 5.0799999237060547E+00 2.6784000396728516E+00 9.9724349975585938E+00 3.7604351043701172E+00 + 5.0850000381469727E+00 2.6806149482727051E+00 9.9563903808593750E+00 3.7561101913452148E+00 + 5.0900001525878906E+00 2.6828250885009766E+00 9.9403896331787109E+00 3.7517950534820557E+00 + 5.0949997901916504E+00 2.6850349903106689E+00 9.9244346618652344E+00 3.7474949359893799E+00 + 5.0999999046325684E+00 2.6872401237487793E+00 9.9085350036621094E+00 3.7432098388671875E+00 + 5.1050000190734863E+00 2.6894400119781494E+00 9.8926954269409180E+00 3.7389349937438965E+00 + 5.1100001335144043E+00 2.6916351318359375E+00 9.8769207000732422E+00 3.7346699237823486E+00 + 5.1149997711181641E+00 2.6938250064849854E+00 9.8612098693847656E+00 3.7304248809814453E+00 + 5.1199998855590820E+00 2.6960048675537109E+00 9.8455648422241211E+00 3.7262001037597656E+00 + 5.1250000000000000E+00 2.6981799602508545E+00 9.8299903869628906E+00 3.7219901084899902E+00 + 5.1300001144409180E+00 2.7003500461578369E+00 9.8144950866699219E+00 3.7177948951721191E+00 + 5.1350002288818359E+00 2.7025051116943359E+00 9.7990856170654297E+00 3.7136199474334717E+00 + 5.1399998664855957E+00 2.7046549320220947E+00 9.7837543487548828E+00 3.7094700336456299E+00 + 5.1449999809265137E+00 2.7067949771881104E+00 9.7685146331787109E+00 3.7053451538085938E+00 + 5.1500000953674316E+00 2.7089200019836426E+00 9.7533740997314453E+00 3.7012448310852051E+00 + 5.1550002098083496E+00 2.7110400199890137E+00 9.7383403778076172E+00 3.6971697807312012E+00 + 5.1599998474121094E+00 2.7131450176239014E+00 9.7234153747558594E+00 3.6931200027465820E+00 + 5.1649999618530273E+00 2.7152299880981445E+00 9.7086095809936523E+00 3.6890997886657715E+00 + 5.1700000762939453E+00 2.7173049449920654E+00 9.6939353942871094E+00 3.6851148605346680E+00 + 5.1750001907348633E+00 2.7193651199340820E+00 9.6793899536132812E+00 3.6811649799346924E+00 + 5.1799998283386230E+00 2.7214050292968750E+00 9.6649847030639648E+00 3.6772499084472656E+00 + 5.1849999427795410E+00 2.7234301567077637E+00 9.6507301330566406E+00 3.6733748912811279E+00 + 5.1900000572204590E+00 2.7254350185394287E+00 9.6366291046142578E+00 3.6695449352264404E+00 + 5.1950001716613770E+00 2.7274150848388672E+00 9.6226949691772461E+00 3.6657550334930420E+00 + 5.1999998092651367E+00 2.7293748855590820E+00 9.6089305877685547E+00 3.6620049476623535E+00 + 5.2049999237060547E+00 2.7313151359558105E+00 9.5953397750854492E+00 3.6583051681518555E+00 + 5.2100000381469727E+00 2.7332301139831543E+00 9.5819396972656250E+00 3.6546549797058105E+00 + 5.2150001525878906E+00 2.7351150512695312E+00 9.5687398910522461E+00 3.6510548591613770E+00 + 5.2199997901916504E+00 2.7369699478149414E+00 9.5557498931884766E+00 3.6475150585174561E+00 + 5.2249999046325684E+00 2.7388000488281250E+00 9.5429897308349609E+00 3.6440348625183105E+00 + 5.2300000190734863E+00 2.7406001091003418E+00 9.5304698944091797E+00 3.6406199932098389E+00 + 5.2350001335144043E+00 2.7423601150512695E+00 9.5181999206542969E+00 3.6372752189636230E+00 + 5.2399997711181641E+00 2.7440800666809082E+00 9.5061998367309570E+00 3.6340000629425049E+00 + 5.2449998855590820E+00 2.7457649707794189E+00 9.4944849014282227E+00 3.6308000087738037E+00 + 5.2500000000000000E+00 2.7474098205566406E+00 9.4830646514892578E+00 3.6276800632476807E+00 + 5.2550001144409180E+00 2.7490148544311523E+00 9.4719505310058594E+00 3.6246399879455566E+00 + 5.2600002288818359E+00 2.7505750656127930E+00 9.4611492156982422E+00 3.6216850280761719E+00 + 5.2649998664855957E+00 2.7520849704742432E+00 9.4506893157958984E+00 3.6188249588012695E+00 + 5.2699999809265137E+00 2.7535450458526611E+00 9.4405956268310547E+00 3.6160650253295898E+00 + 5.2750000953674316E+00 2.7549500465393066E+00 9.4308900833129883E+00 3.6134099960327148E+00 + 5.2800002098083496E+00 2.7562949657440186E+00 9.4216156005859375E+00 3.6108698844909668E+00 + 5.2849998474121094E+00 2.7575697898864746E+00 9.4128103256225586E+00 3.6084599494934082E+00 + 5.2899999618530273E+00 2.7587749958038330E+00 9.4045104980468750E+00 3.6061899662017822E+00 + 5.2950000762939453E+00 2.7599000930786133E+00 9.3967552185058594E+00 3.6040649414062500E+00 + 5.3000001907348633E+00 2.7609400749206543E+00 9.3895854949951172E+00 3.6020998954772949E+00 + 5.3049998283386230E+00 2.7618951797485352E+00 9.3830356597900391E+00 3.6003050804138184E+00 + 5.3099999427795410E+00 2.7627549171447754E+00 9.3771495819091797E+00 3.5986900329589844E+00 + 5.3150000572204590E+00 2.7635049819946289E+00 9.3719844818115234E+00 3.5972750186920166E+00 + 5.3200001716613770E+00 2.7641448974609375E+00 9.3675899505615234E+00 3.5960700511932373E+00 + 5.3249998092651367E+00 2.7646651268005371E+00 9.3640193939208984E+00 3.5950899124145508E+00 + 5.3299999237060547E+00 2.7650499343872070E+00 9.3613452911376953E+00 3.5943598747253418E+00 + 5.3350000381469727E+00 2.7652997970581055E+00 9.3596496582031250E+00 3.5938949584960938E+00 + 5.3400001525878906E+00 2.7653949260711670E+00 9.3590202331542969E+00 3.5937199592590332E+00 + 5.3449997901916504E+00 2.7653150558471680E+00 9.3595552444458008E+00 3.5938649177551270E+00 + 5.3499999046325684E+00 2.7650499343872070E+00 9.3613796234130859E+00 3.5943651199340820E+00 + 5.3550000190734863E+00 2.7645750045776367E+00 9.3646392822265625E+00 3.5952601432800293E+00 + 5.3600001335144043E+00 2.7638649940490723E+00 9.3694953918457031E+00 3.5965900421142578E+00 + 5.3649997711181641E+00 2.7629051208496094E+00 9.3761100769042969E+00 3.5984048843383789E+00 + 5.3699998855590820E+00 2.7616600990295410E+00 9.3846750259399414E+00 3.6007552146911621E+00 + 5.3750000000000000E+00 2.7600998878479004E+00 9.3954000473022461E+00 3.6036949157714844E+00 + 5.3800001144409180E+00 2.7581949234008789E+00 9.4085397720336914E+00 3.6072950363159180E+00 + 5.3850002288818359E+00 2.7558951377868652E+00 9.4244041442871094E+00 3.6116352081298828E+00 + 5.3899998664855957E+00 2.7531499862670898E+00 9.4433555603027344E+00 3.6168200969696045E+00 + 5.3949999809265137E+00 2.7499051094055176E+00 9.4658203125000000E+00 3.6229650974273682E+00 + 5.4000000953674316E+00 2.7460951805114746E+00 9.4922847747802734E+00 3.6301951408386230E+00 + 5.4050002098083496E+00 2.7416400909423828E+00 9.5232801437377930E+00 3.6386549472808838E+00 + 5.4099998474121094E+00 2.7364649772644043E+00 9.5593900680541992E+00 3.6485049724578857E+00 + 5.4149999618530273E+00 2.7304899692535400E+00 9.6012344360351562E+00 3.6599049568176270E+00 + 5.4200000762939453E+00 2.7236399650573730E+00 9.6493892669677734E+00 3.6730051040649414E+00 + 5.4250001907348633E+00 2.7158651351928711E+00 9.7042903900146484E+00 3.6879200935363770E+00 + 5.4299998283386230E+00 2.7071650028228760E+00 9.7660503387451172E+00 3.7046699523925781E+00 + 5.4349999427795410E+00 2.6976099014282227E+00 9.8342742919921875E+00 3.7231349945068359E+00 + 5.4400000572204590E+00 2.6873500347137451E+00 9.9079551696777344E+00 3.7430348396301270E+00 + 5.4450001716613770E+00 2.6766250133514404E+00 9.9854946136474609E+00 3.7639398574829102E+00 + 5.4499998092651367E+00 2.6657099723815918E+00 1.0064949989318848E+01 3.7853100299835205E+00 + 5.4549999237060547E+00 2.6548748016357422E+00 1.0144350051879883E+01 3.8066101074218750E+00 + 5.4600000381469727E+00 2.6443600654602051E+00 1.0221899986267090E+01 3.8273799419403076E+00 + 5.4650001525878906E+00 2.6343400478363037E+00 1.0296250343322754E+01 3.8472499847412109E+00 + 5.4699997901916504E+00 2.6249299049377441E+00 1.0366550445556641E+01 3.8659849166870117E+00 + 5.4749999046325684E+00 2.6161799430847168E+00 1.0432300567626953E+01 3.8834800720214844E+00 + 5.4800000190734863E+00 2.6080799102783203E+00 1.0493450164794922E+01 3.8997302055358887E+00 + 5.4850001335144043E+00 2.6005902290344238E+00 1.0550249099731445E+01 3.9148001670837402E+00 + 5.4899997711181641E+00 2.5936651229858398E+00 1.0602999687194824E+01 3.9287748336791992E+00 + 5.4949998855590820E+00 2.5872650146484375E+00 1.0652000427246094E+01 3.9417300224304199E+00 + 5.5000000000000000E+00 2.5813498497009277E+00 1.0697450637817383E+01 3.9537301063537598E+00 + 5.5050001144409180E+00 2.5758850574493408E+00 1.0739549636840820E+01 3.9648351669311523E+00 + 5.5100002288818359E+00 2.5708398818969727E+00 1.0778550148010254E+01 3.9751100540161133E+00 + 5.5149998664855957E+00 2.5661849975585938E+00 1.0814649581909180E+01 3.9846251010894775E+00 + 5.5199999809265137E+00 2.5618848800659180E+00 1.0848099708557129E+01 3.9934301376342773E+00 + 5.5250000953674316E+00 2.5579099655151367E+00 1.0879099845886230E+01 4.0015749931335449E+00 + 5.5300002098083496E+00 2.5542349815368652E+00 1.0907800674438477E+01 4.0091099739074707E+00 + 5.5349998474121094E+00 2.5508451461791992E+00 1.0934350013732910E+01 4.0160751342773438E+00 + 5.5399999618530273E+00 2.5477199554443359E+00 1.0958900451660156E+01 4.0225152969360352E+00 + 5.5450000762939453E+00 2.5448300838470459E+00 1.0981599807739258E+01 4.0284652709960938E+00 + 5.5500001907348633E+00 2.5421650409698486E+00 1.1002599716186523E+01 4.0339603424072266E+00 + 5.5549998283386230E+00 2.5397100448608398E+00 1.1021999359130859E+01 4.0390348434448242E+00 + 5.5599999427795410E+00 2.5374500751495361E+00 1.1039850234985352E+01 4.0437049865722656E+00 + 5.5650000572204590E+00 2.5353798866271973E+00 1.1056249618530273E+01 4.0479946136474609E+00 + 5.5700001716613770E+00 2.5334799289703369E+00 1.1071249961853027E+01 4.0519247055053711E+00 + 5.5749998092651367E+00 2.5317449569702148E+00 1.1085000038146973E+01 4.0555152893066406E+00 + 5.5799999237060547E+00 2.5301649570465088E+00 1.1097550392150879E+01 4.0587949752807617E+00 + 5.5850000381469727E+00 2.5287299156188965E+00 1.1108900070190430E+01 4.0617699623107910E+00 + 5.5900001525878906E+00 2.5274348258972168E+00 1.1119199752807617E+01 4.0644550323486328E+00 + 5.5949997901916504E+00 2.5262749195098877E+00 1.1128450393676758E+01 4.0668697357177734E+00 + 5.5999999046325684E+00 2.5252399444580078E+00 1.1136699676513672E+01 4.0690250396728516E+00 + 5.6050000190734863E+00 2.5243201255798340E+00 1.1144000053405762E+01 4.0709247589111328E+00 + 5.6100001335144043E+00 2.5235199928283691E+00 1.1150400161743164E+01 4.0725851058959961E+00 + 5.6149997711181641E+00 2.5228300094604492E+00 1.1155950546264648E+01 4.0740251541137695E+00 + 5.6199998855590820E+00 2.5222401618957520E+00 1.1160599708557129E+01 4.0752449035644531E+00 + 5.6250000000000000E+00 2.5217549800872803E+00 1.1164449691772461E+01 4.0762548446655273E+00 + 5.6300001144409180E+00 2.5213649272918701E+00 1.1167599678039551E+01 4.0770654678344727E+00 + 5.6350002288818359E+00 2.5210649967193604E+00 1.1170000076293945E+01 4.0776801109313965E+00 + 5.6399998664855957E+00 2.5208601951599121E+00 1.1171649932861328E+01 4.0781097412109375E+00 + 5.6449999809265137E+00 2.5207400321960449E+00 1.1172599792480469E+01 4.0783548355102539E+00 + 5.6500000953674316E+00 2.5206999778747559E+00 1.1172900199890137E+01 4.0784201622009277E+00 + 5.6550002098083496E+00 2.5207400321960449E+00 1.1172599792480469E+01 4.0783052444458008E+00 + 5.6599998474121094E+00 2.5208549499511719E+00 1.1171699523925781E+01 4.0779895782470703E+00 + 5.6649999618530273E+00 2.5210449695587158E+00 1.1170200347900391E+01 4.0774497985839844E+00 + 5.6700000762939453E+00 2.5213098526000977E+00 1.1168100357055664E+01 4.0766296386718750E+00 + 5.6750001907348633E+00 2.5216400623321533E+00 1.1165449142456055E+01 4.0754251480102539E+00 + 5.6799998283386230E+00 2.5220398902893066E+00 1.1162249565124512E+01 4.0736446380615234E+00 + 5.6849999427795410E+00 2.5225100517272949E+00 1.1158499717712402E+01 4.0709600448608398E+00 + 5.6900000572204590E+00 2.5230398178100586E+00 1.1154250144958496E+01 4.0668101310729980E+00 + 5.6950001716613770E+00 2.5236301422119141E+00 1.1149550437927246E+01 4.0602250099182129E+00 + 5.6999998092651367E+00 2.5242850780487061E+00 1.1144350051879883E+01 4.0493402481079102E+00 + 5.7049999237060547E+00 2.5250000953674316E+00 1.1138700485229492E+01 4.0303950309753418E+00 + 5.7100000381469727E+00 2.5257699489593506E+00 1.1132650375366211E+01 3.9974498748779297E+00 + 5.7150001525878906E+00 2.5265998840332031E+00 1.1126150131225586E+01 3.9464349746704102E+00 + 5.7199997901916504E+00 2.5274848937988281E+00 1.1119350433349609E+01 3.8797399997711182E+00 + 5.7249999046325684E+00 2.5284149646759033E+00 1.1112299919128418E+01 3.8049001693725586E+00 + 5.7300000190734863E+00 2.5293951034545898E+00 1.1104999542236328E+01 3.7312002182006836E+00 + 5.7350001335144043E+00 2.5304300785064697E+00 1.1097450256347656E+01 3.6678152084350586E+00 + 5.7399997711181641E+00 2.5315098762512207E+00 1.1089599609375000E+01 3.6227200031280518E+00 + 5.7449998855590820E+00 2.5326299667358398E+00 1.1081500053405762E+01 3.6015248298645020E+00 + 5.7500000000000000E+00 2.5337948799133301E+00 1.1073049545288086E+01 3.6054201126098633E+00 + 5.7550001144409180E+00 2.5350050926208496E+00 1.1064199447631836E+01 3.6312849521636963E+00 + 5.7600002288818359E+00 2.5362548828125000E+00 1.1055000305175781E+01 3.6745700836181641E+00 + 5.7649998664855957E+00 2.5375449657440186E+00 1.1045299530029297E+01 3.7307100296020508E+00 + 5.7699999809265137E+00 2.5388751029968262E+00 1.1035099983215332E+01 3.7952399253845215E+00 + 5.7750000953674316E+00 2.5402500629425049E+00 1.1024399757385254E+01 3.8641550540924072E+00 + 5.7800002098083496E+00 2.5416650772094727E+00 1.1013099670410156E+01 3.9342451095581055E+00 + 5.7849998474121094E+00 2.5431199073791504E+00 1.1001300811767578E+01 4.0032901763916016E+00 + 5.7899999618530273E+00 2.5446200370788574E+00 1.0989000320434570E+01 4.0700597763061523E+00 + 5.7950000762939453E+00 2.5461602210998535E+00 1.0976099967956543E+01 4.1340847015380859E+00 + 5.8000001907348633E+00 2.5477399826049805E+00 1.0962699890136719E+01 4.1953201293945312E+00 + 5.8049998283386230E+00 2.5493600368499756E+00 1.0948800086975098E+01 4.2537999153137207E+00 + 5.8099999427795410E+00 2.5510201454162598E+00 1.0934350013732910E+01 4.3094201087951660E+00 + 5.8150000572204590E+00 2.5527200698852539E+00 1.0919400215148926E+01 4.3618602752685547E+00 + 5.8200001716613770E+00 2.5544550418853760E+00 1.0903949737548828E+01 4.4106049537658691E+00 + 5.8249998092651367E+00 2.5562300682067871E+00 1.0888000488281250E+01 4.4550800323486328E+00 + 5.8299999237060547E+00 2.5580501556396484E+00 1.0871549606323242E+01 4.4947500228881836E+00 + 5.8350000381469727E+00 2.5599098205566406E+00 1.0854650497436523E+01 4.5291800498962402E+00 + 5.8400001525878906E+00 2.5618100166320801E+00 1.0837349891662598E+01 4.5580797195434570E+00 + 5.8449997901916504E+00 2.5637450218200684E+00 1.0819600105285645E+01 4.5812902450561523E+00 + 5.8499999046325684E+00 2.5657148361206055E+00 1.0801450729370117E+01 4.5987501144409180E+00 + 5.8550000190734863E+00 2.5677199363708496E+00 1.0782999992370605E+01 4.6104650497436523E+00 + 5.8600001335144043E+00 2.5697600841522217E+00 1.0764249801635742E+01 4.6164650917053223E+00 + 5.8649997711181641E+00 2.5718350410461426E+00 1.0745149612426758E+01 4.6167602539062500E+00 + 5.8699998855590820E+00 2.5739450454711914E+00 1.0725749969482422E+01 4.6113400459289551E+00 + 5.8750000000000000E+00 2.5760951042175293E+00 1.0706150054931641E+01 4.6001949310302734E+00 + 5.8800001144409180E+00 2.5782749652862549E+00 1.0686300277709961E+01 4.5833101272583008E+00 + 5.8850002288818359E+00 2.5804848670959473E+00 1.0666250228881836E+01 4.5606946945190430E+00 + 5.8899998664855957E+00 2.5827298164367676E+00 1.0646100044250488E+01 4.5324296951293945E+00 + 5.8949999809265137E+00 2.5850000381469727E+00 1.0625849723815918E+01 4.4986648559570312E+00 + 5.9000000953674316E+00 2.5872950553894043E+00 1.0605499267578125E+01 4.4596252441406250E+00 + 5.9050002098083496E+00 2.5896201133728027E+00 1.0585049629211426E+01 4.4156198501586914E+00 + 5.9099998474121094E+00 2.5919749736785889E+00 1.0564599990844727E+01 4.3670148849487305E+00 + 5.9149999618530273E+00 2.5943551063537598E+00 1.0544250488281250E+01 4.3142251968383789E+00 + 5.9200000762939453E+00 2.5967550277709961E+00 1.0523899078369141E+01 4.2576999664306641E+00 + 5.9250001907348633E+00 2.5991799831390381E+00 1.0503599166870117E+01 4.1979103088378906E+00 + 5.9299998283386230E+00 2.6016249656677246E+00 1.0483449935913086E+01 4.1353549957275391E+00 + 5.9349999427795410E+00 2.6040899753570557E+00 1.0463399887084961E+01 4.0705399513244629E+00 + 5.9400000572204590E+00 2.6065800189971924E+00 1.0443449974060059E+01 4.0039849281311035E+00 + 5.9450001716613770E+00 2.6090898513793945E+00 1.0423650741577148E+01 3.9362449645996094E+00 + 5.9499998092651367E+00 2.6116149425506592E+00 1.0404050827026367E+01 3.8678798675537109E+00 + 5.9549999237060547E+00 2.6141600608825684E+00 1.0384650230407715E+01 3.7994651794433594E+00 + 5.9600000381469727E+00 2.6167249679565430E+00 1.0365400314331055E+01 3.7315850257873535E+00 + 5.9650001525878906E+00 2.6193051338195801E+00 1.0346349716186523E+01 3.6648299694061279E+00 + 5.9699997901916504E+00 2.6219000816345215E+00 1.0327549934387207E+01 3.5997948646545410E+00 + 5.9749999046325684E+00 2.6245050430297852E+00 1.0309000015258789E+01 3.5370650291442871E+00 + 5.9800000190734863E+00 2.6271200180053711E+00 1.0290699958801270E+01 3.4772400856018066E+00 + 5.9850001335144043E+00 2.6297450065612793E+00 1.0272600173950195E+01 3.4209148883819580E+00 + 5.9899997711181641E+00 2.6323847770690918E+00 1.0254699707031250E+01 3.3686800003051758E+00 + 5.9949998855590820E+00 2.6350350379943848E+00 1.0237050056457520E+01 3.3211150169372559E+00 + 6.0000000000000000E+00 2.6376948356628418E+00 1.0219600677490234E+01 3.2787499427795410E+00 + 6.0050001144409180E+00 2.6403698921203613E+00 1.0202300071716309E+01 3.2420649528503418E+00 + 6.0100002288818359E+00 2.6430599689483643E+00 1.0185199737548828E+01 3.2114500999450684E+00 + 6.0149998664855957E+00 2.6457648277282715E+00 1.0168199539184570E+01 3.1871750354766846E+00 + 6.0199999809265137E+00 2.6484799385070801E+00 1.0151300430297852E+01 3.1694049835205078E+00 + 6.0250000953674316E+00 2.6512150764465332E+00 1.0134550094604492E+01 3.1581749916076660E+00 + 6.0300002098083496E+00 2.6539649963378906E+00 1.0117899894714355E+01 3.1534152030944824E+00 + 6.0349998474121094E+00 2.6567249298095703E+00 1.0101300239562988E+01 3.1549801826477051E+00 + 6.0399999618530273E+00 2.6595048904418945E+00 1.0084699630737305E+01 3.1626901626586914E+00 + 6.0450000762939453E+00 2.6623051166534424E+00 1.0068149566650391E+01 3.1763448715209961E+00 + 6.0500001907348633E+00 2.6651201248168945E+00 1.0051599502563477E+01 3.1957099437713623E+00 + 6.0549998283386230E+00 2.6679499149322510E+00 1.0035049438476562E+01 3.2205300331115723E+00 + 6.0599999427795410E+00 2.6707999706268311E+00 1.0018499374389648E+01 3.2504949569702148E+00 + 6.0650000572204590E+00 2.6736650466918945E+00 1.0001879692077637E+01 3.2852349281311035E+00 + 6.0700001716613770E+00 2.6765451431274414E+00 9.9852247238159180E+00 3.3243350982666016E+00 + 6.0749998092651367E+00 2.6794400215148926E+00 9.9685249328613281E+00 3.3673100471496582E+00 + 6.0799999237060547E+00 2.6823501586914062E+00 9.9517650604248047E+00 3.4136199951171875E+00 + 6.0850000381469727E+00 2.6852798461914062E+00 9.9349403381347656E+00 3.4626998901367188E+00 + 6.0900001525878906E+00 2.6882200241088867E+00 9.9180498123168945E+00 3.5139598846435547E+00 + 6.0949997901916504E+00 2.6911649703979492E+00 9.9010944366455078E+00 3.5668048858642578E+00 + 6.0999999046325684E+00 2.6941199302673340E+00 9.8840751647949219E+00 3.6206498146057129E+00 + 6.1050000190734863E+00 2.6970801353454590E+00 9.8669900894165039E+00 3.6749300956726074E+00 + 6.1100001335144043E+00 2.7000451087951660E+00 9.8498497009277344E+00 3.7290999889373779E+00 + 6.1149997711181641E+00 2.7030100822448730E+00 9.8326702117919922E+00 3.7826449871063232E+00 + 6.1199998855590820E+00 2.7059650421142578E+00 9.8154506683349609E+00 3.8350801467895508E+00 + 6.1250000000000000E+00 2.7089149951934814E+00 9.7982006072998047E+00 3.8859648704528809E+00 + 6.1300001144409180E+00 2.7118549346923828E+00 9.7809400558471680E+00 3.9348950386047363E+00 + 6.1350002288818359E+00 2.7147798538208008E+00 9.7636899948120117E+00 3.9814848899841309E+00 + 6.1399998664855957E+00 2.7176849842071533E+00 9.7464647293090820E+00 4.0253896713256836E+00 + 6.1449999809265137E+00 2.7205648422241211E+00 9.7292900085449219E+00 4.0662746429443359E+00 + 6.1500000953674316E+00 2.7234148979187012E+00 9.7121906280517578E+00 4.1038298606872559E+00 + 6.1550002098083496E+00 2.7262299060821533E+00 9.6951951980590820E+00 4.1377696990966797E+00 + 6.1599998474121094E+00 2.7290101051330566E+00 9.6783304214477539E+00 4.1678400039672852E+00 + 6.1649999618530273E+00 2.7317500114440918E+00 9.6616201400756836E+00 4.1938300132751465E+00 + 6.1700000762939453E+00 2.7344450950622559E+00 9.6451053619384766E+00 4.2155799865722656E+00 + 6.1750001907348633E+00 2.7370848655700684E+00 9.6288099288940430E+00 4.2329950332641602E+00 + 6.1799998283386230E+00 2.7396700382232666E+00 9.6127700805664062E+00 4.2460298538208008E+00 + 6.1849999427795410E+00 2.7421951293945312E+00 9.5970249176025391E+00 4.2546796798706055E+00 + 6.1900000572204590E+00 2.7446498870849609E+00 9.5816097259521484E+00 4.2589645385742188E+00 + 6.1950001716613770E+00 2.7470350265502930E+00 9.5665645599365234E+00 4.2589197158813477E+00 + 6.1999998092651367E+00 2.7493448257446289E+00 9.5519351959228516E+00 4.2545700073242188E+00 + 6.2049999237060547E+00 2.7515699863433838E+00 9.5377702713012695E+00 4.2459096908569336E+00 + 6.2100000381469727E+00 2.7537050247192383E+00 9.5241050720214844E+00 4.2329349517822266E+00 + 6.2150001525878906E+00 2.7557449340820312E+00 9.5109806060791016E+00 4.2156548500061035E+00 + 6.2199997901916504E+00 2.7576899528503418E+00 9.4984397888183594E+00 4.1940999031066895E+00 + 6.2249999046325684E+00 2.7595300674438477E+00 9.4865303039550781E+00 4.1683502197265625E+00 + 6.2300000190734863E+00 2.7612550258636475E+00 9.4752998352050781E+00 4.1385450363159180E+00 + 6.2350001335144043E+00 2.7628650665283203E+00 9.4647846221923828E+00 4.1048750877380371E+00 + 6.2399997711181641E+00 2.7643549442291260E+00 9.4550199508666992E+00 4.0675749778747559E+00 + 6.2449998855590820E+00 2.7657151222229004E+00 9.4460496902465820E+00 4.0269203186035156E+00 + 6.2500000000000000E+00 2.7669401168823242E+00 9.4379100799560547E+00 3.9832251071929932E+00 + 6.2550001144409180E+00 2.7680299282073975E+00 9.4306354522705078E+00 3.9368100166320801E+00 + 6.2600002288818359E+00 2.7689700126647949E+00 9.4242706298828125E+00 3.8880050182342529E+00 + 6.2649998664855957E+00 2.7697548866271973E+00 9.4188594818115234E+00 3.8371648788452148E+00 + 6.2699999809265137E+00 2.7703847885131836E+00 9.4144401550292969E+00 3.7846398353576660E+00 + 6.2750000953674316E+00 2.7708499431610107E+00 9.4110355377197266E+00 3.7307898998260498E+00 + 6.2800002098083496E+00 2.7711448669433594E+00 9.4086599349975586E+00 3.6759948730468750E+00 + 6.2849998474121094E+00 2.7712650299072266E+00 9.4073257446289062E+00 3.6206650733947754E+00 + 6.2899999618530273E+00 2.7712001800537109E+00 9.4070606231689453E+00 3.5652251243591309E+00 + 6.2950000762939453E+00 2.7709500789642334E+00 9.4078903198242188E+00 3.5101151466369629E+00 + 6.3000001907348633E+00 2.7705101966857910E+00 9.4098453521728516E+00 3.4557900428771973E+00 + 6.3049998283386230E+00 2.7698700428009033E+00 9.4129600524902344E+00 3.4027099609375000E+00 + 6.3099999427795410E+00 2.7690248489379883E+00 9.4172601699829102E+00 3.3513250350952148E+00 + 6.3150000572204590E+00 2.7679648399353027E+00 9.4227552413940430E+00 3.3020849227905273E+00 + 6.3200001716613770E+00 2.7666900157928467E+00 9.4294395446777344E+00 3.2554450035095215E+00 + 6.3249998092651367E+00 2.7652049064636230E+00 9.4373149871826172E+00 3.2118601799011230E+00 + 6.3299999237060547E+00 2.7635049819946289E+00 9.4463844299316406E+00 3.1718049049377441E+00 + 6.3350000381469727E+00 2.7615799903869629E+00 9.4566650390625000E+00 3.1357498168945312E+00 + 6.3400001525878906E+00 2.7594299316406250E+00 9.4681797027587891E+00 3.1041698455810547E+00 + 6.3449997901916504E+00 2.7570550441741943E+00 9.4809646606445312E+00 3.0775098800659180E+00 + 6.3499999046325684E+00 2.7544498443603516E+00 9.4950447082519531E+00 3.0561599731445312E+00 + 6.3550000190734863E+00 2.7516150474548340E+00 9.5104398727416992E+00 3.0404400825500488E+00 + 6.3600001335144043E+00 2.7485449314117432E+00 9.5271701812744141E+00 3.0305600166320801E+00 + 6.3649997711181641E+00 2.7452449798583984E+00 9.5452442169189453E+00 3.0266299247741699E+00 + 6.3699998855590820E+00 2.7417201995849609E+00 9.5646953582763672E+00 3.0286798477172852E+00 + 6.3750000000000000E+00 2.7379701137542725E+00 9.5855655670166016E+00 3.0366749763488770E+00 + 6.3800001144409180E+00 2.7340002059936523E+00 9.6078796386718750E+00 3.0505399703979492E+00 + 6.3850002288818359E+00 2.7298099994659424E+00 9.6316499710083008E+00 3.0701999664306641E+00 + 6.3899998664855957E+00 2.7254099845886230E+00 9.6568756103515625E+00 3.0955700874328613E+00 + 6.3949999809265137E+00 2.7208151817321777E+00 9.6835451126098633E+00 3.1265399456024170E+00 + 6.4000000953674316E+00 2.7160301208496094E+00 9.7116498947143555E+00 3.1629748344421387E+00 + 6.4050002098083496E+00 2.7110700607299805E+00 9.7411851882934570E+00 3.2046799659729004E+00 + 6.4099998474121094E+00 2.7059500217437744E+00 9.7721252441406250E+00 3.2513949871063232E+00 + 6.4149999618530273E+00 2.7006800174713135E+00 9.8044347763061523E+00 3.3027901649475098E+00 + 6.4200000762939453E+00 2.6952800750732422E+00 9.8380641937255859E+00 3.3584551811218262E+00 + 6.4250001907348633E+00 2.6897699832916260E+00 9.8729448318481445E+00 3.4179248809814453E+00 + 6.4299998283386230E+00 2.6841650009155273E+00 9.9089946746826172E+00 3.4806749820709229E+00 + 6.4349999427795410E+00 2.6784849166870117E+00 9.9461154937744141E+00 3.5461549758911133E+00 + 6.4400000572204590E+00 2.6727550029754639E+00 9.9842147827148438E+00 3.6138100624084473E+00 + 6.4450001716613770E+00 2.6669898033142090E+00 1.0023149490356445E+01 3.6830749511718750E+00 + 6.4499998092651367E+00 2.6612048149108887E+00 1.0062799453735352E+01 3.7533950805664062E+00 + 6.4549999237060547E+00 2.6554250717163086E+00 1.0103099822998047E+01 3.8242099285125732E+00 + 6.4600000381469727E+00 2.6496701240539551E+00 1.0143850326538086E+01 3.8949699401855469E+00 + 6.4650001525878906E+00 2.6439599990844727E+00 1.0184850692749023E+01 3.9651298522949219E+00 + 6.4699997901916504E+00 2.6383149623870850E+00 1.0225950241088867E+01 4.0341401100158691E+00 + 6.4749999046325684E+00 2.6327550411224365E+00 1.0266950607299805E+01 4.1014652252197266E+00 + 6.4800000190734863E+00 2.6272950172424316E+00 1.0307800292968750E+01 4.1665902137756348E+00 + 6.4850001335144043E+00 2.6219301223754883E+00 1.0348400115966797E+01 4.2290248870849609E+00 + 6.4899997711181641E+00 2.6166648864746094E+00 1.0388649940490723E+01 4.2882699966430664E+00 + 6.4949998855590820E+00 2.6115097999572754E+00 1.0428549766540527E+01 4.3438248634338379E+00 + 6.5000000000000000E+00 2.6064748764038086E+00 1.0467899322509766E+01 4.3952198028564453E+00 + 6.5050001144409180E+00 2.6015701293945312E+00 1.0506500244140625E+01 4.4420051574707031E+00 + 6.5100002288818359E+00 2.5968050956726074E+00 1.0544300079345703E+01 4.4838047027587891E+00 + 6.5149998664855957E+00 2.5921900272369385E+00 1.0581199645996094E+01 4.5203299522399902E+00 + 6.5199999809265137E+00 2.5877199172973633E+00 1.0617149353027344E+01 4.5513749122619629E+00 + 6.5250000953674316E+00 2.5833950042724609E+00 1.0652050018310547E+01 4.5768051147460938E+00 + 6.5300002098083496E+00 2.5792250633239746E+00 1.0685850143432617E+01 4.5965099334716797E+00 + 6.5349998474121094E+00 2.5752100944519043E+00 1.0718500137329102E+01 4.6103849411010742E+00 + 6.5399999618530273E+00 2.5713500976562500E+00 1.0749899864196777E+01 4.6182999610900879E+00 + 6.5450000762939453E+00 2.5676450729370117E+00 1.0780099868774414E+01 4.6201152801513672E+00 + 6.5500001907348633E+00 2.5640950202941895E+00 1.0809049606323242E+01 4.6156902313232422E+00 + 6.5549998283386230E+00 2.5606951713562012E+00 1.0836750030517578E+01 4.6049146652221680E+00 + 6.5599999427795410E+00 2.5574400424957275E+00 1.0863199234008789E+01 4.5877552032470703E+00 + 6.5650000572204590E+00 2.5543351173400879E+00 1.0888349533081055E+01 4.5642747879028320E+00 + 6.5700001716613770E+00 2.5513801574707031E+00 1.0912200927734375E+01 4.5346550941467285E+00 + 6.5749998092651367E+00 2.5485749244689941E+00 1.0934749603271484E+01 4.4991850852966309E+00 + 6.5799999237060547E+00 2.5459151268005371E+00 1.0955999374389648E+01 4.4582452774047852E+00 + 6.5850000381469727E+00 2.5433900356292725E+00 1.0976049423217773E+01 4.4122600555419922E+00 + 6.5900001525878906E+00 2.5409998893737793E+00 1.0994899749755859E+01 4.3616900444030762E+00 + 6.5949997901916504E+00 2.5387449264526367E+00 1.1012499809265137E+01 4.3070349693298340E+00 + 6.5999999046325684E+00 2.5366201400756836E+00 1.1028949737548828E+01 4.2488203048706055E+00 + 6.6050000190734863E+00 2.5346198081970215E+00 1.1044250488281250E+01 4.1876001358032227E+00 + 6.6100001335144043E+00 2.5327448844909668E+00 1.1058450698852539E+01 4.1239652633666992E+00 + 6.6149997711181641E+00 2.5309948921203613E+00 1.1071599960327148E+01 4.0585699081420898E+00 + 6.6199998855590820E+00 2.5293598175048828E+00 1.1083700180053711E+01 3.9921398162841797E+00 + 6.6250000000000000E+00 2.5278401374816895E+00 1.1094850540161133E+01 3.9254450798034668E+00 + 6.6300001144409180E+00 2.5264301300048828E+00 1.1105050086975098E+01 3.8592998981475830E+00 + 6.6350002288818359E+00 2.5251297950744629E+00 1.1114350318908691E+01 3.7945299148559570E+00 + 6.6399998664855957E+00 2.5239348411560059E+00 1.1122799873352051E+01 3.7319300174713135E+00 + 6.6449999809265137E+00 2.5228400230407715E+00 1.1130449295043945E+01 3.6722500324249268E+00 + 6.6500000953674316E+00 2.5218448638916016E+00 1.1137350082397461E+01 3.6162049770355225E+00 + 6.6550002098083496E+00 2.5209450721740723E+00 1.1143449783325195E+01 3.5645098686218262E+00 + 6.6599998474121094E+00 2.5201349258422852E+00 1.1148849487304688E+01 3.5178899765014648E+00 + 6.6649999618530273E+00 2.5194149017333984E+00 1.1153599739074707E+01 3.4770851135253906E+00 + 6.6700000762939453E+00 2.5187900066375732E+00 1.1157699584960938E+01 3.4428200721740723E+00 + 6.6750001907348633E+00 2.5182499885559082E+00 1.1161199569702148E+01 3.4157149791717529E+00 + 6.6799998283386230E+00 2.5177898406982422E+00 1.1164099693298340E+01 3.3962299823760986E+00 + 6.6849999427795410E+00 2.5174150466918945E+00 1.1166449546813965E+01 3.3846099376678467E+00 + 6.6900000572204590E+00 2.5171251296997070E+00 1.1168249130249023E+01 3.3808851242065430E+00 + 6.6950001716613770E+00 2.5169148445129395E+00 1.1169500350952148E+01 3.3849201202392578E+00 + 6.6999998092651367E+00 2.5167798995971680E+00 1.1170200347900391E+01 3.3964900970458984E+00 + 6.7049999237060547E+00 2.5167200565338135E+00 1.1170399665832520E+01 3.4153699874877930E+00 + 6.7100000381469727E+00 2.5167398452758789E+00 1.1170099258422852E+01 3.4413199424743652E+00 + 6.7150001525878906E+00 2.5168399810791016E+00 1.1169199943542480E+01 3.4740700721740723E+00 + 6.7199997901916504E+00 2.5170149803161621E+00 1.1167799949645996E+01 3.5132899284362793E+00 + 6.7249999046325684E+00 2.5172600746154785E+00 1.1165849685668945E+01 3.5585350990295410E+00 + 6.7300000190734863E+00 2.5175800323486328E+00 1.1163349151611328E+01 3.6092500686645508E+00 + 6.7350001335144043E+00 2.5179748535156250E+00 1.1160299301147461E+01 3.6647601127624512E+00 + 6.7399997711181641E+00 2.5184450149536133E+00 1.1156599998474121E+01 3.7243099212646484E+00 + 6.7449998855590820E+00 2.5189900398254395E+00 1.1152299880981445E+01 3.7870950698852539E+00 + 6.7500000000000000E+00 2.5196099281311035E+00 1.1147399902343750E+01 3.8522801399230957E+00 + 6.7550001144409180E+00 2.5203099250793457E+00 1.1141849517822266E+01 3.9190549850463867E+00 + 6.7600002288818359E+00 2.5210850238800049E+00 1.1135649681091309E+01 3.9866151809692383E+00 + 6.7649998664855957E+00 2.5219349861145020E+00 1.1128799438476562E+01 4.0541954040527344E+00 + 6.7699999809265137E+00 2.5228600502014160E+00 1.1121200561523438E+01 4.1210751533508301E+00 + 6.7750000953674316E+00 2.5238599777221680E+00 1.1112899780273438E+01 4.1865653991699219E+00 + 6.7800002098083496E+00 2.5249400138854980E+00 1.1103950500488281E+01 4.2500247955322266E+00 + 6.7849998474121094E+00 2.5260949134826660E+00 1.1094249725341797E+01 4.3108549118041992E+00 + 6.7899999618530273E+00 2.5273251533508301E+00 1.1083799362182617E+01 4.3684949874877930E+00 + 6.7950000762939453E+00 2.5286350250244141E+00 1.1072649955749512E+01 4.4224200248718262E+00 + 6.8000001907348633E+00 2.5300199985504150E+00 1.1060750007629395E+01 4.4721350669860840E+00 + 6.8049998283386230E+00 2.5314798355102539E+00 1.1048099517822266E+01 4.5171699523925781E+00 + 6.8099999427795410E+00 2.5330200195312500E+00 1.1034799575805664E+01 4.5570945739746094E+00 + 6.8150000572204590E+00 2.5346350669860840E+00 1.1020799636840820E+01 4.5915250778198242E+00 + 6.8200001716613770E+00 2.5363199710845947E+00 1.1006050109863281E+01 4.6201601028442383E+00 + 6.8249998092651367E+00 2.5380849838256836E+00 1.0990650177001953E+01 4.6428050994873047E+00 + 6.8299999237060547E+00 2.5399250984191895E+00 1.0974599838256836E+01 4.6593647003173828E+00 + 6.8350000381469727E+00 2.5418348312377930E+00 1.0957950592041016E+01 4.6698551177978516E+00 + 6.8400001525878906E+00 2.5438199043273926E+00 1.0940750122070312E+01 4.6743350028991699E+00 + 6.8449997901916504E+00 2.5458750724792480E+00 1.0922950744628906E+01 4.6728549003601074E+00 + 6.8499999046325684E+00 2.5479998588562012E+00 1.0904600143432617E+01 4.6654348373413086E+00 + 6.8550000190734863E+00 2.5501949787139893E+00 1.0885749816894531E+01 4.6520452499389648E+00 + 6.8600001335144043E+00 2.5524601936340332E+00 1.0866449356079102E+01 4.6326298713684082E+00 + 6.8649997711181641E+00 2.5547950267791748E+00 1.0846750259399414E+01 4.6071848869323730E+00 + 6.8699998855590820E+00 2.5571999549865723E+00 1.0826649665832520E+01 4.5757951736450195E+00 + 6.8750000000000000E+00 2.5596649646759033E+00 1.0806200027465820E+01 4.5386552810668945E+00 + 6.8800001144409180E+00 2.5621900558471680E+00 1.0785449981689453E+01 4.4960803985595703E+00 + 6.8850002288818359E+00 2.5647799968719482E+00 1.0764450073242188E+01 4.4484748840332031E+00 + 6.8899998664855957E+00 2.5674300193786621E+00 1.0743249893188477E+01 4.3962802886962891E+00 + 6.8949999809265137E+00 2.5701351165771484E+00 1.0721849441528320E+01 4.3399500846862793E+00 + 6.9000000953674316E+00 2.5729000568389893E+00 1.0700300216674805E+01 4.2799601554870605E+00 + 6.9050002098083496E+00 2.5757200717926025E+00 1.0678699493408203E+01 4.2167854309082031E+00 + 6.9099998474121094E+00 2.5785899162292480E+00 1.0657050132751465E+01 4.1509251594543457E+00 + 6.9149999618530273E+00 2.5815148353576660E+00 1.0635350227355957E+01 4.0829248428344727E+00 + 6.9200000762939453E+00 2.5844898223876953E+00 1.0613650321960449E+01 4.0133700370788574E+00 + 6.9250001907348633E+00 2.5875101089477539E+00 1.0592000007629395E+01 3.9428749084472656E+00 + 6.9299998283386230E+00 2.5905749797821045E+00 1.0570400238037109E+01 3.8720798492431641E+00 + 6.9349999427795410E+00 2.5936899185180664E+00 1.0548850059509277E+01 3.8016548156738281E+00 + 6.9400000572204590E+00 2.5968449115753174E+00 1.0527400016784668E+01 3.7322649955749512E+00 + 6.9450001716613770E+00 2.6000349521636963E+00 1.0506099700927734E+01 3.6645650863647461E+00 + 6.9499998092651367E+00 2.6032600402832031E+00 1.0484899520874023E+01 3.5991899967193604E+00 + 6.9549999237060547E+00 2.6065201759338379E+00 1.0463800430297852E+01 3.5367350578308105E+00 + 6.9600000381469727E+00 2.6098198890686035E+00 1.0442850112915039E+01 3.4777498245239258E+00 + 6.9650001525878906E+00 2.6131501197814941E+00 1.0421999931335449E+01 3.4227700233459473E+00 + 6.9699997901916504E+00 2.6165051460266113E+00 1.0401249885559082E+01 3.3723199367523193E+00 + 6.9749999046325684E+00 2.6198899745941162E+00 1.0380599975585938E+01 3.3269250392913818E+00 + 6.9800000190734863E+00 2.6233048439025879E+00 1.0360050201416016E+01 3.2871351242065430E+00 + 6.9850001335144043E+00 2.6267499923706055E+00 1.0339500427246094E+01 3.2534599304199219E+00 + 6.9899997711181641E+00 2.6302249431610107E+00 1.0318900108337402E+01 3.2263100147247314E+00 + 6.9949998855590820E+00 2.6337249279022217E+00 1.0298299789428711E+01 3.2059350013732910E+00 + 7.0000000000000000E+00 2.6372399330139160E+00 1.0277700424194336E+01 3.1923899650573730E+00 + 7.0050001144409180E+00 2.6407699584960938E+00 1.0257049560546875E+01 3.1855499744415283E+00 + 7.0100002288818359E+00 2.6443150043487549E+00 1.0236299514770508E+01 3.1851849555969238E+00 + 7.0149998664855957E+00 2.6478700637817383E+00 1.0215450286865234E+01 3.1910548210144043E+00 + 7.0199999809265137E+00 2.6514348983764648E+00 1.0194499969482422E+01 3.2029449939727783E+00 + 7.0250000953674316E+00 2.6550099849700928E+00 1.0173349380493164E+01 3.2206501960754395E+00 + 7.0300002098083496E+00 2.6585950851440430E+00 1.0152000427246094E+01 3.2439498901367188E+00 + 7.0349998474121094E+00 2.6621899604797363E+00 1.0130500793457031E+01 3.2725701332092285E+00 + 7.0399999618530273E+00 2.6657948493957520E+00 1.0108750343322754E+01 3.3061552047729492E+00 + 7.0450000762939453E+00 2.6694049835205078E+00 1.0086700439453125E+01 3.3442502021789551E+00 + 7.0500001907348633E+00 2.6730151176452637E+00 1.0064399719238281E+01 3.3863101005554199E+00 + 7.0549998283386230E+00 2.6766200065612793E+00 1.0041899681091309E+01 3.4317300319671631E+00 + 7.0599999427795410E+00 2.6802248954772949E+00 1.0019149780273438E+01 3.4798750877380371E+00 + 7.0650000572204590E+00 2.6838300228118896E+00 9.9961099624633789E+00 3.5301151275634766E+00 + 7.0700001716613770E+00 2.6874251365661621E+00 9.9728298187255859E+00 3.5818200111389160E+00 + 7.0749998092651367E+00 2.6910099983215332E+00 9.9493503570556641E+00 3.6343898773193359E+00 + 7.0799999237060547E+00 2.6945800781250000E+00 9.9256849288940430E+00 3.6872801780700684E+00 + 7.0850000381469727E+00 2.6981301307678223E+00 9.9018650054931641E+00 3.7399849891662598E+00 + 7.0900001525878906E+00 2.7016649246215820E+00 9.8779296875000000E+00 3.7920150756835938E+00 + 7.0949997901916504E+00 2.7051749229431152E+00 9.8539104461669922E+00 3.8429150581359863E+00 + 7.0999999046325684E+00 2.7086548805236816E+00 9.8298492431640625E+00 3.8922600746154785E+00 + 7.1050000190734863E+00 2.7121000289916992E+00 9.8058204650878906E+00 3.9396350383758545E+00 + 7.1100001335144043E+00 2.7154998779296875E+00 9.7818803787231445E+00 3.9846448898315430E+00 + 7.1149997711181641E+00 2.7188601493835449E+00 9.7580757141113281E+00 4.0269250869750977E+00 + 7.1199998855590820E+00 2.7221698760986328E+00 9.7344551086425781E+00 4.0661401748657227E+00 + 7.1250000000000000E+00 2.7254199981689453E+00 9.7110805511474609E+00 4.1020050048828125E+00 + 7.1300001144409180E+00 2.7286050319671631E+00 9.6880149841308594E+00 4.1342749595642090E+00 + 7.1350002288818359E+00 2.7317199707031250E+00 9.6653499603271484E+00 4.1627302169799805E+00 + 7.1399998664855957E+00 2.7347598075866699E+00 9.6431655883789062E+00 4.1871747970581055E+00 + 7.1449999809265137E+00 2.7377150058746338E+00 9.6215200424194336E+00 4.2074346542358398E+00 + 7.1500000953674316E+00 2.7405750751495361E+00 9.6004753112792969E+00 4.2234001159667969E+00 + 7.1550002098083496E+00 2.7433300018310547E+00 9.5801048278808594E+00 4.2350397109985352E+00 + 7.1599998474121094E+00 2.7459797859191895E+00 9.5604801177978516E+00 4.2423949241638184E+00 + 7.1649999618530273E+00 2.7485148906707764E+00 9.5416545867919922E+00 4.2455596923828125E+00 + 7.1700000762939453E+00 2.7509250640869141E+00 9.5236854553222656E+00 4.2446398735046387E+00 + 7.1750001907348633E+00 2.7532100677490234E+00 9.5066251754760742E+00 4.2397098541259766E+00 + 7.1799998283386230E+00 2.7553601264953613E+00 9.4905452728271484E+00 4.2307796478271484E+00 + 7.1849999427795410E+00 2.7573599815368652E+00 9.4755153656005859E+00 4.2178049087524414E+00 + 7.1900000572204590E+00 2.7592101097106934E+00 9.4615898132324219E+00 4.2007350921630859E+00 + 7.1950001716613770E+00 2.7609047889709473E+00 9.4488153457641602E+00 4.1795601844787598E+00 + 7.1999998092651367E+00 2.7624299526214600E+00 9.4372196197509766E+00 4.1543350219726562E+00 + 7.2049999237060547E+00 2.7637901306152344E+00 9.4268302917480469E+00 4.1252002716064453E+00 + 7.2100000381469727E+00 2.7649800777435303E+00 9.4176654815673828E+00 4.0923700332641602E+00 + 7.2150001525878906E+00 2.7659950256347656E+00 9.4097347259521484E+00 4.0560998916625977E+00 + 7.2199997901916504E+00 2.7668349742889404E+00 9.4030704498291016E+00 4.0166749954223633E+00 + 7.2249999046325684E+00 2.7674899101257324E+00 9.3977050781250000E+00 3.9743800163269043E+00 + 7.2300000190734863E+00 2.7679550647735596E+00 9.3936452865600586E+00 3.9295048713684082E+00 + 7.2350001335144043E+00 2.7682352066040039E+00 9.3908500671386719E+00 3.8823351860046387E+00 + 7.2399997711181641E+00 2.7683401107788086E+00 9.3892593383789062E+00 3.8331398963928223E+00 + 7.2449998855590820E+00 2.7682647705078125E+00 9.3888597488403320E+00 3.7822198867797852E+00 + 7.2500000000000000E+00 2.7680048942565918E+00 9.3896656036376953E+00 3.7299051284790039E+00 + 7.2550001144409180E+00 2.7675600051879883E+00 9.3916702270507812E+00 3.6765549182891846E+00 + 7.2600002288818359E+00 2.7669351100921631E+00 9.3948450088500977E+00 3.6225600242614746E+00 + 7.2649998664855957E+00 2.7661352157592773E+00 9.3991394042968750E+00 3.5683550834655762E+00 + 7.2699999809265137E+00 2.7651600837707520E+00 9.4044895172119141E+00 3.5144000053405762E+00 + 7.2750000953674316E+00 2.7640199661254883E+00 9.4108257293701172E+00 3.4611401557922363E+00 + 7.2800002098083496E+00 2.7627201080322266E+00 9.4180946350097656E+00 3.4090251922607422E+00 + 7.2849998474121094E+00 2.7612648010253906E+00 9.4262695312500000E+00 3.3585050106048584E+00 + 7.2899999618530273E+00 2.7596549987792969E+00 9.4353199005126953E+00 3.3100249767303467E+00 + 7.2950000762939453E+00 2.7578949928283691E+00 9.4452095031738281E+00 3.2640099525451660E+00 + 7.3000001907348633E+00 2.7560000419616699E+00 9.4558906555175781E+00 3.2208747863769531E+00 + 7.3049998283386230E+00 2.7539699077606201E+00 9.4673099517822266E+00 3.1810851097106934E+00 + 7.3099999427795410E+00 2.7518048286437988E+00 9.4794397354125977E+00 3.1451401710510254E+00 + 7.3150000572204590E+00 2.7495150566101074E+00 9.4922647476196289E+00 3.1134250164031982E+00 + 7.3200001716613770E+00 2.7471051216125488E+00 9.5057544708251953E+00 3.0861849784851074E+00 + 7.3249998092651367E+00 2.7445800304412842E+00 9.5198850631713867E+00 3.0637350082397461E+00 + 7.3299999237060547E+00 2.7419500350952148E+00 9.5346546173095703E+00 3.0466098785400391E+00 + 7.3350000381469727E+00 2.7392199039459229E+00 9.5500450134277344E+00 3.0354299545288086E+00 + 7.3400001525878906E+00 2.7363848686218262E+00 9.5660247802734375E+00 3.0305149555206299E+00 + 7.3449997901916504E+00 2.7334551811218262E+00 9.5826244354248047E+00 3.0316748619079590E+00 + 7.3499999046325684E+00 2.7304401397705078E+00 9.5998744964599609E+00 3.0384850502014160E+00 + 7.3550000190734863E+00 2.7273399829864502E+00 9.6176853179931641E+00 3.0506601333618164E+00 + 7.3600001335144043E+00 2.7241649627685547E+00 9.6360645294189453E+00 3.0681848526000977E+00 + 7.3649997711181641E+00 2.7209248542785645E+00 9.6551599502563477E+00 3.0911850929260254E+00 + 7.3699998855590820E+00 2.7175700664520264E+00 9.6747398376464844E+00 3.1196699142456055E+00 + 7.3750000000000000E+00 2.7138700485229492E+00 9.6932201385498047E+00 3.1532349586486816E+00 + 7.3800001144409180E+00 2.7085051536560059E+00 9.7016754150390625E+00 3.1894099712371826E+00 + 7.3850002288818359E+00 2.6934700012207031E+00 9.6468696594238281E+00 3.2134349346160889E+00 + 7.3899998664855957E+00 2.6199750900268555E+00 9.2121505737304688E+00 3.1397099494934082E+00 + 7.3949999809265137E+00 2.2094299793243408E+00 7.0690155029296875E+00 2.5995399951934814E+00 + 7.4000000953674316E+00 1.2013680934906006E+00 3.5427751541137695E+00 1.6491150856018066E+00 + 7.4050002098083496E+00 3.0878841876983643E-01 1.4340300559997559E+00 1.0502794981002808E+00 + 7.4099998474121094E+00 4.1819788515567780E-02 1.0487949848175049E+00 9.2503798007965088E-01 + 7.4149999618530273E+00 4.4384542852640152E-03 1.0050050020217896E+00 9.0863454341888428E-01 + 7.4200000762939453E+00 4.4214929221197963E-04 1.0004999637603760E+00 9.1039049625396729E-01 + 7.4250001907348633E+00 4.1252147639170289E-05 1.0000500679016113E+00 9.1459095478057861E-01 + 7.4299998283386230E+00 3.4013751246675383E-06 1.0000050067901611E+00 9.1911900043487549E-01 + 7.4349999427795410E+00 2.5102485778916162E-07 1.0000000000000000E+00 9.2371547222137451E-01 + 7.4400000572204590E+00 1.6900390420460099E-08 1.0000000000000000E+00 9.2835998535156250E-01 + 7.4450001716613770E+00 1.9675348850167751E-10 1.0000000000000000E+00 9.3304949998855591E-01 + 7.4499998092651367E+00 -1.5768850114561417E-10 1.0000000000000000E+00 9.3778097629547119E-01 + 7.4549999237060547E+00 7.9763404214894251E-11 1.0000000000000000E+00 9.4255149364471436E-01 + 7.4600000381469727E+00 2.1140150394116652E-11 1.0000000000000000E+00 9.4735801219940186E-01 + 7.4650001525878906E+00 -9.0943103742135989E-12 1.0000000000000000E+00 9.5219695568084717E-01 + 7.4699997901916504E+00 -4.1186010765054126E-13 1.0000000000000000E+00 9.5706599950790405E-01 + 7.4749999046325684E+00 1.1707840643152001E-12 1.0000000000000000E+00 9.6196198463439941E-01 + 7.4800000190734863E+00 -1.1448739905325217E-13 1.0000000000000000E+00 9.6688151359558105E-01 + 7.4850001335144043E+00 -1.0848580470372224E-13 1.0000000000000000E+00 9.7182202339172363E-01 + 7.4899997711181641E+00 2.9596249360780078E-14 1.0000000000000000E+00 9.7677999734878540E-01 + 7.4949998855590820E+00 6.8816649698589388E-15 1.0000000000000000E+00 9.8175251483917236E-01 + 7.5000000000000000E+00 -5.0209300963850040E-15 1.0000000000000000E+00 9.8673653602600098E-01 + 7.5050001144409180E+00 -5.4018605062812865E-16 1.0000000000000000E+00 9.9172902107238770E-01 + 7.5100002288818359E+00 3.4834153193472257E-16 1.0000000000000000E+00 9.9672651290893555E-01 + 7.5149998664855957E+00 4.5740430970054910E-17 1.0000000000000000E+00 1.0017280578613281E+00 + 7.5199999809265137E+00 7.3481001529372112E-17 1.0000000000000000E+00 1.0067250728607178E+00 + 7.5250000953674316E+00 -1.4520290091575425E-16 1.0000000000000000E+00 1.0117149353027344E+00 + 7.5300002098083496E+00 -3.8918151665416427E-16 1.0000000000000000E+00 1.0167050361633301E+00 + 7.5349998474121094E+00 -4.0227098148588099E-16 1.0000000000000000E+00 1.0216850042343140E+00 + 7.5399999618530273E+00 -3.2681749830270473E-16 1.0000000000000000E+00 1.0266449451446533E+00 + 7.5450000762939453E+00 -2.3663151812837522E-16 1.0000000000000000E+00 1.0315899848937988E+00 + 7.5500001907348633E+00 -1.3813235956299799E-16 1.0000000000000000E+00 1.0365149974822998E+00 + 7.5549998283386230E+00 -4.2004664948083723E-17 1.0000000000000000E+00 1.0414199829101562E+00 + 7.5599999427795410E+00 5.9500689647715382E-17 1.0000000000000000E+00 1.0462999343872070E+00 + 7.5650000572204590E+00 1.8595000317857361E-16 1.0000000000000000E+00 1.0511450767517090E+00 + 7.5700001716613770E+00 1.9966449891602520E-16 1.0000000000000000E+00 1.0559599399566650E+00 + 7.5749998092651367E+00 -3.2729002357326443E-17 1.0000000000000000E+00 1.0607450008392334E+00 + 7.5799999237060547E+00 -1.7978949284852368E-16 1.0000000000000000E+00 1.0654900074005127E+00 + 7.5850000381469727E+00 -9.6855597010348676E-17 1.0000000000000000E+00 1.0701899528503418E+00 + 7.5900001525878906E+00 2.9970599859923411E-17 1.0000000000000000E+00 1.0748500823974609E+00 + 7.5949997901916504E+00 5.6658999988795612E-17 1.0000000000000000E+00 1.0794650316238403E+00 + 7.5999999046325684E+00 -1.4733120354462869E-16 1.0000000000000000E+00 1.0840300321578979E+00 + 7.6050000190734863E+00 -2.7558500165560400E-16 1.0000000000000000E+00 1.0885400772094727E+00 + 7.6100001335144043E+00 -1.9995099457554416E-16 1.0000000000000000E+00 1.0929949283599854E+00 + 7.6149997711181641E+00 -1.0246805055374547E-16 1.0000000000000000E+00 1.0973899364471436E+00 + 7.6199998855590820E+00 -9.2934899873190234E-19 1.0000000000000000E+00 1.1017251014709473E+00 + 7.6250000000000000E+00 9.1184698193591334E-17 1.0000000000000000E+00 1.1059999465942383E+00 + 7.6300001144409180E+00 2.0745149779326059E-16 1.0000000000000000E+00 1.1102049350738525E+00 + 7.6350002288818359E+00 2.3351051935509835E-16 1.0000000000000000E+00 1.1143400669097900E+00 + 7.6399998664855957E+00 2.5136503420604314E-17 1.0000000000000000E+00 1.1184049844741821E+00 + 7.6449999809265137E+00 -1.0043339800510184E-16 1.0000000000000000E+00 1.1223950386047363E+00 + 7.6500000953674316E+00 -7.0977489774643620E-18 1.0000000000000000E+00 1.1263099908828735E+00 + 7.6550002098083496E+00 1.0611514943149587E-16 1.0000000000000000E+00 1.1301500797271729E+00 + 7.6599998474121094E+00 2.3760751184184899E-16 1.0000000000000000E+00 1.1339049339294434E+00 + 7.6649999618530273E+00 2.5173350677298856E-16 1.0000000000000000E+00 1.1375749111175537E+00 + 7.6700000762939453E+00 3.6650996513685368E-17 1.0000000000000000E+00 1.1411600112915039E+00 + 7.6750001907348633E+00 -1.3577699916470019E-16 1.0000000000000000E+00 1.1446549892425537E+00 + 7.6799998283386230E+00 -1.7597649462711964E-16 1.0000000000000000E+00 1.1480599641799927E+00 + 7.6849999427795410E+00 -1.7967350227430904E-16 1.0000000000000000E+00 1.1513750553131104E+00 + 7.6900000572204590E+00 -1.0990795121106382E-16 1.0000000000000000E+00 1.1545950174331665E+00 + 7.6950001716613770E+00 -2.2772449354068588E-17 1.0000000000000000E+00 1.1577200889587402E+00 + 7.6999998092651367E+00 -2.8226750927428919E-17 1.0000000000000000E+00 1.1607450246810913E+00 + 7.7049999237060547E+00 -1.0185374652619419E-16 1.0000000000000000E+00 1.1636650562286377E+00 + 7.7100000381469727E+00 -9.7048746992102258E-17 1.0000000000000000E+00 1.1664850711822510E+00 + 7.7150001525878906E+00 -2.3492349604257163E-17 1.0000000000000000E+00 1.1692049503326416E+00 + 7.7199997901916504E+00 6.4581894714506121E-17 1.0000000000000000E+00 1.1718199253082275E+00 + 7.7249999046325684E+00 1.6662300095816602E-16 1.0000000000000000E+00 1.1743249893188477E+00 + 7.7300000190734863E+00 1.7454800003135487E-16 1.0000000000000000E+00 1.1767199039459229E+00 + 7.7350001335144043E+00 -1.3027002769301616E-17 1.0000000000000000E+00 1.1790049076080322E+00 + 7.7399997711181641E+00 -1.8407050324306532E-16 1.0000000000000000E+00 1.1811800003051758E+00 + 7.7449998855590820E+00 -2.0427549481797139E-16 1.0000000000000000E+00 1.1832399368286133E+00 + 7.7500000000000000E+00 -1.4994250024189529E-16 1.0000000000000000E+00 1.1851849555969238E+00 + 7.7550001144409180E+00 -8.0636497639760026E-17 1.0000000000000000E+00 1.1870150566101074E+00 + 7.7600002288818359E+00 -1.6983298451301890E-17 1.0000000000000000E+00 1.1887249946594238E+00 + 7.7649998664855957E+00 3.5087750887413254E-17 1.0000000000000000E+00 1.1903200149536133E+00 + 7.7699999809265137E+00 6.7493451356684571E-17 1.0000000000000000E+00 1.1917949914932251E+00 + 7.7750000953674316E+00 1.4388339563749946E-16 1.0000000000000000E+00 1.1931500434875488E+00 + 7.7800002098083496E+00 2.6152899282173131E-16 1.0000000000000000E+00 1.1943850517272949E+00 + 7.7849998474121094E+00 2.6997849057772778E-16 1.0000000000000000E+00 1.1955000162124634E+00 + 7.7899999618530273E+00 1.0588901148691368E-16 1.0000000000000000E+00 1.1964950561523438E+00 + 7.7950000762939453E+00 -2.1175234728761371E-17 1.0000000000000000E+00 1.1973600387573242E+00 + 7.8000001907348633E+00 -1.9169399498297859E-17 1.0000000000000000E+00 1.1981049776077271E+00 + 7.8049998283386230E+00 6.2693355349263853E-17 1.0000000000000000E+00 1.1987299919128418E+00 + 7.8099999427795410E+00 8.4456900782007638E-17 1.0000000000000000E+00 1.1992249488830566E+00 + 7.8150000572204590E+00 -4.9277101236029484E-17 1.0000000000000000E+00 1.1995949745178223E+00 + 7.8200001716613770E+00 -1.7126050634438332E-16 1.0000000000000000E+00 1.1998449563980103E+00 + 7.8249998092651367E+00 -2.0269350197029638E-16 1.0000000000000000E+00 1.1999700069427490E+00 + 7.8299999237060547E+00 -1.7306399830776533E-16 1.0000000000000000E+00 1.1999700069427490E+00 + 7.8350000381469727E+00 -1.1259529558512609E-16 1.0000000000000000E+00 1.1998449563980103E+00 + 7.8400001525878906E+00 -6.3290950328441563E-17 1.0000000000000000E+00 1.1995899677276611E+00 + 7.8449997901916504E+00 7.1929971706386181E-19 1.0000000000000000E+00 1.1992099285125732E+00 + 7.8499999046325684E+00 7.7557949775519371E-17 1.0000000000000000E+00 1.1987099647521973E+00 + 7.8550000190734863E+00 1.4981749670772628E-16 1.0000000000000000E+00 1.1980849504470825E+00 + 7.8600001335144043E+00 2.2930899770870060E-16 1.0000000000000000E+00 1.1973350048065186E+00 + 7.8649997711181641E+00 2.4711749484780784E-16 1.0000000000000000E+00 1.1964650154113770E+00 + 7.8699998855590820E+00 9.2471950045401455E-17 1.0000000000000000E+00 1.1954699754714966E+00 + 7.8750000000000000E+00 -4.4721000348254758E-17 1.0000000000000000E+00 1.1943550109863281E+00 + 7.8800001144409180E+00 -1.4707502901764347E-18 1.0000000000000000E+00 1.1931200027465820E+00 + 7.8850002288818359E+00 8.3289199689768581E-17 1.0000000000000000E+00 1.1917600631713867E+00 + 7.8899998664855957E+00 1.7317400671178998E-16 1.0000000000000000E+00 1.1902799606323242E+00 + 7.8949999809265137E+00 1.7677799955345902E-16 1.0000000000000000E+00 1.1886799335479736E+00 + 7.9000000953674316E+00 -2.3519987362883785E-18 1.0000000000000000E+00 1.1869649887084961E+00 + 7.9050002098083496E+00 -1.3743750137867384E-16 1.0000000000000000E+00 1.1851350069046021E+00 + 7.9099998474121094E+00 -8.6450551642048244E-17 1.0000000000000000E+00 1.1831851005554199E+00 + 7.9149999618530273E+00 2.3896999742473204E-17 1.0000000000000000E+00 1.1811200380325317E+00 + 7.9200000762939453E+00 1.2054904083896238E-16 1.0000000000000000E+00 1.1789450645446777E+00 + 7.9250001907348633E+00 1.3896049308761667E-16 1.0000000000000000E+00 1.1766550540924072E+00 + 7.9299998283386230E+00 -3.8895494857566355E-17 1.0000000000000000E+00 1.1742550134658813E+00 + 7.9349999427795410E+00 -2.2789950841468985E-16 1.0000000000000000E+00 1.1717500686645508E+00 + 7.9400000572204590E+00 -2.5253000891098322E-16 1.0000000000000000E+00 1.1691349744796753E+00 + 7.9450001716613770E+00 -1.9106148967322869E-16 1.0000000000000000E+00 1.1664149761199951E+00 + 7.9499998092651367E+00 -8.9498149716489615E-17 1.0000000000000000E+00 1.1635899543762207E+00 + 7.9549999237060547E+00 -1.5651378846413906E-17 1.0000000000000000E+00 1.1606650352478027E+00 + 7.9600000381469727E+00 7.0095768181221296E-17 1.0000000000000000E+00 1.1576399803161621E+00 + 7.9650001525878906E+00 8.9204699122380303E-17 1.0000000000000000E+00 1.1545150279998779E+00 + 7.9699997901916504E+00 -9.9870299766190038E-17 1.0000000000000000E+00 1.1512949466705322E+00 + 7.9749999046325684E+00 -2.9500399959501728E-16 1.0000000000000000E+00 1.1479749679565430E+00 + 7.9800000190734863E+00 -3.4714051862485477E-16 1.0000000000000000E+00 1.1445649862289429E+00 + 7.9850001335144043E+00 -2.9593001836460305E-16 1.0000000000000000E+00 1.1410650014877319E+00 + 7.9899997711181641E+00 -1.9410299969836167E-16 1.0000000000000000E+00 1.1374750137329102E+00 + 7.9949998855590820E+00 -1.2327500462146353E-16 1.0000000000000000E+00 1.1338050365447998E+00 + 8.0000000000000000E+00 -5.2802141342591562E-17 1.0000000000000000E+00 1.1300499439239502E+00 + 8.0050001144409180E+00 3.7272910602872137E-17 1.0000000000000000E+00 1.1262099742889404E+00 + 8.0100002288818359E+00 1.2663755336849569E-16 1.0000000000000000E+00 1.1222898960113525E+00 + 8.0150003433227539E+00 2.1785099774273447E-16 1.0000000000000000E+00 1.1182949542999268E+00 + 8.0200004577636719E+00 3.0804550118609573E-16 1.0000000000000000E+00 1.1142299175262451E+00 + 8.0249996185302734E+00 4.3101700331464620E-16 1.0000000000000000E+00 1.1100900173187256E+00 + 8.0299997329711914E+00 4.5548450290815233E-16 1.0000000000000000E+00 1.1058800220489502E+00 + 8.0349998474121094E+00 2.3769285041128486E-16 1.0000000000000000E+00 1.1016099452972412E+00 + 8.0399999618530273E+00 1.7017050729016504E-17 1.0000000000000000E+00 1.0972750186920166E+00 + 8.0450000762939453E+00 -2.9949850861438131E-17 1.0000000000000000E+00 1.0928750038146973E+00 + 8.0500001907348633E+00 2.1583550931452246E-17 1.0000000000000000E+00 1.0884199142456055E+00 + 8.0550003051757812E+00 1.1554360551628150E-16 1.0000000000000000E+00 1.0839099884033203E+00 + 8.0600004196166992E+00 2.2795001275416988E-16 1.0000000000000000E+00 1.0793449878692627E+00 + 8.0649995803833008E+00 2.2357699340573274E-16 1.0000000000000000E+00 1.0747299194335938E+00 + 8.0699996948242188E+00 5.3214977260149427E-18 1.0000000000000000E+00 1.0700700283050537E+00 + 8.0749998092651367E+00 -9.8536401545276826E-17 1.0000000000000000E+00 1.0653649568557739E+00 + 8.0799999237060547E+00 -4.3234910820799140E-19 1.0000000000000000E+00 1.0606200695037842E+00 + 8.0850000381469727E+00 1.1529005149747684E-16 1.0000000000000000E+00 1.0558400154113770E+00 + 8.0900001525878906E+00 1.2292169923822988E-16 1.0000000000000000E+00 1.0510199069976807E+00 + 8.0950002670288086E+00 3.3034516553489228E-18 1.0000000000000000E+00 1.0461699962615967E+00 + 8.1000003814697266E+00 -4.6420998782116589E-17 1.0000000000000000E+00 1.0412900447845459E+00 + 8.1049995422363281E+00 -1.5767501769526550E-18 1.0000000000000000E+00 1.0363850593566895E+00 + 8.1099996566772461E+00 7.6804500734046870E-17 1.0000000000000000E+00 1.0314600467681885E+00 + 8.1149997711181641E+00 1.8105948640403349E-16 1.0000000000000000E+00 1.0265100002288818E+00 + 8.1199998855590820E+00 2.9699299177384799E-16 1.0000000000000000E+00 1.0215449333190918E+00 + 8.1250000000000000E+00 4.1200100776966875E-16 1.0000000000000000E+00 1.0165700912475586E+00 + 8.1300001144409180E+00 5.1962803160267475E-16 1.0000000000000000E+00 1.0115849971771240E+00 + 8.1350002288818359E+00 5.0496250315391379E-16 1.0000000000000000E+00 1.0065898895263672E+00 + 8.1400003433227539E+00 2.8453700170755908E-16 1.0000000000000000E+00 1.0015914440155029E+00 + 8.1450004577636719E+00 5.1985396440646503E-17 1.0000000000000000E+00 9.9659347534179688E-01 + 8.1499996185302734E+00 -9.3326103363368612E-17 1.0000000000000000E+00 9.9159598350524902E-01 + 8.1549997329711914E+00 -1.3500150079681948E-16 1.0000000000000000E+00 9.8660349845886230E-01 + 8.1599998474121094E+00 -4.8134199018554766E-17 1.0000000000000000E+00 9.8161995410919189E-01 + 8.1649999618530273E+00 7.6890302524625770E-17 1.0000000000000000E+00 9.7664797306060791E-01 + 8.1700000762939453E+00 7.3914384613345794E-17 1.0000000000000000E+00 9.7169053554534912E-01 + 8.1750001907348633E+00 -1.9340161671336571E-16 1.0000000000000000E+00 9.6675050258636475E-01 + 8.1800003051757812E+00 -4.8633201347905546E-16 1.0000000000000000E+00 9.6183097362518311E-01 + 8.1850004196166992E+00 -5.7671752285202256E-16 1.0000000000000000E+00 9.5693600177764893E-01 + 8.1899995803833008E+00 -5.0046698166548000E-16 1.0000000000000000E+00 9.5206797122955322E-01 + 8.1949996948242188E+00 -3.8701499166354499E-16 1.0000000000000000E+00 9.4722950458526611E-01 + 8.1999998092651367E+00 -2.8484000127465970E-16 1.0000000000000000E+00 9.4242399930953979E-01 + 8.2049999237060547E+00 -1.5870095326540277E-16 1.0000000000000000E+00 9.3765449523925781E-01 + 8.2100000381469727E+00 -1.5716495165978570E-16 1.0000000000000000E+00 9.3292403221130371E-01 + 8.2150001525878906E+00 -4.4288798478195801E-16 1.0000000000000000E+00 9.2823553085327148E-01 + 8.2200002670288086E+00 -7.4336400250469528E-16 1.0000000000000000E+00 9.2359149456024170E-01 + 8.2250003814697266E+00 -8.5168299931604884E-16 1.0000000000000000E+00 9.1899549961090088E-01 + 8.2299995422363281E+00 -8.4526047787261151E-16 1.0000000000000000E+00 9.1445052623748779E-01 + 8.2349996566772461E+00 -7.5230395880693159E-16 1.0000000000000000E+00 9.0995848178863525E-01 + 8.2399997711181641E+00 -6.4812652959117794E-16 1.0000000000000000E+00 9.0552300214767456E-01 + 8.2449998855590820E+00 -5.6787153426737227E-16 1.0000000000000000E+00 9.0114653110504150E-01 + 8.2500000000000000E+00 -4.8166052089582958E-16 1.0000000000000000E+00 8.9683151245117188E-01 + 8.2550001144409180E+00 -3.6231450506998472E-16 1.0000000000000000E+00 8.9258146286010742E-01 + 8.2600002288818359E+00 -2.3912650661407197E-16 1.0000000000000000E+00 8.8839852809906006E-01 + 8.2650003433227539E+00 -2.0314348822352522E-16 1.0000000000000000E+00 8.8428497314453125E-01 + 8.2700004577636719E+00 -3.0178698649707052E-16 1.0000000000000000E+00 8.8024401664733887E-01 + 8.2749996185302734E+00 -3.7600099578061772E-16 1.0000000000000000E+00 8.7627750635147095E-01 + 8.2799997329711914E+00 -3.1217801611707185E-16 1.0000000000000000E+00 8.7238848209381104E-01 + 8.2849998474121094E+00 -1.9555100252169290E-16 1.0000000000000000E+00 8.6857950687408447E-01 + 8.2899999618530273E+00 -7.2565828751978143E-17 1.0000000000000000E+00 8.6485248804092407E-01 + 8.2950000762939453E+00 -4.0799734110834879E-17 1.0000000000000000E+00 8.6120998859405518E-01 + 8.3000001907348633E+00 -7.3354694358557715E-17 1.0000000000000000E+00 8.5765397548675537E-01 + 8.3050003051757812E+00 -2.2254548263826687E-17 1.0000000000000000E+00 8.5418701171875000E-01 + 8.3100004196166992E+00 7.2321247988458464E-17 1.0000000000000000E+00 8.5081148147583008E-01 + 8.3149995803833008E+00 1.3798449937414291E-16 1.0000000000000000E+00 8.4752905368804932E-01 + 8.3199996948242188E+00 2.2269499387962460E-16 1.0000000000000000E+00 8.4434151649475098E-01 + 8.3249998092651367E+00 2.4850498775496959E-16 1.0000000000000000E+00 8.4125149250030518E-01 + 8.3299999237060547E+00 1.4236049657278524E-16 1.0000000000000000E+00 8.3826100826263428E-01 + 8.3350000381469727E+00 1.9037991931826460E-18 1.0000000000000000E+00 8.3537149429321289E-01 + 8.3400001525878906E+00 -1.0682570419512382E-16 1.0000000000000000E+00 8.3258450031280518E-01 + 8.3450002670288086E+00 -1.0396629963620562E-16 1.0000000000000000E+00 8.2990252971649170E-01 + 8.3500003814697266E+00 -5.1759648925313431E-17 1.0000000000000000E+00 8.2732701301574707E-01 + 8.3549995422363281E+00 -6.1755703111543144E-17 1.0000000000000000E+00 8.2485902309417725E-01 + 8.3599996566772461E+00 -9.0214395482731931E-17 1.0000000000000000E+00 8.2250052690505981E-01 + 8.3649997711181641E+00 -1.5074099423080498E-17 1.0000000000000000E+00 8.2025301456451416E-01 + 8.3699998855590820E+00 1.5115244710237866E-16 1.0000000000000000E+00 8.1811749935150146E-01 + 8.3750000000000000E+00 2.7989999924715422E-16 1.0000000000000000E+00 8.1609600782394409E-01 + 8.3800001144409180E+00 2.6397300051191519E-16 1.0000000000000000E+00 8.1418955326080322E-01 + 8.3850002288818359E+00 1.3214915705161002E-16 1.0000000000000000E+00 8.1239902973175049E-01 + 8.3900003433227539E+00 3.0019654978970256E-17 1.0000000000000000E+00 8.1072598695755005E-01 + 8.3950004577636719E+00 -4.1845293713824356E-17 1.0000000000000000E+00 8.0917096138000488E-01 + 8.3999996185302734E+00 -1.2200929917024919E-16 1.0000000000000000E+00 8.0773550271987915E-01 + 8.4049997329711914E+00 -1.6910999557042305E-16 1.0000000000000000E+00 8.0641996860504150E-01 + 8.4099998474121094E+00 -1.1559639949169708E-16 1.0000000000000000E+00 8.0522549152374268E-01 + 8.4149999618530273E+00 8.9167489229705218E-18 1.0000000000000000E+00 8.0415296554565430E-01 + 8.4200000762939453E+00 9.5938154449353862E-17 1.0000000000000000E+00 8.0320250988006592E-01 + 8.4250001907348633E+00 9.1163151792995553E-17 1.0000000000000000E+00 8.0237495899200439E-01 + 8.4300003051757812E+00 1.3789315216473745E-16 1.0000000000000000E+00 8.0167102813720703E-01 + 8.4350004196166992E+00 1.2571629915923824E-16 1.0000000000000000E+00 8.0109095573425293E-01 + 8.4399995803833008E+00 -5.0798203664453246E-17 1.0000000000000000E+00 8.0063545703887939E-01 + 8.4449996948242188E+00 -9.9428201507282497E-17 1.0000000000000000E+00 8.0030453205108643E-01 + 8.4499998092651367E+00 -5.8873699978289988E-17 1.0000000000000000E+00 8.0009800195693970E-01 + 8.4549999237060547E+00 -2.2110299545526014E-17 1.0000000000000000E+00 8.0001699924468994E-01 + 8.4600000381469727E+00 6.7967703780363273E-17 1.0000000000000000E+00 8.0006098747253418E-01 + 8.4650001525878906E+00 7.2029200292668042E-17 1.0000000000000000E+00 8.0022948980331421E-01 + 8.4700002670288086E+00 -6.9210804039797764E-17 1.0000000000000000E+00 8.0052304267883301E-01 + 8.4750003814697266E+00 -1.9700099057849425E-16 1.0000000000000000E+00 8.0094099044799805E-01 + 8.4799995422363281E+00 -1.7822798761026038E-16 1.0000000000000000E+00 8.0148351192474365E-01 + 8.4849996566772461E+00 -3.0276650069123131E-17 1.0000000000000000E+00 8.0215048789978027E-01 + 8.4899997711181641E+00 6.4142403728889347E-17 1.0000000000000000E+00 8.0294096469879150E-01 + 8.4949998855590820E+00 -6.3966505425991170E-18 1.0000000000000000E+00 8.0385398864746094E-01 + 8.5000000000000000E+00 -1.5752020257182007E-16 1.0000000000000000E+00 8.0489003658294678E-01 + 8.5050001144409180E+00 -1.5444168779480392E-16 1.0000000000000000E+00 8.0604803562164307E-01 + 8.5100002288818359E+00 -8.9027000874469212E-18 1.0000000000000000E+00 8.0732703208923340E-01 + 8.5150003433227539E+00 1.4136598724848008E-16 1.0000000000000000E+00 8.0872702598571777E-01 + 8.5200004577636719E+00 1.7802099393377511E-16 1.0000000000000000E+00 8.1024599075317383E-01 + 8.5249996185302734E+00 4.0944752107105226E-17 1.0000000000000000E+00 8.1188344955444336E-01 + 8.5299997329711914E+00 -1.1384724998583735E-16 1.0000000000000000E+00 8.1363898515701294E-01 + 8.5349998474121094E+00 -1.9065450357696280E-16 1.0000000000000000E+00 8.1551098823547363E-01 + 8.5399999618530273E+00 -2.6947900583664376E-16 1.0000000000000000E+00 8.1749796867370605E-01 + 8.5450000762939453E+00 -2.4245550491545898E-16 1.0000000000000000E+00 8.1959903240203857E-01 + 8.5500001907348633E+00 -1.1035845362499490E-16 1.0000000000000000E+00 8.2181298732757568E-01 + 8.5550003051757812E+00 -2.7967998905654981E-17 1.0000000000000000E+00 8.2413798570632935E-01 + 8.5600004196166992E+00 9.3965447802423098E-17 1.0000000000000000E+00 8.2657301425933838E-01 + 8.5649995803833008E+00 2.3584250693800784E-16 1.0000000000000000E+00 8.2911646366119385E-01 + 8.5699996948242188E+00 2.4314099279780412E-16 1.0000000000000000E+00 8.3176696300506592E-01 + 8.5749998092651367E+00 1.0664850225558026E-16 1.0000000000000000E+00 8.3452248573303223E-01 + 8.5799999237060547E+00 -2.8323349079362861E-17 1.0000000000000000E+00 8.3738100528717041E-01 + 8.5850000381469727E+00 -1.6941848430806858E-17 1.0000000000000000E+00 8.4034150838851929E-01 + 8.5900001525878906E+00 5.3772252147548852E-17 1.0000000000000000E+00 8.4340202808380127E-01 + 8.5950002670288086E+00 3.4451099748433240E-17 1.0000000000000000E+00 8.4656047821044922E-01 + 8.6000003814697266E+00 7.4403347617038140E-17 1.0000000000000000E+00 8.4981453418731689E-01 + 8.6049995422363281E+00 2.1139200094300601E-16 1.0000000000000000E+00 8.5316199064254761E-01 + 8.6099996566772461E+00 2.9080901598418116E-16 1.0000000000000000E+00 8.5660147666931152E-01 + 8.6149997711181641E+00 2.4658550521737294E-16 1.0000000000000000E+00 8.6013102531433105E-01 + 8.6199998855590820E+00 1.7295150174445812E-16 1.0000000000000000E+00 8.6374795436859131E-01 + 8.6250000000000000E+00 1.7504400399642126E-16 1.0000000000000000E+00 8.6744999885559082E-01 + 8.6300001144409180E+00 1.7813449634870718E-16 1.0000000000000000E+00 8.7123453617095947E-01 + 8.6350002288818359E+00 9.9658998133074592E-17 1.0000000000000000E+00 8.7509953975677490E-01 + 8.6400003433227539E+00 7.6614500656065889E-17 1.0000000000000000E+00 8.7904298305511475E-01 + 8.6450004577636719E+00 1.7494549671163355E-16 1.0000000000000000E+00 8.8306200504302979E-01 + 8.6499996185302734E+00 3.0331201637904268E-16 1.0000000000000000E+00 8.8715398311614990E-01 + 8.6549997329711914E+00 3.9761748835278428E-16 1.0000000000000000E+00 8.9131647348403931E-01 + 8.6599998474121094E+00 4.7027348640897560E-16 1.0000000000000000E+00 8.9554649591445923E-01 + 8.6649999618530273E+00 5.7523251527680816E-16 1.0000000000000000E+00 8.9984202384948730E-01 + 8.6700000762939453E+00 6.9356450031589161E-16 1.0000000000000000E+00 9.0420049428939819E-01 + 8.6750001907348633E+00 7.7659998716817793E-16 1.0000000000000000E+00 9.0861850976943970E-01 + 8.6800003051757812E+00 8.5137801451547809E-16 1.0000000000000000E+00 9.1309350728988647E-01 + 8.6850004196166992E+00 9.6799147558370097E-16 1.0000000000000000E+00 9.1762304306030273E-01 + 8.6899995803833008E+00 9.6648555688260123E-16 1.0000000000000000E+00 9.2220401763916016E-01 + 8.6949996948242188E+00 7.1427800282672588E-16 1.0000000000000000E+00 9.2683351039886475E-01 + 8.6999998092651367E+00 3.6435251928063777E-16 1.0000000000000000E+00 9.3150901794433594E-01 + 8.7049999237060547E+00 1.5940000690979378E-16 1.0000000000000000E+00 9.3622750043869019E-01 + 8.7100000381469727E+00 9.4411900340075119E-17 1.0000000000000000E+00 9.4098550081253052E-01 + 8.7150001525878906E+00 9.3451900990925677E-17 1.0000000000000000E+00 9.4578051567077637E-01 + 8.7200002670288086E+00 2.0585799059145884E-16 1.0000000000000000E+00 9.5060950517654419E-01 + 8.7250003814697266E+00 3.7550598443228638E-16 1.0000000000000000E+00 9.5546901226043701E-01 + 8.7299995422363281E+00 3.6562897146237040E-16 1.0000000000000000E+00 9.6035647392272949E-01 + 8.7349996566772461E+00 6.8842999834787286E-17 1.0000000000000000E+00 9.6526849269866943E-01 + 8.7399997711181641E+00 -1.8596599092545303E-16 1.0000000000000000E+00 9.7020250558853149E-01 + 8.7449998855590820E+00 -2.0050299535935795E-16 1.0000000000000000E+00 9.7515547275543213E-01 + 8.7500000000000000E+00 -1.2041130534080495E-16 1.0000000000000000E+00 9.8012351989746094E-01 + 8.7550001144409180E+00 -5.5703950488431687E-17 1.0000000000000000E+00 9.8510396480560303E-01 + 8.7600002288818359E+00 3.3259000136846319E-17 1.0000000000000000E+00 9.9009400606155396E-01 + 8.7650003433227539E+00 1.6952365205114857E-16 1.0000000000000000E+00 9.9509000778198242E-01 + 8.7700004577636719E+00 1.7890149791733575E-16 1.0000000000000000E+00 1.0000894069671631E+00 + 8.7749996185302734E+00 -7.6234500500103929E-17 1.0000000000000000E+00 1.0050899982452393E+00 + 8.7799997329711914E+00 -3.1303198414658179E-16 1.0000000000000000E+00 1.0100851058959961E+00 + 8.7849998474121094E+00 -3.5684399571970203E-16 1.0000000000000000E+00 1.0150749683380127E+00 + 8.7899999618530273E+00 -2.9507848555481646E-16 1.0000000000000000E+00 1.0200550556182861E+00 + 8.7950000762939453E+00 -1.5069224351422356E-16 1.0000000000000000E+00 1.0250200033187866E+00 + 8.8000001907348633E+00 -1.3454874845162225E-16 1.0000000000000000E+00 1.0299699306488037E+00 + 8.8050003051757812E+00 -3.7583201270764048E-16 1.0000000000000000E+00 1.0349049568176270E+00 + 8.8100004196166992E+00 -5.1082598285216328E-16 1.0000000000000000E+00 1.0398199558258057E+00 + 8.8149995803833008E+00 -4.1992500099123273E-16 1.0000000000000000E+00 1.0447049140930176E+00 + 8.8199996948242188E+00 -3.1879249640218068E-16 1.0000000000000000E+00 1.0495600700378418E+00 + 8.8249998092651367E+00 -2.1817849509085647E-16 1.0000000000000000E+00 1.0543899536132812E+00 + 8.8299999237060547E+00 -1.0653584687359544E-16 1.0000000000000000E+00 1.0591850280761719E+00 + 8.8350000381469727E+00 8.6955509010064916E-18 1.0000000000000000E+00 1.0639400482177734E+00 + 8.8400001525878906E+00 1.3135989439833643E-16 1.0000000000000000E+00 1.0686600208282471E+00 + 8.8450002670288086E+00 1.3825684693646477E-16 1.0000000000000000E+00 1.0733349323272705E+00 + 8.8500003814697266E+00 -9.2598144719652545E-17 1.0000000000000000E+00 1.0779600143432617E+00 + 8.8549995422363281E+00 -2.3350048730862930E-16 1.0000000000000000E+00 1.0825400352478027E+00 + 8.8599996566772461E+00 -1.4915404491689955E-16 1.0000000000000000E+00 1.0870699882507324E+00 + 8.8649997711181641E+00 -4.1178748267506676E-17 1.0000000000000000E+00 1.0915399789810181E+00 + 8.8699998855590820E+00 6.5259302696627847E-17 1.0000000000000000E+00 1.0959550142288208E+00 + 8.8750000000000000E+00 8.3497152895764412E-17 1.0000000000000000E+00 1.1003100872039795E+00 + 8.8800001144409180E+00 -3.8367349962618597E-17 1.0000000000000000E+00 1.1046049594879150E+00 + 8.8850002288818359E+00 -1.1771150693544008E-16 1.0000000000000000E+00 1.1088349819183350E+00 + 8.8900003433227539E+00 -7.5124000601584139E-17 1.0000000000000000E+00 1.1129949092864990E+00 + 8.8950004577636719E+00 1.8018701930730441E-17 1.0000000000000000E+00 1.1170849800109863E+00 + 8.8999996185302734E+00 1.2989221129387134E-16 1.0000000000000000E+00 1.1210999488830566E+00 + 8.9049997329711914E+00 1.5541650360308541E-16 1.0000000000000000E+00 1.1250400543212891E+00 + 8.9099998474121094E+00 -3.7251496551174364E-17 1.0000000000000000E+00 1.1289000511169434E+00 + 8.9149999618530273E+00 -2.8469698505547173E-16 1.0000000000000000E+00 1.1326799392700195E+00 + 8.9200000762939453E+00 -3.4654899846009565E-16 1.0000000000000000E+00 1.1363799571990967E+00 + 8.9250001907348633E+00 -2.6595299296568132E-16 1.0000000000000000E+00 1.1399950981140137E+00 + 8.9300003051757812E+00 -1.7511050931767053E-16 1.0000000000000000E+00 1.1435199975967407E+00 + 8.9350004196166992E+00 -1.0104105150052819E-16 1.0000000000000000E+00 1.1469550132751465E+00 + 8.9399995803833008E+00 -3.7378951848678985E-17 1.0000000000000000E+00 1.1503000259399414E+00 + 8.9449996948242188E+00 3.3959747847131841E-17 1.0000000000000000E+00 1.1535549163818359E+00 + 8.9499998092651367E+00 1.2830714795176253E-16 1.0000000000000000E+00 1.1567099094390869E+00 + 8.9549999237060547E+00 2.3698451910914345E-16 1.0000000000000000E+00 1.1597650051116943E+00 + 8.9600000381469727E+00 2.6898351803227960E-16 1.0000000000000000E+00 1.1627249717712402E+00 + 8.9650001525878906E+00 7.5228648875239447E-17 1.0000000000000000E+00 1.1655800342559814E+00 + 8.9700002670288086E+00 -1.5327534989621435E-16 1.0000000000000000E+00 1.1683299541473389E+00 + 8.9750003814697266E+00 -1.9506149688751871E-16 1.0000000000000000E+00 1.1709749698638916E+00 + 8.9799995422363281E+00 -1.3366930325924567E-16 1.0000000000000000E+00 1.1735150814056396E+00 + 8.9849996566772461E+00 -8.4753296139097639E-17 1.0000000000000000E+00 1.1759450435638428E+00 + 8.9899997711181641E+00 -2.7832999720963877E-17 1.0000000000000000E+00 1.1782649755477905E+00 + 8.9949998855590820E+00 3.7572098521710117E-17 1.0000000000000000E+00 1.1804749965667725E+00 + 9.0000000000000000E+00 1.1586109728771405E-16 1.0000000000000000E+00 1.1825699806213379E+00 + 9.0050001144409180E+00 1.3028719334508786E-16 1.0000000000000000E+00 1.1845550537109375E+00 + 9.0100002288818359E+00 -4.3328799129046359E-17 1.0000000000000000E+00 1.1864249706268311E+00 + 9.0150003433227539E+00 -1.6841599765393596E-16 1.0000000000000000E+00 1.1881749629974365E+00 + 9.0200004577636719E+00 -1.8901749329238565E-16 1.0000000000000000E+00 1.1898100376129150E+00 + 9.0249996185302734E+00 -1.7531850884578066E-16 1.0000000000000000E+00 1.1913249492645264E+00 + 9.0299997329711914E+00 -9.0372148751713144E-17 1.0000000000000000E+00 1.1927199363708496E+00 + 9.0349998474121094E+00 -3.1416597597449809E-17 1.0000000000000000E+00 1.1939949989318848E+00 + 9.0399999618530273E+00 6.8392997037946187E-18 1.0000000000000000E+00 1.1951500177383423E+00 + 9.0450000762939453E+00 6.6034053293234814E-17 1.0000000000000000E+00 1.1961851119995117E+00 + 9.0500001907348633E+00 1.4960830603953407E-16 1.0000000000000000E+00 1.1970900297164917E+00 + 9.0550003051757812E+00 1.6290799386084747E-16 1.0000000000000000E+00 1.1978750228881836E+00 + 9.0600004196166992E+00 -6.4750043989425900E-18 1.0000000000000000E+00 1.1985399723052979E+00 + 9.0649995803833008E+00 -1.7591200100912011E-16 1.0000000000000000E+00 1.1990749835968018E+00 + 9.0699996948242188E+00 -2.1258799822963928E-16 1.0000000000000000E+00 1.1994899511337280E+00 + 9.0749998092651367E+00 -1.9514249441309991E-16 1.0000000000000000E+00 1.1997799873352051E+00 + 9.0799999237060547E+00 -1.2968190889493586E-16 1.0000000000000000E+00 1.1999399662017822E+00 + 9.0850000381469727E+00 -5.1138800244755631E-17 1.0000000000000000E+00 1.1999800205230713E+00 + 9.0900001525878906E+00 3.0407498461500444E-18 1.0000000000000000E+00 1.1998950242996216E+00 + 9.0950002670288086E+00 4.7162450395984621E-17 1.0000000000000000E+00 1.1996850967407227E+00 + 9.1000003814697266E+00 8.9217298737470711E-17 1.0000000000000000E+00 1.1993499994277954E+00 + 9.1049995422363281E+00 1.5790499375788994E-16 1.0000000000000000E+00 1.1988899707794189E+00 + 9.1099996566772461E+00 2.2531449620856773E-16 1.0000000000000000E+00 1.1983050107955933E+00 + 9.1149997711181641E+00 2.9612001844258403E-16 1.0000000000000000E+00 1.1975950002670288E+00 + 9.1199998855590820E+00 3.2194001789461846E-16 1.0000000000000000E+00 1.1967649459838867E+00 + 9.1250000000000000E+00 1.7989349261257875E-16 1.0000000000000000E+00 1.1958100795745850E+00 + 9.1300001144409180E+00 4.4819507633042473E-18 1.0000000000000000E+00 1.1947350502014160E+00 + 9.1350002288818359E+00 -5.8152749208723471E-17 1.0000000000000000E+00 1.1935399770736694E+00 + 9.1400003433227539E+00 -1.7052551666546055E-17 1.0000000000000000E+00 1.1922199726104736E+00 + 9.1450004577636719E+00 8.3403152090953886E-17 1.0000000000000000E+00 1.1907799243927002E+00 + 9.1499996185302734E+00 9.7954304622055910E-17 1.0000000000000000E+00 1.1892199516296387E+00 + 9.1549997329711914E+00 -8.7259203408880084E-17 1.0000000000000000E+00 1.1875400543212891E+00 + 9.1599998474121094E+00 -2.2946450766386057E-16 1.0000000000000000E+00 1.1857450008392334E+00 + 9.1649999618530273E+00 -1.7148399069356044E-16 1.0000000000000000E+00 1.1838350296020508E+00 + 9.1700000762939453E+00 -7.1301400467629585E-17 1.0000000000000000E+00 1.1818100214004517E+00 + 9.1750001907348633E+00 9.4737500135871917E-18 1.0000000000000000E+00 1.1796700954437256E+00 + 9.1800003051757812E+00 7.3160154713375043E-17 1.0000000000000000E+00 1.1774150133132935E+00 + 9.1850004196166992E+00 1.3560249714267600E-16 1.0000000000000000E+00 1.1750550270080566E+00 + 9.1899995803833008E+00 2.0816399808568927E-16 1.0000000000000000E+00 1.1725850105285645E+00 + 9.1949996948242188E+00 3.1047600928868274E-16 1.0000000000000000E+00 1.1700049638748169E+00 + 9.1999998092651367E+00 3.2331549352184103E-16 1.0000000000000000E+00 1.1673200130462646E+00 + 9.2049999237060547E+00 1.6817743876527567E-16 1.0000000000000000E+00 1.1645300388336182E+00 + 9.2100000381469727E+00 1.0501198497064820E-17 1.0000000000000000E+00 1.1616349220275879E+00 + 9.2150001525878906E+00 -5.8508000120757845E-17 1.0000000000000000E+00 1.1586399078369141E+00 + 9.2200002670288086E+00 -2.0197250818733801E-17 1.0000000000000000E+00 1.1555500030517578E+00 + 9.2250003814697266E+00 9.0745498375550179E-17 1.0000000000000000E+00 1.1523599624633789E+00 + 9.2299995422363281E+00 1.1173384984287867E-16 1.0000000000000000E+00 1.1490700244903564E+00 + 9.2349996566772461E+00 -8.3880653680078697E-17 1.0000000000000000E+00 1.1456899642944336E+00 + 9.2399997711181641E+00 -2.9616051720537462E-16 1.0000000000000000E+00 1.1422200202941895E+00 + 9.2449998855590820E+00 -3.4461498401349767E-16 1.0000000000000000E+00 1.1386599540710449E+00 + 9.2500000000000000E+00 -2.8781949260618591E-16 1.0000000000000000E+00 1.1350150108337402E+00 + 9.2550001144409180E+00 -1.8551300035223939E-16 1.0000000000000000E+00 1.1312849521636963E+00 + 9.2600002288818359E+00 -8.9039044624187984E-17 1.0000000000000000E+00 1.1274750232696533E+00 + 9.2650003433227539E+00 -5.6758999507408372E-18 1.0000000000000000E+00 1.1235849857330322E+00 + 9.2700004577636719E+00 7.4935151959015832E-17 1.0000000000000000E+00 1.1196150779724121E+00 + 9.2749996185302734E+00 1.8755499826472250E-16 1.0000000000000000E+00 1.1155700683593750E+00 + 9.2799997329711914E+00 2.1926300166580739E-16 1.0000000000000000E+00 1.1114549636840820E+00 + 9.2849998474121094E+00 8.6424955365173404E-18 1.0000000000000000E+00 1.1072700023651123E+00 + 9.2899999618530273E+00 -1.2928814445358101E-16 1.0000000000000000E+00 1.1030149459838867E+00 + 9.2950000762939453E+00 -4.2125430008794015E-17 1.0000000000000000E+00 1.0986950397491455E+00 + 9.3000001907348633E+00 4.8138219116331774E-17 1.0000000000000000E+00 1.0943200588226318E+00 + 9.3050003051757812E+00 1.4571200742172349E-16 1.0000000000000000E+00 1.0898849964141846E+00 + 9.3100004196166992E+00 2.5618450609213230E-16 1.0000000000000000E+00 1.0853899717330933E+00 + 9.3149995803833008E+00 3.7393899994964553E-16 1.0000000000000000E+00 1.0808449983596802E+00 + 9.3199996948242188E+00 3.8622701279458207E-16 1.0000000000000000E+00 1.0762450695037842E+00 + 9.3249998092651367E+00 1.6632430273025067E-16 1.0000000000000000E+00 1.0715949535369873E+00 + 9.3299999237060547E+00 -5.3664688889414907E-17 1.0000000000000000E+00 1.0669050216674805E+00 + 9.3350000381469727E+00 -1.0006595114211598E-16 1.0000000000000000E+00 1.0621750354766846E+00 + 9.3400001525878906E+00 -5.6267200928576195E-17 1.0000000000000000E+00 1.0574049949645996E+00 + 9.3450002670288086E+00 3.0088499566991819E-17 1.0000000000000000E+00 1.0525999069213867E+00 + 9.3500003814697266E+00 1.3952024951685376E-16 1.0000000000000000E+00 1.0477600097656250E+00 + 9.3549995422363281E+00 2.6719000517580742E-16 1.0000000000000000E+00 1.0428900718688965E+00 + 9.3599996566772461E+00 4.0956848796383201E-16 1.0000000000000000E+00 1.0379949808120728E+00 + 9.3649997711181641E+00 4.2470798428614095E-16 1.0000000000000000E+00 1.0330749750137329E+00 + 9.3699998855590820E+00 1.8166159448063329E-16 1.0000000000000000E+00 1.0281350612640381E+00 + 9.3750000000000000E+00 4.1424252164589965E-17 1.0000000000000000E+00 1.0231750011444092E+00 + 9.3800001144409180E+00 1.3991315369037155E-16 1.0000000000000000E+00 1.0181999206542969E+00 + 9.3850002288818359E+00 2.4398450526437140E-16 1.0000000000000000E+00 1.0132150650024414E+00 + 9.3900003433227539E+00 3.7702249104522680E-16 1.0000000000000000E+00 1.0082249641418457E+00 + 9.3950004577636719E+00 3.9231048283110126E-16 1.0000000000000000E+00 1.0032300949096680E+00 + 9.3999996185302734E+00 1.6440540252780526E-16 1.0000000000000000E+00 9.9822998046875000E-01 + 9.4049997329711914E+00 -1.0534509060332331E-16 1.0000000000000000E+00 9.9323153495788574E-01 + 9.4099998474121094E+00 -2.3367150855463587E-16 1.0000000000000000E+00 9.8823750019073486E-01 + 9.4149999618530273E+00 -1.9222299683704095E-16 1.0000000000000000E+00 9.8325097560882568E-01 + 9.4200000762939453E+00 -1.0147884842025046E-16 1.0000000000000000E+00 9.7827446460723877E-01 + 9.4250001907348633E+00 1.6333508375472084E-18 1.0000000000000000E+00 9.7331154346466064E-01 + 9.4300003051757812E+00 1.4575070623950117E-16 1.0000000000000000E+00 9.6836555004119873E-01 + 9.4350004196166992E+00 1.4937219560548693E-16 1.0000000000000000E+00 9.6343952417373657E-01 + 9.4399995803833008E+00 -1.1566830464798509E-16 1.0000000000000000E+00 9.5853602886199951E-01 + 9.4449996948242188E+00 -3.9688649891930381E-16 1.0000000000000000E+00 9.5365846157073975E-01 + 9.4499998092651367E+00 -4.7663549793624345E-16 1.0000000000000000E+00 9.4880998134613037E-01 + 9.4549999237060547E+00 -4.2248499925563125E-16 1.0000000000000000E+00 9.4399297237396240E-01 + 9.4600000381469727E+00 -3.3795799326234851E-16 1.0000000000000000E+00 9.3921148777008057E-01 + 9.4650001525878906E+00 -2.2223648435736401E-16 1.0000000000000000E+00 9.3446803092956543E-01 + 9.4700002670288086E+00 -2.1472748434039543E-16 1.0000000000000000E+00 9.2976552248001099E-01 + 9.4750003814697266E+00 -4.4874148537329766E-16 1.0000000000000000E+00 9.2510700225830078E-01 + 9.4799995422363281E+00 -7.4881503009719113E-16 1.0000000000000000E+00 9.2049503326416016E-01 + 9.4849996566772461E+00 -8.9003342185461215E-16 1.0000000000000000E+00 9.1593301296234131E-01 + 9.4899997711181641E+00 -8.5358951166164066E-16 1.0000000000000000E+00 9.1142350435256958E-01 + 9.4949998855590820E+00 -7.6737500427919055E-16 1.0000000000000000E+00 9.0696901082992554E-01 + 9.5000000000000000E+00 -6.7826798526098540E-16 1.0000000000000000E+00 9.0257298946380615E-01 + 9.5050001144409180E+00 -5.5955695297800565E-16 1.0000000000000000E+00 8.9823752641677856E-01 + 9.5100002288818359E+00 -4.8901297863623372E-16 1.0000000000000000E+00 8.9396548271179199E-01 + 9.5150003433227539E+00 -4.3247548817069970E-16 1.0000000000000000E+00 8.8976049423217773E-01 + 9.5200004577636719E+00 -2.9792149870271631E-16 1.0000000000000000E+00 8.8562399148941040E-01 + 9.5249996185302734E+00 -1.5327095591280047E-16 1.0000000000000000E+00 8.8155853748321533E-01 + 9.5299997329711914E+00 -1.4587794647004653E-16 1.0000000000000000E+00 8.7756752967834473E-01 + 9.5349998474121094E+00 -2.6866500717433238E-16 1.0000000000000000E+00 8.7365299463272095E-01 + 9.5399999618530273E+00 -2.5752350636306374E-16 1.0000000000000000E+00 8.6981749534606934E-01 + 9.5450000762939453E+00 -1.2614395815337305E-16 1.0000000000000000E+00 8.6606347560882568E-01 + 9.5500001907348633E+00 -1.0931794644118689E-16 1.0000000000000000E+00 8.6239302158355713E-01 + 9.5550003051757812E+00 -2.0665600150689080E-16 1.0000000000000000E+00 8.5880851745605469E-01 + 9.5600004196166992E+00 -1.7676195886702039E-16 1.0000000000000000E+00 8.5531246662139893E-01 + 9.5649995803833008E+00 -3.7141848797896785E-17 1.0000000000000000E+00 8.5190701484680176E-01 + 9.5699996948242188E+00 6.9901605730397949E-17 1.0000000000000000E+00 8.4859347343444824E-01 + 9.5749998092651367E+00 1.3271449860434307E-16 1.0000000000000000E+00 8.4537446498870850E-01 + 9.5799999237060547E+00 6.3329404300757928E-17 1.0000000000000000E+00 8.4225249290466309E-01 + 9.5850000381469727E+00 -1.0580959553066369E-16 1.0000000000000000E+00 8.3922898769378662E-01 + 9.5900001525878906E+00 -1.2698859558557340E-16 1.0000000000000000E+00 8.3630597591400146E-01 + 9.5950002670288086E+00 -7.8591521877071729E-18 1.0000000000000000E+00 8.3348548412322998E-01 + 9.6000003814697266E+00 1.3269495067210721E-16 1.0000000000000000E+00 8.3076900243759155E-01 + 9.6049995422363281E+00 1.4782900745470800E-16 1.0000000000000000E+00 8.2815849781036377E-01 + 9.6099996566772461E+00 -9.8016005678307466E-18 1.0000000000000000E+00 8.2565498352050781E-01 + 9.6149997711181641E+00 -9.3626098610484444E-17 1.0000000000000000E+00 8.2326048612594604E-01 + 9.6199998855590820E+00 -8.3329599190885671E-17 1.0000000000000000E+00 8.2097649574279785E-01 + 9.6250000000000000E+00 -2.3437950898453226E-17 1.0000000000000000E+00 8.1880450248718262E-01 + 9.6300001144409180E+00 6.5899652987307198E-17 1.0000000000000000E+00 8.1674599647521973E-01 + 9.6350002288818359E+00 1.8619600007530198E-16 1.0000000000000000E+00 8.1480145454406738E-01 + 9.6400003433227539E+00 2.4627699993611516E-16 1.0000000000000000E+00 8.1297248601913452E-01 + 9.6450004577636719E+00 1.3749574812868737E-16 1.0000000000000000E+00 8.1126046180725098E-01 + 9.6499996185302734E+00 8.5341993963606729E-18 1.0000000000000000E+00 8.0966699123382568E-01 + 9.6549997329711914E+00 -2.7999001635013469E-17 1.0000000000000000E+00 8.0819249153137207E-01 + 9.6599998474121094E+00 -8.9859945281530509E-17 1.0000000000000000E+00 8.0683749914169312E-01 + 9.6649999618530273E+00 -1.5199749481616283E-16 1.0000000000000000E+00 8.0560302734375000E-01 + 9.6700000762939453E+00 -7.8350196896443059E-17 1.0000000000000000E+00 8.0449044704437256E-01 + 9.6750001907348633E+00 3.5846801595993964E-17 1.0000000000000000E+00 8.0349999666213989E-01 + 9.6800003051757812E+00 1.4360850697633584E-16 1.0000000000000000E+00 8.0263197422027588E-01 + 9.6850004196166992E+00 1.7222249754444779E-16 1.0000000000000000E+00 8.0188798904418945E-01 + 9.6899995803833008E+00 1.2608650549674757E-16 1.0000000000000000E+00 8.0126750469207764E-01 + 9.6949996948242188E+00 2.9458449329299979E-17 1.0000000000000000E+00 8.0077099800109863E-01 + 9.6999998092651367E+00 -5.5867050652892442E-17 1.0000000000000000E+00 8.0039894580841064E-01 + 9.7049999237060547E+00 -1.1289849036685128E-17 1.0000000000000000E+00 8.0015194416046143E-01 + 9.7100000381469727E+00 1.1889415021826429E-16 1.0000000000000000E+00 8.0002999305725098E-01 + 9.7150001525878906E+00 1.6319999523452358E-16 1.0000000000000000E+00 8.0003249645233154E-01 + 9.7200002670288086E+00 4.0776847677646762E-17 1.0000000000000000E+00 8.0016052722930908E-01 + 9.7250003814697266E+00 -1.2728215867624602E-16 1.0000000000000000E+00 8.0041348934173584E-01 + 9.7299995422363281E+00 -1.1750250155570508E-16 1.0000000000000000E+00 8.0079054832458496E-01 + 9.7349996566772461E+00 -2.5173000283591379E-18 1.0000000000000000E+00 8.0129200220108032E-01 + 9.7399997711181641E+00 1.0911519454688280E-16 1.0000000000000000E+00 8.0191802978515625E-01 + 9.7449998855590820E+00 1.2195184651362371E-16 1.0000000000000000E+00 8.0266797542572021E-01 + 9.7500000000000000E+00 -2.7886151038404084E-17 1.0000000000000000E+00 8.0354154109954834E-01 + 9.7550001144409180E+00 -1.2198899684929469E-16 1.0000000000000000E+00 8.0453753471374512E-01 + 9.7600002288818359E+00 -1.9850799454055766E-16 1.0000000000000000E+00 8.0565547943115234E-01 + 9.7650003433227539E+00 -3.2609799675357141E-16 1.0000000000000000E+00 8.0689501762390137E-01 + 9.7700004577636719E+00 -3.4895549847258392E-16 1.0000000000000000E+00 8.0825501680374146E-01 + 9.7749996185302734E+00 -3.0935099071605142E-16 1.0000000000000000E+00 8.0973500013351440E-01 + 9.7799997329711914E+00 -2.5257950739883839E-16 1.0000000000000000E+00 8.1133449077606201E-01 + 9.7849998474121094E+00 -1.1316869718574785E-16 1.0000000000000000E+00 8.1305146217346191E-01 + 9.7899999618530273E+00 4.9320299916339453E-17 1.0000000000000000E+00 8.1488502025604248E-01 + 9.7950000762939453E+00 2.1284950641721424E-16 1.0000000000000000E+00 8.1683450937271118E-01 + 9.8000001907348633E+00 2.4211798875575774E-16 1.0000000000000000E+00 8.1889849901199341E-01 + 9.8050003051757812E+00 1.0817124911906178E-16 1.0000000000000000E+00 8.2107549905776978E-01 + 9.8100004196166992E+00 -2.0965501430087325E-17 1.0000000000000000E+00 8.2336401939392090E-01 + 9.8149995803833008E+00 -4.7425599709894890E-17 1.0000000000000000E+00 8.2576352357864380E-01 + 9.8199996948242188E+00 9.6185008305196837E-18 1.0000000000000000E+00 8.2827252149581909E-01 + 9.8249998092651367E+00 7.5425147284112644E-17 1.0000000000000000E+00 8.3088850975036621E-01 + 9.8299999237060547E+00 1.6895329447518101E-16 1.0000000000000000E+00 8.3361053466796875E-01 + 9.8350000381469727E+00 1.5734435059103620E-16 1.0000000000000000E+00 8.3643603324890137E-01 + 9.8400001525878906E+00 -5.7261974950677366E-18 1.0000000000000000E+00 8.3936148881912231E-01 + 9.8450002670288086E+00 -2.4566248415032707E-17 1.0000000000000000E+00 8.4238600730895996E-01 + 9.8500003814697266E+00 -1.8264147925170851E-17 1.0000000000000000E+00 8.4550952911376953E-01 + 9.8549995422363281E+00 -1.1096844969591600E-16 1.0000000000000000E+00 8.4873247146606445E-01 + 9.8599996566772461E+00 -8.6868396965395731E-17 1.0000000000000000E+00 8.5205549001693726E-01 + 9.8649997711181641E+00 -8.1665705536400555E-18 1.0000000000000000E+00 8.5547602176666260E-01 + 9.8699998855590820E+00 5.4178229083467428E-17 1.0000000000000000E+00 8.5898649692535400E-01 + 9.8750000000000000E+00 1.7158989628174683E-16 1.0000000000000000E+00 8.6257600784301758E-01 + 9.8800001144409180E+00 3.2239651571362932E-16 1.0000000000000000E+00 8.6623454093933105E-01 + 9.8850002288818359E+00 4.6358748477938298E-16 1.0000000000000000E+00 8.6996001005172729E-01 + 9.8900003433227539E+00 4.5801898430501481E-16 1.0000000000000000E+00 8.7376403808593750E-01 + 9.8950004577636719E+00 3.2024198153316960E-16 1.0000000000000000E+00 8.7767004966735840E-01 + 9.8999996185302734E+00 2.5789749787905611E-16 1.0000000000000000E+00 8.8170397281646729E-01 + 9.9049997329711914E+00 2.5474002374948810E-16 1.0000000000000000E+00 8.8587498664855957E-01 + 9.9099998474121094E+00 2.3741502360458545E-16 1.0000000000000000E+00 8.9015650749206543E-01 + 9.9149999618530273E+00 2.8207600041887091E-16 1.0000000000000000E+00 8.9448100328445435E-01 + 9.9200000762939453E+00 4.1804998768336693E-16 1.0000000000000000E+00 8.9875745773315430E-01 + 9.9250001907348633E+00 5.2364799703078445E-16 1.0000000000000000E+00 9.0292000770568848E-01 + 9.9300003051757812E+00 6.0459099486599743E-16 1.0000000000000000E+00 9.0699255466461182E-01 + 9.9350004196166992E+00 7.3918950650327087E-16 1.0000000000000000E+00 9.1113948822021484E-01 + 9.9399995803833008E+00 8.9606048479080012E-16 1.0000000000000000E+00 9.1564100980758667E-01 + 9.9449996948242188E+00 9.0175445202048034E-16 1.0000000000000000E+00 9.2077004909515381E-01 + 9.9499998092651367E+00 5.9406751046886920E-16 1.0000000000000000E+00 9.2663550376892090E-01 + 9.9549999237060547E+00 1.7325160287069236E-16 1.0000000000000000E+00 9.3307995796203613E-01 + 9.9600000381469727E+00 -2.2211840267056084E-16 1.0000000000000000E+00 9.3967550992965698E-01 + 9.9650001525878906E+00 -3.9280999404196488E-16 1.0000000000000000E+00 9.4578754901885986E-01 + 9.9700002670288086E+00 -2.9597951685245822E-16 1.0000000000000000E+00 9.5069801807403564E-01 + 9.9750003814697266E+00 -1.7667749380031138E-16 1.0000000000000000E+00 9.5390903949737549E-01 + 9.9799995422363281E+00 -5.6379412941752688E-17 1.0000000000000000E+00 9.5556747913360596E-01 + 9.9849996566772461E+00 2.5834734847466450E-17 1.0000000000000000E+00 9.5628499984741211E-01 + 9.9899997711181641E+00 1.0424914908358445E-16 1.0000000000000000E+00 9.5655649900436401E-01 + 9.9949998855590820E+00 1.9933500309954327E-16 1.0000000000000000E+00 9.5663547515869141E-01 + 1.0000000000000000E+01 2.3562601061064556E-16 1.0000000000000000E+00 9.5664799213409424E-01 diff --git a/testcases/ShuOsherProblem/postProc.py b/testcases/ShuOsherProblem/postProc.py new file mode 100644 index 0000000..280666b --- /dev/null +++ b/testcases/ShuOsherProblem/postProc.py @@ -0,0 +1,135 @@ +import numpy as np +import json +import matplotlib.pyplot as plt +import sys +import os +import h5py + +############################################################################### +## Read Exact Solution ## +############################################################################### + +def readExact(): + # Open file + f = open('exact.txt', 'r') + + x = [] + u = [] + p = [] + rho = [] + e = [] + + # Loop over lines and extract variables of interest + for line in f: + line = line.strip() + columns = line.split() + x.append( float(columns[0])) + u.append( float(columns[1])) + p.append( float(columns[2])) + rho.append(float(columns[3])) + + f.close() + + e = [xp/xr/0.4 for xp, xr in zip(p,rho)] + + return x, u, p, rho, e + +############################################################################### +# Read Exact Solution # +############################################################################### + +xExact, uExact, pExact, rhoExact, eExact = readExact() + +def L2(err,dx): + tot = sum(map(sum, err**2*dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + vol = sum(map(sum, dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + return np.sqrt(tot/vol) + +def process(case, i): + dir_name = os.path.join(os.environ['HTR_DIR'], 'testcases/ShuOsherProblem') + soleil_input_file = os.path.join(dir_name, str(case)+'.json') + +############################################################################## +# Read Prometeo Input File # +############################################################################## + + with open(soleil_input_file) as f: + data = json.load(f) + + xNum = data["Grid"]["xNum"] + xWidth = data["Grid"]["xWidth"] + + dt = data["Integrator"]["fixedDeltaTime"] + nstep = data["Integrator"]["maxIter"] + time = dt*nstep + + filename = os.path.join(dir_name, str(case)+'/sample0/fluid_iter'+str(nstep).zfill(10)+'/0,0,0-'+str(case+1)+',0,0.hdf') + hdf_filename = filename + +############################################################################## +# Read Prometeo Output Data # +############################################################################## + + f = h5py.File(hdf_filename, 'r') + + # Get the data + x = f['centerCoordinates'][0,0,:][:,0] + dx = f['cellWidth' ][0,0,:][:,0] + u = f['velocity' ][0,0,:][:,0] + p = f['pressure' ][0,0,:] + rho = f['rho' ][0,0,:] + T = f['temperature' ][0,0,:] + + e = T/0.4 + + ############################################################################## + # Plot # + ############################################################################## + + plt.figure(1+i*4) + plt.plot(xExact, uExact, '-k', label='Reference solution') + plt.plot( x, u, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$', fontsize = 20) + plt.ylabel(r'$u$', fontsize = 20) + plt.legend() + plt.savefig('Velocity_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(2+i*4) + plt.plot(xExact, pExact, '-k', label='Reference solution') + plt.plot( x, p, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$', fontsize = 20) + plt.ylabel(r'$P$', fontsize = 20) + plt.legend() + plt.savefig('Pressure_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(3+i*4) + plt.plot(xExact, rhoExact, '-k', label='Reference solution') + plt.plot( x, rho, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$' , fontsize = 20) + plt.ylabel(r'$\rho$', fontsize = 20) + plt.legend() + plt.savefig('Density_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(4+i*4) + plt.plot(xExact, rhoExact, '-k', label='Reference solution') + plt.plot( x, rho, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$' , fontsize = 20) + plt.ylabel(r'$\rho$', fontsize = 20) + plt.xlim(4.5, 8.0) + plt.ylim(3.0, 5.0) + plt.legend() + plt.savefig('DensityZoom_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(5+i*4) + plt.plot(xExact, eExact, '-k', label='Reference solution') + plt.plot( x, e, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$', fontsize = 20) + plt.ylabel(r'$e$', fontsize = 20) + plt.legend() + plt.savefig('InternalEnergy_'+str(case)+'.eps', bbox_inches='tight') + + return x, u, p, rho, e + +plt.rcParams.update({'font.size': 12}) +x, u, p, r, e = process(200, 0) +plt.show() diff --git a/testcases/ShuOsherProblem/run.sh b/testcases/ShuOsherProblem/run.sh new file mode 100644 index 0000000..1095722 --- /dev/null +++ b/testcases/ShuOsherProblem/run.sh @@ -0,0 +1,7 @@ +rm -rf sample* slurm* + +for cases in 200; do + rm -r $cases + mkdir $cases + USE_CUDA=1 PROFILE=0 QUEUE="gpu" $HTR_DIR/src/prometeo.sh -i $cases.json -o $cases +done diff --git a/testcases/SodProblem/100.json b/testcases/SodProblem/100.json new file mode 100644 index 0000000..7daa0b1 --- /dev/null +++ b/testcases/SodProblem/100.json @@ -0,0 +1,169 @@ +{ + "Mapping" : { + "tiles" : [1,1,1], + "tilesPerRank" : [1,1,1], + "sampleId" : -1, + "outDir" : "100", + "wallTime" : 10000 + }, + + "Grid" : { + "xNum" : 100, + "yNum" : 1, + "zNum" : 1, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 1.0, + "yWidth" : 1.0, + "zWidth" : 1.0, + "xType" : "Uniform", + "yType" : "Uniform", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 200, + "maxTime" : 0.2, + "cfl" : -0.4, + "fixedDeltaTime" : 1.0e-3, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "Dirichlet", + "xBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCLeftP" : 1.0, + "xBCLeftHeat" : { + "type" : "Constant", + "temperature" : 1.0 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "Dirichlet", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : 0.1, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : 0.8 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "Periodic", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : 0.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "Periodic", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : 0.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 1.0, + "gamma" : 1.4, + "prandtl" : 0.71, + "viscosityModel" : "Constant", + "constantVisc" : 0.0, + "powerlawViscRef" : -1.0, + "powerlawTempRef" : -1.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "SodProblem", + "restartDir" : "", + "initParams" : [1.0, 1.0, 0.80, 0.0, 0.0], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { "type" : "OFF" } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 100, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } +} diff --git a/testcases/SodProblem/exact.txt b/testcases/SodProblem/exact.txt new file mode 100644 index 0000000..c3dd391 --- /dev/null +++ b/testcases/SodProblem/exact.txt @@ -0,0 +1,1001 @@ + -0.100000000000E+01 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.998000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.996000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.994000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.992000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.990000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.988000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.986000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.984000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.982000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.980000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.978000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.976000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.974000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.972000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.970000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.968000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.966000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.964000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.962000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.960000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.958000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.956000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.954000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.952000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.950000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.948000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.946000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.944000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.942000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.940000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.938000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.936000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.934000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.932000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.930000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.928000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.926000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.924000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.922000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.920000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.918000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.916000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.914000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.912000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.910000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.908000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.906000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.904000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.902000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.900000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.898000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.896000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.894000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.892000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.890000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.888000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.886000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.884000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.882000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.880000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.878000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.876000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.874000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.872000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.870000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.868000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.866000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.864000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.862000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.860000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.858000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.856000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.854000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.852000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.850000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.848000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.846000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.844000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.842000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.840000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.838000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.836000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.834000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.832000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.830000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.828000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.826000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.824000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.822000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.820000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.818000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.816000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.814000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.812000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.810000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.808000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.806000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.804000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.802000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.800000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.798000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.796000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.794000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.792000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.790000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.788000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.786000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.784000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.782000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.780000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.778000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.776000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.774000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.772000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.770000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.768000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.766000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.764000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.762000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.760000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.758000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.756000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.754000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.752000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.750000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.748000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.746000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.744000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.742000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.740000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.738000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.736000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.734000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.732000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.730000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.728000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.726000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.724000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.722000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.720000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.718000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.716000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.714000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.712000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.710000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.708000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.706000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.704000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.702000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.700000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.698000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.696000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.694000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.692000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.690000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.688000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.686000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.684000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.682000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.680000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.678000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.676000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.674000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.672000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.670000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.668000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.666000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.664000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.662000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.660000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.658000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.656000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.654000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.652000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.650000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.648000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.646000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.644000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.642000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.640000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.638000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.636000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.634000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.632000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.630000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.628000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.626000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.624000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.622000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.620000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.618000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.616000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.614000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.612000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.610000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.608000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.606000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.604000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.602000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.600000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.598000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.596000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.594000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.592000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.590000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.588000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.586000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.584000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.582000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.580000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.578000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.576000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.574000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.572000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.570000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.568000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.566000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.564000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.562000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.560000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.558000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.556000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.554000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.552000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.550000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.548000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.546000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.544000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.542000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.540000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.538000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.536000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.534000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.532000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.530000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.528000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.526000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.524000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.522000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.520000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.518000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.516000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.514000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.512000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.510000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.508000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.506000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.504000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.502000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.500000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.498000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.496000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.494000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.492000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.490000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.488000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.486000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.484000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.482000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.480000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.478000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.476000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.474000000000E+00 0.100000000000E+01 0.000000000000E+00 0.100000000000E+01 + -0.472000000000E+00 0.997737068279E+00 0.267996384994E-02 0.996833330081E+00 + -0.470000000000E+00 0.994226918840E+00 0.684663051660E-02 0.991927029146E+00 + -0.468000000000E+00 0.990726655635E+00 0.110132971833E-01 0.987041441290E+00 + -0.466000000000E+00 0.987236257766E+00 0.151799638499E-01 0.982176493589E+00 + -0.464000000000E+00 0.983755704364E+00 0.193466305166E-01 0.977332113327E+00 + -0.462000000000E+00 0.980284974592E+00 0.235132971833E-01 0.972508227992E+00 + -0.460000000000E+00 0.976824047638E+00 0.276799638499E-01 0.967704765278E+00 + -0.458000000000E+00 0.973372902723E+00 0.318466305166E-01 0.962921653083E+00 + -0.456000000000E+00 0.969931519096E+00 0.360132971833E-01 0.958158819506E+00 + -0.454000000000E+00 0.966499876035E+00 0.401799638499E-01 0.953416192853E+00 + -0.452000000000E+00 0.963077952849E+00 0.443466305166E-01 0.948693701631E+00 + -0.450000000000E+00 0.959665728875E+00 0.485132971833E-01 0.943991274549E+00 + -0.448000000000E+00 0.956263183480E+00 0.526799638499E-01 0.939308840521E+00 + -0.446000000000E+00 0.952870296058E+00 0.568466305166E-01 0.934646328659E+00 + -0.444000000000E+00 0.949487046036E+00 0.610132971833E-01 0.930003668278E+00 + -0.442000000000E+00 0.946113412867E+00 0.651799638499E-01 0.925380788894E+00 + -0.440000000000E+00 0.942749376035E+00 0.693466305166E-01 0.920777620223E+00 + -0.438000000000E+00 0.939394915053E+00 0.735132971833E-01 0.916194092180E+00 + -0.436000000000E+00 0.936050009464E+00 0.776799638499E-01 0.911630134882E+00 + -0.434000000000E+00 0.932714638837E+00 0.818466305166E-01 0.907085678642E+00 + -0.432000000000E+00 0.929388782773E+00 0.860132971833E-01 0.902560653973E+00 + -0.430000000000E+00 0.926072420902E+00 0.901799638499E-01 0.898054991587E+00 + -0.428000000000E+00 0.922765532882E+00 0.943466305166E-01 0.893568622393E+00 + -0.426000000000E+00 0.919468098400E+00 0.985132971833E-01 0.889101477497E+00 + -0.424000000000E+00 0.916180097173E+00 0.102679963850E+00 0.884653488203E+00 + -0.422000000000E+00 0.912901508947E+00 0.106846630517E+00 0.880224586011E+00 + -0.420000000000E+00 0.909632313497E+00 0.111013297183E+00 0.875814702617E+00 + -0.418000000000E+00 0.906372490625E+00 0.115179963850E+00 0.871423769912E+00 + -0.416000000000E+00 0.903122020165E+00 0.119346630517E+00 0.867051719983E+00 + -0.414000000000E+00 0.899880881978E+00 0.123513297183E+00 0.862698485113E+00 + -0.412000000000E+00 0.896649055955E+00 0.127679963850E+00 0.858363997777E+00 + -0.410000000000E+00 0.893426522014E+00 0.131846630517E+00 0.854048190646E+00 + -0.408000000000E+00 0.890213260105E+00 0.136013297183E+00 0.849750996584E+00 + -0.406000000000E+00 0.887009250204E+00 0.140179963850E+00 0.845472348647E+00 + -0.404000000000E+00 0.883814472317E+00 0.144346630517E+00 0.841212180086E+00 + -0.402000000000E+00 0.880628906480E+00 0.148513297183E+00 0.836970424342E+00 + -0.400000000000E+00 0.877452532755E+00 0.152679963850E+00 0.832747015050E+00 + -0.398000000000E+00 0.874285331236E+00 0.156846630517E+00 0.828541886035E+00 + -0.396000000000E+00 0.871127282043E+00 0.161013297183E+00 0.824354971313E+00 + -0.394000000000E+00 0.867978365326E+00 0.165179963850E+00 0.820186205092E+00 + -0.392000000000E+00 0.864838561264E+00 0.169346630517E+00 0.816035521770E+00 + -0.390000000000E+00 0.861707850064E+00 0.173513297183E+00 0.811902855934E+00 + -0.388000000000E+00 0.858586211962E+00 0.177679963850E+00 0.807788142360E+00 + -0.386000000000E+00 0.855473627223E+00 0.181846630517E+00 0.803691316015E+00 + -0.384000000000E+00 0.852370076141E+00 0.186013297183E+00 0.799612312052E+00 + -0.382000000000E+00 0.849275539036E+00 0.190179963850E+00 0.795551065815E+00 + -0.380000000000E+00 0.846189996260E+00 0.194346630517E+00 0.791507512835E+00 + -0.378000000000E+00 0.843113428192E+00 0.198513297183E+00 0.787481588828E+00 + -0.376000000000E+00 0.840045815240E+00 0.202679963850E+00 0.783473229699E+00 + -0.374000000000E+00 0.836987137839E+00 0.206846630517E+00 0.779482371541E+00 + -0.372000000000E+00 0.833937376454E+00 0.211013297183E+00 0.775508950630E+00 + -0.370000000000E+00 0.830896511579E+00 0.215179963850E+00 0.771552903430E+00 + -0.368000000000E+00 0.827864523734E+00 0.219346630517E+00 0.767614166589E+00 + -0.366000000000E+00 0.824841393472E+00 0.223513297183E+00 0.763692676941E+00 + -0.364000000000E+00 0.821827101369E+00 0.227679963850E+00 0.759788371505E+00 + -0.362000000000E+00 0.818821628033E+00 0.231846630517E+00 0.755901187481E+00 + -0.360000000000E+00 0.815824954099E+00 0.236013297183E+00 0.752031062257E+00 + -0.358000000000E+00 0.812837060231E+00 0.240179963850E+00 0.748177933401E+00 + -0.356000000000E+00 0.809857927121E+00 0.244346630517E+00 0.744341738666E+00 + -0.354000000000E+00 0.806887535489E+00 0.248513297183E+00 0.740522415986E+00 + -0.352000000000E+00 0.803925866084E+00 0.252679963850E+00 0.736719903479E+00 + -0.350000000000E+00 0.800972899684E+00 0.256846630517E+00 0.732934139442E+00 + -0.348000000000E+00 0.798028617093E+00 0.261013297183E+00 0.729165062355E+00 + -0.346000000000E+00 0.795092999144E+00 0.265179963850E+00 0.725412610880E+00 + -0.344000000000E+00 0.792166026701E+00 0.269346630517E+00 0.721676723857E+00 + -0.342000000000E+00 0.789247680651E+00 0.273513297183E+00 0.717957340308E+00 + -0.340000000000E+00 0.786337941915E+00 0.277679963850E+00 0.714254399434E+00 + -0.338000000000E+00 0.783436791437E+00 0.281846630517E+00 0.710567840616E+00 + -0.336000000000E+00 0.780544210192E+00 0.286013297183E+00 0.706897603412E+00 + -0.334000000000E+00 0.777660179183E+00 0.290179963850E+00 0.703243627560E+00 + -0.332000000000E+00 0.774784679441E+00 0.294346630517E+00 0.699605852977E+00 + -0.330000000000E+00 0.771917692023E+00 0.298513297183E+00 0.695984219757E+00 + -0.328000000000E+00 0.769059198018E+00 0.302679963850E+00 0.692378668170E+00 + -0.326000000000E+00 0.766209178539E+00 0.306846630517E+00 0.688789138664E+00 + -0.324000000000E+00 0.763367614730E+00 0.311013297183E+00 0.685215571864E+00 + -0.322000000000E+00 0.760534487760E+00 0.315179963850E+00 0.681657908570E+00 + -0.320000000000E+00 0.757709778830E+00 0.319346630517E+00 0.678116089760E+00 + -0.318000000000E+00 0.754893469166E+00 0.323513297183E+00 0.674590056585E+00 + -0.316000000000E+00 0.752085540022E+00 0.327679963850E+00 0.671079750371E+00 + -0.314000000000E+00 0.749285972681E+00 0.331846630517E+00 0.667585112621E+00 + -0.312000000000E+00 0.746494748454E+00 0.336013297183E+00 0.664106085010E+00 + -0.310000000000E+00 0.743711848678E+00 0.340179963850E+00 0.660642609387E+00 + -0.308000000000E+00 0.740937254721E+00 0.344346630517E+00 0.657194627775E+00 + -0.306000000000E+00 0.738170947975E+00 0.348513297183E+00 0.653762082371E+00 + -0.304000000000E+00 0.735412909863E+00 0.352679963850E+00 0.650344915542E+00 + -0.302000000000E+00 0.732663121835E+00 0.356846630517E+00 0.646943069830E+00 + -0.300000000000E+00 0.729921565367E+00 0.361013297183E+00 0.643556487947E+00 + -0.298000000000E+00 0.727188221966E+00 0.365179963850E+00 0.640185112778E+00 + -0.296000000000E+00 0.724463073163E+00 0.369346630517E+00 0.636828887378E+00 + -0.294000000000E+00 0.721746100519E+00 0.373513297183E+00 0.633487754972E+00 + -0.292000000000E+00 0.719037285623E+00 0.377679963850E+00 0.630161658958E+00 + -0.290000000000E+00 0.716336610090E+00 0.381846630517E+00 0.626850542902E+00 + -0.288000000000E+00 0.713644055564E+00 0.386013297183E+00 0.623554350538E+00 + -0.286000000000E+00 0.710959603716E+00 0.390179963850E+00 0.620273025774E+00 + -0.284000000000E+00 0.708283236245E+00 0.394346630517E+00 0.617006512682E+00 + -0.282000000000E+00 0.705614934877E+00 0.398513297183E+00 0.613754755504E+00 + -0.280000000000E+00 0.702954681365E+00 0.402679963850E+00 0.610517698652E+00 + -0.278000000000E+00 0.700302457493E+00 0.406846630517E+00 0.607295286703E+00 + -0.276000000000E+00 0.697658245068E+00 0.411013297183E+00 0.604087464402E+00 + -0.274000000000E+00 0.695022025926E+00 0.415179963850E+00 0.600894176662E+00 + -0.272000000000E+00 0.692393781932E+00 0.419346630517E+00 0.597715368562E+00 + -0.270000000000E+00 0.689773494977E+00 0.423513297183E+00 0.594550985345E+00 + -0.268000000000E+00 0.687161146980E+00 0.427679963850E+00 0.591400972424E+00 + -0.266000000000E+00 0.684556719887E+00 0.431846630517E+00 0.588265275373E+00 + -0.264000000000E+00 0.681960195672E+00 0.436013297183E+00 0.585143839935E+00 + -0.262000000000E+00 0.679371556335E+00 0.440179963850E+00 0.582036612014E+00 + -0.260000000000E+00 0.676790783905E+00 0.444346630517E+00 0.578943537681E+00 + -0.258000000000E+00 0.674217860438E+00 0.448513297183E+00 0.575864563170E+00 + -0.256000000000E+00 0.671652768016E+00 0.452679963850E+00 0.572799634878E+00 + -0.254000000000E+00 0.669095488749E+00 0.456846630517E+00 0.569748699365E+00 + -0.252000000000E+00 0.666546004776E+00 0.461013297183E+00 0.566711703355E+00 + -0.250000000000E+00 0.664004298261E+00 0.465179963850E+00 0.563688593734E+00 + -0.248000000000E+00 0.661470351396E+00 0.469346630517E+00 0.560679317549E+00 + -0.246000000000E+00 0.658944146400E+00 0.473513297183E+00 0.557683822010E+00 + -0.244000000000E+00 0.656425665520E+00 0.477679963850E+00 0.554702054487E+00 + -0.242000000000E+00 0.653914891028E+00 0.481846630517E+00 0.551733962513E+00 + -0.240000000000E+00 0.651411805226E+00 0.486013297183E+00 0.548779493779E+00 + -0.238000000000E+00 0.648916390442E+00 0.490179963850E+00 0.545838596137E+00 + -0.236000000000E+00 0.646428629030E+00 0.494346630517E+00 0.542911217600E+00 + -0.234000000000E+00 0.643948503372E+00 0.498513297183E+00 0.539997306339E+00 + -0.232000000000E+00 0.641475995877E+00 0.502679963850E+00 0.537096810686E+00 + -0.230000000000E+00 0.639011088982E+00 0.506846630517E+00 0.534209679129E+00 + -0.228000000000E+00 0.636553765150E+00 0.511013297183E+00 0.531335860316E+00 + -0.226000000000E+00 0.634104006870E+00 0.515179963850E+00 0.528475303053E+00 + -0.224000000000E+00 0.631661796659E+00 0.519346630517E+00 0.525627956303E+00 + -0.222000000000E+00 0.629227117062E+00 0.523513297183E+00 0.522793769187E+00 + -0.220000000000E+00 0.626799950650E+00 0.527679963850E+00 0.519972690982E+00 + -0.218000000000E+00 0.624380280020E+00 0.531846630517E+00 0.517164671123E+00 + -0.216000000000E+00 0.621968087797E+00 0.536013297183E+00 0.514369659199E+00 + -0.214000000000E+00 0.619563356633E+00 0.540179963850E+00 0.511587604957E+00 + -0.212000000000E+00 0.617166069206E+00 0.544346630517E+00 0.508818458297E+00 + -0.210000000000E+00 0.614776208222E+00 0.548513297183E+00 0.506062169277E+00 + -0.208000000000E+00 0.612393756412E+00 0.552679963850E+00 0.503318688107E+00 + -0.206000000000E+00 0.610018696536E+00 0.556846630517E+00 0.500587965154E+00 + -0.204000000000E+00 0.607651011379E+00 0.561013297183E+00 0.497869950936E+00 + -0.202000000000E+00 0.605290683753E+00 0.565179963850E+00 0.495164596127E+00 + -0.200000000000E+00 0.602937696498E+00 0.569346630517E+00 0.492471851553E+00 + -0.198000000000E+00 0.600592032480E+00 0.573513297183E+00 0.489791668194E+00 + -0.196000000000E+00 0.598253674591E+00 0.577679963850E+00 0.487123997182E+00 + -0.194000000000E+00 0.595922605750E+00 0.581846630517E+00 0.484468789800E+00 + -0.192000000000E+00 0.593598808903E+00 0.586013297183E+00 0.481825997486E+00 + -0.190000000000E+00 0.591282267023E+00 0.590179963850E+00 0.479195571826E+00 + -0.188000000000E+00 0.588972963108E+00 0.594346630517E+00 0.476577464559E+00 + -0.186000000000E+00 0.586670880184E+00 0.598513297183E+00 0.473971627574E+00 + -0.184000000000E+00 0.584376001304E+00 0.602679963850E+00 0.471378012913E+00 + -0.182000000000E+00 0.582088309546E+00 0.606846630517E+00 0.468796572763E+00 + -0.180000000000E+00 0.579807788015E+00 0.611013297183E+00 0.466227259466E+00 + -0.178000000000E+00 0.577534419844E+00 0.615179963850E+00 0.463670025510E+00 + -0.176000000000E+00 0.575268188190E+00 0.619346630517E+00 0.461124823534E+00 + -0.174000000000E+00 0.573009076237E+00 0.623513297183E+00 0.458591606324E+00 + -0.172000000000E+00 0.570757067198E+00 0.627679963850E+00 0.456070326815E+00 + -0.170000000000E+00 0.568512144310E+00 0.631846630517E+00 0.453560938091E+00 + -0.168000000000E+00 0.566274290836E+00 0.636013297183E+00 0.451063393383E+00 + -0.166000000000E+00 0.564043490067E+00 0.640179963850E+00 0.448577646067E+00 + -0.164000000000E+00 0.561819725320E+00 0.644346630517E+00 0.446103649670E+00 + -0.162000000000E+00 0.559602979937E+00 0.648513297183E+00 0.443641357862E+00 + -0.160000000000E+00 0.557393237288E+00 0.652679963850E+00 0.441190724463E+00 + -0.158000000000E+00 0.555190480768E+00 0.656846630517E+00 0.438751703434E+00 + -0.156000000000E+00 0.552994693799E+00 0.661013297183E+00 0.436324248886E+00 + -0.154000000000E+00 0.550805859829E+00 0.665179963850E+00 0.433908315072E+00 + -0.152000000000E+00 0.548623962334E+00 0.669346630517E+00 0.431503856393E+00 + -0.150000000000E+00 0.546448984812E+00 0.673513297183E+00 0.429110827392E+00 + -0.148000000000E+00 0.544280910791E+00 0.677679963850E+00 0.426729182757E+00 + -0.146000000000E+00 0.542119723823E+00 0.681846630517E+00 0.424358877319E+00 + -0.144000000000E+00 0.539965407489E+00 0.686013297183E+00 0.421999866054E+00 + -0.142000000000E+00 0.537817945392E+00 0.690179963850E+00 0.419652104080E+00 + -0.140000000000E+00 0.535677321164E+00 0.694346630517E+00 0.417315546658E+00 + -0.138000000000E+00 0.533543518463E+00 0.698513297183E+00 0.414990149193E+00 + -0.136000000000E+00 0.531416520971E+00 0.702679963850E+00 0.412675867229E+00 + -0.134000000000E+00 0.529296312398E+00 0.706846630517E+00 0.410372656455E+00 + -0.132000000000E+00 0.527182876480E+00 0.711013297183E+00 0.408080472699E+00 + -0.130000000000E+00 0.525076196979E+00 0.715179963850E+00 0.405799271932E+00 + -0.128000000000E+00 0.522976257680E+00 0.719346630517E+00 0.403529010263E+00 + -0.126000000000E+00 0.520883042398E+00 0.723513297183E+00 0.401269643945E+00 + -0.124000000000E+00 0.518796534973E+00 0.727679963850E+00 0.399021129368E+00 + -0.122000000000E+00 0.516716719269E+00 0.731846630517E+00 0.396783423065E+00 + -0.120000000000E+00 0.514643579177E+00 0.736013297183E+00 0.394556481704E+00 + -0.118000000000E+00 0.512577098615E+00 0.740179963850E+00 0.392340262096E+00 + -0.116000000000E+00 0.510517261525E+00 0.744346630517E+00 0.390134721190E+00 + -0.114000000000E+00 0.508464051876E+00 0.748513297183E+00 0.387939816071E+00 + -0.112000000000E+00 0.506417453662E+00 0.752679963850E+00 0.385755503965E+00 + -0.110000000000E+00 0.504377450905E+00 0.756846630517E+00 0.383581742234E+00 + -0.108000000000E+00 0.502344027649E+00 0.761013297183E+00 0.381418488377E+00 + -0.106000000000E+00 0.500317167966E+00 0.765179963850E+00 0.379265700033E+00 + -0.104000000000E+00 0.498296855954E+00 0.769346630517E+00 0.377123334975E+00 + -0.102000000000E+00 0.496283075737E+00 0.773513297183E+00 0.374991351112E+00 + -0.100000000000E+00 0.494275811463E+00 0.777679963850E+00 0.372869706491E+00 + -0.980000000000E-01 0.492275047307E+00 0.781846630517E+00 0.370758359295E+00 + -0.960000000000E-01 0.490280767469E+00 0.786013297183E+00 0.368657267840E+00 + -0.940000000000E-01 0.488292956174E+00 0.790179963850E+00 0.366566390578E+00 + -0.920000000000E-01 0.486311597675E+00 0.794346630517E+00 0.364485686098E+00 + -0.900000000000E-01 0.484336676248E+00 0.798513297183E+00 0.362415113121E+00 + -0.880000000000E-01 0.482368176197E+00 0.802679963850E+00 0.360354630502E+00 + -0.860000000000E-01 0.480406081848E+00 0.806846630517E+00 0.358304197231E+00 + -0.840000000000E-01 0.478450377555E+00 0.811013297183E+00 0.356263772432E+00 + -0.820000000000E-01 0.476501047699E+00 0.815179963850E+00 0.354233315359E+00 + -0.800000000000E-01 0.474558076683E+00 0.819346630517E+00 0.352212785403E+00 + -0.780000000000E-01 0.472621448938E+00 0.823513297183E+00 0.350202142085E+00 + -0.760000000000E-01 0.470691148918E+00 0.827679963850E+00 0.348201345058E+00 + -0.740000000000E-01 0.468767161106E+00 0.831846630517E+00 0.346210354107E+00 + -0.720000000000E-01 0.466849470007E+00 0.836013297183E+00 0.344229129149E+00 + -0.700000000000E-01 0.464938060153E+00 0.840179963850E+00 0.342257630234E+00 + -0.680000000000E-01 0.463032916101E+00 0.844346630517E+00 0.340295817538E+00 + -0.660000000000E-01 0.461134022434E+00 0.848513297183E+00 0.338343651373E+00 + -0.640000000000E-01 0.459241363759E+00 0.852679963850E+00 0.336401092177E+00 + -0.620000000000E-01 0.457354924709E+00 0.856846630517E+00 0.334468100521E+00 + -0.600000000000E-01 0.455474689942E+00 0.861013297183E+00 0.332544637103E+00 + -0.580000000000E-01 0.453600644143E+00 0.865179963850E+00 0.330630662751E+00 + -0.560000000000E-01 0.451732772019E+00 0.869346630517E+00 0.328726138424E+00 + -0.540000000000E-01 0.449871058305E+00 0.873513297183E+00 0.326831025207E+00 + -0.520000000000E-01 0.448015487759E+00 0.877679963850E+00 0.324945284314E+00 + -0.500000000000E-01 0.446166045167E+00 0.881846630517E+00 0.323068877088E+00 + -0.480000000000E-01 0.444322715337E+00 0.886013297183E+00 0.321201764998E+00 + -0.460000000000E-01 0.442485483105E+00 0.890179963850E+00 0.319343909643E+00 + -0.440000000000E-01 0.440654333329E+00 0.894346630517E+00 0.317495272745E+00 + -0.420000000000E-01 0.438829250895E+00 0.898513297183E+00 0.315655816157E+00 + -0.400000000000E-01 0.437010220712E+00 0.902679963850E+00 0.313825501855E+00 + -0.380000000000E-01 0.435197227715E+00 0.906846630517E+00 0.312004291943E+00 + -0.360000000000E-01 0.433390256865E+00 0.911013297183E+00 0.310192148650E+00 + -0.340000000000E-01 0.431589293145E+00 0.915179963850E+00 0.308389034332E+00 + -0.320000000000E-01 0.429794321567E+00 0.919346630517E+00 0.306594911468E+00 + -0.300000000000E-01 0.428005327164E+00 0.923513297183E+00 0.304809742662E+00 + -0.280000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.260000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.240000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.220000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.200000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.180000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.160000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.140000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.120000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.100000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.800000000000E-02 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.600000000000E-02 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.400000000000E-02 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + -0.200000000000E-02 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.000000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.200000000000E-02 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.400000000000E-02 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.600000000000E-02 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.800000000000E-02 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.100000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.120000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.140000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.160000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.180000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.200000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.220000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.240000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.260000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.280000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.300000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.320000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.340000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.360000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.380000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.400000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.420000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.440000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.460000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.480000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.500000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.520000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.540000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.560000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.580000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.600000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.620000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.640000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.660000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.680000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.700000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.720000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.740000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.760000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.780000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.800000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.820000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.840000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.860000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.880000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.900000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.920000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.940000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.960000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.980000000000E-01 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.100000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.102000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.104000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.106000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.108000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.110000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.112000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.114000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.116000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.118000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.120000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.122000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.124000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.126000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.128000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.130000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.132000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.134000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.136000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.138000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.140000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.142000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.144000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.146000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.148000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.150000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.152000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.154000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.156000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.158000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.160000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.162000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.164000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.166000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.168000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.170000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.172000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.174000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.176000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.178000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.180000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.182000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.184000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.186000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.188000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.190000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.192000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.194000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.196000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.198000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.200000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.202000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.204000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.206000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.208000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.210000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.212000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.214000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.216000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.218000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.220000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.222000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.224000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.226000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.228000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.230000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.232000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.234000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.236000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.238000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.240000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.242000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.244000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.246000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.248000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.250000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.252000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.254000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.256000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.258000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.260000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.262000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.264000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.266000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.268000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.270000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.272000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.274000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.276000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.278000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.280000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.282000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.284000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.286000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.288000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.290000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.292000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.294000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.296000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.298000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.300000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.302000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.304000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.306000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.308000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.310000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.312000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.314000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.316000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.318000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.320000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.322000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.324000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.326000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.328000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.330000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.332000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.334000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.336000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.338000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.340000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.342000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.344000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.346000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.348000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.350000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.352000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.354000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.356000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.358000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.360000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.362000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.364000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.366000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.368000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.370000000000E+00 0.426319428178E+00 0.927452620049E+00 0.303130178051E+00 + 0.372000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.374000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.376000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.378000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.380000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.382000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.384000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.386000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.388000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.390000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.392000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.394000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.396000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.398000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.400000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.402000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.404000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.406000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.408000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.410000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.412000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.414000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.416000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.418000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.420000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.422000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.424000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.426000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.428000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.430000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.432000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.434000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.436000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.438000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.440000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.442000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.444000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.446000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.448000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.450000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.452000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.454000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.456000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.458000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.460000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.462000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.464000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.466000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.468000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.470000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.472000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.474000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.476000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.478000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.480000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.482000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.484000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.486000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.488000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.490000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.492000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.494000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.496000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.498000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.500000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.502000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.504000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.506000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.508000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.510000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.512000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.514000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.516000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.518000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.520000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.522000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.524000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.526000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.528000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.530000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.532000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.534000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.536000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.538000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.540000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.542000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.544000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.546000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.548000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.550000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.552000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.554000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.556000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.558000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.560000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.562000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.564000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.566000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.568000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.570000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.572000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.574000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.576000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.578000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.580000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.582000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.584000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.586000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.588000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.590000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.592000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.594000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.596000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.598000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.600000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.602000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.604000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.606000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.608000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.610000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.612000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.614000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.616000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.618000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.620000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.622000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.624000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.626000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.628000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.630000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.632000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.634000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.636000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.638000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.640000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.642000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.644000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.646000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.648000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.650000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.652000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.654000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.656000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.658000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.660000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.662000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.664000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.666000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.668000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.670000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.672000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.674000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.676000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.678000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.680000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.682000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.684000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.686000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.688000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.690000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.692000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.694000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.696000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.698000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.700000000000E+00 0.265573711705E+00 0.927452620049E+00 0.303130178051E+00 + 0.702000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.704000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.706000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.708000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.710000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.712000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.714000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.716000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.718000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.720000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.722000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.724000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.726000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.728000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.730000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.732000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.734000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.736000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.738000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.740000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.742000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.744000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.746000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.748000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.750000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.752000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.754000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.756000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.758000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.760000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.762000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.764000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.766000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.768000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.770000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.772000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.774000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.776000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.778000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.780000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.782000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.784000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.786000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.788000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.790000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.792000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.794000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.796000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.798000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.800000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.802000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.804000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.806000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.808000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.810000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.812000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.814000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.816000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.818000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.820000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.822000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.824000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.826000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.828000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.830000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.832000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.834000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.836000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.838000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.840000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.842000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.844000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.846000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.848000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.850000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.852000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.854000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.856000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.858000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.860000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.862000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.864000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.866000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.868000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.870000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.872000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.874000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.876000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.878000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.880000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.882000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.884000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.886000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.888000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.890000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.892000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.894000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.896000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.898000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.900000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.902000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.904000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.906000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.908000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.910000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.912000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.914000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.916000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.918000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.920000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.922000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.924000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.926000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.928000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.930000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.932000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.934000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.936000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.938000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.940000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.942000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.944000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.946000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.948000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.950000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.952000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.954000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.956000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.958000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.960000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.962000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.964000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.966000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.968000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.970000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.972000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.974000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.976000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.978000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.980000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.982000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.984000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.986000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.988000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.990000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.992000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.994000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.996000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.998000000000E+00 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 + 0.100000000000E+01 0.125000000000E+00 0.000000000000E+00 0.100000000000E+00 diff --git a/testcases/SodProblem/postProc.py b/testcases/SodProblem/postProc.py new file mode 100644 index 0000000..e16738b --- /dev/null +++ b/testcases/SodProblem/postProc.py @@ -0,0 +1,127 @@ +import numpy as np +import json +import matplotlib.pyplot as plt +import sys +import os +import h5py + +############################################################################### +## Read Exact Solution ## +############################################################################### + +def readExact(): + # Open file + f = open('exact.txt', 'r') + + x = [] + u = [] + p = [] + rho = [] + e = [] + + # Loop over lines and extract variables of interest + for line in f: + line = line.strip() + columns = line.split() + x.append( float(columns[0])) + rho.append(float(columns[1])) + u.append( float(columns[2])) + p.append( float(columns[3])) + + f.close() + + x = [(xp+1)*0.5 for xp in x] + + e = [xp/xr/0.4 for xp, xr in zip(p,rho)] + + return x, u, p, rho, e + +############################################################################### +# Read Exact Solution # +############################################################################### + +xExact, uExact, pExact, rhoExact, eExact = readExact() + +def L2(err,dx): + tot = sum(map(sum, err**2*dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + vol = sum(map(sum, dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + return np.sqrt(tot/vol) + +def process(case, i): + dir_name = os.path.join(os.environ['HTR_DIR'], 'testcases/SodProblem') + soleil_input_file = os.path.join(dir_name, str(case)+'.json') + +############################################################################## +# Read Prometeo Input File # +############################################################################## + + with open(soleil_input_file) as f: + data = json.load(f) + + xNum = data["Grid"]["xNum"] + xWidth = data["Grid"]["xWidth"] + + dt = data["Integrator"]["fixedDeltaTime"] + nstep = data["Integrator"]["maxIter"] + time = dt*nstep + + filename = os.path.join(dir_name, str(case)+'/sample0/fluid_iter'+str(nstep).zfill(10)+'/0,0,0-'+str(case+1)+',0,0.hdf') + hdf_filename = filename + +############################################################################## +# Read Prometeo Output Data # +############################################################################## + + f = h5py.File(hdf_filename, 'r') + + # Get the data + x = f['centerCoordinates'][0,0,:][:,0] + dx = f['cellWidth' ][0,0,:][:,0] + u = f['velocity' ][0,0,:][:,0] + p = f['pressure' ][0,0,:] + rho = f['rho' ][0,0,:] + T = f['temperature' ][0,0,:] + + e = T/0.4 + + ############################################################################## + # Plot # + ############################################################################## + + plt.figure(1+i*4) + plt.plot(xExact, uExact, '-k', label='Reference solution') + plt.plot( x, u, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$', fontsize = 20) + plt.ylabel(r'$u$', fontsize = 20) + plt.legend() + plt.savefig('Velocity_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(2+i*4) + plt.plot(xExact, pExact, '-k', label='Reference solution') + plt.plot( x, p, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$', fontsize = 20) + plt.ylabel(r'$P$', fontsize = 20) + plt.legend() + plt.savefig('Pressure_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(3+i*4) + plt.plot(xExact, rhoExact, '-k', label='Reference solution') + plt.plot( x, rho, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$' , fontsize = 20) + plt.ylabel(r'$\rho$', fontsize = 20) + plt.legend() + plt.savefig('Density_'+str(case)+'.eps', bbox_inches='tight') + + plt.figure(4+i*4) + plt.plot(xExact, eExact, '-k', label='Reference solution') + plt.plot( x, e, '-ob', label='HTR solver', markersize=4.5) + plt.xlabel(r'$x$', fontsize = 20) + plt.ylabel(r'$e$', fontsize = 20) + plt.legend() + plt.savefig('InternalEnergy_'+str(case)+'.eps', bbox_inches='tight') + + return x, u, p, rho, e + +plt.rcParams.update({'font.size': 12}) +x, u, p, r, e = process(100, 0) +plt.show() diff --git a/testcases/SodProblem/run.sh b/testcases/SodProblem/run.sh new file mode 100644 index 0000000..6b8f731 --- /dev/null +++ b/testcases/SodProblem/run.sh @@ -0,0 +1,7 @@ +rm -rf sample* slurm* + +for cases in 100; do + rm -r $cases + mkdir $cases + USE_CUDA=1 PROFILE=0 QUEUE="gpu" $HTR_DIR/src/prometeo.sh -i $cases.json -o $cases +done diff --git a/testcases/TaylorGreen2D/base.json b/testcases/TaylorGreen2D/base.json new file mode 100644 index 0000000..78542b3 --- /dev/null +++ b/testcases/TaylorGreen2D/base.json @@ -0,0 +1,169 @@ +{ + "Mapping" : { + "tiles" : [1,1,1], + "tilesPerRank" : [1,1,1], + "sampleId" : -1, + "outDir" : "", + "wallTime" : 10000 + }, + + "Grid" : { + "xNum" : 16, + "yNum" : 16, + "zNum" : 1, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 6.28318530718, + "yWidth" : 6.28318530718, + "zWidth" : 1.0, + "xType" : "Uniform", + "yType" : "Uniform", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 1000, + "maxTime" : 0.5, + "cfl" : -1.0, + "fixedDeltaTime" : 5.0e-4, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "Periodic", + "xBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCLeftP" : -1.0, + "xBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "Periodic", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : -1.0, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "Periodic", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : 0.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "Periodic", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : 0.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 1.0, + "gamma" : 1.4, + "prandtl" : 0.71, + "viscosityModel" : "Constant", + "constantVisc" : 1.0, + "powerlawViscRef" : -1.0, + "powerlawTempRef" : -1.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "TaylorGreen2DVortex", + "restartDir" : "", + "initParams" : [1.0e4, 1.0e4, 1.0, 1.0, 1.0], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { "type" : "OFF" } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 1000, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } +} diff --git a/testcases/TaylorGreen2D/postProc.py b/testcases/TaylorGreen2D/postProc.py new file mode 100644 index 0000000..1c15583 --- /dev/null +++ b/testcases/TaylorGreen2D/postProc.py @@ -0,0 +1,141 @@ +import numpy as np +import json +import argparse +import matplotlib.pyplot as plt +import matplotlib.ticker +import sys +import os +import h5py + +parser = argparse.ArgumentParser() +parser.add_argument('-n', '--num_times', type=int, default=4) +args = parser.parse_args() + +############################################################################## +# Compute Analytical Solution # +############################################################################## +def u(xy,mu,rho,time): + return np.sin(xy[:,:,0])*np.cos(xy[:,:,1])*np.exp(-2*mu/rho[:]*time) + +def v(xy,mu,rho,time): + return -np.cos(xy[:,:,0])*np.sin(xy[:,:,1])*np.exp(-2*mu/rho[:]*time) + +def L2(err,dx): + tot = sum(map(sum, err**2*dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + vol = sum(map(sum, dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + return np.sqrt(tot/vol) + +def process(case): + dir_name = os.path.join(os.environ['HTR_DIR'], 'testcases/TaylorGreen2D') + soleil_input_file = os.path.join(dir_name, 'TaylorGreen2D_'+str(case)+'.json') + +############################################################################## +# Read Prometeo Input File # +############################################################################## + + with open(soleil_input_file) as f: + data = json.load(f) + + xNum = data["Grid"]["xNum"] + yNum = data["Grid"]["yNum"] + xWidth = data["Grid"]["xWidth"] + yWidth = data["Grid"]["yWidth"] + constantVisc = data["Flow"]["constantVisc"] + + Area = xWidth*yWidth + + dt = data["Integrator"]["fixedDeltaTime"] + nstep = data["Integrator"]["maxIter"] + time = dt*nstep + + filename = os.path.join(dir_name, str(case)+'/sample0/fluid_iter'+str(nstep).zfill(10)+'/0,0,0-'+str(case-1)+','+str(case-1)+',0.hdf') + hdf_filename = filename + +############################################################################## +# Read Prometeo Output Data # +############################################################################## + + f = h5py.File(hdf_filename, 'r') + + # Get the data + centerCoordinates = f['centerCoordinates'] + cellWidth = f['cellWidth'] + pressure = f['pressure'] + rho = f['rho'] + velocity = f['velocity'] + + # Get dimension of data + Nx = rho.shape[2] + Ny = rho.shape[1] + Nz = rho.shape[0] + + # Get simulation data along a line (ignore ghost cells) + z_slice_idx = 0 + + xy_slice = centerCoordinates[z_slice_idx,:,:][:,:] + dx_slice = cellWidth[z_slice_idx,:,:][:,:] + u_slice = velocity[z_slice_idx,:,:][:,:] + rho_slice = rho[z_slice_idx,:,:] + +############################################################################## +# Compute Analytical Solution # +############################################################################## + + u_slice_analytical = u(xy_slice, constantVisc, rho_slice, time) + v_slice_analytical = v(xy_slice, constantVisc, rho_slice, time) + +############################################################################## +# Compare Solutions # +############################################################################## + + uerr = (u_slice[:,:,0]-u_slice_analytical) + verr = (u_slice[:,:,1]-v_slice_analytical) + U_L2_error = L2(uerr, dx_slice) + V_L2_error = L2(verr, dx_slice) + print('U_L2 Error = {}'.format(U_L2_error)) + print('V_L2 Error = {}'.format(V_L2_error)) + + return U_L2_error, V_L2_error + +Nc = args.num_times +cases = [] +U_L2 = [] +V_L2 = [] + +cases.append(16) +for i in range(1,Nc): + cases.append(cases[i-1]*2) + +for i in range(Nc): + U_L2.append(1.0) + V_L2.append(1.0) + U_L2[i], V_L2[i] = process(cases[i]) + +############################################################################## +# Plot # +############################################################################## + +firOrd = [] +secOrd = [] +thiOrd = [] +for i in range(Nc): + firOrd.append(1.0/(cases[i] )*1e-1) + secOrd.append(1.0/(cases[i]**2)*1e-1) + thiOrd.append(1.0/(cases[i]**3)*1e-1) + +plt.figure(1) +plt.loglog(cases, U_L2, '-ob', label='u') +plt.loglog(cases, V_L2, '-or', label='v') +plt.loglog(cases, firOrd, '-k' , label='$1^{st}$ ord') +plt.loglog(cases, secOrd, '--k', label='$2^{nd}$ ord') +#plt.loglog(cases, thiOrd, '-.k', label='$3^{rd}$ ord') +plt.xlabel(r'$Np$', fontsize = 20) +plt.ylabel(r'$L_2(err)$', fontsize = 20) +plt.gca().xaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter()) +plt.gca().set_xticks([16, 32, 64, 128]) +plt.xlim([14,146]) +plt.ylim([5e-6,1e-2]) +plt.legend(loc=3) +plt.savefig('Convergence.eps', bbox_inches='tight') + +plt.show() diff --git a/testcases/TaylorGreen2D/scale_up.py b/testcases/TaylorGreen2D/scale_up.py new file mode 100755 index 0000000..46fb186 --- /dev/null +++ b/testcases/TaylorGreen2D/scale_up.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python2 + +import argparse +import json + +parser = argparse.ArgumentParser() +parser.add_argument('base_json', type=argparse.FileType('r'), default='base.json') +parser.add_argument('-n', '--num_times', type=int, default=4) +args = parser.parse_args() + +# Read base config +config = json.load(args.base_json) +assert int(config['Mapping']['tiles'][0]) / int(config['Mapping']['tilesPerRank'][0]) == 1 +assert int(config['Mapping']['tiles'][1]) / int(config['Mapping']['tilesPerRank'][1]) == 1 +assert int(config['Mapping']['tiles'][2]) / int(config['Mapping']['tilesPerRank'][2]) == 1 + +# Scale up +for i in range(0,args.num_times): + with open('TaylorGreen2D_' + str(config['Grid']['xNum']) + '.json', 'w') as fout: + json.dump(config, fout, indent=3) + config['Grid']['xNum'] *= 2 + config['Grid']['yNum'] *= 2 + config['Integrator']['maxIter'] *=2 + config['Integrator']['fixedDeltaTime'] /=2 + diff --git a/testcases/VortexAdvection2D/base.json b/testcases/VortexAdvection2D/base.json new file mode 100644 index 0000000..0f66d0d --- /dev/null +++ b/testcases/VortexAdvection2D/base.json @@ -0,0 +1,169 @@ +{ + "Mapping" : { + "tiles" : [1,1,1], + "tilesPerRank" : [1,1,1], + "sampleId" : -1, + "outDir" : "", + "wallTime" : 10000 + }, + + "Grid" : { + "xNum" : 16, + "yNum" : 16, + "zNum" : 1, + "origin" : [-5.0, -5.0, 0.0], + "xWidth" : 10.0, + "yWidth" : 10.0, + "zWidth" : 1.0, + "xType" : "Uniform", + "yType" : "Uniform", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.0, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 0, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 100, + "maxTime" : 0.2, + "cfl" : -1.0, + "fixedDeltaTime" : 2.0e-3, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "Periodic", + "xBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCLeftP" : -1.0, + "xBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "Periodic", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : -1.0, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "Periodic", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : 0.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "Periodic", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : 0.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 1.0, + "gamma" : 1.4, + "prandtl" : 0.71, + "viscosityModel" : "Constant", + "constantVisc" : 0.0, + "powerlawViscRef" : -1.0, + "powerlawTempRef" : -1.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "VortexAdvection2D", + "restartDir" : "", + "initParams" : [1.0, 1.0, 1.0, 1.0, 0.0], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { "type" : "OFF" } + }, + + "IO" : { + "wrtRestart" : true, + "restartEveryTimeSteps" : 100, + "probes" : [], + "AveragesSamplingInterval": 10, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } +} diff --git a/testcases/VortexAdvection2D/postProc.py b/testcases/VortexAdvection2D/postProc.py new file mode 100644 index 0000000..9568b09 --- /dev/null +++ b/testcases/VortexAdvection2D/postProc.py @@ -0,0 +1,230 @@ +import numpy as np +import json +import argparse +import matplotlib.pyplot as plt +import matplotlib.ticker +import sys +import os +import h5py + +beta = 5.0 +xc = 0.0 +yc = 0.0 + +parser = argparse.ArgumentParser() +parser.add_argument('-n', '--num_times', type=int, default=4) +args = parser.parse_args() + +def L2(err,dx): + tot = sum(map(sum, err**2*dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + vol = sum(map(sum, dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + return np.sqrt(tot/vol) + +def L1(err,dx): + tot = sum(map(sum, err*dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + vol = sum(map(sum, dx[:,:,0]*dx[:,:,1]*dx[:,:,2])) + return abs(tot)/vol + +def Linf(err,dx): + tot = max(map(max, abs(err))) + return tot + + +def process(case): + dir_name = os.path.join(os.environ['HTR_DIR'], 'testcases/VortexAdvection2D') + prometeo_input_file = os.path.join(dir_name, 'VortexAdvection2D_'+str(case)+'.json') + +############################################################################## +# Read Prometeo Input File # +############################################################################## + + with open(prometeo_input_file) as f: + data = json.load(f) + + xNum = data["Grid"]["xNum"] + yNum = data["Grid"]["yNum"] + xWidth = data["Grid"]["xWidth"] + yWidth = data["Grid"]["yWidth"] + xOrigin = data["Grid"]["origin"][0] + yOrigin = data["Grid"]["origin"][1] + Tinf = data["Flow"]["initParams"][1] + Uinf = data["Flow"]["initParams"][2] + Vinf = data["Flow"]["initParams"][3] + gamma = data["Flow"]["gamma"] + + dx = xWidth/xNum + dy = yWidth/yNum + Area = xWidth*yWidth + + dt = data["Integrator"]["fixedDeltaTime"] + nstep = data["Integrator"]["maxIter"] + time = dt*nstep + + ############################################################################## + # Analytical Solutions # + ############################################################################## + def unroll(x,dx,width,origin) : + xx = x - dx%width + for i in range(len(x)): + for j in range(len(x[i])): + if xx[i][j] < origin : + xx[i][j] += width + elif xx[i][j] > width+origin : + xx[i][j] -= width + return xx + + def u(xy,time): + x = unroll(xy[:,:,0], Uinf*time, xWidth, xOrigin) + y = unroll(xy[:,:,1], Vinf*time, yWidth, yOrigin) + rx = x - xc + ry = y - yc + r2 = rx**2 + ry**2 + return Uinf - beta/(2*np.pi)*np.exp(0.5*(1-r2))*(ry) + + def v(xy,time): + x = unroll(xy[:,:,0], Uinf*time,xWidth, xOrigin) + y = unroll(xy[:,:,1], Vinf*time,yWidth, yOrigin) + rx = x - xc + ry = y - yc + r2 = rx**2 + ry**2 + return Vinf + beta/(2*np.pi)*np.exp(0.5*(1-r2))*(rx) + + def T(xy,time): + x = unroll(xy[:,:,0], Uinf*time,xWidth, xOrigin) + y = unroll(xy[:,:,1], Vinf*time,yWidth, yOrigin) + rx = x - xc + ry = y - yc + r2 = rx**2 + ry**2 + return Tinf*(1.0 - (gamma-1)*beta**2/(8*gamma*np.pi**2)*np.exp(1-r2)) + + def rho(xy,time): + return T(xy,time)**(1.0/(gamma-1.0)) + + def p(xy,time): + return T(xy,time)**(gamma/(gamma-1.0)) + + filename = os.path.join(dir_name, str(case)+'/sample0/fluid_iter'+str(nstep).zfill(10)+'/0,0,0-'+str(case-1)+','+str(case-1)+',0.hdf') + hdf_filename = filename + +############################################################################## +# Read Prometeo Output Data # +############################################################################## + + f = h5py.File(hdf_filename, 'r') + + # Get the data + centerCoordinates = f['centerCoordinates'] + cellWidth = f['cellWidth'] + pressure = f['pressure'] + temperature = f['temperature'] + density = f['rho'] + velocity = f['velocity'] + + # Get dimension of data + Nx = density.shape[2] + Ny = density.shape[1] + Nz = density.shape[0] + + # Get simulation data along a line (ignore ghost cells) + z_slice_idx = 0 + # Avoid the error due to periodic boundaries + lo = int(0.10*Nx) + hi = int(0.90*Nx) + + xy_slice = centerCoordinates[z_slice_idx,lo:hi,lo:hi][:,:] + dx_slice = cellWidth[z_slice_idx,lo:hi,lo:hi][:,:] + u_slice = velocity[z_slice_idx,lo:hi,lo:hi][:,:] + T_slice = temperature[z_slice_idx,lo:hi,lo:hi] + p_slice = pressure[z_slice_idx,lo:hi,lo:hi] + rho_slice = density[z_slice_idx,lo:hi,lo:hi] + +############################################################################## +# Compute Analytical Solution # +############################################################################## + + u_slice_analytical = u(xy_slice, time) + v_slice_analytical = v(xy_slice, time) + T_slice_analytical = T(xy_slice, time) + p_slice_analytical = p(xy_slice, time) + rho_slice_analytical = rho(xy_slice, time) + +############################################################################## +# Compare Solutions # +############################################################################## + + uerr = ( u_slice[:,:,0]- u_slice_analytical)[:,:] + verr = ( u_slice[:,:,1]- v_slice_analytical)[:,:] + Terr = ( T_slice - T_slice_analytical)[:,:] + perr = ( p_slice - p_slice_analytical)[:,:] + rhoerr = (rho_slice - rho_slice_analytical)[:,:] + + U_L2_error = L2( uerr, dx_slice) + V_L2_error = L2( verr, dx_slice) + T_L2_error = L2( Terr, dx_slice) + P_L2_error = L2( perr, dx_slice) + Rho_L2_error = L2(rhoerr, dx_slice) + print('U_L2 Error = {}'.format(U_L2_error)) + print('V_L2 Error = {}'.format(V_L2_error)) + print('T_L2 Error = {}'.format(T_L2_error)) + print('P_L2 Error = {}'.format(P_L2_error)) + print('Rho_L2 Error = {}'.format(Rho_L2_error)) + + return U_L2_error, V_L2_error, T_L2_error, P_L2_error, Rho_L2_error + +Nc = args.num_times +cases = [] +U_L2 = [] +V_L2 = [] +T_L2 = [] +P_L2 = [] +Rho_L2 = [] + +cases.append(16) +for i in range(1,Nc): + cases.append(cases[i-1]*2) + +for i in range(Nc): + U_L2.append(1.0) + V_L2.append(1.0) + T_L2.append(1.0) + P_L2.append(1.0) + Rho_L2.append(1.0) + U_L2[i], V_L2[i], T_L2[i], P_L2[i], Rho_L2[i] = process(cases[i]) + +############################################################################## +# Plot # +############################################################################## + +firOrd = [] +secOrd = [] +thiOrd = [] +fouOrd = [] +fivOrd = [] +sixOrd = [] +for i in range(Nc): + firOrd.append(1.0/(cases[i] )*1e0) + secOrd.append(1.0/(cases[i]**2)*1e0) + thiOrd.append(1.0/(cases[i]**3)*1e2) + fouOrd.append(1.0/(cases[i]**4)*1e3) + fivOrd.append(1.0/(cases[i]**5)*1e4) + sixOrd.append(1.0/(cases[i]**6)*1e5) + +plt.figure(1) +plt.loglog(cases, U_L2, '-ob', label='U') +plt.loglog(cases, V_L2, '-or', label='V') +plt.loglog(cases, T_L2, '-oy', label='T') +plt.loglog(cases, P_L2, '-og', label='P') +#plt.loglog(cases, firOrd, '-k' , label='$1^{st}$ ord') +#plt.loglog(cases, secOrd, '--k', label='$2^{nd}$ ord') +plt.loglog(cases, thiOrd, '-k', label='$3^{rd}$ ord') +plt.loglog(cases, fouOrd, '--k', label='$4^{rd}$ ord') +plt.loglog(cases, fivOrd, '-.k', label='$5^{rd}$ ord') +plt.loglog(cases, sixOrd, ':k', label='$6^{rd}$ ord') +plt.xlabel(r'$Np$', fontsize = 20) +plt.ylabel(r'$L_2(err)$', fontsize = 20) +plt.gca().xaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter()) +plt.gca().set_xticks([16, 32, 64, 128, 256]) +plt.legend() +plt.savefig('Convergence.eps', bbox_inches='tight') + +plt.show() diff --git a/testcases/VortexAdvection2D/run.sh b/testcases/VortexAdvection2D/run.sh new file mode 100644 index 0000000..25318d8 --- /dev/null +++ b/testcases/VortexAdvection2D/run.sh @@ -0,0 +1,12 @@ +rm -rf sample* slurm* + +python scale_up.py base.json -n $1 + +Np=16 +for i in `seq 1 $1`; +do + rm -rf $Np + mkdir $Np + USE_CUDA=1 PROFILE=0 QUEUE="gpu" $HTR_DIR/src/prometeo.sh -i VortexAdvection2D_$Np.json -o $Np + Np=$((Np*2)) +done diff --git a/testcases/VortexAdvection2D/scale_up.py b/testcases/VortexAdvection2D/scale_up.py new file mode 100755 index 0000000..d422102 --- /dev/null +++ b/testcases/VortexAdvection2D/scale_up.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python2 + +import argparse +import json + +parser = argparse.ArgumentParser() +parser.add_argument('base_json', type=argparse.FileType('r'), default='base.json') +parser.add_argument('-n', '--num_times', type=int, default=4) +args = parser.parse_args() + +# Read base config +config = json.load(args.base_json) +assert int(config['Mapping']['tiles'][0]) / int(config['Mapping']['tilesPerRank'][0]) == 1 +assert int(config['Mapping']['tiles'][1]) / int(config['Mapping']['tilesPerRank'][1]) == 1 +assert int(config['Mapping']['tiles'][2]) / int(config['Mapping']['tilesPerRank'][2]) == 1 + +# Scale up +with open('VortexAdvection2D_' + str(config['Grid']['xNum']) + '.json', 'w') as fout: + json.dump(config, fout, indent=3) + +for i in range(1,args.num_times): + config['Grid']['xNum'] *= 2 + config['Grid']['yNum'] *= 2 + config['Integrator']['maxIter'] *=2 + config['Integrator']['fixedDeltaTime'] /=2 + with open('VortexAdvection2D_' + str(config['Grid']['xNum']) + '.json', 'w') as fout: + json.dump(config, fout, indent=3) diff --git a/testcases/scalingTest/WS/base.json b/testcases/scalingTest/WS/base.json new file mode 100644 index 0000000..4c2938b --- /dev/null +++ b/testcases/scalingTest/WS/base.json @@ -0,0 +1,180 @@ +{ + "Case" : { + "ReB" : 3000.0, + "MaB" : 3.0, + "Retau" : 290.8, + "DeltaT" : 5000, + "DeltaTStat" : 3000 + }, + + "Mapping" : { + "tiles" : [4,1,1], + "tilesPerRank" : [4,1,1], + "sampleId" : -1, + "outDir" : "", + "wallTime" : 10 + }, + + "Grid" : { + "xNum" : 256, + "yNum" : 256, + "zNum" : 288, + "origin" : [0.0, 0.0, 0.0], + "xWidth" : 0.00112787916983211, + "yWidth" : 8.975377254458182e-05, + "zWidth" : 0.0002819697924580275, + "xType" : "Uniform", + "yType" : "Tanh", + "zType" : "Uniform", + "xStretching" : 1.0, + "yStretching" : 1.3843992415368547, + "zStretching" : 1.0 + }, + + "Integrator" : { + "startIter" : 1, + "startTime" : 0.0, + "resetTime" : false, + "maxIter" : 101, + "maxTime" : 20.0, + "cfl" : -0.8, + "fixedDeltaTime" : 2.0e-11, + "implicitChemistry" : false + }, + + "BC" : { + "xBCLeft" : "Periodic", + "xBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCLeftP" : -1.0, + "xBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "xBCRight" : "Periodic", + "xBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "xBCRightP" : -1.0, + "xBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "xBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCLeft" : "IsothermalWall", + "yBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCLeftP" : -1.0, + "yBCLeftHeat" : { + "type" : "Constant", + "temperature" : 300.0 + }, + "yBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "yBCRight" : "IsothermalWall", + "yBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "yBCRightP" : -1.0, + "yBCRightHeat" : { + "type" : "Constant", + "temperature" : 300.0 + }, + "yBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCLeft" : "Periodic", + "zBCLeftInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCLeftP" : 0.0, + "zBCLeftHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCLeftMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + }, + "zBCRight" : "Periodic", + "zBCRightInflowProfile" : { + "type" : "Constant", + "velocity" : [0.0, 0.0, 0.0] + }, + "zBCRightP" : 0.0, + "zBCRightHeat" : { + "type" : "Constant", + "temperature" : -1.0 + }, + "zBCRightMixture" : { + "type" : "Constant", + "Mixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + } + } + }, + + "Flow" : { + "mixture": "ConstPropMix", + "gasConstant" : 287.15, + "gamma" : 1.4, + "prandtl" : 0.70, + "viscosityModel" : "PowerLaw", + "constantVisc" : -1.0, + "powerlawViscRef" : 1.716e-5, + "powerlawTempRef" : 273.0, + "sutherlandViscRef" : -1.0, + "sutherlandTempRef" : -1.0, + "sutherlandSRef" : -1.0, + "initCase" : "ChannelFlow", + "restartDir" : "", + "initParams" : [1.01325e5, 300.0, 1041.8382791969202, 0.10, 0.01], + "resetMixture" : false, + "initMixture" : { + "Species" : [{"Name" : "Mix", "MolarFrac" : 1.0 }] + }, + "bodyForce" : [0.0, 0.0, 0.0], + "turbForcing" : { + "type" : "OFF" + } + }, + + "IO" : { + "wrtRestart" : false, + "restartEveryTimeSteps" : 5000, + "probes" : [], + "AveragesSamplingInterval": 1, + "ResetAverages": false, + "YZAverages": [], + "XZAverages": [], + "XYAverages": [] + } + +} diff --git a/testcases/scalingTest/WS/post.py b/testcases/scalingTest/WS/post.py new file mode 100644 index 0000000..5370dde --- /dev/null +++ b/testcases/scalingTest/WS/post.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python2 + +import argparse +import collections +import matplotlib.pyplot as plt +from matplotlib.ticker import FormatStrFormatter + +parser = argparse.ArgumentParser() +parser.add_argument("-n", "--num_times", type=int, default=4) +parser.add_argument('-b', '--before', type=int, default=5) +parser.add_argument("-out", "--baseDir") +args = parser.parse_args() + +def postFile(Dir): + lineno = 0 + t_start = None + tail = collections.deque() + + with open(Dir + "/sample0/console.txt", "r") as fout: + for line in fout: + lineno += 1 + if lineno - 2 < args.before: + continue + t = float(line.split()[2]) + if t_start is None: + t_start = t + tail.append(t) + assert t_start is not None + t_end = tail[-1] + return t_end - t_start + +nodes = [] +wt = [] +for i in range(0,args.num_times): + nodes.append(2**i) + wt.append(postFile(args.baseDir + "/" + str(nodes[i]))) + +scale = wt[0] +optimal = [] +efficiency = [] +for i in range(0,args.num_times): + optimal.append(1) + efficiency.append(scale/wt[i]) + print(nodes[i], wt[i], efficiency[i]) + +plt.figure(1) +plt.semilogx(nodes, optimal, '--k', label="Optimal") +plt.semilogx(nodes, efficiency, '-ok', label="Measured") +plt.xlabel(r"nodes") +plt.ylabel(r"efficiency") +plt.xticks(nodes) +plt.minorticks_off() +plt.grid() +plt.legend() +plt.gca().xaxis.set_major_formatter(FormatStrFormatter('%d')) +plt.gca().set_ylim(0.6, 1.05) +plt.savefig(args.baseDir+".eps", bbox_inches='tight') + +plt.show() + diff --git a/testcases/scalingTest/WS/scale_up.py b/testcases/scalingTest/WS/scale_up.py new file mode 100755 index 0000000..f76de7f --- /dev/null +++ b/testcases/scalingTest/WS/scale_up.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python2 + +import argparse +import json +import os +import subprocess + +parser = argparse.ArgumentParser() +parser.add_argument("base_json", type=argparse.FileType("r"), default="base.json") +parser.add_argument("-n", "--num_times", type=int, default=4) +parser.add_argument("-out", "--baseDir") +args = parser.parse_args() + +# Read base config +config = json.load(args.base_json) +assert int(config["Mapping"]["tiles"][0]) / int(config["Mapping"]["tilesPerRank"][0]) == 1 +assert int(config["Mapping"]["tiles"][1]) / int(config["Mapping"]["tilesPerRank"][1]) == 1 +assert int(config["Mapping"]["tiles"][2]) / int(config["Mapping"]["tilesPerRank"][2]) == 1 + +baseDir = os.path.expandvars("$PWD") + "/" + args.baseDir +if not os.path.exists(baseDir): os.makedirs(baseDir) + +# Scale up +for i in range(0,args.num_times): + nodes = config["Mapping"]["tiles"][0]/config["Mapping"]["tilesPerRank"][0] + + with open(baseDir + "/" + str(nodes) + ".json", "w") as fout: + json.dump(config, fout, indent=3) + + outDir = baseDir + "/" + str(nodes) + if not os.path.exists(outDir): os.makedirs(outDir) + + command = "{} -i {} -o {}".format(os.path.expandvars("PROFILE=1 $HTR_DIR/src/prometeo.sh"), + baseDir + "/" + str(nodes) + ".json", outDir) + print(command) + subprocess.call(command, shell=True) + + config["Grid"]["xNum"] *= 2 + config["Grid"]["xWidth"] *= 2 + config["Mapping"]["tiles"][0] *=2 +