From b3c130f1ad5d576b2e70a9c17bef0570e937a327 Mon Sep 17 00:00:00 2001 From: cguzman Date: Fri, 10 Nov 2023 15:18:16 +0100 Subject: [PATCH 1/3] merge gpu branch onto main --- CMakeLists.txt | 371 +- compile/power9/README.md | 8 + compile/power9/check.sh | 9 + compile/power9/compile.camp.sh | 72 + .../power9/compile.cvode-3.4-alpha.power9.sh | 35 + compile/power9/compile.cvode.camp.sh | 3 + .../compile.json-fortran-6.1.0.power9.sh | 12 + compile/power9/compile.libs.camp.sh | 37 + compile/power9/compile.suiteSparse.power9.sh | 19 + compile/power9/cuda_memcheck.sh | 24 + compile/power9/cvode.camp.run.sh | 5 + compile/power9/cvode.camp.sh | 4 + compile/power9/debug.camp.diff.sh | 23 + compile/power9/debug.cvode.camp.diff.sh | 23 + compile/power9/make.camp.sh | 8 + compile/power9/make.cvode.camp.sh | 19 + compile/power9/portability.md | 6 + compile/power9/run.sh | 4 + compile/power9/sbatch_run.sh | 12 + compile/ubuntu/compile_camp.sh | 4 + compile/ubuntu/compile_cvode.sh | 23 + data/CAMP_v1_paper/README.md | 7 +- data/CAMP_v1_paper/binned/mock_monarch.F90 | 3 - .../binned/test_monarch_binned.sh | 7 +- data/CAMP_v1_paper/modal/mock_monarch.F90 | 3 - .../CAMP_v1_paper/modal/test_monarch_modal.sh | 6 +- .../boot_camp/part_1_code/box_model.F90 | 16 +- .../boot_camp/part_3_code/box_model.F90 | 1 - .../boot_camp/part_4_code/box_model.F90 | 1 - .../dev_camp/CAMP_dev_tutorial.F90 | 588 ++ doc/references.bib | 36 - mechanisms/cb05cl_ae5/cb05cl_ae5_species.json | 26 +- mechanisms/eqsam_v03d/eqsam_v03d_mech.json | 145 + mechanisms/eqsam_v03d/eqsam_v03d_spec.json | 234 + src/Jacobian.c | 8 +- src/aero_phase_solver.c | 5 +- src/aero_rep_factory.F90 | 2 +- src/camp_common.h | 78 +- src/camp_core.F90 | 231 +- src/camp_debug.h | 32 +- src/camp_solver.c | 586 +- src/camp_solver.h | 16 +- src/camp_solver_data.F90 | 140 +- src/cuda/.clang-format | 2 + src/cuda/cuda_structs.h | 193 + src/cuda/cvode_cuda.cu | 1998 ++++++ src/cuda/cvode_cuda.h | 99 + src/cuda/cvode_gpu.cu | 663 ++ src/cuda/cvode_gpu.h | 29 + src/cuda/cvode_init.cu | 346 + src/debug_and_stats/camp_debug_2.c | 143 + src/debug_and_stats/camp_debug_2.h | 22 + src/debug_diff_check.c | 3 +- src/rxn_factory.F90 | 2 +- src/rxn_solver.c | 46 - src/rxn_solver.h | 3 +- src/rxns.h | 1 + src/rxns/rxn_arrhenius.c | 3 +- src/util.h | 15 + test/chemistry/cb05cl_ae5/cb05cl_ae5.map | 2 +- ...5_Function.f90 => cb05cl_ae5_Function.F90} | 4 +- ...l_ae5_Global.f90 => cb05cl_ae5_Global.F90} | 4 +- ...itialize.f90 => cb05cl_ae5_Initialize.F90} | 2 +- .../cb05cl_ae5/cb05cl_ae5_Integrator.F90 | 5848 ++++++++--------- ...5_Jacobian.f90 => cb05cl_ae5_Jacobian.F90} | 4 +- ...cobianSP.f90 => cb05cl_ae5_JacobianSP.F90} | 4 +- ...gebra.f90 => cb05cl_ae5_LinearAlgebra.F90} | 4 +- ...b05cl_ae5_Main.f90 => cb05cl_ae5_Main.F90} | 4 +- ...5cl_ae5_Model.f90 => cb05cl_ae5_Model.F90} | 0 ...ae5_Monitor.f90 => cb05cl_ae5_Monitor.F90} | 4 +- ...rameters.f90 => cb05cl_ae5_Parameters.F90} | 4 +- ...Precision.f90 => cb05cl_ae5_Precision.F90} | 0 ...5cl_ae5_Rates.f90 => cb05cl_ae5_Rates.F90} | 4 +- ...b05cl_ae5_Util.f90 => cb05cl_ae5_Util.F90} | 4 +- .../cb05cl_ae5/cb05cl_ae5_abs_tol.json | 5 - .../chemistry/cb05cl_ae5/cb05cl_ae5_init.json | 23 +- .../cb05cl_ae5/config_cb05cl_ae5_big.json | 8 - test/chemistry/cb05cl_ae5/test_cb05cl_ae5.F90 | 166 +- .../cb05cl_ae5/test_cb05cl_ae5_big.F90 | 1254 ---- .../cb05cl_ae5/test_chemistry_cb05cl_ae5.sh | 10 +- .../test_chemistry_cb05cl_ae5_big.sh | 30 - .../test_chemistry_cb05cl_ae5_scalability.sh | 4 +- test/monarch/README.md | 21 + test/monarch/TestMonarch.py | 38 + test/monarch/TestMonarch1.py | 38 + test/monarch/TestMonarch2.py | 39 + test/monarch/TestMonarch3.py | 39 + test/monarch/TestMonarch4.py | 38 + test/monarch/camp_monarch_interface.F90 | 1043 ++- test/monarch/checkGPU.py | 32 + test/monarch/checkGPU.sh | 5 + test/monarch/cloudJ/COPYRIGHT.txt | 1 - test/monarch/cloudJ/cld_sub_mod.f90 | 1226 ---- test/monarch/cloudJ/fjx_cmn_mod.f90 | 242 - test/monarch/cloudJ/fjx_init_mod.f90 | 863 --- test/monarch/cloudJ/fjx_sub_mod.f90 | 2452 ------- test/monarch/config_cb05.json | 6 - test/monarch/config_monarch_mod37.json | 16 - test/monarch/config_simple.json | 5 - test/monarch/config_simple_cb05.json | 7 - test/monarch/config_solver_test.json | 5 - test/monarch/diff_TestMonarch.py | 34 + test/monarch/interface_monarch_mod37.json | 252 - test/monarch/interface_simple.json | 25 - test/monarch/interface_solver_test.json | 51 - test/monarch/mainMonarch.py | 358 + test/monarch/math_functions.py | 37 + test/monarch/mock_monarch.F90 | 692 +- .../monarch_box_binned/aerosol_phases.json | 37 - .../monarch_mod37_aerosol_representation.json | 56 - ...arch_mod37_aerosol_representation.json.org | 56 - .../mechanism.json | 93 - .../species.json | 125 - .../monarch_box_modal/aerosol_phases.json | 37 - .../monarch_box_modal/custom_species.json | 100 - .../monarch_mod37_aerosol_representation.json | 71 - .../partitioning_species_params.json | 410 -- .../mechanism.json | 93 - .../species.json | 125 - test/monarch/monarch_mod37_2_product_SOA.json | 141 - .../monarch_mod37_aerosol_activity.json | 339 - .../monarch/monarch_mod37_aerosol_phases.json | 48 - .../monarch_mod37_aerosol_representation.json | 59 - .../monarch_mod37_aerosol_species.json | 295 - test/monarch/monarch_mod37_comp.txt | 102 - .../monarch_mod37_inorganic_partitioning.json | 130 - .../monarch/monarch_mod37_inorganic_rxns.json | 95 - test/monarch/monarch_mod37_species.json | 18 - test/monarch/monarch_original.F90 | 56 - test/monarch/plot.conf | 9 - test/monarch/plot_functions.py | 27 + test/monarch/plot_simple.conf | 9 - test/monarch/run.sh | 29 + test/monarch/sbatch_run.sh | 22 + test/monarch/settings/TestMonarch.json | 40 + .../cb05_paperV2}/cb05_abs_tol.json | 0 .../cb05_paperV2}/cb05_mechanism.json | 0 .../cb05_paperV2}/cb05_species.json | 0 .../monarch/settings/cb05_paperV2/config.json | 10 + .../cb05_paperV2}/custom_species.json | 0 .../settings/cb05_paperV2/interface.json | 173 + .../partitioning_species_params.json | 0 .../settings/config_variables_c_solver.txt | 2 + .../monarch_cb05}/cb05_abs_tol.json | 5 - .../monarch_cb05/cb05_abs_tol_lower_tol.json} | 9 +- .../monarch_cb05}/cb05_mechanism.json | 0 .../cb05_mechanism_nobaserates.json} | 70 +- .../cb05_mechanism_scalingfactor.json} | 47 +- .../cb05_mechanism_yarwood2005.json | 2634 ++++++++ .../cb05_mechanism_yield_positive.json | 3155 +++++++++ .../monarch_cb05}/cb05_species.json | 29 +- .../monarch/settings/monarch_cb05/config.json | 8 + .../settings/monarch_cb05/interface.json | 170 + .../monarch_cb05/monarch_cell_init_concs.json | 198 + test/monarch/simple_comp.txt | 102 - test/monarch/solver_test_mech.json | 302 - test/monarch/test_monarch_1.sh | 39 - test/monarch/test_monarch_2.sh | 39 - test/monarch_output/stats_monarch_netcdf.py | 110 + test/monarch_output/tmp.py | 50 + .../unit_rxn_data/test_aqueous_equilibrium.sh | 8 +- test/unit_rxn_data/test_rxn_CMAQ_H2O2.F90 | 2 +- test/unit_tests/unit_test_driver.F90 | 20 +- tool/format_code.sh | 9 + 164 files changed, 17043 insertions(+), 14187 deletions(-) create mode 100644 compile/power9/README.md create mode 100644 compile/power9/check.sh create mode 100644 compile/power9/compile.camp.sh create mode 100644 compile/power9/compile.cvode-3.4-alpha.power9.sh create mode 100644 compile/power9/compile.cvode.camp.sh create mode 100644 compile/power9/compile.json-fortran-6.1.0.power9.sh create mode 100644 compile/power9/compile.libs.camp.sh create mode 100644 compile/power9/compile.suiteSparse.power9.sh create mode 100644 compile/power9/cuda_memcheck.sh create mode 100644 compile/power9/cvode.camp.run.sh create mode 100644 compile/power9/cvode.camp.sh create mode 100644 compile/power9/debug.camp.diff.sh create mode 100644 compile/power9/debug.cvode.camp.diff.sh create mode 100644 compile/power9/make.camp.sh create mode 100644 compile/power9/make.cvode.camp.sh create mode 100644 compile/power9/portability.md create mode 100644 compile/power9/run.sh create mode 100644 compile/power9/sbatch_run.sh create mode 100644 compile/ubuntu/compile_camp.sh create mode 100644 compile/ubuntu/compile_cvode.sh create mode 100644 doc/camp_tutorial/dev_camp/CAMP_dev_tutorial.F90 create mode 100644 mechanisms/eqsam_v03d/eqsam_v03d_mech.json create mode 100644 mechanisms/eqsam_v03d/eqsam_v03d_spec.json create mode 100644 src/cuda/.clang-format create mode 100644 src/cuda/cuda_structs.h create mode 100644 src/cuda/cvode_cuda.cu create mode 100644 src/cuda/cvode_cuda.h create mode 100644 src/cuda/cvode_gpu.cu create mode 100644 src/cuda/cvode_gpu.h create mode 100644 src/cuda/cvode_init.cu create mode 100644 src/debug_and_stats/camp_debug_2.c create mode 100644 src/debug_and_stats/camp_debug_2.h rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Function.f90 => cb05cl_ae5_Function.F90} (99%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Global.f90 => cb05cl_ae5_Global.F90} (95%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Initialize.f90 => cb05cl_ae5_Initialize.F90} (97%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Jacobian.f90 => cb05cl_ae5_Jacobian.F90} (99%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_JacobianSP.f90 => cb05cl_ae5_JacobianSP.F90} (98%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_LinearAlgebra.f90 => cb05cl_ae5_LinearAlgebra.F90} (99%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Main.f90 => cb05cl_ae5_Main.F90} (94%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Model.f90 => cb05cl_ae5_Model.F90} (100%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Monitor.f90 => cb05cl_ae5_Monitor.F90} (99%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Parameters.f90 => cb05cl_ae5_Parameters.F90} (97%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Precision.f90 => cb05cl_ae5_Precision.F90} (100%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Rates.f90 => cb05cl_ae5_Rates.F90} (99%) rename test/chemistry/cb05cl_ae5/{cb05cl_ae5_Util.f90 => cb05cl_ae5_Util.F90} (98%) delete mode 100644 test/chemistry/cb05cl_ae5/config_cb05cl_ae5_big.json delete mode 100644 test/chemistry/cb05cl_ae5/test_cb05cl_ae5_big.F90 delete mode 100755 test/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5_big.sh create mode 100644 test/monarch/README.md create mode 100644 test/monarch/TestMonarch.py create mode 100644 test/monarch/TestMonarch1.py create mode 100644 test/monarch/TestMonarch2.py create mode 100644 test/monarch/TestMonarch3.py create mode 100644 test/monarch/TestMonarch4.py create mode 100644 test/monarch/checkGPU.py create mode 100644 test/monarch/checkGPU.sh delete mode 100644 test/monarch/cloudJ/COPYRIGHT.txt delete mode 100644 test/monarch/cloudJ/cld_sub_mod.f90 delete mode 100644 test/monarch/cloudJ/fjx_cmn_mod.f90 delete mode 100644 test/monarch/cloudJ/fjx_init_mod.f90 delete mode 100644 test/monarch/cloudJ/fjx_sub_mod.f90 delete mode 100644 test/monarch/config_cb05.json delete mode 100644 test/monarch/config_monarch_mod37.json delete mode 100644 test/monarch/config_simple.json delete mode 100644 test/monarch/config_simple_cb05.json delete mode 100644 test/monarch/config_solver_test.json create mode 100644 test/monarch/diff_TestMonarch.py delete mode 100644 test/monarch/interface_monarch_mod37.json delete mode 100644 test/monarch/interface_simple.json delete mode 100644 test/monarch/interface_solver_test.json create mode 100644 test/monarch/mainMonarch.py create mode 100644 test/monarch/math_functions.py delete mode 100755 test/monarch/monarch_box_binned/aerosol_phases.json delete mode 100755 test/monarch/monarch_box_binned/monarch_mod37_aerosol_representation.json delete mode 100755 test/monarch/monarch_box_binned/monarch_mod37_aerosol_representation.json.org delete mode 100755 test/monarch/monarch_box_binned/tsigaridis_2_product_SOA_scheme/mechanism.json delete mode 100755 test/monarch/monarch_box_binned/tsigaridis_2_product_SOA_scheme/species.json delete mode 100755 test/monarch/monarch_box_modal/aerosol_phases.json delete mode 100755 test/monarch/monarch_box_modal/custom_species.json delete mode 100755 test/monarch/monarch_box_modal/monarch_mod37_aerosol_representation.json delete mode 100755 test/monarch/monarch_box_modal/partitioning_species_params.json delete mode 100755 test/monarch/monarch_box_modal/tsigaridis_2_product_SOA_scheme/mechanism.json delete mode 100755 test/monarch/monarch_box_modal/tsigaridis_2_product_SOA_scheme/species.json delete mode 100644 test/monarch/monarch_mod37_2_product_SOA.json delete mode 100644 test/monarch/monarch_mod37_aerosol_activity.json delete mode 100644 test/monarch/monarch_mod37_aerosol_phases.json delete mode 100644 test/monarch/monarch_mod37_aerosol_representation.json delete mode 100644 test/monarch/monarch_mod37_aerosol_species.json delete mode 100644 test/monarch/monarch_mod37_comp.txt delete mode 100644 test/monarch/monarch_mod37_inorganic_partitioning.json delete mode 100644 test/monarch/monarch_mod37_inorganic_rxns.json delete mode 100644 test/monarch/monarch_mod37_species.json delete mode 100644 test/monarch/monarch_original.F90 delete mode 100644 test/monarch/plot.conf create mode 100644 test/monarch/plot_functions.py delete mode 100644 test/monarch/plot_simple.conf create mode 100644 test/monarch/run.sh create mode 100644 test/monarch/sbatch_run.sh create mode 100644 test/monarch/settings/TestMonarch.json rename test/monarch/{monarch_box_binned => settings/cb05_paperV2}/cb05_abs_tol.json (100%) rename test/monarch/{monarch_box_binned => settings/cb05_paperV2}/cb05_mechanism.json (100%) rename test/monarch/{monarch_box_binned => settings/cb05_paperV2}/cb05_species.json (100%) create mode 100644 test/monarch/settings/cb05_paperV2/config.json rename test/monarch/{monarch_box_binned => settings/cb05_paperV2}/custom_species.json (100%) create mode 100644 test/monarch/settings/cb05_paperV2/interface.json rename test/monarch/{monarch_box_binned => settings/cb05_paperV2}/partitioning_species_params.json (100%) create mode 100644 test/monarch/settings/config_variables_c_solver.txt rename test/monarch/{monarch_box_modal => settings/monarch_cb05}/cb05_abs_tol.json (98%) rename test/monarch/{cb05cl_ae5_abs_tol.json => settings/monarch_cb05/cb05_abs_tol_lower_tol.json} (98%) rename test/monarch/{monarch_box_modal => settings/monarch_cb05}/cb05_mechanism.json (100%) rename test/monarch/{monarch_box_modal/cb05_mechanism.noR142R143.json => settings/monarch_cb05/cb05_mechanism_nobaserates.json} (98%) rename test/monarch/{monarch_box_binned/cb05_mechanism.noR142R143.json => settings/monarch_cb05/cb05_mechanism_scalingfactor.json} (98%) create mode 100644 test/monarch/settings/monarch_cb05/cb05_mechanism_yarwood2005.json create mode 100644 test/monarch/settings/monarch_cb05/cb05_mechanism_yield_positive.json rename test/monarch/{monarch_box_modal => settings/monarch_cb05}/cb05_species.json (94%) create mode 100644 test/monarch/settings/monarch_cb05/config.json create mode 100644 test/monarch/settings/monarch_cb05/interface.json create mode 100644 test/monarch/settings/monarch_cb05/monarch_cell_init_concs.json delete mode 100644 test/monarch/simple_comp.txt delete mode 100644 test/monarch/solver_test_mech.json delete mode 100755 test/monarch/test_monarch_1.sh delete mode 100755 test/monarch/test_monarch_2.sh create mode 100644 test/monarch_output/stats_monarch_netcdf.py create mode 100644 test/monarch_output/tmp.py create mode 100644 tool/format_code.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index cdf7b3ff6..69f9605c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.10) # Require 2.6.4 due to -I/usr/include behavior: # http://www.cmake.org/Bug/view.php?id=8598 # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35707 @@ -25,17 +25,25 @@ else () endif () ###################################################################### -# options +#Set all options to OFF by default due to bug on CMake 3.15 option(ENABLE_GSL "Enable GSL library for Jacobian evaluation" OFF) option(ENABLE_MPI "Enable MPI parallel support" OFF) option(ENABLE_DEBUG "Compile debugging functions" OFF) option(FAILURE_DETAIL "Output conditions before and after solver failures" OFF) -option(ENABLE_CXX "Enable C++" OFF) option(ENABLE_GPU "Enable use of GPUs in chemistry solving" OFF) +option(ENABLE_NETCDF "Include NETCDF package" OFF) +option(DISABLE_INSTALL_OPTIONS "" OFF) +option(DISABLE_TESTS "" OFF) + mark_as_advanced(FORCE ENABLE_DEBUG FAILURE_DETAIL) +#Missing CMake version >=3.14 in Github Docker to use CREATE_LINK +#file(CREATE_LINK ${CMAKE_CURRENT_SOURCE_DIR}/test/monarch/out ${CMAKE_BINARY_DIR}/out SYMBOLIC) +#file(CREATE_LINK ${CMAKE_CURRENT_SOURCE_DIR}/test/monarch/settings ${CMAKE_BINARY_DIR}/settings SYMBOLIC) + + ###################################################################### # CPack @@ -45,6 +53,37 @@ set(CPACK_SOURCE_IGNORE_FILES "${CPACK_SOURCE_IGNORE_FILES};/.*~$;/[.].*/;/build include(CPack) +###################################################################### +# NetCDF + +if(ENABLE_NETCDF) +find_path(NETCDF_INCLUDE_DIR netcdf.mod NETCDF.mod + DOC "NetCDF include directory (must contain netcdf.mod)" + PATHS + $ENV{NETCDF_FORTRAN_HOME}/include + $ENV{NETCDF_HOME}/include + /usr/lib/gfortran/modules + /usr/lib64/gfortran/modules + /opt/local/include) + find_library(NETCDF_C_LIB netcdf + DOC "NetCDF C library" + PATHS $ENV{NETCDF_HOME}/lib $ENV{NETCDF_HOME}/lib64 /opt/local/lib + /usr/bin) + find_library(NETCDF_FORTRAN_LIB netcdff + DOC "NetCDF Fortran library" + PATHS + $ENV{NETCDF_HOME}/lib $ENV{NETCDF_HOME}/lib64 + $ENV{NETCDF_FORTRAN_HOME}/lib $ENV{NETCDF_FORTRAN_HOME}/lib64 + /opt/local/lib /usr/bin) + set(NETCDF_LIBS ${NETCDF_C_LIB}) + if(NETCDF_FORTRAN_LIB) + set(NETCDF_LIBS ${NETCDF_LIBS} ${NETCDF_FORTRAN_LIB}) + endif() + include_directories(${NETCDF_INCLUDE_DIR}) +else() + set(NETCDF_LIBS "") +endif() + ###################################################################### # GSL @@ -70,57 +109,72 @@ endif() # MPI if(ENABLE_MPI) + find_package(MPI) + if(MPI_FOUND) + set(CMAKE_Fortran_COMPILER mpifort) + endif() + include_directories(${MPI_INCLUDE_PATH}) + include_directories(${MPI_Fortran_INCLUDE_DIRS}) + if(NOT MPI_FOUND) + message( WARNING "Not MPI found") + endif() add_definitions(-DCAMP_USE_MPI) endif() ###################################################################### -# SUNDIALS + +set(SUITE_SPARSE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../SuiteSparse) +set(SUITE_SPARSE_INCLUDE ${SUITE_SPARSE_PATH}/include) +set(SUITE_SPARSE_LIB ${SUITE_SPARSE_PATH}/lib) +set(SUNDIALS_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cvode-3.4-alpha/install) +set(SUNDIALS_PATH_INCLUDE ${SUNDIALS_PATH}/include) +set(SUNDIALS_PATH_LIB ${SUNDIALS_PATH}/lib) find_path(SUITE_SPARSE_INCLUDE_DIR klu.h DOC "SuiteSparse include directory (must have klu.h)" - PATHS $ENV{SUITE_SPARSE_HOME}/include $ENV{SUNDIALS_HOME}/include + PATHS ${SUITE_SPARSE_INCLUDE} $ENV{SUITE_SPARSE_HOME}/include ${SUNDIALS_PATH_INCLUDE} $ENV{SUNDIALS_HOME}/include /opt/local/include /usr/local/include) find_library(SUITE_SPARSE_KLU_LIB klu DOC "SuiteSparse klu library" - PATHS $ENV{SUITE_SPARSE_HOME}/lib $ENV{SUNDIALS_HOME}/lib + PATHS ${SUITE_SPARSE_LIB} $ENV{SUITE_SPARSE_HOME}/lib ${SUNDIALS_PATH_LIB} $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) find_library(SUITE_SPARSE_AMD_LIB amd DOC "SuiteSparse amd library" - PATHS $ENV{SUITE_SPARSE_HOME}/lib $ENV{SUNDIALS_HOME}/lib + PATHS ${SUITE_SPARSE_LIB} $ENV{SUITE_SPARSE_HOME}/lib ${SUNDIALS_PATH_LIB} $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) find_library(SUITE_SPARSE_BTF_LIB btf DOC "SuiteSparse btf library" - PATHS $ENV{SUITE_SPARSE_HOME}/lib $ENV{SUNDIALS_HOME}/lib + PATHS ${SUITE_SPARSE_LIB} $ENV{SUITE_SPARSE_HOME}/lib ${SUNDIALS_PATH_LIB} $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) find_library(SUITE_SPARSE_COLAMD_LIB colamd DOC "SuiteSparse colamd library" - PATHS $ENV{SUITE_SPARSE_HOME}/lib $ENV{SUNDIALS_HOME}/lib + PATHS ${SUITE_SPARSE_LIB} $ENV{SUITE_SPARSE_HOME}/lib ${SUNDIALS_PATH_LIB} $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) find_library(SUITE_SPARSE_CONFIG_LIB suitesparseconfig DOC "SuiteSparse config library" - PATHS $ENV{SUITE_SPARSE_HOME}/lib $ENV{SUNDIALS_HOME}/lib + PATHS ${SUITE_SPARSE_LIB} $ENV{SUITE_SPARSE_HOME}/lib ${SUNDIALS_PATH_LIB} $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) find_path(SUNDIALS_INCLUDE_DIR cvode/cvode.h DOC "SUNDIALS include directory (must have cvode/, sundials/, nvector/ subdirs)" - PATHS $ENV{SUNDIALS_HOME}/include /opt/local/include /usr/local/include) + PATHS ${SUNDIALS_PATH_INCLUDE} $ENV{SUNDIALS_HOME}/include /opt/local/include /usr/local/include) find_library(SUNDIALS_NVECSERIAL_LIB sundials_nvecserial DOC "SUNDIALS serial vector library" - PATHS $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) + PATHS ${SUNDIALS_PATH_LIB} $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) find_library(SUNDIALS_CVODE_LIB sundials_cvode DOC "SUNDIALS CVODE library" - PATHS $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) + PATHS ${SUNDIALS_PATH_LIB} $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) find_library(SUNDIALS_KLU_LIB sundials_sunlinsolklu DOC "SUNDIALS KLU library" - PATHS $ENV{SUITE_SPARSE_HOME}/lib $ENV{SUNDIALS_HOME}/lib + PATHS ${SUITE_SPARSE_LIB} $ENV{SUITE_SPARSE_HOME}/lib ${SUNDIALS_PATH_LIB} $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) find_library(SUNDIALS_SUNMATRIX_SPARSE_LIB sundials_sunmatrixsparse DOC "SUNDIALS SUNMatrixSparse library" - PATHS $ENV{SUITE_SPARSE_HOME}/lib $ENV{SUNDIALS_HOME}/lib + PATHS ${SUITE_SPARSE_LIB} $ENV{SUITE_SPARSE_HOME}/lib ${SUNDIALS_PATH_LIB} $ENV{SUNDIALS_HOME}/lib /opt/local/lib /usr/local/lib) -set(SUNDIALS_LIBS ${SUNDIALS_NVECSERIAL_LIB} ${SUNDIALS_CVODE_LIB} - ${SUNDIALS_KLU_LIB} ${SUNDIALS_SUNMATRIX_SPARSE_LIB} ${SUITE_SPARSE_KLU_LIB} - ${SUITE_SPARSE_COLAMD_LIB} ${SUITE_SPARSE_AMD_LIB} ${SUITE_SPARSE_BTF_LIB} - ${SUITE_SPARSE_CONFIG_LIB}) +set(SUNDIALS_LIBS ${SUITE_SPARSE_KLU_LIB} ${SUNDIALS_KLU_LIB} + ${SUNDIALS_SUNMATRIX_SPARSE_LIB} ${SUNDIALS_NVECSERIAL_LIB} + ${SUNDIALS_CVODE_LIB} ${SUITE_SPARSE_COLAMD_LIB} ${SUITE_SPARSE_AMD_LIB} + ${SUITE_SPARSE_BTF_LIB} ${SUITE_SPARSE_CONFIG_LIB}) include_directories(${SUNDIALS_INCLUDE_DIR} ${SUITE_SPARSE_INCLUDE_DIR}) add_definitions(-DCAMP_USE_SUNDIALS) add_definitions(-DCAMP_CUSTOM_CVODE) @@ -128,29 +182,35 @@ add_definitions(-DCAMP_CUSTOM_CVODE) ###################################################################### # json-fortran +if(CMAKE_C_COMPILER_ID STREQUAL "GNU") + SET(JSON_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../json-fortran-6.1.0/install/jsonfortran-gnu-6.1.0/lib) +elseif(CMAKE_C_COMPILER_ID STREQUAL "Intel") + SET(JSON_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../json-fortran-6.1.0/install/jsonfortran-intel-6.1.0/lib) +else () + message(FATAL_ERROR "CMAKE_C_COMPILER_ID UNKNOWN") +endif() find_path(JSON_INCLUDE_DIR json_module.mod - DOC "json-fortran include directory (must include json_*.mod files)" - PATHS $ENV{JSON_FORTRAN_HOME}/lib /opt/local/lib /usr/local/lib) + DOC "json-fortran include directory (must include json_*.mod files)" + PATHS ${JSON_PATH} $ENV{JSON_FORTRAN_HOME}/lib /opt/local/lib /usr/local/lib) find_library(JSON_LIB jsonfortran - DOC "json-fortran library" - PATHS $ENV{JSON_FORTRAN_HOME}/lib /opt/local/lib /usr/local/lib) + DOC "json-fortran library" + PATHS ${JSON_PATH} $ENV{JSON_FORTRAN_HOME}/lib /opt/local/lib /usr/local/lib) include_directories(${JSON_INCLUDE_DIR}) add_definitions(-DCAMP_USE_JSON) -###################################################################### -##CXX - -if(ENABLE_CXX) - add_definitions(-DCAMP_USE_CXX) - enable_language(CXX) -endif() - ###################################################################### # GPU support if (ENABLE_GPU) - add_definitions(-DCAMP_USE_GPU) + find_package(CUDA) enable_language(CUDA) + add_definitions(-DCAMP_USE_GPU) + if(ENABLE_MPI) + add_definitions(-DCAMP_DEBUG_GPU) + else() + #ENABLE_DEBUG_GPU uses MPI timers + message( ERROR "ENABLE_DEBUG_GPU NEEDS ENABLE_MPI") + endif() endif() ###################################################################### @@ -163,32 +223,41 @@ if (FAILURE_DETAIL) add_definitions(-DFAILURE_DETAIL) endif() -###################################################################### -# Unit test macro - -macro(do_unit_test test_name result) - if(ENABLE_MPI) - add_test(unit_test_${test_name} mpirun -v -np 2 ${CMAKE_BINARY_DIR}/unit_test_${test_name}) - else() - add_test(unit_test_${test_name} ${CMAKE_BINARY_DIR}/unit_test_${test_name}) - endif() - set_tests_properties(unit_test_${test_name} - PROPERTIES PASS_REGULAR_EXPRESSION ${result}) -endmacro(do_unit_test) - ###################################################################### # copy dirs +if(DISABLE_TESTS) +else () +SET(ENABLE_TESTS ON) +endif () +if(ENABLE_TESTS) add_custom_target(copy_data ALL ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/data ${CMAKE_BINARY_DIR}/data_run) add_custom_target(copy_test ALL ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/test ${CMAKE_BINARY_DIR}/test_run) add_custom_target(copy_mechanism ALL ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/mechanisms ${CMAKE_BINARY_DIR}/mechanisms_run) add_custom_target(copy_boot_camp ALL ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/doc/camp_tutorial/boot_camp ${CMAKE_BINARY_DIR}/boot_camp_run) set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES test_run mechanisms_run scenarios_run boot_camp_run) +endif() + +###################################################################### +# Unit test macro + +if (ENABLE_TESTS) + macro(do_unit_test test_name result) + if(ENABLE_MPI) + add_test(unit_test_${test_name} mpirun -v -np 1 ${CMAKE_BINARY_DIR}/unit_test_${test_name}) + else() + add_test(unit_test_${test_name} ${CMAKE_BINARY_DIR}/unit_test_${test_name}) + endif() + set_tests_properties(unit_test_${test_name} + PROPERTIES PASS_REGULAR_EXPRESSION ${result}) + endmacro(do_unit_test) +endif() ###################################################################### # tests enable_testing() +if (ENABLE_TESTS) do_unit_test(property "PASS") do_unit_test(chem_spec_data "PASS") do_unit_test(aero_phase_data "PASS") @@ -196,6 +265,7 @@ do_unit_test(jacobian "PASS") do_unit_test(aero_rep_single_particle "PASS") do_unit_test(aero_rep_modal_binned_mass "PASS") do_unit_test(camp_core "PASS") +endif() if (ENABLE_MPI) set(MPI_TEST_FLAG MPI) @@ -203,45 +273,49 @@ else() set(MPI_TEST_FLAG serial) endif() -# New unit tests (UNDER DEVELOPMENT) -add_test(test_rxn_arrhenius_mech ${CMAKE_BINARY_DIR}/test_run/unit_tests/input_files/run_rxn_arrhenius.sh ${MPI_TEST_FLAG}) - -# Old-style unit tests -add_test(test_rxn_aqueous_equilibrium ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_aqueous_equilibrium.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_CMAQ_H2O2 ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_CMAQ_H2O2.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_CMAQ_OH_HNO3 ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_CMAQ_OH_HNO3.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_condensed_phase_arrhenius ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_condensed_phase_arrhenius.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_condensed_phase_photolysis ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_condensed_phase_photolysis.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_emission ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_emission.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_first_order_loss ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_first_order_loss.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_HL_phase_transfer ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_HL_phase_transfer.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_photolysis ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_photolysis.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_SIMPOL_phase_transfer ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_SIMPOL_phase_transfer.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_surface ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_surface.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_ternary_chemical_activation ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_ternary_chemical_activation.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_troe ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_troe.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_wennberg_no_ro2 ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_wennberg_no_ro2.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_wennberg_tunneling ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_wennberg_tunneling.sh ${MPI_TEST_FLAG}) -add_test(test_rxn_wet_deposition ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_wet_deposition.sh ${MPI_TEST_FLAG}) -add_test(test_sub_model_PDFiTE ${CMAKE_BINARY_DIR}/test_run/unit_sub_model_data/test_PDFiTE.sh ${MPI_TEST_FLAG}) -add_test(test_sub_model_UNIFAC ${CMAKE_BINARY_DIR}/test_run/unit_sub_model_data/test_UNIFAC.sh ${MPI_TEST_FLAG}) -add_test(test_sub_model_ZSR_aerosol_water ${CMAKE_BINARY_DIR}/test_run/unit_sub_model_data/test_ZSR_aerosol_water.sh ${MPI_TEST_FLAG}) -add_test(test_chem_mech_solver ${CMAKE_BINARY_DIR}/test_run/chemistry/test_chemistry_1.sh ${MPI_TEST_FLAG}) -add_test(test_chemistry_cb05cl_ae5 ${CMAKE_BINARY_DIR}/test_run/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5.sh ${MPI_TEST_FLAG}) -add_test(test_MONARCH_1 ${CMAKE_BINARY_DIR}/test_run/monarch/test_monarch_1.sh ${MPI_TEST_FLAG}) -add_test(test_MONARCH_2 ${CMAKE_BINARY_DIR}/test_run/monarch/test_monarch_2.sh ${MPI_TEST_FLAG}) -add_test(boot_camp_part_1 ${CMAKE_BINARY_DIR}/boot_camp_run/part_2_code/run_part_1.sh ${MPI_TEST_FLAG}) -add_test(boot_camp_part_2 ${CMAKE_BINARY_DIR}/boot_camp_run/part_2_code/run_part_2.sh ${MPI_TEST_FLAG}) -add_test(boot_camp_part_3 ${CMAKE_BINARY_DIR}/boot_camp_run/part_3_code/run_part_3.sh ${MPI_TEST_FLAG}) -add_test(boot_camp_part_4 ${CMAKE_BINARY_DIR}/boot_camp_run/part_4_code/run_part_4.sh ${MPI_TEST_FLAG}) -add_test(camp_v1_paper_binned ${CMAKE_BINARY_DIR}/data_run/CAMP_v1_paper/binned/test_monarch_binned.sh ${MPI_TEST_FLAG}) -add_test(camp_v1_paper_modal ${CMAKE_BINARY_DIR}/data_run/CAMP_v1_paper/modal/test_monarch_modal.sh ${MPI_TEST_FLAG}) +if (ENABLE_GPU) + add_test(NAME test_gpu COMMAND checkGPU.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test/monarch) +endif() + +if (ENABLE_TESTS) + # New unit tests (UNDER DEVELOPMENT) + add_test(test_rxn_arrhenius_mech ${CMAKE_BINARY_DIR}/test_run/unit_tests/input_files/run_rxn_arrhenius.sh ${MPI_TEST_FLAG}) + + # Old-style unit tests + add_test(test_rxn_aqueous_equilibrium ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_aqueous_equilibrium.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_CMAQ_H2O2 ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_CMAQ_H2O2.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_CMAQ_OH_HNO3 ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_CMAQ_OH_HNO3.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_condensed_phase_arrhenius ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_condensed_phase_arrhenius.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_condensed_phase_photolysis ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_condensed_phase_photolysis.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_emission ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_emission.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_first_order_loss ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_first_order_loss.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_HL_phase_transfer ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_HL_phase_transfer.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_photolysis ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_photolysis.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_SIMPOL_phase_transfer ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_SIMPOL_phase_transfer.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_surface ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_surface.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_ternary_chemical_activation ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_ternary_chemical_activation.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_troe ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_troe.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_wennberg_no_ro2 ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_wennberg_no_ro2.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_wennberg_tunneling ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_wennberg_tunneling.sh ${MPI_TEST_FLAG}) + add_test(test_rxn_wet_deposition ${CMAKE_BINARY_DIR}/test_run/unit_rxn_data/test_wet_deposition.sh ${MPI_TEST_FLAG}) + add_test(test_sub_model_PDFiTE ${CMAKE_BINARY_DIR}/test_run/unit_sub_model_data/test_PDFiTE.sh ${MPI_TEST_FLAG}) + add_test(test_sub_model_UNIFAC ${CMAKE_BINARY_DIR}/test_run/unit_sub_model_data/test_UNIFAC.sh ${MPI_TEST_FLAG}) + add_test(test_sub_model_ZSR_aerosol_water ${CMAKE_BINARY_DIR}/test_run/unit_sub_model_data/test_ZSR_aerosol_water.sh ${MPI_TEST_FLAG}) + add_test(test_chem_mech_solver ${CMAKE_BINARY_DIR}/test_run/chemistry/test_chemistry_1.sh ${MPI_TEST_FLAG}) + add_test(test_chemistry_cb05cl_ae5 ${CMAKE_BINARY_DIR}/test_run/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5.sh ${MPI_TEST_FLAG}) + add_test(boot_camp_part_1 ${CMAKE_BINARY_DIR}/boot_camp_run/part_2_code/run_part_1.sh ${MPI_TEST_FLAG}) + add_test(boot_camp_part_2 ${CMAKE_BINARY_DIR}/boot_camp_run/part_2_code/run_part_2.sh ${MPI_TEST_FLAG}) + add_test(boot_camp_part_3 ${CMAKE_BINARY_DIR}/boot_camp_run/part_3_code/run_part_3.sh ${MPI_TEST_FLAG}) + add_test(boot_camp_part_4 ${CMAKE_BINARY_DIR}/boot_camp_run/part_4_code/run_part_4.sh ${MPI_TEST_FLAG}) + add_test(camp_v1_paper_binned ${CMAKE_BINARY_DIR}/data_run/CAMP_v1_paper/binned/test_monarch_binned.sh ${MPI_TEST_FLAG}) + add_test(camp_v1_paper_modal ${CMAKE_BINARY_DIR}/data_run/CAMP_v1_paper/modal/test_monarch_modal.sh ${MPI_TEST_FLAG}) +endif() ###################################################################### # camp library set(STD_C_FLAGS "-std=c99") -set(STD_CUDA_FLAGS "-dc -arch=compute_70 -code=sm_70") +set(STD_CUDA_FLAGS "-g -O3 -arch=compute_70 -code=sm_70") #-G for assembly code nsight if(${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") set(STD_F_FLAGS "-extend_source -warn truncated_source") @@ -332,65 +406,54 @@ set(SUB_MODELS_SRC ${SUB_MODELS_F_SRC} ${SUB_MODELS_C_SRC}) set(CAMP_C_SRC src/camp_solver.c src/rxn_solver.c src/aero_phase_solver.c src/aero_rep_solver.c src/sub_model_solver.c - src/time_derivative.c src/Jacobian.c src/debug_diff_check.c) + src/debug_and_stats/camp_debug_2.c + src/time_derivative.c + src/Jacobian.c src/debug_diff_check.c) set_source_files_properties(${CAMP_C_SRC} PROPERTIES COMPILE_FLAGS ${STD_C_FLAGS}) -set(CAMP_CXX_SRC "") - -if(ENABLE_GPU) +if (ENABLE_GPU) set(CAMP_CUDA_SRC - src/cuda/camp_gpu_solver.cu - src/cuda/rxns_gpu/rxn_aqueous_equilibrium.cu - src/cuda/rxns_gpu/rxn_arrhenius.cu - src/cuda/rxns_gpu/rxn_CMAQ_H2O2.cu - src/cuda/rxns_gpu/rxn_CMAQ_OH_HNO3.cu - src/cuda/rxns_gpu/rxn_condensed_phase_arrhenius.cu - src/cuda/rxns_gpu/rxn_emission.cu - src/cuda/rxns_gpu/rxn_first_order_loss.cu - src/cuda/rxns_gpu/rxn_HL_phase_transfer.cu - src/cuda/rxns_gpu/rxn_photolysis.cu - src/cuda/rxns_gpu/rxn_SIMPOL_phase_transfer.cu - src/cuda/rxns_gpu/rxn_troe.cu - src/cuda/rxns_gpu/rxn_wet_deposition.cu - src/cuda/aeros_gpu/aero_phase_solver.cu - src/cuda/aeros_gpu/aero_rep_solver.cu - src/cuda/aeros_gpu/sub_model_solver.cu - src/cuda/aero_reps_gpu/aero_rep_modal_binned_mass.cu - src/cuda/aero_reps_gpu/aero_rep_single_particle.cu) + src/cuda/cvode_cuda.cu + src/cuda/cvode_gpu.cu + src/cuda/cvode_init.cu + ) set_source_files_properties(${CAMP_CUDA_SRC} PROPERTIES COMPILE_FLAGS ${STD_CUDA_FLAGS}) set_source_files_properties(${CAMP_CUDA_SRC} PROPERTIES LANGUAGE CUDA) + set_source_files_properties(${CAMP_CUDA_SRC} PROPERTIES CUDA_SOURCE_PROPERTY_FORMAT OBJ) + else() set(CAMP_CUDA_SRC "") endif() set(CAMP_LIB_SRC - src/constants.F90 - src/util.F90 - src/mpi.F90 - src/env_state.F90 - src/rand.F90 - src/property.F90 src/chem_spec_data.F90 - src/rxn_data.F90 src/camp_state.F90 src/mechanism_data.F90 - src/camp_core.F90 src/camp_solver_data.F90 src/aero_rep_data.F90 - src/aero_phase_data.F90 src/aero_rep_factory.F90 - src/rxn_factory.F90 src/sub_model_data.F90 src/sub_model_factory.F90 - src/solver_stats.F90 - src/debug_diff_check.F90 - ${CAMP_C_SRC} ${AEROSOL_REPS_SRC} ${SUB_MODELS_SRC} ${REACTIONS_SRC} - ${CAMP_CUDA_SRC} ${GSL_SRC} ${CAMP_CXX_SRC} ) - -add_library(camplib SHARED ${CAMP_LIB_SRC}) -add_library(camplib-static STATIC ${CAMP_LIB_SRC}) - -target_link_libraries(camplib ${SUNDIALS_LIBS} ${GSL_LIBS} ${JSON_LIB}) -target_link_libraries(camplib-static ${SUNDIALS_LIBS} ${GSL_LIBS} ${JSON_LIB}) + src/constants.F90 + src/util.F90 + src/mpi.F90 + src/env_state.F90 + src/rand.F90 + src/property.F90 src/chem_spec_data.F90 + src/rxn_data.F90 src/camp_state.F90 src/mechanism_data.F90 + src/camp_core.F90 src/camp_solver_data.F90 src/aero_rep_data.F90 + src/aero_phase_data.F90 src/aero_rep_factory.F90 + src/rxn_factory.F90 src/sub_model_data.F90 src/sub_model_factory.F90 + src/solver_stats.F90 + src/debug_diff_check.F90 + ${CAMP_C_SRC} ${AEROSOL_REPS_SRC} ${SUB_MODELS_SRC} + ${REACTIONS_SRC} ${GSL_SRC} ${CAMP_CUDA_SRC}) + +add_library(camplib ${CAMP_LIB_SRC}) + +target_link_libraries(camplib ${MPI_C_LIBRARIES} ${MPI_FORTRAN_LIBRARIES}) +target_link_libraries(camplib ${NETCDF_LIBS} ${SUNDIALS_LIBS} ${GSL_LIBS} ${JSON_LIB}) +if (CUDA_FOUND) + target_link_libraries(camplib ${CUDA_LIBRARIES}) +endif() set(MODULE_DIR "${CMAKE_BINARY_DIR}/include") - set_target_properties(camplib PROPERTIES OUTPUT_NAME camp PREFIX lib @@ -398,29 +461,23 @@ set_target_properties(camplib PROPERTIES SOVERSION ${PACKAGE_VERSION} LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}) -set_target_properties(camplib-static PROPERTIES - OUTPUT_NAME camp - PREFIX lib - VERSION ${PACKAGE_VERSION} - ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib - Fortran_MODULE_DIRECTORY ${MODULE_DIR}) -###################################################################### -# Install options +if(DISABLE_INSTALL_OPTIONS) +else() include(GNUInstallDirs) -install(TARGETS camplib camplib-static +install(TARGETS camplib EXPORT camplib-targets LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" ) - set(MOD_DIR_TO_INSTALL "${MODULE_DIR}") set(MOD_DESTINATION_DIR "${CMAKE_INSTALL_INCLUDEDIR}/camp") install( CODE "file(GLOB_RECURSE MODULE_FILES \"${MOD_DIR_TO_INSTALL}/*.mod\")" CODE "file(INSTALL \${MODULE_FILES} DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${MOD_DESTINATION_DIR}\")" ) +endif() ###################################################################### # camp-chem box model @@ -449,19 +506,19 @@ set(CB5_EBI_SOLVER ) set(CB5_KPP_SOLVER - test/chemistry/cb05cl_ae5/cb05cl_ae5_Function.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_Global.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_Initialize.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_Integrator.F90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_Jacobian.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_JacobianSP.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_LinearAlgebra.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_Model.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_Monitor.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_Parameters.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_Precision.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_Rates.f90 - test/chemistry/cb05cl_ae5/cb05cl_ae5_Util.f90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Function.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Global.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Initialize.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Integrator.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Jacobian.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_JacobianSP.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_LinearAlgebra.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Model.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Monitor.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Parameters.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Precision.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Rates.F90 + test/chemistry/cb05cl_ae5/cb05cl_ae5_Util.F90 ) if(${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") @@ -473,22 +530,15 @@ endif() set_source_files_properties(${CB5_EBI_SOLVER} PROPERTIES COMPILE_FLAGS ${CB5_EBI_FLAGS}) -###################################################################### -# test_chemistry_cb05cl_ae5_big - -add_executable(test_chemistry_cb05cl_ae5_big - test/chemistry/cb05cl_ae5/test_cb05cl_ae5_big.F90 - ${CB5_EBI_SOLVER} ${CB5_KPP_SOLVER} - test/chemistry/cb05cl_ae5/module_BSC_CHEM_DATA.F90) -target_link_libraries(test_chemistry_cb05cl_ae5_big camplib) - -###################################################################### -# MONARCH interface - -add_executable(mock_monarch test/monarch/mock_monarch.F90 - test/monarch/camp_monarch_interface.F90) +if (ENABLE_GPU) + add_executable(mock_monarch test/monarch/mock_monarch.F90 + test/monarch/camp_monarch_interface.F90 + ${CB5_EBI_SOLVER} ${CB5_KPP_SOLVER} + test/chemistry/cb05cl_ae5/module_BSC_CHEM_DATA.F90) + target_link_libraries(mock_monarch camplib) +endif() -target_link_libraries(mock_monarch camplib) +if (ENABLE_TESTS) ###################################################################### # test_chemistry_cb05cl_ae5 @@ -672,3 +722,4 @@ add_executable(camp_v1_paper_modal data/CAMP_v1_paper/modal/camp_monarch_interfa target_link_libraries(camp_v1_paper_modal camplib) ###################################################################### +endif() diff --git a/compile/power9/README.md b/compile/power9/README.md new file mode 100644 index 000000000..bffc77d4a --- /dev/null +++ b/compile/power9/README.md @@ -0,0 +1,8 @@ +CAMP GPU : Instructions for [CTE-POWER](https://www.bsc.es/user-support/power.php) cluster +====== + +Run "./compile.libs.camp.sh" to compile CAMP from scratch + +Run "./make.camp.power9.sh" to execute "TestMonarch.py" test + +We recommend to use the file "TestMonarch.py" for testing the GPU branch. It includes multiple configuration variables, such as number of cells, case, MPI processes, etc. More info about the test can be found at "camp/test/monarch/". diff --git a/compile/power9/check.sh b/compile/power9/check.sh new file mode 100644 index 000000000..2a3b85736 --- /dev/null +++ b/compile/power9/check.sh @@ -0,0 +1,9 @@ +set -e +cd ../../build +make -j 4 +ctest --output-on-failure +#make test +#./unit_test_aero_rep_single_particle +cd ../test/monarch +#./checkGPU.sh +#python checkGPU.py \ No newline at end of file diff --git a/compile/power9/compile.camp.sh b/compile/power9/compile.camp.sh new file mode 100644 index 000000000..f98388fda --- /dev/null +++ b/compile/power9/compile.camp.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash + +relative_path="../../../" +curr_path=$(pwd) + +LOCAL_MACHINE=CGUZMAN +if [ $BSC_MACHINE == "power" ]; then + module load GCC/7.3.0-2.30 + module load OpenMPI/3.1.0-GCC-7.3.0-2.30 + module load JasPer/1.900.1-foss-2018b + module load netCDF/4.6.1-foss-2018b + module load netCDF-Fortran/4.4.4-foss-2018b + module load ESMF/6.3.0rp1-foss-2018b + module load CMake/3.15.3-GCCcore-7.3.0 + module load OpenBLAS/0.3.1-GCC-7.3.0-2.30 + module load CUDA/10.1.105-ES + module load Python/3.7.0-foss-2018b + module load matplotlib/3.1.1-foss-2018b-Python-3.7.0 + export NETCDF_FORTRAN_HOME=${EBROOTNETCDFMINFORTRAN} + export NETCDF_HOME=${EBROOTNETCDF} + export NETCDF_FORTRAN_LIB="/gpfs/projects/bsc32/software/rhel/7.5/ppc64le/POWER9/software/netCDF-Fortran/4.4.4-foss-2018b/lib/libnetcdff.so" + export NETCDF_INCLUDE_DIR="/gpfs/projects/bsc32/software/rhel/7.5/ppc64le/POWER9/software/netCDF/4.6.1-foss-2018b/include" + export JSON_FORTRAN_HOME=$(pwd)/$relative_path/json-fortran-6.1.0/install/jsonfortran-gnu-6.1.0 + mpifort=$(which mpifort) +elif [ $BSC_MACHINE == "mn4" ]; then + export JSON_FORTRAN_HOME=$(pwd)/$relative_path/json-fortran-6.1.0/install/jsonfortran-intel-6.1.0 + mpifort=$(which mpiifort) + module load cmake + module load gsl + module load jasper/1.900.1 + module load netcdf/4.4.1.1 + module load hdf5/1.8.19 + module load libpng/1.5.13 +elif [ LOCAL_MACHINE==CGUZMAN ]; then + mpifort=$(which mpifort) + if ! command -v mpicc &> /dev/null; then + echo "MPI is not installed. Installing..." + sudo apt update + sudo apt install -y mpi-default-dev + #if run | Invalid MIT-MAGIC-COOKIE-1 key THEN sudo apt-remove openmpi-bin AND sudo apt-get install libcr-dev mpich2 mpich2-doc + fi +else + echo "Unknown architecture" + exit +fi +export SUNDIALS_HOME=$(pwd)/$relative_path/cvode-3.4-alpha/install +export SUITE_SPARSE_HOME=$(pwd)/$relative_path/SuiteSparse + +cd ../../ +rm -rf build +mkdir build +cd build + +cmake -D CMAKE_C_COMPILER=$(which mpicc) \ +-D CMAKE_BUILD_TYPE=debug \ +-D CMAKE_C_FLAGS_DEBUG="-g -O3" \ +-D CMAKE_Fortran_FLAGS_DEBUG="-g -O3" \ +-D CMAKE_C_FLAGS_RELEASE="-std=c99" \ +-D CMAKE_Fortran_FLAGS_RELEASE="" \ +-D CMAKE_Fortran_COMPILER=$mpifort \ +-D DISABLE_TESTS=ON \ +-D ENABLE_DEBUG=OFF \ +-D FAILURE_DETAIL=OFF \ +-D ENABLE_MPI=ON \ +-D ENABLE_GPU=ON \ +-D ENABLE_GSL:BOOL=FALSE \ +-D ENABLE_NETCDF=ON \ +-D DISABLE_INSTALL_OPTIONS=TRUE \ +.. + +make -j 4 VERBOSE=1 +cd $curr_path diff --git a/compile/power9/compile.cvode-3.4-alpha.power9.sh b/compile/power9/compile.cvode-3.4-alpha.power9.sh new file mode 100644 index 000000000..ff8a40c3f --- /dev/null +++ b/compile/power9/compile.cvode-3.4-alpha.power9.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +library_path="../../../" +curr_path=$(pwd) + +if [ -z "$SUITE_SPARSE_CAMP_ROOT" ]; then + SUITE_SPARSE_CAMP_ROOT=$(pwd)/$library_path/SuiteSparse +fi + +cd $library_path/cvode-3.4-alpha +rm -r build +mkdir build +rm -rf install +mkdir install +mkdir install/examples +cd build +cmake -D CMAKE_BUILD_TYPE=debug \ +-D CMAKE_C_FLAGS_DEBUG="-O3" \ +-D MPI_ENABLE:BOOL=TRUE \ +-D KLU_ENABLE:BOOL=TRUE \ +-D CUDA_ENABLE:BOOL=FALSE \ +-D CMAKE_C_COMPILER=$(which mpicc) \ +-D EXAMPLES_ENABLE_CUDA=OFF \ +-D KLU_LIBRARY_DIR=$SUITE_SPARSE_CAMP_ROOT/lib \ +-D KLU_INCLUDE_DIR=$SUITE_SPARSE_CAMP_ROOT/include \ +-D CMAKE_INSTALL_PREFIX=$(pwd)/../install \ +-D EXAMPLES_ENABLE_C=OFF \ +.. +#-D EXAMPLES_INSTALL_PATH=$(pwd)/../install/examples .. \ +#-D CMAKE_CXX_FLAGS="-O3 -lcudart -lcublas" \ +#-D CMAKE_C_FLAGS ="-O3 -lcudart -lcublas" \ +#-D CMAKE_CUDA_FLAGS="-Xcompiler="-fpermissive" -lcudart -lcublas" \ +#-D EXAMPLES_ENABLE_C=OFF \ +make install +cd $curr_path \ No newline at end of file diff --git a/compile/power9/compile.cvode.camp.sh b/compile/power9/compile.cvode.camp.sh new file mode 100644 index 000000000..592ec454f --- /dev/null +++ b/compile/power9/compile.cvode.camp.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +./compile.cvode-3.4-alpha.power9.sh +./compile.camp.sh \ No newline at end of file diff --git a/compile/power9/compile.json-fortran-6.1.0.power9.sh b/compile/power9/compile.json-fortran-6.1.0.power9.sh new file mode 100644 index 000000000..3efb3f3a7 --- /dev/null +++ b/compile/power9/compile.json-fortran-6.1.0.power9.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +library_path="../../../" +curr_path=$(pwd) +cd $library_path/json-fortran-6.1.0 +rm -r build +mkdir build +mkdir install +cd build +cmake -D SKIP_DOC_GEN:BOOL=TRUE -D CMAKE_INSTALL_PREFIX=$(pwd)/../install .. +make install +cd $curr_path diff --git a/compile/power9/compile.libs.camp.sh b/compile/power9/compile.libs.camp.sh new file mode 100644 index 000000000..c032758e9 --- /dev/null +++ b/compile/power9/compile.libs.camp.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +if [ ! -z ${BSC_MACHINE+x} ]; then +if [ $BSC_MACHINE == "power" ]; then +#MONARCH P9 compilation +module load GCC/7.3.0-2.30 +module load OpenMPI/3.1.0-GCC-7.3.0-2.30 +module load bsc/commands +module load JasPer/1.900.1-foss-2018b +module load netCDF/4.6.1-foss-2018b +module load netCDF-Fortran/4.4.4-foss-2018b +module load ESMF/6.3.0rp1-foss-2018b +module load CMake/3.15.3-GCCcore-7.3.0 +module load OpenBLAS/0.3.1-GCC-7.3.0-2.30 +module load CUDA/10.1.105-ES +export NETCDF_FORTRAN_HOME=${EBROOTNETCDFMINFORTRAN} +export NETCDF_HOME=${EBROOTNETCDF} +export NETCDF_FORTRAN_LIB="/gpfs/projects/bsc32/software/rhel/7.5/ppc64le/POWER9/software/netCDF-Fortran/4.4.4-foss-2018b/lib/libnetcdff.so" +export NETCDF_INCLUDE_DIR="/gpfs/projects/bsc32/software/rhel/7.5/ppc64le/POWER9/software/netCDF/4.6.1-foss-2018b/include" +elif [ $BSC_MACHINE == "mn4" ]; then + echo "mn4" + module load gsl + module load jasper/1.900.1 + module load netcdf/4.4.1.1 + module load hdf5/1.8.19 + module load libpng/1.5.13 +else + echo "Unknown architecture" + exit +fi +fi + +./compile.json-fortran-6.1.0.power9.sh +./compile.suiteSparse.power9.sh +./compile.cvode-3.4-alpha.power9.sh +./compile.camp.sh + diff --git a/compile/power9/compile.suiteSparse.power9.sh b/compile/power9/compile.suiteSparse.power9.sh new file mode 100644 index 000000000..64195f130 --- /dev/null +++ b/compile/power9/compile.suiteSparse.power9.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +library_path="../../../" +curr_path=$(pwd) +cd $library_path/SuiteSparse +make purge +LOCAL_MACHINE=CGUZMAN +if [ $BSC_MACHINE == "power" ]; then + make BLAS="-L${EBROOTOPENBLAS}/lib -lopenblas" LAPACK="" +elif [ $BSC_MACHINE == "mn4" ]; then + make BLAS="-L${INTEL_HOME}/mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -lpthread -lm" LAPACK="" +elif [ $LOCAL_MACHINE==CGUZMAN ]; then + make BLAS="-L/usr/lib/x86_64-linux-gnu -lopenblas" LAPACK="" +else + echo "Unknown architecture" + exit +fi +export SUITE_SPARSE_CAMP_ROOT=$(pwd)/$library_path/ +cd $curr_path \ No newline at end of file diff --git a/compile/power9/cuda_memcheck.sh b/compile/power9/cuda_memcheck.sh new file mode 100644 index 000000000..42aacfa77 --- /dev/null +++ b/compile/power9/cuda_memcheck.sh @@ -0,0 +1,24 @@ +compile(){ + export SUNDIALS_HOME=$(pwd)/../../../cvode-3.4-alpha/install + export SUITE_SPARSE_HOME=$(pwd)/../../../SuiteSparse + export JSON_FORTRAN_HOME=$(pwd)/../../../json-fortran-6.1.0/install/jsonfortran-gnu-6.1.0 + + if [ $BSC_MACHINE == "power" ]; then + export JSON_FORTRAN_HOME=$(pwd)/../../../json-fortran-6.1.0/install/jsonfortran-gnu-6.1.0 + elif [ $BSC_MACHINE == "mn4" ]; then + export JSON_FORTRAN_HOME=$(pwd)/../../../json-fortran-6.1.0/install/jsonfortran-intel-6.1.0 + else + echo "Unknown architecture" + exit + fi + + curr_path=$(pwd) + cd ../../build + if ! make -j ${NUMPROC}; then + exit + fi + cd $curr_path +} +time compile +cd ../../build +cuda-memcheck mock_monarch 2>&1 | tee "../compile/power9/a.txt" \ No newline at end of file diff --git a/compile/power9/cvode.camp.run.sh b/compile/power9/cvode.camp.run.sh new file mode 100644 index 000000000..5315b9cb2 --- /dev/null +++ b/compile/power9/cvode.camp.run.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +source make.cvode.camp.sh +compile_camp_cvode +./run.sh \ No newline at end of file diff --git a/compile/power9/cvode.camp.sh b/compile/power9/cvode.camp.sh new file mode 100644 index 000000000..0b90f8315 --- /dev/null +++ b/compile/power9/cvode.camp.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -e +./compile.cvode-3.4-alpha.power9.sh || exit 1 +./make.camp.power9.sh \ No newline at end of file diff --git a/compile/power9/debug.camp.diff.sh b/compile/power9/debug.camp.diff.sh new file mode 100644 index 000000000..b308bc18b --- /dev/null +++ b/compile/power9/debug.camp.diff.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +#todo: enable "USE_PRINT_ARRAYS" +#todo: enable "USE_BCG" +#todo: enable "CAMP_DEBUG_NVECTOR" +source make.camp.sh +make_camp +FILE=diff_TestMonarch.py +cd ../../test/monarch +#log_path="/gpfs/scratch/bsc32/bsc32815/a591/nmmb-monarch/MODEL/SRC_LIBS/camp/compile/power9/log_gpu.txt" +log_path="../../compile/power9/log_cpu.txt" +#echo "Generating log file at " $log_path +python $FILE > $log_path +#python $FILE 2>&1 | tee $log_path +#cells=1 +sed -i 's/conf.caseBase = "CPU One-cell"/conf.caseBase = "GPU BDF"/g' $FILE +#sed -i 's/conf.cells = \[1\]/conf.cells = \['"$cells"'\]/g' $FILE +log_path="../../compile/power9/log_gpu.txt" +#python $FILE 2>&1 | tee $log_path +python $FILE > $log_path +sed -i 's/conf.caseBase = "GPU BDF"/conf.caseBase = "CPU One-cell"/g' $FILE +#sed -i 's/conf.cells = \['"$cells"'\]/conf.cells = \[1\]/g' $FILE +cd ../../compile/power9 +diff log_cpu.txt log_gpu.txt 2>&1 | tee diff.txt \ No newline at end of file diff --git a/compile/power9/debug.cvode.camp.diff.sh b/compile/power9/debug.cvode.camp.diff.sh new file mode 100644 index 000000000..26fc1cc2e --- /dev/null +++ b/compile/power9/debug.cvode.camp.diff.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +#todo: enable "USE_PRINT_ARRAYS" +#todo: enable "USE_BCG" +#todo: enable "CAMP_DEBUG_NVECTOR" +source make.cvode.camp.sh +compile_camp_cvode +FILE=diff_TestMonarch.py +cd ../../test/monarch +#log_path="/gpfs/scratch/bsc32/bsc32815/a591/nmmb-monarch/MODEL/SRC_LIBS/camp/compile/power9/log_gpu.txt" +log_path="../../compile/power9/log_cpu.txt" +#echo "Generating log file at " $log_path +python $FILE > $log_path +#python $FILE 2>&1 | tee $log_path +#cells=1 +sed -i 's/conf.caseBase = "CPU One-cell"/conf.caseBase = "GPU BDF"/g' $FILE +#sed -i 's/conf.cells = \[1\]/conf.cells = \['"$cells"'\]/g' $FILE +log_path="../../compile/power9/log_gpu.txt" +#python $FILE 2>&1 | tee $log_path +python $FILE > $log_path +sed -i 's/conf.caseBase = "GPU BDF"/conf.caseBase = "CPU One-cell"/g' $FILE +#sed -i 's/conf.cells = \['"$cells"'\]/conf.cells = \[1\]/g' $FILE +cd ../../compile/power9 +diff log_cpu.txt log_gpu.txt 2>&1 | tee diff.txt \ No newline at end of file diff --git a/compile/power9/make.camp.sh b/compile/power9/make.camp.sh new file mode 100644 index 000000000..97843f5ec --- /dev/null +++ b/compile/power9/make.camp.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +make_camp(){ + curr_path=$(pwd) + cd ../../build + make || exit 1 + cd $curr_path +} diff --git a/compile/power9/make.cvode.camp.sh b/compile/power9/make.cvode.camp.sh new file mode 100644 index 000000000..0fd96ecaa --- /dev/null +++ b/compile/power9/make.cvode.camp.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -e +source make.camp.sh +compile_cvode(){ + curr_path=$(pwd) + library_path="../../../" + if [ -z "$SUITE_SPARSE_CAMP_ROOT" ]; then + SUITE_SPARSE_CAMP_ROOT=$(pwd)/$library_path/SuiteSparse + fi + cd $library_path/cvode-3.4-alpha + cd build + make install + cd $curr_path +} + +compile_camp_cvode(){ +compile_cvode +make_camp +} \ No newline at end of file diff --git a/compile/power9/portability.md b/compile/power9/portability.md new file mode 100644 index 000000000..763075cdd --- /dev/null +++ b/compile/power9/portability.md @@ -0,0 +1,6 @@ +**GPU Portability between different architectures** + +Default configuration is for CTE-POWER architecture from Barcelona Supercomputing Center. +Running GPUs in a different architecture may produce an error in some functionalities. +There is a list of detected issues with different architecture: + - Multi-GPUs should follow same architecture, which corresponds to each GPU connected to two CPUs (in our case, 20 cores per CPU, 2 CPU per node and 4 GPUs per node). Variables endDevice and startDevices should be modified correspondingly to follow a differente architecture. diff --git a/compile/power9/run.sh b/compile/power9/run.sh new file mode 100644 index 000000000..e77d8c50e --- /dev/null +++ b/compile/power9/run.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +cd ../../test/monarch +./run.sh diff --git a/compile/power9/sbatch_run.sh b/compile/power9/sbatch_run.sh new file mode 100644 index 000000000..14ae8fa60 --- /dev/null +++ b/compile/power9/sbatch_run.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +##SBATCH --qos=debug +#SBATCH --job-name=camp_test_monarch +#SBATCH --output=out_sbatch.txt +#SBATCH --error=err_sbatch.txt +#SBATCH --nodes=1 +#SBATCH --ntasks-per-node=160 +#SBATCH --gres=gpu:4 +#SBATCH --exclusive + +cd ../../test/monarch +./sbatch_run.sh \ No newline at end of file diff --git a/compile/ubuntu/compile_camp.sh b/compile/ubuntu/compile_camp.sh new file mode 100644 index 000000000..3c9132148 --- /dev/null +++ b/compile/ubuntu/compile_camp.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +cd ../../build +make \ No newline at end of file diff --git a/compile/ubuntu/compile_cvode.sh b/compile/ubuntu/compile_cvode.sh new file mode 100644 index 000000000..3f8f86bbf --- /dev/null +++ b/compile/ubuntu/compile_cvode.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +library_path="../../../" +if [ "$1" == "from_camp_jobs" ]; then + library_path="../../../../" +fi + +if [ -z "$SUITE_SPARSE_CAMP_ROOT" ]; then + SUITE_SPARSE_CAMP_ROOT=$(pwd)/$library_path/SuiteSparse +fi + +#tar -zxvf camp/cvode-3.4-alpha.tar.gz +cd $library_path/cvode-3.4-alpha +#rm -r build +mkdir build +#rm -rf install +mkdir install +mkdir install/examples +cd build +cmake .. +make install + +#./cvode-3.4-alpha/build/examples/cvode/serial/cvRoberts_klu diff --git a/data/CAMP_v1_paper/README.md b/data/CAMP_v1_paper/README.md index fc287955f..346a4c310 100644 --- a/data/CAMP_v1_paper/README.md +++ b/data/CAMP_v1_paper/README.md @@ -2,7 +2,10 @@ Configurations for recreating experiments for: - * Dawson, M. L., Guzman, C., Curtis, J. H., Acosta, M., Zhu, S., Dabdub, D., Conley, A., West, M., Riemer, N., and Jorba, O.: Chemistry Across Multiple Phases (CAMP) version 1.0: an integrated multiphase chemistry model, Geosci. Model Dev., 15, 3663–3689, https://doi.org/10.5194/gmd-15-3663-2022, 2022. + * M. Dawson, C. Guzman, J. H. Curtis, M. Acosta, S. Zhu, D. Dabdub, + A. Conley, M. West, N. Riemer, and O. Jorba (2021), + Chemistry Across Multiple Phases (CAMP) version 1.0: An + Integrated multi-phase chemistry model, in preparation The binned and modal box model experiments are run as part of the CAMP testing suite. The results will be in the build folder under: @@ -10,4 +13,4 @@ The binned and modal box model experiments are run as part of the CAMP testing s ``` data_run/CAMP_v1_paper/binned/out/ data_run/CAMP_v1_paper/modal/out/ -``` +``` \ No newline at end of file diff --git a/data/CAMP_v1_paper/binned/mock_monarch.F90 b/data/CAMP_v1_paper/binned/mock_monarch.F90 index 92ee9d15c..05feb8d5c 100644 --- a/data/CAMP_v1_paper/binned/mock_monarch.F90 +++ b/data/CAMP_v1_paper/binned/mock_monarch.F90 @@ -362,9 +362,6 @@ program mock_monarch ! finalize mpi call camp_mpi_finalize() - ! Free the interface and the solver - deallocate(camp_interface) - contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/data/CAMP_v1_paper/binned/test_monarch_binned.sh b/data/CAMP_v1_paper/binned/test_monarch_binned.sh index 78f2cfc86..e94273743 100755 --- a/data/CAMP_v1_paper/binned/test_monarch_binned.sh +++ b/data/CAMP_v1_paper/binned/test_monarch_binned.sh @@ -14,7 +14,12 @@ while [ true ] do echo Attempt $counter -exec_str="../../../camp_v1_paper_binned config_monarch_binned.json interface_monarch_binned.json out/monarch_cb05_soa" +if [ -z ${SLURM_TASK_PID+x} ]; then + exec_str="../../../camp_v1_paper_binned config_monarch_binned.json interface_monarch_binned.json out/monarch_cb05_soa" + else + exec_str="mpirun -v -np 1 --bind-to none ../../../camp_v1_paper_binned config_monarch_binned.json interface_monarch_binned.json out/monarch_cb05_soa" +fi + if ! $exec_str; then echo Failure "$counter" diff --git a/data/CAMP_v1_paper/modal/mock_monarch.F90 b/data/CAMP_v1_paper/modal/mock_monarch.F90 index 2d394d63c..a45392a21 100755 --- a/data/CAMP_v1_paper/modal/mock_monarch.F90 +++ b/data/CAMP_v1_paper/modal/mock_monarch.F90 @@ -344,9 +344,6 @@ program mock_monarch ! finalize mpi call camp_mpi_finalize() - ! Free the interface and the solver - deallocate(camp_interface) - contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/data/CAMP_v1_paper/modal/test_monarch_modal.sh b/data/CAMP_v1_paper/modal/test_monarch_modal.sh index 7fc64fa6d..45b441fa9 100755 --- a/data/CAMP_v1_paper/modal/test_monarch_modal.sh +++ b/data/CAMP_v1_paper/modal/test_monarch_modal.sh @@ -15,7 +15,11 @@ while [ true ] do echo Attempt $counter -exec_str="../../../camp_v1_paper_modal config_monarch_modal.json interface_monarch_modal.json out/monarch_cb05_soa" +if [ -z ${SLURM_TASK_PID+x} ]; then + exec_str="../../../camp_v1_paper_modal config_monarch_modal.json interface_monarch_modal.json out/monarch_cb05_soa" +else + exec_str="mpirun -v -np 1 --bind-to none ../../../camp_v1_paper_modal config_monarch_modal.json interface_monarch_modal.json out/monarch_cb05_soa" +fi if ! $exec_str; then echo Failure "$counter" diff --git a/doc/camp_tutorial/boot_camp/part_1_code/box_model.F90 b/doc/camp_tutorial/boot_camp/part_1_code/box_model.F90 index f04d67096..226f97f9e 100644 --- a/doc/camp_tutorial/boot_camp/part_1_code/box_model.F90 +++ b/doc/camp_tutorial/boot_camp/part_1_code/box_model.F90 @@ -9,6 +9,12 @@ program box_model !! [Chem-spec data module] use camp_chem_spec_data +#ifdef CAMP_USE_MPI + use mpi + use camp_mpi +#endif + + !! [Chem-spec data module] !! [Core and state] @@ -34,6 +40,11 @@ program box_model !! [Time id] + ! allows example to run with MPI supprt compiled in +#ifdef CAMP_USE_MPI + call camp_mpi_init( ) +#endif + !! [Initialize core] camp_core => camp_core_t( "my_config_file.json" ) call camp_core%initialize( ) @@ -79,8 +90,11 @@ program box_model camp_state%state_var( idx_O2 ) end do - deallocate( camp_core ) deallocate( camp_state ) +#ifdef CAMP_USE_MPI + call camp_mpi_finalize( ) +#endif + end program box_model !! [Solve and output] diff --git a/doc/camp_tutorial/boot_camp/part_3_code/box_model.F90 b/doc/camp_tutorial/boot_camp/part_3_code/box_model.F90 index f098dee7d..7f938c796 100644 --- a/doc/camp_tutorial/boot_camp/part_3_code/box_model.F90 +++ b/doc/camp_tutorial/boot_camp/part_3_code/box_model.F90 @@ -108,7 +108,6 @@ program box_model camp_state%state_var( idx_O2 ) end do - deallocate( camp_core ) deallocate( camp_state ) #ifdef CAMP_USE_MPI diff --git a/doc/camp_tutorial/boot_camp/part_4_code/box_model.F90 b/doc/camp_tutorial/boot_camp/part_4_code/box_model.F90 index 4689625b9..457b6639d 100644 --- a/doc/camp_tutorial/boot_camp/part_4_code/box_model.F90 +++ b/doc/camp_tutorial/boot_camp/part_4_code/box_model.F90 @@ -170,7 +170,6 @@ program box_model #endif !! [output] - deallocate( camp_core ) deallocate( camp_state ) end program box_model diff --git a/doc/camp_tutorial/dev_camp/CAMP_dev_tutorial.F90 b/doc/camp_tutorial/dev_camp/CAMP_dev_tutorial.F90 new file mode 100644 index 000000000..5d8717293 --- /dev/null +++ b/doc/camp_tutorial/dev_camp/CAMP_dev_tutorial.F90 @@ -0,0 +1,588 @@ +! Copyright (C) 2019 Matt Dawson and Christian Guzman +! Licensed under the GNU General Public License version 2 or (at your +! option) any later version. See the file COPYING for details. + +!> \page camp_dev_tutorial Dev CAMP: The CAMP developer guide +!! +!! Welcome developer! +!! +!! This is the Dev CAMP tutorial. +!! +!! The tutorial aims for understanding the logic behind CAMP, his +!! main components and the interactions between them. We hope this +!! guide will help you to understand the insides of CAMP and allows you +!! to contribute to the CAMP development. +!! +!! Before starting, it's recommended to have finalized \ref camp_tutorial +!! Boot CAMP tutorial. +!! +!! - \ref camp_dev_tutorial_part_0 +!! - \ref camp_dev_tutorial_part_1 +!! - \ref camp_dev_tutorial_part_2 +!! - \ref camp_dev_tutorial_part_3 +!! - \ref camp_dev_tutorial_part_4 +!! - \ref camp_dev_tutorial_part_5 +!! +!! Model code described in Dev CAMP can be found in +!! \c doc/camp_tutorial/dev_camp. +!! +!! This tutorial focuses in main concepts. Some of the concepts explained can differ +!! in the future if better implementations are found, but the tutorial should be +!! enough to replicate a consistent CAMP skeleton. +!! +!! ## Testing through CMake## +!! CAMP includes multiple tests with different scenarios (testing each reaction type, +!! chemical mechanisms like Carbond Bond 05, etc.). CMake leads this test execution +!! through the CMakeList file. The developer should ensure his implementation passes all these +!! tests available to execute with the CMake command "make test". The Github CAMP project +!! also check these tests on each commit. +!! +!! ## Documenting your contribution ## +!! +!! CAMP generates all his documentation through Doxygen. Ensure to document properly your +!! apportation to CAMP with commentaries inside the code and using Doxygen if necessary. +!! Don't hesitate to contact the main developers for doubts or help in your contribution. +!! Remember also that the project on Github includes multiple issues with different +!! ideas in development, so ensure to take a look before developing something that is +!! already in progress. + +! *********************************************************************** +! *********************************************************************** +! *********************************************************************** + +!> \page camp_dev_tutorial_part_0 Dev CAMP: Part 0 - Introduction +!! +!! +!! CAMP can be divided into the following main components: +!! +!! - Input user data : All input data received by CAMP. +!! It includes the user-defined JSON files and the variables coming from +!! the host model such as chemical concentrations and environmental variables +!! like temperature or pressure. The \ref camp_tutorial "Boot CAMP tutorial" +!! teaches how to enter these variables in CAMP. +!! +!! - CAMP_core interface : User interface. +!! Responsible for adapting the input data to efficent data structures. +!! Includes all the files that prepare the data for the solving system. +!! +!! - Solving system : Corresponds to all the files related to the resolution of the +!! chemical mechanism (and ODE system). Includes the solving of the chemical reactions equations and the +!! ODE solver to advance in time to the next time-step. In the default version of CAMP 1.0, the ODE solving is +!! solved iteratively using the Backward Differentiation Formula method from the CVODE package, alongside +!! the SuiteSparse KLU method as the internal linear solver. These algorithms can differ for other versions +!! or enabling some options in CAMP, for example enabling the GPU flag can change the linear solving for +!! performance reasons. +!! +!! The following images describes the general workflow of CAMP. +!! +!! The first image summarize the main CAMP components and interactions. The chemistry API +!! refers to the JSON files, chemistry core to CAMP_core interface and the integrated +!! chemical mechanism and solver part represents the solving system. +!! +!! \image html camp_main_components.jpg +!! +!! In the second image, the preparations, user and host +!! model parts corresponds to the category "Input user data". The CAMP_core interface is +!! inside CAMP, and the solving system is composed by the ODE solver and some calculations +!! from CAMP like solving the system equations \f$f(y)\f$. +!! +!! \image html preparations_camp.jpg +!! \image html very_simple_CAMP_components_2.jpg +!! +!!
+!! \image{inline} html icon_trail.png +!! \ref camp_dev_tutorial "Index" +!! \image{inline} html icon_trail.png Next: +!! \ref camp_dev_tutorial_part_1 > + +! *********************************************************************** +! *********************************************************************** +! *********************************************************************** + +!> \page camp_dev_tutorial_part_1 Dev CAMP: Part 1 - Mathematical considerations +!! +!! In general, CAMP tries to predict the concentrations of a chemical species +!! at some point in the future by solving a set of ordinary differential +!! equations (ODE) that represent the reactions that compose a chemical +!! \ref camp_mechanism "mechanism". +!! +!! \ref camp_rxn "Reactions" take the general form: +!! +!! \f[ +!! c_1y_1+c_2y_2 + \dots + c_my_m \leftrightarrow c_{m+1}y_{m+1}+c_{m+2}y_{m+2} + \dots + c_ny_n, +!! \f] +!! +!! where species \f$y_i\f$ is a participant in the reaction with stoichiometric +!! coefficient \f$c_i\f$. The rate of change for each participating species \f$y_i\f$ with +!! respect to reaction \f$j\f$ is given by +!! +!! \f[ +!! \left(\frac{dy_i}{dt}\right)_j = +!! \begin{cases} +!! \quad -c_ir_j(\mathbf{y},T,P,\dots) & \quad \text{for } i \le m; \\ +!! \quad c_ir_j(\mathbf{y},T,P,\dots) & \quad \text{for } m < i \le n \\ +!! \end{cases}, +!! \f] +!! +!! where the rate \f$r_j\f$ of reaction \f$j\f$ is an often complex function of the entire +!! model state (including species concentrations \f$y\f$, environmental conditions, +!! such as temperature, \f$T\f$, and pressure, \f$P\f$, physical aeorosl properties, +!! such as surface area density and number concentration, etc.). The +!! overall rate of change for each species \f$y_i\f$ at any given time is thus, +!! +!! \f[ +!! f_i \equiv \frac{dy_i}{dt} = \sum_j \left(\frac{dy_i}{dt}\right)_j, +!! \f] +!! +!! where \f$f\f$ is referred to as the derivative of the system. +!! +!! Each reaction type calculates its rate differently. +!! The simplest example of a typical atmospheric reaction is an +!! \ref camp_rxn_arrhenius "Arrhenius-like reaction". +!! +!! \f[ +!! r_j = k_j \prod_{i=1}^my_i^{c_i} +!! \f] +!! +!! where \f$k_j\f$ is referred to as the rate constant. +!! For more information about the rate constant, check the +!! \ref camp_rxn "reaction" types pages. +!! +!! ## Derivative workflow ## +!! +!! The next image summarize the workflow on computing the Derivative. +!! +!! \image html Deriv_one_cell.jpg +!! +!!
+!! < Previous: \ref camp_dev_tutorial_part_0 +!! \image{inline} html icon_trail.png +!! \ref camp_dev_tutorial "Index" +!! \image{inline} html icon_trail.png +!! Next: +!! \ref camp_dev_tutorial_part_2 > + +! *********************************************************************** +! *********************************************************************** +! *********************************************************************** + +!> \page camp_dev_tutorial_part_2 Dev CAMP: Part 2 - CAMP_core interface +!! +!! This section explains the camp_core_interface. We recommend read the +!! \ref camp_tutorial "Boot CAMP tutorial" to understand the definitions of +!! JSON files, input data and the user interaction with the CAMP_core +!! interface. +!! +!! The CAMP_core interface follows an structure based on classes, where the +!! more relevants are: +!! +!! - \ref camp_camp_core::camp_core_t "camp_core": +!! Main class, includes and manage all the program classes. +!! - \ref camp_camp_state::camp_state_t "camp_state": +!! Includes concentration array and the env_state class. +!! - \ref camp_env_state::env_state_t "env_state": Includes all the +!! environmental program variables. The most remarkables are temperature +!! and pressure. +!! - \ref camp_camp_solver_data "camp_solver_data": +!! Allows the CAMP_core interface (programmed in Fortran) +!! use the functions from the solving system (programmed in C as a +!! requisite of the CVODE package). +!! - \ref camp_chem_spec_data "chem_spec_data" : Reads JSON data. +!! The user can found here the species data defined in JSON files +!! by searching the reactants names like "O3" or "NO2". +!! - \ref camp_rxn_data::rxn_data_t "rxn_data" : Also read JSON data by calling +!! \ref camp_property::property_t "property_t". +!! Includes declarations of the arrays where JSON data is stored: one array for +!! integer type data and other for floating data (for example, qty from \ref +!! camp_rxn_arrhenius "arrheniufs reaction" is an integer, but \f$A\f$ is floating data). +!! - \ref camp_rxn_arrhenius::rxn_arrhenius_t "rxn_REACTIONTYPE" : Set of classes, +!! one for each reaction type defined in CAMP, +!! where REACTIONTYPE is the reaction name (arrhenius, photolysis, etc.) +!! Extends from rxn_data, meaning that also has the same variables +!! and functions as rxn_data. Receive the data read by chem_spec_data +!! and stores them in the integer and float arrays defined in rxn_data. It also +!! adds to the integer array some data necesary for future calculations and +!! iterate the arrays, like the number of reactants and products. +!! - \ref camp_mpi "camp_mpi" : Interface to MPI library. Apart from including a MPI +!! call on each function, these functions checks if the MPI call success. The +!! purpose is to compress complex MPI implementations in one call (for example, +!! broadcasting to all nodes a 2d matrix). +!! - \ref camp_rxn_factory::rxn_factory_t "rxn_factory": Interface to create and +!! add to the system a new reaction in runtime. Apart from JSON files, this can be +!! another way to enter the reaction data. Check \ref camp_rxn_add for more information. +!! - \ref camp_util "camp_util": Treat an array of characters as a string_t object. +!! Used to store string information like species names in chem_spec_data or camp_core. +!! +!! The workflow corresponds to: +!! +!! - From the user point of view : initialize camp_core, create camp_state, +!! call chem_spec_data through camp_core, set camp_state chemical data and solve. +!! - For the code part : camp_core object is created, camp_core calls +!! chem_spec_data to read JSON files, chem_spec_data calls rxn_data and +!! rxn_REACTIONTYPE to save the data read in an integer and a float array, +!! camp_core receives a camp_state object with the environmental and +!! concentrations data, and then camp_core calls the \ref +!! camp_dev_tutorial_part_3 "solving system" through +!! the camp_solver_data interface, updating the chemical concentrations. +!! +!! Notice that all the reaction data read in the JSON files will be stored +!! in the integer and the float aray. We will name these arrays as int_data and +!! float_data from now on. Only the environmental data array (env_data) and the +!! concentrations array (concs_data) are outside of int_data and float_data. +!! +!!
+!! < Previous: \ref camp_dev_tutorial_part_1 +!! \image{inline} html icon_trail.png +!! \ref camp_dev_tutorial "Index" +!! \image{inline} html icon_trail.png +!! Next: +!! \ref camp_dev_tutorial_part_3 > + +! *********************************************************************** +! *********************************************************************** +! *********************************************************************** + +!> \page camp_dev_tutorial_part_3 Dev CAMP: Part 3 - Solving system +!! +!! This section describes the CAMP solving process. This process receive as +!! an input data the arrays explained in the previous section +!! (int_data, float_data, concs_data and env_data), solve the Derivative and +!! Jacobian functions defined in \ref camp_dev_tutorial_part_1 +!! and send the results to the ODE solver +!! package. +!! +!! The \ref camp_solver.c "CAMP_solver" file have to be the only file that interacts +!! with the external solving parts (CAMP_core interface and ODE solver). It's +!! recommended to check the documentation generated for this file, including +!! the main functions described during this section and specially their +!! call graphs. +!! +!! The next image is a simple workflow representation to take an overview of the components +!! interactions. The chemistry core represents the camp core interface and the integrated +!! chemical mechanism represents the solving system. +!! +!! \image html camp_and_solving.jpg +!! +!! ## Choosing the ODE solver: CVODE ## +!! +!! Solving an ODE implies selecting the solving method that better fills +!! its properties. +!! +!! For the chemical mechanism scope, the system to solve can be either +!! a non-stiff problem as a stiff problem. +!! Since CAMP aims to solve all the types of mechanisms, the ODE method +!! have to be implicit to secure a +!! reasonable number of solving time-steps for stiff mechanism cases. +!! +!! All solver methods require the solution to the system equations (\f$f(y)\f$) +!! in each ODE solver iteration. +!! But implicit methods tipically needs also the system Jacobian (\f$J = df/dy\f$). +!! +!! Solving the derivative and the Jacobian also includes a wide range +!! of solver options that depends on the system properties. Common mechanisms +!! consist of a great number of reactions (from tens to hundreds) and a +!! high number of total different parameters. These properties translate +!! into a small Jacobian matrix with few non-zero values, suitable for +!! direct sparse solving methods. +!! +!! To fullfill the properties explained, CAMP uses the +!! CVODE +!! solving package +!! with the following configuration: +!! +!! - Stiffness: Backward Differentiation Formula (BDF) method. +!! - Direct sparse linear solver: KLU sparse solver. +!! - Level of parallelization: No parallelization, serial execution. +!! +!! Note that CAMP is not locked to CVODE and can be adapted to any ODE +!! solver availabe with the proper implementation. The only requirements +!! to achieve an optimal behaviour is select a solver designed for stiff systems. +!! +!! We recommend check the sparse matrix structure before continuing the tutorial. +!! Good documentation about the KLU sparse solver and his structure can be found at +!! +!! "KLU-A HIGH PERFORMANCE SPARSE LINEAR SOLVER FOR CIRCUIT SIMULATION +!! PROBLEMS", by Ekanathan Palamadai Natarajan +!! +!! ## Pre-solver operations ## +!! +!! Before calling the CVODE solving process, some operations must be done: +!! +!! 1- Mount the sparse Jacobian structure. A sparse matrix has the data +!! values array and two arrays of indices that indicates the matrix rows +!! and columns. For our case, rows represents the system reactions and +!! columns represents the species. Each row has a value for all the species +!! present, but if the reaction does not affect the specie the value will be +!! zero everytime and won't be stored in the sparse data array. In addition +!! to this, an extra index structure is created to link reactions with Jacobian +!! in CAMP (\ref JacMap "JacMap"). +!! +!! 2- Configure CVODE with the optimal solver options (BDF, KLU sparse, etc.). +!! +!! 3- Calculate the possible rate constants or reaction parameters for each +!! reaction. There are reactions with rate constant/s that only depends +!! in the initial values, like the env_data or initial concentrations. +!! Computing them before the solving will reduce the amount of +!! solver calculations. +!! +!! ## Derivative and Jacobian## +!! +!! CAMP needs to define the function f and Jac, which computes the Derivative +!! and the Jacobian respectively. The declaration of these functions is +!! defined in the CVODE package (including the input parameters). We only +!! need to fill the content. +!! +!! These functions will be called in the middle of the CVODE solving process. To give an idea, +!! in the default CVODE version used the Derivative is called a minimum +!! of 4 times in different parts of the BDF algorithm, and the Jacobian 1 time in the +!! setup of the KLU Sparse solver. The number of calls differs depending on the input system. +!! +!! CVODE will pass as a function parameters the current concentration array (concs_data), +!! the pointer to the future concentration array or Jacobian (deriv or J +!! variables), the current model time (s) and the pointer +!! to the main CAMP data structure (solver_data struct). solver_data contains all +!! the CAMP data used during the solving. For example, this struct +!! contains the int_data and float_data arrays, necessaries for solving +!! both Derivative and Jacobian. +!! +!! Once Derivative and Jacobian finish, CVODE will try to solve the ODE. The implicit +!! solving method configured (BDF) will aproximate the result. If the +!! aproximation is near enough to the correct result (convergence), the ODE is solved and +!! CAMP returns to the CAMP solver interface part. Otherwise, CVODE will +!! repeat the iteration using the last result obtained. +!! +!! These functions must solve the operations defined at +!! \ref camp_dev_tutorial_part_1. Remember that they can be more +!! or less complex, depending on the dependencies of the rate constants. +!! Maybe all these rate constants can be calculated at the start of these functions +!! or they have a dependance with the current concentration of some species and need +!! to be calculated during the solving. +!! +!! ## Workflow ## +!! +!! The next image summarize the workflow of the solving system. Note this workflow +!! only represent the main interactions and variables and the last CAMP version can differ. +!! +!! \image html camp_solving_system.jpg +!! +!!
+!! < Previous: \ref camp_dev_tutorial_part_2 +!! \image{inline} html icon_trail.png +!! \ref camp_dev_tutorial "Index" +!! \image{inline} html icon_trail.png +!! Next: +!! \ref camp_dev_tutorial_part_4 > + +! *********************************************************************** +! *********************************************************************** +! *********************************************************************** + +!> \page camp_dev_tutorial_part_4 Dev CAMP: Part 4 - MPI +!! +!! +!! All the calls are done throught the MPI class, which derives from the CAMP original +!! module. This class adapt more of the MPI functions with a safe call, checking +!! the flag MPI_SUCCESS and exiting the program if the call do not success. +!! +!! Most of the classes of the CAMP_core interface has some MPI functions to enable +!! send the class object to another MPI thread. The common approach to communicate +!! the class data is pack all the components (e.g. integers and floats) in the same +!! MPI communicator and unpack the data in the receiving node/s. +!! +!! Also, the whole module CAMP can be executed in independent MPI threads. This approach +!! is used when integrating a CAMP into a host model. The host model will replicate +!! all his modules (including CAMP), divide the work to each node and eventually communicate +!! the results obtained in each module between the rest of the nodes. +!! +!!
+!! < Previous: \ref camp_dev_tutorial_part_3 +!! \image{inline} html icon_trail.png +!! \ref camp_dev_tutorial "Index" +!! \image{inline} html icon_trail.png +!! Next: +!! \ref camp_dev_tutorial_part_5 > + +! *********************************************************************** +! *********************************************************************** +! *********************************************************************** + +!> \page camp_dev_tutorial_part_5 Dev CAMP: Part 5 - GPU interface +!! +!! A GPU module was developed in the CUDA language to speedup the solving +!! for large chemical systems. The user can choose to compute all the module in +!! the CPU (set as default) or enable the GPU execution. +!! +!! We will explain the idea of this GPU version with an example: The +!! parallelization of the Derivative function. This was the first function +!! translated to the GPU during the GPU development to test the efficiency of the +!! GPU, and will be serve also as our introduction point to understand the general +!! concept of how to parallellize a chemical module like CAMP in the GPU. +!! +!! ## Parallelization strategy ## +!! +!! The parallelization strategy can be translated briefly into the +!! following question: How we divide the work? +!! +!! Reminding the concepts learned in this tutorial, both Derivative and Jacobian +!! solves a reaction by computing the rate of change \f$r_j\f$ for each +!! participating species \f$y_i\f$. The resulting rate of change is added to the +!! next iteration specie concentration. In this way, each reaction represents +!! a contribution to the related species, and can increase or decrease its value. +!! +!! This concept means that there are no relation with each reaction until we +!! sum the resulting rates of change. In other words, the calculations done +!! in each reaction before the sum can be computed in parallel. +!! +!! So, instead of a loop iterating +!! all the reactions we will have GPU threads doing this work in parallell. +!! +!! \image html Deriv_GPU_one_cell.jpg +!! +!! ## GPU pre-solving ## +!! +!! At the start of the solving system, before calling the CVODE solving process, +!! some preparations must to be done: +!! +!! - Allocate in the GPU all the CAMP variables necessaries for the solving. The +!! solver_data struct, int_data and float_data arrays, etc. +!! - Check GPU properties. Check the maximum capacities of the GPU available +!! to adjust the parallelism accordingly (enough threads, blocks, etc). This +!! can be done in runtime thanks to the CUDA library. +!! - Update GPU variables computed in the CPU, like the rate constants. +!! +!! During the updating of GPU variables, an extra preparation can be done +!! to improve the GPU execution. Taking into account that all the reaction +!! information (int_data and float_data) is stored consecutively in memory and +!! the GPU threads acces simultaneously each reaction first value, we have to +!! set all the first reaction values consecutively in memory. In other words, +!! instead of having in the firsts values of the int_data array the values +!! for the first reaction, we will have as first value the first value of +!! the first reaction, as second the first value of the second reaction, and +!! so on. +!! +!! In the next image we consider that the reaction data is organized in +!! the form of a matrix, where each row represent a different reaction and the +!! columns the parameters for the reaction. With this implementation, the threads +!! access the first parameter of each reaction simultaneously. In the original CPU +!! data structure, these access are not consecutive in memory. So, we apply +!! this optimization which is similar to invert the original "matrix": Now, +!! the first parameters accessed are consecutive in memory, improving the memory +!! access. We call this optimization "reverse matrix" to reference it later. +!! +!! \image html reverse_matrix.jpg +!! +!! ## Derivative## +!! +!! To launch a kernel in CUDA is necessary define the number of threads and +!! blocks required by the program. For our case, the number of threads is +!! directly the number of reactions, meanwhile the number of blocks can be +!! the minimum (assign the maximum number of threads per block). +!! +!! \code{.c} +!! int n_threads = n_reactions; +!! int n_blocks = (n_threads + max_threads_per_block - 1) / max_threads_per_block); +!! \endcode +!! +!! After this, we can launch a kernel passing as input parameter all the pointers +!! to the data previously stored during the GPU pre-solving. Now the kernel function +!! must realize two tasks: divide the work for each thread and call the appropiate +!! Derivative function. Note that starting from this step, all the +!! code will be computed in parallel for all the threads enable. +!! +!! Divide the work translates to assign to each thread a diffent reaction pointer +!! for each input data variable. In the same manner that we update that pointer +!! to point the first value of each reaction in the base version reaction loop, +!! now we use the threads unique id as a loop iterator. +!! Note that with the reverse optimization, the first value of each reaction +!! is directly the next value in the reaction parameter arrays. After that, +!! only remains call the appropiate reaction function. +!! +!! \code{.c} +!! int index = blockIdx.x * blockDim.x + threadIdx.x; +!! +!! double *rxn_float_data = &(float_data)[index]); +!! int *rxn_int_data = &(int_data)[index]); +!! double *rxn_rate_constants = &(rate_constants[index*n_reaction_rate_constants] +!! +!! int rxn_type = int_data[0]; +!! rxn_int_data = &(int_data[1*n_rxn]); +!! switch (rxn_type){ +!! case ARRHENIUS: +!! rxn_arrhenius_calc_deriv_contrib(solver_data, deriv_data, rxn_int_data, +!! rxn_float_data, rxn_rate_constants) +!! } +!! +!! \endcode +!! +!! Warning: Take into account the reverse optimization also when accessing the code +!! in the reaction type Derivative functions. E.g. in the CPU version accesing the +!! next reaction parameter is sum 1 in the float_array, but now in the reverse +!! optimization we need to sum the lenght of the "matrix rows" (n_rxn a.k.a number of +!! reactions. +!! +!! Also notice that in this reaction type Derivative functions we should add the +!! contribution of each reaction type to the Derivative throught the CUDA instruction +!! "atomicAdd", since the reactions can affect the same specie and the threads will +!! try to access simultaneously the same data. +!! +!! ## Multi-cells in GPU ## +!! +!! In CAMP, the user can compute simultaneously multiple chemical mechanisms (including +!! in the GPU parts). The user only needs to send the number of cells (a.k.a chemical +!! mechanisms) present in the concentration array. Then, this array will have a size of +!! n_reactions * n_cells. Meanwhile in the "original one-cell" implementation the user/host +!! model sends the mechanism (e.g Carbond Bond 05 mechanism) one per one cell, the user +!! group the data in the same data structure. This also translates that the ODE solver +!! will solve the mechanism at once, instead of reinitializing the solving per each cell, +!! improving the general performance. +!! +!! \image html camp_multicells_def.jpg +!! +!! In the GPU, we need to take into account these n_cells by: +!! +!! - Multiply the number of threads also for the number of cells (apart from the number +!! of reactions). Notice that n_cells is set to 1 per default, so +!! if the user didn't specify n_cells (which mean he don't want +!! to compute multi-cells), the multiplication per n_cells won't affect the computation. +!! +!! \code{.c} +!! int n_threads = n_reactions * n_cells; +!! int n_blocks = (n_threads + max_threads_per_block - 1) / max_threads_per_block); +!! \endcode +!! +!! - Recalculate sizes on the GPU. Now the concentration array is multiplied by n_cells. +!! The rate constants that depends on environmental data will increase also by +!! the number of cells, since each cell can have different temperature for example (and +!! consider also that each reaction type can need more or less rate constants). +!! The reaction data will remain with the same size, since we are applying the same +!! chemical mechanism with the same coefficients to all the cells. +!! +!! \code{.c} +!! int index = blockIdx.x * blockDim.x + threadIdx.x; +!! int i_cell=index/n_rxn; +!! int i_rxn=index%n_rxn; +!! +!! //Get indices of each reaction +!! double *rxn_float_data = &(float_data)[i_rxn]); +!! int *rxn_int_data = &(int_data)[i_rxn]); +!! //Get indices for concentrations +!! double *rxn_concs = &( concs[n_concs_cell*i_cell]); +!! //Get indices for rates +!! double *rxn_rate_constants = &(rate_constants[n_rate_constants_cell*i_cell+ +!! n_rate_constants_reaction[i_rxn]] +!! +!! int rxn_type = int_data[0]; +!! rxn_int_data = &(int_data[1*n_rxn]); +!! switch (rxn_type){ +!! case ARRHENIUS: +!! rxn_arrhenius_calc_deriv_contrib(solver_data, deriv_data, rxn_int_data, +!! rxn_float_data, rxn_rate_constants) +!! } +!! +!! \endcode +!! +!!
+!! < Previous: \ref camp_dev_tutorial_part_4 +!! \image{inline} html icon_trail.png +!! \ref camp_dev_tutorial "Index" +!! \image{inline} html icon_trail.png \ No newline at end of file diff --git a/doc/references.bib b/doc/references.bib index 1c9f9af32..12cec3614 100644 --- a/doc/references.bib +++ b/doc/references.bib @@ -1,39 +1,3 @@ -@article{Tie2003, -author = {Tie, Xuexi and Emmons, Louisa and Horowitz, Larry and Brasseur, Guy and Ridley, Brian and Atlas, Elliot and Stround, Craig and Hess, Peter and Klonecki, Andrzej and Madronich, Sasha and Talbot, Robert and Dibb, Jack}, -title = {Effect of sulfate aerosol on tropospheric NOx and ozone budgets: Model simulations and TOPSE evidence}, -journal = {Journal of Geophysical Research: Atmospheres}, -volume = {108}, -number = {D4}, -pages = {}, -keywords = {tropospheric aerosol, NOx, ozone}, -doi = {https://doi.org/10.1029/2001JD001508}, -url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2001JD001508}, -eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2001JD001508}, -abstract = {The distributions of NOx and O3 are analyzed during TOPSE (Tropospheric Ozone Production about the Spring Equinox). In this study these data are compared with the calculations of a global chemical/transport model (Model for OZone And Related chemical Tracers (MOZART)). Specifically, the effect that hydrolysis of N2O5 on sulfate aerosols has on tropospheric NOx and O3 budgets is studied. The results show that without this heterogeneous reaction, the model significantly overestimates NOx concentrations at high latitudes of the Northern Hemisphere (NH) in winter and spring in comparison to the observations during TOPSE; with this reaction, modeled NOx concentrations are close to the measured values. This comparison provides evidence that the hydrolysis of N2O5 on sulfate aerosol plays an important role in controlling the tropospheric NOx and O3 budgets. The calculated reduction of NOx attributed to this reaction is 80 to 90\% in winter at high latitudes over North America. Because of the reduction of NOx, O3 concentrations are also decreased. The maximum O3 reduction occurs in spring although the maximum NOx reduction occurs in winter when photochemical O3 production is relatively low. The uncertainties related to uptake coefficient and aerosol loading in the model is analyzed. The analysis indicates that the changes in NOx due to these uncertainties are much smaller than the impact of hydrolysis of N2O5 on sulfate aerosol. The effect that hydrolysis of N2O5 on global NOx and O3 budgets are also assessed by the model. The results suggest that in the Northern Hemisphere, the average NOx budget decreases 50\% due to this reaction in winter and 5\% in summer. The average O3 budget is reduced by 8\% in winter and 6\% in summer. In the Southern Hemisphere (SH), the sulfate aerosol loading is significantly smaller than in the Northern Hemisphere. As a result, sulfate aerosol has little impact on NOx and O3 budgets of the Southern Hemisphere.}, -year = {2003} -} -@article{Wennberg2018, -author = {Wennberg, Paul O. and Bates, Kelvin H. and Crounse, John D. and Dodson, Leah G. and McVay, Renee C. and Mertens, Laura A. and Nguyen, Tran B. and Praske, Eric and Schwantes, Rebecca H. and Smarte, Matthew D. and St Clair, Jason M. and Teng, Alexander P. and Zhang, Xuan and Seinfeld, John H.}, -title = {Gas-Phase Reactions of Isoprene and Its Major Oxidation Products}, -journal = {Chemical Reviews}, -volume = {118}, -number = {7}, -pages = {3337-3390}, -year = {2018}, -doi = {10.1021/acs.chemrev.7b00439}, -note ={PMID: 29522327}, -URL = {https://doi.org/10.1021/acs.chemrev.7b00439}, -eprint = {https://doi.org/10.1021/acs.chemrev.7b00439} -} -@techreport{JPL15, -author = {J. B. Burkholder, S. P. Sander, J. Abbatt, J. R. Barker, R. E. Huie, C. E. Kolb, M. J. Kurylo, V. L. Orkin, D. M. -Wilmouth, and P. H. Wine}, -title = {Chemical Kinetics and Photochemical Data for Use in Atmospheric Studies, Evaluation No. 18 JPL Publication 15-10}, -institution = {Jet Propulsion Laboratory}, -location = {Pasadena}, -year = {2015}, -url = {http://jpldataeval.jpl.nasa.gov} -} @article{Ervens2003, abstract = {A detailed and extended chemical mechanism describing tropospheric aqueous phase chemistry (147 species and 438 reactions) is presented here as Chemical Aqueous Phase Radical Mechanism (CAPRAM) 2.4 (MODAC mechanism). The mechanism based on the former version 2.3 [ Herrmann et al., 2000] contains extended organic and transition metal chemistry and is formulated more explicitly based on a critical review of the literature. The aqueous chemistry has been coupled to the gas phase mechanism Regional Atmospheric Chemistry Modeling (RACM) [ Stockwell et al., 1997], and phase exchange accounted for using the resistance model of Schwartz [1986]. A method for estimating mass accommodation coefficients ({\&}{\#}945;) is described, which accounts for functional groups contained in a particular compound. A condensed version has also been developed to allow the use of CAPRAM 2.4 (MODAC mechanism) in higher-scale models. Here the reproducibility of the concentration levels of selected target species (i.e., NO x , S(IV), H2O2, NO3, OH, O3, and H+) within the limits of ± 5{\%} was used as a goal for eliminating insignificant reactions from the complete CAPRAM 2.4 (MODAC mechanism). This has been done using a range of initial conditions chosen to represent different atmospheric scenarios, and this produces a robust and concise set of reactions. The most interesting results are obtained using atmospheric conditions typical for an urban scenario, and the effects introduced by updating the aqueous phase chemistry are highlighted, in particular, with regard to radicals, redox cycling of transition metal ions and organic compounds. Finally, the reduced scheme has been incorporated into a one-dimensional (1-D) marine cloud model to demonstrate the applicability of this mechanism.}, author = {Ervens, B.}, diff --git a/mechanisms/cb05cl_ae5/cb05cl_ae5_species.json b/mechanisms/cb05cl_ae5/cb05cl_ae5_species.json index a7cfef1ad..3f6cde00e 100644 --- a/mechanisms/cb05cl_ae5/cb05cl_ae5_species.json +++ b/mechanisms/cb05cl_ae5/cb05cl_ae5_species.json @@ -44,7 +44,8 @@ { "name" : "CH4", "type" : "CHEM_SPEC", - "description" : "methane" + "description" : "methane", + "tracer type" : "CONSTANT" }, { "name" : "CL", @@ -366,11 +367,6 @@ "type" : "CHEM_SPEC", "description" : "first generation product from XYL" }, - { - "name" : "N2O", - "type" : "CHEM_SPEC", - "description" : "nitrous oxide - does not participate in CB05 reactions" - }, { "name" : "DUMMY", "type" : "CHEM_SPEC", @@ -379,21 +375,31 @@ { "name" : "O2", "type" : "CHEM_SPEC", - "description" : "molecular oxygen" + "description" : "molecular oxygen", + "tracer type" : "CONSTANT" + }, + { + "name" : "N2", + "type" : "CHEM_SPEC", + "description" : "molecular hydrogen", + "tracer type" : "CONSTANT" }, { "name" : "H2O", "type" : "CHEM_SPEC", - "description" : "water vapor" + "description" : "water vapor", + "tracer type" : "CONSTANT" }, { "name" : "H2", "type" : "CHEM_SPEC", - "description" : "molecular hydrogen" + "description" : "molecular hydrogen", + "tracer type" : "CONSTANT" }, { "name" : "M", "type" : "CHEM_SPEC", - "description" : "third body" + "description" : "third body", + "tracer type" : "CONSTANT" } ]} diff --git a/mechanisms/eqsam_v03d/eqsam_v03d_mech.json b/mechanisms/eqsam_v03d/eqsam_v03d_mech.json new file mode 100644 index 000000000..23a32f383 --- /dev/null +++ b/mechanisms/eqsam_v03d/eqsam_v03d_mech.json @@ -0,0 +1,145 @@ +{ +"notes" : "EQSAM chemistry is based on eqsam_v03d.f90", +"camp-data" :[ + { + "name" : "eqsam", + "type" : "MECHANISM", + "reactions" : [ + { + "gas-phase species" : "HCl", + "aerosol-phase species" : "HCl_aq", + "type" : "PHASE_TRANSFER" + }, + { + "gas-phase species" : "HNO3", + "aerosol-phase species" : "HNO3_aq", + "type" : "PHASE_TRANSFER" + }, + { + "gas-phase species" : "NH3", + "aerosol-phase species" : "NH3_aq", + "type" : "PHASE_TRANSFER" + }, + { + "gas-phase species" : "H2SO4", + "aerosol-phase species" : "H2SO4_aq", + "type" : "PHASE_TRANSFER" + }, + { + "gas-phase species" : "H2O", + "aerosol-phase species" : "H2O_aq", + "type" : "PHASE_TRANSFER" + }, + { + "reactants" : { "HCl_aq" : {} }, + "products" : { "H_p" : {}, "Cl_m" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "HNO3_aq" : {} }, + "products" : { "H_p" : {}, "NO3_m" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "NH3_aq" : {} }, + "products" : { "NH4_p" : {}, "H_p" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "H2SO4_aq" : {} }, + "products" : { "H_p" : {}, "HSO4_m" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "H2O_aq" : {} }, + "products" : { "H_p" : {}, "OH_m" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "NaCl" : {} }, + "products" : { "Na_p" : {}, "Cl_m" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "(Na)2SO4" : {} }, + "products" : { "Na_p" : { "yield" : 2 }, "SO4_mm" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "NaNO3" : {} }, + "products" : { "Na_p" : {}, "NO3_m" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "(NH4)2SO4" : {} }, + "products" : { "NH4_p" : { "yield" : 2 }, "SO4_mm" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "NH4NO3" : {} }, + "products" : { "NH4_p" : {}, "NO3_m" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "NH4Cl" : {} }, + "products" : { "NH4_p" : {}, "Cl_m" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "NH4HSO4" : {} }, + "products" : { "NH4_p" : {}, "HSO4_m" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "NaHSO4" : {} }, + "products" : { "Na_p" : {}, "HSO4_m" : {} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + }, + { + "reactants" : { "(NH4)3H(SO4)2" : {} }, + "products" : { "NH4_p" : { "yield" : 3 }, "SO4_mm" : {"yield" : 2} }, + "type" : "EQUIL", + "K_298" : 0.0, + "A" : 0.0, + "B": 0.0 + } +]} diff --git a/mechanisms/eqsam_v03d/eqsam_v03d_spec.json b/mechanisms/eqsam_v03d/eqsam_v03d_spec.json new file mode 100644 index 000000000..1890b2b3b --- /dev/null +++ b/mechanisms/eqsam_v03d/eqsam_v03d_spec.json @@ -0,0 +1,234 @@ +{ +"notes" : "EQSAM chemistry is based on eqsam_v03d.f90", +"camp-data" :[ + { + "name" : "Na_p", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.022989769, + "description" : "sodium ion" + }, + { + "name" : "HSO4_m", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1800, + "molecular weight [kg mol-1]" : 0.097071, + "description" : "bisulfate ion" + }, + { + "name" : "SO4_mm", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1800, + "molecular weight [kg mol-1]" : 0.096063, + "description" : "sulfate ion" + }, + { + "name" : "NH4_p", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1800, + "molecular weight [kg mol-1]" : 0.01804, + "description" : "ammonium ion" + }, + { + "name" : "NO3_m", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1800, + "molecular weight [kg mol-1]" : 0.0620049, + "description" : "nitrate ion" + }, + { + "name" : "Cl_m", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.035453, + "description" : "chloride ion" + }, + { + "name" : "K_p", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2600, + "molecular weight [kg mol-1]" : 0.0390983, + "description" : "potassium ion" + }, + { + "name" : "Ca_pp", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2600, + "molecular weight [kg mol-1]" : 0.040078, + "description" : "calcium ion" + }, + { + "name" : "Mg_pp", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2600, + "molecular weight [kg mol-1]" : 24.305, + "description" : "magnesium ion" + }, + { + "name" : "HCl", + "type" : "CHEM_SPEC", + "phase" : "GAS", + "description" : "hydrochloric acid" + }, + { + "name" : "HNO3", + "type" : "CHEM_SPEC", + "phase" : "GAS", + "description" : "nitric acid" + }, + { + "name" : "NH3", + "type" : "CHEM_SPEC", + "phase" : "GAS", + "description" : "ammonia" + }, + { + "name" : "H2SO4", + "type" : "CHEM_SPEC", + "phase" : "GAS", + "description" : "hydrochloric acid" + }, + { + "name" : "H2O", + "type" : "CHEM_SPEC", + "phase" : "GAS", + "description" : "water vapor" + }, + { + "name" : "H2O_aq", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1000, + "molecular weight [kg mol-1]" : 0.01801528, + "description" : "aerosol water" + }, + { + "name" : "H_p", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1000, + "molecular weight [kg mol-1]" : 0.001008, + "description" : "hydronium ion" + }, + { + "name" : "OH_m", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1000, + "molecular weight [kg mol-1]" : 0.017008, + "description" : "hydroxide ion" + }, + { + "name" : "NaCl", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.0584, + "description" : "sodium chloride" + }, + { + "name" : "(Na)2SO4", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.14204, + "description" : "sodium sulfate" + }, + { + "name" : "NaNO3", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.0849947, + "description" : "sodium nitrate" + }, + { + "name" : "(NH4)2SO4", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.13214, + "description" : "ammonium sulfate" + }, + { + "name" : "NH4NO3", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.080043, + "description" : "ammonium nitrate" + }, + { + "name" : "NH4Cl", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.053491, + "description" : "ammonium chloride" + }, + { + "name" : "H2SO4_aq", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1800, + "molecular weight [kg mol-1]" : 0.098079, + "description" : "condensed sulfuric acid" + }, + { + "name" : "NH3_aq", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1800, + "molecular weight [kg mol-1]" : 0.017031, + "description" : "condensed ammonia" + }, + { + "name" : "HNO3_aq", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1800, + "molecular weight [kg mol-1]" : 0.06301, + "description" : "condensed nitric acid" + }, + { + "name" : "HCl_aq", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 1800, + "molecular weight [kg mol-1]" : 0.03646, + "description" : "condensed hydrochloric acid" + }, + { + "name" : "NH4HSO4", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.11511, + "description" : "ammonium bisulfate" + }, + { + "name" : "NaHSO4", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.12006, + "description" : "sodium bisulfate" + }, + { + "name" : "(NH4)3H(SO4)2", + "type" : "CHEM_SPEC", + "phase" : "AEROSOL", + "density [kg m-3]" : 2200, + "molecular weight [kg mol-1]" : 0.157254, + "description" : "ammonium sulfate salt" + } +]} diff --git a/src/Jacobian.c b/src/Jacobian.c index 8149b3c44..4d5dbf06c 100644 --- a/src/Jacobian.c +++ b/src/Jacobian.c @@ -79,7 +79,10 @@ int jacobian_initialize(Jacobian *jac, unsigned int num_spec, for (; i_col < num_spec; ++i_col) { jac->col_ptrs[i_col] = i_elem; for (unsigned int i_row = 0; i_row < num_spec; ++i_row) { - if (jac_struct[i_row][i_col] == 1) jac->row_ids[i_elem++] = i_row; + if (jac_struct[i_row][i_col] == 1){ + jac->row_ids[i_elem] = i_row; + i_elem++; + } } } jac->col_ptrs[i_col] = i_elem; @@ -157,7 +160,8 @@ unsigned int jacobian_build_matrix(Jacobian *jac) { JacobianColumnElements *column = &(jac->elements[i_col]); for (unsigned int j_elem = 0; j_elem < column->number_of_elements; ++j_elem) { - jac->row_ids[i_elem++] = column->row_ids[j_elem]; + jac->row_ids[i_elem] = column->row_ids[j_elem]; + i_elem++; } } jac->col_ptrs[jac->num_spec] = i_elem; diff --git a/src/aero_phase_solver.c b/src/aero_phase_solver.c index 826442c36..90a4f0bbd 100644 --- a/src/aero_phase_solver.c +++ b/src/aero_phase_solver.c @@ -159,7 +159,10 @@ void aero_phase_get_volume__m3_m3(ModelData *model_data, int aero_phase_idx, SPEC_TYPE_(i_spec) == CHEM_SPEC_CONSTANT || SPEC_TYPE_(i_spec) == CHEM_SPEC_PSSA) { *volume += state_var[i_spec] / DENSITY_(i_spec); - if (jac_elem) jac_elem[i_jac++] = 1.0 / DENSITY_(i_spec); + if (jac_elem){ + jac_elem[i_jac] = 1.0 / DENSITY_(i_spec); + i_jac++; + } } } } diff --git a/src/aero_rep_factory.F90 b/src/aero_rep_factory.F90 index cf8220674..d70eea0da 100644 --- a/src/aero_rep_factory.F90 +++ b/src/aero_rep_factory.F90 @@ -147,7 +147,7 @@ !! \code{.unparsed} !! ... !! -!! # partmc library +!! # camp library !! ... !! set(AEROSOL_REPS_SRC !! ... diff --git a/src/camp_common.h b/src/camp_common.h index 015c3d012..05d990051 100644 --- a/src/camp_common.h +++ b/src/camp_common.h @@ -11,22 +11,41 @@ #ifndef CAMP_COMMON_H #define CAMP_COMMON_H +#include +#include #include #include "Jacobian.h" #include "time_derivative.h" /* SUNDIALS Header files with a description of contents used */ #ifdef CAMP_USE_SUNDIALS -#include /* Protoypes for CVODE fcts., consts. */ -#include /* CVDls interface */ + +#ifdef CAMP_USE_GPU +#include +#include +#include +#include "cuda/cuda_structs.h" +#endif +#include /* Protoypes for CVODE fcts., consts. */ +#include /* CVDls interface */ #ifdef CAMP_CUSTOM_CVODE -# include /* CVodeMem structure */ +#include /* CVodeMem structure */ #endif #include /* Serial N_Vector types, fcts, macros */ #include /* SUNDIALS math function macros */ #include /* definition of types */ #include /* KLU SUNLinearSolver */ +#include #include /* sparse SUNMatrix */ + + +#ifdef CAMP_USE_GPU +#include +#include +#include +#include +#endif + #endif // State variable types (Must match parameters defined in camp_chem_spec_data @@ -53,15 +72,26 @@ /* boolean definition */ // CUDA/C++ already has bool definition: Avoid issues disabling it for GPU #ifndef CAMP_GPU_SOLVER_H_ +#ifndef CVODE_gpu_SOLVER_H_ +#ifndef CVODE_gpu_d2_H_ +#ifndef ITSOLVERGPU_H +#ifndef CVODE_CUDA_H_ typedef enum { false, true } bool; #endif +#endif +#endif +#endif +#endif /* Jacobian map */ +#ifndef DEF_JAC_MAP +#define DEF_JAC_MAP typedef struct { int solver_id; // solver Jacobian id int rxn_id; // reaction Jacobian id int param_id; // sub model Jacobian id } JacMap; +#endif /* Model data structure */ typedef struct { @@ -74,6 +104,8 @@ typedef struct { int n_per_cell_solver_jac_elem; // number of potentially non-zero // solver Jacobian elements int n_cells; // number of cells to compute simultaneously + int n_cells_cpu_gpu; + int n_cells_gpu; double *abs_tol; // pointer to array of state variable absolute // integration tolerances int *var_type; // pointer to array of state variable types (solver, @@ -81,7 +113,6 @@ typedef struct { #ifdef CAMP_USE_SUNDIALS SUNMatrix J_init; // sparse solver Jacobian matrix with used elements // initialized to 1.0 - SUNMatrix J_rxn; // Matrix for Jacobian contributions from reactions SUNMatrix J_params; // Matrix for Jacobian contributions from sub model // parameter calculations SUNMatrix J_solver; // Solver Jacobian @@ -176,6 +207,22 @@ typedef struct { // for the current grid cell int n_sub_model_env_data; // Number of sub model environmental parameters // from all sub models + + int n_aero_phase_int_param; + int n_aero_phase_float_param; + int n_aero_rep_int_param; + int n_aero_rep_float_param; + int n_rxn_int_param; + int n_rxn_float_param; + +#ifdef CAMP_USE_GPU +#ifdef CAMP_DEBUG_GPU + double timeDerivKernel; + cudaEvent_t startDerivKernel; + cudaEvent_t stopDerivKernel; +#endif +#endif + } ModelData; /* Solver data structure */ @@ -203,19 +250,34 @@ typedef struct { #ifdef CAMP_DEBUG booleantype debug_out; // Output debugging information during solving booleantype eval_Jac; // Evalute Jacobian data during solving - int counterDeriv; // Total calls to f() - int counterJac; // Total calls to Jac() - clock_t timeDeriv; // Compute time for calls to f() - clock_t timeJac; // Compute time for calls to Jac() double max_loss_precision; // Maximum loss of precision during last call to f() #endif + + double t_initial; + double t_final; + +#ifdef CAMP_DEBUG_GPU + double timeCVode; +#endif + #endif +#ifdef CAMP_USE_GPU + ModelDataCPU mCPU; + ModelDataGPU *mGPU; + int *flagCells; + void *cvode_mem2; + float rate_cells_gpu; +#endif + int use_cpu; + int nGPUs; + void *cvode_mem; // CVodeMem object ModelData model_data; // Model data (used during initialization and solving) bool no_solve; // Flag to indicate whether to run the solver needs to be // run. Set to true when no reactions are present. double init_time_step; // Initial time step (s) + char **spec_names; // Species names } SolverData; #endif diff --git a/src/camp_core.F90 b/src/camp_core.F90 index d0f2ac063..fbd0ff247 100644 --- a/src/camp_core.F90 +++ b/src/camp_core.F90 @@ -90,9 +90,7 @@ module camp_camp_core #ifdef CAMP_USE_JSON use json_module #endif -#ifdef CAMP_USE_MPI - use mpi -#endif + use camp_mpi use camp_aero_phase_data use camp_aero_rep_data use camp_aero_rep_factory @@ -100,7 +98,6 @@ module camp_camp_core use camp_constants, only : i_kind, dp use camp_env_state use camp_mechanism_data - use camp_mpi use camp_camp_solver_data use camp_camp_state use camp_rxn_data @@ -120,7 +117,6 @@ module camp_camp_core !! !! Contains all time-invariant data for a Part-MC model run. type :: camp_core_t - private !> Chemical mechanisms !! FIXME set up an iterator for external modules to use and !! make all data members private @@ -138,6 +134,7 @@ module camp_camp_core !> Number of cells to compute integer(kind=i_kind) :: n_cells = 1 !> Initial state values + real(kind=dp), allocatable :: init_state_cell(:) real(kind=dp), allocatable :: init_state(:) !> Flag to split gas- and aerosol-phase reactions !! (for large aerosol representations, like single-particle) @@ -155,6 +152,8 @@ module camp_camp_core type(camp_solver_data_t), pointer, public :: solver_data_aero => null() !> Solver data (mixed gas- and aerosol-phase reactions) type(camp_solver_data_t), pointer, public :: solver_data_gas_aero => null() + real(kind=dp), allocatable :: init_state_var(:) + type(string_t), allocatable :: spec_names(:) !> Flag indicating the model data has been initialized logical :: core_is_initialized = .false. !> Flag indicating the solver has been initialized @@ -184,6 +183,9 @@ module camp_camp_core procedure :: get_rel_tol !> Get the absolute tolerance for a species on the state array procedure :: get_abs_tol + procedure :: export_solver_state + procedure :: join_solver_state + procedure :: export_solver_stats !> Get a new model state variable procedure :: new_state_one_cell procedure :: new_state_multi_cell @@ -258,6 +260,8 @@ function constructor(input_file_path, n_cells) result(new_obj) character(len=*), intent(in), optional :: input_file_path !> Num cells to compute simulatenously integer(kind=i_kind), optional :: n_cells + logical :: flag + integer(kind=i_kind) :: err allocate(new_obj) allocate(new_obj%mechanism(0)) @@ -273,7 +277,12 @@ function constructor(input_file_path, n_cells) result(new_obj) if (present(input_file_path)) then call new_obj%load_files(trim(input_file_path)) end if - +#ifdef CAMP_USE_MPI + call MPI_INITIALIZED(flag, err) + if (.not.flag) then + call camp_mpi_init( ) + endif +#endif end function constructor !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -393,7 +402,7 @@ end subroutine load_files !! key-value pair \b camp-data whose value is an array of \c json objects. !! Additional top-level key-value pairs will be ignored. Each of the \c json !! objects in the \b camp-data array must contain a key-value pair \b type - !! whose value is a string referencing a valid PartMC object. + !! whose value is a string referencing a valid CAMP object. !! !! The valid values for \b type are: !! @@ -440,6 +449,7 @@ subroutine load(this, input_file_path) character(len=:), allocatable :: str_val real(kind=json_rk) :: real_val logical :: file_exists, found + CHARACTER(len=255) :: cwd ! mechansim type(mechanism_data_t), pointer :: mech_ptr @@ -478,6 +488,10 @@ subroutine load(this, input_file_path) call assert_msg(936390222, trim(input_file_path(i_file)%string).ne."", & "Received empty string for file path") inquire( file=input_file_path(i_file)%string, exist=file_exists ) + if(.not.file_exists) then + call getcwd(cwd) + print*, "Current working directory:", trim(cwd) + end if call assert_msg(910660557, file_exists, "Cannot file file: "// & input_file_path(i_file)%string) call j_file%load_file(filename = input_file_path(i_file)%string) @@ -665,7 +679,7 @@ subroutine initialize(this) ! Variables for setting initial state values class(aero_rep_data_t), pointer :: rep - integer(kind=i_kind) :: i_state_elem, i_name + integer(kind=i_kind) :: i, i_state_elem, i_name ! Species name for looking up properties character(len=:), allocatable :: spec_name @@ -766,9 +780,11 @@ subroutine initialize(this) this%core_is_initialized = .true. ! Set the initial state values + allocate(this%init_state_cell(this%size_state_per_cell)) allocate(this%init_state(this%size_state_per_cell * this%n_cells)) ! Set species concentrations to zero + this%init_state_cell(:) = 0.0 this%init_state(:) = 0.0 ! Set activity coefficients to 1.0 @@ -785,6 +801,8 @@ subroutine initialize(this) i_state_elem = rep%spec_state_id(unique_names(i_name)%string) this%init_state(i_state_elem + i_cell * this%size_state_per_cell) = & real(1.0d0, kind=dp) + this%init_state_cell(i_state_elem) = & + this%init_state(i_state_elem + i_cell * this%size_state_per_cell) end do deallocate(unique_names) @@ -1133,14 +1151,24 @@ end function spec_state_id !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> Initialize the solver - subroutine solver_initialize(this) - - !> Chemical model + subroutine solver_initialize(this, use_cpu, nGPUs) class(camp_core_t), intent(inout) :: this - + integer, intent(in), optional :: use_cpu + integer, intent(in), optional :: nGPUs + type(string_t), allocatable :: spec_names(:) + integer :: i_spec, n_gas_spec, use_cpu1, nGPUs1 call assert_msg(662920365, .not.this%solver_is_initialized, & "Attempting to initialize the solver twice.") + use_cpu1=1 + nGPUs1=1 + if (present(use_cpu)) then + use_cpu1=use_cpu + end if + if (present(nGPUs)) then + nGPUs1=nGPUs + end if + ! Set up either two solvers (gas and aerosol) or one solver (combined) if (this%split_gas_aero) then @@ -1163,8 +1191,11 @@ subroutine solver_initialize(this) this%aero_rep, & ! Pointer to the aerosol representations this%sub_model, & ! Pointer to the sub-models GAS_RXN, & ! Reaction phase - this%n_cells & ! # of cells computed simultaneosly - ) + this%n_cells, & ! # of cells computed simultaneosly + spec_names, & ! Species names + use_cpu1, & + nGPUs1 & + ) call this%solver_data_aero%initialize( & this%var_type, & ! State array variable types this%abs_tol, & ! Absolute tolerances for each state var @@ -1173,8 +1204,11 @@ subroutine solver_initialize(this) this%aero_rep, & ! Pointer to the aerosol representations this%sub_model, & ! Pointer to the sub-models AERO_RXN, & ! Reaction phase - this%n_cells & ! # of cells computed simultaneosly - ) + this%n_cells, & ! # of cells computed simultaneosly + spec_names, & ! Species names + use_cpu1, & + nGPUs1 & + ) else ! Create a new solver data object @@ -1194,7 +1228,10 @@ subroutine solver_initialize(this) this%aero_rep, & ! Pointer to the aerosol representations this%sub_model, & ! Pointer to the sub-models GAS_AERO_RXN, & ! Reaction phase - this%n_cells & ! # of cells computed simultaneosly + this%n_cells, & ! # of cells computed simultaneosly + spec_names, & ! Species names + use_cpu1, & + nGPUs1 & ) end if @@ -1247,9 +1284,9 @@ end subroutine initialize_aero_rep_update_object subroutine initialize_rxn_update_object( this, rxn, update_data ) !> CAMP core - class(camp_core_t), intent(in) :: this + class(camp_core_t), intent(inout) :: this !> Reaction to be updated - class(rxn_data_t), intent(inout) :: rxn + class(rxn_data_t),target, intent(inout) :: rxn !> Update data object class(rxn_update_data_t), intent(out) :: update_data @@ -1290,12 +1327,26 @@ end subroutine initialize_sub_model_update_object !! the aerosol condensed data needs updated based on changes in, e.g., !! particle size or number concentration. The update types are aerosol- !! representation specific. - subroutine aero_rep_update_data(this, update_data) + subroutine aero_rep_update_data(this, update_data, cell_id) !> Chemical model class(camp_core_t), intent(in) :: this !> Update data - class(aero_rep_update_data_t), intent(in) :: update_data + class(aero_rep_update_data_t), intent(inout) :: update_data + !> Cell id + integer(kind=i_kind), optional :: cell_id + integer :: n_cells_update + + n_cells_update = 1 + if (present(cell_id)) then + update_data%cell_id=cell_id; + else + if(.not.this%n_cells.eq.1) then + print*,"aero_rep_update_data with more than 1 cell needs to specify cell_id this%n_cells",this%n_cells + stop + end if + update_data%cell_id=1; + end if if (associated(this%solver_data_gas)) & call this%solver_data_gas%update_aero_rep_data(update_data) @@ -1312,12 +1363,26 @@ end subroutine aero_rep_update_data !! when reaction parameters need updated from the host model. For example, !! this function can be called to update photolysis rates from a host !! model's photolysis module. - subroutine rxn_update_data(this, update_data) + subroutine rxn_update_data(this, update_data, cell_id) !> Chemical model class(camp_core_t), intent(in) :: this !> Update data - class(rxn_update_data_t), intent(in) :: update_data + class(rxn_update_data_t), intent(inout) :: update_data + !> Cell id + integer(kind=i_kind), optional :: cell_id + integer :: n_cells_update + + n_cells_update = 1 + if (present(cell_id)) then + update_data%cell_id=cell_id; + else + if(.not.this%n_cells.eq.1) then + print*,"rxn_update_data with more than 1 cell needs to specify cell_id this%n_cells",this%n_cells + stop + end if + update_data%cell_id=1; + end if if (associated(this%solver_data_gas)) & call this%solver_data_gas%update_rxn_data(update_data) @@ -1332,12 +1397,26 @@ end subroutine rxn_update_data !> Update data associated with a sub-model. This function should be called !! when sub-model parameters need updated from the host model. - subroutine sub_model_update_data(this, update_data) + subroutine sub_model_update_data(this, update_data, cell_id) !> Chemical model class(camp_core_t), intent(in) :: this !> Update data - class(sub_model_update_data_t), intent(in) :: update_data + class(sub_model_update_data_t), intent(inout) :: update_data + !> Cell id + integer(kind=i_kind), optional :: cell_id + integer :: n_cells_update + + n_cells_update = 1 + if (present(cell_id)) then + update_data%cell_id=cell_id; + else + if(.not.this%n_cells.eq.1) then + print*,"sub_model_update_data with more than 1 cell needs to specify cell_id this%n_cells",this%n_cells + stop + end if + update_data%cell_id=1; + end if if (associated(this%solver_data_gas)) & call this%solver_data_gas%update_sub_model_data(update_data) @@ -1358,7 +1437,7 @@ subroutine solve(this, camp_state, time_step, rxn_phase, solver_stats) use iso_c_binding !> Chemical model - class(camp_core_t), intent(in) :: this + class(camp_core_t), intent(inout) :: this !> Current model state type(camp_state_t), intent(inout), target :: camp_state !> Time step over which to integrate (s) @@ -1369,6 +1448,9 @@ subroutine solve(this, camp_state, time_step, rxn_phase, solver_stats) integer(kind=i_kind), intent(in), optional :: rxn_phase !> Return solver statistics to the host model type(solver_stats_t), intent(inout), optional, target :: solver_stats + integer(kind=c_int) :: solver_status + real(kind=dp) :: t_initial + real(kind=dp) :: t_final ! Phase to solve integer(kind=i_kind) :: phase @@ -1403,23 +1485,84 @@ subroutine solve(this, camp_state, time_step, rxn_phase, solver_stats) ! Make sure the requested solver was loaded call assert_msg(730097030, associated(solver), "Invalid solver requested") + t_initial = real(0.0, kind=dp) + t_final = time_step + ! Run the integration if (present(solver_stats)) then - call solver%solve(camp_state, real(0.0, kind=dp), time_step, & - solver_stats) + call solver%get_solver_stats( solver_stats ) + solver_status = solver%solve(camp_state, t_initial, t_final, solver_stats) + solver_stats%status_code = solver_status + solver_stats%start_time__s = t_initial + solver_stats%end_time__s = t_final else - call solver%solve(camp_state, real(0.0, kind=dp), time_step) + solver_status = solver%solve(camp_state, t_initial, t_final) + end if + + if (.not.present(solver_stats)) then + call warn_assert_msg(997420005, solver_status.eq.0, "Solver failed") end if end subroutine solve + subroutine export_solver_state(this) + use camp_rxn_data + use iso_c_binding + class(camp_core_t), intent(inout) :: this + integer(kind=i_kind) :: phase + type(camp_solver_data_t), pointer :: solver + phase = GAS_AERO_RXN + if (phase.eq.GAS_RXN) then + solver => this%solver_data_gas + else if (phase.eq.AERO_RXN) then + solver => this%solver_data_aero + else if (phase.eq.GAS_AERO_RXN) then + solver => this%solver_data_gas_aero + end if + call solver%export_solver_data_state() + end subroutine + + subroutine join_solver_state(this) + use camp_rxn_data + use iso_c_binding + class(camp_core_t), intent(inout) :: this + integer(kind=i_kind) :: phase + type(camp_solver_data_t), pointer :: solver + phase = GAS_AERO_RXN + if (phase.eq.GAS_RXN) then + solver => this%solver_data_gas + else if (phase.eq.AERO_RXN) then + solver => this%solver_data_aero + else if (phase.eq.GAS_AERO_RXN) then + solver => this%solver_data_gas_aero + end if + call solver%join_solver_data_state() + end subroutine + + subroutine export_solver_stats(this) + use camp_rxn_data + use iso_c_binding + class(camp_core_t), intent(inout) :: this + integer(kind=i_kind) :: phase + type(camp_solver_data_t), pointer :: solver + phase = GAS_AERO_RXN + if (phase.eq.GAS_RXN) then + solver => this%solver_data_gas + else if (phase.eq.AERO_RXN) then + solver => this%solver_data_aero + else if (phase.eq.GAS_AERO_RXN) then + solver => this%solver_data_gas_aero + end if + call solver%export_solver_data_stats() + end subroutine + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> Determine the size of a binary required to pack the mechanism integer(kind=i_kind) function pack_size(this, comm) !> Chemical model - class(camp_core_t), intent(in) :: this + class(camp_core_t), intent(inout) :: this !> MPI communicator integer, intent(in), optional :: comm @@ -1427,7 +1570,8 @@ integer(kind=i_kind) function pack_size(this, comm) type(sub_model_factory_t) :: sub_model_factory class(aero_rep_data_t), pointer :: aero_rep class(sub_model_data_t), pointer :: sub_model - integer(kind=i_kind) :: i_mech, i_phase, i_rep, i_sub_model, l_comm + integer(kind=i_kind) :: i_mech, i_phase, i_rep,& + i_sub_model, l_comm #ifdef CAMP_USE_MPI if (present(comm)) then @@ -1456,17 +1600,16 @@ integer(kind=i_kind) function pack_size(this, comm) end do do i_sub_model = 1, size(this%sub_model) sub_model => this%sub_model(i_sub_model)%val - pack_size = pacK_size + sub_model_factory%pack_size(sub_model, l_comm) + pack_size = pack_size + sub_model_factory%pack_size(sub_model, l_comm) sub_model => null() end do pack_size = pack_size + & camp_mpi_pack_size_integer(this%size_state_per_cell, l_comm) + & - camp_mpi_pack_size_integer(this%n_cells, l_comm) + & camp_mpi_pack_size_logical(this%split_gas_aero, l_comm) + & camp_mpi_pack_size_real(this%rel_tol, l_comm) + & camp_mpi_pack_size_real_array(this%abs_tol, l_comm) + & camp_mpi_pack_size_integer_array(this%var_type, l_comm) + & - camp_mpi_pack_size_real_array(this%init_state, l_comm) + camp_mpi_pack_size_real_array(this%init_state_cell, l_comm) #else pack_size = 0 #endif @@ -1478,7 +1621,7 @@ end function pack_size subroutine bin_pack(this, buffer, pos, comm) !> Chemical model - class(camp_core_t), intent(in) :: this + class(camp_core_t), intent(inout) :: this !> Memory buffer character, intent(inout) :: buffer(:) !> Current buffer position @@ -1525,12 +1668,11 @@ subroutine bin_pack(this, buffer, pos, comm) sub_model => null() end do call camp_mpi_pack_integer(buffer, pos, this%size_state_per_cell, l_comm) - call camp_mpi_pack_integer(buffer, pos, this%n_cells, l_comm) call camp_mpi_pack_logical(buffer, pos, this%split_gas_aero, l_comm) call camp_mpi_pack_real(buffer, pos, this%rel_tol, l_comm) call camp_mpi_pack_real_array(buffer, pos, this%abs_tol, l_comm) call camp_mpi_pack_integer_array(buffer, pos, this%var_type, l_comm) - call camp_mpi_pack_real_array(buffer, pos, this%init_state, l_comm) + call camp_mpi_pack_real_array(buffer, pos, this%init_state_cell, l_comm) call assert(184050835, & pos - prev_position <= this%pack_size(l_comm)) #endif @@ -1550,6 +1692,7 @@ subroutine bin_unpack(this, buffer, pos, comm) integer, intent(inout) :: pos !> MPI communicator integer, intent(in), optional :: comm + integer :: i_cell, i_state_elem #ifdef CAMP_USE_MPI type(aero_rep_factory_t) :: aero_rep_factory @@ -1592,15 +1735,23 @@ subroutine bin_unpack(this, buffer, pos, comm) sub_model_factory%bin_unpack(buffer, pos, l_comm) end do call camp_mpi_unpack_integer(buffer, pos, this%size_state_per_cell, l_comm) - call camp_mpi_unpack_integer(buffer, pos, this%n_cells, l_comm) call camp_mpi_unpack_logical(buffer, pos, this%split_gas_aero, l_comm) call camp_mpi_unpack_real(buffer, pos, this%rel_tol, l_comm) call camp_mpi_unpack_real_array(buffer, pos, this%abs_tol, l_comm) call camp_mpi_unpack_integer_array(buffer, pos, this%var_type, l_comm) - call camp_mpi_unpack_real_array(buffer, pos, this%init_state, l_comm) + call camp_mpi_unpack_real_array(buffer, pos, this%init_state_cell, l_comm) + + allocate(this%init_state(this%size_state_per_cell * this%n_cells)) + do i_cell = 0, this%n_cells - 1 + do i_state_elem = 1, this%size_state_per_cell + this%init_state(i_state_elem + i_cell * this%size_state_per_cell)=& + this%init_state_cell(i_state_elem) + end do + end do + this%core_is_initialized = .true. call assert(291557168, & - pos - prev_position <= this%pack_size(l_comm)) + pos - prev_position <= this%pack_size(l_comm)) #endif end subroutine bin_unpack diff --git a/src/camp_debug.h b/src/camp_debug.h index 43ac9da7d..41af364e3 100644 --- a/src/camp_debug.h +++ b/src/camp_debug.h @@ -101,7 +101,8 @@ void camp_debug_print_jac(void *solver_data, SUNMatrix J, const char *message) { next_col = SM_INDEXPTRS_S(J)[i_ind + 1]; for (int i_dep = 0; i_dep < n_state_var; i_dep++) { if (i_dep == SM_INDEXVALS_S(J)[i_elem] && i_elem < next_col) { - printf(" % -1.2le ", SM_DATA_S(J)[i_elem++]); + printf(" % -1.2le ", SM_DATA_S(J)[i_elem]); + i_elem++; } else { printf(" - "); } @@ -138,35 +139,6 @@ static void print_data_sizes(ModelData *md) { printf("n_dep_var: %d", md->n_per_cell_dep_var * md->n_cells); } -/** \brief Print Jacobian matrix in format KLU SPARSE - * - * \param M Jacobian matrix - */ -static void print_jacobian(SUNMatrix M) { - printf("\n NNZ JAC: %lld \n", (long long)SM_NNZ_S(M)); - printf("DATA | INDEXVALS:\n"); - for (int i = 0; i < SM_NNZ_S(M); i++) { - printf("% -le \n", (SM_DATA_S(M))[i]); - printf("%lld \n", (long long)((SM_INDEXVALS_S(M))[i])); - } - printf("PTRS:\n"); - for (int i = 0; i <= SM_NP_S(M); i++) { - printf("%lld \n", (long long)((SM_INDEXPTRS_S(M))[i])); - } -} - -/** \brief Print derivative array - * - * \param deriv Derivative array - */ -static void print_derivative(N_Vector deriv) { - // printf(" deriv length: %d\n", NV_LENGTH_S(deriv)); - for (int i = 0; i < NV_LENGTH_S(deriv); i++) { // NV_LENGTH_S(deriv) - printf(" deriv: % -le", NV_DATA_S(deriv)[i]); - printf(" index: %d \n", i); - } -} - /** \brief Evaluate the derivative and Jacobian near a given state * for a specified species * diff --git a/src/camp_solver.c b/src/camp_solver.c index 9f5ff6da2..54931f40d 100644 --- a/src/camp_solver.c +++ b/src/camp_solver.c @@ -16,12 +16,13 @@ #include #include #include +#include #include #include "aero_rep_solver.h" #include "rxn_solver.h" #include "sub_model_solver.h" #ifdef CAMP_USE_GPU -#include "cuda/camp_gpu_solver.h" +#include "cuda/cvode_gpu.h" #endif #ifdef CAMP_USE_GSL #include @@ -29,6 +30,13 @@ #include #endif #include "camp_debug.h" +#include "debug_and_stats/camp_debug_2.h" + +#ifdef CAMP_DEBUG_GPU +#ifdef CAMP_USE_MPI +#include +#endif +#endif // Default solver initial time step relative to total integration time #define DEFAULT_TIME_STEP 1.0 @@ -87,7 +95,8 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, int n_aero_rep, int n_aero_rep_int_param, int n_aero_rep_float_param, int n_aero_rep_env_param, int n_sub_model, int n_sub_model_int_param, - int n_sub_model_float_param, int n_sub_model_env_param) { + int n_sub_model_float_param, int n_sub_model_env_param, + int use_cpu, int nGPUs) { // Create the SolverData object SolverData *sd = (SolverData *)malloc(sizeof(SolverData)); if (sd == NULL) { @@ -114,7 +123,15 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, // Save the number of state variables per grid cell sd->model_data.n_per_cell_state_var = n_state_var; - // Set number of cells to compute simultaneously + sd->use_cpu = use_cpu; + sd->nGPUs = nGPUs; +#ifdef DEV_CPU_GPU + sd->rate_cells_gpu=1; + printf("Set cells to gpu to %lf %\n",sd->rate_cells_gpu*100); + sd->model_data.n_cells_gpu = n_cells * sd->rate_cells_gpu; + sd->model_data.n_cells_cpu_gpu = n_cells; + n_cells=1; +#endif sd->model_data.n_cells = n_cells; // Add the variable types to the solver data @@ -190,6 +207,8 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, } sd->model_data.n_rxn = n_rxn; + sd->model_data.n_rxn_int_param = n_rxn_int_param; + sd->model_data.n_rxn_float_param = n_rxn_float_param; sd->model_data.n_added_rxns = 0; sd->model_data.n_rxn_env_data = 0; sd->model_data.rxn_int_indices[0] = 0; @@ -232,6 +251,8 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, } sd->model_data.n_aero_phase = n_aero_phase; + sd->model_data.n_aero_phase_int_param = n_aero_phase_int_param; + sd->model_data.n_aero_phase_float_param = n_aero_phase_float_param; sd->model_data.n_added_aero_phases = 0; sd->model_data.aero_phase_int_indices[0] = 0; sd->model_data.aero_phase_float_indices[0] = 0; @@ -289,6 +310,8 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, } sd->model_data.n_aero_rep = n_aero_rep; + sd->model_data.n_aero_rep_int_param = n_aero_rep_int_param; + sd->model_data.n_aero_rep_float_param = n_aero_rep_float_param; sd->model_data.n_added_aero_reps = 0; sd->model_data.n_aero_rep_env_data = 0; sd->model_data.aero_rep_int_indices[0] = 0; @@ -348,13 +371,10 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, sd->model_data.sub_model_float_indices[0] = 0; sd->model_data.sub_model_env_idx[0] = 0; -#ifdef CAMP_USE_GPU - solver_new_gpu_cu(n_dep_var, n_state_var, n_rxn, n_rxn_int_param, - n_rxn_float_param, n_rxn_env_param, n_cells); -#endif - -#ifdef CAMP_DEBUG - if (sd->debug_out) print_data_sizes(&(sd->model_data)); +#ifdef CAMP_DEBUG_GPU + sd->timeCVode = 0.; + init_export_stats(); + init_export_state(); #endif // Return a pointer to the new SolverData object @@ -370,6 +390,7 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, * \param rel_tol Relative integration tolerance * \param max_steps Maximum number of internal integration steps * \param max_conv_fails Maximum number of convergence failures + * \return Pointer to an initialized SolverData object */ void solver_initialize(void *solver_data, double *abs_tol, double rel_tol, int max_steps, int max_conv_fails) { @@ -427,7 +448,7 @@ void solver_initialize(void *solver_data, double *abs_tol, double rel_tol, check_flag_fail(&flag, "CVodeSVtolerances", 1); // Add a pointer in the model data to the absolute tolerances for use during - // solving. TODO find a better way to do this + // solving. sd->model_data.abs_tol = abs_tol; // Set the maximum number of iterations @@ -438,7 +459,7 @@ void solver_initialize(void *solver_data, double *abs_tol, double rel_tol, flag = CVodeSetMaxConvFails(sd->cvode_mem, max_conv_fails); check_flag_fail(&flag, "CVodeSetMaxConvFails", 1); - // Set the maximum number of error test failures (TODO make separate input?) + // Set the maximum number of error test failures flag = CVodeSetMaxErrTestFails(sd->cvode_mem, max_conv_fails); check_flag_fail(&flag, "CVodeSetMaxErrTestFails", 1); @@ -474,22 +495,16 @@ void solver_initialize(void *solver_data, double *abs_tol, double rel_tol, check_flag_fail(&flag, "CVodeSetDlsGuessHelper", 1); #endif -// Allocate Jacobian on GPU -#ifdef CAMP_USE_GPU - allocate_jac_gpu(sd->model_data.n_per_cell_solver_jac_elem, n_cells); -#endif - -// Set gpu rxn values #ifdef CAMP_USE_GPU - solver_set_rxn_data_gpu(&(sd->model_data)); + if(sd->use_cpu==0){ + constructor_cvode_gpu(sd); + } #endif - -#ifndef FAILURE_DETAIL +#ifdef FAILURE_DETAIL // Set a custom error handling function flag = CVodeSetErrHandlerFn(sd->cvode_mem, error_handler, (void *)sd); check_flag_fail(&flag, "CVodeSetErrHandlerFn", 0); #endif - #endif } @@ -543,17 +558,20 @@ int solver_set_eval_jac(void *solver_data, bool eval_Jac) { */ int solver_run(void *solver_data, double *state, double *env, double t_initial, double t_final) { -#ifdef CAMP_USE_SUNDIALS SolverData *sd = (SolverData *)solver_data; ModelData *md = &(sd->model_data); - int n_state_var = sd->model_data.n_per_cell_state_var; - int n_cells = sd->model_data.n_cells; + int n_state_var = md->n_per_cell_state_var; + int n_cells = md->n_cells; int flag; + // Update model data pointers + sd->model_data.total_state = state; + sd->model_data.total_env = env; + // Update the dependent variables int i_dep_var = 0; - for (int i_cell = 0; i_cell < n_cells; i_cell++) - for (int i_spec = 0; i_spec < n_state_var; i_spec++) + for (int i_cell = 0; i_cell < n_cells; i_cell++){ + for (int i_spec = 0; i_spec < n_state_var; i_spec++) { if (sd->model_data.var_type[i_spec] == CHEM_SPEC_VARIABLE) { NV_Ith_S(sd->y, i_dep_var++) = state[i_spec + i_cell * n_state_var] > TINY @@ -565,48 +583,50 @@ int solver_run(void *solver_data, double *state, double *env, double t_initial, ? state[i_spec + i_cell * n_state_var] : TINY; } - - // Update model data pointers - sd->model_data.total_state = state; - sd->model_data.total_env = env; - -#ifdef CAMP_DEBUG - // Update the debug output flag in CVODES and the linear solver - flag = CVodeSetDebugOut(sd->cvode_mem, sd->debug_out); - check_flag_fail(&flag, "CVodeSetDebugOut", 1); - flag = SUNKLUSetDebugOut(sd->ls, sd->debug_out); - check_flag_fail(&flag, "SUNKLUSetDebugOut", 1); -#endif - - // Reset the counter of Jacobian evaluation failures - sd->Jac_eval_fails = 0; - - // Update data for new environmental state - // (This is set up to assume the environmental variables do not change during - // solving. This can be changed in the future if necessary.) - for (int i_cell = 0; i_cell < md->n_cells; ++i_cell) { - // Set the grid cell state pointers + } md->grid_cell_id = i_cell; md->grid_cell_state = &(md->total_state[i_cell * md->n_per_cell_state_var]); md->grid_cell_env = &(md->total_env[i_cell * CAMP_NUM_ENV_PARAM_]); - md->grid_cell_rxn_env_data = - &(md->rxn_env_data[i_cell * md->n_rxn_env_data]); + md->grid_cell_rxn_env_data = &(md->rxn_env_data[i_cell * md->n_rxn_env_data]); md->grid_cell_aero_rep_env_data = &(md->aero_rep_env_data[i_cell * md->n_aero_rep_env_data]); md->grid_cell_sub_model_env_data = &(md->sub_model_env_data[i_cell * md->n_sub_model_env_data]); - // Update the model for the current environmental state aero_rep_update_env_state(md); sub_model_update_env_state(md); rxn_update_env_state(md); + //if(i_cell==0){ + //print_double(md->grid_cell_env,CAMP_NUM_ENV_PARAM_,"env689"); + //print_double(md->grid_cell_state,n_state_var,"state688"); + //double *yp = N_VGetArrayPointer(sd->y); + //print_double(yp,md->n_per_cell_dep_var,"y660"); + //} + //print_double(md->grid_cell_env,CAMP_NUM_ENV_PARAM_,"env689"); + //double *yp = N_VGetArrayPointer(sd->y)+i_cell*md->n_per_cell_dep_var; + //print_double(yp,md->n_per_cell_dep_var,"y660"); + //print_double(md->grid_cell_state,md->n_per_cell_state_var,"state688"); } - CAMP_DEBUG_JAC_STRUCT(sd->model_data.J_init, "Begin solving"); + //Reset jac solving, otherwise values from previous iteration would be carried to current iteration + N_VConst(0.0, md->J_state); + N_VConst(0.0, md->J_deriv); + N_VConst(0.0, md->J_tmp); + SM_NNZ_S(md->J_solver) = SM_NNZ_S(md->J_init); + for (int i = 0; i <= SM_NP_S(md->J_solver); i++) { + (SM_INDEXPTRS_S(md->J_solver))[i] = (SM_INDEXPTRS_S(md->J_init))[i]; + } + for (int i = 0; i < SM_NNZ_S(md->J_solver); i++) { + (SM_INDEXVALS_S(md->J_solver))[i] = (SM_INDEXVALS_S(md->J_init))[i]; + (SM_DATA_S(md->J_solver))[i] = 0.0; + } + sd->Jac_eval_fails = 0; // Reset the flag indicating a current J_guess sd->curr_J_guess = false; + sd->t_initial = t_initial; + sd->t_final = t_final; // Set the initial time step sd->init_time_step = (t_final - t_initial) * DEFAULT_TIME_STEP; @@ -629,13 +649,30 @@ int solver_run(void *solver_data, double *state, double *env, double t_initial, // Run the solver realtype t_rt = (realtype)t_initial; + if (!sd->no_solve) { +#ifdef CAMP_DEBUG_GPU + double starttimeCvode = MPI_Wtime(); +#endif +#ifdef CAMP_USE_GPU + if(sd->use_cpu==1){ + flag = CVode(sd->cvode_mem, (realtype)t_final, sd->y, &t_rt, CV_NORMAL); + } + else{ + flag = cudaCVode(sd->cvode_mem, (realtype)t_final, sd->y, + &t_rt, sd); + } +#else flag = CVode(sd->cvode_mem, (realtype)t_final, sd->y, &t_rt, CV_NORMAL); +#endif +#ifdef CAMP_DEBUG_GPU + sd->timeCVode += (MPI_Wtime() - starttimeCvode); +#endif sd->solver_flag = flag; -#ifndef FAILURE_DETAIL +#ifdef FAILURE_DETAIL if (flag < 0) { #else - if (check_flag(&flag, "CVode", 1) == CAMP_SOLVER_FAIL) { + if (check_flag(&flag, "CVode", 1) != CAMP_SOLVER_SUCCESS) { if (flag == -6) { long int lsflag; int lastflag = CVDlsGetLastFlag(sd->cvode_mem, &lsflag); @@ -644,32 +681,15 @@ int solver_run(void *solver_data, double *state, double *env, double t_initial, N_Vector deriv = N_VClone(sd->y); flag = f(t_initial, sd->y, deriv, sd); if (flag != 0) - printf("\nCall to f() at failed state failed with flag %d\n", flag); - for (int i_cell = 0; i_cell < md->n_cells; ++i_cell) { - printf("\n Cell: %d ", i_cell); - printf("temp = %le pressure = %le\n", env[i_cell * CAMP_NUM_ENV_PARAM_], - env[i_cell * CAMP_NUM_ENV_PARAM_ + 1]); - for (int i_spec = 0, i_dep_var = 0; i_spec < md->n_per_cell_state_var; - i_spec++) - if (md->var_type[i_spec] == CHEM_SPEC_VARIABLE) { - printf( - "spec %d = %le deriv = %le\n", i_spec, - NV_Ith_S(sd->y, i_cell * md->n_per_cell_dep_var + i_dep_var), - NV_Ith_S(deriv, i_cell * md->n_per_cell_dep_var + i_dep_var)); - i_dep_var++; - } else { - printf("spec %d = %le\n", i_spec, - state[i_cell * md->n_per_cell_state_var + i_spec]); - } - } + printf("\nCall to f() at failed state failed with flag %d \n",flag); solver_print_stats(sd->cvode_mem); #endif return CAMP_SOLVER_FAIL; } } - // Update the species concentrations on the state array i_dep_var = 0; + //printf("NV_Ith_S(sd->y, i_dep_var)\n"); for (int i_cell = 0; i_cell < n_cells; i_cell++) { for (int i_spec = 0; i_spec < n_state_var; i_spec++) { if (md->var_type[i_spec] == CHEM_SPEC_VARIABLE) { @@ -687,9 +707,6 @@ int solver_run(void *solver_data, double *state, double *env, double t_initial, sub_model_calculate(md); return CAMP_SOLVER_SUCCESS; -#else - return CAMP_SOLVER_FAIL; -#endif } /** \brief Get solver statistics after an integration attempt @@ -730,55 +747,61 @@ void solver_get_statistics(void *solver_data, int *solver_flag, int *num_steps, double *next_time_step__s, int *Jac_eval_fails, int *RHS_evals_total, int *Jac_evals_total, double *RHS_time__s, double *Jac_time__s, - double *max_loss_precision) { -#ifdef CAMP_USE_SUNDIALS + double *max_loss_precision + ) { SolverData *sd = (SolverData *)solver_data; long int nst, nfe, nsetups, nje, nfeLS, nni, ncfn, netf, nge; realtype last_h, curr_h; int flag; - *solver_flag = sd->solver_flag; - flag = CVodeGetNumSteps(sd->cvode_mem, &nst); - if (check_flag(&flag, "CVodeGetNumSteps", 1) == CAMP_SOLVER_FAIL) return; - *num_steps = (int)nst; - flag = CVodeGetNumRhsEvals(sd->cvode_mem, &nfe); - if (check_flag(&flag, "CVodeGetNumRhsEvals", 1) == CAMP_SOLVER_FAIL) return; - *RHS_evals = (int)nfe; - flag = CVodeGetNumLinSolvSetups(sd->cvode_mem, &nsetups); - if (check_flag(&flag, "CVodeGetNumLinSolveSetups", 1) == CAMP_SOLVER_FAIL) - return; - *LS_setups = (int)nsetups; - flag = CVodeGetNumErrTestFails(sd->cvode_mem, &netf); - if (check_flag(&flag, "CVodeGetNumErrTestFails", 1) == CAMP_SOLVER_FAIL) - return; - *error_test_fails = (int)netf; - flag = CVodeGetNumNonlinSolvIters(sd->cvode_mem, &nni); - if (check_flag(&flag, "CVodeGetNonlinSolvIters", 1) == CAMP_SOLVER_FAIL) - return; - *NLS_iters = (int)nni; - flag = CVodeGetNumNonlinSolvConvFails(sd->cvode_mem, &ncfn); - if (check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1) == - CAMP_SOLVER_FAIL) - return; - *NLS_convergence_fails = ncfn; - flag = CVDlsGetNumJacEvals(sd->cvode_mem, &nje); - if (check_flag(&flag, "CVDlsGetNumJacEvals", 1) == CAMP_SOLVER_FAIL) return; - *DLS_Jac_evals = (int)nje; - flag = CVDlsGetNumRhsEvals(sd->cvode_mem, &nfeLS); - if (check_flag(&flag, "CVDlsGetNumRhsEvals", 1) == CAMP_SOLVER_FAIL) return; - *DLS_RHS_evals = (int)nfeLS; - flag = CVodeGetLastStep(sd->cvode_mem, &last_h); - if (check_flag(&flag, "CVodeGetLastStep", 1) == CAMP_SOLVER_FAIL) return; - *last_time_step__s = (double)last_h; - flag = CVodeGetCurrentStep(sd->cvode_mem, &curr_h); - if (check_flag(&flag, "CVodeGetCurrentStep", 1) == CAMP_SOLVER_FAIL) return; - *next_time_step__s = (double)curr_h; - *Jac_eval_fails = sd->Jac_eval_fails; +#ifdef CAMP_USE_GPU + if(sd->use_cpu==1){ +#endif + *solver_flag = sd->solver_flag; + flag = CVodeGetNumSteps(sd->cvode_mem, &nst); + if (check_flag(&flag, "CVodeGetNumSteps", 1) == CAMP_SOLVER_FAIL) return; + *num_steps = (int)nst; + flag = CVodeGetNumRhsEvals(sd->cvode_mem, &nfe); + if (check_flag(&flag, "CVodeGetNumRhsEvals", 1) == CAMP_SOLVER_FAIL) return; + *RHS_evals = (int)nfe; + flag = CVodeGetNumLinSolvSetups(sd->cvode_mem, &nsetups); + if (check_flag(&flag, "CVodeGetNumLinSolveSetups", 1) == CAMP_SOLVER_FAIL) + return; + *LS_setups = (int)nsetups; + flag = CVodeGetNumErrTestFails(sd->cvode_mem, &netf); + if (check_flag(&flag, "CVodeGetNumErrTestFails", 1) == CAMP_SOLVER_FAIL) + return; + *error_test_fails = (int)netf; + flag = CVodeGetNumNonlinSolvIters(sd->cvode_mem, &nni); + if (check_flag(&flag, "CVodeGetNonlinSolvIters", 1) == CAMP_SOLVER_FAIL) + return; + *NLS_iters = (int)nni; + flag = CVodeGetNumNonlinSolvConvFails(sd->cvode_mem, &ncfn); + if (check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1) == + CAMP_SOLVER_FAIL) + return; + *NLS_convergence_fails = ncfn; + flag = CVDlsGetNumJacEvals(sd->cvode_mem, &nje); + if (check_flag(&flag, "CVDlsGetNumJacEvals", 1) == CAMP_SOLVER_FAIL) return; + *DLS_Jac_evals = (int)nje; + flag = CVDlsGetNumRhsEvals(sd->cvode_mem, &nfeLS); + if (check_flag(&flag, "CVDlsGetNumRhsEvals", 1) == CAMP_SOLVER_FAIL) return; + *DLS_RHS_evals = (int)nfeLS; + flag = CVodeGetLastStep(sd->cvode_mem, &last_h); + if (check_flag(&flag, "CVodeGetLastStep", 1) == CAMP_SOLVER_FAIL) return; + *last_time_step__s = (double)last_h; + flag = CVodeGetCurrentStep(sd->cvode_mem, &curr_h); + if (check_flag(&flag, "CVodeGetCurrentStep", 1) == CAMP_SOLVER_FAIL) return; + *next_time_step__s = (double)curr_h; + *Jac_eval_fails = sd->Jac_eval_fails; +#ifdef CAMP_USE_GPU + } +#endif #ifdef CAMP_DEBUG - *RHS_evals_total = sd->counterDeriv; - *Jac_evals_total = sd->counterJac; - *RHS_time__s = ((double)sd->timeDeriv) / CLOCKS_PER_SEC; - *Jac_time__s = ((double)sd->timeJac) / CLOCKS_PER_SEC; + *RHS_evals_total = -1; + *Jac_evals_total = -1; + *RHS_time__s = 0.0; + *Jac_time__s = 0.0; *max_loss_precision = sd->max_loss_precision; #else *RHS_evals_total = -1; @@ -787,11 +810,28 @@ void solver_get_statistics(void *solver_data, int *solver_flag, int *num_steps, *Jac_time__s = 0.0; *max_loss_precision = 0.0; #endif + +} + +void export_solver_state(void *solver_data){ + SolverData *sd = (SolverData *)solver_data; + export_state(sd); +} + +void join_solver_state(void *solver_data){ + SolverData *sd = (SolverData *)solver_data; + join_export_state(sd); +} + +void export_solver_stats(void *solver_data){ + SolverData *sd = (SolverData *)solver_data; +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + solver_get_statistics_gpu(sd); #endif + export_stats(sd); } #ifdef CAMP_USE_SUNDIALS - /** \brief Update the model state from the current solver state * * \param solver_state Solver state vector @@ -802,12 +842,13 @@ void solver_get_statistics(void *solver_data, int *solver_flag, int *num_steps, * \return CAMP_SOLVER_SUCCESS for successful update or * CAMP_SOLVER_FAIL for negative concentration */ -int camp_solver_update_model_state(N_Vector solver_state, ModelData *model_data, - realtype threshhold, - realtype replacement_value) { +int camp_solver_update_model_state(N_Vector solver_state, SolverData *sd) { + ModelData *model_data = &(sd->model_data); int n_state_var = model_data->n_per_cell_state_var; int n_dep_var = model_data->n_per_cell_dep_var; int n_cells = model_data->n_cells; + double replacement_value = TINY; + double threshhold = -SMALL; int i_dep_var = 0; for (int i_cell = 0; i_cell < n_cells; i_cell++) { @@ -815,7 +856,7 @@ int camp_solver_update_model_state(N_Vector solver_state, ModelData *model_data, if (model_data->var_type[i_spec] == CHEM_SPEC_VARIABLE) { if (NV_DATA_S(solver_state)[i_dep_var] < -SMALL) { #ifdef FAILURE_DETAIL - printf("\nFailed model state update: [spec %d] = %le", i_spec, + printf("Failed model state update: [spec %d] = %le\n", i_spec, NV_DATA_S(solver_state)[i_dep_var]); #endif return CAMP_SOLVER_FAIL; @@ -845,9 +886,7 @@ int f(realtype t, N_Vector y, N_Vector deriv, void *solver_data) { ModelData *md = &(sd->model_data); realtype time_step; -#ifdef CAMP_DEBUG - sd->counterDeriv++; -#endif + // Get a pointer to the derivative data double *deriv_data = N_VGetArrayPointer(deriv); @@ -870,7 +909,7 @@ int f(realtype t, N_Vector y, N_Vector deriv, void *solver_data) { // Update the state array with the current dependent variable values. // Signal a recoverable error (positive return value) for negative // concentrations. - if (camp_solver_update_model_state(y, md, -SMALL, TINY) != CAMP_SOLVER_SUCCESS) + if (camp_solver_update_model_state(y, sd) != CAMP_SOLVER_SUCCESS) return 1; // Get the Jacobian-estimated derivative @@ -878,25 +917,7 @@ int f(realtype t, N_Vector y, N_Vector deriv, void *solver_data) { SUNMatMatvec(md->J_solver, md->J_tmp, md->J_tmp2); N_VLinearSum(1.0, md->J_deriv, 1.0, md->J_tmp2, md->J_tmp); -#ifdef CAMP_DEBUG - // Measure calc_deriv time execution - clock_t start = clock(); -#endif - -#ifdef CAMP_USE_GPU - // Reset the derivative vector - N_VConst(ZERO, deriv); - - // Calculate the time derivative f(t,y) - // (this is for all grid cells at once) - rxn_calc_deriv_gpu(md, deriv, (double)time_step); -#endif - -#ifdef CAMP_DEBUG - clock_t end = clock(); - sd->timeDeriv += (end - start); -#endif - + //print_double(md->total_state,n_state_var,"state602"); // Loop through the grid cells and update the derivative array for (int i_cell = 0; i_cell < n_cells; ++i_cell) { // Set the grid cell state pointers @@ -916,12 +937,6 @@ int f(realtype t, N_Vector y, N_Vector deriv, void *solver_data) { // Run the sub models sub_model_calculate(md); -#ifdef CAMP_DEBUG - // Measure calc_deriv time execution - clock_t start2 = clock(); -#endif - -#ifndef CAMP_USE_GPU // Reset the TimeDerivative time_derivative_reset(sd->time_deriv); @@ -936,15 +951,21 @@ int f(realtype t, N_Vector y, N_Vector deriv, void *solver_data) { time_derivative_output(sd->time_deriv, deriv_data, NULL, sd->output_precision); } -#else - // Add contributions from reactions not implemented on GPU - // FIXME need to fix this to use TimeDerivative - rxn_calc_deriv_specific_types(md, sd->time_deriv, (double)time_step); -#endif - + if(i_cell==0) { + //double *yp = N_VGetArrayPointer(y); + //print_double(yp,86,"y646"); + //double *J_state = N_VGetArrayPointer(md->J_state); + //print_double(J_state,86,"J_state644"); + //print_double(jac_deriv_data,86,"J_tmp643"); + //double *J_deriv = N_VGetArrayPointer(md->J_deriv); + //print_double(J_deriv,86,"J_deriv644"); + //double *J_tmp2 = N_VGetArrayPointer(md->J_tmp2); + //print_double(J_tmp2,86,"J_tmp2645"); + //print_double(sd->time_deriv.loss_rates,sd->time_deriv.num_spec,"loss_rates"); + //print_double(sd->time_deriv.production_rates,sd->time_deriv.num_spec,"production_rates"); + //print_double(deriv_data,86,"deriv_data645"); + } #ifdef CAMP_DEBUG - clock_t end2 = clock(); - sd->timeDeriv += (end2 - start2); sd->max_loss_precision = time_derivative_max_loss_precision(sd->time_deriv); #endif @@ -975,37 +996,19 @@ int Jac(realtype t, N_Vector y, N_Vector deriv, SUNMatrix J, void *solver_data, ModelData *md = &(sd->model_data); realtype time_step; -#ifdef CAMP_DEBUG - sd->counterJac++; -#endif - // Get the grid cell dimensions int n_state_var = md->n_per_cell_state_var; - int n_dep_var = md->n_per_cell_dep_var; int n_cells = md->n_cells; // Get pointers to the rxn and parameter Jacobian arrays double *J_param_data = SM_DATA_S(md->J_params); - double *J_rxn_data = SM_DATA_S(md->J_rxn); - // Initialize the sparse matrix (sized for one grid cell) - // solver_data->model_data.J_rxn = - // SUNSparseMatrix(n_state_var, n_state_var, n_jac_elem_rxn, CSC_MAT); - - // TODO: use this instead of saving all this jacs - // double J_rxn_data[md->n_per_cell_dep_var]; - // memset(J_rxn_data, 0, md->n_per_cell_dep_var * sizeof(double)); - - // double *J_rxn_data = (double*)calloc(md->n_per_cell_state_var, - // sizeof(double)); // !!!! Do not use tmp2 - it is the same as y !!!! // - // FIXME Find out why cvode is sending tmp2 as y - // Calculate the the derivative for the current state y without // the estimated derivative from the last Jacobian calculation sd->use_deriv_est = 0; if (f(t, y, deriv, solver_data) != 0) { - printf("\n Derivative calculation failed.\n"); + printf("\n Derivative calculation failed on Jac.\n"); sd->use_deriv_est = 1; return 1; } @@ -1014,15 +1017,13 @@ int Jac(realtype t, N_Vector y, N_Vector deriv, SUNMatrix J, void *solver_data, // Update the state array with the current dependent variable values // Signal a recoverable error (positive return value) for negative // concentrations. - if (camp_solver_update_model_state(y, md, -SMALL, TINY) != CAMP_SOLVER_SUCCESS) + if (camp_solver_update_model_state(y, sd) != CAMP_SOLVER_SUCCESS) return 1; // Get the current integrator time step (s) CVodeGetCurrentStep(sd->cvode_mem, &time_step); // Reset the primary Jacobian - /// \todo #83 Figure out how to stop CVODE from resizing the Jacobian - /// during solving SM_NNZ_S(J) = SM_NNZ_S(md->J_init); for (int i = 0; i <= SM_NP_S(J); i++) { (SM_INDEXPTRS_S(J))[i] = (SM_INDEXPTRS_S(md->J_init))[i]; @@ -1032,22 +1033,6 @@ int Jac(realtype t, N_Vector y, N_Vector deriv, SUNMatrix J, void *solver_data, (SM_DATA_S(J))[i] = (realtype)0.0; } -#ifdef CAMP_DEBUG - clock_t start2 = clock(); -#endif - -#ifdef CAMP_USE_GPU - // Calculate the Jacobian - rxn_calc_jac_gpu(md, J, time_step); -#endif - -#ifdef CAMP_DEBUG - clock_t end2 = clock(); - sd->timeJac += (end2 - start2); -#endif - - // Solving on CPU only - // Loop over the grid cells to calculate sub-model and rxn Jacobians for (int i_cell = 0; i_cell < n_cells; ++i_cell) { // Set the grid cell state pointers @@ -1074,36 +1059,21 @@ int Jac(realtype t, N_Vector y, N_Vector deriv, SUNMatrix J, void *solver_data, sub_model_get_jac_contrib(md, J_param_data, time_step); CAMP_DEBUG_JAC(md->J_params, "sub-model Jacobian"); -#ifdef CAMP_DEBUG - clock_t start = clock(); -#endif - -#ifndef CAMP_USE_GPU // Calculate the reaction Jacobian rxn_calc_jac(md, sd->jac, time_step); -#else - // Add contributions from reactions not implemented on GPU - rxn_calc_jac_specific_types(md, sd->jac, time_step); -#endif - -// rxn_calc_jac_specific_types(md, J_rxn_data, time_step); -#ifdef CAMP_DEBUG - clock_t end = clock(); - sd->timeJac += (end - start); -#endif - - // Output the Jacobian to the SUNDIALS J_rxn - jacobian_output(sd->jac, SM_DATA_S(md->J_rxn)); - CAMP_DEBUG_JAC(md->J_rxn, "reaction Jacobian"); // Set the solver Jacobian using the reaction and sub-model Jacobians JacMap *jac_map = md->jac_map; SM_DATA_S(md->J_params)[0] = 1.0; // dummy value for non-sub model calcs - for (int i_map = 0; i_map < md->n_mapped_values; ++i_map) + for (int i_map = 0; i_map < md->n_mapped_values; ++i_map){ + long double drf_dy = sd->jac.production_partials[jac_map[i_map].rxn_id]; + long double drr_dy = sd->jac.loss_partials[jac_map[i_map].rxn_id]; + SM_DATA_S(J) [i_cell * md->n_per_cell_solver_jac_elem + jac_map[i_map].solver_id] += - SM_DATA_S(md->J_rxn)[jac_map[i_map].rxn_id] * + (drf_dy - drr_dy) * SM_DATA_S(md->J_params)[jac_map[i_map].param_id]; + } CAMP_DEBUG_JAC(J, "solver Jacobian"); } @@ -1166,7 +1136,7 @@ bool check_Jac(realtype t, N_Vector y, SUNMatrix J, N_Vector deriv, // Calculate the the derivative for the current state y if (f(t, y, deriv, solver_data) != 0) { - printf("\n Derivative calculation failed.\n"); + printf("\n Derivative calculation failed on check_Jac.\n"); return false; } @@ -1276,7 +1246,7 @@ double gsl_f(double x, void *param) { // Calculate the derivative if (f(gsl_param->t, y, deriv, (void *)gsl_param->solver_data) != 0) { - printf("\nDerivative calculation failed!"); + printf("\nDerivative calculation failed on gsl_f!"); for (int i_spec = 0; i_spec < NV_LENGTH_S(y); ++i_spec) printf("\n species %d conc: %le", i_spec, NV_DATA_S(y)[i_spec]); return 0.0 / 0.0; @@ -1414,34 +1384,34 @@ int guess_helper(const realtype t_n, const realtype h_n, N_Vector y_n, * \return Sparse Jacobian matrix with all possible non-zero elements intialize * to 1.0 */ -SUNMatrix get_jac_init(SolverData *solver_data) { +SUNMatrix get_jac_init(SolverData *sd) { int n_rxn; /* number of reactions in the mechanism * (stored in first position in *rxn_data) */ - sunindextype n_jac_elem_rxn; /* number of potentially non-zero Jacobian - elements in the reaction matrix*/ sunindextype n_jac_elem_param; /* number of potentially non-zero Jacobian elements in the reaction matrix*/ sunindextype n_jac_elem_solver; /* number of potentially non-zero Jacobian elements in the reaction matrix*/ // Number of grid cells - int n_cells = solver_data->model_data.n_cells; + int n_cells = sd->model_data.n_cells; + + int mattype = CSC_MAT; // Number of variables on the state array per grid cell // (these are the ids the reactions are initialized with) - int n_state_var = solver_data->model_data.n_per_cell_state_var; + int n_state_var = sd->model_data.n_per_cell_state_var; // Number of total state variables int n_state_var_total = n_state_var * n_cells; // Number of solver variables per grid cell (excludes constants, parameters, // etc.) - int n_dep_var = solver_data->model_data.n_per_cell_dep_var; + int n_dep_var = sd->model_data.n_per_cell_dep_var; // Number of total solver variables int n_dep_var_total = n_dep_var * n_cells; // Initialize the Jacobian for reactions - if (jacobian_initialize_empty(&(solver_data->jac), + if (jacobian_initialize_empty(&(sd->jac), (unsigned int)n_state_var) != 1) { printf("\n\nERROR allocating Jacobian structure\n\n"); exit(EXIT_FAILURE); @@ -1449,40 +1419,19 @@ SUNMatrix get_jac_init(SolverData *solver_data) { // Add diagonal elements by default for (unsigned int i_spec = 0; i_spec < n_state_var; ++i_spec) { - jacobian_register_element(&(solver_data->jac), i_spec, i_spec); + jacobian_register_element(&(sd->jac), i_spec, i_spec); } // Fill in the 2D array of flags with Jacobian elements used by the // mechanism reactions for a single grid cell - rxn_get_used_jac_elem(&(solver_data->model_data), &(solver_data->jac)); + rxn_get_used_jac_elem(&(sd->model_data), &(sd->jac)); // Build the sparse Jacobian - if (jacobian_build_matrix(&(solver_data->jac)) != 1) { + if (jacobian_build_matrix(&(sd->jac)) != 1) { printf("\n\nERROR building sparse full-state Jacobian\n\n"); exit(EXIT_FAILURE); } - // Determine the number of non-zero Jacobian elements per grid cell - n_jac_elem_rxn = jacobian_number_of_elements(solver_data->jac); - - // Save number of reaction jacobian elements per grid cell - solver_data->model_data.n_per_cell_rxn_jac_elem = (int)n_jac_elem_rxn; - - // Initialize the sparse matrix (sized for one grid cell) - solver_data->model_data.J_rxn = - SUNSparseMatrix(n_state_var, n_state_var, n_jac_elem_rxn, CSC_MAT); - - // Set the column and row indices - for (unsigned int i_col = 0; i_col <= n_state_var; ++i_col) { - (SM_INDEXPTRS_S(solver_data->model_data.J_rxn))[i_col] = - jacobian_column_pointer_value(solver_data->jac, i_col); - } - for (unsigned int i_elem = 0; i_elem < n_jac_elem_rxn; ++i_elem) { - (SM_DATA_S(solver_data->model_data.J_rxn))[i_elem] = (realtype)0.0; - (SM_INDEXVALS_S(solver_data->model_data.J_rxn))[i_elem] = - jacobian_row_index(solver_data->jac, i_elem); - } - // Build the set of time derivative ids int *deriv_ids = (int *)malloc(sizeof(int) * n_state_var); @@ -1492,7 +1441,7 @@ SUNMatrix get_jac_init(SolverData *solver_data) { } int i_dep_var = 0; for (int i_spec = 0; i_spec < n_state_var; i_spec++) { - if (solver_data->model_data.var_type[i_spec] == CHEM_SPEC_VARIABLE) { + if (sd->model_data.var_type[i_spec] == CHEM_SPEC_VARIABLE) { deriv_ids[i_spec] = i_dep_var++; } else { deriv_ids[i_spec] = -1; @@ -1500,7 +1449,7 @@ SUNMatrix get_jac_init(SolverData *solver_data) { } // Update the ids in the reaction data - rxn_update_ids(&(solver_data->model_data), deriv_ids, solver_data->jac); + rxn_update_ids(&(sd->model_data), deriv_ids, sd->jac); //////////////////////////////////////////////////////////////////////// // Get the Jacobian elements used in sub model parameter calculations // @@ -1518,7 +1467,7 @@ SUNMatrix get_jac_init(SolverData *solver_data) { // Fill in the 2D array of flags with Jacobian elements used by the // mechanism sub models - sub_model_get_used_jac_elem(&(solver_data->model_data), ¶m_jac); + sub_model_get_used_jac_elem(&(sd->model_data), ¶m_jac); // Build the sparse Jacobian for sub-model parameters if (jacobian_build_matrix(¶m_jac) != 1) { @@ -1528,28 +1477,28 @@ SUNMatrix get_jac_init(SolverData *solver_data) { // Save the number of sub model Jacobian elements per grid cell n_jac_elem_param = jacobian_number_of_elements(param_jac); - solver_data->model_data.n_per_cell_param_jac_elem = (int)n_jac_elem_param; + sd->model_data.n_per_cell_param_jac_elem = (int)n_jac_elem_param; // Set up the parameter Jacobian (sized for one grid cell) // Initialize the sparse matrix with one extra element (at the first position) // for use in mapping that is set to 1.0. (This is safe because there can be // no elements on the diagonal in the sub model Jacobian.) - solver_data->model_data.J_params = - SUNSparseMatrix(n_state_var, n_state_var, n_jac_elem_param, CSC_MAT); + sd->model_data.J_params = + SUNSparseMatrix(n_state_var, n_state_var, n_jac_elem_param, mattype); // Set the column and row indices for (unsigned int i_col = 0; i_col <= n_state_var; ++i_col) { - (SM_INDEXPTRS_S(solver_data->model_data.J_params))[i_col] = - jacobian_column_pointer_value(param_jac, i_col); + (SM_INDEXPTRS_S(sd->model_data.J_params))[i_col] = + param_jac.col_ptrs[i_col]; } for (unsigned int i_elem = 0; i_elem < n_jac_elem_param; ++i_elem) { - (SM_DATA_S(solver_data->model_data.J_params))[i_elem] = (realtype)0.0; - (SM_INDEXVALS_S(solver_data->model_data.J_params))[i_elem] = - jacobian_row_index(param_jac, i_elem); + (SM_DATA_S(sd->model_data.J_params))[i_elem] = (realtype)0.0; + (SM_INDEXVALS_S(sd->model_data.J_params))[i_elem] = + param_jac.row_ids[i_elem]; } // Update the ids in the sub model data - sub_model_update_ids(&(solver_data->model_data), deriv_ids, param_jac); + sub_model_update_ids(&(sd->model_data), deriv_ids, param_jac); //////////////////////////////// // Set up the solver Jacobian // @@ -1568,12 +1517,12 @@ SUNMatrix get_jac_init(SolverData *solver_data) { for (int i_dep = 0; i_dep < n_state_var; ++i_dep) { // skip dependent species that are not solver variables and // depenedent species that aren't used by any reaction - if (solver_data->model_data.var_type[i_dep] != CHEM_SPEC_VARIABLE || - jacobian_get_element_id(solver_data->jac, i_dep, i_ind) == -1) + if (sd->model_data.var_type[i_dep] != CHEM_SPEC_VARIABLE || + jacobian_get_element_id(sd->jac, i_dep, i_ind) == -1) continue; // If both elements are variable, use the rxn Jacobian only - if (solver_data->model_data.var_type[i_ind] == CHEM_SPEC_VARIABLE && - solver_data->model_data.var_type[i_dep] == CHEM_SPEC_VARIABLE) { + if (sd->model_data.var_type[i_ind] == CHEM_SPEC_VARIABLE && + sd->model_data.var_type[i_dep] == CHEM_SPEC_VARIABLE) { jacobian_register_element(&solver_jac, i_dep, i_ind); ++n_mapped_values; continue; @@ -1583,7 +1532,7 @@ SUNMatrix get_jac_init(SolverData *solver_data) { /// that depend on other sub model parameters for (int j_ind = 0; j_ind < n_state_var; ++j_ind) { if (jacobian_get_element_id(param_jac, i_ind, j_ind) != -1 && - solver_data->model_data.var_type[j_ind] == CHEM_SPEC_VARIABLE) { + sd->model_data.var_type[j_ind] == CHEM_SPEC_VARIABLE) { jacobian_register_element(&solver_jac, i_dep, j_ind); ++n_mapped_values; } @@ -1599,13 +1548,13 @@ SUNMatrix get_jac_init(SolverData *solver_data) { // Save the number of non-zero Jacobian elements n_jac_elem_solver = jacobian_number_of_elements(solver_jac); - solver_data->model_data.n_per_cell_solver_jac_elem = (int)n_jac_elem_solver; + sd->model_data.n_per_cell_solver_jac_elem = (int)n_jac_elem_solver; // Initialize the sparse matrix (for solver state array including all cells) SUNMatrix M = SUNSparseMatrix(n_dep_var_total, n_dep_var_total, - n_jac_elem_solver * n_cells, CSC_MAT); - solver_data->model_data.J_solver = SUNSparseMatrix( - n_dep_var_total, n_dep_var_total, n_jac_elem_solver * n_cells, CSC_MAT); + n_jac_elem_solver * n_cells, mattype); + sd->model_data.J_solver = SUNSparseMatrix( + n_dep_var_total, n_dep_var_total, n_jac_elem_solver * n_cells, mattype); // Set the column and row indices for (unsigned int i_cell = 0; i_cell < n_cells; ++i_cell) { @@ -1613,54 +1562,54 @@ SUNMatrix get_jac_init(SolverData *solver_data) { if (deriv_ids[cell_col] == -1) continue; unsigned int i_col = deriv_ids[cell_col] + i_cell * n_dep_var; (SM_INDEXPTRS_S(M))[i_col] = - (SM_INDEXPTRS_S(solver_data->model_data.J_solver))[i_col] = - jacobian_column_pointer_value(solver_jac, cell_col) + + (SM_INDEXPTRS_S(sd->model_data.J_solver))[i_col] = + solver_jac.col_ptrs[cell_col] + i_cell * n_jac_elem_solver; } for (unsigned int cell_elem = 0; cell_elem < n_jac_elem_solver; ++cell_elem) { unsigned int i_elem = cell_elem + i_cell * n_jac_elem_solver; (SM_DATA_S(M))[i_elem] = - (SM_DATA_S(solver_data->model_data.J_solver))[i_elem] = (realtype)0.0; + (SM_DATA_S(sd->model_data.J_solver))[i_elem] = (realtype)0.0; (SM_INDEXVALS_S(M))[i_elem] = - (SM_INDEXVALS_S(solver_data->model_data.J_solver))[i_elem] = + (SM_INDEXVALS_S(sd->model_data.J_solver))[i_elem] = deriv_ids[jacobian_row_index(solver_jac, cell_elem)] + i_cell * n_dep_var; } } (SM_INDEXPTRS_S(M))[n_cells * n_dep_var] = - (SM_INDEXPTRS_S(solver_data->model_data.J_solver))[n_cells * n_dep_var] = + (SM_INDEXPTRS_S(sd->model_data.J_solver))[n_cells * n_dep_var] = n_cells * n_jac_elem_solver; // Allocate space for the map - solver_data->model_data.n_mapped_values = n_mapped_values; - solver_data->model_data.jac_map = - (JacMap *)malloc(sizeof(JacMap) * n_mapped_values); - if (solver_data->model_data.jac_map == NULL) { + sd->model_data.n_mapped_values = n_mapped_values; + sd->model_data.jac_map = + (JacMap *)malloc(sizeof(JacMap) * n_mapped_values); + if (sd->model_data.jac_map == NULL) { printf("\n\nERROR allocating space for jacobian map\n\n"); exit(EXIT_FAILURE); } - JacMap *map = solver_data->model_data.jac_map; + JacMap *map = sd->model_data.jac_map; // Set map indices (when no sub-model value is used, the param_id is // set to 0 which maps to a fixed value of 1.0 int i_mapped_value = 0; for (unsigned int i_ind = 0; i_ind < n_state_var; ++i_ind) { - for (unsigned int i_elem = - jacobian_column_pointer_value(solver_data->jac, i_ind); - i_elem < jacobian_column_pointer_value(solver_data->jac, i_ind + 1); + for (int i_elem = + jacobian_column_pointer_value(sd->jac, i_ind); + i_elem < jacobian_column_pointer_value(sd->jac, i_ind + 1); ++i_elem) { - unsigned int i_dep = jacobian_row_index(solver_data->jac, i_elem); + unsigned int i_dep = sd->jac.row_ids[i_elem]; // skip dependent species that are not solver variables and // depenedent species that aren't used by any reaction - if (solver_data->model_data.var_type[i_dep] != CHEM_SPEC_VARIABLE || - jacobian_get_element_id(solver_data->jac, i_dep, i_ind) == -1) + if (sd->model_data.var_type[i_dep] != CHEM_SPEC_VARIABLE || + jacobian_get_element_id(sd->jac, i_dep, i_ind) == -1) continue; // If both elements are variable, use the rxn Jacobian only - if (solver_data->model_data.var_type[i_ind] == CHEM_SPEC_VARIABLE && - solver_data->model_data.var_type[i_dep] == CHEM_SPEC_VARIABLE) { + if (sd->model_data.var_type[i_ind] == CHEM_SPEC_VARIABLE && + sd->model_data.var_type[i_dep] == CHEM_SPEC_VARIABLE) { map[i_mapped_value].solver_id = - jacobian_get_element_id(solver_jac, i_dep, i_ind); + jacobian_get_element_id(solver_jac, i_dep, i_ind); map[i_mapped_value].rxn_id = i_elem; map[i_mapped_value].param_id = 0; ++i_mapped_value; @@ -1670,21 +1619,19 @@ SUNMatrix get_jac_init(SolverData *solver_data) { // (variable dependent species; independent parameter from sub model) for (int j_ind = 0; j_ind < n_state_var; ++j_ind) { if (jacobian_get_element_id(param_jac, i_ind, j_ind) != -1 && - solver_data->model_data.var_type[j_ind] == CHEM_SPEC_VARIABLE) { + sd->model_data.var_type[j_ind] == CHEM_SPEC_VARIABLE) { map[i_mapped_value].solver_id = - jacobian_get_element_id(solver_jac, i_dep, j_ind); + jacobian_get_element_id(solver_jac, i_dep, j_ind); map[i_mapped_value].rxn_id = i_elem; map[i_mapped_value].param_id = - jacobian_get_element_id(param_jac, i_ind, j_ind); + jacobian_get_element_id(param_jac, i_ind, j_ind); ++i_mapped_value; } } } } - SolverData *sd = solver_data; CAMP_DEBUG_JAC_STRUCT(sd->model_data.J_params, "Param struct"); - CAMP_DEBUG_JAC_STRUCT(sd->model_data.J_rxn, "Reaction struct"); CAMP_DEBUG_JAC_STRUCT(M, "Solver struct"); if (i_mapped_value != n_mapped_values) { @@ -1693,15 +1640,15 @@ SUNMatrix get_jac_init(SolverData *solver_data) { } // Create vectors to store Jacobian state and derivative data - solver_data->model_data.J_state = N_VClone(solver_data->y); - solver_data->model_data.J_deriv = N_VClone(solver_data->y); - solver_data->model_data.J_tmp = N_VClone(solver_data->y); - solver_data->model_data.J_tmp2 = N_VClone(solver_data->y); + sd->model_data.J_state = N_VClone(sd->y); + sd->model_data.J_deriv = N_VClone(sd->y); + sd->model_data.J_tmp = N_VClone(sd->y); + sd->model_data.J_tmp2 = N_VClone(sd->y); // Initialize the Jacobian state and derivative arrays to zero // for use before the first call to Jac() - N_VConst(0.0, solver_data->model_data.J_state); - N_VConst(0.0, solver_data->model_data.J_deriv); + N_VConst(0.0, sd->model_data.J_state); + N_VConst(0.0, sd->model_data.J_deriv); // Free the memory used jacobian_free(¶m_jac); @@ -1756,23 +1703,6 @@ void check_flag_fail(void *flag_value, char *func_name, int opt) { } } -/** \brief Reset the timers for solver functions - * - * \param solver_data Pointer to the SolverData object with timers to reset - */ -#ifdef CAMP_USE_SUNDIALS -void solver_reset_timers(void *solver_data) { - SolverData *sd = (SolverData *)solver_data; - -#ifdef CAMP_DEBUG - sd->counterDeriv = 0; - sd->counterJac = 0; - sd->timeDeriv = 0; - sd->timeJac = 0; -#endif -} -#endif - /** \brief Print solver statistics * * \param cvode_mem Solver object @@ -1831,6 +1761,7 @@ static void solver_print_stats(void *cvode_mem) { */ void solver_free(void *solver_data) { SolverData *sd = (SolverData *)solver_data; + ModelData *md = &(sd->model_data); #ifdef CAMP_USE_SUNDIALS // free the SUNDIALS solver @@ -1859,6 +1790,12 @@ void solver_free(void *solver_data) { SUNLinSolFree(sd->ls); #endif +#ifdef CAMP_USE_GPU + if(sd->use_cpu==0){ + free_gpu_cu(sd); + } +#endif + // Free the allocated ModelData model_free(sd->model_data); @@ -1875,7 +1812,6 @@ void solver_free(void *solver_data) { bool is_anything_going_on_here(SolverData *sd, realtype t_initial, realtype t_final) { ModelData *md = &(sd->model_data); - if (f(t_initial, sd->y, sd->deriv, sd)) { int i_dep_var = 0; for (int i_cell = 0; i_cell < md->n_cells; ++i_cell) { @@ -1891,9 +1827,9 @@ bool is_anything_going_on_here(SolverData *sd, realtype t_initial, } } } + printf("DEBUG: is_anything_going_on_here is false, returning success without cvode computing\n"); return false; } - return true; } #endif @@ -1913,14 +1849,10 @@ void error_handler(int error_code, const char *module, const char *function, * \param model_data Pointer to the ModelData object to free */ void model_free(ModelData model_data) { -#ifdef CAMP_USE_GPU - // free_gpu_cu(); -#endif #ifdef CAMP_USE_SUNDIALS // Destroy the initialized Jacbobian matrix SUNMatDestroy(model_data.J_init); - SUNMatDestroy(model_data.J_rxn); SUNMatDestroy(model_data.J_params); SUNMatDestroy(model_data.J_solver); N_VDestroy(model_data.J_state); diff --git a/src/camp_solver.h b/src/camp_solver.h index 70688d7a6..6e8fdae8f 100644 --- a/src/camp_solver.h +++ b/src/camp_solver.h @@ -20,7 +20,10 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, int n_aero_rep, int n_aero_rep_int_param, int n_aero_rep_float_param, int n_aero_rep_env_param, int n_sub_model, int n_sub_model_int_param, - int n_sub_model_float_param, int n_sub_model_env_param); + int n_sub_model_float_param, int n_sub_model_env_param, + int use_cpu, int nGPUs); +void solver_set_spec_name(void *solver_data, char *spec_name, + int size_spec_name, int i); void solver_initialize(void *solver_data, double *abs_tol, double rel_tol, int max_steps, int max_conv_fails); #ifdef CAMP_DEBUG @@ -38,6 +41,9 @@ void solver_get_statistics(void *solver_data, int *solver_flag, int *num_steps, int *RHS_evals_total, int *Jac_evals_total, double *RHS_time__s, double *Jac_time__s, double *max_loss_precision); +void export_solver_state(void *solver_data); +void join_solver_state(void *solver_data); +void export_solver_stats(void *solver_data); void solver_free(void *solver_data); void model_free(ModelData model_data); @@ -53,19 +59,13 @@ void error_handler(int error_code, const char *module, const char *function, char *msg, void *sd); /* SUNDIALS support functions */ -int camp_solver_update_model_state(N_Vector solver_state, ModelData *model_data, - realtype threshhold, - realtype replacement_value); -SUNMatrix get_jac_init(SolverData *solver_data); +SUNMatrix get_jac_init(SolverData *sd); bool check_Jac(realtype t, N_Vector y, SUNMatrix J, N_Vector deriv, N_Vector tmp, N_Vector tmp1, void *solver_data); int check_flag(void *flag_value, char *func_name, int opt); void check_flag_fail(void *flag_value, char *func_name, int opt); -void solver_reset_timers(void *solver_data); static void solver_print_stats(void *cvode_mem); static void print_data_sizes(ModelData *md); -static void print_jacobian(SUNMatrix M); -static void print_derivative(N_Vector deriv); bool is_anything_going_on_here(SolverData *sd, realtype t_initial, realtype t_final); #ifdef CAMP_USE_GSL diff --git a/src/camp_solver_data.F90 b/src/camp_solver_data.F90 index 3d0bb782a..759ddbd62 100644 --- a/src/camp_solver_data.F90 +++ b/src/camp_solver_data.F90 @@ -20,7 +20,8 @@ module camp_camp_solver_data use camp_sub_model_data use camp_sub_model_factory use camp_util, only : assert_msg, to_string, & - warn_assert_msg, die_msg + warn_assert_msg, die_msg,& + string_t use iso_c_binding @@ -48,7 +49,8 @@ type(c_ptr) function solver_new(n_state_var, n_cells, var_type, & n_aero_phase_float_param, n_aero_rep, & n_aero_rep_int_param, n_aero_rep_float_param, & n_aero_rep_env_param, n_sub_model, n_sub_model_int_param,& - n_sub_model_float_param, n_sub_model_env_param) bind (c) + n_sub_model_float_param, n_sub_model_env_param,& + use_cpu, nGPUs) bind (c) use iso_c_binding !> Number of variables on the state array per grid cell !! (including const, PSSA, etc.) @@ -89,8 +91,23 @@ type(c_ptr) function solver_new(n_state_var, n_cells, var_type, & integer(kind=c_int), value :: n_sub_model_float_param !> Total number of environment-dependent parameters for all sub models integer(kind=c_int), value :: n_sub_model_env_param + integer(kind=c_int), value :: use_cpu + integer(kind=c_int), value :: nGPUs end function solver_new + !> Set specie name + subroutine solver_set_spec_name(solver_data, spec_name, size_spec_name, i) bind (c) + use iso_c_binding + !> Pointer to a SolverData object + type(c_ptr), value :: solver_data + !> Species name + character(1) :: spec_name + !> Index spec_name + integer(kind=c_int), value :: size_spec_name + !> Index spec_name + integer(kind=c_int), value :: i + end subroutine solver_set_spec_name + !> Solver initialization subroutine solver_initialize(solver_data, abs_tol, rel_tol, max_steps, & max_conv_fails) bind (c) @@ -145,13 +162,6 @@ integer(kind=c_int) function solver_run(solver_data, state, env, & real(kind=c_double), value :: t_final end function solver_run - !> Reset the solver function timers - subroutine solver_reset_timers( solver_data ) bind(c) - use iso_c_binding - !> Pointer to the solver data - type(c_ptr), value :: solver_data - end subroutine solver_reset_timers - !> Get the solver statistics subroutine solver_get_statistics( solver_data, solver_flag, num_steps, & RHS_evals, LS_setups, error_test_fails, NLS_iters, & @@ -198,6 +208,21 @@ subroutine solver_get_statistics( solver_data, solver_flag, num_steps, & type(c_ptr), value :: max_loss_precision end subroutine solver_get_statistics + subroutine export_solver_state( solver_data) bind (c) + use iso_c_binding + type(c_ptr), value :: solver_data + end subroutine + + subroutine join_solver_state( solver_data) bind (c) + use iso_c_binding + type(c_ptr), value :: solver_data + end subroutine + + subroutine export_solver_stats( solver_data) bind (c) + use iso_c_binding + type(c_ptr), value :: solver_data + end subroutine + !> Add condensed reaction data to the solver data block subroutine rxn_add_condensed_data(rxn_type, n_int_param, & n_float_param, n_env_param, int_param, float_param, & @@ -392,10 +417,10 @@ end subroutine solver_free procedure :: update_aero_rep_data !> Integrate over a given time step procedure :: solve - !> Reset the solver function timers - procedure, private :: reset_timers - !> Get the solver statistics from the last run - procedure, private :: get_solver_stats + procedure:: get_solver_stats + procedure:: export_solver_data_state + procedure:: join_solver_data_state + procedure:: export_solver_data_stats !> Checks whether a solver is available procedure :: is_solver_available !> Print the solver data @@ -428,7 +453,8 @@ end function constructor !> Initialize the solver subroutine initialize(this, var_type, abs_tol, mechanisms, aero_phases, & - aero_reps, sub_models, rxn_phase, n_cells) + aero_reps, sub_models, rxn_phase, n_cells,& + spec_names, use_cpu, nGPUs) !> Solver data class(camp_solver_data_t), intent(inout) :: this @@ -447,20 +473,24 @@ subroutine initialize(this, var_type, abs_tol, mechanisms, aero_phases, & type(aero_rep_data_ptr), pointer, intent(in) :: aero_reps(:) !> Sub models to include type(sub_model_data_ptr), pointer, intent(in) :: sub_models(:) + integer, intent(in) :: use_cpu + integer, intent(in) :: nGPUs !> Reactions phase to solve -- gas, aerosol, or both (default) !! Use parameters in camp_rxn_data to specify phase: !! GAS_RXN, AERO_RXN, GAS_AERO_RXN integer(kind=i_kind), intent(in) :: rxn_phase - !> Number of cells to compute - integer(kind=i_kind), optional :: n_cells ! Variable types integer(kind=c_int), pointer :: var_type_c(:) ! Absolute tolerances real(kind=c_double), pointer :: abs_tol_c(:) + !> Number of cells to compute + integer(kind=i_kind), optional :: n_cells + type(string_t), allocatable, intent(in) :: spec_names(:) + character(len=:), allocatable :: spec_name ! Indices for iteration integer(kind=i_kind) :: i_mech, i_rxn, i_aero_phase, i_aero_rep, & - i_sub_model + i_sub_model, i ! Reaction pointer class(rxn_data_t), pointer :: rxn ! Reaction factory object for getting reaction type @@ -627,7 +657,9 @@ subroutine initialize(this, var_type, abs_tol, mechanisms, aero_phases, & n_sub_model, & ! # of sub models n_sub_model_int_param, & ! # of sub model int params n_sub_model_float_param, & ! # of sub model real params - n_sub_model_env_param & ! # of sub model env params + n_sub_model_env_param, & ! # of sub model env params + use_cpu,& + nGPUs& ) ! Add all the condensed reaction data to the solver data block for @@ -794,10 +826,11 @@ subroutine update_sub_model_data(this, update_data) !> Solver data class(camp_solver_data_t), intent(inout) :: this !> Update data - class(sub_model_update_data_t), intent(in) :: update_data + class(sub_model_update_data_t), intent(inout) :: update_data + integer :: i call sub_model_update_data( & - update_data%get_cell_id()-1, & ! Grid cell to update + update_data%get_cell_id()-1, & ! Grid cell to update update_data%sub_model_solver_id, & ! Solver's sub model id update_data%get_type(), & ! Sub-model type to update update_data%get_data(), & ! Data needed to perform update @@ -806,7 +839,7 @@ subroutine update_sub_model_data(this, update_data) end subroutine update_sub_model_data -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> Update reaction data subroutine update_rxn_data(this, update_data) @@ -814,10 +847,11 @@ subroutine update_rxn_data(this, update_data) !> Solver data class(camp_solver_data_t), intent(inout) :: this !> Update data - class(rxn_update_data_t), intent(in) :: update_data + class(rxn_update_data_t), intent(inout) :: update_data + integer :: i call rxn_update_data( & - update_data%get_cell_id()-1, & ! Grid cell to update + update_data%get_cell_id()-1, & ! Grid cell to update update_data%rxn_solver_id, & ! Solver's reaction id update_data%get_type(), & ! Reaction type to update update_data%get_data(), & ! Data needed to perform update @@ -826,7 +860,7 @@ subroutine update_rxn_data(this, update_data) end subroutine update_rxn_data -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> Update aerosol representation data based on data passed from the host !! model related to aerosol properties @@ -835,22 +869,23 @@ subroutine update_aero_rep_data(this, update_data) !> Solver data class(camp_solver_data_t), intent(inout) :: this !> Update data - class(aero_rep_update_data_t), intent(in) :: update_data + class(aero_rep_update_data_t), intent(inout) :: update_data + integer :: i call aero_rep_update_data( & - update_data%get_cell_id()-1, & ! Grid cell to update + update_data%get_cell_id()-1, & ! Grid cell to update update_data%aero_rep_solver_id, & ! Solver's aero rep id update_data%get_type(), & ! Aerosol representation type update_data%get_data(), & ! Data needed to perform update this%solver_c_ptr & ! Pointer to solver data - ) + ) end subroutine update_aero_rep_data !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> Solve the mechanism(s) for a specified timestep - subroutine solve(this, camp_state, t_initial, t_final, solver_stats) + function solve(this, camp_state, t_initial, t_final, solver_stats) result (solver_status) !> Solver data class(camp_solver_data_t), intent(inout) :: this @@ -893,8 +928,6 @@ subroutine solve(this, camp_state, t_initial, t_final, solver_stats) end if end if - ! Reset the solver function timers - call this%reset_timers( ) #endif ! Run the solver @@ -906,34 +939,11 @@ subroutine solve(this, camp_state, t_initial, t_final, solver_stats) real(t_final, kind=c_double) & ! Final time (s) ) - ! Get the solver statistics - if (present(solver_stats)) then - call this%get_solver_stats( solver_stats ) - solver_stats%status_code = solver_status - solver_stats%start_time__s = t_initial - solver_stats%end_time__s = t_final - else - call warn_assert_msg(997420005, solver_status.eq.0, "Solver failed") - end if - - end subroutine solve + end function solve !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !> Reset the solver function timers - subroutine reset_timers( this ) - - !> Solver data - class(camp_solver_data_t), intent(inout) :: this - - call solver_reset_timers( this%solver_c_ptr ) - - end subroutine reset_timers - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Get solver statistics - subroutine get_solver_stats( this, solver_stats ) + subroutine get_solver_stats( this, solver_stats) !> Solver data class(camp_solver_data_t), intent(inout) :: this @@ -958,9 +968,25 @@ subroutine get_solver_stats( this, solver_stats ) c_loc( solver_stats%Jac_evals_total ), & ! total Jac() calls c_loc( solver_stats%RHS_time__s ), & ! Compute time f() [s] c_loc( solver_stats%Jac_time__s ), & ! Compute time Jac() [s] - c_loc( solver_stats%max_loss_precision ) ) ! Maximum loss of precision + c_loc( solver_stats%max_loss_precision) & ! Maximum loss of precision + ) + + end subroutine - end subroutine get_solver_stats + subroutine export_solver_data_state( this) + class(camp_solver_data_t), intent(inout) :: this + call export_solver_state(this%solver_c_ptr) + end subroutine + + subroutine join_solver_data_state( this) + class(camp_solver_data_t), intent(inout) :: this + call join_solver_state(this%solver_c_ptr) + end subroutine + + subroutine export_solver_data_stats( this) + class(camp_solver_data_t), intent(inout) :: this + call export_solver_stats(this%solver_c_ptr) + end subroutine !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/src/cuda/.clang-format b/src/cuda/.clang-format new file mode 100644 index 000000000..a148448c1 --- /dev/null +++ b/src/cuda/.clang-format @@ -0,0 +1,2 @@ +DisableFormat: true +SortIncludes: false diff --git a/src/cuda/cuda_structs.h b/src/cuda/cuda_structs.h new file mode 100644 index 000000000..f83d6d9e6 --- /dev/null +++ b/src/cuda/cuda_structs.h @@ -0,0 +1,193 @@ +/* Copyright (C) 2021 Barcelona Supercomputing Center and University of + * Illinois at Urbana-Champaign + * SPDX-License-Identifier: MIT + */ + +#ifndef CAMPGPU_CUDA_STRUCTS_H +#define CAMPGPU_CUDA_STRUCTS_H + +typedef struct { + unsigned int num_spec; // Number of species in the derivative + // long double is treated as double in GPU + double *production_rates; // Production rates for all species + double *loss_rates; // Loss rates for all species +#ifdef CAMP_DEBUG + double last_max_loss_precision; // Maximum loss of precision at last output +#endif +} TimeDerivativeGPU; + +#ifndef DEF_JAC_MAP +#define DEF_JAC_MAP +typedef struct { + int solver_id; // solver Jacobian id + int rxn_id; // reaction Jacobian id + int param_id; // sub model Jacobian id +} JacMap; +#endif + +typedef struct { + int *num_elem; // Number of potentially non-zero Jacobian elements + double *production_partials; // Data array for productions rate partial derivs + double *loss_partials; // Data array for loss rate partial derivs +} JacobianGPU; + +typedef struct { + int nstloc; + double tret; + double cv_tretlast; + double cv_etaqm1; /* ratio of new to old h for order q-1 */ + double cv_etaq; /* ratio of new to old h for order q */ + double cv_etaqp1; /* ratio of new to old h for order q+1 */ + double cv_saved_tq5; /* saved value of tq[5] */ + double cv_tolsf; /* tolerance scale factor */ + int cv_indx_acor; /* index of the zn vector with saved acor */ + double cv_hu; + int cv_jcur; + int cv_nstlp; + int cv_L; + double cv_acnrm; + int cv_qwait; + double cv_crate; + double cv_gamrat; + double cv_gammap; + double cv_gamma; + double cv_rl1; + double cv_eta; + int cv_q; + int cv_qprime; + double cv_h; + double cv_next_h; + double cv_hscale; + double cv_hprime; + double cv_hmin; + double cv_tn; + double cv_etamax; + int cv_maxncf; + double *grid_cell_state; + int nstlj; + int cv_nst; +#ifdef ODE_WARNING + int cv_nhnil; /* number of messages issued to the user that t + h == t for the next iternal step */ +#endif +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int countercvStep; + int counterBCGInternal; + int counterBCG; + double timeNewtonIteration; + double timeJac; + double timelinsolsetup; + double timecalc_Jac; + double timef; + double timeguess_helper; + double dtBCG; + double dtcudaDeviceCVode; + double dtPostBCG; +#endif +}ModelDataVariable; //variables to pass between gpu and cpu (different data between cells) + +typedef struct{ + double* A; + int* jA; + int* iA; + int cells_method; + int threads,blocks; + int nnz; + int nnz_J_solver; + size_t deriv_size; + size_t jac_size; + size_t env_size; + ModelDataVariable mdvCPU; //cpu equivalent to gpu + cudaStream_t *streams; +#ifdef CAMP_DEBUG_GPU + cudaEvent_t startcvStep; + cudaEvent_t stopcvStep; +#endif +} ModelDataCPU; + +typedef struct { //Allocated from CPU (used during CPU / need some cudamemcpy) + int *map_state_deriv; + double *J_solver; + double *J_state; + double *J_deriv; + double *J_tmp; + double *J_tmp2; + int *indexvals; + int *indexptrs; + int *rxn_int; + double *rxn_double; + double *state; + double *env; + double *rxn_env_data; + int *rxn_env_data_idx; + double *production_rates; + double *loss_rates; + int *rxn_int_indices; + int *rxn_float_indices; + double *grid_cell_state; + int n_rxn; + int n_rxn_env_data; + int *n_mapped_values; + JacMap *jac_map; + JacobianGPU jac; + double *yout; + double *cv_Vabstol; + double *cv_l; + double *cv_tau; + double *cv_tq;//NUM_TESTS+1 + double *cv_last_yn;//CVODE variables only GPU + double *cv_acor_init; + double *dA;//LS (BCG) + int *djA; + int *diA; + double *dx; + double* dtempv; + int nrows; + int n_shr_empty; + int n_cells; + double *ddiag; + double *dr0; + double *dr0h; + double *dn0; + double *dp0; + double *dt; + double *ds; + double *dy; + double *dz; + double* dftemp; //Guess_helper + double* dcv_y; + double* dtempv1; + double* dtempv2; + int *flag; + int *flagCells; + int state_size_cell; + double* cv_acor; //cudacvNewtonIteration + double* dzn; + double* dewt; + double* dsavedJ; //Auxiliar variables + ModelDataVariable *mdv; //device + ModelDataVariable *mdvo; //out device + ModelDataVariable *sCells; + double init_time_step; //Constant during solving + int cv_mxstep; + double tout; + double cv_uround; + double cv_hmax_inv; + double cv_reltol; + int cv_maxcor; + int cv_qmax; + int cv_maxnef; + double cv_tstop; + int cv_tstopset; //Used as bool + double cv_nlscoef; + int use_deriv_est; //Used as bool +//ODE stats +#ifdef CAMP_DEBUG_GPU +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int clock_khz; +#endif +#endif +} ModelDataGPU; //CPU and GPU structs + +#endif //CAMPGPU_CUDA_STRUCTS_H + + diff --git a/src/cuda/cvode_cuda.cu b/src/cuda/cvode_cuda.cu new file mode 100644 index 000000000..c9fd84232 --- /dev/null +++ b/src/cuda/cvode_cuda.cu @@ -0,0 +1,1998 @@ +/* Copyright (C) 2021 Barcelona Supercomputing Center and University of +* Illinois at Urbana-Champaign +* SPDX-License-Identifier: MIT +*/ + +#include "cvode_cuda.h" + +__device__ +void print_double(double *x, int len, const char *s){ +#ifdef USE_PRINT_ARRAYS + __syncthreads(); + if(threadIdx.x==0 && blockIdx.x==0){ + for (int i=0; i 0.0) { + time_deriv.production_rates[spec_id] += rate_contribution; + } else { + time_deriv.loss_rates[spec_id] += -rate_contribution; + } +} + +#else + +__device__ +void time_derivative_add_value_gpu(TimeDerivativeGPU time_deriv, unsigned int spec_id, + double rate_contribution) { + if (rate_contribution > 0.0) { + atomicAdd_block(&(time_deriv.production_rates[spec_id]),rate_contribution); + } else { + atomicAdd_block(&(time_deriv.loss_rates[spec_id]),-rate_contribution); + } +} + +#endif + +__device__ +void rxn_gpu_first_order_loss_calc_deriv_contrib(ModelDataVariable *sc, TimeDerivativeGPU time_deriv, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double rate = rxn_env_data[0] * sc->grid_cell_state[int_data[1]-1]; + if (int_data[2] >= 0) time_derivative_add_value_gpu(time_deriv, int_data[2], -rate); +} + +__device__ +void rxn_gpu_CMAQ_H2O2_calc_deriv_contrib(ModelDataVariable *sc, TimeDerivativeGPU time_deriv, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double *float_data = rxn_float_data; + double rate = rxn_env_data[0]; + for (int i_spec=0; i_specgrid_cell_state[int_data[(2 + i_spec)]-1]; + if (rate!=0.) { + int i_dep_var = 0; + for (int i_spec=0; i_specgrid_cell_state[int_data[(2 + int_data[0]+ i_spec)]-1]) { + time_derivative_add_value_gpu(time_deriv, int_data[(2 + int_data[0]+int_data[1]+i_dep_var)],rate*float_data[(7 + i_spec)]); + } + } + } +} + +__device__ +void rxn_gpu_CMAQ_OH_HNO3_calc_deriv_contrib(ModelDataVariable *sc, TimeDerivativeGPU time_deriv, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double *float_data = rxn_float_data; + double rate = rxn_env_data[0]; + for (int i_spec=0; i_specgrid_cell_state[int_data[(2 + i_spec)]-1]; + if (rate!=0.) { + int i_dep_var = 0; + for (int i_spec=0; i_specgrid_cell_state[int_data[(2 + int_data[0] + i_spec)]-1]) { + time_derivative_add_value_gpu(time_deriv, int_data[(2 + int_data[0] + int_data[1] + i_dep_var)],rate*float_data[(11 + i_spec)]); + } + } + } +} + +__device__ +void rxn_gpu_arrhenius_calc_deriv_contrib(ModelDataVariable *sc, TimeDerivativeGPU time_deriv, + int *rxn_int_data, double *rxn_float_data, + double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double *float_data = rxn_float_data; + double rate = rxn_env_data[0]; + for (int i_spec=0; i_specgrid_cell_state[int_data[(2 + i_spec)]-1]; + if (rate!=0.) { + int i_dep_var = 0; + for (int i_spec=0; i_specgrid_cell_state[int_data[(2 + int_data[0] + i_spec)]-1]) { + time_derivative_add_value_gpu(time_deriv, int_data[2 + int_data[0] + int_data[1] + i_dep_var],rate*float_data[6+i_spec]); + } + } + } +} + +__device__ +void rxn_gpu_troe_calc_deriv_contrib(ModelDataVariable *sc, TimeDerivativeGPU time_deriv, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double *float_data = rxn_float_data; + double rate = rxn_env_data[0]; + for (int i_spec=0; i_specgrid_cell_state[int_data[(2 + i_spec)]-1]; + if (rate!=ZERO) { + int i_dep_var = 0; + for (int i_spec=0; i_specgrid_cell_state[int_data[(2 + int_data[0]+ i_spec)]-1]) { + time_derivative_add_value_gpu(time_deriv, int_data[(2 + int_data[0]+int_data[1]+i_dep_var)],rate*float_data[(10 + i_spec)]); + } + } + } +} + +__device__ +void rxn_gpu_photolysis_calc_deriv_contrib(ModelDataVariable *sc, TimeDerivativeGPU time_deriv, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double *float_data = rxn_float_data; + double rate = rxn_env_data[0]; + for (int i_spec=0; i_specgrid_cell_state[int_data[(3 + i_spec)]-1]; + if (rate!=ZERO) { + int i_dep_var = 0; + for (int i_spec=0; i_specgrid_cell_state[int_data[(3 + int_data[0]+ i_spec)]-1]){ + time_derivative_add_value_gpu(time_deriv, int_data[(3 + int_data[0]+int_data[1]+i_dep_var)],rate*float_data[(1 + i_spec)]); + } + } + } +} + +#ifdef IS_DEBUG_MODE_removeAtomic +__device__ +void jacobian_add_value_gpu(JacobianGPU jac, unsigned int elem_id, + int prod_or_loss, + double jac_contribution) { + if (prod_or_loss == JACOBIAN_PRODUCTION) { + jac.production_partials[elem_id] += jac_contribution; + } + else{ //(prod_or_loss == JACOBIAN_LOSS){ + jac.loss_partials[elem_id] += jac_contribution; + } +} +#else +__device__ +void jacobian_add_value_gpu(JacobianGPU jac, unsigned int elem_id, + int prod_or_loss, + double jac_contribution) { + if (prod_or_loss == JACOBIAN_PRODUCTION) { + atomicAdd_block(&(jac.production_partials[elem_id]), jac_contribution); + } + else{ //(prod_or_loss == JACOBIAN_LOSS){ + atomicAdd_block(&(jac.loss_partials[elem_id]),jac_contribution); + } +} +#endif + +__device__ +void rxn_gpu_first_order_loss_calc_jac_contrib(ModelDataVariable *sc, JacobianGPU jac, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; +if (int_data[3] >= 0) jacobian_add_value_gpu(jac, int_data[3], JACOBIAN_LOSS, + rxn_env_data[0]); +} + +__device__ +void rxn_gpu_CMAQ_H2O2_calc_jac_contrib(ModelDataVariable *sc, JacobianGPU jac, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double *float_data = rxn_float_data; + int i_elem = 0; + for (int i_ind = 0; i_ind < int_data[0]; i_ind++) { + double rate = rxn_env_data[0]; + for (int i_spec = 0; i_spec < int_data[0]; i_spec++) + if (i_ind != i_spec) rate *= sc->grid_cell_state[int_data[(2 + i_spec)]-1]; + for (int i_dep = 0; i_dep < int_data[0]; i_dep++, i_elem++) { + if (int_data[(2 + 2*(int_data[0]+int_data[1])+i_elem)] < 0) continue; + jacobian_add_value_gpu(jac, int_data[(2 + 2*(int_data[0]+int_data[1])+i_elem)], JACOBIAN_LOSS, + rate); + } + for (int i_dep = 0; i_dep < int_data[1]; i_dep++, i_elem++) { + if (int_data[(2 + 2*(int_data[0]+int_data[1])+i_elem)] < 0) continue; + if (-rate * sc->grid_cell_state[int_data[(2 + i_ind)]-1] * float_data[(7 + i_dep)] * time_step <= + sc->grid_cell_state[int_data[(2 + int_data[0]+ i_dep)]-1]) { + jacobian_add_value_gpu(jac, int_data[(2 + 2*(int_data[0]+int_data[1])+i_elem)], + JACOBIAN_PRODUCTION, float_data[(7 + i_dep)] * rate); + } + } + } +} + + +__device__ +void rxn_gpu_CMAQ_OH_HNO3_calc_jac_contrib(ModelDataVariable *sc, JacobianGPU jac, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double *float_data = rxn_float_data; + int i_elem = 0; + for (int i_ind = 0; i_ind < int_data[0]; i_ind++) { + double rate = rxn_env_data[0]; + for (int i_spec = 0; i_spec < int_data[0]; i_spec++) + if (i_ind != i_spec) rate *= sc->grid_cell_state[int_data[(2 + i_spec)]-1]; + for (int i_dep = 0; i_dep < int_data[0]; i_dep++, i_elem++) { + if (int_data[(2 + 2*(int_data[0]+int_data[1]) + i_elem)] < 0) continue; + jacobian_add_value_gpu(jac, int_data[(2 + 2*(int_data[0]+int_data[1]) + i_elem)], JACOBIAN_LOSS, + rate); + } + for (int i_dep = 0; i_dep < int_data[1]; i_dep++, i_elem++) { + if (int_data[(2 + 2*(int_data[0]+int_data[1]) + i_elem)] < 0) continue; + if (-rate * sc->grid_cell_state[int_data[(2 + i_ind)]-1] * float_data[(11 + i_dep)] * time_step <= + sc->grid_cell_state[int_data[(2 + int_data[0] + i_dep)]-1]) { + jacobian_add_value_gpu(jac, int_data[(2 + 2*(int_data[0]+int_data[1]) + i_elem)], + JACOBIAN_PRODUCTION, float_data[(11 + i_dep)] * rate); + } + } + } +} + + +__device__ +void rxn_gpu_arrhenius_calc_jac_contrib(ModelDataVariable *sc, JacobianGPU jac, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double *float_data = rxn_float_data; + int i_elem = 0; + for (int i_ind = 0; i_ind < int_data[0]; i_ind++) { + double rate = rxn_env_data[0]; + for (int i_spec = 0; i_spec < int_data[0]; i_spec++) + if (i_spec != i_ind) rate *= sc->grid_cell_state[int_data[(2 + i_spec)]-1]; + for (int i_dep = 0; i_dep < int_data[0]; i_dep++, i_elem++) { + if (int_data[2 + 2*(int_data[0]+int_data[1]) + i_elem] < 0) continue; + jacobian_add_value_gpu(jac, int_data[2 + 2*(int_data[0]+int_data[1]) + i_elem], JACOBIAN_LOSS, + rate); + } + for (int i_dep = 0; i_dep < int_data[1]; i_dep++, i_elem++) { + if (int_data[2 + 2*(int_data[0]+int_data[1]) + i_elem] < 0) continue; + if (-rate * sc->grid_cell_state[int_data[(2 + i_ind)]-1] * float_data[6+i_dep] * time_step <= + sc->grid_cell_state[int_data[(2 + int_data[0] + i_dep)]-1]) { + jacobian_add_value_gpu(jac, int_data[2 + 2*(int_data[0]+int_data[1]) + i_elem], + JACOBIAN_PRODUCTION, float_data[6+i_dep] * rate); + } + } + } +} + +__device__ +void rxn_gpu_troe_calc_jac_contrib(ModelDataVariable *sc, JacobianGPU jac, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double *float_data = rxn_float_data; + int i_elem = 0; + for (int i_ind = 0; i_ind < int_data[0]; i_ind++) { + double rate = rxn_env_data[0]; + for (int i_spec = 0; i_spec < int_data[0]; i_spec++) + if (i_ind != i_spec) rate *= sc->grid_cell_state[int_data[(2 + i_spec)]-1]; + for (int i_dep = 0; i_dep < int_data[0]; i_dep++, i_elem++) { + if (int_data[(2 + 2*(int_data[0]+int_data[1])+i_elem)] < 0) continue; + jacobian_add_value_gpu(jac, int_data[(2 + 2*(int_data[0]+int_data[1])+i_elem)], JACOBIAN_LOSS, + rate); + } + for (int i_dep = 0; i_dep < int_data[1]; i_dep++, i_elem++) { + if (int_data[(2 + 2*(int_data[0]+int_data[1])+i_elem)] < 0) continue; + if (-rate * sc->grid_cell_state[int_data[(2 + i_ind)]-1] * float_data[(10 + i_dep)] * time_step <= + sc->grid_cell_state[int_data[(2 + int_data[0]+ i_dep)]-1]) { + jacobian_add_value_gpu(jac, int_data[(2 + 2*(int_data[0]+int_data[1])+i_elem)], JACOBIAN_PRODUCTION, + float_data[(10 + i_dep)] * rate); + } + } + } +} + +__device__ +void rxn_gpu_photolysis_calc_jac_contrib(ModelDataVariable *sc, JacobianGPU jac, int *rxn_int_data, + double *rxn_float_data, double *rxn_env_data, double time_step){ + int *int_data = rxn_int_data; + double *float_data = rxn_float_data; + int i_elem = 0; + for (int i_ind = 0; i_ind < int_data[0]; i_ind++) { + double rate = rxn_env_data[0]; + for (int i_spec = 0; i_spec < int_data[0]; i_spec++) + if (i_spec != i_ind) rate *= sc->grid_cell_state[int_data[(3 + i_spec)]-1]; + for (int i_dep = 0; i_dep < int_data[0]; i_dep++, i_elem++) { + if (int_data[(3 + 2*(int_data[0]+int_data[1])+i_elem)] < 0) continue; + jacobian_add_value_gpu(jac, int_data[(3 + 2*(int_data[0]+int_data[1])+i_elem)], JACOBIAN_LOSS, + rate); + } + for (int i_dep = 0; i_dep < int_data[1]; i_dep++, i_elem++) { + if (int_data[(3 + 2*(int_data[0]+int_data[1])+i_elem)] < 0) continue; + if (-rate * sc->grid_cell_state[int_data[(3 + i_ind)]-1] * float_data[(1 + i_dep)] * time_step <= + sc->grid_cell_state[int_data[(3 + int_data[0]+ i_dep)]-1]) { + jacobian_add_value_gpu(jac, int_data[(3 + 2*(int_data[0]+int_data[1])+i_elem)], + JACOBIAN_PRODUCTION, float_data[(1 + i_dep)] * rate); + } + } + } +} + +__device__ void cudaDevicemin_2(double *g_odata, double in, volatile double *sdata, int n_shr_empty){ + unsigned int tid = threadIdx.x; + __syncthreads(); + sdata[tid] = in; + __syncthreads(); + if(tid0; s>>=1) + { + if (tid < s){ + if(sdata[tid + s] < sdata[tid] ) sdata[tid]=sdata[tid + s]; + } + __syncthreads(); + } + *g_odata = sdata[0]; + __syncthreads(); +} + +#ifdef DEBUG_CVODE_GPU +__device__ +void printmin(ModelDataGPU *md,double* y, const char *s) { + __syncthreads(); + extern __shared__ double flag_shr2[]; + int tid= threadIdx.x + blockDim.x*blockIdx.x; + __syncthreads(); + double min; + cudaDevicemin_2(&min, y[tid], flag_shr2, md->n_shr_empty); + __syncthreads(); + if(tid==0)printf("%s min %le\n",s,min); + __syncthreads(); +} +#endif + +__device__ void cudaDeviceBCGprecond_2(double* dA, int* djA, int* diA, double* ddiag, double alpha){ + int row= threadIdx.x + blockDim.x*blockIdx.x; + int nnz=diA[blockDim.x]; + for(int j=diA[threadIdx.x];j= 64) sdata[tid] += sdata[tid + 32]; + if (blockSize >= 32) sdata[tid] += sdata[tid + 16]; + if (blockSize >= 16) sdata[tid] += sdata[tid + 8]; + if (blockSize >= 8) sdata[tid] += sdata[tid + 4]; + if (blockSize >= 4) sdata[tid] += sdata[tid + 2]; + if (blockSize >= 2) sdata[tid] += sdata[tid + 1]; +} + +__device__ void cudaDevicedotxy_2(double *g_idata1, double *g_idata2, + double *g_odata, int n_shr_empty){ + extern __shared__ double sdata[]; + unsigned int tid = threadIdx.x; + __syncthreads(); + if(tid= 1024) && (tid < 512)) { + sdata[tid] += sdata[tid + 512]; + } + __syncthreads(); + if ((blockSize >= 512) && (tid < 256)) { + sdata[tid] += sdata[tid + 256]; + } + __syncthreads(); + if ((blockSize >= 256) && (tid < 128)) { + sdata[tid] += sdata[tid + 128]; + } + __syncthreads(); + if ((blockSize >= 128) && (tid < 64)) { + sdata[tid] += sdata[tid + 64]; + } + __syncthreads(); + if (tid < 32) warpReduce_2(sdata, tid); +#endif + __syncthreads(); + *g_odata = sdata[0]; + __syncthreads(); +} + +__device__ void cudaDeviceVWRMS_Norm_2(double *g_idata1, double *g_idata2, double *g_odata, int n_shr_empty){ + extern __shared__ double sdata[]; + unsigned int tid = threadIdx.x; + unsigned int i = blockIdx.x*blockDim.x + threadIdx.x; + __syncthreads(); + if(tid0; s>>=1){ + if (tid < s) + sdata[tid] += sdata[tid + s]; + __syncthreads(); + } +#endif + g_odata[0] = sqrt(sdata[0]/blockDim.x); + __syncthreads(); +} + +__device__ +void cudaDeviceJacCopy(int* Ap, double* Ax, double* Bx) { + __syncthreads(); + int nnz=Ap[blockDim.x]; + for(int j=Ap[threadIdx.x]; jstate[md->map_state_deriv[i]] = + y[i] <= -SMALL ? + TINY : y[i]; + } + __syncthreads(); + *flag = flag_shr[0]; + __syncthreads(); + return *flag; +} + +__device__ void solveRXN( + int i_rxn,TimeDerivativeGPU deriv_data, + double time_step,ModelDataGPU *md, ModelDataVariable *sc +){ + double *rxn_float_data = (double *)&( md->rxn_double[md->rxn_float_indices[i_rxn]]); + int *int_data = (int *)&(md->rxn_int[md->rxn_int_indices[i_rxn]]); + int *rxn_int_data = (int *) &(int_data[1]); + double *rxn_env_data = &(md->rxn_env_data + [md->n_rxn_env_data*blockIdx.x+md->rxn_env_data_idx[i_rxn]]); + switch (int_data[0]) { + case RXN_ARRHENIUS : + rxn_gpu_arrhenius_calc_deriv_contrib(sc, deriv_data, rxn_int_data, + rxn_float_data, rxn_env_data,time_step); + break; + case RXN_CMAQ_H2O2 : + rxn_gpu_CMAQ_H2O2_calc_deriv_contrib(sc, deriv_data, rxn_int_data, + rxn_float_data, rxn_env_data,time_step); + break; + case RXN_CMAQ_OH_HNO3 : + rxn_gpu_CMAQ_OH_HNO3_calc_deriv_contrib(sc, deriv_data, rxn_int_data, + rxn_float_data, rxn_env_data,time_step); + break; + case RXN_FIRST_ORDER_LOSS: + rxn_gpu_first_order_loss_calc_deriv_contrib(sc, deriv_data, rxn_int_data, + rxn_float_data, rxn_env_data,time_step); + break; + case RXN_PHOTOLYSIS : + rxn_gpu_photolysis_calc_deriv_contrib(sc, deriv_data, rxn_int_data, + rxn_float_data, rxn_env_data,time_step); + break; + case RXN_TROE : + rxn_gpu_troe_calc_deriv_contrib(sc, deriv_data, rxn_int_data, + rxn_float_data, rxn_env_data,time_step); + break; + } +} + +__device__ void cudaDevicecalc_deriv(double time_step, double *y, + double *yout, ModelDataGPU *md, ModelDataVariable *sc) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + md->J_tmp[i]=y[i]-md->J_state[i]; + cudaDeviceSpmv_2(md->J_tmp2, md->J_tmp, md->J_solver, md->djA, md->diA); + md->J_tmp[i]=md->J_deriv[i]+md->J_tmp2[i]; + TimeDerivativeGPU deriv_data; + deriv_data.production_rates = md->production_rates; + deriv_data.loss_rates = md->loss_rates; + __syncthreads(); + deriv_data.production_rates[i] = 0.0; + deriv_data.loss_rates[i] = 0.0; + __syncthreads(); + deriv_data.production_rates = &( md->production_rates[blockDim.x*blockIdx.x]); + deriv_data.loss_rates = &( md->loss_rates[blockDim.x*blockIdx.x]); + sc->grid_cell_state = &( md->state[md->state_size_cell*blockIdx.x]); + int n_rxn = md->n_rxn; + __syncthreads(); +#ifdef IS_DEBUG_MODE_removeAtomic + if(threadIdx.x==0){ + for (int j = 0; j < n_rxn; j++){ + //printf("n_rxn %d i %d j %d \n",n_rxn,i,j); + solveRXN(j,deriv_data, time_step, md, sc); + } + } +#else + if( threadIdx.x < n_rxn) { + int n_iters = n_rxn / blockDim.x; + for (int j = 0; j < n_iters; j++) { + int i_rxn = threadIdx.x + j*blockDim.x; + solveRXN(i_rxn,deriv_data, time_step, md, sc); + } + int residual=n_rxn%blockDim.x; + if(threadIdx.x < residual){ + int i_rxn = threadIdx.x + blockDim.x*n_iters; + solveRXN(i_rxn, deriv_data, time_step, md, sc); + } + } +#endif + __syncthreads(); + deriv_data.production_rates = md->production_rates; + deriv_data.loss_rates = md->loss_rates; + __syncthreads(); + double *r_p = deriv_data.production_rates; + double *r_l = deriv_data.loss_rates; + if (r_p[i] + r_l[i] != 0.0) { + if (md->use_deriv_est==1) { + double scale_fact = 1.0 / (r_p[i] + r_l[i]) / + (1.0 / (r_p[i] + r_l[i]) + MAX_PRECISION_LOSS / fabs(r_p[i]- r_l[i])); + yout[i] = scale_fact * (r_p[i] - r_l[i]) + (1.0 - scale_fact) * (md->J_tmp[i]); + }else { + yout[i] = r_p[i] - r_l[i]; + } + } else { + yout[i] = 0.0; + } + //print_double(y,86,"y646"); + //print_double(md->J_state,86,"J_state644"); + //print_double(md->J_tmp,86,"J_tmp643"); + //print_double(md->J_deriv,86,"J_deriv644"); + //print_double(md->J_tmp2,86,"J_tmp2645"); + //print_double(deriv_data.loss_rates,86,"loss_rates"); + //print_double(deriv_data.production_rates,86,"production_rates"); + //print_double(yout,86,"deriv_data645"); + __syncthreads(); +} + +__device__ +int cudaDevicef(double time_step, double *y, + double *yout, ModelDataGPU *md, ModelDataVariable *sc, int *flag) +{ + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int clock_khz=md->clock_khz; + clock_t start; + start = clock(); +#endif + time_step = sc->cv_next_h; + time_step = time_step > 0. ? time_step : md->init_time_step; + //print_double(md->state,md->state_size_cell,"state661"); + int checkflag=cudaDevicecamp_solver_check_model_state(md, sc, y, flag); + //print_double(md->state,md->state_size_cell,"state663"); + __syncthreads(); + if(checkflag==CAMP_SOLVER_FAIL){ + *flag=CAMP_SOLVER_FAIL; + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int i = blockIdx.x * blockDim.x + threadIdx.x; + if(threadIdx.x==0) sc->timef += ((double)(int)(clock() - start))/(clock_khz*1000); +#endif + return CAMP_SOLVER_FAIL; + } + cudaDevicecalc_deriv(time_step, y, yout, md, sc); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int i = blockIdx.x * blockDim.x + threadIdx.x; + if(threadIdx.x==0) sc->timef += ((double)(int)(clock() - start))/(clock_khz*1000); +#endif + __syncthreads(); + *flag=0; + __syncthreads(); + return 0; +} + +__device__ +int CudaDeviceguess_helper(double h_n, double* y_n, + double* y_n1, double* hf, double* atmp1, + double* acorr, int *flag, ModelDataGPU *md, ModelDataVariable *sc +) { + extern __shared__ double sdata[]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + __syncthreads(); + double min; + cudaDevicemin_2(&min, y_n[i], sdata, md->n_shr_empty); + if(min>-SMALL){ + return 0; + } + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int clock_khz=md->clock_khz; + clock_t start; + start = clock(); +#endif + atmp1[i]=y_n1[i]; + __syncthreads(); + if (h_n > 0.) { + acorr[i]=(1./h_n)*hf[i]; + } else { + acorr[i]=hf[i]; + } + //print_double(acorr,86,"acorr711"); + double t_0 = h_n > 0. ? sc->cv_tn - h_n : sc->cv_tn - 1.; + double t_j = 0.; + __syncthreads(); + for (int iter = 0; iter < GUESS_MAX_ITER && t_0 + t_j < sc->cv_tn; iter++) { + __syncthreads(); + double h_j = sc->cv_tn - (t_0 + t_j); + //print_double(atmp1,86,"atmp720"); +#ifdef IS_DEBUG_MODE_CudaDeviceguess_helper + if(threadIdx.x==0){ + int i_fast = -1; + for (int j = 0; j < blockDim.x; j++) { + double t_star = -atmp1[j+blockIdx.x*blockDim.x] / acorr[j+blockIdx.x*blockDim.x]; + if ((t_star > 0. || (t_star == 0. && acorr[j+blockIdx.x*blockDim.x] < 0.)) && + t_star < h_j) { + h_j = t_star; + i_fast = 1; + } + } + if (i_fast >= 0 && h_n > 0.) + h_j *= 0.95 + 0.1 * iter / (double)GUESS_MAX_ITER; + sdata[0]=h_j; + } + __syncthreads(); + h_j=sdata[0]; + __syncthreads(); +#else + double t_star = -atmp1[i] / acorr[i]; + if (t_star < 0. || (t_star == 0. && acorr[i] >= 0.)){ + t_star=h_j; + } + cudaDevicemin_2(&min, t_star, sdata, md->n_shr_empty); + if(mincv_tn < t_0 + t_j + h_j ? sc->cv_tn - (t_0 + t_j) : h_j; + __syncthreads(); + if (h_n == 0. && sc->cv_tn - (h_j + t_j + t_0) > md->cv_reltol) { + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->timeguess_helper += ((double)(clock() - start))/(clock_khz*1000); +#endif + return -1; + } + atmp1[i]+=h_j*acorr[i]; + __syncthreads(); + t_j += h_j; + int aux_flag=0; + //print_double(atmp1,86,"atmp1766"); + int fflag=cudaDevicef(t_0 + t_j, atmp1, acorr,md,sc,&aux_flag); + //print_double(acorr,86,"acorr721"); + __syncthreads(); + if (fflag == CAMP_SOLVER_FAIL) { + acorr[i] = 0.; + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->timeguess_helper += ((double)(clock() - start))/(clock_khz*1000); +#endif + return -1; + } + if (iter == GUESS_MAX_ITER - 1 && t_0 + t_j < sc->cv_tn) { + if (h_n == 0.){ + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->timeguess_helper += ((double)(clock() - start))/(clock_khz*1000); +#endif + return -1; + } + } + __syncthreads(); + } + __syncthreads(); + acorr[i]=atmp1[i]-y_n[i]; + if (h_n > 0.) acorr[i]=acorr[i]*0.999; + hf[i]=atmp1[i]-y_n1[i]; + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->timeguess_helper += ((double)(clock() - start))/(clock_khz*1000); +#endif + __syncthreads(); + return 1; +} + +__device__ void solveRXNJac( + int i_rxn, JacobianGPU jac, + ModelDataGPU *md, ModelDataVariable *sc +){ + double *rxn_float_data = (double *)&( md->rxn_double[md->rxn_float_indices[i_rxn]]); + int *int_data = (int *)&(md->rxn_int[md->rxn_int_indices[i_rxn]]); + int *rxn_int_data = (int *) &(int_data[1]); + double *rxn_env_data = &(md->rxn_env_data + [md->n_rxn_env_data*blockIdx.x+md->rxn_env_data_idx[i_rxn]]); + switch (int_data[0]) { + case RXN_ARRHENIUS : + rxn_gpu_arrhenius_calc_jac_contrib(sc, jac, rxn_int_data, + rxn_float_data, rxn_env_data,sc->cv_next_h); + break; + case RXN_CMAQ_H2O2 : + rxn_gpu_CMAQ_H2O2_calc_jac_contrib(sc, jac, rxn_int_data, + rxn_float_data, rxn_env_data,sc->cv_next_h); + break; + case RXN_CMAQ_OH_HNO3 : + rxn_gpu_CMAQ_OH_HNO3_calc_jac_contrib(sc, jac, rxn_int_data, + rxn_float_data, rxn_env_data,sc->cv_next_h); + break; + case RXN_FIRST_ORDER_LOSS : + rxn_gpu_first_order_loss_calc_jac_contrib(sc, jac, rxn_int_data, + rxn_float_data, rxn_env_data,sc->cv_next_h); + break; + case RXN_PHOTOLYSIS : + rxn_gpu_photolysis_calc_jac_contrib(sc, jac, rxn_int_data, + rxn_float_data, rxn_env_data,sc->cv_next_h); + break; + case RXN_TROE : + rxn_gpu_troe_calc_jac_contrib(sc, jac, rxn_int_data, + rxn_float_data, rxn_env_data,sc->cv_next_h); + break; + } +} + +__device__ void cudaDevicecalc_Jac(double *y,ModelDataGPU *md, ModelDataVariable *sc +){ + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int clock_khz=md->clock_khz; + clock_t start; + start = clock(); + __syncthreads(); +#endif + JacobianGPU *jac = &md->jac; + JacobianGPU jacBlock; + __syncthreads(); + jacBlock.num_elem = jac->num_elem; + jacBlock.production_partials = &( jac->production_partials[jacBlock.num_elem[0]*blockIdx.x]); + jacBlock.loss_partials = &( jac->loss_partials[jacBlock.num_elem[0]*blockIdx.x]); + __syncthreads(); + sc->grid_cell_state = &( md->state[md->state_size_cell*blockIdx.x]); + __syncthreads(); + int n_rxn = md->n_rxn; +#ifdef IS_DEBUG_MODE_removeAtomic + if(threadIdx.x==0){ + for (int j = 0; j < n_rxn; j++){ + solveRXNJac(j,jacBlock, md, sc); + } + } +#else + if( threadIdx.x < n_rxn) { + int n_iters = n_rxn / blockDim.x; + for (int j = 0; j < n_iters; j++) { + int i_rxn = threadIdx.x + j*blockDim.x; + solveRXNJac(i_rxn,jacBlock, md, sc); + } + int residual=n_rxn%blockDim.x; + if(threadIdx.x < residual){ + int i_rxn = threadIdx.x + blockDim.x*n_iters; + solveRXNJac(i_rxn,jacBlock, md, sc); + } + } +#endif + __syncthreads(); + JacMap *jac_map = md->jac_map; + int nnz = md->n_mapped_values[0]; + int n_iters = nnz / blockDim.x; + for (int z = 0; z < n_iters; z++) { + int j = threadIdx.x + z*blockDim.x; + md->dA[jac_map[j].solver_id + nnz * blockIdx.x] = + jacBlock.production_partials[jac_map[j].rxn_id] - jacBlock.loss_partials[jac_map[j].rxn_id]; + jacBlock.production_partials[jac_map[j].rxn_id] = 0.0; + jacBlock.loss_partials[jac_map[j].rxn_id] = 0.0; + } + int residual=nnz%blockDim.x; + if(threadIdx.x < residual){ + int j = threadIdx.x + n_iters*blockDim.x; + md->dA[jac_map[j].solver_id + nnz * blockIdx.x] = + jacBlock.production_partials[jac_map[j].rxn_id] - jacBlock.loss_partials[jac_map[j].rxn_id]; + jacBlock.production_partials[jac_map[j].rxn_id] = 0.0; + jacBlock.loss_partials[jac_map[j].rxn_id] = 0.0; + } + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->timecalc_Jac += ((double)(clock() - start))/(clock_khz*1000); +#endif +} + +__device__ +int cudaDeviceJac(int *flag, ModelDataGPU *md, ModelDataVariable *sc) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + int retval; + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int clock_khz=md->clock_khz; + clock_t start; + start = clock(); +#endif + md->use_deriv_est=0; + int aux_flag=0; + __syncthreads(); + //print_double(md->dcv_y,86,"dcv_y914"); + retval=cudaDevicef(sc->cv_next_h, md->dcv_y, md->dftemp,md,sc,&aux_flag); + md->use_deriv_est=1; + __syncthreads(); + if(retval==CAMP_SOLVER_FAIL) + return CAMP_SOLVER_FAIL; + cudaDevicecalc_Jac(md->dcv_y,md, sc); + __syncthreads(); + int nnz = md->n_mapped_values[0]; + int n_iters = nnz / blockDim.x; + for (int z = 0; z < n_iters; z++) { + int j = threadIdx.x + z*blockDim.x + nnz * blockIdx.x; + md->J_solver[j]=md->dA[j]; + } + int residual=nnz%blockDim.x; + if(threadIdx.x < residual){ + int j = threadIdx.x + n_iters*blockDim.x + nnz * blockIdx.x; + md->J_solver[j]=md->dA[j]; + } + __syncthreads(); + md->J_state[i]=md->dcv_y[i]; + md->J_deriv[i]=md->dftemp[i]; + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->timeJac += ((double)(clock() - start))/(clock_khz*1000); +#endif + __syncthreads(); + *flag = 0; + __syncthreads(); + return 0; +} + +__device__ +int cudaDevicelinsolsetup( + ModelDataGPU *md, ModelDataVariable *sc, int convfail +) { + extern __shared__ int flag_shr[]; + double dgamma; + int jbad, jok; + dgamma = fabs((sc->cv_gamma / sc->cv_gammap) - 1.);//SUNRabs + jbad = (sc->cv_nst == 0) || + (sc->cv_nst > sc->nstlj + CVD_MSBJ) || + ((convfail == CV_FAIL_BAD_J) && (dgamma < CVD_DGMAX)) || + (convfail == CV_FAIL_OTHER); + jok = !jbad; + if (jok==1) { + __syncthreads(); + sc->cv_jcur = 0; + cudaDeviceJacCopy(md->diA, md->dsavedJ, md->dA); + __syncthreads(); + } else { + __syncthreads(); + sc->nstlj = sc->cv_nst; + sc->cv_jcur = 1; + __syncthreads(); + int aux_flag=0; + __syncthreads(); + int guess_flag=cudaDeviceJac(&aux_flag,md,sc); + __syncthreads(); + if (guess_flag < 0) { + return -1;} + if (guess_flag > 0) { + return 1;} + cudaDeviceJacCopy(md->diA, md->dA, md->dsavedJ); + } + __syncthreads(); + int i = blockIdx.x * blockDim.x + threadIdx.x; + md->dx[i]=0.; + cudaDeviceBCGprecond_2(md->dA, md->djA, md->diA, md->ddiag, -sc->cv_gamma); + __syncthreads(); + return 0; +} + +__device__ +void solveBcgCudaDeviceCVODE(ModelDataGPU *md, ModelDataVariable *sc) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + double alpha,rho0,omega0,beta,rho1,temp1,temp2; + alpha=rho0=omega0=beta=rho1=temp1=temp2=1.0; + md->dn0[i]=0.0; + md->dp0[i]=0.0; + cudaDeviceSpmv_2(md->dr0,md->dx,md->dA,md->djA,md->diA); + md->dr0[i]=md->dtempv[i]-md->dr0[i]; + md->dr0h[i]=md->dr0[i]; + int it=0; + while(it<1000 && temp1>1.0E-30){ + cudaDevicedotxy_2(md->dr0, md->dr0h, &rho1, md->n_shr_empty); + beta = (rho1 / rho0) * (alpha / omega0); + md->dp0[i]=beta*md->dp0[i]+md->dr0[i]-md->dn0[i]*omega0*beta; + md->dy[i]=md->ddiag[i]*md->dp0[i]; + cudaDeviceSpmv_2(md->dn0, md->dy, md->dA, md->djA, md->diA); + cudaDevicedotxy_2(md->dr0h, md->dn0, &temp1, md->n_shr_empty); + alpha = rho1 / temp1; + md->ds[i]=md->dr0[i]-alpha*md->dn0[i]; + md->dx[i]+=alpha*md->dy[i]; + md->dy[i]=md->ddiag[i]*md->ds[i]; + cudaDeviceSpmv_2(md->dt, md->dy, md->dA, md->djA, md->diA); + md->dr0[i]=md->ddiag[i]*md->dt[i]; + cudaDevicedotxy_2(md->dy, md->dr0, &temp1, md->n_shr_empty); + cudaDevicedotxy_2(md->dr0, md->dr0, &temp2, md->n_shr_empty); + omega0 = temp1 / temp2; + md->dx[i]+=omega0*md->dy[i]; + md->dr0[i]=md->ds[i]-omega0*md->dt[i]; + md->dt[i]=0.0; + cudaDevicedotxy_2(md->dr0, md->dr0, &temp1, md->n_shr_empty); + temp1 = sqrt(temp1); + rho0 = rho1; + it++; + __syncthreads(); + //if(i==0)printf("end iter %d BCG GPU\n",it); + } + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->counterBCGInternal += it; + if(threadIdx.x==0) sc->counterBCG++; +#endif +} + +__device__ +int cudaDevicecvNewtonIteration(ModelDataGPU *md, ModelDataVariable *sc){ + extern __shared__ double flag_shr2[]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + int aux_flag=0; + double del, delp, dcon; + int m = 0; + del = delp = 0.0; + int retval; + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int clock_khz=md->clock_khz; + clock_t start; +#endif + for(;;) { + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + start = clock(); +#endif + //print_double(md->dtempv,86,"dtempvN_VLinearSum1"); + md->dtempv[i]=sc->cv_rl1*md->dzn[i+md->nrows]+md->cv_acor[i]; + //print_double(md->dtempv,86,"dtempvN_VLinearSum2"); + md->dtempv[i]=sc->cv_gamma*md->dftemp[i]-md->dtempv[i]; + //print_double(md->dtempv,86,"dtempvcv_lsolve1"); + solveBcgCudaDeviceCVODE(md, sc); + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->dtBCG += ((double)(int)(clock() - start))/(clock_khz*1000); +#endif + md->dtempv[i] = md->dx[i]; + //print_double(md->dtempv,86,"dtempvcv_lsolve2"); + __syncthreads(); + cudaDeviceVWRMS_Norm_2(md->dx, md->dewt, &del, md->n_shr_empty); + md->dftemp[i]=md->dcv_y[i]+md->dtempv[i]; + __syncthreads(); + //print_double(md->dcv_y,86,"dcv_y2994"); + //print_double(md->dftemp,86,"cv_ftemplsolve"); + int guessflag=CudaDeviceguess_helper(0., md->dftemp, + md->dcv_y, md->dtempv, md->dtempv1,md->dtempv2, &aux_flag, md, sc + ); + __syncthreads(); + if (guessflag < 0) { + if (!(sc->cv_jcur)) { //Bool set up during linsolsetup just before Jacobian + return TRY_AGAIN; + } else { + return RHSFUNC_RECVR; + } + } + md->dftemp[i]=md->dcv_y[i]+md->dtempv[i]; + double min; + cudaDevicemin_2(&min, md->dftemp[i], flag_shr2, md->n_shr_empty); + if (min < -CAMP_TINY) { + return CONV_FAIL; + } + __syncthreads(); + md->cv_acor[i]+=md->dtempv[i]; + md->dcv_y[i]=md->dzn[i]+md->cv_acor[i]; + //print_double(md->cv_acor,86,"cv_acor1060"); + //print_double(md->dcv_y,86,"dcv_y1060"); + if (m > 0) { + sc->cv_crate = SUNMAX(0.3 * sc->cv_crate, del / delp); + } + dcon = del * SUNMIN(1.0, sc->cv_crate) / md->cv_tq[4+blockIdx.x*(NUM_TESTS + 1)]; + flag_shr2[0]=0; + __syncthreads(); + if (dcon <= 1.) { + //print_double(md->cv_acor,86,"cv_acor1505"); + //print_double(md->dewt,86,"dewt1505"); + cudaDeviceVWRMS_Norm_2(md->cv_acor, md->dewt, &sc->cv_acnrm, md->n_shr_empty); + //print_double(&sc->cv_acnrm,1,"cv_acnrm1151"); + __syncthreads(); + sc->cv_jcur = 0; + __syncthreads(); + return CV_SUCCESS; + } + m++; + if ((m == md->cv_maxcor) || ((m >= 2) && (del > RDIV * delp))) { + if (!(sc->cv_jcur)) { + return TRY_AGAIN; + } else { + return RHSFUNC_RECVR; + } + } + delp = del; + __syncthreads(); + //print_double(md->dcv_y,86,"dcv_y1137"); + retval=cudaDevicef(sc->cv_next_h, md->dcv_y, md->dftemp, md, sc, &aux_flag); + __syncthreads(); + md->cv_acor[i]=md->dcv_y[i]+md->dzn[i]; + if (retval < 0) { + return CV_RHSFUNC_FAIL; + } + if (retval > 0) { + if (!(sc->cv_jcur)) { + return TRY_AGAIN; + } else { + return RHSFUNC_RECVR; + } + } + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->dtPostBCG += ((double)(clock() - start))/(clock_khz*1000); +#endif + } +} + +__device__ +int cudaDevicecvNlsNewton(int nflag, + ModelDataGPU *md, ModelDataVariable *sc +) { + extern __shared__ int flag_shr[]; + int flagDevice = 0; + int i = blockIdx.x * blockDim.x + threadIdx.x; + int retval=0; + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int clock_khz=md->clock_khz; + clock_t start; +#endif + int convfail = ((nflag == FIRST_CALL) || (nflag == PREV_ERR_FAIL)) ? + CV_NO_FAILURES : CV_FAIL_OTHER; + int dgamrat=fabs(sc->cv_gamrat - 1.); + int callSetup = (nflag == PREV_CONV_FAIL) || (nflag == PREV_ERR_FAIL) || + (sc->cv_nst == 0) || + (sc->cv_nst >= sc->cv_nstlp + MSBP) || + (dgamrat > DGMAX); + __syncthreads(); + //print_double(md->cv_last_yn,86,"cv_last_yn1175"); + md->dftemp[i]=md->dzn[i]-md->cv_last_yn[i]; + //print_double(md->dftemp,86,"cv_ftemppN_VLinearSum2"); + md->cv_acor_init[i]=0.; + __syncthreads(); + int guessflag=CudaDeviceguess_helper(sc->cv_h, md->dzn, + md->cv_last_yn, md->dftemp, md->dtempv1, + md->cv_acor_init, &flagDevice,md, sc + ); + __syncthreads(); + if(guessflag<0){ + return RHSFUNC_RECVR; + } + for(;;) { + __syncthreads(); + //print_double(md->cv_acor_init,86,"cv_acor_init1140"); + md->dcv_y[i] = md->dzn[i]+md->cv_acor_init[i]; + //print_double(md->dcv_y,86,"dcv_y1139"); + int aux_flag=0; + //print_double(md->dftemp,86,"cv_ftemppcv_f1"); + //print_double(&sc->cv_tn,1,"cv_tn1216"); + retval=cudaDevicef(sc->cv_tn, md->dcv_y,md->dftemp,md,sc,&aux_flag); + //print_double(md->dftemp,86,"cv_ftemppcv_f2"); + //print_double(md->dcv_y,86,"dcv_y1144"); + if (retval < 0) { + return CV_RHSFUNC_FAIL; + } + if (retval> 0) { + return RHSFUNC_RECVR; + } + if (callSetup) { + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + start = clock(); +#endif + __syncthreads(); + int linflag=cudaDevicelinsolsetup(md, sc,convfail); + //print_double(md->dftemp,86,"cv_ftempp1160"); + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->timelinsolsetup += ((double)(clock() - start))/(clock_khz*1000); +#endif + callSetup = 0; + sc->cv_gamrat = sc->cv_crate = 1.0; + sc->cv_gammap = sc->cv_gamma; + sc->cv_nstlp = sc->cv_nst; + __syncthreads(); + if (linflag < 0) { + flag_shr[0] = CV_LSETUP_FAIL; + break; + } + if (linflag > 0) { + flag_shr[0] = CONV_FAIL; + break; + } + } + __syncthreads(); + md->cv_acor[i] = md->cv_acor_init[i]; + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + start = clock(); +#endif + __syncthreads(); + int nItflag=cudaDevicecvNewtonIteration(md, sc); + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->timeNewtonIteration += ((double)(clock() - start))/(clock_khz*1000); +#endif + if (nItflag != TRY_AGAIN) { + return nItflag; + } + __syncthreads(); + callSetup = 1; + __syncthreads(); + convfail = CV_FAIL_BAD_J; + __syncthreads(); + } //for(;;) + __syncthreads(); + return nflag; +} + +__device__ +void cudaDevicecvRescale(ModelDataGPU *md, ModelDataVariable *sc) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + double factor; + __syncthreads(); + factor = sc->cv_eta; + for (int j=1; j <= sc->cv_q; j++) { + md->dzn[i+md->nrows*j]*=factor; + __syncthreads(); + factor *= sc->cv_eta; + __syncthreads(); + } + //print_double(&sc->cv_eta,1,"cv_eta_1290"); + sc->cv_h = sc->cv_hscale * sc->cv_eta; + sc->cv_next_h = sc->cv_h; + sc->cv_hscale = sc->cv_h; + __syncthreads(); +} + +__device__ +void cudaDevicecvRestore(ModelDataGPU *md, ModelDataVariable *sc, double saved_t) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + int j, k; + __syncthreads(); + sc->cv_tn=saved_t; + print_double(md->dzn,86,"dzn1299"); + for (k = 1; k <= sc->cv_q; k++){ + for (j = sc->cv_q; j >= k; j--) { + md->dzn[i+md->nrows*(j-1)]-=md->dzn[i+md->nrows*j]; + } + } + md->dzn[i]=md->cv_last_yn[i]; + print_double(md->dzn,86,"dzn1306"); + __syncthreads(); +} + +__device__ +int cudaDevicecvHandleNFlag(ModelDataGPU *md, ModelDataVariable *sc, int *nflagPtr, double saved_t, + int *ncfPtr) { + extern __shared__ int flag_shr[]; + if (*nflagPtr == CV_SUCCESS){ + return(DO_ERROR_TEST); + } + cudaDevicecvRestore(md, sc, saved_t); + if (*nflagPtr == CV_LSETUP_FAIL) return(CV_LSETUP_FAIL); + if (*nflagPtr == CV_LSOLVE_FAIL) return(CV_LSOLVE_FAIL); + if (*nflagPtr == CV_RHSFUNC_FAIL) return(CV_RHSFUNC_FAIL); + (*ncfPtr)++; + sc->cv_etamax = 1.; + __syncthreads(); + if ((fabs(sc->cv_h) <= sc->cv_hmin*ONEPSM) || + (*ncfPtr == sc->cv_maxncf)) { + if (*nflagPtr == CONV_FAIL) return(CV_CONV_FAILURE); + if (*nflagPtr == RHSFUNC_RECVR) return(CV_REPTD_RHSFUNC_ERR); + } + __syncthreads(); + sc->cv_eta = SUNMAX(ETACF, + sc->cv_hmin / fabs(sc->cv_h)); + //print_double(&sc->cv_eta,1,"cv_eta_1337"); + __syncthreads(); + *nflagPtr = PREV_CONV_FAIL; + cudaDevicecvRescale(md, sc); + __syncthreads(); + return (PREDICT_AGAIN); +} + +__device__ +void cudaDevicecvSetTqBDFt(ModelDataGPU *md, ModelDataVariable *sc, + double hsum, double alpha0, double alpha0_hat, + double xi_inv, double xistar_inv) { + extern __shared__ int flag_shr[]; + double A1, A2, A3, A4, A5, A6; + double C, Cpinv, Cppinv; + __syncthreads(); + A1 = 1. - alpha0_hat + alpha0; + A2 = 1. + sc->cv_q * A1; + md->cv_tq[2+blockIdx.x*(NUM_TESTS + 1)] = fabs(A1 / (alpha0 * A2)); + md->cv_tq[5+blockIdx.x*(NUM_TESTS + 1)] = fabs(A2 * xistar_inv / (md->cv_l[sc->cv_q+blockIdx.x*L_MAX] * xi_inv)); + if (sc->cv_qwait == 1) { + if (sc->cv_q > 1) { + C = xistar_inv / md->cv_l[sc->cv_q+blockIdx.x*L_MAX]; + A3 = alpha0 + 1. / sc->cv_q; + A4 = alpha0_hat + xi_inv; + Cpinv = (1. - A4 + A3) / A3; + md->cv_tq[1+blockIdx.x*(NUM_TESTS + 1)] = fabs(C * Cpinv); + } + else md->cv_tq[1+blockIdx.x*(NUM_TESTS + 1)] = 1.; + __syncthreads(); + hsum += md->cv_tau[sc->cv_q+blockIdx.x*(L_MAX + 1)]; + xi_inv = sc->cv_h / hsum; + A5 = alpha0 - (1. / (sc->cv_q+1)); + A6 = alpha0_hat - xi_inv; + Cppinv = (1. - A6 + A5) / A2; + md->cv_tq[3+blockIdx.x*(NUM_TESTS + 1)] = fabs(Cppinv / (xi_inv * (sc->cv_q+2) * A5)); + __syncthreads(); + } + md->cv_tq[4+blockIdx.x*(NUM_TESTS + 1)] = md->cv_nlscoef / md->cv_tq[2+blockIdx.x*(NUM_TESTS + 1)]; +} + +__device__ +void cudaDevicecvSetBDF(ModelDataGPU *md, ModelDataVariable *sc) { + extern __shared__ int flag_shr[]; + double alpha0, alpha0_hat, xi_inv, xistar_inv, hsum; + int z,j; + __syncthreads(); + md->cv_l[0+blockIdx.x*L_MAX] = md->cv_l[1+blockIdx.x*L_MAX] = xi_inv = xistar_inv = 1.; + for (z=2; z <= sc->cv_q; z++) md->cv_l[z+blockIdx.x*L_MAX] = 0.; + alpha0 = alpha0_hat = -1.; + hsum = sc->cv_h; + __syncthreads(); + if (sc->cv_q > 1) { + for (j=2; j < sc->cv_q; j++) { + hsum += md->cv_tau[j-1+blockIdx.x*(L_MAX + 1)]; + xi_inv = sc->cv_h / hsum; + alpha0 -= 1. / j; + for (z=j; z >= 1; z--) md->cv_l[z+blockIdx.x*L_MAX] += md->cv_l[z-1+blockIdx.x*L_MAX]*xi_inv; + } + __syncthreads(); + alpha0 -= 1. / sc->cv_q; + xistar_inv = -md->cv_l[1+blockIdx.x*L_MAX] - alpha0; + hsum += md->cv_tau[sc->cv_q-1+blockIdx.x*(L_MAX + 1)]; + xi_inv = sc->cv_h / hsum; + alpha0_hat = -md->cv_l[1+blockIdx.x*L_MAX] - xi_inv; + for (z=sc->cv_q; z >= 1; z--) + md->cv_l[z+blockIdx.x*L_MAX] += md->cv_l[z-1+blockIdx.x*L_MAX]*xistar_inv; + } + __syncthreads(); + cudaDevicecvSetTqBDFt(md, sc, hsum, alpha0, alpha0_hat, xi_inv, xistar_inv); +} + +__device__ +void cudaDevicecvSet(ModelDataGPU *md, ModelDataVariable *sc) { + extern __shared__ int flag_shr[]; + __syncthreads(); + cudaDevicecvSetBDF(md,sc); + __syncthreads(); + sc->cv_rl1 = 1.0 / md->cv_l[1+blockIdx.x*L_MAX]; + sc->cv_gamma = sc->cv_h * sc->cv_rl1; + __syncthreads(); + if (sc->cv_nst == 0){ + sc->cv_gammap = sc->cv_gamma; + } + __syncthreads(); + sc->cv_gamrat = (sc->cv_nst > 0) ? + sc->cv_gamma / sc->cv_gammap : 1.; // protect x / x != 1.0 + __syncthreads(); +} + +__device__ +void cudaDevicecvPredict(ModelDataGPU *md, ModelDataVariable *sc) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + int j, k; + __syncthreads(); + sc->cv_tn += sc->cv_h; + __syncthreads(); + if (md->cv_tstopset) { + if ((sc->cv_tn - md->cv_tstop)*sc->cv_h > 0.) + sc->cv_tn = md->cv_tstop; + } + md->cv_last_yn[i]=md->dzn[i]; + __syncthreads(); + print_double(md->dzn,86,"dzn1432"); + for (k = 1; k <= sc->cv_q; k++){ + for (j = sc->cv_q; j >= k; j--){ + md->dzn[i+md->nrows*(j-1)]+=md->dzn[i+md->nrows*j]; + __syncthreads(); + } + } + print_double(md->dzn,86,"dzn1439"); +} + +__device__ +void cudaDevicecvDecreaseBDF(ModelDataGPU *md, ModelDataVariable *sc) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + double hsum, xi; + int z, j; + for (z=0; z <= md->cv_qmax; z++) md->cv_l[z+blockIdx.x*L_MAX] = 0.; + md->cv_l[2+blockIdx.x*L_MAX] = 1.; + hsum = 0.; + for (j=1; j <= sc->cv_q-2; j++) { + hsum += md->cv_tau[j+blockIdx.x*(L_MAX + 1)]; + xi = hsum /sc->cv_hscale; + for (z=j+2; z >= 2; z--) + md->cv_l[z+blockIdx.x*L_MAX] = md->cv_l[z+blockIdx.x*L_MAX]*xi + md->cv_l[z-1+blockIdx.x*L_MAX]; + } + for (j=2; j < sc->cv_q; j++){ + md->dzn[i+md->nrows*j]=-md->cv_l[j+blockIdx.x*L_MAX]* + md->dzn[i+md->nrows*sc->cv_q]+md->dzn[i+md->nrows*j]; + } + print_double(md->dzn,86,"dzn1460"); +} + +__device__ +int cudaDevicecvDoErrorTest(ModelDataGPU *md, ModelDataVariable *sc, + int *nflagPtr,double saved_t, int *nefPtr, double *dsmPtr) { + extern __shared__ double flag_shr2[]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + double dsm; + double min_val; + int retval; + md->dftemp[i]=md->cv_l[blockIdx.x*L_MAX]*md->cv_acor[i]+md->dzn[i]; + cudaDevicemin_2(&min_val, md->dftemp[i], flag_shr2, md->n_shr_empty); + if (min_val < 0. && min_val > -CAMP_TINY) { + md->dftemp[i]=fabs(md->dftemp[i]); + md->dzn[i]=md->dftemp[i]-md->cv_l[0+blockIdx.x*L_MAX]*md->cv_acor[i]; + min_val = 0.; + } + print_double(md->dzn,86,"dzn1487"); + //print_double(&md->cv_tq[2+blockIdx.x*(NUM_TESTS + 1)],1,"cv_tq_21504"); + //print_double(&sc->cv_acnrm,1,"cv_acnrm1504"); + dsm = sc->cv_acnrm * md->cv_tq[2+blockIdx.x*(NUM_TESTS + 1)]; + //print_double(&dsm,1,"dsm1504"); + *dsmPtr = dsm; + if (dsm <= 1. && min_val >= 0.) return(CV_SUCCESS); + (*nefPtr)++; + *nflagPtr = PREV_ERR_FAIL; + cudaDevicecvRestore(md, sc, saved_t); + __syncthreads(); + if ((fabs(sc->cv_h) <= sc->cv_hmin*ONEPSM) || + (*nefPtr == md->cv_maxnef)) return(CV_ERR_FAILURE); + sc->cv_etamax = 1.; + __syncthreads(); + if (*nefPtr <= MXNEF1) { + sc->cv_eta = 1. / (dSUNRpowerR(BIAS2*dsm,1./sc->cv_L) + ADDON); + __syncthreads(); + sc->cv_eta = SUNMAX(ETAMIN, SUNMAX(sc->cv_eta, + sc->cv_hmin / fabs(sc->cv_h))); + __syncthreads(); + if (*nefPtr >= SMALL_NEF) + sc->cv_eta = SUNMIN(sc->cv_eta, ETAMXF); + __syncthreads(); + //print_double(&sc->cv_eta,1,"cv_eta_1510"); + cudaDevicecvRescale(md, sc); + return(TRY_AGAIN); + } + __syncthreads(); + if (sc->cv_q > 1) { + sc->cv_eta = SUNMAX(ETAMIN,sc->cv_hmin / fabs(sc->cv_h)); + //print_double(&sc->cv_eta,1,"cv_eta_1517"); + cudaDevicecvDecreaseBDF(md, sc); + sc->cv_L = sc->cv_q; + //print_int(&sc->cv_L,1,"cv_L1547"); + sc->cv_q--; + sc->cv_qwait = sc->cv_L; + cudaDevicecvRescale(md, sc); + __syncthreads(); + return(TRY_AGAIN); + } + __syncthreads(); + sc->cv_eta = SUNMAX(ETAMIN, sc->cv_hmin / fabs(sc->cv_h)); + //print_double(&sc->cv_eta,1,"cv_eta_1529"); + __syncthreads(); + sc->cv_h *= sc->cv_eta; + sc->cv_next_h = sc->cv_h; + sc->cv_hscale = sc->cv_h; + __syncthreads(); + sc->cv_qwait = 10; + int aux_flag=0; + retval=cudaDevicef(sc->cv_tn, md->dzn, md->dtempv,md,sc, &aux_flag); + if (retval < 0) return(CV_RHSFUNC_FAIL); + if (retval > 0) return(CV_UNREC_RHSFUNC_ERR); + md->dzn[i+md->nrows]=sc->cv_h*md->dtempv[i]; + return(TRY_AGAIN); +} + +__device__ +void cudaDevicecvCompleteStep(ModelDataGPU *md, ModelDataVariable *sc) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + int z, j; + __syncthreads(); + sc->cv_nst++; + __syncthreads(); + sc->cv_hu = sc->cv_h; + for (z=sc->cv_q; z >= 2; z--) md->cv_tau[z+blockIdx.x*(L_MAX + 1)] = md->cv_tau[z-1+blockIdx.x*(L_MAX + 1)]; + if ((sc->cv_q==1) && (sc->cv_nst > 1)) + md->cv_tau[2+blockIdx.x*(L_MAX + 1)] = md->cv_tau[1+blockIdx.x*(L_MAX + 1)]; + md->cv_tau[1+blockIdx.x*(L_MAX + 1)] = sc->cv_h; + __syncthreads(); + for (j=0; j <= sc->cv_q; j++){ + md->dzn[i+md->nrows*j]+=md->cv_l[j+blockIdx.x*L_MAX]*md->cv_acor[i]; + __syncthreads(); + } + print_double(md->dzn,86,"dzn1554"); + sc->cv_qwait--; + if ((sc->cv_qwait == 1) && (sc->cv_q != md->cv_qmax)) { + md->dzn[i+md->nrows*md->cv_qmax]=md->cv_acor[i]; + sc->cv_saved_tq5 = md->cv_tq[5+blockIdx.x*(NUM_TESTS + 1)]; + sc->cv_indx_acor = md->cv_qmax; + } +} + +__device__ +void cudaDevicecvChooseEta(ModelDataGPU *md, ModelDataVariable *sc) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + double etam; + //print_double(&sc->cv_etaqm1,1,"cv_etaqm1605"); + //print_double(&sc->cv_etaq,1,"cv_etaq1605"); + //print_double(&sc->cv_etaqp1,1,"cv_etaqp1605"); + etam = SUNMAX(sc->cv_etaqm1, SUNMAX(sc->cv_etaq, sc->cv_etaqp1)); + //print_double(&etam,1,"etam1605"); + __syncthreads(); + if (etam < THRESH) { + sc->cv_eta = 1.; + //print_double(&sc->cv_eta,1,"cv_eta1609"); + sc->cv_qprime = sc->cv_q; + return; + } + __syncthreads(); + if (etam == sc->cv_etaq) { + sc->cv_eta = sc->cv_etaq; + //print_double(&sc->cv_eta,1,"cv_eta1616"); + sc->cv_qprime = sc->cv_q; + } else if (etam == sc->cv_etaqm1) { + sc->cv_eta = sc->cv_etaqm1; + //print_double(&sc->cv_eta,1,"cv_eta1620"); + sc->cv_qprime = sc->cv_q - 1; + } else { + sc->cv_eta = sc->cv_etaqp1; + //print_double(&sc->cv_eta,1,"cv_eta1624"); + sc->cv_qprime = sc->cv_q + 1; + __syncthreads(); + md->dzn[i+md->nrows*md->cv_qmax]=md->cv_acor[i]; + } + __syncthreads(); + print_double(md->dzn,86,"dzn1581"); +} + +__device__ +void cudaDevicecvSetEta(ModelDataGPU *md, ModelDataVariable *sc) { + __syncthreads(); + if (sc->cv_eta < THRESH) { + sc->cv_eta = 1.; + sc->cv_hprime = sc->cv_h; + } else { + __syncthreads(); + sc->cv_eta = SUNMIN(sc->cv_eta, sc->cv_etamax); + __syncthreads(); + sc->cv_eta /= SUNMAX(ONE, + fabs(sc->cv_h)*md->cv_hmax_inv*sc->cv_eta); + __syncthreads(); + sc->cv_hprime = sc->cv_h * sc->cv_eta; + __syncthreads(); + } + //print_double(&sc->cv_eta,1,"cv_eta_1618"); + __syncthreads(); +} + +__device__ +int cudaDevicecvPrepareNextStep(ModelDataGPU *md, ModelDataVariable *sc, double dsm) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + __syncthreads(); + if (sc->cv_etamax == 1.) { + sc->cv_qwait = SUNMAX(sc->cv_qwait, 2); + sc->cv_qprime = sc->cv_q; + sc->cv_hprime = sc->cv_h; + sc->cv_eta = 1.; + //print_double(&sc->cv_eta,1,"cv_eta_1631"); + return 0; + } + __syncthreads(); + //print_double(&dsm,1,"dsm1639"); + //print_int(&sc->cv_L,1,"cv_L1639"); + //double BIAS2dsm=BIAS2*dsm; + //print_double(&BIAS2dsm,1,"BIAS2dsm"); + //double cv_L1=sc->cv_L; + //print_double(&cv_L1,1,"1cv_L"); + //double cv_etaq_power=dSUNRpowerR(BIAS2dsm,cv_L1); + //print_double(&cv_etaq_power,1,"cv_etaq_power"); + //double cv_etaq_sqrt=sqrt(BIAS2dsm); + //print_double(&cv_etaq_sqrt,1,"cv_etaq_sqrt"); + sc->cv_etaq=1./(dSUNRpowerR(BIAS2*dsm,1./sc->cv_L) + ADDON); + //print_double(&sc->cv_etaq,1,"cv_etaq1639"); + /* + if(sc->cv_L!=2){ + //print_int(&sc->cv_L,1,"cv_L1674"); + if(i==0)printf("WARNING: pow is innacurate from CPU" + " result for CUDA/10.1.105 " + " (which is used during development at CTE-POWER) " + " (debug by compare pow(x,0.5) and" + " sqrt(x.0.5), double x=3.28586921557249207e-12)\n"); + } + */ + __syncthreads(); + if (sc->cv_qwait != 0) { + sc->cv_eta = sc->cv_etaq; + //print_double(&sc->cv_eta,1,"cv_eta1639"); + sc->cv_qprime = sc->cv_q; + cudaDevicecvSetEta(md, sc); + return 0; + } + __syncthreads(); + sc->cv_qwait = 2; + double ddn; + sc->cv_etaqm1 = 0.; + __syncthreads(); + if (sc->cv_q > 1) { + cudaDeviceVWRMS_Norm_2(&md->dzn[md->nrows*sc->cv_q], + md->dewt, &ddn, md->n_shr_empty); + __syncthreads(); + ddn *= md->cv_tq[1+blockIdx.x*(NUM_TESTS + 1)]; + __syncthreads(); + sc->cv_etaqm1 = 1./(dSUNRpowerR(BIAS1*ddn, 1./sc->cv_q) + ADDON); + } + double dup, cquot; + sc->cv_etaqp1 = 0.; + __syncthreads(); + if (sc->cv_q != md->cv_qmax && sc->cv_saved_tq5 != 0.) { + cquot = (md->cv_tq[5+blockIdx.x*(NUM_TESTS + 1)] / sc->cv_saved_tq5) * + dSUNRpowerI(sc->cv_h/md->cv_tau[2+blockIdx.x*(L_MAX + 1)],(double)sc->cv_L); + md->dtempv[i]=md->cv_acor[i]-cquot*md->dzn[i+md->nrows*md->cv_qmax]; + //print_double(md->dtempv,86,"dtempv1658"); + cudaDeviceVWRMS_Norm_2(md->dtempv, md->dewt, &dup, md->n_shr_empty); + __syncthreads(); + dup *= md->cv_tq[3+blockIdx.x*(NUM_TESTS + 1)]; + __syncthreads(); + //print_double(&dup,1,"dup1728"); + //print_int(&sc->cv_L,1,"cv_L1728"); + //double BIAS3dup=BIAS3*dup; + //print_double(&BIAS3dup,1,"BIAS3dup"); + //double cv_L1=1./(sc->cv_L+1); + //print_double(&cv_L1,1,"1cv_L1732"); + //double cv_etaq_power=dSUNRpowerR(BIAS3dup,1./cv_L1); + //double cv_etaq_power=(double)pow((double)BIAS3dup,(double)cv_L1); + //print_double(&cv_etaq_power,1,"cv_etaq_power1734"); + sc->cv_etaqp1 = 1. / (dSUNRpowerR(BIAS3*dup, 1./(sc->cv_L+1)) + ADDON); + //print_double(&sc->cv_etaqp1,1,"cv_etaqp1728"); + } + __syncthreads(); + cudaDevicecvChooseEta(md, sc); + __syncthreads(); + cudaDevicecvSetEta(md, sc); + __syncthreads(); + return CV_SUCCESS; +} + +__device__ +void cudaDevicecvIncreaseBDF(ModelDataGPU *md, ModelDataVariable *sc) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + double alpha0, alpha1, prod, xi, xiold, hsum, A1; + int z, j; + for (z=0; z <= md->cv_qmax; z++) md->cv_l[z+blockIdx.x*L_MAX] = 0.; + md->cv_l[2+blockIdx.x*L_MAX] = alpha1 = prod = xiold = 1.; + alpha0 = -1.; + hsum = sc->cv_hscale; + if (sc->cv_q > 1) { + for (j=1; j < sc->cv_q; j++) { + hsum += md->cv_tau[j+1+blockIdx.x*(L_MAX + 1)]; + xi = hsum / sc->cv_hscale; + prod *= xi; + alpha0 -= 1. / (j+1); + alpha1 += 1. / xi; + for (z=j+2; z >= 2; z--) + md->cv_l[z+blockIdx.x*L_MAX] = md->cv_l[z+blockIdx.x*L_MAX]*xiold + md->cv_l[z-1+blockIdx.x*L_MAX]; + xiold = xi; + } + } + A1 = (-alpha0 - alpha1) / prod; + md->dzn[i+md->nrows*sc->cv_L]=A1*md->dzn[i+md->nrows*sc->cv_indx_acor]; + __syncthreads(); + for (j=2; j <= sc->cv_q; j++){ + md->dzn[i+md->nrows*j]+=md->cv_l[j+blockIdx.x*L_MAX]*md->dzn[i+md->nrows*(sc->cv_L)]; + __syncthreads(); + } + print_double(md->dzn,86,"dzn1687"); +} + +__device__ +void cudaDevicecvAdjustParams(ModelDataGPU *md, ModelDataVariable *sc) { + if (sc->cv_qprime != sc->cv_q) { + int deltaq = sc->cv_qprime-sc->cv_q; + switch(deltaq) { + case 1: + cudaDevicecvIncreaseBDF(md, sc); + break; + case -1: + cudaDevicecvDecreaseBDF(md, sc); + break; + } + sc->cv_q = sc->cv_qprime; + sc->cv_L = sc->cv_q+1; + //print_int(&sc->cv_L,1,"cv_L1770"); + sc->cv_qwait = sc->cv_L; + } + cudaDevicecvRescale(md, sc); +} + +__device__ +int cudaDevicecvStep(ModelDataGPU *md, ModelDataVariable *sc) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + int ncf = 0; + int nef = 0; + int nflag=FIRST_CALL; + double saved_t=sc->cv_tn; + double dsm; + __syncthreads(); + if ((sc->cv_nst > 0) && (sc->cv_hprime != sc->cv_h)){ + cudaDevicecvAdjustParams(md, sc); + } + __syncthreads(); + for (;;) { + __syncthreads(); + cudaDevicecvPredict(md, sc); + __syncthreads(); + cudaDevicecvSet(md, sc); + __syncthreads(); + nflag = cudaDevicecvNlsNewton(nflag,md, sc); + __syncthreads(); + int kflag = cudaDevicecvHandleNFlag(md, sc, &nflag, saved_t, &ncf); + __syncthreads(); + if (kflag == PREDICT_AGAIN) { + continue; + } + if (kflag != DO_ERROR_TEST) { + return (kflag); + } + __syncthreads(); + int eflag=cudaDevicecvDoErrorTest(md,sc,&nflag,saved_t,&nef,&dsm); + __syncthreads(); + if (eflag == TRY_AGAIN){ + continue; + } + if (eflag != CV_SUCCESS){ + return (eflag); + } + break; + } + __syncthreads(); + cudaDevicecvCompleteStep(md, sc); + __syncthreads(); + cudaDevicecvPrepareNextStep(md, sc, dsm); + __syncthreads(); + sc->cv_etamax=10.; + md->cv_acor[i]*=md->cv_tq[2+blockIdx.x*(NUM_TESTS + 1)]; + __syncthreads(); + return(CV_SUCCESS); + } + +__device__ +int cudaDeviceCVodeGetDky(ModelDataGPU *md, ModelDataVariable *sc, + double t, int k, double *dky) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + double s, c, r; + double tfuzz, tp, tn1; + int z, j; + __syncthreads(); + tfuzz = FUZZ_FACTOR * md->cv_uround * (fabs(sc->cv_tn) + fabs(sc->cv_hu)); + if (sc->cv_hu < 0.) tfuzz = -tfuzz; + tp = sc->cv_tn - sc->cv_hu - tfuzz; + tn1 = sc->cv_tn + tfuzz; + if ((t-tp)*(t-tn1) > 0.) { + return(CV_BAD_T); + } + __syncthreads(); + s = (t - sc->cv_tn) / sc->cv_h; + for (j=sc->cv_q; j >= k; j--) { + c = 1.; + for (z=j; z >= j-k+1; z--) c *= z; + if (j == sc->cv_q) { + dky[i]=c*md->dzn[i+md->nrows*j]; + } else { + dky[i]=c*md->dzn[i+md->nrows*j]+s*dky[i]; + } + } + __syncthreads(); + if (k == 0) return(CV_SUCCESS); + __syncthreads(); + r = dSUNRpowerI(double(sc->cv_h),double(-k)); + __syncthreads(); + dky[i]=dky[i]*r; + return(CV_SUCCESS); +} + +__device__ +int cudaDevicecvEwtSetSV(ModelDataGPU *md, ModelDataVariable *sc,double *weight) { + extern __shared__ double flag_shr2[]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + md->dtempv[i]=fabs(md->dzn[i]); + double min; + md->dtempv[i]=md->cv_reltol*md->dtempv[i]+md->cv_Vabstol[i]; + cudaDevicemin_2(&min, md->dtempv[i], flag_shr2, md->n_shr_empty); +__syncthreads(); + if (min <= 0.) return(-1); + weight[i]= 1./md->dtempv[i]; + return(0); +} + +__device__ +int cudaDeviceCVode(ModelDataGPU *md, ModelDataVariable *sc) { + extern __shared__ int flag_shr[]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + int kflag2; + sc->nstloc=0; + sc->nstlj=0; + sc->cv_nst=0; + sc->cv_nstlp=0; + for(;;) { + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->countercvStep++; +#endif + flag_shr[0] = 0; + __syncthreads(); + sc->cv_next_h = sc->cv_h; + int ewtsetOK = 0; + if (sc->cv_nst > 0) { + //print_double(md->dtempv,86,"dtempvcv_efun0"); + ewtsetOK = cudaDevicecvEwtSetSV(md, sc, md->dewt); + //print_double(md->dtempv,86,"dtempvcv_efun1"); + if (ewtsetOK != 0) { + sc->cv_tretlast = sc->tret = sc->cv_tn; + md->yout[i] = md->dzn[i]; + if(i==0) printf("ERROR: ewtsetOK\n"); + return CV_ILL_INPUT; + } + } + if ((md->cv_mxstep > 0) && (sc->nstloc >= md->cv_mxstep)) { + sc->cv_tretlast = sc->tret = sc->cv_tn; + md->yout[i] = md->dzn[i]; + if(i==0) printf("ERROR: cv_mxstep reached " + "sc->nstloc %d md->cv_mxstep %d\n",sc->nstloc,md->cv_mxstep); + return CV_TOO_MUCH_WORK; + } + double nrm; + cudaDeviceVWRMS_Norm_2(md->dzn, + md->dewt, &nrm, md->n_shr_empty); + sc->cv_tolsf = md->cv_uround * nrm; + if (sc->cv_tolsf > 1.) { + sc->cv_tretlast = sc->tret = sc->cv_tn; + md->yout[i] = md->dzn[i]; + sc->cv_tolsf *= 2.; + if(i==0) printf("ERROR: cv_tolsf\n"); + __syncthreads(); + if(i==0) printf("ERROR: cv_tolsf\n"); + return CV_TOO_MUCH_ACC; + } else { + sc->cv_tolsf = 1.; + } +#ifdef ODE_WARNING + if (sc->cv_tn + sc->cv_h == sc->cv_tn) { + if(threadIdx.x==0) sc->cv_nhnil++; + if ((sc->cv_nhnil <= sc->cv_mxhnil) || + (sc->cv_nhnil == sc->cv_mxhnil)) + if(i==0)printf("WARNING: h below roundoff level in tn"); + } +#endif + print_double(md->dzn,86,"dzn1858"); + kflag2 = cudaDevicecvStep(md, sc); + __syncthreads(); + if (kflag2 != CV_SUCCESS) { + sc->cv_tretlast = sc->tret = sc->cv_tn; + md->yout[i] = md->dzn[i]; + if(i==0) printf("ERROR: kflag != CV_SUCCESS\n"); + return kflag2; + } + sc->nstloc++; + if ((sc->cv_tn - md->tout) * sc->cv_h >= 0.) { + sc->cv_tretlast = sc->tret = md->tout; + cudaDeviceCVodeGetDky(md, sc, md->tout, 0, md->yout); + return CV_SUCCESS; + } + if (md->cv_tstopset) {//needed? + double troundoff = FUZZ_FACTOR * md->cv_uround * (fabs(sc->cv_tn) + fabs(sc->cv_h)); + if (fabs(sc->cv_tn - md->cv_tstop) <= troundoff) { + cudaDeviceCVodeGetDky(md, sc, md->cv_tstop, 0, md->yout); + sc->cv_tretlast = sc->tret = md->cv_tstop; + md->cv_tstopset = SUNFALSE; + if(i==0) printf("ERROR: cv_tstopset\n"); + __syncthreads(); + return CV_TSTOP_RETURN; + } + if ((sc->cv_tn + sc->cv_hprime - md->cv_tstop) * sc->cv_h > 0.) { + sc->cv_hprime = (md->cv_tstop - sc->cv_tn) * (1.0 - 4.0 * md->cv_uround); + if(i==0) printf("ERROR: sc->cv_tn + sc->cv_hprime - sc->cv_tstop\n"); + sc->cv_eta = sc->cv_hprime / sc->cv_h; + } + } + } +} + +__global__ +void cudaGlobalCVode(ModelDataGPU md_object) { + ModelDataGPU *md = &md_object; + extern __shared__ int flag_shr[]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + //TODO CHECK IF USING SC AS LOCAL INSTEAD OF MD->SCELLS HAS BETTER MAPE AND FINE IN MONARCH + //IF WANT TO USE SC 1 PER BLOCK, THEN CHECK ALL SC->SOMETHING = SOMETHING AND BLOCKIDX.X CALLS AND ADD IF(THREADIDX.X==0)...SYNCTHREADS() TO AVOID OVERLAPPING + //ModelDataVariable *sc = &md->sCells[blockIdx.x]; + ModelDataVariable sc_object = md->sCells[blockIdx.x]; + ModelDataVariable *sc = &sc_object; + __syncthreads(); + int istate; + if(inrows){ +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + int clock_khz=md->clock_khz; + clock_t start; + start = clock(); + __syncthreads(); +#endif + istate=cudaDeviceCVode(md,sc); + __syncthreads(); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + if(threadIdx.x==0) sc->dtcudaDeviceCVode += ((double)(int)(clock() - start))/(clock_khz*1000); + __syncthreads(); +#endif + } + __syncthreads(); + if(threadIdx.x==0) md->flagCells[blockIdx.x]=istate; +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + ModelDataVariable *mdvo = md->mdvo; + *mdvo = *sc; +#endif +} + +int nextPowerOfTwoCVODE2(int v){ + v--; + v |= v >> 1; + v |= v >> 2; + v |= v >> 4; + v |= v >> 8; + v |= v >> 16; + v++; + return v; +} + +void cvodeRun(ModelDataGPU *mGPU, cudaStream_t stream){ + int len_cell = mGPU->nrows / mGPU->n_cells; + int threads_block = len_cell; + int blocks = mGPU->n_cells; + int n_shr_memory = nextPowerOfTwoCVODE2(len_cell); + mGPU->n_shr_empty = n_shr_memory - threads_block; + cudaGlobalCVode <<>>(*mGPU); +} diff --git a/src/cuda/cvode_cuda.h b/src/cuda/cvode_cuda.h new file mode 100644 index 000000000..13c651736 --- /dev/null +++ b/src/cuda/cvode_cuda.h @@ -0,0 +1,99 @@ +/* Copyright (C) 2021 Barcelona Supercomputing Center and University of +* Illinois at Urbana-Champaign +* SPDX-License-Identifier: MIT +*/ + +#ifndef CVODE_CUDA_H_ +#define CVODE_CUDA_H_ + +#include +#include +#include + +extern "C" { +#include "../camp_solver.h" +} + +void cvodeRun(ModelDataGPU *mGPU, cudaStream_t stream); + +#define CV_SUCCESS 0 +#define DO_ERROR_TEST +2 +#define PREDICT_AGAIN +3 +#define CONV_FAIL +4 +#define TRY_AGAIN +5 +#define FIRST_CALL +6 +#define PREV_CONV_FAIL +7 +#define PREV_ERR_FAIL +8 +#define RHSFUNC_RECVR +9 +#define NUM_TESTS 5 /* number of error test quantities */ +#define PT1 RCONST(0.1) /* real 0.1 */ +#define POINT2 RCONST(0.2) /* real 0.2 */ +#define FOURTH RCONST(0.25) /* real 0.25 */ +#define TWO RCONST(2.0) /* real 2.0 */ +#define THREE RCONST(3.0) /* real 3.0 */ +#define FOUR RCONST(4.0) /* real 4.0 */ +#define FIVE RCONST(5.0) /* real 5.0 */ +#define TWELVE RCONST(12.0) /* real 12.0 */ +#define HUNDRED RCONST(100.0) /* real 100.0 */ +#define CAMP_TINY RCONST(1.0e-30) /* small number for CAMP */ +#define DO_ERROR_TEST +2 +#define PREDICT_AGAIN +3 +#define CONV_FAIL +4 +#define TRY_AGAIN +5 +#define FIRST_CALL +6 +#define PREV_CONV_FAIL +7 +#define PREV_ERR_FAIL +8 +#define RHSFUNC_RECVR +9 +#define RTFOUND +1 +#define CLOSERT +3 +#define CV_NN 0 +#define CV_SS 1 +#define CV_SV 2 +#define CV_WF 3 +#define FUZZ_FACTOR RCONST(100.0) +#define HLB_FACTOR RCONST(100.0) +#define HUB_FACTOR RCONST(0.1) +#define H_BIAS HALF +#define MAX_ITERS 4000 +#define CORTES RCONST(0.1) +#define THRESH RCONST(1.5) +#define ETAMX1 RCONST(10000.0) +#define ETAMX2 RCONST(10.0) +#define ETAMX3 RCONST(10.0) +#define ETAMXF RCONST(0.2) +#define ETAMIN RCONST(0.1) +#define ETACF RCONST(0.25) +#define ADDON RCONST(0.000001) +#define BIAS1 RCONST(6.0) +#define BIAS2 RCONST(6.0) +#define BIAS3 RCONST(10.0) +#define ONEPSM RCONST(1.000001) +#define SMALL_NST 10 +#define MXNCF 10 +#define MXNEF 7 +#define MXNEF1 3 +#define SMALL_NEF 2 +#define LONG_WAIT 10 +#define NLS_MAXCOR 3 +#define CRDOWN RCONST(0.3) +#define DGMAX RCONST(0.3) +#define RDIV 2.0 +#define MSBP 20 +#define RXN_ARRHENIUS 1 +#define RXN_TROE 2 +#define RXN_CMAQ_H2O2 3 +#define RXN_CMAQ_OH_HNO3 4 +#define RXN_PHOTOLYSIS 5 +#define RXN_HL_PHASE_TRANSFER 6 +#define RXN_AQUEOUS_EQUILIBRIUM 7 +#define RXN_SIMPOL_PHASE_TRANSFER 10 +#define RXN_CONDENSED_PHASE_ARRHENIUS 11 +#define RXN_FIRST_ORDER_LOSS 12 +#define RXN_EMISSION 13 +#define RXN_WET_DEPOSITION 14 +#define CAMP_SOLVER_SUCCESS 0 +#define CAMP_SOLVER_FAIL 1 +#define MAX_PRECISION_LOSS 1.0e-14 +#define GUESS_MAX_ITER 5 + +#endif \ No newline at end of file diff --git a/src/cuda/cvode_gpu.cu b/src/cuda/cvode_gpu.cu new file mode 100644 index 000000000..53b683352 --- /dev/null +++ b/src/cuda/cvode_gpu.cu @@ -0,0 +1,663 @@ +/* Copyright (C) 2021 Barcelona Supercomputing Center and University of + * Illinois at Urbana-Champaign + * SPDX-License-Identifier: MIT + */ +#include "cvode_cuda.h" + +extern "C" { +#include "cvode_gpu.h" +} + +#ifdef CAMP_USE_MPI +#include +#endif + +void print_double_cv_gpu(double *x, int len, const char *s){ +#ifdef USE_PRINT_ARRAYS + for (int i=0; icv_tn, cv_mem->cv_h); + break; + case CV_CONV_FAILURE: + cvProcessError(cv_mem, CV_CONV_FAILURE, "CVODE", "CVode", MSGCV_CONV_FAILS, + cv_mem->cv_tn, cv_mem->cv_h); + break; + case CV_LSETUP_FAIL: + cvProcessError(cv_mem, CV_LSETUP_FAIL, "CVODE", "CVode", MSGCV_SETUP_FAILED, + cv_mem->cv_tn); + break; + case CV_LSOLVE_FAIL: + cvProcessError(cv_mem, CV_LSOLVE_FAIL, "CVODE", "CVode", MSGCV_SOLVE_FAILED, + cv_mem->cv_tn); + break; + case CV_RHSFUNC_FAIL: + cvProcessError(cv_mem, CV_RHSFUNC_FAIL, "CVODE", "CVode", MSGCV_RHSFUNC_FAILED, + cv_mem->cv_tn); + break; + case CV_UNREC_RHSFUNC_ERR: + cvProcessError(cv_mem, CV_UNREC_RHSFUNC_ERR, "CVODE", "CVode", MSGCV_RHSFUNC_UNREC, + cv_mem->cv_tn); + break; + case CV_REPTD_RHSFUNC_ERR: + cvProcessError(cv_mem, CV_REPTD_RHSFUNC_ERR, "CVODE", "CVode", MSGCV_RHSFUNC_REPTD, + cv_mem->cv_tn); + break; + case CV_RTFUNC_FAIL: + cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODE", "CVode", MSGCV_RTFUNC_FAILED, + cv_mem->cv_tn); + break; + case CV_TOO_CLOSE: + cvProcessError(cv_mem, CV_TOO_CLOSE, "CVODE", "CVode", MSGCV_TOO_CLOSE); + break; + default: + return(CV_SUCCESS); + } + return(flag); +} + +int cvYddNorm_gpu(CVodeMem cv_mem, realtype hg, realtype *yddnrm){ + int retval; + N_VLinearSum(hg, cv_mem->cv_zn[1], ONE, cv_mem->cv_zn[0], cv_mem->cv_y); + retval = f(cv_mem->cv_tn+hg, cv_mem->cv_y, cv_mem->cv_tempv, cv_mem->cv_user_data); + cv_mem->cv_nfe++; + if (retval < 0) return(CV_RHSFUNC_FAIL); + if (retval > 0) return(RHSFUNC_RECVR); + N_VLinearSum(ONE, cv_mem->cv_tempv, -ONE, cv_mem->cv_zn[1], cv_mem->cv_tempv); + N_VScale(ONE/hg, cv_mem->cv_tempv, cv_mem->cv_tempv); + *yddnrm = N_VWrmsNorm(cv_mem->cv_tempv, cv_mem->cv_ewt); + return(CV_SUCCESS); +} + +realtype cvUpperBoundH0_gpu(CVodeMem cv_mem, realtype tdist){ + realtype hub_inv, hub; + N_Vector temp1, temp2; + temp1 = cv_mem->cv_tempv; + temp2 = cv_mem->cv_acor; + N_VAbs(cv_mem->cv_zn[0], temp2); + cv_mem->cv_efun(cv_mem->cv_zn[0], temp1, cv_mem->cv_e_data); + N_VInv(temp1, temp1); + N_VLinearSum(HUB_FACTOR, temp2, ONE, temp1, temp1); + N_VAbs(cv_mem->cv_zn[1], temp2); + N_VDiv(temp2, temp1, temp1); + hub_inv = N_VMaxNorm(temp1); + hub = HUB_FACTOR*tdist; + if (hub*hub_inv > ONE) hub = ONE/hub_inv; + return(hub); +} + +int cvHin_gpu(CVodeMem cv_mem, realtype tout){ + int retval, sign, count1, count2; + realtype tdiff, tdist, tround, hlb, hub; + realtype hg, hgs, hs, hnew, hrat, h0, yddnrm; + booleantype hgOK, hnewOK; + if ((tdiff = tout-cv_mem->cv_tn) == ZERO) return(CV_TOO_CLOSE); + sign = (tdiff > ZERO) ? 1 : -1; + tdist = SUNRabs(tdiff); + tround = cv_mem->cv_uround * SUNMAX(SUNRabs(cv_mem->cv_tn), SUNRabs(tout)); + if (tdist < TWO*tround) return(CV_TOO_CLOSE); + hlb = HLB_FACTOR * tround; + hub = cvUpperBoundH0_gpu(cv_mem, tdist); + hg = SUNRsqrt(hlb*hub); + if (hub < hlb) { + if (sign == -1) cv_mem->cv_h = -hg; + else cv_mem->cv_h = hg; + return(CV_SUCCESS); + } + hnewOK = SUNFALSE; + hs = hg; + for(count1 = 1; count1 <= MAX_ITERS; count1++) { + hgOK = SUNFALSE; + for (count2 = 1; count2 <= MAX_ITERS; count2++) { + hgs = hg*sign; + retval = cvYddNorm_gpu(cv_mem, hgs, &yddnrm); + if (retval < 0) return(CV_RHSFUNC_FAIL); + if (retval == CV_SUCCESS) {hgOK = SUNTRUE; break;} + hg *= POINT2; + } + if (!hgOK) { + if (count1 <= 2) return(CV_REPTD_RHSFUNC_ERR); + hnew = hs; + break; + } + hs = hg; + if ( (hnewOK) || (count1 == MAX_ITERS)) {hnew = hg; break;} + hnew = (yddnrm*hub*hub > TWO) ? SUNRsqrt(TWO/yddnrm) : SUNRsqrt(hg*hub); + hrat = hnew/hg; + if ((hrat > HALF) && (hrat < TWO)) { + hnewOK = SUNTRUE; + } + if ((count1 > 1) && (hrat > TWO)) { + hnew = hg; + hnewOK = SUNTRUE; + } + hg = hnew; + } + h0 = H_BIAS*hnew; + if (h0 < hlb) h0 = hlb; + if (h0 > hub) h0 = hub; + if (sign == -1) h0 = -h0; + cv_mem->cv_h = h0; + return(CV_SUCCESS); +} + +int cvRcheck1_gpu(CVodeMem cv_mem){ + int i, retval; + realtype smallh, hratio, tplus; + booleantype zroot; + for (i = 0; i < cv_mem->cv_nrtfn; i++) cv_mem->cv_iroots[i] = 0; + cv_mem->cv_tlo = cv_mem->cv_tn; + cv_mem->cv_ttol = (SUNRabs(cv_mem->cv_tn) + SUNRabs(cv_mem->cv_h)) * + cv_mem->cv_uround*HUNDRED; + retval = cv_mem->cv_gfun(cv_mem->cv_tlo, cv_mem->cv_zn[0], + cv_mem->cv_glo, cv_mem->cv_user_data); + cv_mem->cv_nge = 1; + if (retval != 0) return(CV_RTFUNC_FAIL); + zroot = SUNFALSE; + for (i = 0; i < cv_mem->cv_nrtfn; i++) { + if (SUNRabs(cv_mem->cv_glo[i]) == ZERO) { + zroot = SUNTRUE; + cv_mem->cv_gactive[i] = SUNFALSE; + } + } + if (!zroot) return(CV_SUCCESS); + hratio = SUNMAX(cv_mem->cv_ttol/SUNRabs(cv_mem->cv_h), PT1); + smallh = hratio*cv_mem->cv_h; + tplus = cv_mem->cv_tlo + smallh; + N_VLinearSum(ONE, cv_mem->cv_zn[0], hratio, + cv_mem->cv_zn[1], cv_mem->cv_y); + retval = cv_mem->cv_gfun(tplus, cv_mem->cv_y, + cv_mem->cv_ghi, cv_mem->cv_user_data); + cv_mem->cv_nge++; + if (retval != 0) return(CV_RTFUNC_FAIL); + for (i = 0; i < cv_mem->cv_nrtfn; i++) { + if (!cv_mem->cv_gactive[i] && SUNRabs(cv_mem->cv_ghi[i]) != ZERO) { + cv_mem->cv_gactive[i] = SUNTRUE; + cv_mem->cv_glo[i] = cv_mem->cv_ghi[i]; + } + } + return(CV_SUCCESS); +} + +int cvRcheck2_gpu(CVodeMem cv_mem){ + int i, retval; + realtype smallh, hratio, tplus; + booleantype zroot; + if (cv_mem->cv_irfnd == 0) return(CV_SUCCESS); + (void) CVodeGetDky(cv_mem, cv_mem->cv_tlo, 0, cv_mem->cv_y); + retval = cv_mem->cv_gfun(cv_mem->cv_tlo, cv_mem->cv_y, + cv_mem->cv_glo, cv_mem->cv_user_data); + cv_mem->cv_nge++; + if (retval != 0) return(CV_RTFUNC_FAIL); + zroot = SUNFALSE; + for (i = 0; i < cv_mem->cv_nrtfn; i++) cv_mem->cv_iroots[i] = 0; + for (i = 0; i < cv_mem->cv_nrtfn; i++) { + if (!cv_mem->cv_gactive[i]) continue; + if (SUNRabs(cv_mem->cv_glo[i]) == ZERO) { + zroot = SUNTRUE; + cv_mem->cv_iroots[i] = 1; + } + } + if (!zroot) return(CV_SUCCESS); + cv_mem->cv_ttol = (SUNRabs(cv_mem->cv_tn) + SUNRabs(cv_mem->cv_h)) * + cv_mem->cv_uround * HUNDRED; + smallh = (cv_mem->cv_h > ZERO) ? cv_mem->cv_ttol : -cv_mem->cv_ttol; + tplus = cv_mem->cv_tlo + smallh; + if ( (tplus - cv_mem->cv_tn)*cv_mem->cv_h >= ZERO) { + hratio = smallh/cv_mem->cv_h; + N_VLinearSum(ONE, cv_mem->cv_y, hratio, cv_mem->cv_zn[1], cv_mem->cv_y); + } else { + (void) CVodeGetDky(cv_mem, tplus, 0, cv_mem->cv_y); + } + retval = cv_mem->cv_gfun(tplus, cv_mem->cv_y, + cv_mem->cv_ghi, cv_mem->cv_user_data); + cv_mem->cv_nge++; + if (retval != 0) return(CV_RTFUNC_FAIL); + zroot = SUNFALSE; + for (i = 0; i < cv_mem->cv_nrtfn; i++) { + if (!cv_mem->cv_gactive[i]) continue; + if (SUNRabs(cv_mem->cv_ghi[i]) == ZERO) { + if (cv_mem->cv_iroots[i] == 1) return(CLOSERT); + zroot = SUNTRUE; + cv_mem->cv_iroots[i] = 1; + } else { + if (cv_mem->cv_iroots[i] == 1) + cv_mem->cv_glo[i] = cv_mem->cv_ghi[i]; + } + } + if (zroot) return(RTFOUND); + return(CV_SUCCESS); +} + +int cvRootfind_gpu(CVodeMem cv_mem){ + realtype alph, tmid, gfrac, maxfrac, fracint, fracsub; + int i, retval, imax, side, sideprev; + booleantype zroot, sgnchg; + imax = 0; + maxfrac = ZERO; + zroot = SUNFALSE; + sgnchg = SUNFALSE; + for (i = 0; i < cv_mem->cv_nrtfn; i++) { + if(!cv_mem->cv_gactive[i]) continue; + if (SUNRabs(cv_mem->cv_ghi[i]) == ZERO) { + if(cv_mem->cv_rootdir[i]*cv_mem->cv_glo[i] <= ZERO) { + zroot = SUNTRUE; + } + } else { + if ( (cv_mem->cv_glo[i]*cv_mem->cv_ghi[i] < ZERO) && + (cv_mem->cv_rootdir[i]*cv_mem->cv_glo[i] <= ZERO) ) { + gfrac = SUNRabs(cv_mem->cv_ghi[i]/(cv_mem->cv_ghi[i] - cv_mem->cv_glo[i])); + if (gfrac > maxfrac) { + sgnchg = SUNTRUE; + maxfrac = gfrac; + imax = i; + } + } + } + } + if (!sgnchg) { + cv_mem->cv_trout = cv_mem->cv_thi; + for (i = 0; i < cv_mem->cv_nrtfn; i++) cv_mem->cv_grout[i] = cv_mem->cv_ghi[i]; + if (!zroot) return(CV_SUCCESS); + for (i = 0; i < cv_mem->cv_nrtfn; i++) { + cv_mem->cv_iroots[i] = 0; + if(!cv_mem->cv_gactive[i]) continue; + if ( (SUNRabs(cv_mem->cv_ghi[i]) == ZERO) && + (cv_mem->cv_rootdir[i]*cv_mem->cv_glo[i] <= ZERO) ) + cv_mem->cv_iroots[i] = cv_mem->cv_glo[i] > 0 ? -1 : 1; + } + return(RTFOUND); + } + alph = ONE; + side = 0; sideprev = -1; + for(;;) { + if (SUNRabs(cv_mem->cv_thi - cv_mem->cv_tlo) <= cv_mem->cv_ttol) break; + if (sideprev == side) { + alph = (side == 2) ? alph*TWO : alph*HALF; + } else { + alph = ONE; + } + tmid = cv_mem->cv_thi - (cv_mem->cv_thi - cv_mem->cv_tlo) * + cv_mem->cv_ghi[imax] / (cv_mem->cv_ghi[imax] - alph*cv_mem->cv_glo[imax]); + if (SUNRabs(tmid - cv_mem->cv_tlo) < HALF*cv_mem->cv_ttol) { + fracint = SUNRabs(cv_mem->cv_thi - cv_mem->cv_tlo)/cv_mem->cv_ttol; + fracsub = (fracint > FIVE) ? PT1 : HALF/fracint; + tmid = cv_mem->cv_tlo + fracsub*(cv_mem->cv_thi - cv_mem->cv_tlo); + } + if (SUNRabs(cv_mem->cv_thi - tmid) < HALF*cv_mem->cv_ttol) { + fracint = SUNRabs(cv_mem->cv_thi - cv_mem->cv_tlo)/cv_mem->cv_ttol; + fracsub = (fracint > FIVE) ? PT1 : HALF/fracint; + tmid = cv_mem->cv_thi - fracsub*(cv_mem->cv_thi - cv_mem->cv_tlo); + } + (void) CVodeGetDky(cv_mem, tmid, 0, cv_mem->cv_y); + retval = cv_mem->cv_gfun(tmid, cv_mem->cv_y, cv_mem->cv_grout, + cv_mem->cv_user_data); + cv_mem->cv_nge++; + if (retval != 0) return(CV_RTFUNC_FAIL); + maxfrac = ZERO; + zroot = SUNFALSE; + sgnchg = SUNFALSE; + sideprev = side; + for (i = 0; i < cv_mem->cv_nrtfn; i++) { + if(!cv_mem->cv_gactive[i]) continue; + if (SUNRabs(cv_mem->cv_grout[i]) == ZERO) { + if(cv_mem->cv_rootdir[i]*cv_mem->cv_glo[i] <= ZERO) zroot = SUNTRUE; + } else { + if ( (cv_mem->cv_glo[i]*cv_mem->cv_grout[i] < ZERO) && + (cv_mem->cv_rootdir[i]*cv_mem->cv_glo[i] <= ZERO) ) { + gfrac = SUNRabs(cv_mem->cv_grout[i]/(cv_mem->cv_grout[i] - cv_mem->cv_glo[i])); + if (gfrac > maxfrac) { + sgnchg = SUNTRUE; + maxfrac = gfrac; + imax = i; + } + } + } + } + if (sgnchg) { + cv_mem->cv_thi = tmid; + for (i = 0; i < cv_mem->cv_nrtfn; i++) + cv_mem->cv_ghi[i] = cv_mem->cv_grout[i]; + side = 1; + if (SUNRabs(cv_mem->cv_thi - cv_mem->cv_tlo) <= cv_mem->cv_ttol) break; + continue; + } + if (zroot) { + cv_mem->cv_thi = tmid; + for (i = 0; i < cv_mem->cv_nrtfn; i++) + cv_mem->cv_ghi[i] = cv_mem->cv_grout[i]; + break; + } + cv_mem->cv_tlo = tmid; + for (i = 0; i < cv_mem->cv_nrtfn; i++) + cv_mem->cv_glo[i] = cv_mem->cv_grout[i]; + side = 2; + if (SUNRabs(cv_mem->cv_thi - cv_mem->cv_tlo) <= cv_mem->cv_ttol) break; + } + cv_mem->cv_trout = cv_mem->cv_thi; + for (i = 0; i < cv_mem->cv_nrtfn; i++) { + cv_mem->cv_grout[i] = cv_mem->cv_ghi[i]; + cv_mem->cv_iroots[i] = 0; + if(!cv_mem->cv_gactive[i]) continue; + if ( (SUNRabs(cv_mem->cv_ghi[i]) == ZERO) && + (cv_mem->cv_rootdir[i]*cv_mem->cv_glo[i] <= ZERO) ) + cv_mem->cv_iroots[i] = cv_mem->cv_glo[i] > 0 ? -1 : 1; + if ( (cv_mem->cv_glo[i]*cv_mem->cv_ghi[i] < ZERO) && + (cv_mem->cv_rootdir[i]*cv_mem->cv_glo[i] <= ZERO) ) + cv_mem->cv_iroots[i] = cv_mem->cv_glo[i] > 0 ? -1 : 1; + } + return(RTFOUND); +} + +int cvRcheck3_gpu(CVodeMem cv_mem){ + int i, ier, retval; + if ( (cv_mem->cv_toutc - cv_mem->cv_tn)*cv_mem->cv_h >= ZERO) { + cv_mem->cv_thi = cv_mem->cv_tn; + N_VScale(ONE, cv_mem->cv_zn[0], cv_mem->cv_y); + } else { + cv_mem->cv_thi = cv_mem->cv_toutc; + (void) CVodeGetDky(cv_mem, cv_mem->cv_thi, 0, cv_mem->cv_y); + } + retval = cv_mem->cv_gfun(cv_mem->cv_thi, cv_mem->cv_y, + cv_mem->cv_ghi, cv_mem->cv_user_data); + cv_mem->cv_nge++; + if (retval != 0) return(CV_RTFUNC_FAIL); + cv_mem->cv_ttol = (SUNRabs(cv_mem->cv_tn) + SUNRabs(cv_mem->cv_h)) * + cv_mem->cv_uround * HUNDRED; + ier = cvRootfind_gpu(cv_mem); + if (ier == CV_RTFUNC_FAIL) return(CV_RTFUNC_FAIL); + for(i=0; icv_nrtfn; i++) { + if(!cv_mem->cv_gactive[i] && cv_mem->cv_grout[i] != ZERO) + cv_mem->cv_gactive[i] = SUNTRUE; + } + cv_mem->cv_tlo = cv_mem->cv_trout; + for (i = 0; i < cv_mem->cv_nrtfn; i++) + cv_mem->cv_glo[i] = cv_mem->cv_grout[i]; + if (ier == CV_SUCCESS) return(CV_SUCCESS); + (void) CVodeGetDky(cv_mem, cv_mem->cv_trout, 0, cv_mem->cv_y); + return(RTFOUND); +} + +int cudaCVode(void *cvode_mem, realtype tout, N_Vector yout, + realtype *tret, SolverData *sd){ + CVodeMem cv_mem; + int retval, hflag, istate, ier; + realtype troundoff, tout_hin, rh; + ModelDataCPU *mCPU = &(sd->mCPU); + ModelDataGPU *mGPU; + ModelData *md = &(sd->model_data); + cudaStream_t stream = 0; + mGPU = sd->mGPU; + HANDLE_ERROR(cudaMemcpyAsync(mGPU->rxn_env_data,md->rxn_env_data,md->n_rxn_env_data * mGPU->n_cells * sizeof(double),cudaMemcpyHostToDevice,stream)); + HANDLE_ERROR(cudaMemcpyAsync(mGPU->env,md->total_env,mCPU->env_size,cudaMemcpyHostToDevice,stream)); + double *J_state = N_VGetArrayPointer(md->J_state); + cudaMemcpyAsync(mGPU->J_state,J_state,mCPU->deriv_size,cudaMemcpyHostToDevice,stream); + double *J_deriv = N_VGetArrayPointer(md->J_deriv); + cudaMemcpyAsync(mGPU->J_deriv,J_deriv,mCPU->deriv_size,cudaMemcpyHostToDevice,stream); + double *J_solver = SM_DATA_S(md->J_solver); + cudaMemcpy(mGPU->J_solver, J_solver, mCPU->jac_size, cudaMemcpyHostToDevice); + cv_mem = (CVodeMem) cvode_mem; + cv_mem->cv_y = yout; + cv_mem->cv_toutc = tout; + //Initializations performed only at the first step (nst=0): + if (cv_mem->cv_nst == 0) { + cv_mem->cv_tretlast = *tret = cv_mem->cv_tn; + cv_mem->cv_e_data = cv_mem; + cv_mem->cv_efun(cv_mem->cv_zn[0], cv_mem->cv_ewt, cv_mem->cv_e_data); + cv_mem->cv_linit(cv_mem); + retval = f(cv_mem->cv_tn, cv_mem->cv_zn[0], cv_mem->cv_zn[1], cv_mem->cv_user_data); + N_VScale(ONE, cv_mem->cv_zn[0], yout); + cv_mem->cv_nfe++; + if (retval < 0) { + cvProcessError(cv_mem, CV_RHSFUNC_FAIL, "CVODE", "CVode", + MSGCV_RHSFUNC_FAILED, cv_mem->cv_tn); + return(CV_RHSFUNC_FAIL); + } + if (retval > 0) { + cvProcessError(cv_mem, CV_FIRST_RHSFUNC_ERR, "CVODE", "CVode", + MSGCV_RHSFUNC_FIRST); + return(CV_FIRST_RHSFUNC_ERR); + } + if (cv_mem->cv_tstopset) { + if ( (cv_mem->cv_tstop - cv_mem->cv_tn)*(tout - cv_mem->cv_tn) <= ZERO ) { + cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", + MSGCV_BAD_TSTOP, cv_mem->cv_tstop, cv_mem->cv_tn); + return(CV_ILL_INPUT); + } + } + cv_mem->cv_h = cv_mem->cv_hin; + if ( (cv_mem->cv_h != ZERO) && ((tout-cv_mem->cv_tn)*cv_mem->cv_h < ZERO) ) { + cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", MSGCV_BAD_H0); + return(CV_ILL_INPUT); + } + if (cv_mem->cv_h == ZERO) { + tout_hin = tout; + if ( cv_mem->cv_tstopset && (tout-cv_mem->cv_tn)*(tout-cv_mem->cv_tstop) > ZERO ) + tout_hin = cv_mem->cv_tstop; + hflag = cvHin_gpu(cv_mem, tout_hin); + if (hflag != CV_SUCCESS) { + istate = cvHandleFailure_gpu(cv_mem, hflag); + return(istate); + } + } + rh = SUNRabs(cv_mem->cv_h)*cv_mem->cv_hmax_inv; + if (rh > ONE) cv_mem->cv_h /= rh; + if (SUNRabs(cv_mem->cv_h) < cv_mem->cv_hmin) + cv_mem->cv_h *= cv_mem->cv_hmin/SUNRabs(cv_mem->cv_h); + if (cv_mem->cv_tstopset) { + if ( (cv_mem->cv_tn + cv_mem->cv_h - cv_mem->cv_tstop)*cv_mem->cv_h > ZERO ) + cv_mem->cv_h = (cv_mem->cv_tstop - cv_mem->cv_tn)*(ONE-FOUR*cv_mem->cv_uround); + } + cv_mem->cv_hscale = cv_mem->cv_h; + cv_mem->cv_h0u = cv_mem->cv_h; + cv_mem->cv_hprime = cv_mem->cv_h; + N_VScale(cv_mem->cv_h, cv_mem->cv_zn[1], cv_mem->cv_zn[1]); + if (cv_mem->cv_ghfun) { + N_VLinearSum(ONE, cv_mem->cv_zn[0], ONE, cv_mem->cv_zn[1], cv_mem->cv_tempv1); + cv_mem->cv_ghfun(cv_mem->cv_tn + cv_mem->cv_h, cv_mem->cv_h, cv_mem->cv_tempv1, + cv_mem->cv_zn[0], cv_mem->cv_zn[1], cv_mem->cv_user_data, + cv_mem->cv_tempv2, cv_mem->cv_acor_init); + } + if (cv_mem->cv_nrtfn > 0) { + retval = cvRcheck1_gpu(cv_mem); + if (retval == CV_RTFUNC_FAIL) { + cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODE", "cvRcheck1", + MSGCV_RTFUNC_FAILED, cv_mem->cv_tn); + return(CV_RTFUNC_FAIL); + } + } + } + //At following steps, perform stop tests: + if (cv_mem->cv_nst > 0) { + troundoff = FUZZ_FACTOR*cv_mem->cv_uround*(SUNRabs(cv_mem->cv_tn) + SUNRabs(cv_mem->cv_h)); + if (cv_mem->cv_nrtfn > 0) { + retval = cvRcheck2_gpu(cv_mem); + if (retval == CLOSERT) { + cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "cvRcheck2", + MSGCV_CLOSE_ROOTS, cv_mem->cv_tlo); + return(CV_ILL_INPUT); + } else if (retval == CV_RTFUNC_FAIL) { + cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODE", "cvRcheck2", + MSGCV_RTFUNC_FAILED, cv_mem->cv_tlo); + return(CV_RTFUNC_FAIL); + } else if (retval == RTFOUND) { + cv_mem->cv_tretlast = *tret = cv_mem->cv_tlo; + return(CV_ROOT_RETURN); + } + if ( SUNRabs(cv_mem->cv_tn - cv_mem->cv_tretlast) > troundoff ) { + retval = cvRcheck3_gpu(cv_mem); + if (retval == CV_SUCCESS) { + cv_mem->cv_irfnd = 0; + } else if (retval == RTFOUND) { + cv_mem->cv_irfnd = 1; + cv_mem->cv_tretlast = *tret = cv_mem->cv_tlo; + return(CV_ROOT_RETURN); + } else if (retval == CV_RTFUNC_FAIL) { + cvProcessError(cv_mem, CV_RTFUNC_FAIL, "CVODE", "cvRcheck3", + MSGCV_RTFUNC_FAILED, cv_mem->cv_tlo); + return(CV_RTFUNC_FAIL); + } + } + } + if ((cv_mem->cv_tn-tout)*cv_mem->cv_h >= ZERO) { + cv_mem->cv_tretlast = *tret = tout; + ier = CVodeGetDky(cv_mem, tout, 0, yout); + if (ier != CV_SUCCESS) { + cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", + MSGCV_BAD_TOUT, tout); + return(CV_ILL_INPUT); + } + return(CV_SUCCESS); + } + if ( cv_mem->cv_tstopset ) { + if ( SUNRabs(cv_mem->cv_tn - cv_mem->cv_tstop) <= troundoff) { + ier = CVodeGetDky(cv_mem, cv_mem->cv_tstop, 0, yout); + if (ier != CV_SUCCESS) { + cvProcessError(cv_mem, CV_ILL_INPUT, "CVODE", "CVode", + MSGCV_BAD_TSTOP, cv_mem->cv_tstop, cv_mem->cv_tn); + return(CV_ILL_INPUT); + } + cv_mem->cv_tretlast = *tret = cv_mem->cv_tstop; + cv_mem->cv_tstopset = SUNFALSE; + return(CV_TSTOP_RETURN); + } + if ( (cv_mem->cv_tn + cv_mem->cv_hprime - cv_mem->cv_tstop)*cv_mem->cv_h > ZERO ) { + cv_mem->cv_hprime = (cv_mem->cv_tstop - cv_mem->cv_tn)*(ONE-FOUR*cv_mem->cv_uround); + cv_mem->cv_eta = cv_mem->cv_hprime/cv_mem->cv_h; + } + } + } + //Looping point for internal steps +#ifdef CAMP_DEBUG_GPU + cudaEventRecord(mCPU->startcvStep); +#endif + for (int i = 0; i < mGPU->n_cells; i++) + sd->flagCells[i] = 99; +#ifdef ODE_WARNING + mCPU->mdvCPU.cv_nhnil = cv_mem->cv_nhnil; +#endif + mCPU->mdvCPU.tret = *tret; + mCPU->mdvCPU.cv_tretlast = cv_mem->cv_tretlast; + mCPU->mdvCPU.cv_etaqm1 = cv_mem->cv_etaqm1; + mCPU->mdvCPU.cv_etaq = cv_mem->cv_etaq; + mCPU->mdvCPU.cv_etaqp1 = cv_mem->cv_etaqp1; + mCPU->mdvCPU.cv_saved_tq5 = cv_mem->cv_saved_tq5; + mCPU->mdvCPU.cv_tolsf = cv_mem->cv_tolsf; + mCPU->mdvCPU.cv_indx_acor = cv_mem->cv_indx_acor; + mCPU->mdvCPU.cv_hu = cv_mem->cv_hu; + mCPU->mdvCPU.cv_jcur = cv_mem->cv_jcur; + mCPU->mdvCPU.cv_nstlp = cv_mem->cv_nstlp; + mCPU->mdvCPU.cv_L = cv_mem->cv_L; + mCPU->mdvCPU.cv_acnrm = cv_mem->cv_acnrm; + mCPU->mdvCPU.cv_qwait = cv_mem->cv_qwait; + mCPU->mdvCPU.cv_crate = cv_mem->cv_crate; + mCPU->mdvCPU.cv_gamrat = cv_mem->cv_gamrat; + mCPU->mdvCPU.cv_gammap = cv_mem->cv_gammap; + mCPU->mdvCPU.cv_gamma = cv_mem->cv_gamma; + mCPU->mdvCPU.cv_rl1 = cv_mem->cv_rl1; + mCPU->mdvCPU.cv_eta = cv_mem->cv_eta; + mCPU->mdvCPU.cv_q = cv_mem->cv_q; + mCPU->mdvCPU.cv_qprime = cv_mem->cv_qprime; + mCPU->mdvCPU.cv_h = cv_mem->cv_h; + mCPU->mdvCPU.cv_next_h = cv_mem->cv_next_h; + mCPU->mdvCPU.cv_hscale = cv_mem->cv_hscale; + mCPU->mdvCPU.cv_hprime = cv_mem->cv_hprime; + mCPU->mdvCPU.cv_hmin = cv_mem->cv_hmin; + mCPU->mdvCPU.cv_tn = cv_mem->cv_tn; + mCPU->mdvCPU.cv_etamax = cv_mem->cv_etamax; + mCPU->mdvCPU.cv_maxncf = cv_mem->cv_maxncf; + double *ewt = NV_DATA_S(cv_mem->cv_ewt); + double *acor = NV_DATA_S(cv_mem->cv_acor); + double *tempv = NV_DATA_S(cv_mem->cv_tempv); + double *ftemp = NV_DATA_S(cv_mem->cv_ftemp); + double *cv_last_yn = N_VGetArrayPointer(cv_mem->cv_last_yn); + double *cv_acor_init = N_VGetArrayPointer(cv_mem->cv_acor_init); + double *youtArray = N_VGetArrayPointer(yout); + double *cv_Vabstol = N_VGetArrayPointer(cv_mem->cv_Vabstol); + cudaMemcpyAsync(mGPU->state,md->total_state,md->n_per_cell_state_var*mGPU->n_cells*sizeof(double),cudaMemcpyHostToDevice,stream); + cudaMemcpyAsync(mGPU->dewt, ewt, mGPU->nrows * sizeof(double), cudaMemcpyHostToDevice, stream); + cudaMemcpyAsync(mGPU->cv_acor, acor, mGPU->nrows * sizeof(double), cudaMemcpyHostToDevice, stream); + cudaMemcpyAsync(mGPU->dtempv, tempv, mGPU->nrows * sizeof(double), cudaMemcpyHostToDevice, stream); + cudaMemcpyAsync(mGPU->dftemp, ftemp, mGPU->nrows * sizeof(double), cudaMemcpyHostToDevice, stream); + cudaMemcpyAsync(mGPU->cv_last_yn, cv_last_yn, mGPU->nrows * sizeof(double), cudaMemcpyHostToDevice, stream); + cudaMemcpyAsync(mGPU->cv_acor_init, cv_acor_init, mGPU->nrows * sizeof(double), cudaMemcpyHostToDevice, stream); + cudaMemcpyAsync(mGPU->yout, youtArray, mGPU->nrows * sizeof(double), cudaMemcpyHostToDevice, stream); + cudaMemcpyAsync(mGPU->cv_Vabstol, cv_Vabstol, mGPU->nrows * sizeof(double), cudaMemcpyHostToDevice, stream); + for (int i = 0; i <= cv_mem->cv_qmax; i++) { + double *zn = NV_DATA_S(cv_mem->cv_zn[i]); + cudaMemcpyAsync((mGPU->dzn + i * mGPU->nrows), zn, mGPU->nrows * sizeof(double), cudaMemcpyHostToDevice, stream); + } + cudaMemcpyAsync(mGPU->flagCells, sd->flagCells, mGPU->n_cells * sizeof(int), cudaMemcpyHostToDevice, + stream); + mGPU->cv_tstop = cv_mem->cv_tstop; + mGPU->cv_tstopset = cv_mem->cv_tstopset; + mGPU->use_deriv_est = sd->use_deriv_est; + mGPU->cv_nlscoef = cv_mem->cv_nlscoef; + mGPU->init_time_step = sd->init_time_step; + mGPU->cv_mxstep = cv_mem->cv_mxstep; + mGPU->cv_uround = cv_mem->cv_uround; + mGPU->cv_hmax_inv = cv_mem->cv_hmax_inv; + mGPU->cv_reltol = cv_mem->cv_reltol; + mGPU->cv_maxcor = cv_mem->cv_maxcor; + mGPU->cv_qmax = cv_mem->cv_qmax; + mGPU->cv_maxnef = cv_mem->cv_maxnef; + mGPU->tout = tout; + for (int i = 0; i < mGPU->n_cells; i++) { + cudaMemcpyAsync(mGPU->cv_l + i * L_MAX, cv_mem->cv_l, L_MAX * sizeof(double), cudaMemcpyHostToDevice, stream); + cudaMemcpyAsync(mGPU->cv_tau + i * (L_MAX + 1), cv_mem->cv_tau, (L_MAX + 1) * sizeof(double), + cudaMemcpyHostToDevice, stream); + cudaMemcpyAsync(mGPU->cv_tq + i * (NUM_TESTS + 1), cv_mem->cv_tq, (NUM_TESTS + 1) * sizeof(double), + cudaMemcpyHostToDevice, stream); + cudaMemcpyAsync(&mGPU->sCells[i], &mCPU->mdvCPU, sizeof(ModelDataVariable), cudaMemcpyHostToDevice, stream); + } + //double *zn0 = NV_DATA_S(cv_mem->cv_zn[0]); + //print_double_cv_gpu(zn0,86,"dzn807"); + //double *zn1 = NV_DATA_S(cv_mem->cv_zn[1]); + //print_double_cv_gpu(zn1,86,"dzn825"); + cvodeRun(mGPU,stream); + cudaMemcpyAsync(cv_acor_init, mGPU->cv_acor_init, mGPU->nrows * sizeof(double), cudaMemcpyDeviceToHost, stream); + cudaMemcpyAsync(youtArray, mGPU->yout, mGPU->nrows * sizeof(double), cudaMemcpyDeviceToHost, stream); + for (int i = 0; i <= cv_mem->cv_qmax; i++) { + double *zn = NV_DATA_S(cv_mem->cv_zn[i]); + cudaMemcpyAsync(zn, (i * mGPU->nrows + mGPU->dzn), mGPU->nrows * sizeof(double), cudaMemcpyDeviceToHost, stream); + } + cudaMemcpyAsync(sd->flagCells, mGPU->flagCells, mGPU->n_cells * sizeof(int), cudaMemcpyDeviceToHost, stream); + mGPU = sd->mGPU; + cudaDeviceSynchronize(); +#ifdef CAMP_DEBUG_GPU + cudaEventRecord(mCPU->stopcvStep); + cudaEventSynchronize(mCPU->stopcvStep); + float mscvStep = 0.0; + cudaEventElapsedTime(&mscvStep, mCPU->startcvStep, mCPU->stopcvStep); + cv_mem->timecvStep+= mscvStep/1000; +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + cudaMemcpy(&mCPU->mdvCPU, mGPU->mdvo, sizeof(ModelDataVariable), cudaMemcpyDeviceToHost); + //printf("mCPU->mdvCPU.dtcudaDeviceCVode %lf\n",mCPU->mdvCPU.dtcudaDeviceCVode); +#endif +#endif + istate = CV_SUCCESS; + for (int i = 0; i < mGPU->n_cells; i++) { + if (sd->flagCells[i] != CV_SUCCESS) { + istate = sd->flagCells[i]; + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + printf("cudaCVode2 kflag %d cell %d rank %d\n",istate,i,rank); + istate = cvHandleFailure_gpu(cv_mem, istate); + //Optional: call EXPORT_NETCDF after this fail + } + } + return(istate); +} + +void solver_get_statistics_gpu(SolverData *sd){ + ModelDataGPU *mGPU = sd->mGPU; + ModelDataCPU *mCPU = &(sd->mCPU); + cudaMemcpy(&mCPU->mdvCPU,mGPU->mdvo,sizeof(ModelDataVariable),cudaMemcpyDeviceToHost); +} \ No newline at end of file diff --git a/src/cuda/cvode_gpu.h b/src/cuda/cvode_gpu.h new file mode 100644 index 000000000..a4d9424c7 --- /dev/null +++ b/src/cuda/cvode_gpu.h @@ -0,0 +1,29 @@ +/* Copyright (C) 2021 Barcelona Supercomputing Center and University of + * Illinois at Urbana-Champaign + * SPDX-License-Identifier: MIT + */ + +#ifndef CVODE_gpu_SOLVER_H_ +#define CVODE_gpu_SOLVER_H_ + +#include +#include "../camp_common.h" + +void constructor_cvode_gpu(SolverData *sd); +int cudaCVode(void *cvode_mem, realtype tout, N_Vector yout, + realtype *tret, SolverData *sd); +void solver_get_statistics_gpu(SolverData *sd); +void free_gpu_cu(SolverData *sd); + +#define HANDLE_ERROR( err ) (HandleError( err, __FILE__, __LINE__ )) +static void HandleError(cudaError_t err, + const char *file, + int line) { + if (err != cudaSuccess) { + printf("%s in %s at line %d\n", cudaGetErrorString(err), + file, line); + exit(EXIT_FAILURE); + } +} + +#endif diff --git a/src/cuda/cvode_init.cu b/src/cuda/cvode_init.cu new file mode 100644 index 000000000..8b5394e90 --- /dev/null +++ b/src/cuda/cvode_init.cu @@ -0,0 +1,346 @@ +/* Copyright (C) 2021 Barcelona Supercomputing Center and University of + * Illinois at Urbana-Champaign + * SPDX-License-Identifier: MIT + */ + +#include "cvode_cuda.h" +extern "C" { +#include "cvode_gpu.h" +} +#ifdef CAMP_USE_MPI +#include +#endif + +void constructor_cvode_gpu(SolverData *sd){ + CVodeMem cv_mem = (CVodeMem) sd->cvode_mem; + ModelDataCPU *mCPU = &(sd->mCPU); + ModelData *md = &(sd->model_data); + CVDlsMem cvdls_mem = (CVDlsMem) cv_mem->cv_lmem; + SUNMatrix J = cvdls_mem->A; + sd->mGPU = (ModelDataGPU *)malloc(sizeof(ModelDataGPU)); + ModelDataGPU *mGPU = sd->mGPU; +#ifdef DEV_CPU_GPU + int n_cells=md->n_cells_gpu; //todo use only mgpu->n_cells +#else + int n_cells = md->n_cells; +#endif + mGPU->n_cells= n_cells; + sd->flagCells = (int *) malloc((n_cells) * sizeof(int)); + int n_dep_var = md->n_per_cell_dep_var; + int n_state_var = md->n_per_cell_state_var; + int n_rxn = md->n_rxn; + size_t state_size = n_state_var * n_cells * sizeof(double); + mCPU->deriv_size = n_dep_var * n_cells * sizeof(double); + mCPU->env_size = CAMP_NUM_ENV_PARAM_ * n_cells * sizeof(double); //Temp and pressure + size_t rxn_env_data_idx_size = (n_rxn+1) * sizeof(int); + size_t map_state_deriv_size = n_dep_var * n_cells * sizeof(int); + int coresPerNode = 40; + int size; + MPI_Comm_size(MPI_COMM_WORLD, &size); + if (size > 40 && size % coresPerNode != 0) { + printf("ERROR: MORE THAN 40 MPI PROCESSES AND NOT MULTIPLE OF 40, WHEN CTE-POWER ONLY HAS 40 CORES PER NODE\n"); + exit(0); + } + int nGPUsMax=4; + cudaGetDeviceCount(&nGPUsMax); + if (sd->nGPUs > nGPUsMax) { + printf("ERROR: Not enough GPUs to launch, nGPUs %d nGPUsMax %d\n", sd->nGPUs, nGPUsMax); + exit(0); + } + if (size > sd->nGPUs*(coresPerNode/nGPUsMax)){ + printf("ERROR: size,sd->nGPUs,coresPerNode,nGPUsMax %d %d %d %d " + "MORE MPI PROCESSES THAN DEVICES (FOLLOW PROPORTION, " + "FOR CTE-POWER IS 10 PROCESSES FOR EACH GPU)\n",size,sd->nGPUs,coresPerNode,nGPUsMax); + exit(0); + } + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + cudaSetDevice(0); + for (int i = 0; i < coresPerNode; i++) { + if (rank < coresPerNode / nGPUsMax * (i + 1) && rank >= coresPerNode / nGPUsMax * i && inGPUs) { + cudaSetDevice(i); + mCPU->threads = 1024; + mCPU->blocks = (n_dep_var*n_cells + mCPU->threads - 1) / mCPU->threads; + } + } + mGPU->n_rxn=md->n_rxn; + mGPU->n_rxn_env_data=md->n_rxn_env_data; + cudaMalloc((void **) &mGPU->state, state_size); + cudaMalloc((void **) &mGPU->env, mCPU->env_size); + cudaMalloc((void **) &mGPU->rxn_env_data, md->n_rxn_env_data * n_cells * sizeof(double)); + cudaMalloc((void **) &mGPU->rxn_env_data_idx, rxn_env_data_idx_size); + cudaMalloc((void **) &mGPU->map_state_deriv, map_state_deriv_size); + int num_spec = md->n_per_cell_dep_var*n_cells; + cudaMalloc((void **) &(mGPU->production_rates),num_spec*sizeof(mGPU->production_rates)); + cudaMalloc((void **) &(mGPU->loss_rates),num_spec*sizeof(mGPU->loss_rates)); + int *map_state_derivCPU = (int *)malloc(map_state_deriv_size); + int i_dep_var = 0; + for (int i_cell = 0; i_cell < n_cells; i_cell++) { + for (int i_spec = 0; i_spec < n_state_var; i_spec++) { + if (md->var_type[i_spec] == CHEM_SPEC_VARIABLE) { + map_state_derivCPU[i_dep_var] = i_spec + i_cell * n_state_var; + i_dep_var++; + } + } + } + HANDLE_ERROR(cudaMemcpy(mGPU->map_state_deriv, map_state_derivCPU, + map_state_deriv_size, cudaMemcpyHostToDevice)); + free(map_state_derivCPU); + if(n_dep_var<32) { + printf("CAMP ERROR: TOO FEW SPECIES FOR GPU (Species < 32)," + " use CPU case instead\n"); + exit(0); +} + mCPU->jac_size = md->n_per_cell_solver_jac_elem * n_cells * sizeof(double); + mCPU->nnz_J_solver = SM_NNZ_S(md->J_solver); + cudaMalloc((void **) &mGPU->dA, mCPU->jac_size); + cudaMalloc((void **) &mGPU->J_solver, mCPU->jac_size); + cudaMalloc((void **) &mGPU->J_state, mCPU->deriv_size); + cudaMalloc((void **) &mGPU->J_deriv, mCPU->deriv_size); + cudaMalloc((void **) &mGPU->J_tmp, mCPU->deriv_size); + cudaMalloc((void **) &mGPU->J_tmp2, mCPU->deriv_size); + cudaMalloc((void **) &mGPU->jac_map, sizeof(JacMap) * md->n_mapped_values); + HANDLE_ERROR(cudaMalloc((void **) &mGPU->n_mapped_values, 1 * sizeof(int))); + mCPU->A = ((double *) SM_DATA_S(J)); + HANDLE_ERROR(cudaMemcpy(mGPU->dA, mCPU->A, mCPU->jac_size, cudaMemcpyHostToDevice)); + double *J_solver = SM_DATA_S(md->J_solver); + cudaMemcpy(mGPU->J_solver, J_solver, mCPU->jac_size, cudaMemcpyHostToDevice); + double *J_state = N_VGetArrayPointer(md->J_state); + HANDLE_ERROR(cudaMemcpy(mGPU->J_state, J_state, mCPU->deriv_size, cudaMemcpyHostToDevice)); + double *J_deriv = N_VGetArrayPointer(md->J_deriv); + HANDLE_ERROR(cudaMemcpy(mGPU->J_deriv, J_deriv, mCPU->deriv_size, cudaMemcpyHostToDevice)); + double *J_tmp2 = N_VGetArrayPointer(md->J_tmp2); + HANDLE_ERROR(cudaMemcpy(mGPU->J_tmp2, J_tmp2, mCPU->deriv_size, cudaMemcpyHostToDevice)); + HANDLE_ERROR(cudaMemcpy(mGPU->jac_map, md->jac_map, sizeof(JacMap) * md->n_mapped_values, cudaMemcpyHostToDevice)); + HANDLE_ERROR(cudaMemcpy(mGPU->n_mapped_values, &md->n_mapped_values, 1 * sizeof(int), cudaMemcpyHostToDevice)); + Jacobian *jac = &sd->jac; + JacobianGPU *jacgpu = &(mGPU->jac); + cudaMalloc((void **) &jacgpu->num_elem, 1 * sizeof(jacgpu->num_elem)); + cudaMemcpy(jacgpu->num_elem, &jac->num_elem, 1 * sizeof(jacgpu->num_elem), cudaMemcpyHostToDevice); + int num_elem = jac->num_elem * n_cells; + cudaMalloc((void **) &(jacgpu->production_partials), num_elem * sizeof(double)); + HANDLE_ERROR(cudaMalloc((void **) &(jacgpu->loss_partials), num_elem * sizeof(double))); + double *aux=(double*)malloc(sizeof(double)*num_elem); + for (int i = 0; i < num_elem; i++) { + aux[i]=0.; + } + HANDLE_ERROR(cudaMemcpy(jacgpu->production_partials, aux, num_elem * sizeof(double), cudaMemcpyHostToDevice)); + HANDLE_ERROR(cudaMemcpy(jacgpu->loss_partials, aux, num_elem * sizeof(double), cudaMemcpyHostToDevice)); + cudaMalloc((void **) &mGPU->rxn_int, (md->n_rxn_int_param + md->n_rxn)*sizeof(int)); + cudaMalloc((void **) &mGPU->rxn_double, md->n_rxn_float_param*sizeof(double)); + cudaMalloc((void **) &mGPU->rxn_int_indices, (md->n_rxn+1)*sizeof(int)); + cudaMalloc((void **) &mGPU->rxn_float_indices, (md->n_rxn+1)*sizeof(int)); + HANDLE_ERROR(cudaMemcpy(mGPU->rxn_int, md->rxn_int_data,(md->n_rxn_int_param + md->n_rxn)*sizeof(int), cudaMemcpyHostToDevice)); + HANDLE_ERROR(cudaMemcpy(mGPU->rxn_double, md->rxn_float_data, md->n_rxn_float_param*sizeof(double), cudaMemcpyHostToDevice)); + HANDLE_ERROR(cudaMemcpy(mGPU->rxn_env_data_idx, md->rxn_env_idx, rxn_env_data_idx_size, cudaMemcpyHostToDevice)); + HANDLE_ERROR(cudaMemcpy(mGPU->rxn_int_indices, md->rxn_int_indices,(md->n_rxn+1)*sizeof(int), cudaMemcpyHostToDevice)); + HANDLE_ERROR(cudaMemcpy(mGPU->rxn_float_indices, md->rxn_float_indices,(md->n_rxn+1)*sizeof(int), cudaMemcpyHostToDevice)); + mCPU->nnz = SM_NNZ_S(J); + int nrows = SM_NP_S(J); + mGPU->nrows = nrows; + double ** dr0 = &mGPU->dr0; + double ** dr0h = &mGPU->dr0h; + double ** dn0 = &mGPU->dn0; + double ** dp0 = &mGPU->dp0; + double ** dt = &mGPU->dt; + double ** ds = &mGPU->ds; + double ** dy = &mGPU->dy; + double ** ddiag = &mGPU->ddiag; + cudaMalloc(dr0,nrows*sizeof(double)); + cudaMalloc(dr0h,nrows*sizeof(double)); + cudaMalloc(dn0,nrows*sizeof(double)); + cudaMalloc(dp0,nrows*sizeof(double)); + cudaMalloc(dt,nrows*sizeof(double)); + cudaMalloc(ds,nrows*sizeof(double)); + cudaMalloc(dy,nrows*sizeof(double)); + HANDLE_ERROR(cudaMalloc(ddiag,nrows*sizeof(double)));; + //Translate from int64 (sunindextype) to int + mCPU->jA = (int *) malloc(sizeof(int) *mCPU->nnz/n_cells); + mCPU->iA = (int *) malloc(sizeof(int) * (nrows/n_cells + 1)); + for (int i = 0; i < mCPU->nnz/n_cells; i++) + mCPU->jA[i] = SM_INDEXVALS_S(J)[i]; + for (int i = 0; i <= nrows/n_cells; i++) + mCPU->iA[i] = SM_INDEXPTRS_S(J)[i]; + cudaMalloc((void **) &mGPU->djA, mCPU->nnz/n_cells * sizeof(int)); + cudaMalloc((void **) &mGPU->diA, (nrows/n_cells + 1) * sizeof(int)); + cudaMemcpy(mGPU->djA, mCPU->jA, mCPU->nnz/n_cells * sizeof(int), cudaMemcpyHostToDevice); + cudaMemcpy(mGPU->diA, mCPU->iA, (nrows/n_cells + 1) * sizeof(int), cudaMemcpyHostToDevice); + double *ewt = N_VGetArrayPointer(cv_mem->cv_ewt); + double *tempv = N_VGetArrayPointer(cv_mem->cv_tempv); + double *cv_last_yn = N_VGetArrayPointer(cv_mem->cv_last_yn); + double *cv_acor_init = N_VGetArrayPointer(cv_mem->cv_acor_init); + cudaMalloc((void **) &mGPU->dftemp, mCPU->deriv_size); + cudaMalloc((void **) &mGPU->sCells, sizeof(ModelDataVariable)*n_cells); + cudaMalloc((void **) &mGPU->flag, 1 * sizeof(int)); + cudaMalloc((void **) &mGPU->flagCells, n_cells * sizeof(int)); + cudaMalloc((void **) &mGPU->dsavedJ, mCPU->nnz * sizeof(double)); + cudaMalloc((void **) &mGPU->dewt, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->cv_acor, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->dtempv, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->dtempv1, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->dtempv2, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->dzn, nrows * (cv_mem->cv_qmax + 1) * sizeof(double)); + cudaMalloc((void **) &mGPU->dcv_y, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->dx, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->cv_last_yn, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->cv_acor_init, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->cv_acor, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->yout, nrows * sizeof(double)); + cudaMalloc((void **) &mGPU->cv_l, L_MAX * n_cells * sizeof(double)); + cudaMalloc((void **) &mGPU->cv_tau, (L_MAX + 1) * n_cells * sizeof(double)); + cudaMalloc((void **) &mGPU->cv_tq, (NUM_TESTS + 1) * n_cells * sizeof(double)); + cudaMalloc((void **) &mGPU->cv_Vabstol, nrows * sizeof(double)); + HANDLE_ERROR(cudaMemset(mGPU->flagCells, CV_SUCCESS, n_cells * sizeof(int))); + cudaMemcpy(mGPU->dsavedJ, mCPU->A, mCPU->nnz * sizeof(double), cudaMemcpyHostToDevice); + cudaMemcpy(mGPU->dewt, ewt, nrows * sizeof(double), cudaMemcpyHostToDevice); + cudaMemcpy(mGPU->cv_acor, ewt, nrows * sizeof(double), cudaMemcpyHostToDevice); + cudaMemcpy(mGPU->dftemp, ewt, nrows * sizeof(double), cudaMemcpyHostToDevice); + cudaMemcpy(mGPU->dx, tempv, nrows * sizeof(double), cudaMemcpyHostToDevice); + cudaMemcpy(mGPU->cv_last_yn, cv_last_yn, nrows * sizeof(double), cudaMemcpyHostToDevice); + HANDLE_ERROR(cudaMemcpy(mGPU->cv_acor_init, cv_acor_init, nrows * sizeof(double), cudaMemcpyHostToDevice)); + mGPU->state_size_cell = md->n_per_cell_state_var; + int flag = 999; + cudaMemcpy(mGPU->flag, &flag, 1 * sizeof(int), cudaMemcpyHostToDevice); + mCPU->mdvCPU.nstlj = 0; +#ifdef CAMP_DEBUG_GPU + cudaEventCreate(&mCPU->startcvStep); + cudaEventCreate(&mCPU->stopcvStep); +#ifdef CAMP_PROFILE_DEVICE_FUNCTIONS + cudaMalloc((void **) &mGPU->mdvo, sizeof(ModelDataVariable)); + cudaDeviceGetAttribute(&mGPU->clock_khz, cudaDevAttrClockRate, 0); + mCPU->mdvCPU.countercvStep=0; + mCPU->mdvCPU.counterBCGInternal=0; + mCPU->mdvCPU.counterBCG=0; + mCPU->mdvCPU.timeNewtonIteration=0.; + mCPU->mdvCPU.timeJac=0.; + mCPU->mdvCPU.timelinsolsetup=0.; + mCPU->mdvCPU.timecalc_Jac=0.; + mCPU->mdvCPU.timef=0.; + mCPU->mdvCPU.timeguess_helper=0.; + mCPU->mdvCPU.dtBCG=0.; + mCPU->mdvCPU.dtcudaDeviceCVode=0.; + mCPU->mdvCPU.dtPostBCG=0.; + HANDLE_ERROR(cudaMemcpy(mGPU->mdvo, &mCPU->mdvCPU, sizeof(ModelDataVariable), cudaMemcpyHostToDevice)); +#endif +#endif + for (int i = 0; i < n_cells; i++){ + cudaMemcpy(&mGPU->sCells[i], &mCPU->mdvCPU, sizeof(ModelDataVariable), cudaMemcpyHostToDevice); + } +#ifdef IS_DEBUG_MODE_CSR_ODE_GPU + int n_row=nrows/n_cells; + int* Ap=mCPU->iA; + int* Aj=mCPU->jA; + double* Ax=mCPU->A; + int nnz=mCPU->nnz/n_cells; + int* Bp=(int*)malloc((n_row+1)*sizeof(int)); + int* Bi=(int*)malloc(nnz*sizeof(int)); + double* Bx=(double*)malloc(nnz*sizeof(double)); + memset(Bp, 0, (n_row+1)*sizeof(int)); + for (int n = 0; n < nnz; n++){ + Bp[Aj[n]]++; + } + for(int col = 0, cumsum = 0; col < n_row; col++){ + int temp = Bp[col]; + Bp[col] = cumsum; + cumsum += temp; + } + Bp[n_row] = nnz; + int *mapJSPMV= (int *)malloc(nnz * sizeof(int)); + for(int row = 0; row < n_row; row++){ + for(int jj = Ap[row]; jj < Ap[row+1]; jj++){ + int col = Aj[jj]; + int dest = Bp[col]; + Bi[dest] = row; + Bx[dest] = Ax[jj]; + mapJSPMV[jj]=dest; + Bp[col]++; + } + } + for(int col = 0, last = 0; col <= n_row; col++){ + int temp = Bp[col]; + Bp[col] = last; + last = temp; + } + ModelData *md = &(sd->model_data); + nnz=md->n_mapped_values; + int *aux_solver_id= (int *)malloc(nnz * sizeof(int)); + for (int i = 0; i < nnz; i++){ + aux_solver_id[i]=mapJSPMV[md->jac_map[i].solver_id]; + } + free(mapJSPMV); + int *jac_solver_id= (int *)malloc(nnz * sizeof(int)); + for (int i = 0; i < nnz; i++){ + jac_solver_id[i]=aux_solver_id[i]; + aux_solver_id[i]=md->jac_map[i].solver_id; + md->jac_map[i].solver_id=jac_solver_id[i]; + } + cudaMemcpy(mGPU->diA, Bp, (n_row + 1) * sizeof(int), cudaMemcpyHostToDevice); + cudaMemcpy(mGPU->djA, Bi, nnz * sizeof(int), cudaMemcpyHostToDevice); + cudaMemcpy(mGPU->dA, Bx, nnz * sizeof(double), cudaMemcpyHostToDevice); + cudaMemcpy(mGPU->jac_map, md->jac_map, sizeof(JacMap) * md->n_mapped_values, cudaMemcpyHostToDevice); + free(Bp); + free(Bi); + free(Bx); + free(jac_solver_id); + free(aux_solver_id); +#endif +} + +void free_gpu_cu(SolverData *sd) { + ModelDataGPU *mGPU = sd->mGPU; + free(sd->flagCells); + mGPU = sd->mGPU; + cudaFree(mGPU->map_state_deriv); + cudaFree(mGPU->J_solver); + cudaFree(mGPU->J_state); + cudaFree(mGPU->J_deriv); + cudaFree(mGPU->J_tmp); + cudaFree(mGPU->J_tmp2); + cudaFree(mGPU->indexvals); + cudaFree(mGPU->indexptrs); + cudaFree(mGPU->rxn_int); + cudaFree(mGPU->rxn_double); + cudaFree(mGPU->state); + cudaFree(mGPU->env); + cudaFree(mGPU->rxn_env_data); + cudaFree(mGPU->rxn_env_data_idx); + cudaFree(mGPU->production_rates); + cudaFree(mGPU->loss_rates); + cudaFree(mGPU->rxn_int_indices); + cudaFree(mGPU->rxn_float_indices); + cudaFree(mGPU->n_mapped_values); + cudaFree(mGPU->jac_map); + cudaFree(mGPU->yout); + cudaFree(mGPU->cv_Vabstol); + cudaFree(mGPU->cv_l); + cudaFree(mGPU->cv_tau); + cudaFree(mGPU->cv_tq); + cudaFree(mGPU->cv_last_yn); + cudaFree(mGPU->cv_acor_init); + cudaFree(mGPU->dA); + cudaFree(mGPU->djA); + cudaFree(mGPU->diA); + cudaFree(mGPU->dx); + cudaFree(mGPU->dtempv); + cudaFree(mGPU->ddiag); + cudaFree(mGPU->dr0); + cudaFree(mGPU->dr0h); + cudaFree(mGPU->dn0); + cudaFree(mGPU->dp0); + cudaFree(mGPU->dt); + cudaFree(mGPU->ds); + cudaFree(mGPU->dy); + cudaFree(mGPU->dz); + cudaFree(mGPU->dftemp); + cudaFree(mGPU->dcv_y); + cudaFree(mGPU->dtempv1); + cudaFree(mGPU->dtempv2); + cudaFree(mGPU->flag); + cudaFree(mGPU->flagCells); + cudaFree(mGPU->cv_acor); + cudaFree(mGPU->dzn); + cudaFree(mGPU->dewt); + cudaFree(mGPU->dsavedJ); + cudaFree(mGPU->mdv); + cudaFree(mGPU->mdvo); +} \ No newline at end of file diff --git a/src/debug_and_stats/camp_debug_2.c b/src/debug_and_stats/camp_debug_2.c new file mode 100644 index 000000000..387d74351 --- /dev/null +++ b/src/debug_and_stats/camp_debug_2.c @@ -0,0 +1,143 @@ +/* + * ----------------------------------------------------------------- + * Programmer(s): Christian G. Ruiz + * ----------------------------------------------------------------- + * Copyright (C) 2022 Barcelona Supercomputing Center + * SPDX-License-Identifier: MIT + */ + +#include "camp_debug_2.h" +#include +#include +#include +#include +#include "../camp_solver.h" + +#ifdef CAMP_DEBUG_GPU +#ifdef CAMP_USE_MPI +#include +#endif +#endif + +void get_export_state_name(char filename[]){ +#ifdef CAMP_DEBUG_GPU + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + char s_mpirank[64]; + strcpy(filename, "out/"); + sprintf(s_mpirank,"%d",rank); + strcat(filename,s_mpirank); + strcat(filename,"state.csv"); +#endif +} + +void init_export_state(){ +#ifdef CAMP_DEBUG_GPU + char filename[64]; + get_export_state_name(filename); + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + if(rank==0) + printf("export_state enabled\n"); + FILE *fptr; + fptr = fopen(filename,"w"); + fclose(fptr); +#endif +} + +void export_state(SolverData *sd){ +#ifdef CAMP_DEBUG_GPU + ModelData *md = &(sd->model_data); + char filename[64]; + get_export_state_name(filename); + for (int k=0; kn_cells; k++) { + FILE *fptr; + fptr = fopen(filename, "a"); + int len = md->n_per_cell_state_var; + double *x = md->total_state + k * len; + for (int i = 0; i < len; i++) { + fprintf(fptr, "%.17le\n",x[i]); + } + fclose(fptr); + } +#endif +} + +void join_export_state(){ +#ifdef CAMP_DEBUG_GPU + int size; + MPI_Comm_size(MPI_COMM_WORLD, &size); + if(size==1){ + rename("out/0state.csv","out/state.csv"); + return; + } + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + if(rank==0){ + printf("join_export_state start\n"); + const char *outputFileName = "out/state.csv"; + FILE *outputFile = fopen(outputFileName, "w"); + for (int i = 0; i 0) { + fwrite(buffer, 1, bytesRead, outputFile); + } + fclose(inputFile); + remove(inputFileName); + } + fclose(outputFile); + } + MPI_Barrier(MPI_COMM_WORLD); +#endif +} + +void init_export_stats(){ +#ifdef CAMP_DEBUG_GPU + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + char file_path[]="out/stats.csv"; + if(rank==0){ + printf("export_stats enabled\n"); + FILE *fptr; + fptr = fopen(file_path,"w"); + fprintf(fptr, "timecvStep,timeCVode\n"); + fclose(fptr); + } +#endif +} + +void export_stats(SolverData *sd){ +#ifdef CAMP_DEBUG_GPU + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + if (rank == 0) { + FILE *fptr; + fptr = fopen("out/stats.csv", "a"); + CVodeMem cv_mem = (CVodeMem) sd->cvode_mem; + fprintf(fptr, "%.17le,",cv_mem->timecvStep); + fprintf(fptr, "%.17le",sd->timeCVode); + fprintf(fptr, "\n"); + fclose(fptr); + } +#endif +} + +void print_double(double *x, int len, const char *s){ +#ifdef USE_PRINT_ARRAYS + for (int i=0; in_rxn; - - // Loop through the reactions advancing the rxn_data pointer each time - for (int i_rxn = 0; i_rxn < n_rxn; i_rxn++) { - // Get pointers to the reaction data - int *rxn_int_data = - &(model_data->rxn_int_data[model_data->rxn_int_indices[i_rxn]]); - double *rxn_float_data = - &(model_data->rxn_float_data[model_data->rxn_float_indices[i_rxn]]); - double *rxn_env_data = - &(model_data->grid_cell_rxn_env_data[model_data->rxn_env_idx[i_rxn]]); - - // Get the reaction type - int rxn_type = *(rxn_int_data++); - - // Call the appropriate function - switch (rxn_type) { - case RXN_HL_PHASE_TRANSFER: - rxn_HL_phase_transfer_calc_deriv_contrib(model_data, time_deriv, - rxn_int_data, rxn_float_data, - rxn_env_data, time_step); - break; - case RXN_SIMPOL_PHASE_TRANSFER: - rxn_SIMPOL_phase_transfer_calc_deriv_contrib( - model_data, time_deriv, rxn_int_data, rxn_float_data, rxn_env_data, - time_step); - break; - } - } -} -#endif - /** \brief Calculate the Jacobian * * \param model_data Pointer to the model data @@ -653,8 +609,6 @@ void rxn_calc_jac_specific_types(ModelData *model_data, Jacobian jac, * \param float_param Pointer to floating-point parameter array * \param solver_data Pointer to solver data */ -// TODO: question: move n_added_rxns out of struct to function parameter since -// is only used in this function void rxn_add_condensed_data(int rxn_type, int n_int_param, int n_float_param, int n_env_param, int *int_param, double *float_param, void *solver_data) { diff --git a/src/rxn_solver.h b/src/rxn_solver.h index 3ad8a0889..311818d46 100644 --- a/src/rxn_solver.h +++ b/src/rxn_solver.h @@ -12,6 +12,7 @@ #define RXN_SOLVER_H #include "Jacobian.h" #include "camp_common.h" +#include "debug_and_stats/camp_debug_2.h" /** Public reaction functions **/ @@ -25,8 +26,6 @@ void rxn_print_data(void *solver_data); #ifdef CAMP_USE_SUNDIALS void rxn_calc_deriv(ModelData *model_data, TimeDerivative time_deriv, double time_step); -void rxn_calc_deriv_specific_types(ModelData *model_data, - TimeDerivative time_deriv, double time_step); void rxn_calc_jac(ModelData *model_data, Jacobian jac, double time_step); void rxn_calc_jac_specific_types(ModelData *model_data, Jacobian jac, double time_step); diff --git a/src/rxns.h b/src/rxns.h index 69ada0cbb..c1af29d3f 100644 --- a/src/rxns.h +++ b/src/rxns.h @@ -15,6 +15,7 @@ #define RXNS_H_ #include "Jacobian.h" #include "camp_common.h" +#include "debug_and_stats/camp_debug_2.h" // aqueous_equilibrium void rxn_aqueous_equilibrium_get_used_jac_elem(int *rxn_int_data, diff --git a/src/rxns/rxn_arrhenius.c b/src/rxns/rxn_arrhenius.c index 9cb877b8f..79bbe3905 100644 --- a/src/rxns/rxn_arrhenius.c +++ b/src/rxns/rxn_arrhenius.c @@ -160,7 +160,6 @@ void rxn_arrhenius_calc_deriv_contrib(ModelData *model_data, } } } - return; } #endif @@ -187,7 +186,7 @@ void rxn_arrhenius_calc_jac_contrib(ModelData *model_data, Jacobian jac, int i_elem = 0; for (int i_ind = 0; i_ind < NUM_REACT_; i_ind++) { // Calculate d_rate / d_i_ind - realtype rate = RATE_CONSTANT_; + long double rate = RATE_CONSTANT_; for (int i_spec = 0; i_spec < NUM_REACT_; i_spec++) if (i_spec != i_ind) rate *= state[REACT_(i_spec)]; diff --git a/src/util.h b/src/util.h index 6e188edf4..7eac64548 100644 --- a/src/util.h +++ b/src/util.h @@ -47,6 +47,9 @@ static inline double mean_speed__m_s(double temperature__K, * @param mw__kg_mol Molecular weight of the gas-phase species [\f$\mbox{kg}\, * \mbox{mol}^{-1}\f$] */ +#ifdef __CUDA_ARCH__ +__device__ +#endif static inline double mean_free_path__m(double diffusion_coeff__m2_s, double temperature__K, double mw__kg_mol) { @@ -66,6 +69,9 @@ static inline double mean_free_path__m(double diffusion_coeff__m2_s, * @param radius__m Particle effective radius [m] * @param alpha Mass accomodation coefficient [unitless] */ +#ifdef __CUDA_ARCH__ +__device__ +#endif static inline double transition_regime_correction_factor( double mean_free_path__m, double radius__m, double alpha) { double K_n = mean_free_path__m / radius__m; @@ -88,6 +94,9 @@ static inline double transition_regime_correction_factor( * @param radius__m Particle effective radius [m] * @param alpha Mass accomodation coefficient [unitless] */ +#ifdef __CUDA_ARCH__ +__device__ +#endif static inline double d_transition_regime_correction_factor_d_radius( double mean_free_path__m, double radius__m, double alpha) { double K_n = mean_free_path__m / radius__m; @@ -126,6 +135,9 @@ static inline double d_transition_regime_correction_factor_d_radius( * @param radius__m Particle radius [m] * @param alpha Mass accomodation coefficient [unitless] */ +#ifdef __CUDA_ARCH__ +__device__ +#endif static inline double gas_aerosol_transition_rxn_rate_constant( double diffusion_coeff__m2_s, double mean_free_path__m, double radius__m, double alpha) { @@ -151,6 +163,9 @@ static inline double gas_aerosol_transition_rxn_rate_constant( * @param radius__m Particle radius [m] * @param alpha Mass accomodation coefficient [unitless] */ +#ifdef __CUDA_ARCH__ +__device__ +#endif static inline double d_gas_aerosol_transition_rxn_rate_constant_d_radius( double diffusion_coeff__m2_s, double mean_free_path__m, double radius__m, double alpha) { diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5.map b/test/chemistry/cb05cl_ae5/cb05cl_ae5.map index bfee1c079..9aa67b04a 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5.map +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5.map @@ -14,7 +14,7 @@ ! ! File : cb05cl_ae5.map ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Function.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Function.F90 similarity index 99% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Function.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Function.F90 index bd831f728..8545398c3 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Function.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Function.F90 @@ -12,9 +12,9 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_Function.f90 +! File : cb05cl_ae5_Function.F90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Global.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Global.F90 similarity index 95% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Global.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Global.F90 index f2ae4de8d..c07d33567 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Global.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Global.F90 @@ -12,9 +12,9 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_Global.f90 +! File : cb05cl_ae5_Global.F90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Initialize.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Initialize.F90 similarity index 97% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Initialize.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Initialize.F90 index 549b926b0..97f613d90 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Initialize.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Initialize.F90 @@ -12,7 +12,7 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_Initialize.f90 +! File : cb05cl_ae5_Initialize.F90 ! Time : Thu Feb 8 11:36:55 2018 ! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Integrator.F90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Integrator.F90 index 25c9c0a64..b30d5df8f 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Integrator.F90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Integrator.F90 @@ -1,7 +1,7 @@ ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -! +! ! Numerical Integrator (Time-Stepping) File -! +! ! Generated by KPP-2.2.3 symbolic chemistry Kinetics PreProcessor ! (http://www.cs.vt.edu/~asandu/Software/KPP) ! KPP is distributed under GPL, the general public licence @@ -11,24 +11,24 @@ ! With important contributions from: ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany -! +! ! File : cb05cl_ae5_Integrator.f90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 -! +! ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -! +! ! INTEGRATE - Integrator routine ! Arguments : ! TIN - Start Time for Integration ! TOUT - End Time for Integration -! +! ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~! @@ -46,11 +46,11 @@ MODULE cb05cl_ae5_Integrator USE cb05cl_ae5_JacobianSP, ONLY: LU_DIAG USE cb05cl_ae5_LinearAlgebra, ONLY: KppDecomp, KppSolve, & Set2zero, WLAMCH - + IMPLICIT NONE PUBLIC SAVE - + !~~~> Statistics on the work performed by the LSODE method INTEGER :: Nfun,Njac,Nstp,Nacc,Nrej,Ndec,Nsol,Nsng INTEGER, PARAMETER :: ifun=1, ijac=2, istp=3, iacc=4, & @@ -102,8 +102,8 @@ SUBROUTINE INTEGRATE( TIN, TOUT, & ICNTRL(5) = 2 ! maximal order - ! If optional parameters are given, and if they are >0, - ! then they overwrite default settings. + ! If optional parameters are given, and if they are >0, + ! then they overwrite default settings. IF (PRESENT(ICNTRL_U)) THEN WHERE(ICNTRL_U(:) > 0) ICNTRL(:) = ICNTRL_U(:) END IF @@ -130,7 +130,7 @@ SUBROUTINE INTEGRATE( TIN, TOUT, & STEPMIN = RSTATUS(ihexit) ! Save last step - + ! if optional parameters are given for output they to return information IF (PRESENT(ISTATUS_U)) ISTATUS_U(:) = ISTATUS(1:20) IF (PRESENT(RSTATUS_U)) RSTATUS_U(:) = RSTATUS(1:20) @@ -156,7 +156,7 @@ SUBROUTINE KppLsode( TIN,TOUT,Y,RelTol,AbsTol, & ! ! Note: For input parameters equal to zero the default values of the ! corresponding variables are used. -!~~~> +!~~~> ! ICNTRL(1) = not used ! ! ICNTRL(2) = 0: AbsTol, RelTol are NVAR-dimensional vectors @@ -209,29 +209,29 @@ SUBROUTINE KppLsode( TIN,TOUT,Y,RelTol,AbsTol, & ITASK = 1 IERR = 1 IOPT = 1 ! 0=no/1=use optional input - + RWORK(1:30) = 0.0d0 IWORK(1:30) = 0 - + IF (ICNTRL(2)==0) THEN ITOL = 4 ! Abs/RelTol are both vectors - ELSE + ELSE ITOL = 1 ! Abs/RelTol are both scalars - END IF - IWORK(6) = ICNTRL(4) ! max number of internal steps + END IF + IWORK(6) = ICNTRL(4) ! max number of internal steps IWORK(5) = ICNTRL(5) ! maximal order MF = 21 !~~~> stiff case, analytic full Jacobian RWORK(5) = RCNTRL(3) ! Hstart - RWORK(6) = RCNTRL(2) ! Hmax - RWORK(7) = RCNTRL(1) ! Hmin + RWORK(6) = RCNTRL(2) ! Hmax + RWORK(7) = RCNTRL(1) ! Hmin CALL DLSODE ( FUN_CHEM, NVAR, Y, TIN, TOUT, ITOL, RelTol, AbsTol, ITASK,& IERR, IOPT, RWORK, LRW, IWORK, LIW, JAC_CHEM, MF) - ISTATUS(1) = IWORK(12) ! Number of function evaluations - ISTATUS(2) = IWORK(13) ! Number of Jacobian evaluations + ISTATUS(1) = IWORK(12) ! Number of function evaluations + ISTATUS(2) = IWORK(13) ! Number of Jacobian evaluations ISTATUS(3) = IWORK(11) ! Number of steps RSTATUS(1) = TOUT ! mz_rs_20050717 @@ -242,370 +242,370 @@ END SUBROUTINE KppLsode !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!DECK DLSODE +!DECK DLSODE SUBROUTINE DLSODE (F, NEQ, Y, T, TOUT, ITOL, RelTol, AbsTol, ITASK, & - ISTATE, IOPT, RWORK, LRW, IWORK, LIW, JAC, MF) - EXTERNAL F, JAC - INTEGER NEQ, ITOL, ITASK, ISTATE, IOPT, LRW, LIW, IWORK(LIW), MF + ISTATE, IOPT, RWORK, LRW, IWORK, LIW, JAC, MF) + EXTERNAL F, JAC + INTEGER NEQ, ITOL, ITASK, ISTATE, IOPT, LRW, LIW, IWORK(LIW), MF REAL(kind=dp) Y(*), T, TOUT, RelTol(*), AbsTol(*), RWORK(LRW) !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!***BEGIN PROLOGUE DLSODE -!***PURPOSE Livermore Solver for Ordinary Differential Equations. -! DLSODE solves the initial-value problem for stiff or -! nonstiff systems of first-order ODE's, -! dy/dt = f(t,y), or, in component form, +!***BEGIN PROLOGUE DLSODE +!***PURPOSE Livermore Solver for Ordinary Differential Equations. +! DLSODE solves the initial-value problem for stiff or +! nonstiff systems of first-order ODE's, +! dy/dt = f(t,y), or, in component form, ! dy(i)/dt = f(i) = f(i,t,y(1),y(2),...,y(N)), i=1,...,N. -!***CATEGORY I1A -!***TYPE REAL(kind=dp) (SLSODE-S, DLSODE-D) -!***KEYWORDS ORDINARY DIFFERENTIAL EQUATIONS, INITIAL VALUE PROBLEM, -! STIFF, NONSTIFF -!***AUTHOR Hindmarsh, Alan C., (LLNL) -! Center for Applied Scientific Computing, L-561 -! Lawrence Livermore National Laboratory -! Livermore, CA 94551. -!***DESCRIPTION -! -! NOTE: The "Usage" and "Arguments" sections treat only a subset of -! available options, in condensed fashion. The options -! covered and the information supplied will support most -! standard uses of DLSODE. -! +!***CATEGORY I1A +!***TYPE REAL(kind=dp) (SLSODE-S, DLSODE-D) +!***KEYWORDS ORDINARY DIFFERENTIAL EQUATIONS, INITIAL VALUE PROBLEM, +! STIFF, NONSTIFF +!***AUTHOR Hindmarsh, Alan C., (LLNL) +! Center for Applied Scientific Computing, L-561 +! Lawrence Livermore National Laboratory +! Livermore, CA 94551. +!***DESCRIPTION +! +! NOTE: The "Usage" and "Arguments" sections treat only a subset of +! available options, in condensed fashion. The options +! covered and the information supplied will support most +! standard uses of DLSODE. +! ! For more sophisticated uses, full details on all options are -! given in the concluding section, headed "Long Description." +! given in the concluding section, headed "Long Description." ! A synopsis of the DLSODE Long Description is provided at the -! beginning of that section; general topics covered are: -! - Elements of the call sequence; optional input and output -! - Optional supplemental routines in the DLSODE package -! - internal COMMON block -! -! *Usage: -! Communication between the user and the DLSODE package, for normal -! situations, is summarized here. This summary describes a subset -! of the available options. See "Long Description" for complete -! details, including optional communication, nonstandard options, -! and instructions for special situations. -! -! A sample program is given in the "Examples" section. -! -! Refer to the argument descriptions for the definitions of the -! quantities that appear in the following sample declarations. -! -! For MF = 10, -! PARAMETER (LRW = 20 + 16*NEQ, LIW = 20) -! For MF = 21 or 22, -! PARAMETER (LRW = 22 + 9*NEQ + NEQ**2, LIW = 20 + NEQ) -! For MF = 24 or 25, -! PARAMETER (LRW = 22 + 10*NEQ + (2*ML+MU)*NEQ, -! * LIW = 20 + NEQ) -! -! EXTERNAL F, JAC -! INTEGER NEQ, ITOL, ITASK, ISTATE, IOPT, LRW, IWORK(LIW), -! * LIW, MF -! REAL(kind=dp) Y(NEQ), T, TOUT, RelTol, AbsTol(ntol), RWORK(LRW) -! -! CALL DLSODE (F, NEQ, Y, T, TOUT, ITOL, RelTol, AbsTol, ITASK, -! * ISTATE, IOPT, RWORK, LRW, IWORK, LIW, JAC, MF) -! -! *Arguments: -! F :EXT Name of subroutine for right-hand-side vector f. -! This name must be declared EXTERNAL in calling -! program. The form of F must be: -! -! SUBROUTINE F (NEQ, T, Y, YDOT) -! INTEGER NEQ -! REAL(kind=dp) T, Y(*), YDOT(*) -! -! The inputs are NEQ, T, Y. F is to set -! -! YDOT(i) = f(i,T,Y(1),Y(2),...,Y(NEQ)), -! i = 1, ..., NEQ . -! -! NEQ :IN Number of first-order ODE's. -! -! Y :INOUT Array of values of the y(t) vector, of length NEQ. -! Input: For the first call, Y should contain the -! values of y(t) at t = T. (Y is an input -! variable only if ISTATE = 1.) -! Output: On return, Y will contain the values at the -! new t-value. -! -! T :INOUT Value of the independent variable. On return it -! will be the current value of t (normally TOUT). -! -! TOUT :IN Next point where output is desired (.NE. T). -! -! ITOL :IN 1 or 2 according as AbsTol (below) is a scalar or -! an array. -! -! RelTol :IN Relative tolerance parameter (scalar). -! -! AbsTol :IN Absolute tolerance parameter (scalar or array). -! If ITOL = 1, AbsTol need not be dimensioned. -! If ITOL = 2, AbsTol must be dimensioned at least NEQ. -! +! beginning of that section; general topics covered are: +! - Elements of the call sequence; optional input and output +! - Optional supplemental routines in the DLSODE package +! - internal COMMON block +! +! *Usage: +! Communication between the user and the DLSODE package, for normal +! situations, is summarized here. This summary describes a subset +! of the available options. See "Long Description" for complete +! details, including optional communication, nonstandard options, +! and instructions for special situations. +! +! A sample program is given in the "Examples" section. +! +! Refer to the argument descriptions for the definitions of the +! quantities that appear in the following sample declarations. +! +! For MF = 10, +! PARAMETER (LRW = 20 + 16*NEQ, LIW = 20) +! For MF = 21 or 22, +! PARAMETER (LRW = 22 + 9*NEQ + NEQ**2, LIW = 20 + NEQ) +! For MF = 24 or 25, +! PARAMETER (LRW = 22 + 10*NEQ + (2*ML+MU)*NEQ, +! * LIW = 20 + NEQ) +! +! EXTERNAL F, JAC +! INTEGER NEQ, ITOL, ITASK, ISTATE, IOPT, LRW, IWORK(LIW), +! * LIW, MF +! REAL(kind=dp) Y(NEQ), T, TOUT, RelTol, AbsTol(ntol), RWORK(LRW) +! +! CALL DLSODE (F, NEQ, Y, T, TOUT, ITOL, RelTol, AbsTol, ITASK, +! * ISTATE, IOPT, RWORK, LRW, IWORK, LIW, JAC, MF) +! +! *Arguments: +! F :EXT Name of subroutine for right-hand-side vector f. +! This name must be declared EXTERNAL in calling +! program. The form of F must be: +! +! SUBROUTINE F (NEQ, T, Y, YDOT) +! INTEGER NEQ +! REAL(kind=dp) T, Y(*), YDOT(*) +! +! The inputs are NEQ, T, Y. F is to set +! +! YDOT(i) = f(i,T,Y(1),Y(2),...,Y(NEQ)), +! i = 1, ..., NEQ . +! +! NEQ :IN Number of first-order ODE's. +! +! Y :INOUT Array of values of the y(t) vector, of length NEQ. +! Input: For the first call, Y should contain the +! values of y(t) at t = T. (Y is an input +! variable only if ISTATE = 1.) +! Output: On return, Y will contain the values at the +! new t-value. +! +! T :INOUT Value of the independent variable. On return it +! will be the current value of t (normally TOUT). +! +! TOUT :IN Next point where output is desired (.NE. T). +! +! ITOL :IN 1 or 2 according as AbsTol (below) is a scalar or +! an array. +! +! RelTol :IN Relative tolerance parameter (scalar). +! +! AbsTol :IN Absolute tolerance parameter (scalar or array). +! If ITOL = 1, AbsTol need not be dimensioned. +! If ITOL = 2, AbsTol must be dimensioned at least NEQ. +! ! The estimated local error in Y(i) will be controlled -! so as to be roughly less (in magnitude) than -! -! EWT(i) = RelTol*ABS(Y(i)) + AbsTol if ITOL = 1, or -! EWT(i) = RelTol*ABS(Y(i)) + AbsTol(i) if ITOL = 2. -! -! Thus the local error test passes if, in each -! component, either the absolute error is less than -! AbsTol (or AbsTol(i)), or the relative error is less -! than RelTol. -! -! Use RelTol = 0.0 for pure absolute error control, and -! use AbsTol = 0.0 (or AbsTol(i) = 0.0) for pure relative +! so as to be roughly less (in magnitude) than +! +! EWT(i) = RelTol*ABS(Y(i)) + AbsTol if ITOL = 1, or +! EWT(i) = RelTol*ABS(Y(i)) + AbsTol(i) if ITOL = 2. +! +! Thus the local error test passes if, in each +! component, either the absolute error is less than +! AbsTol (or AbsTol(i)), or the relative error is less +! than RelTol. +! +! Use RelTol = 0.0 for pure absolute error control, and +! use AbsTol = 0.0 (or AbsTol(i) = 0.0) for pure relative ! error control. Caution: Actual (global) errors may -! exceed these local tolerances, so choose them -! conservatively. -! -! ITASK :IN Flag indicating the task DLSODE is to perform. -! Use ITASK = 1 for normal computation of output -! values of y at t = TOUT. -! +! exceed these local tolerances, so choose them +! conservatively. +! +! ITASK :IN Flag indicating the task DLSODE is to perform. +! Use ITASK = 1 for normal computation of output +! values of y at t = TOUT. +! ! ISTATE:INOUT Index used for input and output to specify the state -! of the calculation. -! Input: -! 1 This is the first call for a problem. -! 2 This is a subsequent call. -! Output: -! 1 Nothing was done, because TOUT was equal to T. -! 2 DLSODE was successful (otherwise, negative). -! Note that ISTATE need not be modified after a -! successful return. -! -1 Excess work done on this call (perhaps wrong -! MF). -! -2 Excess accuracy requested (tolerances too -! small). -! -3 Illegal input detected (see printed message). -! -4 Repeated error test failures (check all -! inputs). -! -5 Repeated convergence failures (perhaps bad -! Jacobian supplied or wrong choice of MF or -! tolerances). -! -6 Error weight became zero during problem -! (solution component i vanished, and AbsTol or -! AbsTol(i) = 0.). -! -! IOPT :IN Flag indicating whether optional inputs are used: -! 0 No. -! 1 Yes. (See "Optional inputs" under "Long -! Description," Part 1.) -! -! RWORK :WORK Real work array of length at least: -! 20 + 16*NEQ for MF = 10, -! 22 + 9*NEQ + NEQ**2 for MF = 21 or 22, -! 22 + 10*NEQ + (2*ML + MU)*NEQ for MF = 24 or 25. -! -! LRW :IN Declared length of RWORK (in user's DIMENSION -! statement). -! -! IWORK :WORK Integer work array of length at least: -! 20 for MF = 10, -! 20 + NEQ for MF = 21, 22, 24, or 25. -! -! If MF = 24 or 25, input in IWORK(1),IWORK(2) the -! lower and upper Jacobian half-bandwidths ML,MU. -! -! On return, IWORK contains information that may be -! of interest to the user: -! -! Name Location Meaning +! of the calculation. +! Input: +! 1 This is the first call for a problem. +! 2 This is a subsequent call. +! Output: +! 1 Nothing was done, because TOUT was equal to T. +! 2 DLSODE was successful (otherwise, negative). +! Note that ISTATE need not be modified after a +! successful return. +! -1 Excess work done on this call (perhaps wrong +! MF). +! -2 Excess accuracy requested (tolerances too +! small). +! -3 Illegal input detected (see printed message). +! -4 Repeated error test failures (check all +! inputs). +! -5 Repeated convergence failures (perhaps bad +! Jacobian supplied or wrong choice of MF or +! tolerances). +! -6 Error weight became zero during problem +! (solution component i vanished, and AbsTol or +! AbsTol(i) = 0.). +! +! IOPT :IN Flag indicating whether optional inputs are used: +! 0 No. +! 1 Yes. (See "Optional inputs" under "Long +! Description," Part 1.) +! +! RWORK :WORK Real work array of length at least: +! 20 + 16*NEQ for MF = 10, +! 22 + 9*NEQ + NEQ**2 for MF = 21 or 22, +! 22 + 10*NEQ + (2*ML + MU)*NEQ for MF = 24 or 25. +! +! LRW :IN Declared length of RWORK (in user's DIMENSION +! statement). +! +! IWORK :WORK Integer work array of length at least: +! 20 for MF = 10, +! 20 + NEQ for MF = 21, 22, 24, or 25. +! +! If MF = 24 or 25, input in IWORK(1),IWORK(2) the +! lower and upper Jacobian half-bandwidths ML,MU. +! +! On return, IWORK contains information that may be +! of interest to the user: +! +! Name Location Meaning ! ----- --------- ----------------------------------------- -! NST IWORK(11) Number of steps taken for the problem so -! far. -! NFE IWORK(12) Number of f evaluations for the problem -! so far. -! NJE IWORK(13) Number of Jacobian evaluations (and of +! NST IWORK(11) Number of steps taken for the problem so +! far. +! NFE IWORK(12) Number of f evaluations for the problem +! so far. +! NJE IWORK(13) Number of Jacobian evaluations (and of ! matrix LU decompositions) for the problem -! so far. -! NQU IWORK(14) Method order last used (successfully). -! LENRW IWORK(17) Length of RWORK actually required. This -! is defined on normal returns and on an -! illegal input return for insufficient -! storage. -! LENIW IWORK(18) Length of IWORK actually required. This -! is defined on normal returns and on an -! illegal input return for insufficient -! storage. -! -! LIW :IN Declared length of IWORK (in user's DIMENSION -! statement). -! -! JAC :EXT Name of subroutine for Jacobian matrix (MF = -! 21 or 24). If used, this name must be declared -! EXTERNAL in calling program. If not used, pass a -! dummy name. The form of JAC must be: -! -! SUBROUTINE JAC (NEQ, T, Y, ML, MU, PD, NROWPD) -! INTEGER NEQ, ML, MU, NROWPD -! REAL(kind=dp) T, Y(*), PD(NROWPD,*) -! -! See item c, under "Description" below for more -! information about JAC. -! -! MF :IN Method flag. Standard values are: -! 10 Nonstiff (Adams) method, no Jacobian used. +! so far. +! NQU IWORK(14) Method order last used (successfully). +! LENRW IWORK(17) Length of RWORK actually required. This +! is defined on normal returns and on an +! illegal input return for insufficient +! storage. +! LENIW IWORK(18) Length of IWORK actually required. This +! is defined on normal returns and on an +! illegal input return for insufficient +! storage. +! +! LIW :IN Declared length of IWORK (in user's DIMENSION +! statement). +! +! JAC :EXT Name of subroutine for Jacobian matrix (MF = +! 21 or 24). If used, this name must be declared +! EXTERNAL in calling program. If not used, pass a +! dummy name. The form of JAC must be: +! +! SUBROUTINE JAC (NEQ, T, Y, ML, MU, PD, NROWPD) +! INTEGER NEQ, ML, MU, NROWPD +! REAL(kind=dp) T, Y(*), PD(NROWPD,*) +! +! See item c, under "Description" below for more +! information about JAC. +! +! MF :IN Method flag. Standard values are: +! 10 Nonstiff (Adams) method, no Jacobian used. ! 21 Stiff (BDF) method, user-supplied full Jacobian. -! 22 Stiff method, internally generated full -! Jacobian. -! 24 Stiff method, user-supplied banded Jacobian. -! 25 Stiff method, internally generated banded -! Jacobian. -! -! *Description: -! DLSODE solves the initial value problem for stiff or nonstiff -! systems of first-order ODE's, -! -! dy/dt = f(t,y) , -! -! or, in component form, -! -! dy(i)/dt = f(i) = f(i,t,y(1),y(2),...,y(NEQ)) -! (i = 1, ..., NEQ) . -! -! DLSODE is a package based on the GEAR and GEARB packages, and on -! the October 23, 1978, version of the tentative ODEPACK user -! interface standard, with minor modifications. -! -! The steps in solving such a problem are as follows. -! -! a. First write a subroutine of the form -! -! SUBROUTINE F (NEQ, T, Y, YDOT) -! INTEGER NEQ -! REAL(kind=dp) T, Y(*), YDOT(*) -! -! which supplies the vector function f by loading YDOT(i) with -! f(i). -! -! b. Next determine (or guess) whether or not the problem is stiff. -! Stiffness occurs when the Jacobian matrix df/dy has an -! eigenvalue whose real part is negative and large in magnitude -! compared to the reciprocal of the t span of interest. If the -! problem is nonstiff, use method flag MF = 10. If it is stiff, +! 22 Stiff method, internally generated full +! Jacobian. +! 24 Stiff method, user-supplied banded Jacobian. +! 25 Stiff method, internally generated banded +! Jacobian. +! +! *Description: +! DLSODE solves the initial value problem for stiff or nonstiff +! systems of first-order ODE's, +! +! dy/dt = f(t,y) , +! +! or, in component form, +! +! dy(i)/dt = f(i) = f(i,t,y(1),y(2),...,y(NEQ)) +! (i = 1, ..., NEQ) . +! +! DLSODE is a package based on the GEAR and GEARB packages, and on +! the October 23, 1978, version of the tentative ODEPACK user +! interface standard, with minor modifications. +! +! The steps in solving such a problem are as follows. +! +! a. First write a subroutine of the form +! +! SUBROUTINE F (NEQ, T, Y, YDOT) +! INTEGER NEQ +! REAL(kind=dp) T, Y(*), YDOT(*) +! +! which supplies the vector function f by loading YDOT(i) with +! f(i). +! +! b. Next determine (or guess) whether or not the problem is stiff. +! Stiffness occurs when the Jacobian matrix df/dy has an +! eigenvalue whose real part is negative and large in magnitude +! compared to the reciprocal of the t span of interest. If the +! problem is nonstiff, use method flag MF = 10. If it is stiff, ! there are four standard choices for MF, and DLSODE requires the -! Jacobian matrix in some form. This matrix is regarded either -! as full (MF = 21 or 22), or banded (MF = 24 or 25). In the -! banded case, DLSODE requires two half-bandwidth parameters ML -! and MU. These are, respectively, the widths of the lower and +! Jacobian matrix in some form. This matrix is regarded either +! as full (MF = 21 or 22), or banded (MF = 24 or 25). In the +! banded case, DLSODE requires two half-bandwidth parameters ML +! and MU. These are, respectively, the widths of the lower and ! upper parts of the band, excluding the main diagonal. Thus the -! band consists of the locations (i,j) with -! -! i - ML <= j <= i + MU , -! -! and the full bandwidth is ML + MU + 1 . -! -! c. If the problem is stiff, you are encouraged to supply the +! band consists of the locations (i,j) with +! +! i - ML <= j <= i + MU , +! +! and the full bandwidth is ML + MU + 1 . +! +! c. If the problem is stiff, you are encouraged to supply the ! Jacobian directly (MF = 21 or 24), but if this is not feasible, ! DLSODE will compute it internally by difference quotients (MF = -! 22 or 25). If you are supplying the Jacobian, write a -! subroutine of the form -! -! SUBROUTINE JAC (NEQ, T, Y, ML, MU, PD, NROWPD) -! INTEGER NEQ, ML, MU, NRWOPD -! REAL(kind=dp) T, Y(*), PD(NROWPD,*) -! -! which provides df/dy by loading PD as follows: +! 22 or 25). If you are supplying the Jacobian, write a +! subroutine of the form +! +! SUBROUTINE JAC (NEQ, T, Y, ML, MU, PD, NROWPD) +! INTEGER NEQ, ML, MU, NRWOPD +! REAL(kind=dp) T, Y(*), PD(NROWPD,*) +! +! which provides df/dy by loading PD as follows: ! - For a full Jacobian (MF = 21), load PD(i,j) with df(i)/dy(j), ! the partial derivative of f(i) with respect to y(j). (Ignore -! the ML and MU arguments in this case.) -! - For a banded Jacobian (MF = 24), load PD(i-j+MU+1,j) with -! df(i)/dy(j); i.e., load the diagonal lines of df/dy into the -! rows of PD from the top down. -! - In either case, only nonzero elements need be loaded. -! +! the ML and MU arguments in this case.) +! - For a banded Jacobian (MF = 24), load PD(i-j+MU+1,j) with +! df(i)/dy(j); i.e., load the diagonal lines of df/dy into the +! rows of PD from the top down. +! - In either case, only nonzero elements need be loaded. +! ! d. Write a main program that calls subroutine DLSODE once for each -! point at which answers are desired. This should also provide +! point at which answers are desired. This should also provide ! for possible use of logical unit 6 for output of error messages -! by DLSODE. -! +! by DLSODE. +! ! Before the first call to DLSODE, set ISTATE = 1, set Y and T to ! the initial values, and set TOUT to the first output point. To -! continue the integration after a successful return, simply -! reset TOUT and call DLSODE again. No other parameters need be -! reset. -! -! *Examples: -! The following is a simple example problem, with the coding needed +! continue the integration after a successful return, simply +! reset TOUT and call DLSODE again. No other parameters need be +! reset. +! +! *Examples: +! The following is a simple example problem, with the coding needed ! for its solution by DLSODE. The problem is from chemical kinetics, -! and consists of the following three rate equations: -! -! dy1/dt = -.04*y1 + 1.E4*y2*y3 -! dy2/dt = .04*y1 - 1.E4*y2*y3 - 3.E7*y2**2 -! dy3/dt = 3.E7*y2**2 -! +! and consists of the following three rate equations: +! +! dy1/dt = -.04*y1 + 1.E4*y2*y3 +! dy2/dt = .04*y1 - 1.E4*y2*y3 - 3.E7*y2**2 +! dy3/dt = 3.E7*y2**2 +! ! on the interval from t = 0.0 to t = 4.E10, with initial conditions -! y1 = 1.0, y2 = y3 = 0. The problem is stiff. -! -! The following coding solves this problem with DLSODE, using -! MF = 21 and printing results at t = .4, 4., ..., 4.E10. It uses +! y1 = 1.0, y2 = y3 = 0. The problem is stiff. +! +! The following coding solves this problem with DLSODE, using +! MF = 21 and printing results at t = .4, 4., ..., 4.E10. It uses ! ITOL = 2 and AbsTol much smaller for y2 than for y1 or y3 because y2 -! has much smaller values. At the end of the run, statistical -! quantities of interest are printed. -! -! EXTERNAL FEX, JEX -! INTEGER IOPT, IOUT, ISTATE, ITASK, ITOL, IWORK(23), LIW, LRW, -! * MF, NEQ -! REAL(kind=dp) AbsTol(3), RelTol, RWORK(58), T, TOUT, Y(3) -! NEQ = 3 -! Y(1) = 1.D0 -! Y(2) = 0.D0 -! Y(3) = 0.D0 -! T = 0.D0 -! TOUT = .4D0 -! ITOL = 2 -! RelTol = 1.D-4 -! AbsTol(1) = 1.D-6 -! AbsTol(2) = 1.D-10 -! AbsTol(3) = 1.D-6 -! ITASK = 1 -! ISTATE = 1 -! IOPT = 0 -! LRW = 58 -! LIW = 23 -! MF = 21 -! DO 40 IOUT = 1,12 -! CALL DLSODE (FEX, NEQ, Y, T, TOUT, ITOL, RelTol, AbsTol, ITASK, -! * ISTATE, IOPT, RWORK, LRW, IWORK, LIW, JEX, MF) -! WRITE(6,20) T, Y(1), Y(2), Y(3) -! 20 FORMAT(' At t =',D12.4,' y =',3D14.6) -! IF (ISTATE .LT. 0) GO TO 80 -! 40 TOUT = TOUT*10.D0 -! WRITE(6,60) IWORK(11), IWORK(12), IWORK(13) -! 60 FORMAT(/' No. steps =',i4,', No. f-s =',i4,', No. J-s =',i4) -! STOP -! 80 WRITE(6,90) ISTATE -! 90 FORMAT(///' Error halt.. ISTATE =',I3) -! STOP -! END -! -! SUBROUTINE FEX (NEQ, T, Y, YDOT) -! INTEGER NEQ -! REAL(kind=dp) T, Y(3), YDOT(3) -! YDOT(1) = -.04D0*Y(1) + 1.D4*Y(2)*Y(3) -! YDOT(3) = 3.D7*Y(2)*Y(2) -! YDOT(2) = -YDOT(1) - YDOT(3) -! RETURN -! END -! -! SUBROUTINE JEX (NEQ, T, Y, ML, MU, PD, NRPD) -! INTEGER NEQ, ML, MU, NRPD -! REAL(kind=dp) T, Y(3), PD(NRPD,3) -! PD(1,1) = -.04D0 -! PD(1,2) = 1.D4*Y(3) -! PD(1,3) = 1.D4*Y(2) -! PD(2,1) = .04D0 -! PD(2,3) = -PD(1,3) -! PD(3,2) = 6.D7*Y(2) -! PD(2,2) = -PD(1,2) - PD(3,2) -! RETURN -! END -! -! The output from this program (on a Cray-1 in single precision) -! is as follows. -! +! has much smaller values. At the end of the run, statistical +! quantities of interest are printed. +! +! EXTERNAL FEX, JEX +! INTEGER IOPT, IOUT, ISTATE, ITASK, ITOL, IWORK(23), LIW, LRW, +! * MF, NEQ +! REAL(kind=dp) AbsTol(3), RelTol, RWORK(58), T, TOUT, Y(3) +! NEQ = 3 +! Y(1) = 1.D0 +! Y(2) = 0.D0 +! Y(3) = 0.D0 +! T = 0.D0 +! TOUT = .4D0 +! ITOL = 2 +! RelTol = 1.D-4 +! AbsTol(1) = 1.D-6 +! AbsTol(2) = 1.D-10 +! AbsTol(3) = 1.D-6 +! ITASK = 1 +! ISTATE = 1 +! IOPT = 0 +! LRW = 58 +! LIW = 23 +! MF = 21 +! DO 40 IOUT = 1,12 +! CALL DLSODE (FEX, NEQ, Y, T, TOUT, ITOL, RelTol, AbsTol, ITASK, +! * ISTATE, IOPT, RWORK, LRW, IWORK, LIW, JEX, MF) +! WRITE(6,20) T, Y(1), Y(2), Y(3) +! 20 FORMAT(' At t =',D12.4,' y =',3D14.6) +! IF (ISTATE .LT. 0) GO TO 80 +! 40 TOUT = TOUT*10.D0 +! WRITE(6,60) IWORK(11), IWORK(12), IWORK(13) +! 60 FORMAT(/' No. steps =',i4,', No. f-s =',i4,', No. J-s =',i4) +! STOP +! 80 WRITE(6,90) ISTATE +! 90 FORMAT(///' Error halt.. ISTATE =',I3) +! STOP +! END +! +! SUBROUTINE FEX (NEQ, T, Y, YDOT) +! INTEGER NEQ +! REAL(kind=dp) T, Y(3), YDOT(3) +! YDOT(1) = -.04D0*Y(1) + 1.D4*Y(2)*Y(3) +! YDOT(3) = 3.D7*Y(2)*Y(2) +! YDOT(2) = -YDOT(1) - YDOT(3) +! RETURN +! END +! +! SUBROUTINE JEX (NEQ, T, Y, ML, MU, PD, NRPD) +! INTEGER NEQ, ML, MU, NRPD +! REAL(kind=dp) T, Y(3), PD(NRPD,3) +! PD(1,1) = -.04D0 +! PD(1,2) = 1.D4*Y(3) +! PD(1,3) = 1.D4*Y(2) +! PD(2,1) = .04D0 +! PD(2,3) = -PD(1,3) +! PD(3,2) = 6.D7*Y(2) +! PD(2,2) = -PD(1,2) - PD(3,2) +! RETURN +! END +! +! The output from this program (on a Cray-1 in single precision) +! is as follows. +! ! At t = 4.0000e-01 y = 9.851726e-01 3.386406e-05 1.479357e-02 ! At t = 4.0000e+00 y = 9.055142e-01 2.240418e-05 9.446344e-02 ! At t = 4.0000e+01 y = 7.158050e-01 9.184616e-06 2.841858e-01 @@ -618,2775 +618,2775 @@ SUBROUTINE DLSODE (F, NEQ, Y, T, TOUT, ITOL, RelTol, AbsTol, ITASK, & ! At t = 4.0000e+08 y = 5.494530e-06 2.197825e-11 9.999945e-01 ! At t = 4.0000e+09 y = 5.129458e-07 2.051784e-12 9.999995e-01 ! At t = 4.0000e+10 y = -7.170603e-08 -2.868241e-13 1.000000e+00 -! -! No. steps = 330, No. f-s = 405, No. J-s = 69 -! -! *Accuracy: -! The accuracy of the solution depends on the choice of tolerances -! RelTol and AbsTol. Actual (global) errors may exceed these local -! tolerances, so choose them conservatively. -! -! *Cautions: -! The work arrays should not be altered between calls to DLSODE for +! +! No. steps = 330, No. f-s = 405, No. J-s = 69 +! +! *Accuracy: +! The accuracy of the solution depends on the choice of tolerances +! RelTol and AbsTol. Actual (global) errors may exceed these local +! tolerances, so choose them conservatively. +! +! *Cautions: +! The work arrays should not be altered between calls to DLSODE for ! the same problem, except possibly for the conditional and optional -! inputs. -! -! *Portability: -! Since NEQ is dimensioned inside DLSODE, some compilers may object -! to a call to DLSODE with NEQ a scalar variable. In this event, -! use DIMENSION NEQ. Similar remarks apply to RelTol and AbsTol. -! -! Note to Cray users: -! For maximum efficiency, use the CFT77 compiler. Appropriate -! compiler optimization directives have been inserted for CFT77. -! -! *Reference: -! Alan C. Hindmarsh, "ODEPACK, A Systematized Collection of ODE -! Solvers," in Scientific Computing, R. S. Stepleman, et al., Eds. -! (North-Holland, Amsterdam, 1983), pp. 55-64. -! -! *Long Description: -! The following complete description of the user interface to -! DLSODE consists of four parts: -! -! 1. The call sequence to subroutine DLSODE, which is a driver -! routine for the solver. This includes descriptions of both -! the call sequence arguments and user-supplied routines. -! Following these descriptions is a description of optional -! inputs available through the call sequence, and then a -! description of optional outputs in the work arrays. -! -! 2. Descriptions of other routines in the DLSODE package that may +! inputs. +! +! *Portability: +! Since NEQ is dimensioned inside DLSODE, some compilers may object +! to a call to DLSODE with NEQ a scalar variable. In this event, +! use DIMENSION NEQ. Similar remarks apply to RelTol and AbsTol. +! +! Note to Cray users: +! For maximum efficiency, use the CFT77 compiler. Appropriate +! compiler optimization directives have been inserted for CFT77. +! +! *Reference: +! Alan C. Hindmarsh, "ODEPACK, A Systematized Collection of ODE +! Solvers," in Scientific Computing, R. S. Stepleman, et al., Eds. +! (North-Holland, Amsterdam, 1983), pp. 55-64. +! +! *Long Description: +! The following complete description of the user interface to +! DLSODE consists of four parts: +! +! 1. The call sequence to subroutine DLSODE, which is a driver +! routine for the solver. This includes descriptions of both +! the call sequence arguments and user-supplied routines. +! Following these descriptions is a description of optional +! inputs available through the call sequence, and then a +! description of optional outputs in the work arrays. +! +! 2. Descriptions of other routines in the DLSODE package that may ! be (optionally) called by the user. These provide the ability ! to alter error message handling, save and restore the internal ! COMMON, and obtain specified derivatives of the solution y(t). -! -! 3. Descriptions of COMMON block to be declared in overlay or -! similar environments, or to be saved when doing an interrupt -! of the problem and continued solution later. -! -! 4. Description of two routines in the DLSODE package, either of -! which the user may replace with his own version, if desired. -! These relate to the measurement of errors. -! -! -! Part 1. Call Sequence -! ---------------------- -! -! Arguments -! --------- -! The call sequence parameters used for input only are -! +! +! 3. Descriptions of COMMON block to be declared in overlay or +! similar environments, or to be saved when doing an interrupt +! of the problem and continued solution later. +! +! 4. Description of two routines in the DLSODE package, either of +! which the user may replace with his own version, if desired. +! These relate to the measurement of errors. +! +! +! Part 1. Call Sequence +! ---------------------- +! +! Arguments +! --------- +! The call sequence parameters used for input only are +! ! F, NEQ, TOUT, ITOL, RelTol, AbsTol, ITASK, IOPT, LRW, LIW, JAC, MF, -! -! and those used for both input and output are -! -! Y, T, ISTATE. -! -! The work arrays RWORK and IWORK are also used for conditional and -! optional inputs and optional outputs. (The term output here -! refers to the return from subroutine DLSODE to the user's calling -! program.) -! +! +! and those used for both input and output are +! +! Y, T, ISTATE. +! +! The work arrays RWORK and IWORK are also used for conditional and +! optional inputs and optional outputs. (The term output here +! refers to the return from subroutine DLSODE to the user's calling +! program.) +! ! The legality of input parameters will be thoroughly checked on the -! initial call for the problem, but not checked thereafter unless a -! change in input parameters is flagged by ISTATE = 3 on input. -! -! The descriptions of the call arguments are as follows. -! +! initial call for the problem, but not checked thereafter unless a +! change in input parameters is flagged by ISTATE = 3 on input. +! +! The descriptions of the call arguments are as follows. +! ! F The name of the user-supplied subroutine defining the ODE -! system. The system must be put in the first-order form -! dy/dt = f(t,y), where f is a vector-valued function of +! system. The system must be put in the first-order form +! dy/dt = f(t,y), where f is a vector-valued function of ! the scalar t and the vector y. Subroutine F is to compute -! the function f. It is to have the form -! -! SUBROUTINE F (NEQ, T, Y, YDOT) -! REAL(kind=dp) T, Y(*), YDOT(*) -! -! where NEQ, T, and Y are input, and the array YDOT = -! f(T,Y) is output. Y and YDOT are arrays of length NEQ. +! the function f. It is to have the form +! +! SUBROUTINE F (NEQ, T, Y, YDOT) +! REAL(kind=dp) T, Y(*), YDOT(*) +! +! where NEQ, T, and Y are input, and the array YDOT = +! f(T,Y) is output. Y and YDOT are arrays of length NEQ. ! Subroutine F should not alter Y(1),...,Y(NEQ). F must be -! declared EXTERNAL in the calling program. -! -! Subroutine F may access user-defined quantities in -! NEQ(2),... and/or in Y(NEQ+1),..., if NEQ is an array -! (dimensioned in F) and/or Y has length exceeding NEQ. -! See the descriptions of NEQ and Y below. -! -! If quantities computed in the F routine are needed -! externally to DLSODE, an extra call to F should be made -! for this purpose, for consistent and accurate results. -! If only the derivative dy/dt is needed, use DINTDY -! instead. -! -! NEQ The size of the ODE system (number of first-order -! ordinary differential equations). Used only for input. -! NEQ may be decreased, but not increased, during the +! declared EXTERNAL in the calling program. +! +! Subroutine F may access user-defined quantities in +! NEQ(2),... and/or in Y(NEQ+1),..., if NEQ is an array +! (dimensioned in F) and/or Y has length exceeding NEQ. +! See the descriptions of NEQ and Y below. +! +! If quantities computed in the F routine are needed +! externally to DLSODE, an extra call to F should be made +! for this purpose, for consistent and accurate results. +! If only the derivative dy/dt is needed, use DINTDY +! instead. +! +! NEQ The size of the ODE system (number of first-order +! ordinary differential equations). Used only for input. +! NEQ may be decreased, but not increased, during the ! problem. If NEQ is decreased (with ISTATE = 3 on input), ! the remaining components of Y should be left undisturbed, -! if these are to be accessed in F and/or JAC. -! -! Normally, NEQ is a scalar, and it is generally referred -! to as a scalar in this user interface description. -! However, NEQ may be an array, with NEQ set to the -! system size. (The DLSODE package accesses only NEQ.) -! In either case, this parameter is passed as the NEQ -! argument in all calls to F and JAC. Hence, if it is an -! array, locations NEQ(2),... may be used to store other -! integer data and pass it to F and/or JAC. Subroutines -! F and/or JAC must include NEQ in a DIMENSION statement -! in that case. -! -! Y A real array for the vector of dependent variables, of -! length NEQ or more. Used for both input and output on -! the first call (ISTATE = 1), and only for output on -! other calls. On the first call, Y must contain the -! vector of initial values. On output, Y contains the -! computed solution vector, evaluated at T. If desired, -! the Y array may be used for other purposes between -! calls to the solver. -! -! This array is passed as the Y argument in all calls to F -! and JAC. Hence its length may exceed NEQ, and locations -! Y(NEQ+1),... may be used to store other real data and -! pass it to F and/or JAC. (The DLSODE package accesses -! only Y(1),...,Y(NEQ).) -! -! T The independent variable. On input, T is used only on -! the first call, as the initial point of the integration. -! On output, after each call, T is the value at which a -! computed solution Y is evaluated (usually the same as -! TOUT). On an error return, T is the farthest point -! reached. -! -! TOUT The next value of T at which a computed solution is -! desired. Used only for input. -! +! if these are to be accessed in F and/or JAC. +! +! Normally, NEQ is a scalar, and it is generally referred +! to as a scalar in this user interface description. +! However, NEQ may be an array, with NEQ set to the +! system size. (The DLSODE package accesses only NEQ.) +! In either case, this parameter is passed as the NEQ +! argument in all calls to F and JAC. Hence, if it is an +! array, locations NEQ(2),... may be used to store other +! integer data and pass it to F and/or JAC. Subroutines +! F and/or JAC must include NEQ in a DIMENSION statement +! in that case. +! +! Y A real array for the vector of dependent variables, of +! length NEQ or more. Used for both input and output on +! the first call (ISTATE = 1), and only for output on +! other calls. On the first call, Y must contain the +! vector of initial values. On output, Y contains the +! computed solution vector, evaluated at T. If desired, +! the Y array may be used for other purposes between +! calls to the solver. +! +! This array is passed as the Y argument in all calls to F +! and JAC. Hence its length may exceed NEQ, and locations +! Y(NEQ+1),... may be used to store other real data and +! pass it to F and/or JAC. (The DLSODE package accesses +! only Y(1),...,Y(NEQ).) +! +! T The independent variable. On input, T is used only on +! the first call, as the initial point of the integration. +! On output, after each call, T is the value at which a +! computed solution Y is evaluated (usually the same as +! TOUT). On an error return, T is the farthest point +! reached. +! +! TOUT The next value of T at which a computed solution is +! desired. Used only for input. +! ! When starting the problem (ISTATE = 1), TOUT may be equal -! to T for one call, then should not equal T for the next -! call. For the initial T, an input value of TOUT .NE. T -! is used in order to determine the direction of the -! integration (i.e., the algebraic sign of the step sizes) -! and the rough scale of the problem. Integration in +! to T for one call, then should not equal T for the next +! call. For the initial T, an input value of TOUT .NE. T +! is used in order to determine the direction of the +! integration (i.e., the algebraic sign of the step sizes) +! and the rough scale of the problem. Integration in ! either direction (forward or backward in T) is permitted. -! -! If ITASK = 2 or 5 (one-step modes), TOUT is ignored -! after the first call (i.e., the first call with +! +! If ITASK = 2 or 5 (one-step modes), TOUT is ignored +! after the first call (i.e., the first call with ! TOUT .NE. T). Otherwise, TOUT is required on every call. -! -! If ITASK = 1, 3, or 4, the values of TOUT need not be -! monotone, but a value of TOUT which backs up is limited -! to the current internal T interval, whose endpoints are -! TCUR - HU and TCUR. (See "Optional Outputs" below for -! TCUR and HU.) -! -! -! ITOL An indicator for the type of error control. See -! description below under AbsTol. Used only for input. -! -! RelTol A relative error tolerance parameter, either a scalar or -! an array of length NEQ. See description below under -! AbsTol. Input only. -! +! +! If ITASK = 1, 3, or 4, the values of TOUT need not be +! monotone, but a value of TOUT which backs up is limited +! to the current internal T interval, whose endpoints are +! TCUR - HU and TCUR. (See "Optional Outputs" below for +! TCUR and HU.) +! +! +! ITOL An indicator for the type of error control. See +! description below under AbsTol. Used only for input. +! +! RelTol A relative error tolerance parameter, either a scalar or +! an array of length NEQ. See description below under +! AbsTol. Input only. +! ! AbsTol An absolute error tolerance parameter, either a scalar or -! an array of length NEQ. Input only. -! -! The input parameters ITOL, RelTol, and AbsTol determine the -! error control performed by the solver. The solver will -! control the vector e = (e(i)) of estimated local errors -! in Y, according to an inequality of the form -! -! rms-norm of ( e(i)/EWT(i) ) <= 1, -! -! where -! -! EWT(i) = RelTol(i)*ABS(Y(i)) + AbsTol(i), -! -! and the rms-norm (root-mean-square norm) here is -! -! rms-norm(v) = SQRT(sum v(i)**2 / NEQ). -! -! Here EWT = (EWT(i)) is a vector of weights which must -! always be positive, and the values of RelTol and AbsTol +! an array of length NEQ. Input only. +! +! The input parameters ITOL, RelTol, and AbsTol determine the +! error control performed by the solver. The solver will +! control the vector e = (e(i)) of estimated local errors +! in Y, according to an inequality of the form +! +! rms-norm of ( e(i)/EWT(i) ) <= 1, +! +! where +! +! EWT(i) = RelTol(i)*ABS(Y(i)) + AbsTol(i), +! +! and the rms-norm (root-mean-square norm) here is +! +! rms-norm(v) = SQRT(sum v(i)**2 / NEQ). +! +! Here EWT = (EWT(i)) is a vector of weights which must +! always be positive, and the values of RelTol and AbsTol ! should all be nonnegative. The following table gives the -! types (scalar/array) of RelTol and AbsTol, and the -! corresponding form of EWT(i). -! -! ITOL RelTol AbsTol EWT(i) +! types (scalar/array) of RelTol and AbsTol, and the +! corresponding form of EWT(i). +! +! ITOL RelTol AbsTol EWT(i) ! ---- ------ ------ ----------------------------- -! 1 scalar scalar RelTol*ABS(Y(i)) + AbsTol -! 2 scalar array RelTol*ABS(Y(i)) + AbsTol(i) -! 3 array scalar RelTol(i)*ABS(Y(i)) + AbsTol -! 4 array array RelTol(i)*ABS(Y(i)) + AbsTol(i) -! -! When either of these parameters is a scalar, it need not -! be dimensioned in the user's calling program. -! -! If none of the above choices (with ITOL, RelTol, and AbsTol -! fixed throughout the problem) is suitable, more general -! error controls can be obtained by substituting -! user-supplied routines for the setting of EWT and/or for -! the norm calculation. See Part 4 below. -! +! 1 scalar scalar RelTol*ABS(Y(i)) + AbsTol +! 2 scalar array RelTol*ABS(Y(i)) + AbsTol(i) +! 3 array scalar RelTol(i)*ABS(Y(i)) + AbsTol +! 4 array array RelTol(i)*ABS(Y(i)) + AbsTol(i) +! +! When either of these parameters is a scalar, it need not +! be dimensioned in the user's calling program. +! +! If none of the above choices (with ITOL, RelTol, and AbsTol +! fixed throughout the problem) is suitable, more general +! error controls can be obtained by substituting +! user-supplied routines for the setting of EWT and/or for +! the norm calculation. See Part 4 below. +! ! If global errors are to be estimated by making a repeated ! run on the same problem with smaller tolerances, then all -! components of RelTol and AbsTol (i.e., of EWT) should be -! scaled down uniformly. -! -! ITASK An index specifying the task to be performed. Input -! only. ITASK has the following values and meanings: -! 1 Normal computation of output values of y(t) at -! t = TOUT (by overshooting and interpolating). -! 2 Take one step only and return. -! 3 Stop at the first internal mesh point at or beyond -! t = TOUT and return. -! 4 Normal computation of output values of y(t) at -! t = TOUT but without overshooting t = TCRIT. TCRIT -! must be input as RWORK(1). TCRIT may be equal to or -! beyond TOUT, but not behind it in the direction of -! integration. This option is useful if the problem -! has a singularity at or beyond t = TCRIT. -! 5 Take one step, without passing TCRIT, and return. -! TCRIT must be input as RWORK(1). -! -! Note: If ITASK = 4 or 5 and the solver reaches TCRIT -! (within roundoff), it will return T = TCRIT (exactly) to -! indicate this (unless ITASK = 4 and TOUT comes before -! TCRIT, in which case answers at T = TOUT are returned -! first). -! -! ISTATE An index used for input and output to specify the state -! of the calculation. -! -! On input, the values of ISTATE are as follows: -! 1 This is the first call for the problem -! (initializations will be done). See "Note" below. +! components of RelTol and AbsTol (i.e., of EWT) should be +! scaled down uniformly. +! +! ITASK An index specifying the task to be performed. Input +! only. ITASK has the following values and meanings: +! 1 Normal computation of output values of y(t) at +! t = TOUT (by overshooting and interpolating). +! 2 Take one step only and return. +! 3 Stop at the first internal mesh point at or beyond +! t = TOUT and return. +! 4 Normal computation of output values of y(t) at +! t = TOUT but without overshooting t = TCRIT. TCRIT +! must be input as RWORK(1). TCRIT may be equal to or +! beyond TOUT, but not behind it in the direction of +! integration. This option is useful if the problem +! has a singularity at or beyond t = TCRIT. +! 5 Take one step, without passing TCRIT, and return. +! TCRIT must be input as RWORK(1). +! +! Note: If ITASK = 4 or 5 and the solver reaches TCRIT +! (within roundoff), it will return T = TCRIT (exactly) to +! indicate this (unless ITASK = 4 and TOUT comes before +! TCRIT, in which case answers at T = TOUT are returned +! first). +! +! ISTATE An index used for input and output to specify the state +! of the calculation. +! +! On input, the values of ISTATE are as follows: +! 1 This is the first call for the problem +! (initializations will be done). See "Note" below. ! 2 This is not the first call, and the calculation is to -! continue normally, with no change in any input +! continue normally, with no change in any input ! parameters except possibly TOUT and ITASK. (If ITOL, -! RelTol, and/or AbsTol are changed between calls with -! ISTATE = 2, the new values will be used but not -! tested for legality.) +! RelTol, and/or AbsTol are changed between calls with +! ISTATE = 2, the new values will be used but not +! tested for legality.) ! 3 This is not the first call, and the calculation is to -! continue normally, but with a change in input -! parameters other than TOUT and ITASK. Changes are +! continue normally, but with a change in input +! parameters other than TOUT and ITASK. Changes are ! allowed in NEQ, ITOL, RelTol, AbsTol, IOPT, LRW, LIW, MF, -! ML, MU, and any of the optional inputs except H0. -! (See IWORK description for ML and MU.) -! +! ML, MU, and any of the optional inputs except H0. +! (See IWORK description for ML and MU.) +! ! Note: A preliminary call with TOUT = T is not counted as -! a first call here, as no initialization or checking of -! input is done. (Such a call is sometimes useful for the -! purpose of outputting the initial conditions.) Thus the -! first call for which TOUT .NE. T requires ISTATE = 1 on -! input. -! -! On output, ISTATE has the following values and meanings: -! 1 Nothing was done, as TOUT was equal to T with -! ISTATE = 1 on input. -! 2 The integration was performed successfully. -! -1 An excessive amount of work (more than MXSTEP steps) -! was done on this call, before completing the -! requested task, but the integration was otherwise -! successful as far as T. (MXSTEP is an optional input -! and is normally 500.) To continue, the user may +! a first call here, as no initialization or checking of +! input is done. (Such a call is sometimes useful for the +! purpose of outputting the initial conditions.) Thus the +! first call for which TOUT .NE. T requires ISTATE = 1 on +! input. +! +! On output, ISTATE has the following values and meanings: +! 1 Nothing was done, as TOUT was equal to T with +! ISTATE = 1 on input. +! 2 The integration was performed successfully. +! -1 An excessive amount of work (more than MXSTEP steps) +! was done on this call, before completing the +! requested task, but the integration was otherwise +! successful as far as T. (MXSTEP is an optional input +! and is normally 500.) To continue, the user may ! simply reset ISTATE to a value >1 and call again (the -! excess work step counter will be reset to 0). In -! addition, the user may increase MXSTEP to avoid this -! error return; see "Optional Inputs" below. -! -2 Too much accuracy was requested for the precision of -! the machine being used. This was detected before -! completing the requested task, but the integration -! was successful as far as T. To continue, the -! tolerance parameters must be reset, and ISTATE must -! be set to 3. The optional output TOLSF may be used -! for this purpose. (Note: If this condition is -! detected before taking any steps, then an illegal -! input return (ISTATE = -3) occurs instead.) -! -3 Illegal input was detected, before taking any -! integration steps. See written message for details. -! (Note: If the solver detects an infinite loop of +! excess work step counter will be reset to 0). In +! addition, the user may increase MXSTEP to avoid this +! error return; see "Optional Inputs" below. +! -2 Too much accuracy was requested for the precision of +! the machine being used. This was detected before +! completing the requested task, but the integration +! was successful as far as T. To continue, the +! tolerance parameters must be reset, and ISTATE must +! be set to 3. The optional output TOLSF may be used +! for this purpose. (Note: If this condition is +! detected before taking any steps, then an illegal +! input return (ISTATE = -3) occurs instead.) +! -3 Illegal input was detected, before taking any +! integration steps. See written message for details. +! (Note: If the solver detects an infinite loop of ! calls to the solver with illegal input, it will cause -! the run to stop.) -! -4 There were repeated error-test failures on one +! the run to stop.) +! -4 There were repeated error-test failures on one ! attempted step, before completing the requested task, -! but the integration was successful as far as T. The -! problem may have a singularity, or the input may be -! inappropriate. -! -5 There were repeated convergence-test failures on one +! but the integration was successful as far as T. The +! problem may have a singularity, or the input may be +! inappropriate. +! -5 There were repeated convergence-test failures on one ! attempted step, before completing the requested task, -! but the integration was successful as far as T. This -! may be caused by an inaccurate Jacobian matrix, if -! one is being used. +! but the integration was successful as far as T. This +! may be caused by an inaccurate Jacobian matrix, if +! one is being used. ! -6 EWT(i) became zero for some i during the integration. -! Pure relative error control (AbsTol(i)=0.0) was -! requested on a variable which has now vanished. The -! integration was successful as far as T. -! -! Note: Since the normal output value of ISTATE is 2, it +! Pure relative error control (AbsTol(i)=0.0) was +! requested on a variable which has now vanished. The +! integration was successful as far as T. +! +! Note: Since the normal output value of ISTATE is 2, it ! does not need to be reset for normal continuation. Also, -! since a negative input value of ISTATE will be regarded -! as illegal, a negative output value requires the user to -! change it, and possibly other inputs, before calling the -! solver again. -! -! IOPT An integer flag to specify whether any optional inputs -! are being used on this call. Input only. The optional -! inputs are listed under a separate heading below. -! 0 No optional inputs are being used. Default values -! will be used in all cases. -! 1 One or more optional inputs are being used. -! -! RWORK A real working array (double precision). The length of -! RWORK must be at least -! -! 20 + NYH*(MAXORD + 1) + 3*NEQ + LWM -! -! where -! NYH = the initial value of NEQ, -! MAXORD = 12 (if METH = 1) or 5 (if METH = 2) (unless a -! smaller value is given as an optional input), -! LWM = 0 if MITER = 0, -! LWM = NEQ**2 + 2 if MITER = 1 or 2, -! LWM = NEQ + 2 if MITER = 3, and -! LWM = (2*ML + MU + 1)*NEQ + 2 -! if MITER = 4 or 5. -! (See the MF description below for METH and MITER.) -! +! since a negative input value of ISTATE will be regarded +! as illegal, a negative output value requires the user to +! change it, and possibly other inputs, before calling the +! solver again. +! +! IOPT An integer flag to specify whether any optional inputs +! are being used on this call. Input only. The optional +! inputs are listed under a separate heading below. +! 0 No optional inputs are being used. Default values +! will be used in all cases. +! 1 One or more optional inputs are being used. +! +! RWORK A real working array (double precision). The length of +! RWORK must be at least +! +! 20 + NYH*(MAXORD + 1) + 3*NEQ + LWM +! +! where +! NYH = the initial value of NEQ, +! MAXORD = 12 (if METH = 1) or 5 (if METH = 2) (unless a +! smaller value is given as an optional input), +! LWM = 0 if MITER = 0, +! LWM = NEQ**2 + 2 if MITER = 1 or 2, +! LWM = NEQ + 2 if MITER = 3, and +! LWM = (2*ML + MU + 1)*NEQ + 2 +! if MITER = 4 or 5. +! (See the MF description below for METH and MITER.) +! ! Thus if MAXORD has its default value and NEQ is constant, -! this length is: -! 20 + 16*NEQ for MF = 10, -! 22 + 16*NEQ + NEQ**2 for MF = 11 or 12, -! 22 + 17*NEQ for MF = 13, -! 22 + 17*NEQ + (2*ML + MU)*NEQ for MF = 14 or 15, -! 20 + 9*NEQ for MF = 20, -! 22 + 9*NEQ + NEQ**2 for MF = 21 or 22, -! 22 + 10*NEQ for MF = 23, -! 22 + 10*NEQ + (2*ML + MU)*NEQ for MF = 24 or 25. -! -! The first 20 words of RWORK are reserved for conditional -! and optional inputs and optional outputs. -! -! The following word in RWORK is a conditional input: -! RWORK(1) = TCRIT, the critical value of t which the +! this length is: +! 20 + 16*NEQ for MF = 10, +! 22 + 16*NEQ + NEQ**2 for MF = 11 or 12, +! 22 + 17*NEQ for MF = 13, +! 22 + 17*NEQ + (2*ML + MU)*NEQ for MF = 14 or 15, +! 20 + 9*NEQ for MF = 20, +! 22 + 9*NEQ + NEQ**2 for MF = 21 or 22, +! 22 + 10*NEQ for MF = 23, +! 22 + 10*NEQ + (2*ML + MU)*NEQ for MF = 24 or 25. +! +! The first 20 words of RWORK are reserved for conditional +! and optional inputs and optional outputs. +! +! The following word in RWORK is a conditional input: +! RWORK(1) = TCRIT, the critical value of t which the ! solver is not to overshoot. Required if ITASK -! is 4 or 5, and ignored otherwise. See ITASK. -! -! LRW The length of the array RWORK, as declared by the user. -! (This will be checked by the solver.) -! -! IWORK An integer work array. Its length must be at least -! 20 if MITER = 0 or 3 (MF = 10, 13, 20, 23), or +! is 4 or 5, and ignored otherwise. See ITASK. +! +! LRW The length of the array RWORK, as declared by the user. +! (This will be checked by the solver.) +! +! IWORK An integer work array. Its length must be at least +! 20 if MITER = 0 or 3 (MF = 10, 13, 20, 23), or ! 20 + NEQ otherwise (MF = 11, 12, 14, 15, 21, 22, 24, 25). -! (See the MF description below for MITER.) The first few -! words of IWORK are used for conditional and optional -! inputs and optional outputs. -! -! The following two words in IWORK are conditional inputs: -! IWORK(1) = ML These are the lower and upper half- -! IWORK(2) = MU bandwidths, respectively, of the banded -! Jacobian, excluding the main diagonal. -! The band is defined by the matrix locations -! (i,j) with i - ML <= j <= i + MU. ML and MU -! must satisfy 0 <= ML,MU <= NEQ - 1. These are -! required if MITER is 4 or 5, and ignored -! otherwise. ML and MU may in fact be the band +! (See the MF description below for MITER.) The first few +! words of IWORK are used for conditional and optional +! inputs and optional outputs. +! +! The following two words in IWORK are conditional inputs: +! IWORK(1) = ML These are the lower and upper half- +! IWORK(2) = MU bandwidths, respectively, of the banded +! Jacobian, excluding the main diagonal. +! The band is defined by the matrix locations +! (i,j) with i - ML <= j <= i + MU. ML and MU +! must satisfy 0 <= ML,MU <= NEQ - 1. These are +! required if MITER is 4 or 5, and ignored +! otherwise. ML and MU may in fact be the band ! parameters for a matrix to which df/dy is only -! approximately equal. -! -! LIW The length of the array IWORK, as declared by the user. -! (This will be checked by the solver.) -! +! approximately equal. +! +! LIW The length of the array IWORK, as declared by the user. +! (This will be checked by the solver.) +! ! Note: The work arrays must not be altered between calls to DLSODE -! for the same problem, except possibly for the conditional and -! optional inputs, and except for the last 3*NEQ words of RWORK. -! The latter space is used for internal scratch space, and so is -! available for use by the user outside DLSODE between calls, if -! desired (but not for use by F or JAC). -! +! for the same problem, except possibly for the conditional and +! optional inputs, and except for the last 3*NEQ words of RWORK. +! The latter space is used for internal scratch space, and so is +! available for use by the user outside DLSODE between calls, if +! desired (but not for use by F or JAC). +! ! JAC The name of the user-supplied routine (MITER = 1 or 4) to -! compute the Jacobian matrix, df/dy, as a function of the +! compute the Jacobian matrix, df/dy, as a function of the ! scalar t and the vector y. (See the MF description below -! for MITER.) It is to have the form -! -! SUBROUTINE JAC (NEQ, T, Y, ML, MU, PD, NROWPD) -! REAL(kind=dp) T, Y(*), PD(NROWPD,*) -! -! where NEQ, T, Y, ML, MU, and NROWPD are input and the -! array PD is to be loaded with partial derivatives -! (elements of the Jacobian matrix) on output. PD must be +! for MITER.) It is to have the form +! +! SUBROUTINE JAC (NEQ, T, Y, ML, MU, PD, NROWPD) +! REAL(kind=dp) T, Y(*), PD(NROWPD,*) +! +! where NEQ, T, Y, ML, MU, and NROWPD are input and the +! array PD is to be loaded with partial derivatives +! (elements of the Jacobian matrix) on output. PD must be ! given a first dimension of NROWPD. T and Y have the same -! meaning as in subroutine F. -! -! In the full matrix case (MITER = 1), ML and MU are -! ignored, and the Jacobian is to be loaded into PD in -! columnwise manner, with df(i)/dy(j) loaded into PD(i,j). -! -! In the band matrix case (MITER = 4), the elements within -! the band are to be loaded into PD in columnwise manner, -! with diagonal lines of df/dy loaded into the rows of PD. +! meaning as in subroutine F. +! +! In the full matrix case (MITER = 1), ML and MU are +! ignored, and the Jacobian is to be loaded into PD in +! columnwise manner, with df(i)/dy(j) loaded into PD(i,j). +! +! In the band matrix case (MITER = 4), the elements within +! the band are to be loaded into PD in columnwise manner, +! with diagonal lines of df/dy loaded into the rows of PD. ! Thus df(i)/dy(j) is to be loaded into PD(i-j+MU+1,j). ML -! and MU are the half-bandwidth parameters (see IWORK). -! The locations in PD in the two triangular areas which -! correspond to nonexistent matrix elements can be ignored +! and MU are the half-bandwidth parameters (see IWORK). +! The locations in PD in the two triangular areas which +! correspond to nonexistent matrix elements can be ignored ! or loaded arbitrarily, as they are overwritten by DLSODE. -! +! ! JAC need not provide df/dy exactly. A crude approximation -! (possibly with a smaller bandwidth) will do. -! -! In either case, PD is preset to zero by the solver, so -! that only the nonzero elements need be loaded by JAC. +! (possibly with a smaller bandwidth) will do. +! +! In either case, PD is preset to zero by the solver, so +! that only the nonzero elements need be loaded by JAC. ! Each call to JAC is preceded by a call to F with the same -! arguments NEQ, T, and Y. Thus to gain some efficiency, -! intermediate quantities shared by both calculations may -! be saved in a user COMMON block by F and not recomputed -! by JAC, if desired. Also, JAC may alter the Y array, if -! desired. JAC must be declared EXTERNAL in the calling -! program. -! -! Subroutine JAC may access user-defined quantities in -! NEQ(2),... and/or in Y(NEQ+1),... if NEQ is an array -! (dimensioned in JAC) and/or Y has length exceeding -! NEQ. See the descriptions of NEQ and Y above. -! -! MF The method flag. Used only for input. The legal values -! of MF are 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, -! and 25. MF has decimal digits METH and MITER: -! MF = 10*METH + MITER . -! -! METH indicates the basic linear multistep method: -! 1 Implicit Adams method. -! 2 Method based on backward differentiation formulas -! (BDF's). -! -! MITER indicates the corrector iteration method: -! 0 Functional iteration (no Jacobian matrix is -! involved). -! 1 Chord iteration with a user-supplied full (NEQ by -! NEQ) Jacobian. -! 2 Chord iteration with an internally generated -! (difference quotient) full Jacobian (using NEQ -! extra calls to F per df/dy value). -! 3 Chord iteration with an internally generated +! arguments NEQ, T, and Y. Thus to gain some efficiency, +! intermediate quantities shared by both calculations may +! be saved in a user COMMON block by F and not recomputed +! by JAC, if desired. Also, JAC may alter the Y array, if +! desired. JAC must be declared EXTERNAL in the calling +! program. +! +! Subroutine JAC may access user-defined quantities in +! NEQ(2),... and/or in Y(NEQ+1),... if NEQ is an array +! (dimensioned in JAC) and/or Y has length exceeding +! NEQ. See the descriptions of NEQ and Y above. +! +! MF The method flag. Used only for input. The legal values +! of MF are 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, +! and 25. MF has decimal digits METH and MITER: +! MF = 10*METH + MITER . +! +! METH indicates the basic linear multistep method: +! 1 Implicit Adams method. +! 2 Method based on backward differentiation formulas +! (BDF's). +! +! MITER indicates the corrector iteration method: +! 0 Functional iteration (no Jacobian matrix is +! involved). +! 1 Chord iteration with a user-supplied full (NEQ by +! NEQ) Jacobian. +! 2 Chord iteration with an internally generated +! (difference quotient) full Jacobian (using NEQ +! extra calls to F per df/dy value). +! 3 Chord iteration with an internally generated ! diagonal Jacobian approximation (using one extra call -! to F per df/dy evaluation). +! to F per df/dy evaluation). ! 4 Chord iteration with a user-supplied banded Jacobian. -! 5 Chord iteration with an internally generated banded -! Jacobian (using ML + MU + 1 extra calls to F per -! df/dy evaluation). -! -! If MITER = 1 or 4, the user must supply a subroutine JAC -! (the name is arbitrary) as described above under JAC. -! For other values of MITER, a dummy argument can be used. -! -! Optional Inputs -! --------------- +! 5 Chord iteration with an internally generated banded +! Jacobian (using ML + MU + 1 extra calls to F per +! df/dy evaluation). +! +! If MITER = 1 or 4, the user must supply a subroutine JAC +! (the name is arbitrary) as described above under JAC. +! For other values of MITER, a dummy argument can be used. +! +! Optional Inputs +! --------------- ! The following is a list of the optional inputs provided for in the -! call sequence. (See also Part 2.) For each such input variable, -! this table lists its name as used in this documentation, its +! call sequence. (See also Part 2.) For each such input variable, +! this table lists its name as used in this documentation, its ! location in the call sequence, its meaning, and the default value. ! The use of any of these inputs requires IOPT = 1, and in that case -! all of these inputs are examined. A value of zero for any of -! these optional inputs will cause the default value to be used. -! Thus to use a subset of the optional inputs, simply preload -! locations 5 to 10 in RWORK and IWORK to 0.0 and 0 respectively, -! and then set those of interest to nonzero values. -! -! Name Location Meaning and default value +! all of these inputs are examined. A value of zero for any of +! these optional inputs will cause the default value to be used. +! Thus to use a subset of the optional inputs, simply preload +! locations 5 to 10 in RWORK and IWORK to 0.0 and 0 respectively, +! and then set those of interest to nonzero values. +! +! Name Location Meaning and default value ! ------ --------- ----------------------------------------------- -! H0 RWORK(5) Step size to be attempted on the first step. -! The default value is determined by the solver. -! HMAX RWORK(6) Maximum absolute step size allowed. The -! default value is infinite. -! HMIN RWORK(7) Minimum absolute step size allowed. The -! default value is 0. (This lower bound is not -! enforced on the final step before reaching -! TCRIT when ITASK = 4 or 5.) +! H0 RWORK(5) Step size to be attempted on the first step. +! The default value is determined by the solver. +! HMAX RWORK(6) Maximum absolute step size allowed. The +! default value is infinite. +! HMIN RWORK(7) Minimum absolute step size allowed. The +! default value is 0. (This lower bound is not +! enforced on the final step before reaching +! TCRIT when ITASK = 4 or 5.) ! MAXORD IWORK(5) Maximum order to be allowed. The default value -! is 12 if METH = 1, and 5 if METH = 2. (See the -! MF description above for METH.) If MAXORD -! exceeds the default value, it will be reduced -! to the default value. If MAXORD is changed -! during the problem, it may cause the current -! order to be reduced. -! MXSTEP IWORK(6) Maximum number of (internally defined) steps -! allowed during one call to the solver. The -! default value is 500. -! MXHNIL IWORK(7) Maximum number of messages printed (per -! problem) warning that T + H = T on a step -! (H = step size). This must be positive to -! result in a nondefault value. The default -! value is 10. -! -! Optional Outputs -! ---------------- -! As optional additional output from DLSODE, the variables listed -! below are quantities related to the performance of DLSODE which -! are available to the user. These are communicated by way of the -! work arrays, but also have internal mnemonic names as shown. +! is 12 if METH = 1, and 5 if METH = 2. (See the +! MF description above for METH.) If MAXORD +! exceeds the default value, it will be reduced +! to the default value. If MAXORD is changed +! during the problem, it may cause the current +! order to be reduced. +! MXSTEP IWORK(6) Maximum number of (internally defined) steps +! allowed during one call to the solver. The +! default value is 500. +! MXHNIL IWORK(7) Maximum number of messages printed (per +! problem) warning that T + H = T on a step +! (H = step size). This must be positive to +! result in a nondefault value. The default +! value is 10. +! +! Optional Outputs +! ---------------- +! As optional additional output from DLSODE, the variables listed +! below are quantities related to the performance of DLSODE which +! are available to the user. These are communicated by way of the +! work arrays, but also have internal mnemonic names as shown. ! Except where stated otherwise, all of these outputs are defined on ! any successful return from DLSODE, and on any return with ISTATE = -! -1, -2, -4, -5, or -6. On an illegal input return (ISTATE = -3), +! -1, -2, -4, -5, or -6. On an illegal input return (ISTATE = -3), ! they will be unchanged from their existing values (if any), except -! possibly for TOLSF, LENRW, and LENIW. On any error return, -! outputs relevant to the error will be defined, as noted below. -! -! Name Location Meaning +! possibly for TOLSF, LENRW, and LENIW. On any error return, +! outputs relevant to the error will be defined, as noted below. +! +! Name Location Meaning ! ----- --------- ------------------------------------------------ -! HU RWORK(11) Step size in t last used (successfully). -! HCUR RWORK(12) Step size to be attempted on the next step. -! TCUR RWORK(13) Current value of the independent variable which -! the solver has actually reached, i.e., the -! current internal mesh point in t. On output, -! TCUR will always be at least as far as the +! HU RWORK(11) Step size in t last used (successfully). +! HCUR RWORK(12) Step size to be attempted on the next step. +! TCUR RWORK(13) Current value of the independent variable which +! the solver has actually reached, i.e., the +! current internal mesh point in t. On output, +! TCUR will always be at least as far as the ! argument T, but may be farther (if interpolation -! was done). -! TOLSF RWORK(14) Tolerance scale factor, greater than 1.0, -! computed when a request for too much accuracy -! was detected (ISTATE = -3 if detected at the -! start of the problem, ISTATE = -2 otherwise). -! If ITOL is left unaltered but RelTol and AbsTol are +! was done). +! TOLSF RWORK(14) Tolerance scale factor, greater than 1.0, +! computed when a request for too much accuracy +! was detected (ISTATE = -3 if detected at the +! start of the problem, ISTATE = -2 otherwise). +! If ITOL is left unaltered but RelTol and AbsTol are ! uniformly scaled up by a factor of TOLSF for the -! next call, then the solver is deemed likely to -! succeed. (The user may also ignore TOLSF and -! alter the tolerance parameters in any other way -! appropriate.) -! NST IWORK(11) Number of steps taken for the problem so far. -! NFE IWORK(12) Number of F evaluations for the problem so far. +! next call, then the solver is deemed likely to +! succeed. (The user may also ignore TOLSF and +! alter the tolerance parameters in any other way +! appropriate.) +! NST IWORK(11) Number of steps taken for the problem so far. +! NFE IWORK(12) Number of F evaluations for the problem so far. ! NJE IWORK(13) Number of Jacobian evaluations (and of matrix LU -! decompositions) for the problem so far. -! NQU IWORK(14) Method order last used (successfully). -! NQCUR IWORK(15) Order to be attempted on the next step. -! IMXER IWORK(16) Index of the component of largest magnitude in +! decompositions) for the problem so far. +! NQU IWORK(14) Method order last used (successfully). +! NQCUR IWORK(15) Order to be attempted on the next step. +! IMXER IWORK(16) Index of the component of largest magnitude in ! the weighted local error vector ( e(i)/EWT(i) ), -! on an error return with ISTATE = -4 or -5. -! LENRW IWORK(17) Length of RWORK actually required. This is -! defined on normal returns and on an illegal -! input return for insufficient storage. -! LENIW IWORK(18) Length of IWORK actually required. This is -! defined on normal returns and on an illegal -! input return for insufficient storage. -! +! on an error return with ISTATE = -4 or -5. +! LENRW IWORK(17) Length of RWORK actually required. This is +! defined on normal returns and on an illegal +! input return for insufficient storage. +! LENIW IWORK(18) Length of IWORK actually required. This is +! defined on normal returns and on an illegal +! input return for insufficient storage. +! ! The following two arrays are segments of the RWORK array which may -! also be of interest to the user as optional outputs. For each -! array, the table below gives its internal name, its base address -! in RWORK, and its description. -! -! Name Base address Description +! also be of interest to the user as optional outputs. For each +! array, the table below gives its internal name, its base address +! in RWORK, and its description. +! +! Name Base address Description ! ---- ------------ ---------------------------------------------- -! YH 21 The Nordsieck history array, of size NYH by +! YH 21 The Nordsieck history array, of size NYH by ! (NQCUR + 1), where NYH is the initial value of -! NEQ. For j = 0,1,...,NQCUR, column j + 1 of +! NEQ. For j = 0,1,...,NQCUR, column j + 1 of ! YH contains HCUR**j/factorial(j) times the jth -! derivative of the interpolating polynomial +! derivative of the interpolating polynomial ! currently representing the solution, evaluated -! at t = TCUR. -! ACOR LENRW-NEQ+1 Array of size NEQ used for the accumulated -! corrections on each step, scaled on output to -! represent the estimated local error in Y on -! the last step. This is the vector e in the -! description of the error control. It is +! at t = TCUR. +! ACOR LENRW-NEQ+1 Array of size NEQ used for the accumulated +! corrections on each step, scaled on output to +! represent the estimated local error in Y on +! the last step. This is the vector e in the +! description of the error control. It is ! defined only on successful return from DLSODE. -! -! -! Part 2. Other Callable Routines -! -------------------------------- -! -! The following are optional calls which the user may make to gain -! additional capabilities in conjunction with DLSODE. -! -! Form of call Function +! +! +! Part 2. Other Callable Routines +! -------------------------------- +! +! The following are optional calls which the user may make to gain +! additional capabilities in conjunction with DLSODE. +! +! Form of call Function ! ------------------------ ---------------------------------------- -! CALL XSETUN(LUN) Set the logical unit number, LUN, for -! output of messages from DLSODE, if the -! default is not desired. The default +! CALL XSETUN(LUN) Set the logical unit number, LUN, for +! output of messages from DLSODE, if the +! default is not desired. The default ! value of LUN is 6. This call may be made -! at any time and will take effect -! immediately. -! CALL XSETF(MFLAG) Set a flag to control the printing of -! messages by DLSODE. MFLAG = 0 means do -! not print. (Danger: this risks losing -! valuable information.) MFLAG = 1 means -! print (the default). This call may be -! made at any time and will take effect -! immediately. +! at any time and will take effect +! immediately. +! CALL XSETF(MFLAG) Set a flag to control the printing of +! messages by DLSODE. MFLAG = 0 means do +! not print. (Danger: this risks losing +! valuable information.) MFLAG = 1 means +! print (the default). This call may be +! made at any time and will take effect +! immediately. ! CALL DSRCOM(RSAV,ISAV,JOB) Saves and restores the contents of the -! internal COMMON blocks used by DLSODE -! (see Part 3 below). RSAV must be a -! real array of length 218 or more, and -! ISAV must be an integer array of length -! 37 or more. JOB = 1 means save COMMON -! into RSAV/ISAV. JOB = 2 means restore -! COMMON from same. DSRCOM is useful if +! internal COMMON blocks used by DLSODE +! (see Part 3 below). RSAV must be a +! real array of length 218 or more, and +! ISAV must be an integer array of length +! 37 or more. JOB = 1 means save COMMON +! into RSAV/ISAV. JOB = 2 means restore +! COMMON from same. DSRCOM is useful if ! one is interrupting a run and restarting -! later, or alternating between two or -! more problems solved with DLSODE. -! CALL DINTDY(,,,,,) Provide derivatives of y, of various -! (see below) orders, at a specified point t, if -! desired. It may be called only after a +! later, or alternating between two or +! more problems solved with DLSODE. +! CALL DINTDY(,,,,,) Provide derivatives of y, of various +! (see below) orders, at a specified point t, if +! desired. It may be called only after a ! successful return from DLSODE. Detailed -! instructions follow. -! -! Detailed instructions for using DINTDY -! -------------------------------------- -! The form of the CALL is: -! -! CALL DINTDY (T, K, RWORK(21), NYH, DKY, IFLAG) -! -! The input parameters are: -! -! T Value of independent variable where answers are -! desired (normally the same as the T last returned by -! DLSODE). For valid results, T must lie between -! TCUR - HU and TCUR. (See "Optional Outputs" above -! for TCUR and HU.) -! K Integer order of the derivative desired. K must -! satisfy 0 <= K <= NQCUR, where NQCUR is the current -! order (see "Optional Outputs"). The capability -! corresponding to K = 0, i.e., computing y(t), is -! already provided by DLSODE directly. Since -! NQCUR >= 1, the first derivative dy/dt is always -! available with DINTDY. -! RWORK(21) The base address of the history array YH. +! instructions follow. +! +! Detailed instructions for using DINTDY +! -------------------------------------- +! The form of the CALL is: +! +! CALL DINTDY (T, K, RWORK(21), NYH, DKY, IFLAG) +! +! The input parameters are: +! +! T Value of independent variable where answers are +! desired (normally the same as the T last returned by +! DLSODE). For valid results, T must lie between +! TCUR - HU and TCUR. (See "Optional Outputs" above +! for TCUR and HU.) +! K Integer order of the derivative desired. K must +! satisfy 0 <= K <= NQCUR, where NQCUR is the current +! order (see "Optional Outputs"). The capability +! corresponding to K = 0, i.e., computing y(t), is +! already provided by DLSODE directly. Since +! NQCUR >= 1, the first derivative dy/dt is always +! available with DINTDY. +! RWORK(21) The base address of the history array YH. ! NYH Column length of YH, equal to the initial value of NEQ. -! -! The output parameters are: -! -! DKY Real array of length NEQ containing the computed value -! of the Kth derivative of y(t). -! IFLAG Integer flag, returned as 0 if K and T were legal, -! -1 if K was illegal, and -2 if T was illegal. -! On an error return, a message is also written. -! -! -! Part 3. Common Blocks -! ---------------------- -! -! If DLSODE is to be used in an overlay situation, the user must -! declare, in the primary overlay, the variables in: -! (1) the call sequence to DLSODE, -! (2) the internal COMMON block /DLS001/, of length 255 -! (218 double precision words followed by 37 integer words). -! -! If DLSODE is used on a system in which the contents of internal -! COMMON blocks are not preserved between calls, the user should -! declare the above COMMON block in his main program to insure that -! its contents are preserved. -! -! If the solution of a given problem by DLSODE is to be interrupted +! +! The output parameters are: +! +! DKY Real array of length NEQ containing the computed value +! of the Kth derivative of y(t). +! IFLAG Integer flag, returned as 0 if K and T were legal, +! -1 if K was illegal, and -2 if T was illegal. +! On an error return, a message is also written. +! +! +! Part 3. Common Blocks +! ---------------------- +! +! If DLSODE is to be used in an overlay situation, the user must +! declare, in the primary overlay, the variables in: +! (1) the call sequence to DLSODE, +! (2) the internal COMMON block /DLS001/, of length 255 +! (218 double precision words followed by 37 integer words). +! +! If DLSODE is used on a system in which the contents of internal +! COMMON blocks are not preserved between calls, the user should +! declare the above COMMON block in his main program to insure that +! its contents are preserved. +! +! If the solution of a given problem by DLSODE is to be interrupted ! and then later continued, as when restarting an interrupted run or -! alternating between two or more problems, the user should save, -! following the return from the last DLSODE call prior to the -! interruption, the contents of the call sequence variables and the -! internal COMMON block, and later restore these values before the +! alternating between two or more problems, the user should save, +! following the return from the last DLSODE call prior to the +! interruption, the contents of the call sequence variables and the +! internal COMMON block, and later restore these values before the ! next DLSODE call for that problem. In addition, if XSETUN and/or -! XSETF was called for non-default handling of error messages, then -! these calls must be repeated. To save and restore the COMMON -! block, use subroutine DSRCOM (see Part 2 above). -! -! -! Part 4. Optionally Replaceable Solver Routines -! ----------------------------------------------- -! +! XSETF was called for non-default handling of error messages, then +! these calls must be repeated. To save and restore the COMMON +! block, use subroutine DSRCOM (see Part 2 above). +! +! +! Part 4. Optionally Replaceable Solver Routines +! ----------------------------------------------- +! ! Below are descriptions of two routines in the DLSODE package which -! relate to the measurement of errors. Either routine can be -! replaced by a user-supplied version, if desired. However, since -! such a replacement may have a major impact on performance, it +! relate to the measurement of errors. Either routine can be +! replaced by a user-supplied version, if desired. However, since +! such a replacement may have a major impact on performance, it ! should be done only when absolutely necessary, and only with great -! caution. (Note: The means by which the package version of a -! routine is superseded by the user's version may be system- -! dependent.) -! -! DEWSET -! ------ -! The following subroutine is called just before each internal -! integration step, and sets the array of error weights, EWT, as -! described under ITOL/RelTol/AbsTol above: -! -! SUBROUTINE DEWSET (NEQ, ITOL, RelTol, AbsTol, YCUR, EWT) -! -! where NEQ, ITOL, RelTol, and AbsTol are as in the DLSODE call -! sequence, YCUR contains the current dependent variable vector, -! and EWT is the array of weights set by DEWSET. -! -! If the user supplies this subroutine, it must return in EWT(i) -! (i = 1,...,NEQ) a positive quantity suitable for comparing errors -! in Y(i) to. The EWT array returned by DEWSET is passed to the -! DVNORM routine (see below), and also used by DLSODE in the -! computation of the optional output IMXER, the diagonal Jacobian -! approximation, and the increments for difference quotient -! Jacobians. -! +! caution. (Note: The means by which the package version of a +! routine is superseded by the user's version may be system- +! dependent.) +! +! DEWSET +! ------ +! The following subroutine is called just before each internal +! integration step, and sets the array of error weights, EWT, as +! described under ITOL/RelTol/AbsTol above: +! +! SUBROUTINE DEWSET (NEQ, ITOL, RelTol, AbsTol, YCUR, EWT) +! +! where NEQ, ITOL, RelTol, and AbsTol are as in the DLSODE call +! sequence, YCUR contains the current dependent variable vector, +! and EWT is the array of weights set by DEWSET. +! +! If the user supplies this subroutine, it must return in EWT(i) +! (i = 1,...,NEQ) a positive quantity suitable for comparing errors +! in Y(i) to. The EWT array returned by DEWSET is passed to the +! DVNORM routine (see below), and also used by DLSODE in the +! computation of the optional output IMXER, the diagonal Jacobian +! approximation, and the increments for difference quotient +! Jacobians. +! ! In the user-supplied version of DEWSET, it may be desirable to use ! the current values of derivatives of y. Derivatives up to order NQ -! are available from the history array YH, described above under -! optional outputs. In DEWSET, YH is identical to the YCUR array, -! extended to NQ + 1 columns with a column length of NYH and scale -! factors of H**j/factorial(j). On the first call for the problem, -! given by NST = 0, NQ is 1 and H is temporarily set to 1.0. -! NYH is the initial value of NEQ. The quantities NQ, H, and NST -! can be obtained by including in SEWSET the statements: -! REAL(kind=dp) RLS -! COMMON /DLS001/ RLS(218),ILS(37) -! NQ = ILS(33) -! NST = ILS(34) -! H = RLS(212) -! Thus, for example, the current value of dy/dt can be obtained as -! YCUR(NYH+i)/H (i=1,...,NEQ) (and the division by H is unnecessary -! when NST = 0). -! -! DVNORM -! ------ -! DVNORM is a real function routine which computes the weighted -! root-mean-square norm of a vector v: -! -! d = DVNORM (n, v, w) -! -! where: -! n = the length of the vector, -! v = real array of length n containing the vector, -! w = real array of length n containing weights, -! d = SQRT( (1/n) * sum(v(i)*w(i))**2 ). -! -! DVNORM is called with n = NEQ and with w(i) = 1.0/EWT(i), where -! EWT is as set by subroutine DEWSET. -! +! are available from the history array YH, described above under +! optional outputs. In DEWSET, YH is identical to the YCUR array, +! extended to NQ + 1 columns with a column length of NYH and scale +! factors of H**j/factorial(j). On the first call for the problem, +! given by NST = 0, NQ is 1 and H is temporarily set to 1.0. +! NYH is the initial value of NEQ. The quantities NQ, H, and NST +! can be obtained by including in SEWSET the statements: +! REAL(kind=dp) RLS +! COMMON /DLS001/ RLS(218),ILS(37) +! NQ = ILS(33) +! NST = ILS(34) +! H = RLS(212) +! Thus, for example, the current value of dy/dt can be obtained as +! YCUR(NYH+i)/H (i=1,...,NEQ) (and the division by H is unnecessary +! when NST = 0). +! +! DVNORM +! ------ +! DVNORM is a real function routine which computes the weighted +! root-mean-square norm of a vector v: +! +! d = DVNORM (n, v, w) +! +! where: +! n = the length of the vector, +! v = real array of length n containing the vector, +! w = real array of length n containing weights, +! d = SQRT( (1/n) * sum(v(i)*w(i))**2 ). +! +! DVNORM is called with n = NEQ and with w(i) = 1.0/EWT(i), where +! EWT is as set by subroutine DEWSET. +! ! If the user supplies this function, it should return a nonnegative -! value of DVNORM suitable for use in the error control in DLSODE. +! value of DVNORM suitable for use in the error control in DLSODE. ! None of the arguments should be altered by DVNORM. For example, a -! user-supplied DVNORM routine might: -! - Substitute a max-norm of (v(i)*w(i)) for the rms-norm, or -! - Ignore some components of v in the norm, with the effect of -! suppressing the error control on those components of Y. +! user-supplied DVNORM routine might: +! - Substitute a max-norm of (v(i)*w(i)) for the rms-norm, or +! - Ignore some components of v in the norm, with the effect of +! suppressing the error control on those components of Y. ! --------------------------------------------------------------------- -!***ROUTINES CALLED DEWSET, DINTDY, DUMACH, DSTODE, DVNORM, XERRWD -!***COMMON BLOCKS DLS001 -!***REVISION HISTORY (YYYYMMDD) -! 19791129 DATE WRITTEN -! 19791213 Minor changes to declarations; DELP init. in STODE. -! 19800118 Treat NEQ as array; integer declarations added throughout; -! minor changes to prologue. -! 19800306 Corrected TESCO(1,NQP1) setting in CFODE. -! 19800519 Corrected access of YH on forced order reduction; -! numerous corrections to prologues and other comments. -! 19800617 In main driver, added loading of SQRT(UROUND) in RWORK; -! minor corrections to main prologue. -! 19800923 Added zero initialization of HU and NQU. -! 19801218 Revised XERRWD routine; minor corrections to main prologue. -! 19810401 Minor changes to comments and an error message. -! 19810814 Numerous revisions: replaced EWT by 1/EWT; used flags -! JCUR, ICF, IERPJ, IERSL between STODE and subordinates; -! added tuning parameters CCMAX, MAXCOR, MSBP, MXNCF; -! reorganized returns from STODE; reorganized type decls.; -! fixed message length in XERRWD; changed default LUNIT to 6; -! changed Common lengths; changed comments throughout. -! 19870330 Major update by ACH: corrected comments throughout; -! removed TRET from Common; rewrote EWSET with 4 loops; -! fixed t test in INTDY; added Cray directives in STODE; -! in STODE, fixed DELP init. and logic around PJAC call; -! combined routines to save/restore Common; -! passed LEVEL = 0 in error message calls (except run abort). -! 19890426 Modified prologue to SLATEC/LDOC format. (FNF) -! 19890501 Many improvements to prologue. (FNF) -! 19890503 A few final corrections to prologue. (FNF) -! 19890504 Minor cosmetic changes. (FNF) -! 19890510 Corrected description of Y in Arguments section. (FNF) -! 19890517 Minor corrections to prologue. (FNF) -! 19920514 Updated with prologue edited 891025 by G. Shaw for manual. -! 19920515 Converted source lines to upper case. (FNF) -! 19920603 Revised XERRWD calls using mixed upper-lower case. (ACH) -! 19920616 Revised prologue comment regarding CFT. (ACH) -! 19921116 Revised prologue comments regarding Common. (ACH). -! 19930326 Added comment about non-reentrancy. (FNF) -! 19930723 Changed D1MACH to DUMACH. (FNF) -! 19930801 Removed ILLIN and NTREP from Common (affects driver logic); -! minor changes to prologue and internal comments; -! changed Hollerith strings to quoted strings; -! changed internal comments to mixed case; -! replaced XERRWD with new version using character type; -! changed dummy dimensions from 1 to *. (ACH) -! 19930809 Changed to generic intrinsic names; changed names of -! subprograms and Common blocks to DLSODE etc. (ACH) +!***ROUTINES CALLED DEWSET, DINTDY, DUMACH, DSTODE, DVNORM, XERRWD +!***COMMON BLOCKS DLS001 +!***REVISION HISTORY (YYYYMdmdv) +! 19791129 DATE WRITTEN +! 19791213 Minor changes to declarations; DELP init. in STODE. +! 19800118 Treat NEQ as array; integer declarations added throughout; +! minor changes to prologue. +! 19800306 Corrected TESCO(1,NQP1) setting in CFODE. +! 19800519 Corrected access of YH on forced order reduction; +! numerous corrections to prologues and other comments. +! 19800617 In main driver, added loading of SQRT(UROUND) in RWORK; +! minor corrections to main prologue. +! 19800923 Added zero initialization of HU and NQU. +! 19801218 Revised XERRWD routine; minor corrections to main prologue. +! 19810401 Minor changes to comments and an error message. +! 19810814 Numerous revisions: replaced EWT by 1/EWT; used flags +! JCUR, ICF, IERPJ, IERSL between STODE and subordinates; +! added tuning parameters CCMAX, MAXCOR, MSBP, MXNCF; +! reorganized returns from STODE; reorganized type decls.; +! fixed message length in XERRWD; changed default LUNIT to 6; +! changed Common lengths; changed comments throughout. +! 19870330 Major update by ACH: corrected comments throughout; +! removed TRET from Common; rewrote EWSET with 4 loops; +! fixed t test in INTDY; added Cray directives in STODE; +! in STODE, fixed DELP init. and logic around PJAC call; +! combined routines to save/restore Common; +! passed LEVEL = 0 in error message calls (except run abort). +! 19890426 Modified prologue to SLATEC/LDOC format. (FNF) +! 19890501 Many improvements to prologue. (FNF) +! 19890503 A few final corrections to prologue. (FNF) +! 19890504 Minor cosmetic changes. (FNF) +! 19890510 Corrected description of Y in Arguments section. (FNF) +! 19890517 Minor corrections to prologue. (FNF) +! 19920514 Updated with prologue edited 891025 by G. Shaw for manual. +! 19920515 Converted source lines to upper case. (FNF) +! 19920603 Revised XERRWD calls using mixed upper-lower case. (ACH) +! 19920616 Revised prologue comment regarding CFT. (ACH) +! 19921116 Revised prologue comments regarding Common. (ACH). +! 19930326 Added comment about non-reentrancy. (FNF) +! 19930723 Changed D1MACH to DUMACH. (FNF) +! 19930801 Removed ILLIN and NTREP from Common (affects driver logic); +! minor changes to prologue and internal comments; +! changed Hollerith strings to quoted strings; +! changed internal comments to mixed case; +! replaced XERRWD with new version using character type; +! changed dummy dimensions from 1 to *. (ACH) +! 19930809 Changed to generic intrinsic names; changed names of +! subprograms and Common blocks to DLSODE etc. (ACH) ! 19930929 Eliminated use of REAL intrinsic; other minor changes. (ACH) -! 20010412 Removed all 'own' variables from Common block /DLS001/ -! (affects declarations in 6 routines). (ACH) -! 20010509 Minor corrections to prologue. (ACH) -! 20031105 Restored 'own' variables to Common block /DLS001/, to -! enable interrupt/restart feature. (ACH) -! 20031112 Added SAVE statements for data-loaded constants. -! -!***END PROLOGUE DLSODE -! -!*Internal Notes: -! -! Other Routines in the DLSODE Package. -! -! In addition to Subroutine DLSODE, the DLSODE package includes the -! following subroutines and function routines: -! DINTDY computes an interpolated value of the y vector at t = TOUT. -! DSTODE is the core integrator, which does one step of the -! integration and the associated error control. -! DCFODE sets all method coefficients and test constants. -! DPREPJ computes and preprocesses the Jacobian matrix J = df/dy -! and the Newton iteration matrix P = I - h*l0*J. -! DSOLSY manages solution of linear system in chord iteration. -! DEWSET sets the error weight vector EWT before each step. -! DVNORM computes the weighted R.M.S. norm of a vector. -! DSRCOM is a user-callable routine to save and restore -! the contents of the internal Common block. -! DGEFA and DGESL are routines from LINPACK for solving full -! systems of linear algebraic equations. -! DGBFA and DGBSL are routines from LINPACK for solving banded -! linear systems. -! DUMACH computes the unit roundoff in a machine-independent manner. -! XERRWD, XSETUN, XSETF, IXSAV, IUMACH handle the printing of all -! error messages and warnings. XERRWD is machine-dependent. -! Note: DVNORM, DUMACH, IXSAV, and IUMACH are function routines. -! All the others are subroutines. -! -!**End -! +! 20010412 Removed all 'own' variables from Common block /DLS001/ +! (affects declarations in 6 routines). (ACH) +! 20010509 Minor corrections to prologue. (ACH) +! 20031105 Restored 'own' variables to Common block /DLS001/, to +! enable interrupt/restart feature. (ACH) +! 20031112 Added SAVE statements for data-loaded constants. +! +!***END PROLOGUE DLSODE +! +!*Internal Notes: +! +! Other Routines in the DLSODE Package. +! +! In addition to Subroutine DLSODE, the DLSODE package includes the +! following subroutines and function routines: +! DINTDY computes an interpolated value of the y vector at t = TOUT. +! DSTODE is the core integrator, which does one step of the +! integration and the associated error control. +! DCFODE sets all method coefficients and test constants. +! DPREPJ computes and preprocesses the Jacobian matrix J = df/dy +! and the Newton iteration matrix P = I - h*l0*J. +! DSOLSY manages solution of linear system in chord iteration. +! DEWSET sets the error weight vector EWT before each step. +! DVNORM computes the weighted R.M.S. norm of a vector. +! DSRCOM is a user-callable routine to save and restore +! the contents of the internal Common block. +! DGEFA and DGESL are routines from LINPACK for solving full +! systems of linear algebraic equations. +! DGBFA and DGBSL are routines from LINPACK for solving banded +! linear systems. +! DUMACH computes the unit roundoff in a machine-independent manner. +! XERRWD, XSETUN, XSETF, IXSAV, IUMACH handle the printing of all +! error messages and warnings. XERRWD is machine-dependent. +! Note: DVNORM, DUMACH, IXSAV, and IUMACH are function routines. +! All the others are subroutines. +! +!**End +! ! Declare externals. -! Note: they are now internal - !EXTERNAL DPREPJ, DSOLSY - !REAL(kind=dp) DUMACH, DVNORM -! -! Declare all other variables. +! Note: they are now internal + !EXTERNAL DPREPJ, DSOLSY + !REAL(kind=dp) DUMACH, DVNORM +! +! Declare all other variables. INTEGER INIT, MXSTEP, MXHNIL, NHNIL, NSLAST, NYH, IOWNS, & ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, & LYH, LEWT, LACOR, LSAVF, LWM, LIWM, METH, MITER, & - MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU + MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU INTEGER I, I1, I2, IFLAG, IMXER, KGO, LF0, & - LENIW, LENRW, LENWM, ML, MORD(2), MU, MXHNL0, MXSTP0 + LENIW, LENRW, LENWM, ML, MORD(2), MU, MXHNL0, MXSTP0 REAL(kind=dp) ROWNS, & - CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND + CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND REAL(kind=dp) AbsTolI, AYI, BIG, EWTI, H0, HMAX, HMX, RH, RelTolI, & - TCRIT, TDIST, TNEXT, TOL, TOLSF, TP, SIZE, SUM, W0 + TCRIT, TDIST, TNEXT, TOL, TOLSF, TP, SIZE, SUM, W0 - LOGICAL IHIT - CHARACTER*80 MSG - SAVE MORD, MXSTP0, MXHNL0 -!----------------------------------------------------------------------- -! The following internal Common block contains -! (a) variables which are local to any subroutine but whose values must -! be preserved between calls to the routine ("own" variables), and -! (b) variables which are communicated between subroutines. -! The block DLS001 is declared in subroutines DLSODE, DINTDY, DSTODE, -! DPREPJ, and DSOLSY. -! Groups of variables are replaced by dummy arrays in the Common -! declarations in routines where those variables are not used. + LOGICAL IHIT + CHARACTER*80 MSG + SAVE MORD, MXSTP0, MXHNL0 +!----------------------------------------------------------------------- +! The following internal Common block contains +! (a) variables which are local to any subroutine but whose values must +! be preserved between calls to the routine ("own" variables), and +! (b) variables which are communicated between subroutines. +! The block DLS001 is declared in subroutines DLSODE, DINTDY, DSTODE, +! DPREPJ, and DSOLSY. +! Groups of variables are replaced by dummy arrays in the Common +! declarations in routines where those variables are not used. !----------------------------------------------------------------------- COMMON /DLS001/ ROWNS(209), & CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND, & INIT, MXSTEP, MXHNIL, NHNIL, NSLAST, NYH, IOWNS(6), & ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, & LYH, LEWT, LACOR, LSAVF, LWM, LIWM, METH, MITER, & - MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU -! - DATA MORD(1),MORD(2)/12,5/, MXSTP0/5000/, MXHNL0/10/ -!----------------------------------------------------------------------- -! Block A. -! This code block is executed on every call. -! It tests ISTATE and ITASK for legality and branches appropriately. -! If ISTATE .GT. 1 but the flag INIT shows that initialization has -! not yet been done, an error return occurs. -! If ISTATE = 1 and TOUT = T, return immediately. -!----------------------------------------------------------------------- -! -!***FIRST EXECUTABLE STATEMENT DLSODE - IF (ISTATE .LT. 1 .OR. ISTATE .GT. 3) GO TO 601 - IF (ITASK .LT. 1 .OR. ITASK .GT. 5) GO TO 602 - IF (ISTATE .EQ. 1) GO TO 10 - IF (INIT .EQ. 0) GO TO 603 - IF (ISTATE .EQ. 2) GO TO 200 - GO TO 20 - 10 INIT = 0 - IF (TOUT .EQ. T) RETURN -!----------------------------------------------------------------------- -! Block B. -! The next code block is executed for the initial call (ISTATE = 1), -! or for a continuation call with parameter changes (ISTATE = 3). -! It contains checking of all inputs and various initializations. -! -! First check legality of the non-optional inputs NEQ, ITOL, IOPT, -! MF, ML, and MU. -!----------------------------------------------------------------------- - 20 IF (NEQ .LE. 0) GO TO 604 - IF (ISTATE .EQ. 1) GO TO 25 - IF (NEQ .GT. N) GO TO 605 - 25 N = NEQ - IF (ITOL .LT. 1 .OR. ITOL .GT. 4) GO TO 606 - IF (IOPT .LT. 0 .OR. IOPT .GT. 1) GO TO 607 - METH = MF/10 - MITER = MF - 10*METH - IF (METH .LT. 1 .OR. METH .GT. 2) GO TO 608 - IF (MITER .LT. 0 .OR. MITER .GT. 5) GO TO 608 - IF (MITER .LE. 3) GO TO 30 - ML = IWORK(1) - MU = IWORK(2) - IF (ML .LT. 0 .OR. ML .GE. N) GO TO 609 - IF (MU .LT. 0 .OR. MU .GE. N) GO TO 610 - 30 CONTINUE + MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU +! + DATA MORD(1),MORD(2)/12,5/, MXSTP0/5000/, MXHNL0/10/ +!----------------------------------------------------------------------- +! Block A. +! This code block is executed on every call. +! It tests ISTATE and ITASK for legality and branches appropriately. +! If ISTATE .GT. 1 but the flag INIT shows that initialization has +! not yet been done, an error return occurs. +! If ISTATE = 1 and TOUT = T, return immediately. +!----------------------------------------------------------------------- +! +!***FIRST EXECUTABLE STATEMENT DLSODE + IF (ISTATE .LT. 1 .OR. ISTATE .GT. 3) GO TO 601 + IF (ITASK .LT. 1 .OR. ITASK .GT. 5) GO TO 602 + IF (ISTATE .EQ. 1) GO TO 10 + IF (INIT .EQ. 0) GO TO 603 + IF (ISTATE .EQ. 2) GO TO 200 + GO TO 20 + 10 INIT = 0 + IF (TOUT .EQ. T) RETURN +!----------------------------------------------------------------------- +! Block B. +! The next code block is executed for the initial call (ISTATE = 1), +! or for a continuation call with parameter changes (ISTATE = 3). +! It contains checking of all inputs and various initializations. +! +! First check legality of the non-optional inputs NEQ, ITOL, IOPT, +! MF, ML, and MU. +!----------------------------------------------------------------------- + 20 IF (NEQ .LE. 0) GO TO 604 + IF (ISTATE .EQ. 1) GO TO 25 + IF (NEQ .GT. N) GO TO 605 + 25 N = NEQ + IF (ITOL .LT. 1 .OR. ITOL .GT. 4) GO TO 606 + IF (IOPT .LT. 0 .OR. IOPT .GT. 1) GO TO 607 + METH = MF/10 + MITER = MF - 10*METH + IF (METH .LT. 1 .OR. METH .GT. 2) GO TO 608 + IF (MITER .LT. 0 .OR. MITER .GT. 5) GO TO 608 + IF (MITER .LE. 3) GO TO 30 + ML = IWORK(1) + MU = IWORK(2) + IF (ML .LT. 0 .OR. ML .GE. N) GO TO 609 + IF (MU .LT. 0 .OR. MU .GE. N) GO TO 610 + 30 CONTINUE ! Next process and check the optional inputs. -------------------------- - IF (IOPT .EQ. 1) GO TO 40 - MAXORD = MORD(METH) - MXSTEP = MXSTP0 - MXHNIL = MXHNL0 - IF (ISTATE .EQ. 1) H0 = 0.0D0 - HMXI = 0.0D0 - HMIN = 0.0D0 - GO TO 60 - 40 MAXORD = IWORK(5) - IF (MAXORD .LT. 0) GO TO 611 - IF (MAXORD .EQ. 0) MAXORD = 100 - MAXORD = MIN(MAXORD,MORD(METH)) - MXSTEP = IWORK(6) - IF (MXSTEP .LT. 0) GO TO 612 - IF (MXSTEP .EQ. 0) MXSTEP = MXSTP0 - MXHNIL = IWORK(7) - IF (MXHNIL .LT. 0) GO TO 613 - IF (MXHNIL .EQ. 0) MXHNIL = MXHNL0 - IF (ISTATE .NE. 1) GO TO 50 - H0 = RWORK(5) - IF ((TOUT - T)*H0 .LT. 0.0D0) GO TO 614 - 50 HMAX = RWORK(6) - IF (HMAX .LT. 0.0D0) GO TO 615 - HMXI = 0.0D0 - IF (HMAX .GT. 0.0D0) HMXI = 1.0D0/HMAX - HMIN = RWORK(7) - IF (HMIN .LT. 0.0D0) GO TO 616 -!----------------------------------------------------------------------- -! Set work array pointers and check lengths LRW and LIW. -! Pointers to segments of RWORK and IWORK are named by prefixing L to -! the name of the segment. E.g., the segment YH starts at RWORK(LYH). -! Segments of RWORK (in order) are denoted YH, WM, EWT, SAVF, ACOR. -!----------------------------------------------------------------------- - 60 LYH = 21 - IF (ISTATE .EQ. 1) NYH = N - LWM = LYH + (MAXORD + 1)*NYH - IF (MITER .EQ. 0) LENWM = 0 - IF (MITER .EQ. 1 .OR. MITER .EQ. 2) LENWM = N*N + 2 - IF (MITER .EQ. 3) LENWM = N + 2 - IF (MITER .GE. 4) LENWM = (2*ML + MU + 1)*N + 2 - LEWT = LWM + LENWM - LSAVF = LEWT + N - LACOR = LSAVF + N - LENRW = LACOR + N - 1 - IWORK(17) = LENRW - LIWM = 1 - LENIW = 20 + N - IF (MITER .EQ. 0 .OR. MITER .EQ. 3) LENIW = 20 - IWORK(18) = LENIW - IF (LENRW .GT. LRW) GO TO 617 - IF (LENIW .GT. LIW) GO TO 618 + IF (IOPT .EQ. 1) GO TO 40 + MAXORD = MORD(METH) + MXSTEP = MXSTP0 + MXHNIL = MXHNL0 + IF (ISTATE .EQ. 1) H0 = 0.0D0 + HMXI = 0.0D0 + HMIN = 0.0D0 + GO TO 60 + 40 MAXORD = IWORK(5) + IF (MAXORD .LT. 0) GO TO 611 + IF (MAXORD .EQ. 0) MAXORD = 100 + MAXORD = MIN(MAXORD,MORD(METH)) + MXSTEP = IWORK(6) + IF (MXSTEP .LT. 0) GO TO 612 + IF (MXSTEP .EQ. 0) MXSTEP = MXSTP0 + MXHNIL = IWORK(7) + IF (MXHNIL .LT. 0) GO TO 613 + IF (MXHNIL .EQ. 0) MXHNIL = MXHNL0 + IF (ISTATE .NE. 1) GO TO 50 + H0 = RWORK(5) + IF ((TOUT - T)*H0 .LT. 0.0D0) GO TO 614 + 50 HMAX = RWORK(6) + IF (HMAX .LT. 0.0D0) GO TO 615 + HMXI = 0.0D0 + IF (HMAX .GT. 0.0D0) HMXI = 1.0D0/HMAX + HMIN = RWORK(7) + IF (HMIN .LT. 0.0D0) GO TO 616 +!----------------------------------------------------------------------- +! Set work array pointers and check lengths LRW and LIW. +! Pointers to segments of RWORK and IWORK are named by prefixing L to +! the name of the segment. E.g., the segment YH starts at RWORK(LYH). +! Segments of RWORK (in order) are denoted YH, WM, EWT, SAVF, ACOR. +!----------------------------------------------------------------------- + 60 LYH = 21 + IF (ISTATE .EQ. 1) NYH = N + LWM = LYH + (MAXORD + 1)*NYH + IF (MITER .EQ. 0) LENWM = 0 + IF (MITER .EQ. 1 .OR. MITER .EQ. 2) LENWM = N*N + 2 + IF (MITER .EQ. 3) LENWM = N + 2 + IF (MITER .GE. 4) LENWM = (2*ML + MU + 1)*N + 2 + LEWT = LWM + LENWM + LSAVF = LEWT + N + LACOR = LSAVF + N + LENRW = LACOR + N - 1 + IWORK(17) = LENRW + LIWM = 1 + LENIW = 20 + N + IF (MITER .EQ. 0 .OR. MITER .EQ. 3) LENIW = 20 + IWORK(18) = LENIW + IF (LENRW .GT. LRW) GO TO 617 + IF (LENIW .GT. LIW) GO TO 618 ! Check RelTol and AbsTol for legality. ------------------------------------ - RelTolI = RelTol(1) - AbsTolI = AbsTol(1) - DO 70 I = 1,N - IF (ITOL .GE. 3) RelTolI = RelTol(I) - IF (ITOL .EQ. 2 .OR. ITOL .EQ. 4) AbsTolI = AbsTol(I) - IF (RelTolI .LT. 0.0D0) GO TO 619 - IF (AbsTolI .LT. 0.0D0) GO TO 620 - 70 CONTINUE - IF (ISTATE .EQ. 1) GO TO 100 + RelTolI = RelTol(1) + AbsTolI = AbsTol(1) + DO 70 I = 1,N + IF (ITOL .GE. 3) RelTolI = RelTol(I) + IF (ITOL .EQ. 2 .OR. ITOL .EQ. 4) AbsTolI = AbsTol(I) + IF (RelTolI .LT. 0.0D0) GO TO 619 + IF (AbsTolI .LT. 0.0D0) GO TO 620 + 70 CONTINUE + IF (ISTATE .EQ. 1) GO TO 100 ! If ISTATE = 3, set flag to signal parameter changes to DSTODE. ------- - JSTART = -1 - IF (NQ .LE. MAXORD) GO TO 90 + JSTART = -1 + IF (NQ .LE. MAXORD) GO TO 90 ! MAXORD was reduced below NQ. Copy YH(*,MAXORD+2) into SAVF. --------- - DO 80 I = 1,N - 80 RWORK(I+LSAVF-1) = RWORK(I+LWM-1) + DO 80 I = 1,N + 80 RWORK(I+LSAVF-1) = RWORK(I+LWM-1) ! Reload WM(1) = RWORK(LWM), since LWM may have changed. --------------- - 90 IF (MITER .GT. 0) RWORK(LWM) = SQRT(UROUND) - IF (N .EQ. NYH) GO TO 200 + 90 IF (MITER .GT. 0) RWORK(LWM) = SQRT(UROUND) + IF (N .EQ. NYH) GO TO 200 ! NEQ was reduced. Zero part of YH to avoid undefined references. ----- - I1 = LYH + L*NYH - I2 = LYH + (MAXORD + 1)*NYH - 1 - IF (I1 .GT. I2) GO TO 200 - DO 95 I = I1,I2 - 95 RWORK(I) = 0.0D0 - GO TO 200 -!----------------------------------------------------------------------- -! Block C. -! The next block is for the initial call only (ISTATE = 1). -! It contains all remaining initializations, the initial call to F, -! and the calculation of the initial step size. -! The error weights in EWT are inverted after being loaded. -!----------------------------------------------------------------------- - 100 UROUND = DUMACH() - TN = T - IF (ITASK .NE. 4 .AND. ITASK .NE. 5) GO TO 110 - TCRIT = RWORK(1) - IF ((TCRIT - TOUT)*(TOUT - T) .LT. 0.0D0) GO TO 625 + I1 = LYH + L*NYH + I2 = LYH + (MAXORD + 1)*NYH - 1 + IF (I1 .GT. I2) GO TO 200 + DO 95 I = I1,I2 + 95 RWORK(I) = 0.0D0 + GO TO 200 +!----------------------------------------------------------------------- +! Block C. +! The next block is for the initial call only (ISTATE = 1). +! It contains all remaining initializations, the initial call to F, +! and the calculation of the initial step size. +! The error weights in EWT are inverted after being loaded. +!----------------------------------------------------------------------- + 100 UROUND = DUMACH() + TN = T + IF (ITASK .NE. 4 .AND. ITASK .NE. 5) GO TO 110 + TCRIT = RWORK(1) + IF ((TCRIT - TOUT)*(TOUT - T) .LT. 0.0D0) GO TO 625 IF (H0 .NE. 0.0D0 .AND. (T + H0 - TCRIT)*H0 .GT. 0.0D0) & - H0 = TCRIT - T - 110 JSTART = 0 - IF (MITER .GT. 0) RWORK(LWM) = SQRT(UROUND) - NHNIL = 0 - NST = 0 - NJE = 0 - NSLAST = 0 - HU = 0.0D0 - NQU = 0 - CCMAX = 0.3D0 - MAXCOR = 3 - MSBP = 20 - MXNCF = 10 + H0 = TCRIT - T + 110 JSTART = 0 + IF (MITER .GT. 0) RWORK(LWM) = SQRT(UROUND) + NHNIL = 0 + NST = 0 + NJE = 0 + NSLAST = 0 + HU = 0.0D0 + NQU = 0 + CCMAX = 0.3D0 + MAXCOR = 3 + MSBP = 20 + MXNCF = 10 ! Initial call to F. (LF0 points to YH(*,2).) ------------------------- - LF0 = LYH + NYH - CALL F (NEQ, T, Y, RWORK(LF0)) - NFE = 1 + LF0 = LYH + NYH + CALL F (NEQ, T, Y, RWORK(LF0)) + NFE = 1 ! Load the initial value vector in YH. --------------------------------- - DO 115 I = 1,N - 115 RWORK(I+LYH-1) = Y(I) + DO 115 I = 1,N + 115 RWORK(I+LYH-1) = Y(I) ! Load and invert the EWT array. (H is temporarily set to 1.0.) ------- - NQ = 1 - H = 1.0D0 - CALL DEWSET (N, ITOL, RelTol, AbsTol, RWORK(LYH), RWORK(LEWT)) - DO 120 I = 1,N - IF (RWORK(I+LEWT-1) .LE. 0.0D0) GO TO 621 - 120 RWORK(I+LEWT-1) = 1.0D0/RWORK(I+LEWT-1) -!----------------------------------------------------------------------- -! The coding below computes the step size, H0, to be attempted on the -! first step, unless the user has supplied a value for this. -! First check that TOUT - T differs significantly from zero. -! A scalar tolerance quantity TOL is computed, as MAX(RelTol(I)) -! if this is positive, or MAX(AbsTol(I)/ABS(Y(I))) otherwise, adjusted -! so as to be between 100*UROUND and 1.0E-3. -! Then the computed value H0 is given by.. -! NEQ -! H0**2 = TOL / ( w0**-2 + (1/NEQ) * SUM ( f(i)/ywt(i) )**2 ) -! 1 -! where w0 = MAX ( ABS(T), ABS(TOUT) ), -! f(i) = i-th component of initial value of f, -! ywt(i) = EWT(i)/TOL (a weight for y(i)). -! The sign of H0 is inferred from the initial values of TOUT and T. -!----------------------------------------------------------------------- - IF (H0 .NE. 0.0D0) GO TO 180 - TDIST = ABS(TOUT - T) - W0 = MAX(ABS(T),ABS(TOUT)) - IF (TDIST .LT. 2.0D0*UROUND*W0) GO TO 622 - TOL = RelTol(1) - IF (ITOL .LE. 2) GO TO 140 - DO 130 I = 1,N - 130 TOL = MAX(TOL,RelTol(I)) - 140 IF (TOL .GT. 0.0D0) GO TO 160 - AbsTolI = AbsTol(1) - DO 150 I = 1,N - IF (ITOL .EQ. 2 .OR. ITOL .EQ. 4) AbsTolI = AbsTol(I) - AYI = ABS(Y(I)) - IF (AYI .NE. 0.0D0) TOL = MAX(TOL,AbsTolI/AYI) - 150 CONTINUE - 160 TOL = MAX(TOL,100.0D0*UROUND) - TOL = MIN(TOL,0.001D0) - SUM = DVNORM (N, RWORK(LF0), RWORK(LEWT)) - SUM = 1.0D0/(TOL*W0*W0) + TOL*SUM**2 - H0 = 1.0D0/SQRT(SUM) - H0 = MIN(H0,TDIST) - H0 = SIGN(H0,TOUT-T) + NQ = 1 + H = 1.0D0 + CALL DEWSET (N, ITOL, RelTol, AbsTol, RWORK(LYH), RWORK(LEWT)) + DO 120 I = 1,N + IF (RWORK(I+LEWT-1) .LE. 0.0D0) GO TO 621 + 120 RWORK(I+LEWT-1) = 1.0D0/RWORK(I+LEWT-1) +!----------------------------------------------------------------------- +! The coding below computes the step size, H0, to be attempted on the +! first step, unless the user has supplied a value for this. +! First check that TOUT - T differs significantly from zero. +! A scalar tolerance quantity TOL is computed, as MAX(RelTol(I)) +! if this is positive, or MAX(AbsTol(I)/ABS(Y(I))) otherwise, adjusted +! so as to be between 100*UROUND and 1.0E-3. +! Then the computed value H0 is given by.. +! NEQ +! H0**2 = TOL / ( w0**-2 + (1/NEQ) * SUM ( f(i)/ywt(i) )**2 ) +! 1 +! where w0 = MAX ( ABS(T), ABS(TOUT) ), +! f(i) = i-th component of initial value of f, +! ywt(i) = EWT(i)/TOL (a weight for y(i)). +! The sign of H0 is inferred from the initial values of TOUT and T. +!----------------------------------------------------------------------- + IF (H0 .NE. 0.0D0) GO TO 180 + TDIST = ABS(TOUT - T) + W0 = MAX(ABS(T),ABS(TOUT)) + IF (TDIST .LT. 2.0D0*UROUND*W0) GO TO 622 + TOL = RelTol(1) + IF (ITOL .LE. 2) GO TO 140 + DO 130 I = 1,N + 130 TOL = MAX(TOL,RelTol(I)) + 140 IF (TOL .GT. 0.0D0) GO TO 160 + AbsTolI = AbsTol(1) + DO 150 I = 1,N + IF (ITOL .EQ. 2 .OR. ITOL .EQ. 4) AbsTolI = AbsTol(I) + AYI = ABS(Y(I)) + IF (AYI .NE. 0.0D0) TOL = MAX(TOL,AbsTolI/AYI) + 150 CONTINUE + 160 TOL = MAX(TOL,100.0D0*UROUND) + TOL = MIN(TOL,0.001D0) + SUM = DVNORM (N, RWORK(LF0), RWORK(LEWT)) + SUM = 1.0D0/(TOL*W0*W0) + TOL*SUM**2 + H0 = 1.0D0/SQRT(SUM) + H0 = MIN(H0,TDIST) + H0 = SIGN(H0,TOUT-T) ! Adjust H0 if necessary to meet HMAX bound. --------------------------- - 180 RH = ABS(H0)*HMXI - IF (RH .GT. 1.0D0) H0 = H0/RH + 180 RH = ABS(H0)*HMXI + IF (RH .GT. 1.0D0) H0 = H0/RH ! Load H with H0 and scale YH(*,2) by H0. ------------------------------ - H = H0 - DO 190 I = 1,N - 190 RWORK(I+LF0-1) = H0*RWORK(I+LF0-1) - GO TO 270 -!----------------------------------------------------------------------- -! Block D. -! The next code block is for continuation calls only (ISTATE = 2 or 3) -! and is to check stop conditions before taking a step. -!----------------------------------------------------------------------- - 200 NSLAST = NST - GO TO (210, 250, 220, 230, 240), ITASK - 210 IF ((TN - TOUT)*H .LT. 0.0D0) GO TO 250 - CALL DINTDY (TOUT, 0, RWORK(LYH), NYH, Y, IFLAG) - IF (IFLAG .NE. 0) GO TO 627 - T = TOUT - GO TO 420 - 220 TP = TN - HU*(1.0D0 + 100.0D0*UROUND) - IF ((TP - TOUT)*H .GT. 0.0D0) GO TO 623 - IF ((TN - TOUT)*H .LT. 0.0D0) GO TO 250 - GO TO 400 - 230 TCRIT = RWORK(1) - IF ((TN - TCRIT)*H .GT. 0.0D0) GO TO 624 - IF ((TCRIT - TOUT)*H .LT. 0.0D0) GO TO 625 - IF ((TN - TOUT)*H .LT. 0.0D0) GO TO 245 - CALL DINTDY (TOUT, 0, RWORK(LYH), NYH, Y, IFLAG) - IF (IFLAG .NE. 0) GO TO 627 - T = TOUT - GO TO 420 - 240 TCRIT = RWORK(1) - IF ((TN - TCRIT)*H .GT. 0.0D0) GO TO 624 - 245 HMX = ABS(TN) + ABS(H) - IHIT = ABS(TN - TCRIT) .LE. 100.0D0*UROUND*HMX - IF (IHIT) GO TO 400 - TNEXT = TN + H*(1.0D0 + 4.0D0*UROUND) - IF ((TNEXT - TCRIT)*H .LE. 0.0D0) GO TO 250 - H = (TCRIT - TN)*(1.0D0 - 4.0D0*UROUND) - IF (ISTATE .EQ. 2) JSTART = -2 -!----------------------------------------------------------------------- -! Block E. -! The next block is normally executed for all calls and contains -! the call to the one-step core integrator DSTODE. -! -! This is a looping point for the integration steps. -! -! First check for too many steps being taken, update EWT (if not at -! start of problem), check for too much accuracy being requested, and -! check for H below the roundoff level in T. -!----------------------------------------------------------------------- - 250 CONTINUE - IF ((NST-NSLAST) .GE. MXSTEP) GO TO 500 - CALL DEWSET (N, ITOL, RelTol, AbsTol, RWORK(LYH), RWORK(LEWT)) - DO 260 I = 1,N - IF (RWORK(I+LEWT-1) .LE. 0.0D0) GO TO 510 - 260 RWORK(I+LEWT-1) = 1.0D0/RWORK(I+LEWT-1) - 270 TOLSF = UROUND*DVNORM (N, RWORK(LYH), RWORK(LEWT)) - IF (TOLSF .LE. 1.0D0) GO TO 280 - TOLSF = TOLSF*2.0D0 - IF (NST .EQ. 0) GO TO 626 - GO TO 520 - 280 IF ((TN + H) .NE. TN) GO TO 290 - NHNIL = NHNIL + 1 - IF (NHNIL .GT. MXHNIL) GO TO 290 - MSG = 'DLSODE- Warning..internal T (=R1) and H (=R2) are' - CALL XERRWD (MSG, 50, 101, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) - MSG=' such that in the machine, T + H = T on the next step ' - CALL XERRWD (MSG, 60, 101, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) - MSG = ' (H = step size). Solver will continue anyway' - CALL XERRWD (MSG, 50, 101, 0, 0, 0, 0, 2, TN, H) - IF (NHNIL .LT. MXHNIL) GO TO 290 - MSG = 'DLSODE- Above warning has been issued I1 times. ' - CALL XERRWD (MSG, 50, 102, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) - MSG = ' It will not be issued again for this problem' - CALL XERRWD (MSG, 50, 102, 0, 1, MXHNIL, 0, 0, 0.0D0, 0.0D0) - 290 CONTINUE + H = H0 + DO 190 I = 1,N + 190 RWORK(I+LF0-1) = H0*RWORK(I+LF0-1) + GO TO 270 +!----------------------------------------------------------------------- +! Block D. +! The next code block is for continuation calls only (ISTATE = 2 or 3) +! and is to check stop conditions before taking a step. +!----------------------------------------------------------------------- + 200 NSLAST = NST + GO TO (210, 250, 220, 230, 240), ITASK + 210 IF ((TN - TOUT)*H .LT. 0.0D0) GO TO 250 + CALL DINTDY (TOUT, 0, RWORK(LYH), NYH, Y, IFLAG) + IF (IFLAG .NE. 0) GO TO 627 + T = TOUT + GO TO 420 + 220 TP = TN - HU*(1.0D0 + 100.0D0*UROUND) + IF ((TP - TOUT)*H .GT. 0.0D0) GO TO 623 + IF ((TN - TOUT)*H .LT. 0.0D0) GO TO 250 + GO TO 400 + 230 TCRIT = RWORK(1) + IF ((TN - TCRIT)*H .GT. 0.0D0) GO TO 624 + IF ((TCRIT - TOUT)*H .LT. 0.0D0) GO TO 625 + IF ((TN - TOUT)*H .LT. 0.0D0) GO TO 245 + CALL DINTDY (TOUT, 0, RWORK(LYH), NYH, Y, IFLAG) + IF (IFLAG .NE. 0) GO TO 627 + T = TOUT + GO TO 420 + 240 TCRIT = RWORK(1) + IF ((TN - TCRIT)*H .GT. 0.0D0) GO TO 624 + 245 HMX = ABS(TN) + ABS(H) + IHIT = ABS(TN - TCRIT) .LE. 100.0D0*UROUND*HMX + IF (IHIT) GO TO 400 + TNEXT = TN + H*(1.0D0 + 4.0D0*UROUND) + IF ((TNEXT - TCRIT)*H .LE. 0.0D0) GO TO 250 + H = (TCRIT - TN)*(1.0D0 - 4.0D0*UROUND) + IF (ISTATE .EQ. 2) JSTART = -2 +!----------------------------------------------------------------------- +! Block E. +! The next block is normally executed for all calls and contains +! the call to the one-step core integrator DSTODE. +! +! This is a looping point for the integration steps. +! +! First check for too many steps being taken, update EWT (if not at +! start of problem), check for too much accuracy being requested, and +! check for H below the roundoff level in T. +!----------------------------------------------------------------------- + 250 CONTINUE + IF ((NST-NSLAST) .GE. MXSTEP) GO TO 500 + CALL DEWSET (N, ITOL, RelTol, AbsTol, RWORK(LYH), RWORK(LEWT)) + DO 260 I = 1,N + IF (RWORK(I+LEWT-1) .LE. 0.0D0) GO TO 510 + 260 RWORK(I+LEWT-1) = 1.0D0/RWORK(I+LEWT-1) + 270 TOLSF = UROUND*DVNORM (N, RWORK(LYH), RWORK(LEWT)) + IF (TOLSF .LE. 1.0D0) GO TO 280 + TOLSF = TOLSF*2.0D0 + IF (NST .EQ. 0) GO TO 626 + GO TO 520 + 280 IF ((TN + H) .NE. TN) GO TO 290 + NHNIL = NHNIL + 1 + IF (NHNIL .GT. MXHNIL) GO TO 290 + MSG = 'DLSODE- Warning..internal T (=R1) and H (=R2) are' + CALL XERRWD (MSG, 50, 101, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) + MSG=' such that in the machine, T + H = T on the next step ' + CALL XERRWD (MSG, 60, 101, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) + MSG = ' (H = step size). Solver will continue anyway' + CALL XERRWD (MSG, 50, 101, 0, 0, 0, 0, 2, TN, H) + IF (NHNIL .LT. MXHNIL) GO TO 290 + MSG = 'DLSODE- Above warning has been issued I1 times. ' + CALL XERRWD (MSG, 50, 102, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) + MSG = ' It will not be issued again for this problem' + CALL XERRWD (MSG, 50, 102, 0, 1, MXHNIL, 0, 0, 0.0D0, 0.0D0) + 290 CONTINUE !----------------------------------------------------------------------- ! CALL DSTODE(NEQ,Y,YH,NYH,YH,EWT,SAVF,ACOR,WM,IWM,F,JAC,DPREPJ,DSOLSY) !----------------------------------------------------------------------- CALL DSTODE (NEQ, Y, RWORK(LYH), NYH, RWORK(LYH), RWORK(LEWT), & RWORK(LSAVF), RWORK(LACOR), RWORK(LWM), IWORK(LIWM), & - F, JAC) - !F, JAC, DPREPJ, DSOLSY) - KGO = 1 - KFLAG - GO TO (300, 530, 540), KGO + F, JAC) + !F, JAC, DPREPJ, DSOLSY) + KGO = 1 - KFLAG + GO TO (300, 530, 540), KGO !----------------------------------------------------------------------- -! Block F. -! The following block handles the case of a successful return from the -! core integrator (KFLAG = 0). Test for stop conditions. +! Block F. +! The following block handles the case of a successful return from the +! core integrator (KFLAG = 0). Test for stop conditions. !----------------------------------------------------------------------- - 300 INIT = 1 - GO TO (310, 400, 330, 340, 350), ITASK + 300 INIT = 1 + GO TO (310, 400, 330, 340, 350), ITASK ! ITASK = 1. If TOUT has been reached, interpolate. ------------------- - 310 IF ((TN - TOUT)*H .LT. 0.0D0) GO TO 250 - CALL DINTDY (TOUT, 0, RWORK(LYH), NYH, Y, IFLAG) - T = TOUT - GO TO 420 + 310 IF ((TN - TOUT)*H .LT. 0.0D0) GO TO 250 + CALL DINTDY (TOUT, 0, RWORK(LYH), NYH, Y, IFLAG) + T = TOUT + GO TO 420 ! ITASK = 3. Jump to exit if TOUT was reached. ------------------------ - 330 IF ((TN - TOUT)*H .GE. 0.0D0) GO TO 400 - GO TO 250 -! ITASK = 4. See if TOUT or TCRIT was reached. Adjust H if necessary. - 340 IF ((TN - TOUT)*H .LT. 0.0D0) GO TO 345 - CALL DINTDY (TOUT, 0, RWORK(LYH), NYH, Y, IFLAG) - T = TOUT - GO TO 420 - 345 HMX = ABS(TN) + ABS(H) - IHIT = ABS(TN - TCRIT) .LE. 100.0D0*UROUND*HMX - IF (IHIT) GO TO 400 - TNEXT = TN + H*(1.0D0 + 4.0D0*UROUND) - IF ((TNEXT - TCRIT)*H .LE. 0.0D0) GO TO 250 - H = (TCRIT - TN)*(1.0D0 - 4.0D0*UROUND) - JSTART = -2 - GO TO 250 + 330 IF ((TN - TOUT)*H .GE. 0.0D0) GO TO 400 + GO TO 250 +! ITASK = 4. See if TOUT or TCRIT was reached. Adjust H if necessary. + 340 IF ((TN - TOUT)*H .LT. 0.0D0) GO TO 345 + CALL DINTDY (TOUT, 0, RWORK(LYH), NYH, Y, IFLAG) + T = TOUT + GO TO 420 + 345 HMX = ABS(TN) + ABS(H) + IHIT = ABS(TN - TCRIT) .LE. 100.0D0*UROUND*HMX + IF (IHIT) GO TO 400 + TNEXT = TN + H*(1.0D0 + 4.0D0*UROUND) + IF ((TNEXT - TCRIT)*H .LE. 0.0D0) GO TO 250 + H = (TCRIT - TN)*(1.0D0 - 4.0D0*UROUND) + JSTART = -2 + GO TO 250 ! ITASK = 5. See if TCRIT was reached and jump to exit. --------------- - 350 HMX = ABS(TN) + ABS(H) - IHIT = ABS(TN - TCRIT) .LE. 100.0D0*UROUND*HMX -!----------------------------------------------------------------------- -! Block G. -! The following block handles all successful returns from DLSODE. -! If ITASK .NE. 1, Y is loaded from YH and T is set accordingly. -! ISTATE is set to 2, and the optional outputs are loaded into the -! work arrays before returning. -!----------------------------------------------------------------------- - 400 DO 410 I = 1,N - 410 Y(I) = RWORK(I+LYH-1) - T = TN - IF (ITASK .NE. 4 .AND. ITASK .NE. 5) GO TO 420 - IF (IHIT) T = TCRIT - 420 ISTATE = 2 - RWORK(11) = HU - RWORK(12) = H - RWORK(13) = TN - IWORK(11) = NST - IWORK(12) = NFE - IWORK(13) = NJE - IWORK(14) = NQU - IWORK(15) = NQ - RETURN -!----------------------------------------------------------------------- -! Block H. -! The following block handles all unsuccessful returns other than -! those for illegal input. First the error message routine is called. -! If there was an error test or convergence test failure, IMXER is set. -! Then Y is loaded from YH and T is set to TN. The optional outputs -! are loaded into the work arrays before returning. + 350 HMX = ABS(TN) + ABS(H) + IHIT = ABS(TN - TCRIT) .LE. 100.0D0*UROUND*HMX +!----------------------------------------------------------------------- +! Block G. +! The following block handles all successful returns from DLSODE. +! If ITASK .NE. 1, Y is loaded from YH and T is set accordingly. +! ISTATE is set to 2, and the optional outputs are loaded into the +! work arrays before returning. +!----------------------------------------------------------------------- + 400 DO 410 I = 1,N + 410 Y(I) = RWORK(I+LYH-1) + T = TN + IF (ITASK .NE. 4 .AND. ITASK .NE. 5) GO TO 420 + IF (IHIT) T = TCRIT + 420 ISTATE = 2 + RWORK(11) = HU + RWORK(12) = H + RWORK(13) = TN + IWORK(11) = NST + IWORK(12) = NFE + IWORK(13) = NJE + IWORK(14) = NQU + IWORK(15) = NQ + RETURN +!----------------------------------------------------------------------- +! Block H. +! The following block handles all unsuccessful returns other than +! those for illegal input. First the error message routine is called. +! If there was an error test or convergence test failure, IMXER is set. +! Then Y is loaded from YH and T is set to TN. The optional outputs +! are loaded into the work arrays before returning. !----------------------------------------------------------------------- ! The maximum number of steps was taken before reaching TOUT. ---------- - 500 MSG = 'DLSODE- At current T (=R1), MXSTEP (=I1) steps ' - CALL XERRWD (MSG, 50, 201, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) - MSG = ' taken on this call before reaching TOUT ' - CALL XERRWD (MSG, 50, 201, 0, 1, MXSTEP, 0, 1, TN, 0.0D0) - ISTATE = -1 - GO TO 580 + 500 MSG = 'DLSODE- At current T (=R1), MXSTEP (=I1) steps ' + CALL XERRWD (MSG, 50, 201, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) + MSG = ' taken on this call before reaching TOUT ' + CALL XERRWD (MSG, 50, 201, 0, 1, MXSTEP, 0, 1, TN, 0.0D0) + ISTATE = -1 + GO TO 580 ! EWT(I) .LE. 0.0 for some I (not at start of problem). ---------------- - 510 EWTI = RWORK(LEWT+I-1) - MSG = 'DLSODE- At T (=R1), EWT(I1) has become R2 .LE. 0.' - CALL XERRWD (MSG, 50, 202, 0, 1, I, 0, 2, TN, EWTI) - ISTATE = -6 - GO TO 580 + 510 EWTI = RWORK(LEWT+I-1) + MSG = 'DLSODE- At T (=R1), EWT(I1) has become R2 .LE. 0.' + CALL XERRWD (MSG, 50, 202, 0, 1, I, 0, 2, TN, EWTI) + ISTATE = -6 + GO TO 580 ! Too much accuracy requested for machine precision. ------------------- - 520 MSG = 'DLSODE- At T (=R1), too much accuracy requested ' - CALL XERRWD (MSG, 50, 203, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) - MSG = ' for precision of machine.. see TOLSF (=R2) ' - CALL XERRWD (MSG, 50, 203, 0, 0, 0, 0, 2, TN, TOLSF) - RWORK(14) = TOLSF - ISTATE = -2 - GO TO 580 + 520 MSG = 'DLSODE- At T (=R1), too much accuracy requested ' + CALL XERRWD (MSG, 50, 203, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) + MSG = ' for precision of machine.. see TOLSF (=R2) ' + CALL XERRWD (MSG, 50, 203, 0, 0, 0, 0, 2, TN, TOLSF) + RWORK(14) = TOLSF + ISTATE = -2 + GO TO 580 ! KFLAG = -1. Error test failed repeatedly or with ABS(H) = HMIN. ----- - 530 MSG = 'DLSODE- At T(=R1) and step size H(=R2), the error' - CALL XERRWD (MSG, 50, 204, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) - MSG = ' test failed repeatedly or with ABS(H) = HMIN' - CALL XERRWD (MSG, 50, 204, 0, 0, 0, 0, 2, TN, H) - ISTATE = -4 - GO TO 560 + 530 MSG = 'DLSODE- At T(=R1) and step size H(=R2), the error' + CALL XERRWD (MSG, 50, 204, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) + MSG = ' test failed repeatedly or with ABS(H) = HMIN' + CALL XERRWD (MSG, 50, 204, 0, 0, 0, 0, 2, TN, H) + ISTATE = -4 + GO TO 560 ! KFLAG = -2. Convergence failed repeatedly or with ABS(H) = HMIN. ---- - 540 MSG = 'DLSODE- At T (=R1) and step size H (=R2), the ' - CALL XERRWD (MSG, 50, 205, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) - MSG = ' corrector convergence failed repeatedly ' - CALL XERRWD (MSG, 50, 205, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) - MSG = ' or with ABS(H) = HMIN ' - CALL XERRWD (MSG, 30, 205, 0, 0, 0, 0, 2, TN, H) - ISTATE = -5 + 540 MSG = 'DLSODE- At T (=R1) and step size H (=R2), the ' + CALL XERRWD (MSG, 50, 205, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) + MSG = ' corrector convergence failed repeatedly ' + CALL XERRWD (MSG, 50, 205, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) + MSG = ' or with ABS(H) = HMIN ' + CALL XERRWD (MSG, 30, 205, 0, 0, 0, 0, 2, TN, H) + ISTATE = -5 ! Compute IMXER if relevant. ------------------------------------------- - 560 BIG = 0.0D0 - IMXER = 1 - DO 570 I = 1,N - SIZE = ABS(RWORK(I+LACOR-1)*RWORK(I+LEWT-1)) - IF (BIG .GE. SIZE) GO TO 570 - BIG = SIZE - IMXER = I - 570 CONTINUE - IWORK(16) = IMXER + 560 BIG = 0.0D0 + IMXER = 1 + DO 570 I = 1,N + SIZE = ABS(RWORK(I+LACOR-1)*RWORK(I+LEWT-1)) + IF (BIG .GE. SIZE) GO TO 570 + BIG = SIZE + IMXER = I + 570 CONTINUE + IWORK(16) = IMXER ! Set Y vector, T, and optional outputs. ------------------------------- - 580 DO 590 I = 1,N - 590 Y(I) = RWORK(I+LYH-1) - T = TN - RWORK(11) = HU - RWORK(12) = H - RWORK(13) = TN - IWORK(11) = NST - IWORK(12) = NFE - IWORK(13) = NJE - IWORK(14) = NQU - IWORK(15) = NQ - RETURN -!----------------------------------------------------------------------- -! Block I. -! The following block handles all error returns due to illegal input -! (ISTATE = -3), as detected before calling the core integrator. -! First the error message routine is called. If the illegal input -! is a negative ISTATE, the run is aborted (apparent infinite loop). -!----------------------------------------------------------------------- - 601 MSG = 'DLSODE- ISTATE (=I1) illegal ' - CALL XERRWD (MSG, 30, 1, 0, 1, ISTATE, 0, 0, 0.0D0, 0.0D0) - IF (ISTATE .LT. 0) GO TO 800 - GO TO 700 - 602 MSG = 'DLSODE- ITASK (=I1) illegal ' - CALL XERRWD (MSG, 30, 2, 0, 1, ITASK, 0, 0, 0.0D0, 0.0D0) - GO TO 700 - 603 MSG = 'DLSODE- ISTATE .GT. 1 but DLSODE not initialized ' - CALL XERRWD (MSG, 50, 3, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) - GO TO 700 - 604 MSG = 'DLSODE- NEQ (=I1) .LT. 1 ' - CALL XERRWD (MSG, 30, 4, 0, 1, NEQ, 0, 0, 0.0D0, 0.0D0) - GO TO 700 - 605 MSG = 'DLSODE- ISTATE = 3 and NEQ increased (I1 to I2) ' - CALL XERRWD (MSG, 50, 5, 0, 2, N, NEQ, 0, 0.0D0, 0.0D0) - GO TO 700 - 606 MSG = 'DLSODE- ITOL (=I1) illegal ' - CALL XERRWD (MSG, 30, 6, 0, 1, ITOL, 0, 0, 0.0D0, 0.0D0) - GO TO 700 - 607 MSG = 'DLSODE- IOPT (=I1) illegal ' - CALL XERRWD (MSG, 30, 7, 0, 1, IOPT, 0, 0, 0.0D0, 0.0D0) - GO TO 700 - 608 MSG = 'DLSODE- MF (=I1) illegal ' - CALL XERRWD (MSG, 30, 8, 0, 1, MF, 0, 0, 0.0D0, 0.0D0) - GO TO 700 - 609 MSG = 'DLSODE- ML (=I1) illegal.. .LT.0 or .GE.NEQ (=I2)' - CALL XERRWD (MSG, 50, 9, 0, 2, ML, NEQ, 0, 0.0D0, 0.0D0) - GO TO 700 - 610 MSG = 'DLSODE- MU (=I1) illegal.. .LT.0 or .GE.NEQ (=I2)' - CALL XERRWD (MSG, 50, 10, 0, 2, MU, NEQ, 0, 0.0D0, 0.0D0) - GO TO 700 - 611 MSG = 'DLSODE- MAXORD (=I1) .LT. 0 ' - CALL XERRWD (MSG, 30, 11, 0, 1, MAXORD, 0, 0, 0.0D0, 0.0D0) - GO TO 700 - 612 MSG = 'DLSODE- MXSTEP (=I1) .LT. 0 ' - CALL XERRWD (MSG, 30, 12, 0, 1, MXSTEP, 0, 0, 0.0D0, 0.0D0) - GO TO 700 - 613 MSG = 'DLSODE- MXHNIL (=I1) .LT. 0 ' - CALL XERRWD (MSG, 30, 13, 0, 1, MXHNIL, 0, 0, 0.0D0, 0.0D0) - GO TO 700 - 614 MSG = 'DLSODE- TOUT (=R1) behind T (=R2) ' - CALL XERRWD (MSG, 40, 14, 0, 0, 0, 0, 2, TOUT, T) - MSG = ' Integration direction is given by H0 (=R1) ' - CALL XERRWD (MSG, 50, 14, 0, 0, 0, 0, 1, H0, 0.0D0) - GO TO 700 - 615 MSG = 'DLSODE- HMAX (=R1) .LT. 0.0 ' - CALL XERRWD (MSG, 30, 15, 0, 0, 0, 0, 1, HMAX, 0.0D0) - GO TO 700 - 616 MSG = 'DLSODE- HMIN (=R1) .LT. 0.0 ' - CALL XERRWD (MSG, 30, 16, 0, 0, 0, 0, 1, HMIN, 0.0D0) - GO TO 700 - 617 CONTINUE - MSG='DLSODE- RWORK length needed, LENRW (=I1), exceeds LRW (=I2)' - CALL XERRWD (MSG, 60, 17, 0, 2, LENRW, LRW, 0, 0.0D0, 0.0D0) - GO TO 700 - 618 CONTINUE - MSG='DLSODE- IWORK length needed, LENIW (=I1), exceeds LIW (=I2)' - CALL XERRWD (MSG, 60, 18, 0, 2, LENIW, LIW, 0, 0.0D0, 0.0D0) - GO TO 700 - 619 MSG = 'DLSODE- RelTol(I1) is R1 .LT. 0.0 ' - CALL XERRWD (MSG, 40, 19, 0, 1, I, 0, 1, RelTolI, 0.0D0) - GO TO 700 - 620 MSG = 'DLSODE- AbsTol(I1) is R1 .LT. 0.0 ' - CALL XERRWD (MSG, 40, 20, 0, 1, I, 0, 1, AbsTolI, 0.0D0) - GO TO 700 - 621 EWTI = RWORK(LEWT+I-1) - MSG = 'DLSODE- EWT(I1) is R1 .LE. 0.0 ' - CALL XERRWD (MSG, 40, 21, 0, 1, I, 0, 1, EWTI, 0.0D0) - GO TO 700 - 622 CONTINUE - MSG='DLSODE- TOUT (=R1) too close to T(=R2) to start integration' - CALL XERRWD (MSG, 60, 22, 0, 0, 0, 0, 2, TOUT, T) - GO TO 700 - 623 CONTINUE - MSG='DLSODE- ITASK = I1 and TOUT (=R1) behind TCUR - HU (= R2) ' - CALL XERRWD (MSG, 60, 23, 0, 1, ITASK, 0, 2, TOUT, TP) - GO TO 700 - 624 CONTINUE - MSG='DLSODE- ITASK = 4 OR 5 and TCRIT (=R1) behind TCUR (=R2) ' - CALL XERRWD (MSG, 60, 24, 0, 0, 0, 0, 2, TCRIT, TN) - GO TO 700 - 625 CONTINUE - MSG='DLSODE- ITASK = 4 or 5 and TCRIT (=R1) behind TOUT (=R2) ' - CALL XERRWD (MSG, 60, 25, 0, 0, 0, 0, 2, TCRIT, TOUT) - GO TO 700 - 626 MSG = 'DLSODE- At start of problem, too much accuracy ' - CALL XERRWD (MSG, 50, 26, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) - MSG=' requested for precision of machine.. See TOLSF (=R1) ' - CALL XERRWD (MSG, 60, 26, 0, 0, 0, 0, 1, TOLSF, 0.0D0) - RWORK(14) = TOLSF - GO TO 700 - 627 MSG = 'DLSODE- Trouble in DINTDY. ITASK = I1, TOUT = R1' - CALL XERRWD (MSG, 50, 27, 0, 1, ITASK, 0, 1, TOUT, 0.0D0) -! - 700 ISTATE = -3 - RETURN -! - 800 MSG = 'DLSODE- Run aborted.. apparent infinite loop ' - CALL XERRWD (MSG, 50, 303, 2, 0, 0, 0, 0, 0.0D0, 0.0D0) - RETURN + 580 DO 590 I = 1,N + 590 Y(I) = RWORK(I+LYH-1) + T = TN + RWORK(11) = HU + RWORK(12) = H + RWORK(13) = TN + IWORK(11) = NST + IWORK(12) = NFE + IWORK(13) = NJE + IWORK(14) = NQU + IWORK(15) = NQ + RETURN +!----------------------------------------------------------------------- +! Block I. +! The following block handles all error returns due to illegal input +! (ISTATE = -3), as detected before calling the core integrator. +! First the error message routine is called. If the illegal input +! is a negative ISTATE, the run is aborted (apparent infinite loop). +!----------------------------------------------------------------------- + 601 MSG = 'DLSODE- ISTATE (=I1) illegal ' + CALL XERRWD (MSG, 30, 1, 0, 1, ISTATE, 0, 0, 0.0D0, 0.0D0) + IF (ISTATE .LT. 0) GO TO 800 + GO TO 700 + 602 MSG = 'DLSODE- ITASK (=I1) illegal ' + CALL XERRWD (MSG, 30, 2, 0, 1, ITASK, 0, 0, 0.0D0, 0.0D0) + GO TO 700 + 603 MSG = 'DLSODE- ISTATE .GT. 1 but DLSODE not initialized ' + CALL XERRWD (MSG, 50, 3, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) + GO TO 700 + 604 MSG = 'DLSODE- NEQ (=I1) .LT. 1 ' + CALL XERRWD (MSG, 30, 4, 0, 1, NEQ, 0, 0, 0.0D0, 0.0D0) + GO TO 700 + 605 MSG = 'DLSODE- ISTATE = 3 and NEQ increased (I1 to I2) ' + CALL XERRWD (MSG, 50, 5, 0, 2, N, NEQ, 0, 0.0D0, 0.0D0) + GO TO 700 + 606 MSG = 'DLSODE- ITOL (=I1) illegal ' + CALL XERRWD (MSG, 30, 6, 0, 1, ITOL, 0, 0, 0.0D0, 0.0D0) + GO TO 700 + 607 MSG = 'DLSODE- IOPT (=I1) illegal ' + CALL XERRWD (MSG, 30, 7, 0, 1, IOPT, 0, 0, 0.0D0, 0.0D0) + GO TO 700 + 608 MSG = 'DLSODE- MF (=I1) illegal ' + CALL XERRWD (MSG, 30, 8, 0, 1, MF, 0, 0, 0.0D0, 0.0D0) + GO TO 700 + 609 MSG = 'DLSODE- ML (=I1) illegal.. .LT.0 or .GE.NEQ (=I2)' + CALL XERRWD (MSG, 50, 9, 0, 2, ML, NEQ, 0, 0.0D0, 0.0D0) + GO TO 700 + 610 MSG = 'DLSODE- MU (=I1) illegal.. .LT.0 or .GE.NEQ (=I2)' + CALL XERRWD (MSG, 50, 10, 0, 2, MU, NEQ, 0, 0.0D0, 0.0D0) + GO TO 700 + 611 MSG = 'DLSODE- MAXORD (=I1) .LT. 0 ' + CALL XERRWD (MSG, 30, 11, 0, 1, MAXORD, 0, 0, 0.0D0, 0.0D0) + GO TO 700 + 612 MSG = 'DLSODE- MXSTEP (=I1) .LT. 0 ' + CALL XERRWD (MSG, 30, 12, 0, 1, MXSTEP, 0, 0, 0.0D0, 0.0D0) + GO TO 700 + 613 MSG = 'DLSODE- MXHNIL (=I1) .LT. 0 ' + CALL XERRWD (MSG, 30, 13, 0, 1, MXHNIL, 0, 0, 0.0D0, 0.0D0) + GO TO 700 + 614 MSG = 'DLSODE- TOUT (=R1) behind T (=R2) ' + CALL XERRWD (MSG, 40, 14, 0, 0, 0, 0, 2, TOUT, T) + MSG = ' Integration direction is given by H0 (=R1) ' + CALL XERRWD (MSG, 50, 14, 0, 0, 0, 0, 1, H0, 0.0D0) + GO TO 700 + 615 MSG = 'DLSODE- HMAX (=R1) .LT. 0.0 ' + CALL XERRWD (MSG, 30, 15, 0, 0, 0, 0, 1, HMAX, 0.0D0) + GO TO 700 + 616 MSG = 'DLSODE- HMIN (=R1) .LT. 0.0 ' + CALL XERRWD (MSG, 30, 16, 0, 0, 0, 0, 1, HMIN, 0.0D0) + GO TO 700 + 617 CONTINUE + MSG='DLSODE- RWORK length needed, LENRW (=I1), exceeds LRW (=I2)' + CALL XERRWD (MSG, 60, 17, 0, 2, LENRW, LRW, 0, 0.0D0, 0.0D0) + GO TO 700 + 618 CONTINUE + MSG='DLSODE- IWORK length needed, LENIW (=I1), exceeds LIW (=I2)' + CALL XERRWD (MSG, 60, 18, 0, 2, LENIW, LIW, 0, 0.0D0, 0.0D0) + GO TO 700 + 619 MSG = 'DLSODE- RelTol(I1) is R1 .LT. 0.0 ' + CALL XERRWD (MSG, 40, 19, 0, 1, I, 0, 1, RelTolI, 0.0D0) + GO TO 700 + 620 MSG = 'DLSODE- AbsTol(I1) is R1 .LT. 0.0 ' + CALL XERRWD (MSG, 40, 20, 0, 1, I, 0, 1, AbsTolI, 0.0D0) + GO TO 700 + 621 EWTI = RWORK(LEWT+I-1) + MSG = 'DLSODE- EWT(I1) is R1 .LE. 0.0 ' + CALL XERRWD (MSG, 40, 21, 0, 1, I, 0, 1, EWTI, 0.0D0) + GO TO 700 + 622 CONTINUE + MSG='DLSODE- TOUT (=R1) too close to T(=R2) to start integration' + CALL XERRWD (MSG, 60, 22, 0, 0, 0, 0, 2, TOUT, T) + GO TO 700 + 623 CONTINUE + MSG='DLSODE- ITASK = I1 and TOUT (=R1) behind TCUR - HU (= R2) ' + CALL XERRWD (MSG, 60, 23, 0, 1, ITASK, 0, 2, TOUT, TP) + GO TO 700 + 624 CONTINUE + MSG='DLSODE- ITASK = 4 OR 5 and TCRIT (=R1) behind TCUR (=R2) ' + CALL XERRWD (MSG, 60, 24, 0, 0, 0, 0, 2, TCRIT, TN) + GO TO 700 + 625 CONTINUE + MSG='DLSODE- ITASK = 4 or 5 and TCRIT (=R1) behind TOUT (=R2) ' + CALL XERRWD (MSG, 60, 25, 0, 0, 0, 0, 2, TCRIT, TOUT) + GO TO 700 + 626 MSG = 'DLSODE- At start of problem, too much accuracy ' + CALL XERRWD (MSG, 50, 26, 0, 0, 0, 0, 0, 0.0D0, 0.0D0) + MSG=' requested for precision of machine.. See TOLSF (=R1) ' + CALL XERRWD (MSG, 60, 26, 0, 0, 0, 0, 1, TOLSF, 0.0D0) + RWORK(14) = TOLSF + GO TO 700 + 627 MSG = 'DLSODE- Trouble in DINTDY. ITASK = I1, TOUT = R1' + CALL XERRWD (MSG, 50, 27, 0, 1, ITASK, 0, 1, TOUT, 0.0D0) +! + 700 ISTATE = -3 + RETURN +! + 800 MSG = 'DLSODE- Run aborted.. apparent infinite loop ' + CALL XERRWD (MSG, 50, 303, 2, 0, 0, 0, 0, 0.0D0, 0.0D0) + RETURN !----------------------- END OF SUBROUTINE DLSODE ---------------------- - !END SUBROUTINE DLSODE - CONTAINS + !END SUBROUTINE DLSODE + CONTAINS -!DECK DUMACH - REAL(kind=dp) FUNCTION DUMACH () -!***BEGIN PROLOGUE DUMACH -!***PURPOSE Compute the unit roundoff of the machine. -!***CATEGORY R1 -!***TYPE REAL(kind=dp) (RUMACH-S, DUMACH-D) -!***KEYWORDS MACHINE CONSTANTS -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! *Usage: -! REAL(kind=dp) A, DUMACH -! A = DUMACH() -! -! *Function Return Values: -! A : the unit roundoff of the machine. -! -! *Description: -! The unit roundoff is defined as the smallest positive machine -! number u such that 1.0 + u .ne. 1.0. This is computed by DUMACH -! in a machine-independent manner. -! -!***REFERENCES (NONE) -!***ROUTINES CALLED DUMSUM -!***REVISION HISTORY (YYYYMMDD) -! 19930216 DATE WRITTEN -! 19930818 Added SLATEC-format prologue. (FNF) -! 20030707 Added DUMSUM to force normal storage of COMP. (ACH) -!***END PROLOGUE DUMACH -! - REAL(kind=dp) U, COMP -!***FIRST EXECUTABLE STATEMENT DUMACH - U = 1.0D0 - 10 U = U*0.5D0 - CALL DUMSUM(1.0D0, U, COMP) - IF (COMP .NE. 1.0D0) GO TO 10 - DUMACH = U*2.0D0 - RETURN +!DECK DUMACH + REAL(kind=dp) FUNCTION DUMACH () +!***BEGIN PROLOGUE DUMACH +!***PURPOSE Compute the unit roundoff of the machine. +!***CATEGORY R1 +!***TYPE REAL(kind=dp) (RUMACH-S, DUMACH-D) +!***KEYWORDS MACHINE CONSTANTS +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! *Usage: +! REAL(kind=dp) A, DUMACH +! A = DUMACH() +! +! *Function Return Values: +! A : the unit roundoff of the machine. +! +! *Description: +! The unit roundoff is defined as the smallest positive machine +! number u such that 1.0 + u .ne. 1.0. This is computed by DUMACH +! in a machine-independent manner. +! +!***REFERENCES (NONE) +!***ROUTINES CALLED DUMSUM +!***REVISION HISTORY (YYYYMdmdv) +! 19930216 DATE WRITTEN +! 19930818 Added SLATEC-format prologue. (FNF) +! 20030707 Added DUMSUM to force normal storage of COMP. (ACH) +!***END PROLOGUE DUMACH +! + REAL(kind=dp) U, COMP +!***FIRST EXECUTABLE STATEMENT DUMACH + U = 1.0D0 + 10 U = U*0.5D0 + CALL DUMSUM(1.0D0, U, COMP) + IF (COMP .NE. 1.0D0) GO TO 10 + DUMACH = U*2.0D0 + RETURN !----------------------- End of Function DUMACH ------------------------ - END FUNCTION DUMACH - - SUBROUTINE DUMSUM(A,B,C) -! Routine to force normal storing of A + B, for DUMACH. - REAL(kind=dp) A, B, C - C = A + B - RETURN - END SUBROUTINE DUMSUM -!DECK DCFODE - SUBROUTINE DCFODE (METH, ELCO, TESCO) -!***BEGIN PROLOGUE DCFODE -!***SUBSIDIARY -!***PURPOSE Set ODE integrator coefficients. -!***TYPE REAL(kind=dp) (SCFODE-S, DCFODE-D) -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! DCFODE is called by the integrator routine to set coefficients -! needed there. The coefficients for the current method, as -! given by the value of METH, are set for all orders and saved. -! The maximum order assumed here is 12 if METH = 1 and 5 if METH = 2. -! (A smaller value of the maximum order is also allowed.) -! DCFODE is called once at the beginning of the problem, -! and is not called again unless and until METH is changed. -! -! The ELCO array contains the basic method coefficients. -! The coefficients el(i), 1 .le. i .le. nq+1, for the method of -! order nq are stored in ELCO(i,nq). They are given by a genetrating -! polynomial, i.e., -! l(x) = el(1) + el(2)*x + ... + el(nq+1)*x**nq. -! For the implicit Adams methods, l(x) is given by -! dl/dx = (x+1)*(x+2)*...*(x+nq-1)/factorial(nq-1), l(-1) = 0. -! For the BDF methods, l(x) is given by -! l(x) = (x+1)*(x+2)* ... *(x+nq)/K, -! where K = factorial(nq)*(1 + 1/2 + ... + 1/nq). -! -! The TESCO array contains test constants used for the -! local error test and the selection of step size and/or order. -! At order nq, TESCO(k,nq) is used for the selection of step -! size at order nq - 1 if k = 1, at order nq if k = 2, and at order -! nq + 1 if k = 3. -! -!***SEE ALSO DLSODE -!***ROUTINES CALLED (NONE) -!***REVISION HISTORY (YYMMDD) -! 791129 DATE WRITTEN -! 890501 Modified prologue to SLATEC/LDOC format. (FNF) -! 890503 Minor cosmetic changes. (FNF) -! 930809 Renamed to allow single/double precision versions. (ACH) -!***END PROLOGUE DCFODE -!**End - INTEGER METH - INTEGER I, IB, NQ, NQM1, NQP1 - REAL(kind=dp) ELCO(13,12), TESCO(3,12), PC(12) + END FUNCTION DUMACH + + SUBROUTINE DUMSUM(A,B,C) +! Routine to force normal storing of A + B, for DUMACH. + REAL(kind=dp) A, B, C + C = A + B + RETURN + END SUBROUTINE DUMSUM +!DECK DCFODE + SUBROUTINE DCFODE (METH, ELCO, TESCO) +!***BEGIN PROLOGUE DCFODE +!***SUBSIDIARY +!***PURPOSE Set ODE integrator coefficients. +!***TYPE REAL(kind=dp) (SCFODE-S, DCFODE-D) +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! DCFODE is called by the integrator routine to set coefficients +! needed there. The coefficients for the current method, as +! given by the value of METH, are set for all orders and saved. +! The maximum order assumed here is 12 if METH = 1 and 5 if METH = 2. +! (A smaller value of the maximum order is also allowed.) +! DCFODE is called once at the beginning of the problem, +! and is not called again unless and until METH is changed. +! +! The ELCO array contains the basic method coefficients. +! The coefficients el(i), 1 .le. i .le. nq+1, for the method of +! order nq are stored in ELCO(i,nq). They are given by a genetrating +! polynomial, i.e., +! l(x) = el(1) + el(2)*x + ... + el(nq+1)*x**nq. +! For the implicit Adams methods, l(x) is given by +! dl/dx = (x+1)*(x+2)*...*(x+nq-1)/factorial(nq-1), l(-1) = 0. +! For the BDF methods, l(x) is given by +! l(x) = (x+1)*(x+2)* ... *(x+nq)/K, +! where K = factorial(nq)*(1 + 1/2 + ... + 1/nq). +! +! The TESCO array contains test constants used for the +! local error test and the selection of step size and/or order. +! At order nq, TESCO(k,nq) is used for the selection of step +! size at order nq - 1 if k = 1, at order nq if k = 2, and at order +! nq + 1 if k = 3. +! +!***SEE ALSO DLSODE +!***ROUTINES CALLED (NONE) +!***REVISION HISTORY (YYMdmdv) +! 791129 DATE WRITTEN +! 890501 Modified prologue to SLATEC/LDOC format. (FNF) +! 890503 Minor cosmetic changes. (FNF) +! 930809 Renamed to allow single/double precision versions. (ACH) +!***END PROLOGUE DCFODE +!**End + INTEGER METH + INTEGER I, IB, NQ, NQM1, NQP1 + REAL(kind=dp) ELCO(13,12), TESCO(3,12), PC(12) REAL(kind=dp) AGAMQ, FNQ, FNQM1, PINT, RAGQ, RQFAC, RQ1FAC, TSIGN, XPIN -! -!***FIRST EXECUTABLE STATEMENT DCFODE - GO TO (100, 200), METH -! - 100 ELCO(1,1) = 1.0D0 - ELCO(2,1) = 1.0D0 - TESCO(1,1) = 0.0D0 - TESCO(2,1) = 2.0D0 - TESCO(1,2) = 1.0D0 - TESCO(3,12) = 0.0D0 - PC(1) = 1.0D0 - RQFAC = 1.0D0 - DO 140 NQ = 2,12 -!----------------------------------------------------------------------- -! The PC array will contain the coefficients of the polynomial -! p(x) = (x+1)*(x+2)*...*(x+nq-1). -! Initially, p(x) = 1. -!----------------------------------------------------------------------- - RQ1FAC = RQFAC - RQFAC = RQFAC/NQ - NQM1 = NQ - 1 - FNQM1 = NQM1 - NQP1 = NQ + 1 +! +!***FIRST EXECUTABLE STATEMENT DCFODE + GO TO (100, 200), METH +! + 100 ELCO(1,1) = 1.0D0 + ELCO(2,1) = 1.0D0 + TESCO(1,1) = 0.0D0 + TESCO(2,1) = 2.0D0 + TESCO(1,2) = 1.0D0 + TESCO(3,12) = 0.0D0 + PC(1) = 1.0D0 + RQFAC = 1.0D0 + DO 140 NQ = 2,12 +!----------------------------------------------------------------------- +! The PC array will contain the coefficients of the polynomial +! p(x) = (x+1)*(x+2)*...*(x+nq-1). +! Initially, p(x) = 1. +!----------------------------------------------------------------------- + RQ1FAC = RQFAC + RQFAC = RQFAC/NQ + NQM1 = NQ - 1 + FNQM1 = NQM1 + NQP1 = NQ + 1 ! Form coefficients of p(x)*(x+nq-1). ---------------------------------- - PC(NQ) = 0.0D0 - DO 110 IB = 1,NQM1 - I = NQP1 - IB - 110 PC(I) = PC(I-1) + FNQM1*PC(I) - PC(1) = FNQM1*PC(1) + PC(NQ) = 0.0D0 + DO 110 IB = 1,NQM1 + I = NQP1 - IB + 110 PC(I) = PC(I-1) + FNQM1*PC(I) + PC(1) = FNQM1*PC(1) ! Compute integral, -1 to 0, of p(x) and x*p(x). ----------------------- - PINT = PC(1) - XPIN = PC(1)/2.0D0 - TSIGN = 1.0D0 - DO 120 I = 2,NQ - TSIGN = -TSIGN - PINT = PINT + TSIGN*PC(I)/I - 120 XPIN = XPIN + TSIGN*PC(I)/(I+1) + PINT = PC(1) + XPIN = PC(1)/2.0D0 + TSIGN = 1.0D0 + DO 120 I = 2,NQ + TSIGN = -TSIGN + PINT = PINT + TSIGN*PC(I)/I + 120 XPIN = XPIN + TSIGN*PC(I)/(I+1) ! Store coefficients in ELCO and TESCO. -------------------------------- - ELCO(1,NQ) = PINT*RQ1FAC - ELCO(2,NQ) = 1.0D0 - DO 130 I = 2,NQ - 130 ELCO(I+1,NQ) = RQ1FAC*PC(I)/I - AGAMQ = RQFAC*XPIN - RAGQ = 1.0D0/AGAMQ - TESCO(2,NQ) = RAGQ - IF (NQ .LT. 12) TESCO(1,NQP1) = RAGQ*RQFAC/NQP1 - TESCO(3,NQM1) = RAGQ - 140 CONTINUE - RETURN -! - 200 PC(1) = 1.0D0 - RQ1FAC = 1.0D0 - DO 230 NQ = 1,5 -!----------------------------------------------------------------------- -! The PC array will contain the coefficients of the polynomial -! p(x) = (x+1)*(x+2)*...*(x+nq). -! Initially, p(x) = 1. -!----------------------------------------------------------------------- - FNQ = NQ - NQP1 = NQ + 1 + ELCO(1,NQ) = PINT*RQ1FAC + ELCO(2,NQ) = 1.0D0 + DO 130 I = 2,NQ + 130 ELCO(I+1,NQ) = RQ1FAC*PC(I)/I + AGAMQ = RQFAC*XPIN + RAGQ = 1.0D0/AGAMQ + TESCO(2,NQ) = RAGQ + IF (NQ .LT. 12) TESCO(1,NQP1) = RAGQ*RQFAC/NQP1 + TESCO(3,NQM1) = RAGQ + 140 CONTINUE + RETURN +! + 200 PC(1) = 1.0D0 + RQ1FAC = 1.0D0 + DO 230 NQ = 1,5 +!----------------------------------------------------------------------- +! The PC array will contain the coefficients of the polynomial +! p(x) = (x+1)*(x+2)*...*(x+nq). +! Initially, p(x) = 1. +!----------------------------------------------------------------------- + FNQ = NQ + NQP1 = NQ + 1 ! Form coefficients of p(x)*(x+nq). ------------------------------------ - PC(NQP1) = 0.0D0 - DO 210 IB = 1,NQ - I = NQ + 2 - IB - 210 PC(I) = PC(I-1) + FNQ*PC(I) - PC(1) = FNQ*PC(1) + PC(NQP1) = 0.0D0 + DO 210 IB = 1,NQ + I = NQ + 2 - IB + 210 PC(I) = PC(I-1) + FNQ*PC(I) + PC(1) = FNQ*PC(1) ! Store coefficients in ELCO and TESCO. -------------------------------- - DO 220 I = 1,NQP1 - 220 ELCO(I,NQ) = PC(I)/PC(2) - ELCO(2,NQ) = 1.0D0 - TESCO(1,NQ) = RQ1FAC - TESCO(2,NQ) = NQP1/ELCO(1,NQ) - TESCO(3,NQ) = (NQ+2)/ELCO(1,NQ) - RQ1FAC = RQ1FAC/FNQ - 230 CONTINUE - RETURN + DO 220 I = 1,NQP1 + 220 ELCO(I,NQ) = PC(I)/PC(2) + ELCO(2,NQ) = 1.0D0 + TESCO(1,NQ) = RQ1FAC + TESCO(2,NQ) = NQP1/ELCO(1,NQ) + TESCO(3,NQ) = (NQ+2)/ELCO(1,NQ) + RQ1FAC = RQ1FAC/FNQ + 230 CONTINUE + RETURN !----------------------- END OF SUBROUTINE DCFODE ---------------------- - END SUBROUTINE DCFODE -!DECK DINTDY - SUBROUTINE DINTDY (T, K, YH, NYH, DKY, IFLAG) -!***BEGIN PROLOGUE DINTDY -!***SUBSIDIARY -!***PURPOSE Interpolate solution derivatives. -!***TYPE REAL(kind=dp) (SINTDY-S, DINTDY-D) -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! DINTDY computes interpolated values of the K-th derivative of the -! dependent variable vector y, and stores it in DKY. This routine -! is called within the package with K = 0 and T = TOUT, but may -! also be called by the user for any K up to the current order. -! (See detailed instructions in the usage documentation.) -! -! The computed values in DKY are gotten by interpolation using the -! Nordsieck history array YH. This array corresponds uniquely to a -! vector-valued polynomial of degree NQCUR or less, and DKY is set -! to the K-th derivative of this polynomial at T. -! The formula for DKY is: -! q -! DKY(i) = sum c(j,K) * (T - tn)**(j-K) * h**(-j) * YH(i,j+1) -! j=K -! where c(j,K) = j*(j-1)*...*(j-K+1), q = NQCUR, tn = TCUR, h = HCUR. -! The quantities nq = NQCUR, l = nq+1, N = NEQ, tn, and h are -! communicated by COMMON. The above sum is done in reverse order. -! IFLAG is returned negative if either K or T is out of bounds. -! -!***SEE ALSO DLSODE -!***ROUTINES CALLED XERRWD -!***COMMON BLOCKS DLS001 -!***REVISION HISTORY (YYMMDD) -! 791129 DATE WRITTEN -! 890501 Modified prologue to SLATEC/LDOC format. (FNF) -! 890503 Minor cosmetic changes. (FNF) -! 930809 Renamed to allow single/double precision versions. (ACH) -! 010418 Reduced size of Common block /DLS001/. (ACH) -! 031105 Restored 'own' variables to Common block /DLS001/, to -! enable interrupt/restart feature. (ACH) -! 050427 Corrected roundoff decrement in TP. (ACH) -!***END PROLOGUE DINTDY -!**End - INTEGER K, NYH, IFLAG - REAL(kind=dp) T, YH(NYH,*), DKY(*) + END SUBROUTINE DCFODE +!DECK DINTDY + SUBROUTINE DINTDY (T, K, YH, NYH, DKY, IFLAG) +!***BEGIN PROLOGUE DINTDY +!***SUBSIDIARY +!***PURPOSE Interpolate solution derivatives. +!***TYPE REAL(kind=dp) (SINTDY-S, DINTDY-D) +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! DINTDY computes interpolated values of the K-th derivative of the +! dependent variable vector y, and stores it in DKY. This routine +! is called within the package with K = 0 and T = TOUT, but may +! also be called by the user for any K up to the current order. +! (See detailed instructions in the usage documentation.) +! +! The computed values in DKY are gotten by interpolation using the +! Nordsieck history array YH. This array corresponds uniquely to a +! vector-valued polynomial of degree NQCUR or less, and DKY is set +! to the K-th derivative of this polynomial at T. +! The formula for DKY is: +! q +! DKY(i) = sum c(j,K) * (T - tn)**(j-K) * h**(-j) * YH(i,j+1) +! j=K +! where c(j,K) = j*(j-1)*...*(j-K+1), q = NQCUR, tn = TCUR, h = HCUR. +! The quantities nq = NQCUR, l = nq+1, N = NEQ, tn, and h are +! communicated by COMMON. The above sum is done in reverse order. +! IFLAG is returned negative if either K or T is out of bounds. +! +!***SEE ALSO DLSODE +!***ROUTINES CALLED XERRWD +!***COMMON BLOCKS DLS001 +!***REVISION HISTORY (YYMdmdv) +! 791129 DATE WRITTEN +! 890501 Modified prologue to SLATEC/LDOC format. (FNF) +! 890503 Minor cosmetic changes. (FNF) +! 930809 Renamed to allow single/double precision versions. (ACH) +! 010418 Reduced size of Common block /DLS001/. (ACH) +! 031105 Restored 'own' variables to Common block /DLS001/, to +! enable interrupt/restart feature. (ACH) +! 050427 Corrected roundoff decrement in TP. (ACH) +!***END PROLOGUE DINTDY +!**End + INTEGER K, NYH, IFLAG + REAL(kind=dp) T, YH(NYH,*), DKY(*) INTEGER IOWND, IOWNS, & ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, & LYH, LEWT, LACOR, LSAVF, LWM, LIWM, METH, MITER, & - MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU + MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU REAL(kind=dp) ROWNS, & - CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND + CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND COMMON /DLS001/ ROWNS(209), & CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND, & IOWND(6), IOWNS(6), & ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, & LYH, LEWT, LACOR, LSAVF, LWM, LIWM, METH, MITER, & - MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU - INTEGER I, IC, J, JB, JB2, JJ, JJ1, JP1 - REAL(kind=dp) C, R, S, TP - CHARACTER*80 MSG -! -!***FIRST EXECUTABLE STATEMENT DINTDY - IFLAG = 0 - IF (K .LT. 0 .OR. K .GT. NQ) GO TO 80 - TP = TN - HU - 100.0D0*UROUND*SIGN(ABS(TN) + ABS(HU), HU) - IF ((T-TP)*(T-TN) .GT. 0.0D0) GO TO 90 -! - S = (T - TN)/H - IC = 1 - IF (K .EQ. 0) GO TO 15 - JJ1 = L - K - DO 10 JJ = JJ1,NQ - 10 IC = IC*JJ - 15 C = IC - DO 20 I = 1,N - 20 DKY(I) = C*YH(I,L) - IF (K .EQ. NQ) GO TO 55 - JB2 = NQ - K - DO 50 JB = 1,JB2 - J = NQ - JB - JP1 = J + 1 - IC = 1 - IF (K .EQ. 0) GO TO 35 - JJ1 = JP1 - K - DO 30 JJ = JJ1,J - 30 IC = IC*JJ - 35 C = IC - DO 40 I = 1,N - 40 DKY(I) = C*YH(I,JP1) + S*DKY(I) - 50 CONTINUE - IF (K .EQ. 0) RETURN - 55 R = H**(-K) - DO 60 I = 1,N - 60 DKY(I) = R*DKY(I) - RETURN -! - 80 MSG = 'DINTDY- K (=I1) illegal ' - CALL XERRWD (MSG, 30, 51, 0, 1, K, 0, 0, 0.0D0, 0.0D0) - IFLAG = -1 - RETURN - 90 MSG = 'DINTDY- T (=R1) illegal ' - CALL XERRWD (MSG, 30, 52, 0, 0, 0, 0, 1, T, 0.0D0) - MSG=' T not in interval TCUR - HU (= R1) to TCUR (=R2) ' - CALL XERRWD (MSG, 60, 52, 0, 0, 0, 0, 2, TP, TN) - IFLAG = -2 - RETURN + MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU + INTEGER I, IC, J, JB, JB2, JJ, JJ1, JP1 + REAL(kind=dp) C, R, S, TP + CHARACTER*80 MSG +! +!***FIRST EXECUTABLE STATEMENT DINTDY + IFLAG = 0 + IF (K .LT. 0 .OR. K .GT. NQ) GO TO 80 + TP = TN - HU - 100.0D0*UROUND*SIGN(ABS(TN) + ABS(HU), HU) + IF ((T-TP)*(T-TN) .GT. 0.0D0) GO TO 90 +! + S = (T - TN)/H + IC = 1 + IF (K .EQ. 0) GO TO 15 + JJ1 = L - K + DO 10 JJ = JJ1,NQ + 10 IC = IC*JJ + 15 C = IC + DO 20 I = 1,N + 20 DKY(I) = C*YH(I,L) + IF (K .EQ. NQ) GO TO 55 + JB2 = NQ - K + DO 50 JB = 1,JB2 + J = NQ - JB + JP1 = J + 1 + IC = 1 + IF (K .EQ. 0) GO TO 35 + JJ1 = JP1 - K + DO 30 JJ = JJ1,J + 30 IC = IC*JJ + 35 C = IC + DO 40 I = 1,N + 40 DKY(I) = C*YH(I,JP1) + S*DKY(I) + 50 CONTINUE + IF (K .EQ. 0) RETURN + 55 R = H**(-K) + DO 60 I = 1,N + 60 DKY(I) = R*DKY(I) + RETURN +! + 80 MSG = 'DINTDY- K (=I1) illegal ' + CALL XERRWD (MSG, 30, 51, 0, 1, K, 0, 0, 0.0D0, 0.0D0) + IFLAG = -1 + RETURN + 90 MSG = 'DINTDY- T (=R1) illegal ' + CALL XERRWD (MSG, 30, 52, 0, 0, 0, 0, 1, T, 0.0D0) + MSG=' T not in interval TCUR - HU (= R1) to TCUR (=R2) ' + CALL XERRWD (MSG, 60, 52, 0, 0, 0, 0, 2, TP, TN) + IFLAG = -2 + RETURN !----------------------- END OF SUBROUTINE DINTDY ---------------------- - END SUBROUTINE DINTDY -!DECK DPREPJ - SUBROUTINE DPREPJ (NEQ, Y, YH, NYH, EWT, FTEM, SAVF, WM, IWM, F, JAC) -!***BEGIN PROLOGUE DPREPJ -!***SUBSIDIARY -!***PURPOSE Compute and process Newton iteration matrix. -!***TYPE REAL(kind=dp) (SPREPJ-S, DPREPJ-D) -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! DPREPJ is called by DSTODE to compute and process the matrix -! P = I - h*el(1)*J , where J is an approximation to the Jacobian. -! Here J is computed by the user-supplied routine JAC if -! MITER = 1 or 4, or by finite differencing if MITER = 2, 3, or 5. -! If MITER = 3, a diagonal approximation to J is used. -! J is stored in WM and replaced by P. If MITER .ne. 3, P is then -! subjected to LU decomposition in preparation for later solution -! of linear systems with P as coefficient matrix. This is done -! by DGEFA if MITER = 1 or 2, and by DGBFA if MITER = 4 or 5. -! -! In addition to variables described in DSTODE and DLSODE prologues, -! communication with DPREPJ uses the following: -! Y = array containing predicted values on entry. -! FTEM = work array of length N (ACOR in DSTODE). -! SAVF = array containing f evaluated at predicted y. -! WM = real work space for matrices. On output it contains the + END SUBROUTINE DINTDY +!DECK DPREPJ + SUBROUTINE DPREPJ (NEQ, Y, YH, NYH, EWT, FTEM, SAVF, WM, IWM, F, JAC) +!***BEGIN PROLOGUE DPREPJ +!***SUBSIDIARY +!***PURPOSE Compute and process Newton iteration matrix. +!***TYPE REAL(kind=dp) (SPREPJ-S, DPREPJ-D) +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! DPREPJ is called by DSTODE to compute and process the matrix +! P = I - h*el(1)*J , where J is an approximation to the Jacobian. +! Here J is computed by the user-supplied routine JAC if +! MITER = 1 or 4, or by finite differencing if MITER = 2, 3, or 5. +! If MITER = 3, a diagonal approximation to J is used. +! J is stored in WM and replaced by P. If MITER .ne. 3, P is then +! subjected to LU decomposition in preparation for later solution +! of linear systems with P as coefficient matrix. This is done +! by DGEFA if MITER = 1 or 2, and by DGBFA if MITER = 4 or 5. +! +! In addition to variables described in DSTODE and DLSODE prologues, +! communication with DPREPJ uses the following: +! Y = array containing predicted values on entry. +! FTEM = work array of length N (ACOR in DSTODE). +! SAVF = array containing f evaluated at predicted y. +! WM = real work space for matrices. On output it contains the ! inverse diagonal matrix if MITER = 3 and the LU decomposition -! of P if MITER is 1, 2 , 4, or 5. -! Storage of matrix elements starts at WM(3). -! WM also contains the following matrix-related data: -! WM(1) = SQRT(UROUND), used in numerical Jacobian increments. -! WM(2) = H*EL0, saved for later use if MITER = 3. -! IWM = integer work space containing pivot information, starting at -! IWM(21), if MITER is 1, 2, 4, or 5. IWM also contains band -! parameters ML = IWM(1) and MU = IWM(2) if MITER is 4 or 5. -! EL0 = EL(1) (input). -! IERPJ = output error flag, = 0 if no trouble, .gt. 0 if -! P matrix found to be singular. -! JCUR = output flag = 1 to indicate that the Jacobian matrix -! (or approximation) is now current. -! This routine also uses the COMMON variables EL0, H, TN, UROUND, -! MITER, N, NFE, and NJE. -! -!***SEE ALSO DLSODE -!***ROUTINES CALLED DGBFA, DGEFA, DVNORM -!***COMMON BLOCKS DLS001 -!***REVISION HISTORY (YYMMDD) -! 791129 DATE WRITTEN -! 890501 Modified prologue to SLATEC/LDOC format. (FNF) -! 890504 Minor cosmetic changes. (FNF) -! 930809 Renamed to allow single/double precision versions. (ACH) -! 010418 Reduced size of Common block /DLS001/. (ACH) -! 031105 Restored 'own' variables to Common block /DLS001/, to -! enable interrupt/restart feature. (ACH) -!***END PROLOGUE DPREPJ -!**End - EXTERNAL F, JAC +! of P if MITER is 1, 2 , 4, or 5. +! Storage of matrix elements starts at WM(3). +! WM also contains the following matrix-related data: +! WM(1) = SQRT(UROUND), used in numerical Jacobian increments. +! WM(2) = H*EL0, saved for later use if MITER = 3. +! IWM = integer work space containing pivot information, starting at +! IWM(21), if MITER is 1, 2, 4, or 5. IWM also contains band +! parameters ML = IWM(1) and MU = IWM(2) if MITER is 4 or 5. +! EL0 = EL(1) (input). +! IERPJ = output error flag, = 0 if no trouble, .gt. 0 if +! P matrix found to be singular. +! JCUR = output flag = 1 to indicate that the Jacobian matrix +! (or approximation) is now current. +! This routine also uses the COMMON variables EL0, H, TN, UROUND, +! MITER, N, NFE, and NJE. +! +!***SEE ALSO DLSODE +!***ROUTINES CALLED DGBFA, DGEFA, DVNORM +!***COMMON BLOCKS DLS001 +!***REVISION HISTORY (YYMdmdv) +! 791129 DATE WRITTEN +! 890501 Modified prologue to SLATEC/LDOC format. (FNF) +! 890504 Minor cosmetic changes. (FNF) +! 930809 Renamed to allow single/double precision versions. (ACH) +! 010418 Reduced size of Common block /DLS001/. (ACH) +! 031105 Restored 'own' variables to Common block /DLS001/, to +! enable interrupt/restart feature. (ACH) +!***END PROLOGUE DPREPJ +!**End + EXTERNAL F, JAC INTEGER NEQ, NYH, IWM(*) - REAL(kind=dp) Y(*), YH(NYH,*), EWT(*), FTEM(*), SAVF(*), WM(*) + REAL(kind=dp) Y(*), YH(NYH,*), EWT(*), FTEM(*), SAVF(*), WM(*) INTEGER IOWND, IOWNS, IER, & ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, & LYH, LEWT, LACOR, LSAVF, LWM, LIWM, METH, MITER, & - MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU + MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU REAL(kind=dp) ROWNS, & - CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND + CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND COMMON /DLS001/ ROWNS(209), & CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND, & IOWND(6), IOWNS(6), & ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, & LYH, LEWT, LACOR, LSAVF, LWM, LIWM, METH, MITER, & - MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU + MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU INTEGER I, I1, I2, ISING, II, J, J1, JJ, LENP, & - MBA, MBAND, MEB1, MEBAND, ML, ML3, MU, NP1 + MBA, MBAND, MEB1, MEBAND, ML, ML3, MU, NP1 REAL(kind=dp) CON, DI, FAC, HL0, R, R0, SRUR, YI, YJ, YJJ - !REAL(kind=dp) DVNORM -! -!***FIRST EXECUTABLE STATEMENT DPREPJ - NJE = NJE + 1 - IERPJ = 0 - JCUR = 1 - HL0 = H*EL0 - CON = -HL0 + !REAL(kind=dp) DVNORM +! +!***FIRST EXECUTABLE STATEMENT DPREPJ + NJE = NJE + 1 + IERPJ = 0 + JCUR = 1 + HL0 = H*EL0 + CON = -HL0 #ifdef FULL_ALGEBRA - LENP = N*N - DO i = 1,LENP - WM(i+2) = 0.0D0 + LENP = N*N + DO i = 1,LENP + WM(i+2) = 0.0D0 END DO - CALL JAC_CHEM (NEQ, TN, Y, WM(3)) - DO I = 1,LENP + CALL JAC_CHEM (NEQ, TN, Y, WM(3)) + DO I = 1,LENP WM(I+2) = WM(I+2)*CON - END DO + END DO ! Add identity matrix - J = 3 - NP1 = N + 1 - DO I = 1,N - WM(J) = WM(J) + 1.0D0 - J = J + NP1 + J = 3 + NP1 = N + 1 + DO I = 1,N + WM(J) = WM(J) + 1.0D0 + J = J + NP1 END DO ! Do LU decomposition on P CALL DGETRF(N,N,WM(3),N,IWM(21),ISING) #else - CALL JAC_CHEM (NEQ, TN, Y, WM(3)) - DO i = 1,LU_NONZERO - WM(i+2) = WM(i+2)*CON + CALL JAC_CHEM (NEQ, TN, Y, WM(3)) + DO i = 1,LU_NONZERO + WM(i+2) = WM(i+2)*CON END DO ! Add identity matrix - DO i = 1,N + DO i = 1,N j = 2+LU_DIAG(i) - WM(j) = WM(j) + 1.0D0 - END DO + WM(j) = WM(j) + 1.0D0 + END DO ! Do LU decomposition on P CALL KppDecomp(WM(3),IER) -#endif - IF (IER .NE. 0) IERPJ = 1 - RETURN +#endif + IF (IER .NE. 0) IERPJ = 1 + RETURN !----------------------- END OF SUBROUTINE DPREPJ ---------------------- - END SUBROUTINE DPREPJ -!DECK DSOLSY - SUBROUTINE DSOLSY (WM, IWM, X, TEM) -!***BEGIN PROLOGUE DSOLSY -!***SUBSIDIARY -!***PURPOSE ODEPACK linear system solver. -!***TYPE REAL(kind=dp) (SSOLSY-S, DSOLSY-D) -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! This routine manages the solution of the linear system arising from -! a chord iteration. It is called if MITER .ne. 0. -! If MITER is 1 or 2, it calls DGESL to accomplish this. -! If MITER = 3 it updates the coefficient h*EL0 in the diagonal -! matrix, and then computes the solution. -! If MITER is 4 or 5, it calls DGBSL. -! Communication with DSOLSY uses the following variables: -! WM = real work space containing the inverse diagonal matrix if -! MITER = 3 and the LU decomposition of the matrix otherwise. -! Storage of matrix elements starts at WM(3). -! WM also contains the following matrix-related data: -! WM(1) = SQRT(UROUND) (not used here), -! WM(2) = HL0, the previous value of h*EL0, used if MITER = 3. -! IWM = integer work space containing pivot information, starting at -! IWM(21), if MITER is 1, 2, 4, or 5. IWM also contains band -! parameters ML = IWM(1) and MU = IWM(2) if MITER is 4 or 5. -! X = the right-hand side vector on input, and the solution vector -! on output, of length N. -! TEM = vector of work space of length N, not used in this version. -! IERSL = output flag (in COMMON). IERSL = 0 if no trouble occurred. -! IERSL = 1 if a singular matrix arose with MITER = 3. -! This routine also uses the COMMON variables EL0, H, MITER, and N. -! -!***SEE ALSO DLSODE -!***ROUTINES CALLED DGBSL, DGESL -!***COMMON BLOCKS DLS001 -!***REVISION HISTORY (YYMMDD) -! 791129 DATE WRITTEN -! 890501 Modified prologue to SLATEC/LDOC format. (FNF) -! 890503 Minor cosmetic changes. (FNF) -! 930809 Renamed to allow single/double precision versions. (ACH) -! 010418 Reduced size of Common block /DLS001/. (ACH) -! 031105 Restored 'own' variables to Common block /DLS001/, to -! enable interrupt/restart feature. (ACH) -!***END PROLOGUE DSOLSY -!**End - INTEGER IWM(*) - REAL(kind=dp) WM(*), X(*), TEM(*) + END SUBROUTINE DPREPJ +!DECK DSOLSY + SUBROUTINE DSOLSY (WM, IWM, X, TEM) +!***BEGIN PROLOGUE DSOLSY +!***SUBSIDIARY +!***PURPOSE ODEPACK linear system solver. +!***TYPE REAL(kind=dp) (SSOLSY-S, DSOLSY-D) +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! This routine manages the solution of the linear system arising from +! a chord iteration. It is called if MITER .ne. 0. +! If MITER is 1 or 2, it calls DGESL to accomplish this. +! If MITER = 3 it updates the coefficient h*EL0 in the diagonal +! matrix, and then computes the solution. +! If MITER is 4 or 5, it calls DGBSL. +! Communication with DSOLSY uses the following variables: +! WM = real work space containing the inverse diagonal matrix if +! MITER = 3 and the LU decomposition of the matrix otherwise. +! Storage of matrix elements starts at WM(3). +! WM also contains the following matrix-related data: +! WM(1) = SQRT(UROUND) (not used here), +! WM(2) = HL0, the previous value of h*EL0, used if MITER = 3. +! IWM = integer work space containing pivot information, starting at +! IWM(21), if MITER is 1, 2, 4, or 5. IWM also contains band +! parameters ML = IWM(1) and MU = IWM(2) if MITER is 4 or 5. +! X = the right-hand side vector on input, and the solution vector +! on output, of length N. +! TEM = vector of work space of length N, not used in this version. +! IERSL = output flag (in COMMON). IERSL = 0 if no trouble occurred. +! IERSL = 1 if a singular matrix arose with MITER = 3. +! This routine also uses the COMMON variables EL0, H, MITER, and N. +! +!***SEE ALSO DLSODE +!***ROUTINES CALLED DGBSL, DGESL +!***COMMON BLOCKS DLS001 +!***REVISION HISTORY (YYMdmdv) +! 791129 DATE WRITTEN +! 890501 Modified prologue to SLATEC/LDOC format. (FNF) +! 890503 Minor cosmetic changes. (FNF) +! 930809 Renamed to allow single/double precision versions. (ACH) +! 010418 Reduced size of Common block /DLS001/. (ACH) +! 031105 Restored 'own' variables to Common block /DLS001/, to +! enable interrupt/restart feature. (ACH) +!***END PROLOGUE DSOLSY +!**End + INTEGER IWM(*) + REAL(kind=dp) WM(*), X(*), TEM(*) INTEGER IOWND, IOWNS, & ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, & LYH, LEWT, LACOR, LSAVF, LWM, LIWM, METH, MITER, & - MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU + MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU REAL(kind=dp) ROWNS, & - CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND + CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND COMMON /DLS001/ ROWNS(209), & CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND, & IOWND(6), IOWNS(6), & ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, & LYH, LEWT, LACOR, LSAVF, LWM, LIWM, METH, MITER, & - MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU - INTEGER I, MEBAND, ML, MU - REAL(kind=dp) DI, HL0, PHL0, R -#ifdef FULL_ALGEBRA + MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU + INTEGER I, MEBAND, ML, MU + REAL(kind=dp) DI, HL0, PHL0, R +#ifdef FULL_ALGEBRA INTEGER ISING -#endif -! -!***FIRST EXECUTABLE STATEMENT DSOLSY - IERSL = 0 -#ifdef FULL_ALGEBRA +#endif +! +!***FIRST EXECUTABLE STATEMENT DSOLSY + IERSL = 0 +#ifdef FULL_ALGEBRA CALL DGETRS ('N',N,1,WM(3),N,IWM(21),X,N,ISING) #else CALL KppSolve(WM(3),X) -#endif - RETURN +#endif + RETURN !----------------------- END OF SUBROUTINE DSOLSY ---------------------- - END SUBROUTINE DSOLSY -!DECK DSRCOM - SUBROUTINE DSRCOM (RSAV, ISAV, JOB) -!***BEGIN PROLOGUE DSRCOM -!***SUBSIDIARY -!***PURPOSE Save/restore ODEPACK COMMON blocks. -!***TYPE REAL(kind=dp) (SSRCOM-S, DSRCOM-D) -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! This routine saves or restores (depending on JOB) the contents of -! the COMMON block DLS001, which is used internally -! by one or more ODEPACK solvers. -! -! RSAV = real array of length 218 or more. -! ISAV = integer array of length 37 or more. -! JOB = flag indicating to save or restore the COMMON blocks: -! JOB = 1 if COMMON is to be saved (written to RSAV/ISAV) -! JOB = 2 if COMMON is to be restored (read from RSAV/ISAV) -! A call with JOB = 2 presumes a prior call with JOB = 1. -! -!***SEE ALSO DLSODE -!***ROUTINES CALLED (NONE) -!***COMMON BLOCKS DLS001 -!***REVISION HISTORY (YYMMDD) -! 791129 DATE WRITTEN -! 890501 Modified prologue to SLATEC/LDOC format. (FNF) -! 890503 Minor cosmetic changes. (FNF) -! 921116 Deleted treatment of block /EH0001/. (ACH) -! 930801 Reduced Common block length by 2. (ACH) -! 930809 Renamed to allow single/double precision versions. (ACH) -! 010418 Reduced Common block length by 209+12. (ACH) -! 031105 Restored 'own' variables to Common block /DLS001/, to -! enable interrupt/restart feature. (ACH) -! 031112 Added SAVE statement for data-loaded constants. -!***END PROLOGUE DSRCOM -!**End - INTEGER ISAV(*), JOB - INTEGER ILS - INTEGER I, LENILS, LENRLS - REAL(kind=dp) RSAV(*), RLS - SAVE LENRLS, LENILS - COMMON /DLS001/ RLS(218), ILS(37) - DATA LENRLS/218/, LENILS/37/ -! -!***FIRST EXECUTABLE STATEMENT DSRCOM - IF (JOB .EQ. 2) GO TO 100 -! - DO 10 I = 1,LENRLS - 10 RSAV(I) = RLS(I) - DO 20 I = 1,LENILS - 20 ISAV(I) = ILS(I) - RETURN -! - 100 CONTINUE - DO 110 I = 1,LENRLS - 110 RLS(I) = RSAV(I) - DO 120 I = 1,LENILS - 120 ILS(I) = ISAV(I) - RETURN + END SUBROUTINE DSOLSY +!DECK DSRCOM + SUBROUTINE DSRCOM (RSAV, ISAV, JOB) +!***BEGIN PROLOGUE DSRCOM +!***SUBSIDIARY +!***PURPOSE Save/restore ODEPACK COMMON blocks. +!***TYPE REAL(kind=dp) (SSRCOM-S, DSRCOM-D) +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! This routine saves or restores (depending on JOB) the contents of +! the COMMON block DLS001, which is used internally +! by one or more ODEPACK solvers. +! +! RSAV = real array of length 218 or more. +! ISAV = integer array of length 37 or more. +! JOB = flag indicating to save or restore the COMMON blocks: +! JOB = 1 if COMMON is to be saved (written to RSAV/ISAV) +! JOB = 2 if COMMON is to be restored (read from RSAV/ISAV) +! A call with JOB = 2 presumes a prior call with JOB = 1. +! +!***SEE ALSO DLSODE +!***ROUTINES CALLED (NONE) +!***COMMON BLOCKS DLS001 +!***REVISION HISTORY (YYMdmdv) +! 791129 DATE WRITTEN +! 890501 Modified prologue to SLATEC/LDOC format. (FNF) +! 890503 Minor cosmetic changes. (FNF) +! 921116 Deleted treatment of block /EH0001/. (ACH) +! 930801 Reduced Common block length by 2. (ACH) +! 930809 Renamed to allow single/double precision versions. (ACH) +! 010418 Reduced Common block length by 209+12. (ACH) +! 031105 Restored 'own' variables to Common block /DLS001/, to +! enable interrupt/restart feature. (ACH) +! 031112 Added SAVE statement for data-loaded constants. +!***END PROLOGUE DSRCOM +!**End + INTEGER ISAV(*), JOB + INTEGER ILS + INTEGER I, LENILS, LENRLS + REAL(kind=dp) RSAV(*), RLS + SAVE LENRLS, LENILS + COMMON /DLS001/ RLS(218), ILS(37) + DATA LENRLS/218/, LENILS/37/ +! +!***FIRST EXECUTABLE STATEMENT DSRCOM + IF (JOB .EQ. 2) GO TO 100 +! + DO 10 I = 1,LENRLS + 10 RSAV(I) = RLS(I) + DO 20 I = 1,LENILS + 20 ISAV(I) = ILS(I) + RETURN +! + 100 CONTINUE + DO 110 I = 1,LENRLS + 110 RLS(I) = RSAV(I) + DO 120 I = 1,LENILS + 120 ILS(I) = ISAV(I) + RETURN !----------------------- END OF SUBROUTINE DSRCOM ---------------------- - END SUBROUTINE DSRCOM -!DECK DSTODE + END SUBROUTINE DSRCOM +!DECK DSTODE SUBROUTINE DSTODE (NEQ, Y, YH, NYH, YH1, EWT, SAVF, ACOR, & - WM, IWM, F, JAC) - !WM, IWM, F, JAC, PJAC, SLVS) -!***BEGIN PROLOGUE DSTODE -!***SUBSIDIARY -!***PURPOSE Performs one step of an ODEPACK integration. -!***TYPE REAL(kind=dp) (SSTODE-S, DSTODE-D) -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! DSTODE performs one step of the integration of an initial value -! problem for a system of ordinary differential equations. -! Note: DSTODE is independent of the value of the iteration method -! indicator MITER, when this is .ne. 0, and hence is independent -! of the type of chord method used, or the Jacobian structure. -! Communication with DSTODE is done with the following variables: -! -! NEQ = integer array containing problem size in NEQ, and -! passed as the NEQ argument in all calls to F and JAC. -! Y = an array of length .ge. N used as the Y argument in -! all calls to F and JAC. -! YH = an NYH by LMAX array containing the dependent variables -! and their approximate scaled derivatives, where -! LMAX = MAXORD + 1. YH(i,j+1) contains the approximate -! j-th derivative of y(i), scaled by h**j/factorial(j) -! (j = 0,1,...,NQ). on entry for the first step, the first -! two columns of YH must be set from the initial values. -! NYH = a constant integer .ge. N, the first dimension of YH. -! YH1 = a one-dimensional array occupying the same space as YH. -! EWT = an array of length N containing multiplicative weights -! for local error measurements. Local errors in Y(i) are -! compared to 1.0/EWT(i) in various error tests. -! SAVF = an array of working storage, of length N. -! Also used for input of YH(*,MAXORD+2) when JSTART = -1 -! and MAXORD .lt. the current order NQ. -! ACOR = a work array of length N, used for the accumulated -! corrections. On a successful return, ACOR(i) contains -! the estimated one-step local error in Y(i). -! WM,IWM = real and integer work arrays associated with matrix -! operations in chord iteration (MITER .ne. 0). -! PJAC = name of routine to evaluate and preprocess Jacobian matrix -! and P = I - h*el0*JAC, if a chord method is being used. -! SLVS = name of routine to solve linear system in chord iteration. -! CCMAX = maximum relative change in h*el0 before PJAC is called. -! H = the step size to be attempted on the next step. -! H is altered by the error control algorithm during the -! problem. H can be either positive or negative, but its -! sign must remain constant throughout the problem. -! HMIN = the minimum absolute value of the step size h to be used. -! HMXI = inverse of the maximum absolute value of h to be used. -! HMXI = 0.0 is allowed and corresponds to an infinite hmax. -! HMIN and HMXI may be changed at any time, but will not -! take effect until the next change of h is considered. -! TN = the independent variable. TN is updated on each step taken. -! JSTART = an integer used for input only, with the following -! values and meanings: -! 0 perform the first step. -! .gt.0 take a new step continuing from the last. -! -1 take the next step with a new value of H, MAXORD, -! N, METH, MITER, and/or matrix parameters. -! -2 take the next step with a new value of H, -! but with other inputs unchanged. -! On return, JSTART is set to 1 to facilitate continuation. -! KFLAG = a completion code with the following meanings: -! 0 the step was succesful. -! -1 the requested error could not be achieved. -! -2 corrector convergence could not be achieved. -! -3 fatal error in PJAC or SLVS. -! A return with KFLAG = -1 or -2 means either -! abs(H) = HMIN or 10 consecutive failures occurred. -! On a return with KFLAG negative, the values of TN and -! the YH array are as of the beginning of the last -! step, and H is the last step size attempted. -! MAXORD = the maximum order of integration method to be allowed. -! MAXCOR = the maximum number of corrector iterations allowed. -! MSBP = maximum number of steps between PJAC calls (MITER .gt. 0). -! MXNCF = maximum number of convergence failures allowed. -! METH/MITER = the method flags. See description in driver. -! N = the number of first-order differential equations. -! The values of CCMAX, H, HMIN, HMXI, TN, JSTART, KFLAG, MAXORD, -! MAXCOR, MSBP, MXNCF, METH, MITER, and N are communicated via COMMON. -! -!***SEE ALSO DLSODE -!***ROUTINES CALLED DCFODE, DVNORM -!***COMMON BLOCKS DLS001 -!***REVISION HISTORY (YYMMDD) -! 791129 DATE WRITTEN -! 890501 Modified prologue to SLATEC/LDOC format. (FNF) -! 890503 Minor cosmetic changes. (FNF) -! 930809 Renamed to allow single/double precision versions. (ACH) -! 010418 Reduced size of Common block /DLS001/. (ACH) -! 031105 Restored 'own' variables to Common block /DLS001/, to -! enable interrupt/restart feature. (ACH) -!***END PROLOGUE DSTODE -!**End - EXTERNAL F, JAC !, PJAC, SLVS - INTEGER NEQ, NYH, IWM(*) + WM, IWM, F, JAC) + !WM, IWM, F, JAC, PJAC, SLVS) +!***BEGIN PROLOGUE DSTODE +!***SUBSIDIARY +!***PURPOSE Performs one step of an ODEPACK integration. +!***TYPE REAL(kind=dp) (SSTODE-S, DSTODE-D) +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! DSTODE performs one step of the integration of an initial value +! problem for a system of ordinary differential equations. +! Note: DSTODE is independent of the value of the iteration method +! indicator MITER, when this is .ne. 0, and hence is independent +! of the type of chord method used, or the Jacobian structure. +! Communication with DSTODE is done with the following variables: +! +! NEQ = integer array containing problem size in NEQ, and +! passed as the NEQ argument in all calls to F and JAC. +! Y = an array of length .ge. N used as the Y argument in +! all calls to F and JAC. +! YH = an NYH by LMAX array containing the dependent variables +! and their approximate scaled derivatives, where +! LMAX = MAXORD + 1. YH(i,j+1) contains the approximate +! j-th derivative of y(i), scaled by h**j/factorial(j) +! (j = 0,1,...,NQ). on entry for the first step, the first +! two columns of YH must be set from the initial values. +! NYH = a constant integer .ge. N, the first dimension of YH. +! YH1 = a one-dimensional array occupying the same space as YH. +! EWT = an array of length N containing multiplicative weights +! for local error measurements. Local errors in Y(i) are +! compared to 1.0/EWT(i) in various error tests. +! SAVF = an array of working storage, of length N. +! Also used for input of YH(*,MAXORD+2) when JSTART = -1 +! and MAXORD .lt. the current order NQ. +! ACOR = a work array of length N, used for the accumulated +! corrections. On a successful return, ACOR(i) contains +! the estimated one-step local error in Y(i). +! WM,IWM = real and integer work arrays associated with matrix +! operations in chord iteration (MITER .ne. 0). +! PJAC = name of routine to evaluate and preprocess Jacobian matrix +! and P = I - h*el0*JAC, if a chord method is being used. +! SLVS = name of routine to solve linear system in chord iteration. +! CCMAX = maximum relative change in h*el0 before PJAC is called. +! H = the step size to be attempted on the next step. +! H is altered by the error control algorithm during the +! problem. H can be either positive or negative, but its +! sign must remain constant throughout the problem. +! HMIN = the minimum absolute value of the step size h to be used. +! HMXI = inverse of the maximum absolute value of h to be used. +! HMXI = 0.0 is allowed and corresponds to an infinite hmax. +! HMIN and HMXI may be changed at any time, but will not +! take effect until the next change of h is considered. +! TN = the independent variable. TN is updated on each step taken. +! JSTART = an integer used for input only, with the following +! values and meanings: +! 0 perform the first step. +! .gt.0 take a new step continuing from the last. +! -1 take the next step with a new value of H, MAXORD, +! N, METH, MITER, and/or matrix parameters. +! -2 take the next step with a new value of H, +! but with other inputs unchanged. +! On return, JSTART is set to 1 to facilitate continuation. +! KFLAG = a completion code with the following meanings: +! 0 the step was succesful. +! -1 the requested error could not be achieved. +! -2 corrector convergence could not be achieved. +! -3 fatal error in PJAC or SLVS. +! A return with KFLAG = -1 or -2 means either +! abs(H) = HMIN or 10 consecutive failures occurred. +! On a return with KFLAG negative, the values of TN and +! the YH array are as of the beginning of the last +! step, and H is the last step size attempted. +! MAXORD = the maximum order of integration method to be allowed. +! MAXCOR = the maximum number of corrector iterations allowed. +! MSBP = maximum number of steps between PJAC calls (MITER .gt. 0). +! MXNCF = maximum number of convergence failures allowed. +! METH/MITER = the method flags. See description in driver. +! N = the number of first-order differential equations. +! The values of CCMAX, H, HMIN, HMXI, TN, JSTART, KFLAG, MAXORD, +! MAXCOR, MSBP, MXNCF, METH, MITER, and N are communicated via COMMON. +! +!***SEE ALSO DLSODE +!***ROUTINES CALLED DCFODE, DVNORM +!***COMMON BLOCKS DLS001 +!***REVISION HISTORY (YYMdmdv) +! 791129 DATE WRITTEN +! 890501 Modified prologue to SLATEC/LDOC format. (FNF) +! 890503 Minor cosmetic changes. (FNF) +! 930809 Renamed to allow single/double precision versions. (ACH) +! 010418 Reduced size of Common block /DLS001/. (ACH) +! 031105 Restored 'own' variables to Common block /DLS001/, to +! enable interrupt/restart feature. (ACH) +!***END PROLOGUE DSTODE +!**End + EXTERNAL F, JAC !, PJAC, SLVS + INTEGER NEQ, NYH, IWM(*) REAL(kind=dp) Y(*), YH(NYH,*), YH1(*), EWT(*), SAVF(*), & - ACOR(*), WM(*) + ACOR(*), WM(*) INTEGER IOWND, IALTH, IPUP, LMAX, MEO, NQNYH, NSLP, & ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, & LYH, LEWT, LACOR, LSAVF, LWM, LIWM, METH, MITER, & - MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU - INTEGER I, I1, IREDO, IRET, J, JB, M, NCF, NEWQ + MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU + INTEGER I, I1, IREDO, IRET, J, JB, M, NCF, NEWQ REAL(kind=dp) CONIT, CRATE, EL, ELCO, HOLD, RMAX, TESCO, & - CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND + CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND REAL(kind=dp) DCON, DDN, DEL, DELP, DSM, DUP, EXDN, EXSM, & EXUP,R, RH, RHDN, RHSM, RHUP, TOLD - !REAL(kind=dp) DVNORM + !REAL(kind=dp) DVNORM COMMON /DLS001/ CONIT, CRATE, EL(13), ELCO(13,12), & HOLD, RMAX, TESCO(3,12), & CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND, & IOWND(6), IALTH, IPUP, LMAX, MEO, NQNYH, NSLP, & ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, & LYH, LEWT, LACOR, LSAVF, LWM, LIWM, METH, MITER, & - MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU -! -!***FIRST EXECUTABLE STATEMENT DSTODE - KFLAG = 0 - TOLD = TN - NCF = 0 - IERPJ = 0 - IERSL = 0 - JCUR = 0 - ICF = 0 - DELP = 0.0D0 - IF (JSTART .GT. 0) GO TO 200 - IF (JSTART .EQ. -1) GO TO 100 - IF (JSTART .EQ. -2) GO TO 160 -!----------------------------------------------------------------------- -! On the first call, the order is set to 1, and other variables are -! initialized. RMAX is the maximum ratio by which H can be increased -! in a single step. It is initially 1.E4 to compensate for the small -! initial H, but then is normally equal to 10. If a failure -! occurs (in corrector convergence or error test), RMAX is set to 2 -! for the next increase. -!----------------------------------------------------------------------- - LMAX = MAXORD + 1 - NQ = 1 - L = 2 - IALTH = 2 - RMAX = 10000.0D0 - RC = 0.0D0 - EL0 = 1.0D0 - CRATE = 0.7D0 - HOLD = H - MEO = METH - NSLP = 0 - IPUP = MITER - IRET = 3 - GO TO 140 -!----------------------------------------------------------------------- -! The following block handles preliminaries needed when JSTART = -1. -! IPUP is set to MITER to force a matrix update. -! If an order increase is about to be considered (IALTH = 1), -! IALTH is reset to 2 to postpone consideration one more step. -! If the caller has changed METH, DCFODE is called to reset -! the coefficients of the method. -! If the caller has changed MAXORD to a value less than the current -! order NQ, NQ is reduced to MAXORD, and a new H chosen accordingly. -! If H is to be changed, YH must be rescaled. -! If H or METH is being changed, IALTH is reset to L = NQ + 1 -! to prevent further changes in H for that many steps. -!----------------------------------------------------------------------- - 100 IPUP = MITER - LMAX = MAXORD + 1 - IF (IALTH .EQ. 1) IALTH = 2 - IF (METH .EQ. MEO) GO TO 110 - CALL DCFODE (METH, ELCO, TESCO) - MEO = METH - IF (NQ .GT. MAXORD) GO TO 120 - IALTH = L - IRET = 1 - GO TO 150 - 110 IF (NQ .LE. MAXORD) GO TO 160 - 120 NQ = MAXORD - L = LMAX - DO 125 I = 1,L - 125 EL(I) = ELCO(I,NQ) - NQNYH = NQ*NYH - RC = RC*EL(1)/EL0 - EL0 = EL(1) - CONIT = 0.5D0/(NQ+2) - DDN = DVNORM (N, SAVF, EWT)/TESCO(1,L) - EXDN = 1.0D0/L - RHDN = 1.0D0/(1.3D0*DDN**EXDN + 0.0000013D0) - RH = MIN(RHDN,1.0D0) - IREDO = 3 - IF (H .EQ. HOLD) GO TO 170 - RH = MIN(RH,ABS(H/HOLD)) - H = HOLD - GO TO 175 -!----------------------------------------------------------------------- -! DCFODE is called to get all the integration coefficients for the -! current METH. Then the EL vector and related constants are reset -! whenever the order NQ is changed, or at the start of the problem. -!----------------------------------------------------------------------- - 140 CALL DCFODE (METH, ELCO, TESCO) - 150 DO 155 I = 1,L - 155 EL(I) = ELCO(I,NQ) - NQNYH = NQ*NYH - RC = RC*EL(1)/EL0 - EL0 = EL(1) - CONIT = 0.5D0/(NQ+2) - GO TO (160, 170, 200), IRET -!----------------------------------------------------------------------- -! If H is being changed, the H ratio RH is checked against -! RMAX, HMIN, and HMXI, and the YH array rescaled. IALTH is set to -! L = NQ + 1 to prevent a change of H for that many steps, unless -! forced by a convergence or error test failure. -!----------------------------------------------------------------------- - 160 IF (H .EQ. HOLD) GO TO 200 - RH = H/HOLD - H = HOLD - IREDO = 3 - GO TO 175 - 170 RH = MAX(RH,HMIN/ABS(H)) - 175 RH = MIN(RH,RMAX) - RH = RH/MAX(1.0D0,ABS(H)*HMXI*RH) - R = 1.0D0 - DO 180 J = 2,L - R = R*RH - DO 180 I = 1,N - 180 YH(I,J) = YH(I,J)*R - H = H*RH - RC = RC*RH - IALTH = L - IF (IREDO .EQ. 0) GO TO 690 -!----------------------------------------------------------------------- -! This section computes the predicted values by effectively -! multiplying the YH array by the Pascal Triangle matrix. -! RC is the ratio of new to old values of the coefficient H*EL(1). -! When RC differs from 1 by more than CCMAX, IPUP is set to MITER -! to force PJAC to be called, if a Jacobian is involved. -! In any case, PJAC is called at least every MSBP steps. -!----------------------------------------------------------------------- - 200 IF (ABS(RC-1.0D0) .GT. CCMAX) IPUP = MITER - IF (NST .GE. NSLP+MSBP) IPUP = MITER - TN = TN + H - I1 = NQNYH + 1 - DO 215 JB = 1,NQ - I1 = I1 - NYH -!dir$ ivdep - DO 210 I = I1,NQNYH - 210 YH1(I) = YH1(I) + YH1(I+NYH) - 215 CONTINUE -!----------------------------------------------------------------------- -! Up to MAXCOR corrector iterations are taken. A convergence test is -! made on the R.M.S. norm of each correction, weighted by the error -! weight vector EWT. The sum of the corrections is accumulated in the -! vector ACOR(i). The YH array is not altered in the corrector loop. -!----------------------------------------------------------------------- - 220 M = 0 - DO 230 I = 1,N - 230 Y(I) = YH(I,1) - CALL F (NEQ, TN, Y, SAVF) - NFE = NFE + 1 - IF (IPUP .LE. 0) GO TO 250 -!----------------------------------------------------------------------- -! If indicated, the matrix P = I - h*el(1)*J is reevaluated and -! preprocessed before starting the corrector iteration. IPUP is set -! to 0 as an indicator that this has been done. -!----------------------------------------------------------------------- - !CALL PJAC (NEQ, Y, YH, NYH, EWT, ACOR, SAVF, WM, IWM, F, JAC) + MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU +! +!***FIRST EXECUTABLE STATEMENT DSTODE + KFLAG = 0 + TOLD = TN + NCF = 0 + IERPJ = 0 + IERSL = 0 + JCUR = 0 + ICF = 0 + DELP = 0.0D0 + IF (JSTART .GT. 0) GO TO 200 + IF (JSTART .EQ. -1) GO TO 100 + IF (JSTART .EQ. -2) GO TO 160 +!----------------------------------------------------------------------- +! On the first call, the order is set to 1, and other variables are +! initialized. RMAX is the maximum ratio by which H can be increased +! in a single step. It is initially 1.E4 to compensate for the small +! initial H, but then is normally equal to 10. If a failure +! occurs (in corrector convergence or error test), RMAX is set to 2 +! for the next increase. +!----------------------------------------------------------------------- + LMAX = MAXORD + 1 + NQ = 1 + L = 2 + IALTH = 2 + RMAX = 10000.0D0 + RC = 0.0D0 + EL0 = 1.0D0 + CRATE = 0.7D0 + HOLD = H + MEO = METH + NSLP = 0 + IPUP = MITER + IRET = 3 + GO TO 140 +!----------------------------------------------------------------------- +! The following block handles preliminaries needed when JSTART = -1. +! IPUP is set to MITER to force a matrix update. +! If an order increase is about to be considered (IALTH = 1), +! IALTH is reset to 2 to postpone consideration one more step. +! If the caller has changed METH, DCFODE is called to reset +! the coefficients of the method. +! If the caller has changed MAXORD to a value less than the current +! order NQ, NQ is reduced to MAXORD, and a new H chosen accordingly. +! If H is to be changed, YH must be rescaled. +! If H or METH is being changed, IALTH is reset to L = NQ + 1 +! to prevent further changes in H for that many steps. +!----------------------------------------------------------------------- + 100 IPUP = MITER + LMAX = MAXORD + 1 + IF (IALTH .EQ. 1) IALTH = 2 + IF (METH .EQ. MEO) GO TO 110 + CALL DCFODE (METH, ELCO, TESCO) + MEO = METH + IF (NQ .GT. MAXORD) GO TO 120 + IALTH = L + IRET = 1 + GO TO 150 + 110 IF (NQ .LE. MAXORD) GO TO 160 + 120 NQ = MAXORD + L = LMAX + DO 125 I = 1,L + 125 EL(I) = ELCO(I,NQ) + NQNYH = NQ*NYH + RC = RC*EL(1)/EL0 + EL0 = EL(1) + CONIT = 0.5D0/(NQ+2) + DDN = DVNORM (N, SAVF, EWT)/TESCO(1,L) + EXDN = 1.0D0/L + RHDN = 1.0D0/(1.3D0*DDN**EXDN + 0.0000013D0) + RH = MIN(RHDN,1.0D0) + IREDO = 3 + IF (H .EQ. HOLD) GO TO 170 + RH = MIN(RH,ABS(H/HOLD)) + H = HOLD + GO TO 175 +!----------------------------------------------------------------------- +! DCFODE is called to get all the integration coefficients for the +! current METH. Then the EL vector and related constants are reset +! whenever the order NQ is changed, or at the start of the problem. +!----------------------------------------------------------------------- + 140 CALL DCFODE (METH, ELCO, TESCO) + 150 DO 155 I = 1,L + 155 EL(I) = ELCO(I,NQ) + NQNYH = NQ*NYH + RC = RC*EL(1)/EL0 + EL0 = EL(1) + CONIT = 0.5D0/(NQ+2) + GO TO (160, 170, 200), IRET +!----------------------------------------------------------------------- +! If H is being changed, the H ratio RH is checked against +! RMAX, HMIN, and HMXI, and the YH array rescaled. IALTH is set to +! L = NQ + 1 to prevent a change of H for that many steps, unless +! forced by a convergence or error test failure. +!----------------------------------------------------------------------- + 160 IF (H .EQ. HOLD) GO TO 200 + RH = H/HOLD + H = HOLD + IREDO = 3 + GO TO 175 + 170 RH = MAX(RH,HMIN/ABS(H)) + 175 RH = MIN(RH,RMAX) + RH = RH/MAX(1.0D0,ABS(H)*HMXI*RH) + R = 1.0D0 + DO 180 J = 2,L + R = R*RH + DO 180 I = 1,N + 180 YH(I,J) = YH(I,J)*R + H = H*RH + RC = RC*RH + IALTH = L + IF (IREDO .EQ. 0) GO TO 690 +!----------------------------------------------------------------------- +! This section computes the predicted values by effectively +! multiplying the YH array by the Pascal Triangle matrix. +! RC is the ratio of new to old values of the coefficient H*EL(1). +! When RC differs from 1 by more than CCMAX, IPUP is set to MITER +! to force PJAC to be called, if a Jacobian is involved. +! In any case, PJAC is called at least every MSBP steps. +!----------------------------------------------------------------------- + 200 IF (ABS(RC-1.0D0) .GT. CCMAX) IPUP = MITER + IF (NST .GE. NSLP+MSBP) IPUP = MITER + TN = TN + H + I1 = NQNYH + 1 + DO 215 JB = 1,NQ + I1 = I1 - NYH +!dir$ ivdep + DO 210 I = I1,NQNYH + 210 YH1(I) = YH1(I) + YH1(I+NYH) + 215 CONTINUE +!----------------------------------------------------------------------- +! Up to MAXCOR corrector iterations are taken. A convergence test is +! made on the R.M.S. norm of each correction, weighted by the error +! weight vector EWT. The sum of the corrections is accumulated in the +! vector ACOR(i). The YH array is not altered in the corrector loop. +!----------------------------------------------------------------------- + 220 M = 0 + DO 230 I = 1,N + 230 Y(I) = YH(I,1) + CALL F (NEQ, TN, Y, SAVF) + NFE = NFE + 1 + IF (IPUP .LE. 0) GO TO 250 +!----------------------------------------------------------------------- +! If indicated, the matrix P = I - h*el(1)*J is reevaluated and +! preprocessed before starting the corrector iteration. IPUP is set +! to 0 as an indicator that this has been done. +!----------------------------------------------------------------------- + !CALL PJAC (NEQ, Y, YH, NYH, EWT, ACOR, SAVF, WM, IWM, F, JAC) CALL DPREPJ(NEQ, Y, YH, NYH, EWT, ACOR, SAVF, WM, IWM, F, JAC) - IPUP = 0 - RC = 1.0D0 - NSLP = NST - CRATE = 0.7D0 - IF (IERPJ .NE. 0) GO TO 430 - 250 DO 260 I = 1,N - 260 ACOR(I) = 0.0D0 - 270 IF (MITER .NE. 0) GO TO 350 -!----------------------------------------------------------------------- -! In the case of functional iteration, update Y directly from -! the result of the last function evaluation. -!----------------------------------------------------------------------- - DO 290 I = 1,N - SAVF(I) = H*SAVF(I) - YH(I,2) - 290 Y(I) = SAVF(I) - ACOR(I) - DEL = DVNORM (N, Y, EWT) - DO 300 I = 1,N - Y(I) = YH(I,1) + EL(1)*SAVF(I) - 300 ACOR(I) = SAVF(I) - GO TO 400 -!----------------------------------------------------------------------- -! In the case of the chord method, compute the corrector error, -! and solve the linear system with that as right-hand side and -! P as coefficient matrix. -!----------------------------------------------------------------------- - 350 DO 360 I = 1,N - 360 Y(I) = H*SAVF(I) - (YH(I,2) + ACOR(I)) - !CALL SLVS (WM, IWM, Y, SAVF) + IPUP = 0 + RC = 1.0D0 + NSLP = NST + CRATE = 0.7D0 + IF (IERPJ .NE. 0) GO TO 430 + 250 DO 260 I = 1,N + 260 ACOR(I) = 0.0D0 + 270 IF (MITER .NE. 0) GO TO 350 +!----------------------------------------------------------------------- +! In the case of functional iteration, update Y directly from +! the result of the last function evaluation. +!----------------------------------------------------------------------- + DO 290 I = 1,N + SAVF(I) = H*SAVF(I) - YH(I,2) + 290 Y(I) = SAVF(I) - ACOR(I) + DEL = DVNORM (N, Y, EWT) + DO 300 I = 1,N + Y(I) = YH(I,1) + EL(1)*SAVF(I) + 300 ACOR(I) = SAVF(I) + GO TO 400 +!----------------------------------------------------------------------- +! In the case of the chord method, compute the corrector error, +! and solve the linear system with that as right-hand side and +! P as coefficient matrix. +!----------------------------------------------------------------------- + 350 DO 360 I = 1,N + 360 Y(I) = H*SAVF(I) - (YH(I,2) + ACOR(I)) + !CALL SLVS (WM, IWM, Y, SAVF) CALL DSOLSY(WM, IWM, Y, SAVF) - IF (IERSL .LT. 0) GO TO 430 - IF (IERSL .GT. 0) GO TO 410 - DEL = DVNORM (N, Y, EWT) - DO 380 I = 1,N - ACOR(I) = ACOR(I) + Y(I) - 380 Y(I) = YH(I,1) + EL(1)*ACOR(I) -!----------------------------------------------------------------------- -! Test for convergence. If M.gt.0, an estimate of the convergence -! rate constant is stored in CRATE, and this is used in the test. -!----------------------------------------------------------------------- - 400 IF (M .NE. 0) CRATE = MAX(0.2D0*CRATE,DEL/DELP) - DCON = DEL*MIN(1.0D0,1.5D0*CRATE)/(TESCO(2,NQ)*CONIT) - IF (DCON .LE. 1.0D0) GO TO 450 - M = M + 1 - IF (M .EQ. MAXCOR) GO TO 410 - IF (M .GE. 2 .AND. DEL .GT. 2.0D0*DELP) GO TO 410 - DELP = DEL - CALL F (NEQ, TN, Y, SAVF) - NFE = NFE + 1 - GO TO 270 -!----------------------------------------------------------------------- -! The corrector iteration failed to converge. -! If MITER .ne. 0 and the Jacobian is out of date, PJAC is called for -! the next try. Otherwise the YH array is retracted to its values -! before prediction, and H is reduced, if possible. If H cannot be -! reduced or MXNCF failures have occurred, exit with KFLAG = -2. -!----------------------------------------------------------------------- - 410 IF (MITER .EQ. 0 .OR. JCUR .EQ. 1) GO TO 430 - ICF = 1 - IPUP = MITER - GO TO 220 - 430 ICF = 2 - NCF = NCF + 1 - RMAX = 2.0D0 - TN = TOLD - I1 = NQNYH + 1 - DO 445 JB = 1,NQ - I1 = I1 - NYH -!dir$ ivdep - DO 440 I = I1,NQNYH - 440 YH1(I) = YH1(I) - YH1(I+NYH) - 445 CONTINUE - IF (IERPJ .LT. 0 .OR. IERSL .LT. 0) GO TO 680 - IF (ABS(H) .LE. HMIN*1.00001D0) GO TO 670 - IF (NCF .EQ. MXNCF) GO TO 670 - RH = 0.25D0 - IPUP = MITER - IREDO = 1 - GO TO 170 -!----------------------------------------------------------------------- -! The corrector has converged. JCUR is set to 0 -! to signal that the Jacobian involved may need updating later. -! The local error test is made and control passes to statement 500 -! if it fails. -!----------------------------------------------------------------------- - 450 JCUR = 0 - IF (M .EQ. 0) DSM = DEL/TESCO(2,NQ) - IF (M .GT. 0) DSM = DVNORM (N, ACOR, EWT)/TESCO(2,NQ) - IF (DSM .GT. 1.0D0) GO TO 500 -!----------------------------------------------------------------------- -! After a successful step, update the YH array. -! Consider changing H if IALTH = 1. Otherwise decrease IALTH by 1. -! If IALTH is then 1 and NQ .lt. MAXORD, then ACOR is saved for -! use in a possible order increase on the next step. -! If a change in H is considered, an increase or decrease in order -! by one is considered also. A change in H is made only if it is by a -! factor of at least 1.1. If not, IALTH is set to 3 to prevent -! testing for that many steps. -!----------------------------------------------------------------------- - KFLAG = 0 - IREDO = 0 - NST = NST + 1 - HU = H - NQU = NQ - DO 470 J = 1,L - DO 470 I = 1,N - 470 YH(I,J) = YH(I,J) + EL(J)*ACOR(I) - IALTH = IALTH - 1 - IF (IALTH .EQ. 0) GO TO 520 - IF (IALTH .GT. 1) GO TO 700 - IF (L .EQ. LMAX) GO TO 700 - DO 490 I = 1,N - 490 YH(I,LMAX) = ACOR(I) - GO TO 700 -!----------------------------------------------------------------------- -! The error test failed. KFLAG keeps track of multiple failures. -! Restore TN and the YH array to their previous values, and prepare -! to try the step again. Compute the optimum step size for this or -! one lower order. After 2 or more failures, H is forced to decrease -! by a factor of 0.2 or less. -!----------------------------------------------------------------------- - 500 KFLAG = KFLAG - 1 - TN = TOLD - I1 = NQNYH + 1 - DO 515 JB = 1,NQ - I1 = I1 - NYH -!dir$ ivdep - DO 510 I = I1,NQNYH - 510 YH1(I) = YH1(I) - YH1(I+NYH) - 515 CONTINUE - RMAX = 2.0D0 - IF (ABS(H) .LE. HMIN*1.00001D0) GO TO 660 - IF (KFLAG .LE. -3) GO TO 640 - IREDO = 2 - RHUP = 0.0D0 - GO TO 540 -!----------------------------------------------------------------------- -! Regardless of the success or failure of the step, factors -! RHDN, RHSM, and RHUP are computed, by which H could be multiplied -! at order NQ - 1, order NQ, or order NQ + 1, respectively. -! In the case of failure, RHUP = 0.0 to avoid an order increase. -! The largest of these is determined and the new order chosen -! accordingly. If the order is to be increased, we compute one -! additional scaled derivative. -!----------------------------------------------------------------------- - 520 RHUP = 0.0D0 - IF (L .EQ. LMAX) GO TO 540 - DO 530 I = 1,N - 530 SAVF(I) = ACOR(I) - YH(I,LMAX) - DUP = DVNORM (N, SAVF, EWT)/TESCO(3,NQ) - EXUP = 1.0D0/(L+1) - RHUP = 1.0D0/(1.4D0*DUP**EXUP + 0.0000014D0) - 540 EXSM = 1.0D0/L - RHSM = 1.0D0/(1.2D0*DSM**EXSM + 0.0000012D0) - RHDN = 0.0D0 - IF (NQ .EQ. 1) GO TO 560 - DDN = DVNORM (N, YH(1,L), EWT)/TESCO(1,NQ) - EXDN = 1.0D0/NQ - RHDN = 1.0D0/(1.3D0*DDN**EXDN + 0.0000013D0) - 560 IF (RHSM .GE. RHUP) GO TO 570 - IF (RHUP .GT. RHDN) GO TO 590 - GO TO 580 - 570 IF (RHSM .LT. RHDN) GO TO 580 - NEWQ = NQ - RH = RHSM - GO TO 620 - 580 NEWQ = NQ - 1 - RH = RHDN - IF (KFLAG .LT. 0 .AND. RH .GT. 1.0D0) RH = 1.0D0 - GO TO 620 - 590 NEWQ = L - RH = RHUP - IF (RH .LT. 1.1D0) GO TO 610 - R = EL(L)/L - DO 600 I = 1,N - 600 YH(I,NEWQ+1) = ACOR(I)*R - GO TO 630 - 610 IALTH = 3 - GO TO 700 - 620 IF ((KFLAG .EQ. 0) .AND. (RH .LT. 1.1D0)) GO TO 610 - IF (KFLAG .LE. -2) RH = MIN(RH,0.2D0) -!----------------------------------------------------------------------- -! If there is a change of order, reset NQ, l, and the coefficients. -! In any case H is reset according to RH and the YH array is rescaled. -! Then exit from 690 if the step was OK, or redo the step otherwise. -!----------------------------------------------------------------------- - IF (NEWQ .EQ. NQ) GO TO 170 - 630 NQ = NEWQ - L = NQ + 1 - IRET = 2 - GO TO 150 -!----------------------------------------------------------------------- -! Control reaches this section if 3 or more failures have occured. -! If 10 failures have occurred, exit with KFLAG = -1. -! It is assumed that the derivatives that have accumulated in the -! YH array have errors of the wrong order. Hence the first -! derivative is recomputed, and the order is set to 1. Then -! H is reduced by a factor of 10, and the step is retried, -! until it succeeds or H reaches HMIN. -!----------------------------------------------------------------------- - 640 IF (KFLAG .EQ. -10) GO TO 660 - RH = 0.1D0 - RH = MAX(HMIN/ABS(H),RH) - H = H*RH - DO 645 I = 1,N - 645 Y(I) = YH(I,1) - CALL F (NEQ, TN, Y, SAVF) - NFE = NFE + 1 - DO 650 I = 1,N - 650 YH(I,2) = H*SAVF(I) - IPUP = MITER - IALTH = 5 - IF (NQ .EQ. 1) GO TO 200 - NQ = 1 - L = 2 - IRET = 3 - GO TO 150 -!----------------------------------------------------------------------- -! All returns are made through this section. H is saved in HOLD -! to allow the caller to change H on the next step. -!----------------------------------------------------------------------- - 660 KFLAG = -1 - GO TO 720 - 670 KFLAG = -2 - GO TO 720 - 680 KFLAG = -3 - GO TO 720 - 690 RMAX = 10.0D0 - 700 R = 1.0D0/TESCO(2,NQU) - DO 710 I = 1,N - 710 ACOR(I) = ACOR(I)*R - 720 HOLD = H - JSTART = 1 - RETURN + IF (IERSL .LT. 0) GO TO 430 + IF (IERSL .GT. 0) GO TO 410 + DEL = DVNORM (N, Y, EWT) + DO 380 I = 1,N + ACOR(I) = ACOR(I) + Y(I) + 380 Y(I) = YH(I,1) + EL(1)*ACOR(I) +!----------------------------------------------------------------------- +! Test for convergence. If M.gt.0, an estimate of the convergence +! rate constant is stored in CRATE, and this is used in the test. +!----------------------------------------------------------------------- + 400 IF (M .NE. 0) CRATE = MAX(0.2D0*CRATE,DEL/DELP) + DCON = DEL*MIN(1.0D0,1.5D0*CRATE)/(TESCO(2,NQ)*CONIT) + IF (DCON .LE. 1.0D0) GO TO 450 + M = M + 1 + IF (M .EQ. MAXCOR) GO TO 410 + IF (M .GE. 2 .AND. DEL .GT. 2.0D0*DELP) GO TO 410 + DELP = DEL + CALL F (NEQ, TN, Y, SAVF) + NFE = NFE + 1 + GO TO 270 +!----------------------------------------------------------------------- +! The corrector iteration failed to converge. +! If MITER .ne. 0 and the Jacobian is out of date, PJAC is called for +! the next try. Otherwise the YH array is retracted to its values +! before prediction, and H is reduced, if possible. If H cannot be +! reduced or MXNCF failures have occurred, exit with KFLAG = -2. +!----------------------------------------------------------------------- + 410 IF (MITER .EQ. 0 .OR. JCUR .EQ. 1) GO TO 430 + ICF = 1 + IPUP = MITER + GO TO 220 + 430 ICF = 2 + NCF = NCF + 1 + RMAX = 2.0D0 + TN = TOLD + I1 = NQNYH + 1 + DO 445 JB = 1,NQ + I1 = I1 - NYH +!dir$ ivdep + DO 440 I = I1,NQNYH + 440 YH1(I) = YH1(I) - YH1(I+NYH) + 445 CONTINUE + IF (IERPJ .LT. 0 .OR. IERSL .LT. 0) GO TO 680 + IF (ABS(H) .LE. HMIN*1.00001D0) GO TO 670 + IF (NCF .EQ. MXNCF) GO TO 670 + RH = 0.25D0 + IPUP = MITER + IREDO = 1 + GO TO 170 +!----------------------------------------------------------------------- +! The corrector has converged. JCUR is set to 0 +! to signal that the Jacobian involved may need updating later. +! The local error test is made and control passes to statement 500 +! if it fails. +!----------------------------------------------------------------------- + 450 JCUR = 0 + IF (M .EQ. 0) DSM = DEL/TESCO(2,NQ) + IF (M .GT. 0) DSM = DVNORM (N, ACOR, EWT)/TESCO(2,NQ) + IF (DSM .GT. 1.0D0) GO TO 500 +!----------------------------------------------------------------------- +! After a successful step, update the YH array. +! Consider changing H if IALTH = 1. Otherwise decrease IALTH by 1. +! If IALTH is then 1 and NQ .lt. MAXORD, then ACOR is saved for +! use in a possible order increase on the next step. +! If a change in H is considered, an increase or decrease in order +! by one is considered also. A change in H is made only if it is by a +! factor of at least 1.1. If not, IALTH is set to 3 to prevent +! testing for that many steps. +!----------------------------------------------------------------------- + KFLAG = 0 + IREDO = 0 + NST = NST + 1 + HU = H + NQU = NQ + DO 470 J = 1,L + DO 470 I = 1,N + 470 YH(I,J) = YH(I,J) + EL(J)*ACOR(I) + IALTH = IALTH - 1 + IF (IALTH .EQ. 0) GO TO 520 + IF (IALTH .GT. 1) GO TO 700 + IF (L .EQ. LMAX) GO TO 700 + DO 490 I = 1,N + 490 YH(I,LMAX) = ACOR(I) + GO TO 700 +!----------------------------------------------------------------------- +! The error test failed. KFLAG keeps track of multiple failures. +! Restore TN and the YH array to their previous values, and prepare +! to try the step again. Compute the optimum step size for this or +! one lower order. After 2 or more failures, H is forced to decrease +! by a factor of 0.2 or less. +!----------------------------------------------------------------------- + 500 KFLAG = KFLAG - 1 + TN = TOLD + I1 = NQNYH + 1 + DO 515 JB = 1,NQ + I1 = I1 - NYH +!dir$ ivdep + DO 510 I = I1,NQNYH + 510 YH1(I) = YH1(I) - YH1(I+NYH) + 515 CONTINUE + RMAX = 2.0D0 + IF (ABS(H) .LE. HMIN*1.00001D0) GO TO 660 + IF (KFLAG .LE. -3) GO TO 640 + IREDO = 2 + RHUP = 0.0D0 + GO TO 540 +!----------------------------------------------------------------------- +! Regardless of the success or failure of the step, factors +! RHDN, RHSM, and RHUP are computed, by which H could be multiplied +! at order NQ - 1, order NQ, or order NQ + 1, respectively. +! In the case of failure, RHUP = 0.0 to avoid an order increase. +! The largest of these is determined and the new order chosen +! accordingly. If the order is to be increased, we compute one +! additional scaled derivative. +!----------------------------------------------------------------------- + 520 RHUP = 0.0D0 + IF (L .EQ. LMAX) GO TO 540 + DO 530 I = 1,N + 530 SAVF(I) = ACOR(I) - YH(I,LMAX) + DUP = DVNORM (N, SAVF, EWT)/TESCO(3,NQ) + EXUP = 1.0D0/(L+1) + RHUP = 1.0D0/(1.4D0*DUP**EXUP + 0.0000014D0) + 540 EXSM = 1.0D0/L + RHSM = 1.0D0/(1.2D0*DSM**EXSM + 0.0000012D0) + RHDN = 0.0D0 + IF (NQ .EQ. 1) GO TO 560 + DDN = DVNORM (N, YH(1,L), EWT)/TESCO(1,NQ) + EXDN = 1.0D0/NQ + RHDN = 1.0D0/(1.3D0*DDN**EXDN + 0.0000013D0) + 560 IF (RHSM .GE. RHUP) GO TO 570 + IF (RHUP .GT. RHDN) GO TO 590 + GO TO 580 + 570 IF (RHSM .LT. RHDN) GO TO 580 + NEWQ = NQ + RH = RHSM + GO TO 620 + 580 NEWQ = NQ - 1 + RH = RHDN + IF (KFLAG .LT. 0 .AND. RH .GT. 1.0D0) RH = 1.0D0 + GO TO 620 + 590 NEWQ = L + RH = RHUP + IF (RH .LT. 1.1D0) GO TO 610 + R = EL(L)/L + DO 600 I = 1,N + 600 YH(I,NEWQ+1) = ACOR(I)*R + GO TO 630 + 610 IALTH = 3 + GO TO 700 + 620 IF ((KFLAG .EQ. 0) .AND. (RH .LT. 1.1D0)) GO TO 610 + IF (KFLAG .LE. -2) RH = MIN(RH,0.2D0) +!----------------------------------------------------------------------- +! If there is a change of order, reset NQ, l, and the coefficients. +! In any case H is reset according to RH and the YH array is rescaled. +! Then exit from 690 if the step was OK, or redo the step otherwise. +!----------------------------------------------------------------------- + IF (NEWQ .EQ. NQ) GO TO 170 + 630 NQ = NEWQ + L = NQ + 1 + IRET = 2 + GO TO 150 +!----------------------------------------------------------------------- +! Control reaches this section if 3 or more failures have occured. +! If 10 failures have occurred, exit with KFLAG = -1. +! It is assumed that the derivatives that have accumulated in the +! YH array have errors of the wrong order. Hence the first +! derivative is recomputed, and the order is set to 1. Then +! H is reduced by a factor of 10, and the step is retried, +! until it succeeds or H reaches HMIN. +!----------------------------------------------------------------------- + 640 IF (KFLAG .EQ. -10) GO TO 660 + RH = 0.1D0 + RH = MAX(HMIN/ABS(H),RH) + H = H*RH + DO 645 I = 1,N + 645 Y(I) = YH(I,1) + CALL F (NEQ, TN, Y, SAVF) + NFE = NFE + 1 + DO 650 I = 1,N + 650 YH(I,2) = H*SAVF(I) + IPUP = MITER + IALTH = 5 + IF (NQ .EQ. 1) GO TO 200 + NQ = 1 + L = 2 + IRET = 3 + GO TO 150 +!----------------------------------------------------------------------- +! All returns are made through this section. H is saved in HOLD +! to allow the caller to change H on the next step. +!----------------------------------------------------------------------- + 660 KFLAG = -1 + GO TO 720 + 670 KFLAG = -2 + GO TO 720 + 680 KFLAG = -3 + GO TO 720 + 690 RMAX = 10.0D0 + 700 R = 1.0D0/TESCO(2,NQU) + DO 710 I = 1,N + 710 ACOR(I) = ACOR(I)*R + 720 HOLD = H + JSTART = 1 + RETURN !----------------------- END OF SUBROUTINE DSTODE ---------------------- - END SUBROUTINE DSTODE -!DECK DEWSET - SUBROUTINE DEWSET (N, ITOL, RelTol, AbsTol, YCUR, EWT) -!***BEGIN PROLOGUE DEWSET -!***SUBSIDIARY -!***PURPOSE Set error weight vector. -!***TYPE REAL(kind=dp) (SEWSET-S, DEWSET-D) -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! This subroutine sets the error weight vector EWT according to -! EWT(i) = RelTol(i)*ABS(YCUR(i)) + AbsTol(i), i = 1,...,N, -! with the subscript on RelTol and/or AbsTol possibly replaced by 1 above, -! depending on the value of ITOL. -! -!***SEE ALSO DLSODE -!***ROUTINES CALLED (NONE) -!***REVISION HISTORY (YYMMDD) -! 791129 DATE WRITTEN -! 890501 Modified prologue to SLATEC/LDOC format. (FNF) -! 890503 Minor cosmetic changes. (FNF) -! 930809 Renamed to allow single/double precision versions. (ACH) -!***END PROLOGUE DEWSET -!**End - INTEGER N, ITOL - INTEGER I - REAL(kind=dp) RelTol(*), AbsTol(*), YCUR(N), EWT(N) -! -!***FIRST EXECUTABLE STATEMENT DEWSET - GO TO (10, 20, 30, 40), ITOL - 10 CONTINUE - DO 15 I = 1,N - 15 EWT(I) = RelTol(1)*ABS(YCUR(I)) + AbsTol(1) - RETURN - 20 CONTINUE - DO 25 I = 1,N - 25 EWT(I) = RelTol(1)*ABS(YCUR(I)) + AbsTol(I) - RETURN - 30 CONTINUE - DO 35 I = 1,N - 35 EWT(I) = RelTol(I)*ABS(YCUR(I)) + AbsTol(1) - RETURN - 40 CONTINUE - DO 45 I = 1,N - 45 EWT(I) = RelTol(I)*ABS(YCUR(I)) + AbsTol(I) - RETURN + END SUBROUTINE DSTODE +!DECK DEWSET + SUBROUTINE DEWSET (N, ITOL, RelTol, AbsTol, YCUR, EWT) +!***BEGIN PROLOGUE DEWSET +!***SUBSIDIARY +!***PURPOSE Set error weight vector. +!***TYPE REAL(kind=dp) (SEWSET-S, DEWSET-D) +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! This subroutine sets the error weight vector EWT according to +! EWT(i) = RelTol(i)*ABS(YCUR(i)) + AbsTol(i), i = 1,...,N, +! with the subscript on RelTol and/or AbsTol possibly replaced by 1 above, +! depending on the value of ITOL. +! +!***SEE ALSO DLSODE +!***ROUTINES CALLED (NONE) +!***REVISION HISTORY (YYMdmdv) +! 791129 DATE WRITTEN +! 890501 Modified prologue to SLATEC/LDOC format. (FNF) +! 890503 Minor cosmetic changes. (FNF) +! 930809 Renamed to allow single/double precision versions. (ACH) +!***END PROLOGUE DEWSET +!**End + INTEGER N, ITOL + INTEGER I + REAL(kind=dp) RelTol(*), AbsTol(*), YCUR(N), EWT(N) +! +!***FIRST EXECUTABLE STATEMENT DEWSET + GO TO (10, 20, 30, 40), ITOL + 10 CONTINUE + DO 15 I = 1,N + 15 EWT(I) = RelTol(1)*ABS(YCUR(I)) + AbsTol(1) + RETURN + 20 CONTINUE + DO 25 I = 1,N + 25 EWT(I) = RelTol(1)*ABS(YCUR(I)) + AbsTol(I) + RETURN + 30 CONTINUE + DO 35 I = 1,N + 35 EWT(I) = RelTol(I)*ABS(YCUR(I)) + AbsTol(1) + RETURN + 40 CONTINUE + DO 45 I = 1,N + 45 EWT(I) = RelTol(I)*ABS(YCUR(I)) + AbsTol(I) + RETURN !----------------------- END OF SUBROUTINE DEWSET ---------------------- - END SUBROUTINE DEWSET -!DECK DVNORM - REAL(kind=dp) FUNCTION DVNORM (N, V, W) -!***BEGIN PROLOGUE DVNORM -!***SUBSIDIARY -!***PURPOSE Weighted root-mean-square vector norm. -!***TYPE REAL(kind=dp) (SVNORM-S, DVNORM-D) -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! This function routine computes the weighted root-mean-square norm -! of the vector of length N contained in the array V, with weights -! contained in the array W of length N: -! DVNORM = SQRT( (1/N) * SUM( V(i)*W(i) )**2 ) -! -!***SEE ALSO DLSODE -!***ROUTINES CALLED (NONE) -!***REVISION HISTORY (YYMMDD) -! 791129 DATE WRITTEN -! 890501 Modified prologue to SLATEC/LDOC format. (FNF) -! 890503 Minor cosmetic changes. (FNF) -! 930809 Renamed to allow single/double precision versions. (ACH) -!***END PROLOGUE DVNORM -!**End - INTEGER N, I - REAL(kind=dp) V(N), W(N), SUM -! -!***FIRST EXECUTABLE STATEMENT DVNORM - SUM = 0.0D0 - DO 10 I = 1,N - 10 SUM = SUM + (V(I)*W(I))**2 - DVNORM = SQRT(SUM/N) - RETURN + END SUBROUTINE DEWSET +!DECK DVNORM + REAL(kind=dp) FUNCTION DVNORM (N, V, W) +!***BEGIN PROLOGUE DVNORM +!***SUBSIDIARY +!***PURPOSE Weighted root-mean-square vector norm. +!***TYPE REAL(kind=dp) (SVNORM-S, DVNORM-D) +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! This function routine computes the weighted root-mean-square norm +! of the vector of length N contained in the array V, with weights +! contained in the array W of length N: +! DVNORM = SQRT( (1/N) * SUM( V(i)*W(i) )**2 ) +! +!***SEE ALSO DLSODE +!***ROUTINES CALLED (NONE) +!***REVISION HISTORY (YYMdmdv) +! 791129 DATE WRITTEN +! 890501 Modified prologue to SLATEC/LDOC format. (FNF) +! 890503 Minor cosmetic changes. (FNF) +! 930809 Renamed to allow single/double precision versions. (ACH) +!***END PROLOGUE DVNORM +!**End + INTEGER N, I + REAL(kind=dp) V(N), W(N), SUM +! +!***FIRST EXECUTABLE STATEMENT DVNORM + SUM = 0.0D0 + DO 10 I = 1,N + 10 SUM = SUM + (V(I)*W(I))**2 + DVNORM = SQRT(SUM/N) + RETURN !----------------------- END OF FUNCTION DVNORM ------------------------ - END FUNCTION DVNORM -!DECK XERRWD - SUBROUTINE XERRWD (MSG, NMES, NERR, LEVEL, NI, I1, I2, NR, R1, R2) -!***BEGIN PROLOGUE XERRWD -!***SUBSIDIARY -!***PURPOSE Write error message with values. -!***CATEGORY R3C -!***TYPE REAL(kind=dp) (XERRWV-S, XERRWD-D) -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! Subroutines XERRWD, XSETF, XSETUN, and the function routine IXSAV, -! as given here, constitute a simplified version of the SLATEC error -! handling package. -! -! All arguments are input arguments. -! -! MSG = The message (character array). -! NMES = The length of MSG (number of characters). -! NERR = The error number (not used). -! LEVEL = The error level.. -! 0 or 1 means recoverable (control returns to caller). -! 2 means fatal (run is aborted--see note below). -! NI = Number of integers (0, 1, or 2) to be printed with message. -! I1,I2 = Integers to be printed, depending on NI. -! NR = Number of reals (0, 1, or 2) to be printed with message. -! R1,R2 = Reals to be printed, depending on NR. -! -! Note.. this routine is machine-dependent and specialized for use -! in limited context, in the following ways.. -! 1. The argument MSG is assumed to be of type CHARACTER, and -! the message is printed with a format of (1X,A). -! 2. The message is assumed to take only one line. -! Multi-line messages are generated by repeated calls. -! 3. If LEVEL = 2, control passes to the statement STOP -! to abort the run. This statement may be machine-dependent. -! 4. R1 and R2 are assumed to be in double precision and are printed -! in D21.13 format. -! -!***ROUTINES CALLED IXSAV -!***REVISION HISTORY (YYMMDD) -! 920831 DATE WRITTEN -! 921118 Replaced MFLGSV/LUNSAV by IXSAV. (ACH) -! 930329 Modified prologue to SLATEC format. (FNF) -! 930407 Changed MSG from CHARACTER*1 array to variable. (FNF) -! 930922 Minor cosmetic change. (FNF) -!***END PROLOGUE XERRWD -! -!*Internal Notes: -! -! For a different default logical unit number, IXSAV (or a subsidiary -! routine that it calls) will need to be modified. -! For a different run-abort command, change the statement following -! statement 100 at the end. -!----------------------------------------------------------------------- -! Subroutines called by XERRWD.. None -! Function routine called by XERRWD.. IXSAV -!----------------------------------------------------------------------- -!**End -! -! Declare arguments. -! - REAL(kind=dp) R1, R2 - INTEGER NMES, NERR, LEVEL, NI, I1, I2, NR - CHARACTER*(*) MSG -! -! Declare local variables. -! - INTEGER LUNIT, MESFLG !, IXSAV -! -! Get logical unit number and message print flag. -! -!***FIRST EXECUTABLE STATEMENT XERRWD - LUNIT = IXSAV (1, 0, .FALSE.) - MESFLG = IXSAV (2, 0, .FALSE.) - IF (MESFLG .EQ. 0) GO TO 100 -! -! Write the message. -! - WRITE (LUNIT,10) MSG - 10 FORMAT(1X,A) - IF (NI .EQ. 1) WRITE (LUNIT, 20) I1 - 20 FORMAT(6X,'In above message, I1 =',I10) - IF (NI .EQ. 2) WRITE (LUNIT, 30) I1,I2 - 30 FORMAT(6X,'In above message, I1 =',I10,3X,'I2 =',I10) - IF (NR .EQ. 1) WRITE (LUNIT, 40) R1 - 40 FORMAT(6X,'In above message, R1 =',D21.13) - IF (NR .EQ. 2) WRITE (LUNIT, 50) R1,R2 - 50 FORMAT(6X,'In above, R1 =',D21.13,3X,'R2 =',D21.13) -! -! Abort the run if LEVEL = 2. -! - 100 IF (LEVEL .NE. 2) RETURN - STOP + END FUNCTION DVNORM +!DECK XERRWD + SUBROUTINE XERRWD (MSG, NMES, NERR, LEVEL, NI, I1, I2, NR, R1, R2) +!***BEGIN PROLOGUE XERRWD +!***SUBSIDIARY +!***PURPOSE Write error message with values. +!***CATEGORY R3C +!***TYPE REAL(kind=dp) (XERRWV-S, XERRWD-D) +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! Subroutines XERRWD, XSETF, XSETUN, and the function routine IXSAV, +! as given here, constitute a simplified version of the SLATEC error +! handling package. +! +! All arguments are input arguments. +! +! MSG = The message (character array). +! NMES = The length of MSG (number of characters). +! NERR = The error number (not used). +! LEVEL = The error level.. +! 0 or 1 means recoverable (control returns to caller). +! 2 means fatal (run is aborted--see note below). +! NI = Number of integers (0, 1, or 2) to be printed with message. +! I1,I2 = Integers to be printed, depending on NI. +! NR = Number of reals (0, 1, or 2) to be printed with message. +! R1,R2 = Reals to be printed, depending on NR. +! +! Note.. this routine is machine-dependent and specialized for use +! in limited context, in the following ways.. +! 1. The argument MSG is assumed to be of type CHARACTER, and +! the message is printed with a format of (1X,A). +! 2. The message is assumed to take only one line. +! Multi-line messages are generated by repeated calls. +! 3. If LEVEL = 2, control passes to the statement STOP +! to abort the run. This statement may be machine-dependent. +! 4. R1 and R2 are assumed to be in double precision and are printed +! in D21.13 format. +! +!***ROUTINES CALLED IXSAV +!***REVISION HISTORY (YYMdmdv) +! 920831 DATE WRITTEN +! 921118 Replaced MFLGSV/LUNSAV by IXSAV. (ACH) +! 930329 Modified prologue to SLATEC format. (FNF) +! 930407 Changed MSG from CHARACTER*1 array to variable. (FNF) +! 930922 Minor cosmetic change. (FNF) +!***END PROLOGUE XERRWD +! +!*Internal Notes: +! +! For a different default logical unit number, IXSAV (or a subsidiary +! routine that it calls) will need to be modified. +! For a different run-abort command, change the statement following +! statement 100 at the end. +!----------------------------------------------------------------------- +! Subroutines called by XERRWD.. None +! Function routine called by XERRWD.. IXSAV +!----------------------------------------------------------------------- +!**End +! +! Declare arguments. +! + REAL(kind=dp) R1, R2 + INTEGER NMES, NERR, LEVEL, NI, I1, I2, NR + CHARACTER*(*) MSG +! +! Declare local variables. +! + INTEGER LUNIT, MESFLG !, IXSAV +! +! Get logical unit number and message print flag. +! +!***FIRST EXECUTABLE STATEMENT XERRWD + LUNIT = IXSAV (1, 0, .FALSE.) + MESFLG = IXSAV (2, 0, .FALSE.) + IF (MESFLG .EQ. 0) GO TO 100 +! +! Write the message. +! + WRITE (LUNIT,10) MSG + 10 FORMAT(1X,A) + IF (NI .EQ. 1) WRITE (LUNIT, 20) I1 + 20 FORMAT(6X,'In above message, I1 =',I10) + IF (NI .EQ. 2) WRITE (LUNIT, 30) I1,I2 + 30 FORMAT(6X,'In above message, I1 =',I10,3X,'I2 =',I10) + IF (NR .EQ. 1) WRITE (LUNIT, 40) R1 + 40 FORMAT(6X,'In above message, R1 =',D21.13) + IF (NR .EQ. 2) WRITE (LUNIT, 50) R1,R2 + 50 FORMAT(6X,'In above, R1 =',D21.13,3X,'R2 =',D21.13) +! +! Abort the run if LEVEL = 2. +! + 100 IF (LEVEL .NE. 2) RETURN + STOP !----------------------- End of Subroutine XERRWD ---------------------- - END SUBROUTINE XERRWD -!DECK XSETF - SUBROUTINE XSETF (MFLAG) -!***BEGIN PROLOGUE XSETF -!***PURPOSE Reset the error print control flag. -!***CATEGORY R3A -!***TYPE ALL (XSETF-A) -!***KEYWORDS ERROR CONTROL -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! XSETF sets the error print control flag to MFLAG: -! MFLAG=1 means print all messages (the default). -! MFLAG=0 means no printing. -! -!***SEE ALSO XERRWD, XERRWV -!***REFERENCES (NONE) -!***ROUTINES CALLED IXSAV -!***REVISION HISTORY (YYMMDD) -! 921118 DATE WRITTEN -! 930329 Added SLATEC format prologue. (FNF) -! 930407 Corrected SEE ALSO section. (FNF) -! 930922 Made user-callable, and other cosmetic changes. (FNF) -!***END PROLOGUE XSETF -! -! Subroutines called by XSETF.. None -! Function routine called by XSETF.. IXSAV -!----------------------------------------------------------------------- -!**End - INTEGER MFLAG, JUNK !, IXSAV -! -!***FIRST EXECUTABLE STATEMENT XSETF - IF (MFLAG .EQ. 0 .OR. MFLAG .EQ. 1) JUNK = IXSAV (2,MFLAG,.TRUE.) - RETURN + END SUBROUTINE XERRWD +!DECK XSETF + SUBROUTINE XSETF (MFLAG) +!***BEGIN PROLOGUE XSETF +!***PURPOSE Reset the error print control flag. +!***CATEGORY R3A +!***TYPE ALL (XSETF-A) +!***KEYWORDS ERROR CONTROL +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! XSETF sets the error print control flag to MFLAG: +! MFLAG=1 means print all messages (the default). +! MFLAG=0 means no printing. +! +!***SEE ALSO XERRWD, XERRWV +!***REFERENCES (NONE) +!***ROUTINES CALLED IXSAV +!***REVISION HISTORY (YYMdmdv) +! 921118 DATE WRITTEN +! 930329 Added SLATEC format prologue. (FNF) +! 930407 Corrected SEE ALSO section. (FNF) +! 930922 Made user-callable, and other cosmetic changes. (FNF) +!***END PROLOGUE XSETF +! +! Subroutines called by XSETF.. None +! Function routine called by XSETF.. IXSAV +!----------------------------------------------------------------------- +!**End + INTEGER MFLAG, JUNK !, IXSAV +! +!***FIRST EXECUTABLE STATEMENT XSETF + IF (MFLAG .EQ. 0 .OR. MFLAG .EQ. 1) JUNK = IXSAV (2,MFLAG,.TRUE.) + RETURN !----------------------- End of Subroutine XSETF ----------------------- - END SUBROUTINE XSETF -!DECK XSETUN - SUBROUTINE XSETUN (LUN) -!***BEGIN PROLOGUE XSETUN -!***PURPOSE Reset the logical unit number for error messages. -!***CATEGORY R3B -!***TYPE ALL (XSETUN-A) -!***KEYWORDS ERROR CONTROL -!***DESCRIPTION -! -! XSETUN sets the logical unit number for error messages to LUN. -! -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***SEE ALSO XERRWD, XERRWV -!***REFERENCES (NONE) -!***ROUTINES CALLED IXSAV -!***REVISION HISTORY (YYMMDD) -! 921118 DATE WRITTEN -! 930329 Added SLATEC format prologue. (FNF) -! 930407 Corrected SEE ALSO section. (FNF) -! 930922 Made user-callable, and other cosmetic changes. (FNF) -!***END PROLOGUE XSETUN -! -! Subroutines called by XSETUN.. None -! Function routine called by XSETUN.. IXSAV -!----------------------------------------------------------------------- -!**End - INTEGER LUN, JUNK !, IXSAV -! -!***FIRST EXECUTABLE STATEMENT XSETUN - IF (LUN .GT. 0) JUNK = IXSAV (1,LUN,.TRUE.) - RETURN + END SUBROUTINE XSETF +!DECK XSETUN + SUBROUTINE XSETUN (LUN) +!***BEGIN PROLOGUE XSETUN +!***PURPOSE Reset the logical unit number for error messages. +!***CATEGORY R3B +!***TYPE ALL (XSETUN-A) +!***KEYWORDS ERROR CONTROL +!***DESCRIPTION +! +! XSETUN sets the logical unit number for error messages to LUN. +! +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***SEE ALSO XERRWD, XERRWV +!***REFERENCES (NONE) +!***ROUTINES CALLED IXSAV +!***REVISION HISTORY (YYMdmdv) +! 921118 DATE WRITTEN +! 930329 Added SLATEC format prologue. (FNF) +! 930407 Corrected SEE ALSO section. (FNF) +! 930922 Made user-callable, and other cosmetic changes. (FNF) +!***END PROLOGUE XSETUN +! +! Subroutines called by XSETUN.. None +! Function routine called by XSETUN.. IXSAV +!----------------------------------------------------------------------- +!**End + INTEGER LUN, JUNK !, IXSAV +! +!***FIRST EXECUTABLE STATEMENT XSETUN + IF (LUN .GT. 0) JUNK = IXSAV (1,LUN,.TRUE.) + RETURN !----------------------- End of Subroutine XSETUN ---------------------- - END SUBROUTINE XSETUN -!DECK IXSAV - INTEGER FUNCTION IXSAV (IPAR, IVALUE, ISET) -!***BEGIN PROLOGUE IXSAV -!***SUBSIDIARY -!***PURPOSE Save and recall error message control parameters. -!***CATEGORY R3C -!***TYPE ALL (IXSAV-A) -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! -! IXSAV saves and recalls one of two error message parameters: -! LUNIT, the logical unit number to which messages are printed, and -! MESFLG, the message print flag. -! This is a modification of the SLATEC library routine J4SAVE. -! -! Saved local variables.. -! LUNIT = Logical unit number for messages. The default is obtained -! by a call to IUMACH (may be machine-dependent). -! MESFLG = Print control flag.. -! 1 means print all messages (the default). -! 0 means no printing. -! -! On input.. -! IPAR = Parameter indicator (1 for LUNIT, 2 for MESFLG). -! IVALUE = The value to be set for the parameter, if ISET = .TRUE. -! ISET = Logical flag to indicate whether to read or write. -! If ISET = .TRUE., the parameter will be given -! the value IVALUE. If ISET = .FALSE., the parameter -! will be unchanged, and IVALUE is a dummy argument. -! -! On return.. -! IXSAV = The (old) value of the parameter. -! -!***SEE ALSO XERRWD, XERRWV -!***ROUTINES CALLED IUMACH -!***REVISION HISTORY (YYMMDD) -! 921118 DATE WRITTEN -! 930329 Modified prologue to SLATEC format. (FNF) -! 930915 Added IUMACH call to get default output unit. (ACH) -! 930922 Minor cosmetic changes. (FNF) -! 010425 Type declaration for IUMACH added. (ACH) -!***END PROLOGUE IXSAV -! -! Subroutines called by IXSAV.. None -! Function routine called by IXSAV.. IUMACH -!----------------------------------------------------------------------- -!**End - LOGICAL ISET - INTEGER IPAR, IVALUE + END SUBROUTINE XSETUN +!DECK IXSAV + INTEGER FUNCTION IXSAV (IPAR, IVALUE, ISET) +!***BEGIN PROLOGUE IXSAV +!***SUBSIDIARY +!***PURPOSE Save and recall error message control parameters. +!***CATEGORY R3C +!***TYPE ALL (IXSAV-A) +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! +! IXSAV saves and recalls one of two error message parameters: +! LUNIT, the logical unit number to which messages are printed, and +! MESFLG, the message print flag. +! This is a modification of the SLATEC library routine J4SAVE. +! +! Saved local variables.. +! LUNIT = Logical unit number for messages. The default is obtained +! by a call to IUMACH (may be machine-dependent). +! MESFLG = Print control flag.. +! 1 means print all messages (the default). +! 0 means no printing. +! +! On input.. +! IPAR = Parameter indicator (1 for LUNIT, 2 for MESFLG). +! IVALUE = The value to be set for the parameter, if ISET = .TRUE. +! ISET = Logical flag to indicate whether to read or write. +! If ISET = .TRUE., the parameter will be given +! the value IVALUE. If ISET = .FALSE., the parameter +! will be unchanged, and IVALUE is a dummy argument. +! +! On return.. +! IXSAV = The (old) value of the parameter. +! +!***SEE ALSO XERRWD, XERRWV +!***ROUTINES CALLED IUMACH +!***REVISION HISTORY (YYMdmdv) +! 921118 DATE WRITTEN +! 930329 Modified prologue to SLATEC format. (FNF) +! 930915 Added IUMACH call to get default output unit. (ACH) +! 930922 Minor cosmetic changes. (FNF) +! 010425 Type declaration for IUMACH added. (ACH) +!***END PROLOGUE IXSAV +! +! Subroutines called by IXSAV.. None +! Function routine called by IXSAV.. IUMACH +!----------------------------------------------------------------------- +!**End + LOGICAL ISET + INTEGER IPAR, IVALUE !----------------------------------------------------------------------- INTEGER LUNIT, MESFLG!, IUMACH !----------------------------------------------------------------------- -! The following Fortran-77 declaration is to cause the values of the -! listed (local) variables to be saved between calls to this routine. -!----------------------------------------------------------------------- - SAVE LUNIT, MESFLG - DATA LUNIT/-1/, MESFLG/1/ -! -!***FIRST EXECUTABLE STATEMENT IXSAV - IF (IPAR .EQ. 1) THEN - IF (LUNIT .EQ. -1) LUNIT = IUMACH() - IXSAV = LUNIT - IF (ISET) LUNIT = IVALUE - ENDIF -! - IF (IPAR .EQ. 2) THEN - IXSAV = MESFLG - IF (ISET) MESFLG = IVALUE - ENDIF -! - RETURN +! The following Fortran-77 declaration is to cause the values of the +! listed (local) variables to be saved between calls to this routine. +!----------------------------------------------------------------------- + SAVE LUNIT, MESFLG + DATA LUNIT/-1/, MESFLG/1/ +! +!***FIRST EXECUTABLE STATEMENT IXSAV + IF (IPAR .EQ. 1) THEN + IF (LUNIT .EQ. -1) LUNIT = IUMACH() + IXSAV = LUNIT + IF (ISET) LUNIT = IVALUE + ENDIF +! + IF (IPAR .EQ. 2) THEN + IXSAV = MESFLG + IF (ISET) MESFLG = IVALUE + ENDIF +! + RETURN !----------------------- End of Function IXSAV ------------------------- - END FUNCTION IXSAV -!DECK IUMACH - INTEGER FUNCTION IUMACH() -!***BEGIN PROLOGUE IUMACH -!***PURPOSE Provide standard output unit number. -!***CATEGORY R1 -!***TYPE INTEGER (IUMACH-I) -!***KEYWORDS MACHINE CONSTANTS -!***AUTHOR Hindmarsh, Alan C., (LLNL) -!***DESCRIPTION -! *Usage: -! INTEGER LOUT, IUMACH -! LOUT = IUMACH() -! -! *Function Return Values: -! LOUT : the standard logical unit for Fortran output. -! -!***REFERENCES (NONE) -!***ROUTINES CALLED (NONE) -!***REVISION HISTORY (YYMMDD) -! 930915 DATE WRITTEN -! 930922 Made user-callable, and other cosmetic changes. (FNF) -!***END PROLOGUE IUMACH -! -!*Internal Notes: -! The built-in value of 6 is standard on a wide range of Fortran -! systems. This may be machine-dependent. -!**End -!***FIRST EXECUTABLE STATEMENT IUMACH - IUMACH = 6 -! - RETURN + END FUNCTION IXSAV +!DECK IUMACH + INTEGER FUNCTION IUMACH() +!***BEGIN PROLOGUE IUMACH +!***PURPOSE Provide standard output unit number. +!***CATEGORY R1 +!***TYPE INTEGER (IUMACH-I) +!***KEYWORDS MACHINE CONSTANTS +!***AUTHOR Hindmarsh, Alan C., (LLNL) +!***DESCRIPTION +! *Usage: +! INTEGER LOUT, IUMACH +! LOUT = IUMACH() +! +! *Function Return Values: +! LOUT : the standard logical unit for Fortran output. +! +!***REFERENCES (NONE) +!***ROUTINES CALLED (NONE) +!***REVISION HISTORY (YYMdmdv) +! 930915 DATE WRITTEN +! 930922 Made user-callable, and other cosmetic changes. (FNF) +!***END PROLOGUE IUMACH +! +!*Internal Notes: +! The built-in value of 6 is standard on a wide range of Fortran +! systems. This may be machine-dependent. +!**End +!***FIRST EXECUTABLE STATEMENT IUMACH + IUMACH = 6 +! + RETURN !----------------------- End of Function IUMACH ------------------------ - END FUNCTION IUMACH + END FUNCTION IUMACH !---- END OF SUBROUTINE DLSODE AND ITS INTERNAL PROCEDURES - END SUBROUTINE DLSODE + END SUBROUTINE DLSODE !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBROUTINE FUN_CHEM(N, T, V, FCT) !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -3400,7 +3400,7 @@ SUBROUTINE FUN_CHEM(N, T, V, FCT) INTEGER :: N REAL(kind=dp) :: V(NVAR), FCT(NVAR), T - + ! TOLD = TIME ! TIME = T ! CALL Update_SUN() @@ -3409,7 +3409,7 @@ SUBROUTINE FUN_CHEM(N, T, V, FCT) ! TIME = TOLD CALL Fun(V, FIX, RCONST, FCT) - + !Nfun=Nfun+1 END SUBROUTINE FUN_CHEM @@ -3429,21 +3429,21 @@ SUBROUTINE JAC_CHEM (N, T, V, JF) REAL(kind=dp) :: V(NVAR), T INTEGER :: N -#ifdef FULL_ALGEBRA +#ifdef FULL_ALGEBRA INTEGER :: I, J REAL(kind=dp) :: JV(LU_NONZERO), JF(NVAR,NVAR) #else REAL(kind=dp) :: JF(LU_NONZERO) -#endif - +#endif + ! TOLD = TIME ! TIME = T ! CALL Update_SUN() ! CALL Update_RCONST() ! CALL Update_PHOTO() ! TIME = TOLD - -#ifdef FULL_ALGEBRA + +#ifdef FULL_ALGEBRA CALL Jac_SP(V, FIX, RCONST, JV) DO j=1,NVAR DO i=1,NVAR @@ -3454,10 +3454,10 @@ SUBROUTINE JAC_CHEM (N, T, V, JF) JF(LU_IROW(i),LU_ICOL(i)) = JV(i) END DO #else - CALL Jac_SP(V, FIX, RCONST, JF) -#endif + CALL Jac_SP(V, FIX, RCONST, JF) +#endif !Njac=Njac+1 - + END SUBROUTINE JAC_CHEM diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Jacobian.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Jacobian.F90 similarity index 99% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Jacobian.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Jacobian.F90 index f99690ad2..9d95a4436 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Jacobian.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Jacobian.F90 @@ -12,9 +12,9 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_Jacobian.f90 +! File : cb05cl_ae5_Jacobian.F90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_JacobianSP.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_JacobianSP.F90 similarity index 98% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_JacobianSP.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_JacobianSP.F90 index 6d2861d80..65b064c19 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_JacobianSP.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_JacobianSP.F90 @@ -12,9 +12,9 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_JacobianSP.f90 +! File : cb05cl_ae5_JacobianSP.F90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_LinearAlgebra.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_LinearAlgebra.F90 similarity index 99% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_LinearAlgebra.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_LinearAlgebra.F90 index b7e9501ff..04d28668b 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_LinearAlgebra.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_LinearAlgebra.F90 @@ -12,9 +12,9 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_LinearAlgebra.f90 +! File : cb05cl_ae5_LinearAlgebra.F90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Main.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Main.F90 similarity index 94% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Main.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Main.F90 index ff7812d30..ec586d687 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Main.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Main.F90 @@ -12,9 +12,9 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_Main.f90 +! File : cb05cl_ae5_Main.F90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Model.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Model.F90 similarity index 100% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Model.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Model.F90 diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Monitor.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Monitor.F90 similarity index 99% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Monitor.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Monitor.F90 index 7328d04c7..6aba3ee7e 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Monitor.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Monitor.F90 @@ -12,9 +12,9 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_Monitor.f90 +! File : cb05cl_ae5_Monitor.F90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Parameters.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Parameters.F90 similarity index 97% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Parameters.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Parameters.F90 index 6d3c5743b..b9ee8b9b2 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Parameters.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Parameters.F90 @@ -12,9 +12,9 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_Parameters.f90 +! File : cb05cl_ae5_Parameters.F90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Precision.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Precision.F90 similarity index 100% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Precision.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Precision.F90 diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Rates.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Rates.F90 similarity index 99% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Rates.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Rates.F90 index 2a631df0b..a398cf0ff 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Rates.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Rates.F90 @@ -12,9 +12,9 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_Rates.f90 +! File : cb05cl_ae5_Rates.F90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Util.f90 b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Util.F90 similarity index 98% rename from test/chemistry/cb05cl_ae5/cb05cl_ae5_Util.f90 rename to test/chemistry/cb05cl_ae5/cb05cl_ae5_Util.F90 index b5b306c9f..3a7b2b4e5 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_Util.f90 +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_Util.F90 @@ -12,9 +12,9 @@ ! M. Damian, Villanova University, USA ! R. Sander, Max-Planck Institute for Chemistry, Mainz, Germany ! -! File : cb05cl_ae5_Util.f90 +! File : cb05cl_ae5_Util.F90 ! Time : Thu Feb 8 11:36:55 2018 -! Working directory : /home/Earth/mdawson/Documents/partmc-chem/partmc/test/chemistry/cb05cl_ae5 +! Working directory : /home/Earth/mdawson/Documents/camp-chem/camp/test/chemistry/cb05cl_ae5 ! Equation file : cb05cl_ae5.kpp ! Output root filename : cb05cl_ae5 ! diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_abs_tol.json b/test/chemistry/cb05cl_ae5/cb05cl_ae5_abs_tol.json index 7a3bfc5f9..68eb57885 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_abs_tol.json +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_abs_tol.json @@ -394,11 +394,6 @@ "type" : "CHEM_SPEC", "absolute integration tolerance" : 1.0E+00 }, - { - "name" : "N2O", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03 - }, { "name" : "DUMMY", "type" : "CHEM_SPEC", diff --git a/test/chemistry/cb05cl_ae5/cb05cl_ae5_init.json b/test/chemistry/cb05cl_ae5/cb05cl_ae5_init.json index 8bf7883c4..6466a340d 100644 --- a/test/chemistry/cb05cl_ae5/cb05cl_ae5_init.json +++ b/test/chemistry/cb05cl_ae5/cb05cl_ae5_init.json @@ -42,8 +42,7 @@ { "name" : "CH4", "type" : "CHEM_SPEC", - "init conc" : 1.85, - "tracer type" : "CONSTANT" + "init conc" : 1.85 }, { "name" : "CL", @@ -366,11 +365,6 @@ "type" : "CHEM_SPEC", "init conc" : 0.0 }, - { - "name" : "N2O", - "type" : "CHEM_SPEC", - "init conc" : 0.3 - }, { "name" : "DUMMY", "type" : "CHEM_SPEC", @@ -379,31 +373,26 @@ { "name" : "O2", "type" : "CHEM_SPEC", - "init conc" : 2.095E05, - "tracer type" : "CONSTANT" + "init conc" : 2.095E05 }, { "name" : "H2O", "type" : "CHEM_SPEC", - "init conc" : 1.0E03, - "tracer type" : "CONSTANT" + "init conc" : 1.0E03 }, { "name" : "H2", "type" : "CHEM_SPEC", - "init conc" : 5.6E-01, - "tracer type" : "CONSTANT" + "init conc" : 5.6E-01 }, { "name" : "M", "type" : "CHEM_SPEC", - "init conc" : 1.0E06, - "tracer type" : "CONSTANT" + "init conc" : 1.0E06 }, { "name" : "N2", "type" : "CHEM_SPEC", - "init conc" : 7.808E05, - "tracer type" : "CONSTANT" + "init conc" : 7.808E05 } ]} diff --git a/test/chemistry/cb05cl_ae5/config_cb05cl_ae5_big.json b/test/chemistry/cb05cl_ae5/config_cb05cl_ae5_big.json deleted file mode 100644 index da2cc3ea2..000000000 --- a/test/chemistry/cb05cl_ae5/config_cb05cl_ae5_big.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "camp-files" : [ - "../../../mechanisms_run/cb05cl_ae5/cb05cl_ae5_mechanism_big.json", - "../../../mechanisms_run/cb05cl_ae5/cb05cl_ae5_species.json", - "cb05cl_ae5_abs_tol.json", - "cb05cl_ae5_init.json" - ] -} diff --git a/test/chemistry/cb05cl_ae5/test_cb05cl_ae5.F90 b/test/chemistry/cb05cl_ae5/test_cb05cl_ae5.F90 index 36160637e..027c607d1 100644 --- a/test/chemistry/cb05cl_ae5/test_cb05cl_ae5.F90 +++ b/test/chemistry/cb05cl_ae5/test_cb05cl_ae5.F90 @@ -45,8 +45,14 @@ program camp_test_cb05cl_ae5 integer(kind=i_kind), parameter :: KPP_FILE_UNIT = 11 ! CAMP-chem output file unit integer(kind=i_kind), parameter :: CAMP_FILE_UNIT = 12 + ! EBI solver output file unit + integer(kind=i_kind), parameter :: CAMP_EBI_FILE_UNIT = 14 + ! file unit + integer(kind=i_kind), parameter :: CAMP_KPP_FILE_UNIT = 15 + ! file unit + integer(kind=i_kind), parameter :: EBI_KPP_FILE_UNIT = 16 ! Number of timesteps to integrate over - integer(kind=i_kind), parameter :: NUM_TIME_STEPS = 100 + integer(kind=i_kind), parameter :: NUM_TIME_STEPS = 10 ! Number of EBI-solver species integer(kind=i_kind), parameter :: NUM_EBI_SPEC = 72 ! Number of EBI-solever photolysis reactions @@ -80,6 +86,8 @@ program camp_test_cb05cl_ae5 close(DEBUG_UNIT) #endif + call camp_mpi_finalize() + contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -133,6 +141,8 @@ logical function run_standard_cb05cl_ae5_test() result(passed) ! EBI-solver species names type(string_t), dimension(NUM_EBI_SPEC) :: ebi_spec_names + ! EBI-solver species names in MONARCH order + type(string_t), dimension(NUM_EBI_SPEC) :: monarch_spec_names ! KPP reaction labels type(string_t), allocatable :: kpp_rxn_labels(:) @@ -147,6 +157,7 @@ logical function run_standard_cb05cl_ae5_test() result(passed) logical :: is_sunny ! Photolysis rates (\min) real, allocatable :: photo_rates(:) + real, allocatable :: new_rates(:) ! Temperature (K) real :: temperature ! Pressure (atm) @@ -192,6 +203,8 @@ logical function run_standard_cb05cl_ae5_test() result(passed) ! Arrays to hold starting concentrations real(kind=dp), allocatable :: ebi_init(:), kpp_init(:), camp_init(:) + real(kind=dp), dimension(NUM_EBI_SPEC) :: ebi_monarch_init + integer, dimension(NUM_EBI_SPEC) :: map_ebi_monarch KPP_ICNTRL( : ) = 0 @@ -261,7 +274,6 @@ logical function run_standard_cb05cl_ae5_test() result(passed) call cpu_time(comp_end) write(*,*) "KPP initialization time: ", comp_end-comp_start," s" - !!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! Initialize camp-chem !!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -349,16 +361,22 @@ logical function run_standard_cb05cl_ae5_test() result(passed) ! Set the photolysis rates (dummy values for solver comparison) is_sunny = .true. allocate(photo_rates(NUM_EBI_PHOTO_RXN)) + photo_rates(:) = 0.0001 * 60.0 ! EBI solver wants rates in min^-1 - KPP_PHOTO_RATES(:) = 0.0001 + +#ifdef TEST_PHOTO_RATES + photo_rates(:) = 0.1 * 60.0 +#endif + + KPP_PHOTO_RATES(:) = photo_rates(1)/60 + ! Set O2 + hv rate constant to 0 in KPP (not present in ebi version) KPP_PHOTO_RATES(1) = 0.0 - ! Set the O2 + hv rate constant to 0 (not present in ebi version) call jo2_rate_update%set_rate(real(0.0, kind=dp)) call camp_core%update_data(jo2_rate_update) ! Set the remaining rates do i_photo_rxn = 1, n_photo_rxn - call rate_update(i_photo_rxn)%set_rate(real(0.0001, kind=dp)) + call rate_update(i_photo_rxn)%set_rate(real(photo_rates(1)/60, kind=dp)) call camp_core%update_data(rate_update(i_photo_rxn)) end do @@ -480,6 +498,12 @@ logical function run_standard_cb05cl_ae5_test() result(passed) action="write") open(CAMP_FILE_UNIT, file="out/cb05cl_ae5_camp_results.txt", status="replace", & action="write") + open(CAMP_EBI_FILE_UNIT, file="out/cb05cl_ae5_camp_ebi_diff.txt", status="replace", & + action="write") + open(CAMP_KPP_FILE_UNIT, file="out/cb05cl_ae5_camp_kpp_diff.txt", status="replace", & + action="write") + open(EBI_KPP_FILE_UNIT, file="out/cb05cl_ae5_ebi_kpp_diff.txt", status="replace", & + action="write") n_gas_spec = chem_spec_data%size(spec_phase=CHEM_SPEC_GAS_PHASE) allocate(camp_spec_names(n_gas_spec)) do i_spec = 1, n_gas_spec @@ -491,6 +515,10 @@ logical function run_standard_cb05cl_ae5_test() result(passed) KPP_NSPEC) write(CAMP_FILE_UNIT,*) "time ", (camp_spec_names(i_spec)%string//" ", i_spec=1, & size(camp_spec_names)) +#ifdef COMPARE_CAMP_FILE + write(CAMP_EBI_FILE_UNIT,*) "CAMP order: ", (camp_spec_names(i_spec)%string//" ", i_spec=1, & + NUM_EBI_SPEC) +#endif ! Set up the reaction map between camp-chem, kpp and ebi solvers key = "rxn id" @@ -693,7 +721,14 @@ logical function run_standard_cb05cl_ae5_test() result(passed) write(EBI_FILE_UNIT,*) i_time*EBI_TMSTEP, YC(:) write(KPP_FILE_UNIT,*) i_time*EBI_TMSTEP, KPP_C(:)*conv write(CAMP_FILE_UNIT,*) i_time*EBI_TMSTEP, camp_state%state_var(:) - +#ifdef COMPARE_CAMP_FILE + write(CAMP_EBI_FILE_UNIT,*) "Repeat", i_repeat, "timestep ", NUM_TIME_STEPS + write(CAMP_EBI_FILE_UNIT,*) "spec_name, concentrations rel. error [(camp_state-ebi)/(camp_state+ebi)], camp_state, ebi" + write(CAMP_KPP_FILE_UNIT,*) "Repeat", i_repeat, "timestep ", NUM_TIME_STEPS + write(CAMP_KPP_FILE_UNIT,*) "spec_name, concentrations rel. error [(camp_state-kpp)/(camp_state+kpp)], camp_state, kpp" + write(EBI_KPP_FILE_UNIT,*) "Repeat", i_repeat, "timestep ", NUM_TIME_STEPS + write(EBI_KPP_FILE_UNIT,*) "spec_name, concentrations rel. error [(èbi-kpp)/(ebi+kpp)], ebi, kpp" +#endif ! Output the computational time write(*,*) "EBI calculation time: ", comp_ebi," s" write(*,*) "KPP calculation time: ", comp_kpp," s" @@ -720,6 +755,21 @@ logical function run_standard_cb05cl_ae5_test() result(passed) trim(to_string(real(ebi_init(i_spec), kind=dp)))//"; camp init: "// & trim(to_string(camp_init(chem_spec_data%gas_state_id( & ebi_spec_names(i_spec)%string))))) + +#ifdef CAMP_USE_MPI +#ifdef COMPARE_CAMP_FILE + associate (camp_var=>camp_state%state_var( & + chem_spec_data%gas_state_id( & + monarch_spec_names(i_spec)%string))) + write(CAMP_EBI_FILE_UNIT,*) monarch_spec_names(i_spec)%string, & + (abs(camp_var) - abs(YC(map_ebi_monarch(i_spec)))) / & + (abs(camp_var) + abs(YC(map_ebi_monarch(i_spec)))+ & + 1.0d-30), & !avoid division by zero, & + camp_var, & + YC(map_ebi_monarch(i_spec)) + end associate +#endif +#endif end do ! KPP <-> CAMP-chem do i_spec = 1, KPP_NSPEC @@ -743,13 +793,29 @@ logical function run_standard_cb05cl_ae5_test() result(passed) "; camp init: "//trim(to_string(camp_init( & chem_spec_data%gas_state_id( & str_temp%string))))) - +#ifdef CAMP_USE_MPI +#ifdef COMPARE_CAMP_FILE + associate (camp_var=>camp_state%state_var( & + chem_spec_data%gas_state_id( & + str_temp%string))) + write(CAMP_KPP_FILE_UNIT,*) str_temp%string, & + (abs(camp_var) - abs(real(KPP_C(i_spec)*conv, kind=dp))) / & + (abs(camp_var) + abs(real(KPP_C(i_spec)*conv, kind=dp))+ & + 1.0d-30), & !avoid division by zero, & + camp_var, & + real(KPP_C(i_spec)*conv, kind=dp) + end associate +#endif +#endif end do ! Close the output files close(EBI_FILE_UNIT) close(KPP_FILE_UNIT) close(CAMP_FILE_UNIT) + close(CAMP_EBI_FILE_UNIT) + close(CAMP_KPP_FILE_UNIT) + close(EBI_KPP_FILE_UNIT) ! Create the gnuplot script open(unit=CAMP_FILE_UNIT, file="out/plot_cb05cl_ae.conf", status="replace", action="write") @@ -879,7 +945,91 @@ subroutine set_ebi_species(spec_names) end subroutine set_ebi_species -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + !> Set the EBI-solver species names in MONARCH order + subroutine set_monarch_species(spec_names) + + !> EBI solver species names + type(string_t), dimension(NUM_EBI_SPEC) :: spec_names + + !Monarch order + spec_names(1)%string = "NO2" + spec_names(2)%string = "NO" + spec_names(3)%string = "O3" + spec_names(4)%string = "NO3" + spec_names(5)%string = "N2O5" + spec_names(6)%string = "HNO3" + spec_names(7)%string = "HONO" + spec_names(8)%string = "PNA" + spec_names(9)%string = "H2O2" + spec_names(10)%string = "NTR" + spec_names(11)%string = "ROOH" + spec_names(12)%string = "FORM" + spec_names(13)%string = "ALD2" + spec_names(14)%string = "ALDX" + spec_names(15)%string = "PAR" + spec_names(16)%string = "CO" + spec_names(17)%string = "MEPX" + spec_names(18)%string = "MEOH" + spec_names(19)%string = "FACD" + spec_names(20)%string = "PAN" + spec_names(21)%string = "PACD" + spec_names(22)%string = "AACD" + spec_names(23)%string = "PANX" + spec_names(24)%string = "OLE" + spec_names(25)%string = "ETH" + spec_names(26)%string = "IOLE" + spec_names(27)%string = "TOL" + spec_names(28)%string = "CRES" + spec_names(29)%string = "OPEN" + spec_names(30)%string = "MGLY" + spec_names(31)%string = "XYL" + spec_names(32)%string = "ISOP" + spec_names(33)%string = "ISPD" + spec_names(34)%string = "TERP" + spec_names(35)%string = "SO2" + spec_names(36)%string = "SULF" + spec_names(37)%string = "ETOH" + spec_names(38)%string = "ETHA" + spec_names(39)%string = "CL2" + spec_names(40)%string = "HOCL" + spec_names(41)%string = "FMCL" + spec_names(42)%string = "HCL" + spec_names(43)%string = "BENZENE" + spec_names(44)%string = "SESQ" + spec_names(45)%string = "O" + spec_names(46)%string = "O1D" + spec_names(47)%string = "OH" + spec_names(48)%string = "HO2" + spec_names(49)%string = "XO2" + spec_names(50)%string = "XO2N" + spec_names(51)%string = "MEO2" + spec_names(52)%string = "HCO3" + spec_names(53)%string = "C2O3" + spec_names(54)%string = "CXO3" + spec_names(55)%string = "ROR" + spec_names(56)%string = "TO2" + spec_names(57)%string = "TOLRO2" + spec_names(58)%string = "CRO" + spec_names(59)%string = "XYLRO2" + spec_names(60)%string = "ISOPRXN" + spec_names(61)%string = "TRPRXN" + spec_names(62)%string = "SULRXN" + spec_names(63)%string = "CL" + spec_names(64)%string = "CLO" + spec_names(65)%string = "TOLNRXN" + spec_names(66)%string = "TOLHRXN" + spec_names(67)%string = "XYLNRXN" + spec_names(68)%string = "XYLHRXN" + spec_names(69)%string = "BENZRO2" + spec_names(70)%string = "BNZNRXN" + spec_names(71)%string = "BNZHRXN" + spec_names(72)%string = "SESQRXN" + + end subroutine set_monarch_species + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> Load a string array with KPP reaction labels subroutine get_kpp_rxn_labels(kpp_rxn_labels) diff --git a/test/chemistry/cb05cl_ae5/test_cb05cl_ae5_big.F90 b/test/chemistry/cb05cl_ae5/test_cb05cl_ae5_big.F90 deleted file mode 100644 index 1c9f2f08f..000000000 --- a/test/chemistry/cb05cl_ae5/test_cb05cl_ae5_big.F90 +++ /dev/null @@ -1,1254 +0,0 @@ -! Copyright (C) 2021 Barcelona Supercomputing Center and University of -! Illinois at Urbana-Champaign -! SPDX-License-Identifier: MIT - -!> \file -!> The camp_test_cb05cl_ae5 program - -!> Test for the cb05cl_ae5 mechanism from MONARCH. This program runs the -!! MONARCH CB5 code and the CAMP-chem version and compares the output. - -!TODO: cb05 takes a lot of solver iterations with multiple cells - -!TODO: Create a matrix of states simulating the cells (adding 0.0001j each init state maybe), -!TODO: Execute both old test cb05 and new test cb05_multiples domains saving both output in an state array and compare the tolerances (without need of comparing txts) -!and confirm updating an state array -!with rows of this matrix is the same than calculating all the matrix - -program camp_test_cb05cl_ae5 - - use camp_constants, only: const - use camp_util, only: i_kind, dp, assert, assert_msg, & - almost_equal, string_t, & - to_string, warn_assert_msg - use camp_camp_core - use camp_camp_state - use camp_camp_solver_data - use camp_solver_stats - use camp_chem_spec_data - use camp_mechanism_data - use camp_rxn_data - use camp_rxn_photolysis - use camp_rxn_factory - use camp_property -#ifdef CAMP_USE_JSON - use json_module -#endif - - ! EBI Solver - use module_bsc_chem_data - - implicit none - - ! New-line character - character(len=*), parameter :: new_line = char(10) - ! EBI solver output file unit - integer(kind=i_kind), parameter :: EBI_FILE_UNIT = 10 - ! KPP solver output file unit - integer(kind=i_kind), parameter :: KPP_FILE_UNIT = 11 - ! CAMP-chem output file unit - integer(kind=i_kind), parameter :: CAMP_FILE_UNIT = 12 - ! Number of timesteps to integrate over - integer(kind=i_kind), parameter :: NUM_TIME_STEPS = 100 - ! Number of cells - integer(kind=i_kind), parameter :: NUM_CELLS= 100 - ! Number of EBI-solver species - integer(kind=i_kind), parameter :: NUM_EBI_SPEC = 72 - ! Number of EBI-solever photolysis reactions - integer(kind=i_kind), parameter :: NUM_EBI_PHOTO_RXN = 23 - ! Small number for minimum concentrations - real(kind=dp), parameter :: SMALL_NUM = 1.0d-30 - ! Used to check availability of a solver - type(camp_solver_data_t), pointer :: camp_solver_data - -#ifdef DEBUG - integer(kind=i_kind), parameter :: DEBUG_UNIT = 13 - - open(unit=DEBUG_UNIT, file="out/debug_cb05cl_ae.txt", status="replace", action="write") -#endif - - camp_solver_data => camp_solver_data_t() - - if (.not.camp_solver_data%is_solver_available()) then - write(*,*) "CB5 mechanism test - no solver available - PASS" - else if (run_cb05cl_ae5_tests()) then - !write(*,*) "CB5 mechanism tests - PASS" - write(*,*) "Finish test_cb05cl_ae5_big" - else - write(*,*) "CB5 mechanism tests - FAIL" - end if - - deallocate(camp_solver_data) - -#ifdef DEBUG - close(DEBUG_UNIT) -#endif - -contains - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Run all CB5 tests - logical function run_cb05cl_ae5_tests() result(passed) - - passed = run_standard_cb05cl_ae5_test() - - end function run_cb05cl_ae5_tests - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Run the cb05cl_ae5 mechanism under standard conditions using the original - !! MONARCH ebi-solver code, the KPP CB5 module and the CAMP-chem version - logical function run_standard_cb05cl_ae5_test() result(passed) - - ! EBI Solver - use EXT_HRDATA - use EXT_RXCM, only : NRXNS, RXLABEL - - ! KPP Solver - use cb05cl_ae5_Initialize, only : KPP_Initialize => Initialize - use cb05cl_ae5_Model, only : KPP_NSPEC => NSPEC, & - KPP_STEPMIN => STEPMIN, & - KPP_STEPMAX => STEPMAX, & - KPP_RTOL => RTOL, & - KPP_ATOL => ATOL, & - KPP_TIME => TIME, & - KPP_C => C, & - KPP_RCONST => RCONST, & - KPP_Update_RCONST => Update_RCONST, & - KPP_INTEGRATE => INTEGRATE, & - KPP_SPC_NAMES => SPC_NAMES, & - KPP_PHOTO_RATES => PHOTO_RATES, & - KPP_TEMP => TEMP, & - KPP_PRESS => PRESS, & - KPP_SUN => SUN, & - KPP_M => M, & - KPP_N2 => N2, & - KPP_O2 => O2, & - KPP_H2 => H2, & - KPP_H2O => H2O, & - KPP_N2O => N2O, & - KPP_CH4 => CH4, & - KPP_NVAR => NVAR, & - KPP_NREACT => NREACT, & - KPP_DT => DT - use cb05cl_ae5_Parameters, only : KPP_IND_O2 => IND_O2 - use cb05cl_ae5_Initialize, ONLY: Initialize - - ! EBI-solver species names - type(string_t), dimension(NUM_EBI_SPEC) :: ebi_spec_names - - ! KPP reaction labels - type(string_t), allocatable :: kpp_rxn_labels(:) - ! KPP rstate - real(kind=dp) :: KPP_RSTATE(20) - ! KPP control variables - integer :: KPP_ICNTRL(20) - ! #/cc -> ppm conversion factor - real(kind=dp) :: conv - - ! Flag for sunlight - logical :: is_sunny - ! Photolysis rates (\min) - real, allocatable :: photo_rates(:) - ! Temperature (K) - real :: temperature - ! Pressure (atm) - real :: pressure - ! Water vapor concentration (ppmV) - real :: water_conc - - ! CAMP-chem core - type(camp_core_t), pointer :: camp_core - ! CAMP-chem state - type(camp_state_t), pointer :: camp_state, camp_state_comp - ! CAMP-chem species names - type(string_t), allocatable :: camp_spec_names(:) - ! EBI -> CAMP-chem species map - integer(kind=i_kind), dimension(NUM_EBI_SPEC) :: spec_map - - ! Computation timer variables - real(kind=dp) :: comp_start, comp_end, comp_ebi, comp_kpp, comp_camp - - type(chem_spec_data_t), pointer :: chem_spec_data - class(rxn_data_t), pointer :: rxn - type(property_t), pointer :: prop_set - character(len=:), allocatable :: key, spec_name, string_val, camp_input_file - real(kind=dp) :: real_val, camp_rate, camp_rate_const - integer(kind=i_kind) :: i_spec, j_spec, i_rxn, i_ebi_rxn, i_kpp_rxn, & - i_time, i_repeat, n_gas_spec - - integer(kind=i_kind) :: i_M, i_O2, i_N2, i_H2O, i_CH4, i_H2 - integer(kind=i_kind), allocatable :: ebi_rxn_map(:), kpp_rxn_map(:) - integer(kind=i_kind), allocatable :: ebi_spec_map(:), kpp_spec_map(:) - type(string_t) :: str_temp - type(string_t), allocatable :: spec_names(:) - type(solver_stats_t), target :: solver_stats - - ! Pointer to the mechanism - type(mechanism_data_t), pointer :: mechanism - - ! Variables to set photolysis rates - type(rxn_factory_t) :: rxn_factory - integer(kind=i_kind) :: n_photo_rxn, i_photo_rxn - type(rxn_update_data_photolysis_t), allocatable :: rate_update(:) - type(rxn_update_data_photolysis_t) :: jo2_rate_update - - ! Arrays to hold starting concentrations - real(kind=dp), allocatable :: ebi_init(:), kpp_init(:), camp_init(:) - - integer(kind=i_kind) :: n_cells, compare_results, i, j, k, z, state_size_cell, cell - integer(kind=i_kind) :: n_repeats - - KPP_ICNTRL( : ) = 0 - - temperature = 272.5 - pressure = 0.8 - water_conc = 0.0 ! (Set by CAMP-chem initial concentration) - - n_cells = 1 - compare_results = 1 - - passed = .false. - - ! Set the #/cc -> ppm conversion factor - conv = 1.0d0/ (const%avagadro /const%univ_gas_const * 10.0d0**(-12.0d0) * & - (pressure*101325.d0) /temperature) - - ! Load the EBI solver species names !AND CAMP TOO - call set_ebi_species(ebi_spec_names) - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!! Initialize the EBI solver !!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - call cpu_time(comp_start) - ! Set the BSC chem parameters - call init_bsc_chem_data() - ! Set the output unit - LOGDEV = 6 - ! Set the aerosol flag - L_AE_VRSN = .false. - ! Set the aq. chem flag - L_AQ_VRSN = .false. - ! Initialize the solver - call EXT_HRINIT - RKI(:) = 0.0 - RXRAT(:) = 0.0 - YC(:) = 0.0 - YC0(:) = 0.0 - YCP(:) = 0.0 - PROD(:) = 0.0 - LOSS(:) = 0.0 - PNEG(:) = 0.0 - ! Set the timestep (min) - EBI_TMSTEP = 0.1 - ! Set the number of timesteps - N_EBI_STEPS = 1 - ! Set the number of internal timesteps - N_INR_STEPS = 1 - call cpu_time(comp_end) - write(*,*) "EBI initialization time: ", comp_end-comp_start," s" - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!! Initialize the KPP CB5 module !!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - call cpu_time(comp_start) - ! Set the step limits - KPP_STEPMIN = 0.0d0 - KPP_STEPMAX = 0.0d0 - KPP_SUN = 1.0 - ! Set the tolerances - do i_spec = 1, KPP_NVAR - KPP_RTOL(i_spec) = 1.0d-4 - KPP_ATOL(i_spec) = 1.0d-3 - end do - CALL KPP_Initialize() - call cpu_time(comp_end) - write(*,*) "KPP initialization time: ", comp_end-comp_start," s" - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!! Initialize camp-chem !!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - n_repeats = 1 - n_cells = 1 - - if (n_cells.eq.1) then - n_repeats = 100 - end if - - call cpu_time(comp_start) - camp_input_file = "config_cb05cl_ae5_big.json" - camp_core => camp_core_t(camp_input_file, n_cells) - - ! Initialize the model - call camp_core%initialize() - - ! Find the CB5 mechanism - key = "cb05cl_ae5" - call assert(418262750, camp_core%get_mechanism(key, mechanism)) - - ! Set the photolysis rate ids - key = "rxn id" - n_photo_rxn = 0 - do i_rxn = 1, mechanism%size() - rxn => mechanism%get_rxn(i_rxn) - select type(rxn) - type is (rxn_photolysis_t) - call assert(265614917, rxn%property_set%get_string(key, string_val)) - if (trim(string_val).ne."jo2") then - n_photo_rxn = n_photo_rxn + 1 - end if - end select - end do - allocate(rate_update(n_photo_rxn)) - i_photo_rxn = 0 - do i_rxn = 1, mechanism%size() - rxn => mechanism%get_rxn(i_rxn) - select type(rxn) - type is (rxn_photolysis_t) - call assert(265614917, rxn%property_set%get_string(key, string_val)) - if (trim(string_val).eq."jo2") then - ! Set O2 + hv rate constant to 0 (not present in ebi version) - call camp_core%initialize_update_object(rxn, jo2_rate_update) - else - i_photo_rxn = i_photo_rxn + 1 - call camp_core%initialize_update_object(rxn, & - rate_update(i_photo_rxn)) - end if - end select - end do - call assert(322300770, n_photo_rxn.eq.i_photo_rxn) - - ! Initialize the solver - call camp_core%solver_initialize() - - ! Get an new state variable - camp_state => camp_core%new_state() - - ! Set the environmental conditions - call camp_state%env_states(1)%set_temperature_K( real( temperature, kind=dp ) ) - call camp_state%env_states(1)%set_pressure_Pa( pressure * const%air_std_press ) - - call cpu_time(comp_end) - write(*,*) "CAMP-chem initialization time: ", comp_end-comp_start," s" - - - ! Get the chemical species data - call assert(298481296, camp_core%get_chem_spec_data(chem_spec_data)) - - ! Find the constant species in the CB5 mechanism - spec_name = "M" - i_M = chem_spec_data%gas_state_id(spec_name) - spec_name = "O2" - i_O2 = chem_spec_data%gas_state_id(spec_name) - spec_name = "N2" - i_N2 = chem_spec_data%gas_state_id(spec_name) - spec_name = "H2O" - i_H2O = chem_spec_data%gas_state_id(spec_name) - spec_name = "CH4" - i_CH4 = chem_spec_data%gas_state_id(spec_name) - spec_name = "H2" - i_H2 = chem_spec_data%gas_state_id(spec_name) - - ! Set the photolysis rates (dummy values for solver comparison) - is_sunny = .true. - allocate(photo_rates(NUM_EBI_PHOTO_RXN)) - photo_rates(:) = 0.0001 * 60.0 ! EBI solver wants rates in min^-1 - KPP_PHOTO_RATES(:) = 0.0001 - ! Set O2 + hv rate constant to 0 in KPP (not present in ebi version) - KPP_PHOTO_RATES(1) = 0.0 - ! Set the O2 + hv rate constant to 0 (not present in ebi version) - call jo2_rate_update%set_rate(real(0.0, kind=dp)) - call camp_core%update_data(jo2_rate_update) - ! Set the remaining rates - do i_photo_rxn = 1, n_photo_rxn - call rate_update(i_photo_rxn)%set_rate(real(0.0001, kind=dp)) - call camp_core%update_data(rate_update(i_photo_rxn)) - end do - - - ! Make sure the right number of reactions is present - ! (KPP includes two Cl rxns with rate constants set to zero that are not - ! present in camp-chem) - - call assert_msg(396732632, mechanism%size().eq.186, & - "Wrong number of camp-chem reactions: "// & - trim(to_string(mechanism%size()))) - - ! Set the initial concentrations - key = "init conc" - YC(:) = 0.0 - KPP_C(:) = 0.0 - camp_state%state_var(:) = 0.0 - - ! Set the initial concentrations in each module - do i_spec = 1, NUM_EBI_SPEC - - ! Get initial concentrations from camp-chem input data - call assert(787326679, chem_spec_data%get_property_set( & - ebi_spec_names(i_spec)%string, prop_set)) - if (prop_set%get_real(key, real_val)) then - - ! Set the EBI solver concetration (ppm) - YC(i_spec) = real_val - - ! Set the camp-chem concetration (ppm) - camp_state%state_var( & - chem_spec_data%gas_state_id( & - ebi_spec_names(i_spec)%string)) = real_val - - end if - - ! Set KPP species concentrations (#/cc) - do j_spec = 1, KPP_NSPEC - if (trim(ebi_spec_names(i_spec)%string).eq.trim(KPP_SPC_NAMES(j_spec))) then - KPP_C(j_spec) = YC(i_spec) / conv - end if - end do - end do - - ! Set EBI solver constant species concentrations in CAMP-chem - spec_name = "M" - call assert(273497194, chem_spec_data%get_property_set(spec_name, prop_set)) - call assert(740666066, associated(prop_set)) - call assert(907464197, prop_set%get_real(key, real_val)) - camp_state%state_var(i_M) = real_val - KPP_M = real_val / conv - spec_name = "O2" - call assert(557877977, chem_spec_data%get_property_set(spec_name, prop_set)) - call assert(729136508, associated(prop_set)) - call assert(223930103, prop_set%get_real(key, real_val)) - camp_state%state_var(i_O2) = real_val - KPP_O2 = real_val / conv - KPP_C(KPP_IND_O2) = real_val / conv - ! KPP has variable O2 concentration - do j_spec = 1, KPP_NSPEC - if (trim(KPP_SPC_NAMES(j_spec)).eq.'O2') then - KPP_C(j_spec) = real_val / conv - end if - end do - spec_name = "N2" - call assert(329882514, chem_spec_data%get_property_set(spec_name, prop_set)) - call assert(553715297, associated(prop_set)) - call assert(666033642, prop_set%get_real(key, real_val)) - camp_state%state_var(i_N2) = real_val - KPP_N2 = real_val / conv - spec_name = "H2O" - call assert(101887051, chem_spec_data%get_property_set(spec_name, prop_set)) - call assert(160827237, associated(prop_set)) - call assert(273145582, prop_set%get_real(key, real_val)) - camp_state%state_var(i_H2O) = real_val - KPP_H2O = real_val / conv - spec_name = "CH4" - call assert(208941089, chem_spec_data%get_property_set(spec_name, prop_set)) - call assert(667939176, associated(prop_set)) - call assert(780257521, prop_set%get_real(key, real_val)) - camp_state%state_var(i_CH4) = real_val - KPP_CH4 = real_val / conv - ! KPP has variable CH4 concentration - do j_spec = 1, KPP_NSPEC - if (trim(KPP_SPC_NAMES(j_spec)).eq.'CH4') then - KPP_C(j_spec) = real_val / conv - end if - end do - spec_name = "H2" - call assert(663478776, chem_spec_data%get_property_set(spec_name, prop_set)) - call assert(892575866, associated(prop_set)) - call assert(722418962, prop_set%get_real(key, real_val)) - camp_state%state_var(i_H2) = real_val - KPP_H2 = real_val / conv - - ! Set the water concentration for EBI solver (ppmV) - water_conc = camp_state%state_var(i_H2O) - - - - ! Set up the output files - open(EBI_FILE_UNIT, file="out/cb05cl_ae5_ebi_results.txt", status="replace", & - action="write") - open(KPP_FILE_UNIT, file="out/cb05cl_ae5_kpp_results.txt", status="replace", & - action="write") - open(CAMP_FILE_UNIT, file="out/cb05cl_ae5_camp_results.txt", status="replace", & - action="write") - n_gas_spec = chem_spec_data%size(spec_phase=CHEM_SPEC_GAS_PHASE) - allocate(camp_spec_names(n_gas_spec)) - do i_spec = 1, n_gas_spec - camp_spec_names(i_spec)%string = chem_spec_data%gas_state_name(i_spec) - end do - write(EBI_FILE_UNIT,*) "time ", (ebi_spec_names(i_spec)%string//" ", i_spec=1, & - NUM_EBI_SPEC) - write(KPP_FILE_UNIT,*) "time ", (trim(KPP_SPC_NAMES(i_spec))//" ", i_spec=1, & - KPP_NSPEC) - write(CAMP_FILE_UNIT,*) "time ", (camp_spec_names(i_spec)%string//" ", i_spec=1, & - size(camp_spec_names)) - - ! Set up the reaction map between camp-chem, kpp and ebi solvers - key = "rxn id" - allocate(ebi_rxn_map(mechanism%size())) - ebi_rxn_map(:) = 0 - allocate(kpp_rxn_map(mechanism%size())) - kpp_rxn_map(:) = 0 - call get_kpp_rxn_labels(kpp_rxn_labels) - do i_rxn = 1, mechanism%size() - rxn => mechanism%get_rxn(i_rxn) - call assert_msg(917216189, associated(rxn), "Missing rxn "//to_string(i_rxn)) - call assert(656034097, rxn%property_set%get_string(key, string_val)) - do i_ebi_rxn = 1, NRXNS - if (trim(RXLABEL(i_ebi_rxn)).eq.trim(string_val)) then - ebi_rxn_map(i_rxn) = i_ebi_rxn - exit - end if - end do - if (trim(string_val).ne.'jo2') then ! jo2 rxn O2 + hv is not in EBI solver - call assert_msg(921715481, ebi_rxn_map(i_rxn).ne.0, "EBI missing rxn "//string_val) - end if - do i_kpp_rxn = 1, KPP_NREACT - if (trim(kpp_rxn_labels(i_kpp_rxn)%string).eq.trim(string_val)) then - kpp_rxn_map(i_rxn) = i_kpp_rxn - exit - end if - end do - call assert_msg(360769001, kpp_rxn_map(i_rxn).ne.0, "KPP missing rxn "//string_val) - end do - - ! Set up the species map between camp-chem, kpp and ebi solvers - allocate(ebi_spec_map(chem_spec_data%size())) - allocate(kpp_spec_map(chem_spec_data%size())) - ebi_spec_map(:) = 0 - kpp_spec_map(:) = 0 - do i_spec = 1, NUM_EBI_SPEC - j_spec = chem_spec_data%gas_state_id(ebi_spec_names(i_spec)%string) - call assert_msg(194404050, j_spec.gt.0, "Missing EBI species: "//trim(ebi_spec_names(i_spec)%string)) - ebi_spec_map(j_spec) = i_spec - end do - do i_spec = 1, KPP_NSPEC - spec_name = trim(KPP_SPC_NAMES(i_spec)) - j_spec = chem_spec_data%gas_state_id(spec_name) - call assert_msg(194404050, j_spec.gt.0, "Missing KPP species: "//trim(KPP_SPC_NAMES(i_spec))) - kpp_spec_map(j_spec) = i_spec - end do - - ! Reset the computation timers - comp_ebi = 0.0 - comp_kpp = 0.0 - comp_camp = 0.0 - - ! Compare the rates for the initial conditions - call EXT_HRCALCKS( NUM_EBI_PHOTO_RXN, & ! Number of EBI solver photolysis reactions - is_sunny, & ! Flag for sunlight - photo_rates, & ! Photolysis rates - temperature, & ! Temperature (K) - pressure, & ! Air pressure (atm) - water_conc, & ! Water vapor concentration (ppmV) - RKI) ! Rate constants - KPP_DT = EBI_TMSTEP * 60.0d0 ! KPP Time step in seconds - KPP_TIME = 0.0 - KPP_TEMP = temperature - KPP_PRESS = pressure * 1013.25 ! KPP pressure in hPa - CALL KPP_Update_RCONST() - - state_size_cell = size(camp_state%state_var) / n_cells - do i = 0, n_cells-1 - do j = 1, state_size_cell - camp_state%state_var(i*state_size_cell+j) = camp_state%state_var(j) !+ 0.1*j - end do - end do - - ! Save the initial states for repeat calls - allocate(ebi_init(size(YC))) - allocate(kpp_init(size(KPP_C))) - allocate(camp_init(size(camp_state%state_var))) - ebi_init(:) = YC(:) - kpp_init(:) = KPP_C(:) - camp_init(:) = camp_state%state_var(:) - - ! Repeatedly solve the mechanism - do i_repeat = 1, n_repeats - - !print*, "running" - - YC(:) = ebi_init(:) - KPP_C(:) = kpp_init(:) - camp_state%state_var(:) = camp_init(:) - - ! Solve the mechanism - do i_time = 1, 2 !NUM_TIME_STEPS - - ! Set minimum concentrations in all solvers - YC(:) = MAX(YC(:), SMALL_NUM) - KPP_C(:) = MAX(KPP_C(:), SMALL_NUM/conv) - camp_state%state_var(:) = max(camp_state%state_var(:), SMALL_NUM) - - ! EBI solver - call cpu_time(comp_start) - call EXT_HRCALCKS( NUM_EBI_PHOTO_RXN, & ! Number of EBI solver photolysis reactions - is_sunny, & ! Flag for sunlight - photo_rates, & ! Photolysis rates - temperature, & ! Temperature (K) - pressure, & ! Air pressure (atm) - water_conc, & ! Water vapor concentration (ppmV) - RKI) ! Rate constants - call EXT_HRSOLVER( 2018012, 070000, 1, 1, 1) ! These dummy variables are just for output - call cpu_time(comp_end) - comp_ebi = comp_ebi + (comp_end-comp_start) - - ! Set KPP and camp-chem concentrations to those of EBI at first time step to match steady-state - ! EBI species - if (i_time.eq.1) then - ! Set KPP species in #/cc - do i_spec = 1, NUM_EBI_SPEC - do j_spec = 1, KPP_NSPEC - if (trim(ebi_spec_names(i_spec)%string).eq.trim(KPP_SPC_NAMES(j_spec))) then - KPP_C(j_spec) = YC(i_spec) / conv - end if - end do - do i = 0, n_cells-1 - camp_state%state_var( & - chem_spec_data%gas_state_id( & - ebi_spec_names(i_spec)%string) & - + i*state_size_cell)= YC(i_spec) - end do - end do - end if - - ! KPP module - call cpu_time(comp_start) - KPP_TIME = (i_time-1)*KPP_DT - KPP_TEMP = temperature - KPP_PRESS = pressure * 1013.25 ! KPP pressure in hPa - CALL KPP_Update_RCONST() - CALL KPP_INTEGRATE( TIN = KPP_TIME, TOUT = (KPP_TIME+KPP_DT), & - RSTATUS_U = KPP_RSTATE, ICNTRL_U = KPP_ICNTRL ) - call cpu_time(comp_end) - comp_kpp = comp_kpp + (comp_end-comp_start) - - ! CAMP-chem - call cpu_time(comp_start) - call camp_core%solve(camp_state, real(EBI_TMSTEP*60.0, kind=dp), & - solver_stats = solver_stats) - call cpu_time(comp_end) - comp_camp = comp_camp + (comp_end-comp_start) - - end do - end do - - ! Output final timestep - write(EBI_FILE_UNIT,*) i_time*EBI_TMSTEP, YC(:) - write(KPP_FILE_UNIT,*) i_time*EBI_TMSTEP, KPP_C(:)*conv - write(CAMP_FILE_UNIT,*) i_time*EBI_TMSTEP, camp_state%state_var(:) - - ! Output the computational time - write(*,*) "EBI calculation time: ", comp_ebi," s" - write(*,*) "KPP calculation time: ", comp_kpp," s" - write(*,*) "CAMP-chem calculation time: ", comp_camp," s" - - ! Close the output files - close(EBI_FILE_UNIT) - close(KPP_FILE_UNIT) - close(CAMP_FILE_UNIT) - - ! Create the gnuplot script - open(unit=CAMP_FILE_UNIT, file="out/plot_cb05cl_ae.conf", status="replace", action="write") - write(CAMP_FILE_UNIT,*) "# plot_cb05cl_ae5.conf" - write(CAMP_FILE_UNIT,*) "# Run as: gnuplot plot_cb05cl_ae5.conf" - write(CAMP_FILE_UNIT,*) "set terminal png truecolor" - write(CAMP_FILE_UNIT,*) "set autoscale" - spec_names = chem_spec_data%get_spec_names() - do i_spec = 1, size(spec_names) - write(CAMP_FILE_UNIT,*) "set output 'cb05cl_ae5_"//trim(spec_names(i_spec)%string)//".png'" - write(CAMP_FILE_UNIT,*) "plot\" - if (ebi_spec_map(i_spec).gt.0) then - write(CAMP_FILE_UNIT,*) " 'cb05cl_ae5_ebi_results.txt'\" - write(CAMP_FILE_UNIT,*) " using 1:"//trim(to_string(ebi_spec_map(i_spec)+1))//" title '"// & - trim(spec_names(i_spec)%string)//" (ebi)',\" - end if - if (kpp_spec_map(i_spec).gt.0) then - write(CAMP_FILE_UNIT,*) " 'cb05cl_ae5_kpp_results.txt'\" - write(CAMP_FILE_UNIT,*) " using 1:"//trim(to_string(kpp_spec_map(i_spec)+1))//" title '"// & - trim(spec_names(i_spec)%string)//" (kpp)',\" - end if - write(CAMP_FILE_UNIT,*) " 'cb05cl_ae5_camp_results.txt'\" - write(CAMP_FILE_UNIT,*) " using 1:"//trim(to_string(i_spec+1))//" title '"// & - trim(spec_names(i_spec)%string)//" (camp)'" - end do - close(CAMP_FILE_UNIT) - - deallocate(photo_rates) - deallocate(rate_update) - deallocate(camp_spec_names) - deallocate(ebi_rxn_map) - deallocate(kpp_rxn_map) - deallocate(kpp_rxn_labels) - deallocate(ebi_spec_map) - deallocate(kpp_spec_map) - deallocate(ebi_init) - deallocate(kpp_init) - deallocate(camp_init) - !deallocate(camp_state_comp) - deallocate(camp_state) - deallocate(camp_core) - - passed = .true. - - end function run_standard_cb05cl_ae5_test - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Set the EBI-solver species names - subroutine set_ebi_species(spec_names) - - !> EBI solver species names - type(string_t), dimension(NUM_EBI_SPEC) :: spec_names - - spec_names(1)%string = "NO2" - spec_names(2)%string = "NO" - spec_names(3)%string = "O" - spec_names(4)%string = "O3" - spec_names(5)%string = "NO3" - spec_names(6)%string = "O1D" - spec_names(7)%string = "OH" - spec_names(8)%string = "HO2" - spec_names(9)%string = "N2O5" - spec_names(10)%string = "HNO3" - spec_names(11)%string = "HONO" - spec_names(12)%string = "PNA" - spec_names(13)%string = "H2O2" - spec_names(14)%string = "XO2" - spec_names(15)%string = "XO2N" - spec_names(16)%string = "NTR" - spec_names(17)%string = "ROOH" - spec_names(18)%string = "FORM" - spec_names(19)%string = "ALD2" - spec_names(20)%string = "ALDX" - spec_names(21)%string = "PAR" - spec_names(22)%string = "CO" - spec_names(23)%string = "MEO2" - spec_names(24)%string = "MEPX" - spec_names(25)%string = "MEOH" - spec_names(26)%string = "HCO3" - spec_names(27)%string = "FACD" - spec_names(28)%string = "C2O3" - spec_names(29)%string = "PAN" - spec_names(30)%string = "PACD" - spec_names(31)%string = "AACD" - spec_names(32)%string = "CXO3" - spec_names(33)%string = "PANX" - spec_names(34)%string = "ROR" - spec_names(35)%string = "OLE" - spec_names(36)%string = "ETH" - spec_names(37)%string = "IOLE" - spec_names(38)%string = "TOL" - spec_names(39)%string = "CRES" - spec_names(40)%string = "TO2" - spec_names(41)%string = "TOLRO2" - spec_names(42)%string = "OPEN" - spec_names(43)%string = "CRO" - spec_names(44)%string = "MGLY" - spec_names(45)%string = "XYL" - spec_names(46)%string = "XYLRO2" - spec_names(47)%string = "ISOP" - spec_names(48)%string = "ISPD" - spec_names(49)%string = "ISOPRXN" - spec_names(50)%string = "TERP" - spec_names(51)%string = "TRPRXN" - spec_names(52)%string = "SO2" - spec_names(53)%string = "SULF" - spec_names(54)%string = "SULRXN" - spec_names(55)%string = "ETOH" - spec_names(56)%string = "ETHA" - spec_names(57)%string = "CL2" - spec_names(58)%string = "CL" - spec_names(59)%string = "HOCL" - spec_names(60)%string = "CLO" - spec_names(61)%string = "FMCL" - spec_names(62)%string = "HCL" - spec_names(63)%string = "TOLNRXN" - spec_names(64)%string = "TOLHRXN" - spec_names(65)%string = "XYLNRXN" - spec_names(66)%string = "XYLHRXN" - spec_names(67)%string = "BENZENE" - spec_names(68)%string = "BENZRO2" - spec_names(69)%string = "BNZNRXN" - spec_names(70)%string = "BNZHRXN" - spec_names(71)%string = "SESQ" - spec_names(72)%string = "SESQRXN" - - end subroutine set_ebi_species - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Load a string array with KPP reaction labels - subroutine get_kpp_rxn_labels(kpp_rxn_labels) - - use cb05cl_ae5_Model, only : NREACT - - type(string_t), allocatable :: kpp_rxn_labels(:) - integer(kind=i_kind) :: i_rxn - - i_rxn = 1 - - allocate(kpp_rxn_labels(NREACT)) - - kpp_rxn_labels(i_rxn)%string = 'R1' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R2' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R3' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R4' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R5' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R6' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R7' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R8' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R9' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R10' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R11' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R12' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R13' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R14' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R15' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R16' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R17' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R18' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R19' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R20' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R21' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R22' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R23' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R24' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R25' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R26' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R27' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R28' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R29' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R30' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R31' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R32' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R33' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R34' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R35' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R36' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R37' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R38' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R39' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R40' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R41' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R42' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R43' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R44' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R45' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R46' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R47' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R48' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R49' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R50' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R51' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R52' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R53' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R54' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R55' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R56' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R57' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R58' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R59' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R60' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R61' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R62' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R63' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R64' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R65' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R66' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R67' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R68' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R69' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R70' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R71' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R72' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R73' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R74' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R75' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R76' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R77' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R78' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R79' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R80' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R81' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R82' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R83' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R84' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R85' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R86' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R87' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R88' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R89' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R90' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R91' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R92' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R93' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R94' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R95' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R96' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R97' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R98' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R99' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R100' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R101' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R102' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R103' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R104' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R105' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R106' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R107' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R108' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R109' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R110' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R111' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R112' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R113' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R114' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R115' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R116' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R117' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R118' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R119' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R120' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R121' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R122' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R123' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R124' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R125' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R126' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R127' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R128' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R129' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R130' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R131' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R132' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R133' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R134' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R135' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R136' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R137' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R138' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R139' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R140' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R141' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R142' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R143' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R144' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R145' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R146' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R147' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R148' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R149' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R150' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R151' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R152' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R153' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R154' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R155' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'R156' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL1' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL2' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL3' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL4' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL5' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL6' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL7' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL8' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL9' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL10' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL11' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL12' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL13' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL14' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL15' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL16' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL17' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL18' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL19' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL20' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'CL21' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'SA01' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'SA02' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'SA03' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'SA04' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'SA05' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'SA06' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'SA07' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'SA08' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'SA09' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'SA10' - i_rxn = i_rxn + 1 - kpp_rxn_labels(i_rxn)%string = 'jo2' - - call assert_msg(313903826, i_rxn.eq.NREACT, "Labeled "//trim(to_string(i_rxn))// & - " out of "//trim(to_string(NREACT))//" KPP reactions") - - end subroutine get_kpp_rxn_labels - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Compare calculated rates between the modules - subroutine compare_rates(camp_core, camp_state, ebi_spec_names, conv, & - ebi_rxn_map, kpp_rxn_map) - - use EXT_RXCM, only : NRXNS, RXLABEL - use EXT_HRDATA, only : EBI_PROD => PROD, & - EBI_LOSS => LOSS, & - EBI_YC => YC, & - EBI_RXRAT => RXRAT - use cb05cl_ae5_Function, only : KPP_Fun => Fun, & - KPP_A => A - use cb05cl_ae5_Model, only : KPP_NVAR => NVAR, & - KPP_SPC_NAMES => SPC_NAMES, & - KPP_VAR => VAR, & - KPP_FIX => FIX, & - KPP_RCONST => RCONST - - !> CAMP-chem core - type(camp_core_t), pointer :: camp_core - !> CAMP-chem state - type(camp_state_t), pointer :: camp_state - !> Species map CAMP-chem <-> EBI - type(string_t), intent(in) :: ebi_spec_names(:) - !> Coversion factor #/cc -> ppm - real(kind=dp), intent(in) :: conv - !> Reaction map EBI <-> camp - integer(kind=i_kind), allocatable :: ebi_rxn_map(:) - !> Reaction map KPP <-> camp - integer(kind=i_kind), allocatable :: kpp_rxn_map(:) - - real(kind=dp) :: KPP_VDOT(KPP_NVAR) - integer(kind=i_kind) :: i_ebi_spec, i_kpp_spec, i_camp_spec, i_rxn - type(string_t) :: spec_name - - character(len=:), allocatable :: key - - write(*,*) "Comparing rates" - - call KPP_Fun ( KPP_VAR, KPP_FIX, KPP_RCONST, KPP_VDOT ) - - call EXT_HRRATES() - call EXT_HRPRODLOSS() - - ! Compare the calculated rates - ! EBI <-> KPP - do i_ebi_spec = 1, NUM_EBI_SPEC - do i_kpp_spec = 1, KPP_NVAR - ! Skip EBI PSSA species - if (trim(ebi_spec_names(i_ebi_spec)%string).eq.'NO2' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'NO' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'O' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'O3' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'NO3' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'O1D' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'OH' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'HO2' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'N2O5' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'HONO' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'C2O3' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'PAN' .or. & - trim(ebi_spec_names(i_ebi_spec)%string).eq.'PNA') cycle - if (trim(ebi_spec_names(i_ebi_spec)%string).eq.trim(KPP_SPC_NAMES(i_kpp_spec))) then - call warn_assert_msg(616862348, almost_equal(real(KPP_VDOT(i_kpp_spec)*60.0d0*conv, kind=dp), & - real(EBI_PROD(i_ebi_spec)-EBI_LOSS(i_ebi_spec), kind=dp), 1.0d-2), & - "Species "//ebi_spec_names(i_ebi_spec)%string//" has different time deriv. "// & - "EBI solver: "//trim(to_string(real((EBI_PROD(i_ebi_spec)-EBI_LOSS(i_ebi_spec))/60.0d0, kind=dp)))// & - "; KPP solver: "//trim(to_string(real(KPP_VDOT(i_kpp_spec)*conv, kind=dp)))) - end if - end do - end do - - end subroutine compare_rates - - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -end program camp_test_cb05cl_ae5 diff --git a/test/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5.sh b/test/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5.sh index 832bdf82a..d40767116 100755 --- a/test/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5.sh +++ b/test/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5.sh @@ -14,9 +14,15 @@ while [ true ] do echo Attempt $counter -if ! ../../../test_chemistry_cb05cl_ae5; then + if [ -z ${SLURM_TASK_PID+x} ]; then + exec_str="../../../test_chemistry_cb05cl_ae5" + else + exec_str="mpirun -v -np 1 --bind-to none ../../../test_chemistry_cb05cl_ae5" + fi + +if ! $exec_str; then echo Failure "$counter" - if [ "$counter" -gt 1 ] + if [ "$counter" -gt 0 ] then echo FAIL exit 1 diff --git a/test/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5_big.sh b/test/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5_big.sh deleted file mode 100755 index 197460001..000000000 --- a/test/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5_big.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -# exit on error -set -e -# turn on command echoing -set -v -# make sure that the current directory is the one where this script is -cd ${0%/*} -# make the output directory if it doesn't exist -mkdir -p out - -((counter = 1)) -while [ true ] -do - echo Attempt $counter - -if ! ../../../test_chemistry_cb05cl_ae5_big; then - echo Failure "$counter" - if [ "$counter" -gt 1 ] - then - echo FAIL - exit 1 - fi - echo retrying... - else - echo PASS - exit 0 - fi - ((counter++)) -done diff --git a/test/chemistry/cb05cl_ae5_scalability/test_chemistry_cb05cl_ae5_scalability.sh b/test/chemistry/cb05cl_ae5_scalability/test_chemistry_cb05cl_ae5_scalability.sh index 362e0ccce..089f55f74 100755 --- a/test/chemistry/cb05cl_ae5_scalability/test_chemistry_cb05cl_ae5_scalability.sh +++ b/test/chemistry/cb05cl_ae5_scalability/test_chemistry_cb05cl_ae5_scalability.sh @@ -22,8 +22,8 @@ do #../../../build/test_run/chemistry/cb05cl_ae5/test_chemistry_cb05cl_ae5_big.sh cd ../../../../ - ./compile.partmc.marenostrum4.sh - cd partmc/test/chemistry/cb05cl_ae5_scalability + ./compile.camp.marenostrum4.sh + cd camp/test/chemistry/cb05cl_ae5_scalability done diff --git a/test/monarch/README.md b/test/monarch/README.md new file mode 100644 index 000000000..65953e4ed --- /dev/null +++ b/test/monarch/README.md @@ -0,0 +1,21 @@ +TestMonarch +====== +List of configuration variables: + +* conf = Class object with configuration variables. +* chemFile = Chemical mechanism (e.g. CB05, CB05+S0A...) +* diff_cells = "Realistic" for different initial conditions between cells. "Ideal" for the same. +* profileCuda = Profile GPU through nvprof. +* mpi = Use "mpirun" or not. Recommended to use default value "yes" +* mpiProcessesList = Number of MPI processes. The number of cells is divided between them. +* cells = List with total number of cells. The program is repeated for each cell in the list. This number is divided between the number of MPI processes. +* timesteps = Number of time-steps iterations. +* time_step_dt = Time-step size [min] +* caseBase = Case to be compared with caseOptim (e.g. Speedup is defined as time caseBase/caseOptim) +* caseOptim = Case Optimized (e.g. Speedup is defined as time caseBase/caseOptim) +* plotYKey = Metric to evaluate (e.g. Speedup of the linear solver) + +Plotting elements: +* Axe X: By default corresponds to "timesteps" value. It uses "cells" in case of more than one value in "cells". Then, the mean over "time-steps" is calculated. +* Axe Y: Corresponding to "plotYKey". +* PlotTitle and Legend = Constructed automatically through conf. variables such as caseBase. \ No newline at end of file diff --git a/test/monarch/TestMonarch.py b/test/monarch/TestMonarch.py new file mode 100644 index 000000000..131354228 --- /dev/null +++ b/test/monarch/TestMonarch.py @@ -0,0 +1,38 @@ +# +# Copyright (C) 2022 Barcelona Supercomputing Center and University of +# Illinois at Urbana-Champaign +# SPDX-License-Identifier: MIT +# + +from mainMonarch import * + + +def all_timesteps(): + conf = TestMonarch() + conf.chemFile = "cb05_paperV2" + # conf.chemFile = "monarch_cb05" + conf.diffCellsL = [] + conf.diffCellsL.append("Realistic") + # conf.diffCellsL.append("Ideal") + conf.profileCuda = "" + # conf.profileCuda = "nvprof" + # conf.profileCuda = "nsight" + conf.is_import = True + conf.mpiProcessesCaseBase = 1 + conf.mpiProcessesCaseOptimList = [1] + conf.allocatedNodes = 1 + conf.allocatedTasksPerNode = 160 + conf.cells = [10] + # conf.cells = [100, 500, 1000, 5000, 10000] + conf.timeSteps = 5 + conf.caseBase = "CPU One-cell" + # conf.caseBase = "GPU BDF" + conf.casesOptim = [] + # conf.casesOptim.append("CPU One-cell") + conf.casesOptim.append("GPU BDF") + conf.plotYKey = "Speedup timecvStep" + + run_main(conf) + +if __name__ == "__main__": + all_timesteps() diff --git a/test/monarch/TestMonarch1.py b/test/monarch/TestMonarch1.py new file mode 100644 index 000000000..b183870a7 --- /dev/null +++ b/test/monarch/TestMonarch1.py @@ -0,0 +1,38 @@ +# +# Copyright (C) 2022 Barcelona Supercomputing Center and University of +# Illinois at Urbana-Champaign +# SPDX-License-Identifier: MIT +# + +from mainMonarch import * + + +def all_timesteps(): + conf = TestMonarch() + conf.chemFile = "cb05_paperV2" + # conf.chemFile = "monarch_cb05" + conf.diffCellsL = [] + conf.diffCellsL.append("Realistic") + # conf.diffCellsL.append("Ideal") + conf.profileCuda = "" + # conf.profileCuda = "nvprof" + # conf.profileCuda = "nsight" + conf.is_import = True + conf.mpiProcessesCaseBase = 1 + conf.mpiProcessesCaseOptimList = [10] + conf.allocatedNodes = 1 + conf.allocatedTasksPerNode = 160 + conf.cells = [100000] + # conf.cells = [100, 500, 1000, 5000, 10000] + conf.timeSteps = 720 + conf.caseBase = "CPU One-cell" + # conf.caseBase = "GPU BDF" + conf.casesOptim = [] + # conf.casesOptim.append("CPU One-cell") + conf.casesOptim.append("GPU BDF") + conf.plotYKey = "Speedup timecvStep" + + run_main(conf) + +if __name__ == "__main__": + all_timesteps() diff --git a/test/monarch/TestMonarch2.py b/test/monarch/TestMonarch2.py new file mode 100644 index 000000000..199f2d5d1 --- /dev/null +++ b/test/monarch/TestMonarch2.py @@ -0,0 +1,39 @@ +# +# Copyright (C) 2022 Barcelona Supercomputing Center and University of +# Illinois at Urbana-Champaign +# SPDX-License-Identifier: MIT +# + +from mainMonarch import * + + +def all_timesteps(): + conf = TestMonarch() + conf.chemFile = "cb05_paperV2" + # conf.chemFile = "monarch_cb05" + conf.diffCellsL = [] + conf.diffCellsL.append("Realistic") + # conf.diffCellsL.append("Ideal") + conf.profileCuda = "" + # conf.profileCuda = "nvprof" + # conf.profileCuda = "nsight" + conf.is_import = True + conf.mpiProcessesCaseBase = 20 + conf.mpiProcessesCaseOptimList = [20] + conf.allocatedNodes = 1 + conf.allocatedTasksPerNode = 160 + conf.cells = [100000] + # conf.cells = [100, 500, 1000, 5000, 10000] + conf.timeSteps = 720 + conf.caseBase = "CPU One-cell" + # conf.caseBase = "GPU BDF" + conf.casesOptim = [] + # conf.casesOptim.append("CPU One-cell") + conf.casesOptim.append("GPU BDF") + conf.plotYKey = "Speedup timecvStep" + + run_main(conf) + + +if __name__ == "__main__": + all_timesteps() diff --git a/test/monarch/TestMonarch3.py b/test/monarch/TestMonarch3.py new file mode 100644 index 000000000..b0db80ee6 --- /dev/null +++ b/test/monarch/TestMonarch3.py @@ -0,0 +1,39 @@ +# +# Copyright (C) 2022 Barcelona Supercomputing Center and University of +# Illinois at Urbana-Champaign +# SPDX-License-Identifier: MIT +# + +from mainMonarch import * + + +def all_timesteps(): + conf = TestMonarch() + conf.chemFile = "cb05_paperV2" + # conf.chemFile = "monarch_cb05" + conf.diffCellsL = [] + conf.diffCellsL.append("Realistic") + # conf.diffCellsL.append("Ideal") + conf.profileCuda = "" + # conf.profileCuda = "nvprof" + # conf.profileCuda = "nsight" + conf.is_import = True + conf.mpiProcessesCaseBase = 40 + conf.mpiProcessesCaseOptimList = [40] + conf.allocatedNodes = 1 + conf.allocatedTasksPerNode = 160 + conf.cells = [1000,5000,10000,50000,100000] + # conf.cells = [100, 500, 1000, 5000, 10000] + conf.timeSteps = 720 + conf.caseBase = "CPU One-cell" + # conf.caseBase = "GPU BDF" + conf.casesOptim = [] + # conf.casesOptim.append("CPU One-cell") + conf.casesOptim.append("GPU BDF") + conf.plotYKey = "Speedup timecvStep" + + run_main(conf) + + +if __name__ == "__main__": + all_timesteps() diff --git a/test/monarch/TestMonarch4.py b/test/monarch/TestMonarch4.py new file mode 100644 index 000000000..304e38b92 --- /dev/null +++ b/test/monarch/TestMonarch4.py @@ -0,0 +1,38 @@ +# +# Copyright (C) 2022 Barcelona Supercomputing Center and University of +# Illinois at Urbana-Champaign +# SPDX-License-Identifier: MIT +# + +from mainMonarch import * + + +def all_timesteps(): + conf = TestMonarch() + conf.chemFile = "cb05_paperV2" + # conf.chemFile = "monarch_cb05" + conf.diffCellsL = [] + conf.diffCellsL.append("Realistic") + # conf.diffCellsL.append("Ideal") + conf.profileCuda = "" + # conf.profileCuda = "nvprof" + # conf.profileCuda = "nsight" + conf.is_import = True + conf.mpiProcessesCaseBase = 1 + conf.mpiProcessesCaseOptimList = [10,20,30,40] + conf.allocatedNodes = 1 + conf.allocatedTasksPerNode = 160 + conf.cells = [100000] + # conf.cells = [100, 500, 1000, 5000, 10000] + conf.timeSteps = 720 + conf.caseBase = "CPU One-cell" + # conf.caseBase = "GPU BDF" + conf.casesOptim = [] + # conf.casesOptim.append("CPU One-cell") + conf.casesOptim.append("GPU BDF") + conf.plotYKey = "Speedup timecvStep" + + run_main(conf) + +if __name__ == "__main__": + all_timesteps() diff --git a/test/monarch/camp_monarch_interface.F90 b/test/monarch/camp_monarch_interface.F90 index b5e838e99..2f7073b98 100644 --- a/test/monarch/camp_monarch_interface.F90 +++ b/test/monarch/camp_monarch_interface.F90 @@ -3,15 +3,14 @@ ! SPDX-License-Identifier: MIT !> \file -!> The monarch_interface_t object and related functions +!> The camp_monarch_interface_t object and related functions -!> Interface for the MONACH model and PartMC-camp -module camp_monarch_interface +!> Interface for the MONACH model and CAMP-camp +module camp_monarch_interface_2 - use camp_constants, only : i_kind + use camp_constants, only : i_kind use camp_mpi - use camp_util, only : assert_msg, string_t, & - warn_assert_msg + use camp_util, only : assert_msg, string_t,warn_assert_msg use camp_camp_core use camp_camp_state use camp_aero_rep_data @@ -20,194 +19,124 @@ module camp_monarch_interface use camp_chem_spec_data use camp_property use camp_camp_solver_data - use camp_solver_stats -#ifdef CAMP_USE_MPI + use camp_mechanism_data, only : mechanism_data_t + use camp_rxn_data, only : rxn_data_t + use camp_rxn_photolysis use mpi -#endif -#ifdef CAMP_USE_JSON use json_module -#endif implicit none private - - public :: monarch_interface_t - - !> PartMC <-> MONARCH interface - !! - !! Contains all data required to intialize and run PartMC from MONARCH data - !! and map state variables between PartMC and MONARCH - type :: monarch_interface_t - private - !> CAMP-chem core - type(camp_core_t), pointer :: camp_core => null( ) - !> CAMP-chem state - type(camp_state_t), pointer :: camp_state => null( ) - !> MONARCH species names + public :: camp_monarch_interface_t + type :: camp_monarch_interface_t + type(camp_core_t), pointer :: camp_core + type(camp_state_t), pointer :: camp_state type(string_t), allocatable :: monarch_species_names(:) - !> MONARCH <-> PartMC species map + character(len=:), allocatable :: output_file_title integer(kind=i_kind), allocatable :: map_monarch_id(:), map_camp_id(:) - !> PartMC-camp ids for initial concentrations - integer(kind=i_kind), allocatable :: init_conc_camp_id(:) - !> Initial species concentrations + integer(kind=i_kind), allocatable :: init_conc_camp_id(:),specs_emi_id(:) real(kind=dp), allocatable :: init_conc(:) - !> Number of cells to compute simultaneously integer(kind=i_kind) :: n_cells = 1 - !> Starting index for PartMC species on the MONARCH tracer array integer(kind=i_kind) :: tracer_starting_id - !> Ending index for PartMC species on the MONARCH tracer array integer(kind=i_kind) :: tracer_ending_id - !> PartMC-camp <-> MONARCH species map input data - type(property_t), pointer :: species_map_data => null( ) - !> Gas-phase water id in PartMC-camp + type(property_t), pointer :: species_map_data integer(kind=i_kind) :: gas_phase_water_id - !> Initial concentration data - type(property_t), pointer :: init_conc_data => null( ) - !> Interface input data - type(property_t), pointer :: property_set => null( ) - !> Solve multiple grid cells at once? + type(property_t), pointer :: init_conc_data + type(property_t), pointer :: property_set + type(rxn_update_data_photolysis_t), allocatable :: photo_rxns(:) + real(kind=dp), allocatable :: base_rates(:),specs_emi(:),offset_photo_rates_cells(:) + integer :: n_photo_rxn + integer :: nrates_cells logical :: solve_multiple_cells = .false. + type(string_t), allocatable :: kpp_rxn_labels(:) + real(kind=dp) :: KPP_RSTATE(20) + integer :: KPP_ICNTRL(20) contains - !> Integrate PartMC for the current MONARCH state over a specified time step procedure :: integrate - !> Get initial concentrations (for testing only) procedure :: get_init_conc - !> Get monarch species names and ids (for testing only) - procedure :: get_MONARCH_species - !> Print the PartMC-camp data - procedure :: print => do_print - !> Load interface data from a set of input files procedure, private :: load - !> Create the PartMC <-> MONARCH species map procedure, private :: create_map - !> Load the initial concentrations procedure, private :: load_init_conc - !> Finalize the interface final :: finalize - end type monarch_interface_t + end type camp_monarch_interface_t - !> PartMC <-> MONARCH interface constructor - interface monarch_interface_t + interface camp_monarch_interface_t procedure :: constructor - end interface monarch_interface_t + end interface camp_monarch_interface_t - !> MPI node id from MONARCH - integer(kind=i_kind) :: MONARCH_PROCESS ! TODO replace with MONARCH param - ! TEMPORARY + integer(kind=i_kind) :: MONARCH_PROCESS real(kind=dp), public, save :: comp_time = 0.0d0 - + real(kind=dp), parameter :: mwair = 28.9628 !mean molecular weight for dry air [ g/mol ] + real(kind=dp), parameter :: mwwat = 18.0153 ! mean molecular weight for water vapor [ g/mol ] contains -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Create and initialize a new monarch_interface_t object - !! - !! Create a monarch_interface_t object at the beginning of the model run - !! for each node. The master node should pass a string containing the path - !! to the PartMC confirguration file list, the path to the interface - !! configuration file and the starting and ending indices for chemical - !! species in the tracer array. - function constructor(camp_config_file, interface_config_file, & - starting_id, ending_id, n_cells, mpi_comm) result (new_obj) - - !> A new MONARCH interface - type(monarch_interface_t), pointer :: new_obj - !> Path to the PartMC-camp configuration file list + function constructor(camp_config_file, output_file_title, & + starting_id, ending_id, n_cells, mpi_comm) result (this) + type(camp_monarch_interface_t), pointer :: this character(len=:), allocatable, optional :: camp_config_file - !> Path to the PartMC-camp <-> MONARCH interface input file - character(len=:), allocatable, optional :: interface_config_file - !> Starting index for chemical species in the MONARCH tracer array + character(len=*), intent(in):: output_file_title integer, optional :: starting_id - !> Ending index for chemical species in the MONARCH tracer array integer, optional :: ending_id - !> MPI communicator integer, intent(in), optional :: mpi_comm - !> Num cells to compute simulatenously integer, optional :: n_cells - type(camp_solver_data_t), pointer :: camp_solver_data character, allocatable :: buffer(:) integer(kind=i_kind) :: pos, pack_size - integer(kind=i_kind) :: i_spec + integer(kind=i_kind) :: i_spec, i_photo_rxn, rank, n_ranks, ierr type(string_t), allocatable :: unique_names(:) - + character(len=:), allocatable :: spec_name, settings_interface_file + real(kind=dp) :: base_rate class(aero_rep_data_t), pointer :: aero_rep - integer(kind=i_kind) :: i_sect_om, i_sect_bc, i_sect_sulf, i_sect_opm + integer(kind=i_kind) :: i_sect_om, i_sect_bc, i_sect_sulf, i_sect_opm, i, z type(aero_rep_factory_t) :: aero_rep_factory type(aero_rep_update_data_modal_binned_mass_GMD_t) :: update_data_GMD type(aero_rep_update_data_modal_binned_mass_GSD_t) :: update_data_GSD - - ! Computation time variable real(kind=dp) :: comp_start, comp_end - -#ifdef CAMP_USE_MPI - integer :: local_comm + character(len=128) :: i_str + integer :: local_comm,use_cpu, nGPUs if (present(mpi_comm)) then local_comm = mpi_comm else local_comm = MPI_COMM_WORLD endif -#endif - ! Set the MPI rank (TODO replace with MONARCH param) MONARCH_PROCESS = camp_mpi_rank() - - ! Create a new interface object - allocate(new_obj) - - if (.not.present(n_cells).or.n_cells.eq.1) then - new_obj%solve_multiple_cells = .false. + allocate(this) + if (.not.present(n_cells).or.n_cells==1) then + this%solve_multiple_cells = .false. else - new_obj%solve_multiple_cells = .true. - new_obj%n_cells=n_cells + this%solve_multiple_cells = .true. + this%n_cells=n_cells end if - - ! Check for an available solver + this%output_file_title=output_file_title camp_solver_data => camp_solver_data_t() call assert_msg(332298164, camp_solver_data%is_solver_available(), & "No solver available") deallocate(camp_solver_data) - - ! Initialize the time-invariant model data on each node - if (MONARCH_PROCESS.eq.0) then - - ! Start the computation timer on the primary node + allocate(this%specs_emi_id(15)) + allocate(this%specs_emi(size(this%specs_emi_id))) + if (MONARCH_PROCESS==0) then call cpu_time(comp_start) - - call assert_msg(304676624, present(camp_config_file), & - "Missing PartMC-camp configuration file list") - call assert_msg(194027509, present(interface_config_file), & - "Missing MartMC-camp <-> MONARCH interface configuration file") - call assert_msg(937567597, present(starting_id), & - "Missing starting tracer index for chemical species") - call assert_msg(593895016, present(ending_id), & - "Missing ending tracer index for chemical species") - - ! Load the interface data - call new_obj%load(interface_config_file) - - ! Initialize the camp-chem core - new_obj%camp_core => camp_core_t(camp_config_file, new_obj%n_cells) - call new_obj%camp_core%initialize() - - ! Set the aerosol representation id - if (new_obj%camp_core%get_aero_rep("MONARCH mass-based", aero_rep)) then + settings_interface_file="settings/"//output_file_title//"/interface.json" + call this%load(settings_interface_file) + this%camp_core => camp_core_t(camp_config_file, this%n_cells) + call this%camp_core%initialize() + if (this%camp_core%get_aero_rep("MONARCH mass-based", aero_rep)) then select type (aero_rep) type is (aero_rep_modal_binned_mass_t) - call new_obj%camp_core%initialize_update_object( aero_rep, & + call this%camp_core%initialize_update_object( aero_rep, & update_data_GMD) - call new_obj%camp_core%initialize_update_object( aero_rep, & + call this%camp_core%initialize_update_object( aero_rep, & update_data_GSD) call assert(889473105, & - aero_rep%get_section_id("organic matter", i_sect_om)) + aero_rep%get_section_id("organic_matter", i_sect_om)) call assert(648042550, & - aero_rep%get_section_id("black carbon", i_sect_bc)) - call assert(760360895, & - aero_rep%get_section_id("sulfate", i_sect_sulf)) + aero_rep%get_section_id("black_carbon", i_sect_bc)) + i_sect_sulf=-1 call assert(307728742, & - aero_rep%get_section_id("other PM", i_sect_opm)) - class default + aero_rep%get_section_id("other_PM", i_sect_opm)) + class default call die_msg(351392791, & "Wrong type for aerosol representation "// & "'MONARCH mass-based'") @@ -218,522 +147,517 @@ function constructor(camp_config_file, interface_config_file, & i_sect_sulf = -1 i_sect_opm = -1 end if - - ! Set the MONARCH tracer array bounds - new_obj%tracer_starting_id = starting_id - new_obj%tracer_ending_id = ending_id - - ! Generate the PartMC-camp <-> MONARCH species map - call new_obj%create_map() - - ! Load the initial concentrations - call new_obj%load_init_conc() - -#ifdef CAMP_USE_MPI - pack_size = new_obj%camp_core%pack_size() + & + this%tracer_starting_id = starting_id + this%tracer_ending_id = ending_id + call this%create_map() + call this%load_init_conc() + pack_size = this%camp_core%pack_size() + & update_data_GMD%pack_size() + & update_data_GSD%pack_size() + & - camp_mpi_pack_size_integer_array(new_obj%map_monarch_id) + & - camp_mpi_pack_size_integer_array(new_obj%map_camp_id) + & - camp_mpi_pack_size_integer_array(new_obj%init_conc_camp_id) + & - camp_mpi_pack_size_real_array(new_obj%init_conc) + & - camp_mpi_pack_size_integer(new_obj%gas_phase_water_id) + & + camp_mpi_pack_size_integer_array(this%map_monarch_id) + & + camp_mpi_pack_size_integer_array(this%map_camp_id) + & + camp_mpi_pack_size_integer_array(this%init_conc_camp_id) + & + camp_mpi_pack_size_real_array(this%init_conc) + & + camp_mpi_pack_size_integer(this%gas_phase_water_id) + & camp_mpi_pack_size_integer(i_sect_om) + & camp_mpi_pack_size_integer(i_sect_bc) + & camp_mpi_pack_size_integer(i_sect_sulf) + & camp_mpi_pack_size_integer(i_sect_opm) + pack_size = pack_size + camp_mpi_pack_size_integer(this%n_photo_rxn) + do i = 1, this%n_photo_rxn + pack_size = pack_size + this%photo_rxns(i)%pack_size( local_comm ) + end do + pack_size = pack_size + camp_mpi_pack_size_real_array(this%base_rates) + pack_size = pack_size + camp_mpi_pack_size_integer_array(this%specs_emi_id) + pack_size = pack_size + camp_mpi_pack_size_real_array(this%specs_emi) allocate(buffer(pack_size)) pos = 0 - call new_obj%camp_core%bin_pack(buffer, pos) + call this%camp_core%bin_pack(buffer, pos) call update_data_GMD%bin_pack(buffer, pos) call update_data_GSD%bin_pack(buffer, pos) - call camp_mpi_pack_integer_array(buffer, pos, new_obj%map_monarch_id) - call camp_mpi_pack_integer_array(buffer, pos, new_obj%map_camp_id) - call camp_mpi_pack_integer_array(buffer, pos, new_obj%init_conc_camp_id) - call camp_mpi_pack_real_array(buffer, pos, new_obj%init_conc) - call camp_mpi_pack_integer(buffer, pos, new_obj%gas_phase_water_id) + call camp_mpi_pack_integer_array(buffer, pos, this%map_monarch_id) + call camp_mpi_pack_integer_array(buffer, pos, this%map_camp_id) + call camp_mpi_pack_integer_array(buffer, pos, this%init_conc_camp_id) + call camp_mpi_pack_real_array(buffer, pos, this%init_conc) + call camp_mpi_pack_integer(buffer, pos, this%gas_phase_water_id) call camp_mpi_pack_integer(buffer, pos, i_sect_om) call camp_mpi_pack_integer(buffer, pos, i_sect_bc) call camp_mpi_pack_integer(buffer, pos, i_sect_sulf) call camp_mpi_pack_integer(buffer, pos, i_sect_opm) + call camp_mpi_pack_integer(buffer, pos, this%n_photo_rxn) + do i = 1, this%n_photo_rxn + call this%photo_rxns(i)%bin_pack( buffer, pos, local_comm ) + end do + call camp_mpi_pack_real_array(buffer, pos, this%base_rates) + call camp_mpi_pack_integer_array(buffer, pos, this%specs_emi_id) + call camp_mpi_pack_real_array(buffer, pos, this%specs_emi) endif - - ! broadcast the buffer size call camp_mpi_bcast_integer(pack_size, local_comm) - - if (MONARCH_PROCESS.ne.0) then - ! allocate the buffer to receive data + if (MONARCH_PROCESS/=0) then allocate(buffer(pack_size)) end if - - ! boradcast the buffer call camp_mpi_bcast_packed(buffer, local_comm) - - if (MONARCH_PROCESS.ne.0) then - ! unpack the data - new_obj%camp_core => camp_core_t() + if (MONARCH_PROCESS/=0) then + this%camp_core => camp_core_t(n_cells=this%n_cells) pos = 0 - call new_obj%camp_core%bin_unpack(buffer, pos) + call this%camp_core%bin_unpack(buffer, pos) call update_data_GMD%bin_unpack(buffer, pos) call update_data_GSD%bin_unpack(buffer, pos) - call camp_mpi_unpack_integer_array(buffer, pos, new_obj%map_monarch_id) - call camp_mpi_unpack_integer_array(buffer, pos, new_obj%map_camp_id) - call camp_mpi_unpack_integer_array(buffer, pos, new_obj%init_conc_camp_id) - call camp_mpi_unpack_real_array(buffer, pos, new_obj%init_conc) - call camp_mpi_unpack_integer(buffer, pos, new_obj%gas_phase_water_id) + call camp_mpi_unpack_integer_array(buffer, pos, this%map_monarch_id) + call camp_mpi_unpack_integer_array(buffer, pos, this%map_camp_id) + call camp_mpi_unpack_integer_array(buffer, pos, this%init_conc_camp_id) + call camp_mpi_unpack_real_array(buffer, pos, this%init_conc) + call camp_mpi_unpack_integer(buffer, pos, this%gas_phase_water_id) call camp_mpi_unpack_integer(buffer, pos, i_sect_om) call camp_mpi_unpack_integer(buffer, pos, i_sect_bc) call camp_mpi_unpack_integer(buffer, pos, i_sect_sulf) call camp_mpi_unpack_integer(buffer, pos, i_sect_opm) -#endif + call camp_mpi_unpack_integer(buffer, pos, this%n_photo_rxn) + if( allocated( this%photo_rxns ) ) deallocate( this%photo_rxns ) + allocate(this%photo_rxns(this%n_photo_rxn)) + allocate(this%base_rates(this%n_photo_rxn)) + do i = 1, this%n_photo_rxn + call this%photo_rxns(i)%bin_unpack( buffer, pos, local_comm ) + end do + call camp_mpi_unpack_real_array(buffer, pos, this%base_rates) + call camp_mpi_unpack_integer_array(buffer, pos, this%specs_emi_id) + call camp_mpi_unpack_real_array(buffer, pos, this%specs_emi) end if - -#ifdef CAMP_USE_MPI deallocate(buffer) -#endif - - ! Initialize the solver on all nodes - call new_obj%camp_core%solver_initialize() - - ! Create a state variable on each node - new_obj%camp_state => new_obj%camp_core%new_state() - - ! Set the aerosol mode dimensions - - ! organic matter - if (i_sect_om.gt.0) then - call update_data_GMD%set_GMD(i_sect_om, 2.12d-8) - call update_data_GSD%set_GSD(i_sect_om, 2.24d0) - call new_obj%camp_core%update_data(update_data_GMD) - call new_obj%camp_core%update_data(update_data_GSD) - end if - if (i_sect_bc.gt.0) then - ! black carbon - call update_data_GMD%set_GMD(i_sect_bc, 1.18d-8) - call update_data_GSD%set_GSD(i_sect_bc, 2.00d0) - call new_obj%camp_core%update_data(update_data_GMD) - call new_obj%camp_core%update_data(update_data_GSD) - end if - if (i_sect_sulf.gt.0) then - ! sulfate - call update_data_GMD%set_GMD(i_sect_sulf, 6.95d-8) - call update_data_GSD%set_GSD(i_sect_sulf, 2.12d0) - call new_obj%camp_core%update_data(update_data_GMD) - call new_obj%camp_core%update_data(update_data_GSD) + use_cpu=1 + nGPUs=1 + open(unit=32, file='settings/config_variables_c_solver.txt', status='old') + read(32,'(A)') i_str + if(trim(i_str) == "USE_CPU=OFF") then + use_cpu = 0 end if - if (i_sect_opm.gt.0) then - ! other PM - call update_data_GMD%set_GMD(i_sect_opm, 2.12d-8) - call update_data_GSD%set_GSD(i_sect_opm, 2.24d0) - call new_obj%camp_core%update_data(update_data_GMD) - call new_obj%camp_core%update_data(update_data_GSD) + read(32, *) nGPUs + close(32) + call this%camp_core%solver_initialize(use_cpu,nGPUs) + this%camp_state => this%camp_core%new_state() + if(this%output_file_title=="cb05_paperV2") then + allocate(this%offset_photo_rates_cells(this%n_cells)) + this%offset_photo_rates_cells(:) = 0. + do z =1, this%n_cells + do i = 1, this%n_photo_rxn + base_rate = this%base_rates(i) + call this%photo_rxns(i)%set_rate(base_rate) + call this%camp_core%update_data(this%photo_rxns(i),z) + end do + end do + deallocate(this%offset_photo_rates_cells) end if - - ! Calculate the intialization time - if (MONARCH_PROCESS.eq.0) then + call camp_mpi_barrier(MPI_COMM_WORLD) + do z =1, this%n_cells + if (i_sect_bc>0) then + call update_data_GMD%set_GMD(i_sect_bc, 1.18d-8) + call update_data_GSD%set_GSD(i_sect_bc, 2.00d0) + call this%camp_core%update_data(update_data_GMD) + call this%camp_core%update_data(update_data_GSD) + end if + if (i_sect_sulf>0) then + call update_data_GMD%set_GMD(i_sect_sulf, 6.95d-8) + call update_data_GSD%set_GSD(i_sect_sulf, 2.12d0) + call this%camp_core%update_data(update_data_GMD) + call this%camp_core%update_data(update_data_GSD) + end if + if (i_sect_opm>0) then + call update_data_GMD%set_GMD(i_sect_opm, 2.12d-8) + call update_data_GSD%set_GSD(i_sect_opm, 2.24d0) + call this%camp_core%update_data(update_data_GMD) + call this%camp_core%update_data(update_data_GSD) + end if + end do + !unique_names=this%camp_core%unique_names() + !do i=1, size(unique_names) + ! print*,i,trim(unique_names(i)%string) + !end do + if (MONARCH_PROCESS==0) then call cpu_time(comp_end) write(*,*) "Initialization time: ", comp_end-comp_start, " s" end if - end function constructor -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Integrate the PartMC mechanism for a particular set of cells and timestep - subroutine integrate(this, start_time, time_step, i_start, i_end, j_start, & - j_end, temperature, MONARCH_conc, water_conc, & - water_vapor_index, air_density, pressure) - - !> PartMC-camp <-> MONARCH interface - class(monarch_interface_t) :: this - !> Integration start time (min since midnight) - real, intent(in) :: start_time - !> Integration time step - real, intent(in) :: time_step - !> Grid-cell W->E starting index - integer, intent(in) :: i_start - !> Grid-cell W->E ending index - integer, intent(in) :: i_end - !> Grid-cell S->N starting index - integer, intent(in) :: j_start - !> Grid-cell S->N ending index - integer, intent(in) :: j_end - - !> NMMB style arrays (W->E, S->N, top->bottom, ...) - !> Temperature (K) + subroutine integrate(this, curr_time, time_step, I_W, I_E, I_S, & + I_N, temperature, MONARCH_conc, water_conc, & + water_vapor_index, air_density, pressure, conv, i_hour,& + NUM_TIME_STEP, DIFF_CELLS, i_time) + class(camp_monarch_interface_t) :: this + real, intent(in) :: curr_time + real(kind=dp), intent(in) :: time_step + integer, intent(in) :: I_W + integer, intent(in) :: I_E + integer, intent(in) :: I_S + integer, intent(in) :: I_N real, intent(in) :: temperature(:,:,:) - !> MONARCH species concentration (ppm or ug/m^3) real, intent(inout) :: MONARCH_conc(:,:,:,:) - !> Atmospheric water concentrations (kg_H2O/kg_air) real, intent(in) :: water_conc(:,:,:,:) - !> Index in water_conc corresponding to water vapor integer, intent(in) :: water_vapor_index - - !> WRF-style arrays (W->E, bottom->top, N->S) - !> Air density (kg_air/m^3) real, intent(in) :: air_density(:,:,:) - !> Pressure (Pa) real, intent(in) :: pressure(:,:,:) - - integer :: i, j, k, k_flip, i_spec, z, o, i2 - integer :: k_end - - ! Computation time variables + real, intent(in) :: conv(:,:,:) + integer, intent(inout) :: i_hour + integer, intent(in) :: NUM_TIME_STEP + character(len=*),intent(in) :: DIFF_CELLS + integer, intent(in) :: i_time + type(chem_spec_data_t), pointer :: chem_spec_data + integer, parameter :: emi_len=1 + real, allocatable :: rate_emi(:,:) + character, allocatable :: buffer(:) + integer(kind=i_kind) :: pos, pack_size + integer :: rank, ierr, n_ranks + real(kind=dp), allocatable :: mpi_conc(:) + character(len=:), allocatable :: file_name + integer :: i, j, k, i_spec, z, o, t, r, i_cell, i_photo_rxn + integer :: NUM_VERT_CELLS, i_hour_max + real :: press_init, press_end, press_range,& + emi_slide, press_norm + integer :: n_cells real(kind=dp) :: comp_start, comp_end - - type(solver_stats_t), target :: solver_stats integer :: state_size_per_cell, n_cell_check - if(this%n_cells.eq.1) then + if(this%n_cells==1) then state_size_per_cell = 0 else - state_size_per_cell = this%camp_core%state_size_per_cell() + state_size_per_cell = this%camp_core%size_state_per_cell + end if + NUM_VERT_CELLS = size(MONARCH_conc,3) + if(this%output_file_title=="cb05_paperV2") then + call assert_msg(731700229, & + this%camp_core%get_chem_spec_data(chem_spec_data), & + "No chemical species data in camp_core.") + n_cells=(I_E - I_W+1)*(I_N - I_S+1)*NUM_VERT_CELLS + i_hour_max=24 + allocate(rate_emi(i_hour_max,n_cells)) + rate_emi(:,:)=0.0 + if(DIFF_CELLS=="ON") then + press_init = 100000.!Should be equal to mock_monarch + press_end = 10000. + press_range = press_end-press_init + do i=I_W, I_E + do j=I_S, I_N + do k=1, NUM_VERT_CELLS + o = (j-1)*(I_E) + (i-1) + z = (k-1)*(I_E*I_N) + o + press_norm=(press_end-pressure(i,j,k))/(press_range) + do t=1,12 !12 first hours + rate_emi(t,z+1)=press_norm + end do + end do + end do + end do + else + do t=1,12 + rate_emi(t,:)=1.0 + end do + end if + call camp_mpi_barrier(MPI_COMM_WORLD) + end if + i_hour = int(curr_time/60)+1 + if(mod(int(curr_time),60)==0) then + if (camp_mpi_rank()==0) then + write(*,*) "i_hour", i_hour,"i_time", i_time + end if end if - - k_end = size(MONARCH_conc,3) - - call cpu_time(comp_start) - if(.not.this%solve_multiple_cells) then - do i=i_start, i_end - do j=j_start, j_end - do k=1, k_end - - ! Calculate the vertical index for NMMB-style arrays - k_flip = size(MONARCH_conc,3) - k + 1 - - ! Update the environmental state + do i=I_W, I_E + do j=I_S, I_N + do k=1, NUM_VERT_CELLS + o = (j-1)*(I_E) + (i-1) + z = (k-1)*(I_E*I_N) + o call this%camp_state%env_states(1)%set_temperature_K( & - real( temperature(i,j,k_flip), kind=dp ) ) + real( temperature(i,j,k), kind=dp ) ) call this%camp_state%env_states(1)%set_pressure_Pa( & - real( pressure(i,k,j), kind=dp ) ) - - this%camp_state%state_var(:) = 0.0 - + real( pressure(i,j,k), kind=dp ) ) + do r=1, size(this%camp_state%state_var) + this%camp_state%state_var(r) = 0. + end do this%camp_state%state_var(this%map_camp_id(:)) = & - this%camp_state%state_var(this%map_camp_id(:)) + & - MONARCH_conc(i,j,k_flip,this%map_monarch_id(:)) - this%camp_state%state_var(this%gas_phase_water_id) = & - water_conc(i,j,k_flip,water_vapor_index) * & - air_density(i,k,j) * 1.0d9 - - ! Integrate the CAMP mechanism - call this%camp_core%solve(this%camp_state, & - real(time_step, kind=dp), solver_stats = solver_stats) - - call assert_msg(376450931, solver_stats%status_code.eq.0, & - "Solver failed with code "// & - to_string(solver_stats%solver_flag)) - - ! Update the MONARCH tracer array with new species concentrations - MONARCH_conc(i,j,k_flip,this%map_monarch_id(:)) = & + MONARCH_conc(i,j,k,this%map_monarch_id(:)) + !print*,"MONARCH_conc381",MONARCH_conc(i,j,k,this%map_monarch_id(:)) + !print*,"state_var421",this%camp_state%state_var(:) + if(this%output_file_title=="monarch_cb05") then + this%camp_state%state_var(this%gas_phase_water_id) = & + water_conc(1,1,1,water_vapor_index) + else + this%camp_state%state_var(this%gas_phase_water_id) = & + water_conc(1,1,1,water_vapor_index) * & + mwair / mwwat * 1.e6 + end if + !print*,"state_var430",this%camp_state%state_var(:) + if(this%output_file_title=="cb05_paperV2") then + do r=1,size(this%specs_emi_id) + this%camp_state%state_var(this%specs_emi_id(r))=& + this%camp_state%state_var(this%specs_emi_id(r))& + +this%specs_emi(r)*rate_emi(i_hour,z+1)*conv(i,j,k) + end do + !print*,"state_var436",this%camp_state%state_var(1) + end if + call cpu_time(comp_start) + call this%camp_core%solve(this%camp_state, real(time_step*60., kind=dp)) + call cpu_time(comp_end) + comp_time = comp_time + (comp_end-comp_start) + if(i_time==NUM_TIME_STEP) then + call this%camp_core%export_solver_state() + end if + MONARCH_conc(i,j,k,this%map_monarch_id(:)) = & this%camp_state%state_var(this%map_camp_id(:)) - end do end do end do - else - - ! solve multiple grid cells at once - ! FIXME this only works if this%n_cells == - ! (i_end - i_start + 1) * (j_end - j_start + 1 ) * k_end - n_cell_check = (i_end - i_start + 1) * (j_end - j_start + 1 ) * k_end - call assert_msg(559245176, this%n_cells .eq. n_cell_check, & - "Grid cell number mismatch, got "// & - trim(to_string(n_cell_check))//", expected "// & - trim(to_string(this%n_cells))) - - ! Set initial conditions and environmental parameters for each grid cell - do i=i_start, i_end - do j=j_start, j_end - do k=1, k_end - !Remember fortran read matrix in inverse order for optimization! - ! TODO add descriptions for o and z, or preferably use descriptive - ! variable names - o = (j-1)*(i_end) + (i-1) !Index to 3D - z = (k-1)*(i_end*j_end) + o !Index for 2D - - ! Calculate the vertical index for NMMB-style arrays - k_flip = size(MONARCH_conc,3) - k + 1 - - ! Update the environmental state - call this%camp_state%env_states(1)%set_temperature_K( & - real( temperature(i,j,k_flip), kind=dp ) ) - call this%camp_state%env_states(1)%set_pressure_Pa( & - real( pressure(i,k,j), kind=dp ) ) - - !Reset state conc - this%camp_state%state_var(this%map_camp_id(:) + & - (z*state_size_per_cell)) = 0.0 - - this%camp_state%state_var(this%map_camp_id(:) + & - (z*state_size_per_cell)) = & - this%camp_state%state_var(this%map_camp_id(:) + & - (z*state_size_per_cell)) + & - MONARCH_conc(i,j,k_flip,this%map_monarch_id(:)) - this%camp_state%state_var(this%gas_phase_water_id + & - (z*state_size_per_cell)) = & - water_conc(i,j,k_flip,water_vapor_index) * & - air_density(i,k,j) * 1.0d9 - + do r=1, size(this%camp_state%state_var) + this%camp_state%state_var(r) = 0. + end do + do i=I_W, I_E + do j=I_S, I_N + do k=1, NUM_VERT_CELLS + o = (j-1)*(I_E) + (i-1) + z = (k-1)*(I_E*I_N) + o + call this%camp_state%env_states(z+1)%set_temperature_K(real(temperature(i,j,k),kind=dp)) + call this%camp_state%env_states(z+1)%set_pressure_Pa(real(pressure(i,j,k),kind=dp)) + this%camp_state%state_var(this%map_camp_id(:) + (z*state_size_per_cell))& + = MONARCH_conc(i,j,k,this%map_monarch_id(:)) + !print*,"MONARCH_conc381",MONARCH_conc(i,j,k,this%map_monarch_id(:)) + !print*,"state_var421",this%camp_state%state_var(:) + if(this%output_file_title=="monarch_cb05") then + this%camp_state%state_var(this%gas_phase_water_id+(z*state_size_per_cell)) = & + water_conc(1,1,1,water_vapor_index) + else + this%camp_state%state_var(this%gas_phase_water_id+(z*state_size_per_cell)) = & + water_conc(1,1,1,water_vapor_index) * mwair / mwwat * 1.e6 + end if + !print*,"state_var430",this%camp_state%state_var(:) + if(this%output_file_title=="cb05_paperV2") then + do r=1,size(this%specs_emi_id) + this%camp_state%state_var(this%specs_emi_id(r)+z*state_size_per_cell)=& + this%camp_state%state_var(this%specs_emi_id(r)+z*state_size_per_cell)& + +this%specs_emi(r)*rate_emi(i_hour,z+1)*conv(i,j,k) + end do + endif + !print*,"state_var436",this%camp_state%state_var(1+z*state_size_per_cell) end do end do end do - - ! Integrate the CAMP mechanism + call cpu_time(comp_start) call this%camp_core%solve(this%camp_state, & - real(time_step, kind=dp), solver_stats = solver_stats) - - do i=i_start, i_end - do j=j_start, j_end - do k=1, k_end - o = (j-1)*(i_end) + (i-1) !Index to 3D - z = (k-1)*(i_end*j_end) + o !Index for 2D - - k_flip = size(MONARCH_conc,3) - k + 1 - MONARCH_conc(i,j,k_flip,this%map_monarch_id(:)) = & - this%camp_state%state_var(this%map_camp_id(:) + & - (z*state_size_per_cell)) + real(time_step*60., kind=dp)) + call cpu_time(comp_end) + comp_time = comp_time + (comp_end-comp_start) + if(i_time==NUM_TIME_STEP) then + call this%camp_core%export_solver_state() + end if + do i=I_W, I_E + do j=I_S, I_N + do k=1, NUM_VERT_CELLS + o = (j-1)*(I_E) + (i-1) + z = (k-1)*(I_E*I_N) + o + MONARCH_conc(i,j,k,this%map_monarch_id(:)) = & + this%camp_state%state_var(this%map_camp_id(:)+(z*state_size_per_cell)) end do end do end do - end if - call cpu_time(comp_end) - comp_time = comp_time + (comp_end-comp_start) - - ! call solver_stats%print( ) - + if(this%output_file_title=="cb05_paperV2") then + deallocate(rate_emi) + end if end subroutine integrate -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Load the MONARCH <-> PartMC-camp interface input data subroutine load(this, config_file) - - !> PartMC-camp <-> MONARCH interface - class(monarch_interface_t) :: this - !> Interface configuration file path + class(camp_monarch_interface_t) :: this character(len=:), allocatable :: config_file - -#ifdef CAMP_USE_JSON - type(json_core), pointer :: json type(json_file) :: j_file type(json_value), pointer :: j_obj, j_next, j_child character(kind=json_ck, len=:), allocatable :: key, unicode_str_val - character(len=:), allocatable :: str_val integer(kind=i_kind) :: var_type logical :: found - ! Initialize the property sets this%species_map_data => property_t() this%init_conc_data => property_t() this%property_set => property_t() - - ! Get a new json core allocate(json) - - ! Initialize the json objects j_obj => null() j_next => null() - - ! Initialize the json file call j_file%initialize() call j_file%get_core(json) call assert_msg(207035903, allocated(config_file), & "Received non-allocated string for file path") - call assert_msg(368569727, trim(config_file).ne."", & + call assert_msg(368569727, trim(config_file)/="", & "Received empty string for file path") inquire( file=config_file, exist=found ) call assert_msg(134309013, found, "Cannot find file: "// & config_file) call j_file%load_file(filename = config_file) - - ! Find the interface data call j_file%get('monarch-data(1)', j_obj) - - ! Load the data to the property_set do while (associated(j_obj)) - - ! Find the object type call json%get(j_obj, 'type', unicode_str_val, found) call assert_msg(236838162, found, "Missing type in json input file "// & config_file) str_val = unicode_str_val - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!! Load property sets according to type !!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - ! Species Map data - if (str_val.eq."SPECIES_MAP") then + if (str_val=="SPECIES_MAP") then call json%get_child(j_obj, j_child) do while (associated(j_child)) call json%info(j_child, name=key, var_type=var_type) - if (key.ne."type".and.key.ne."name") then + if (key/="type".and.key/="name") then call this%species_map_data%load(json, j_child, .false., key) end if j_next => j_child call json%get_next(j_next, j_child) end do - - ! Initial concentration data - else if (str_val.eq."INIT_CONC") then + else if (str_val=="INIT_CONC") then call json%get_child(j_obj, j_child) do while (associated(j_child)) call json%info(j_child, name=key, var_type=var_type) - if (key.ne."type".and.key.ne."name") then + if (key/="type".and.key/="name") then call this%init_conc_data%load(json, j_child, .false., key) end if j_next => j_child call json%get_next(j_next, j_child) end do - - ! Data of unknown type else call this%property_set%load(json, j_obj, .false., str_val) end if - j_next => j_obj call json%get_next(j_next, j_obj) end do - - ! Clean up the json objects call j_file%destroy() call json%destroy() deallocate(json) - -#else - call die_msg(635417227, "PartMC-camp <-> MONARCH interface requires "// & - "JSON file support.") -#endif - end subroutine load -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Create the PartMC-camp <-> MONARCH species map subroutine create_map(this) - - !> PartMC-camp <-> MONARCH interface - class(monarch_interface_t) :: this - + class(camp_monarch_interface_t) :: this type(chem_spec_data_t), pointer :: chem_spec_data class(aero_rep_data_t), pointer :: aero_rep_ptr type(property_t), pointer :: gas_species_list, aero_species_list, species_data character(len=:), allocatable :: key_name, spec_name, rep_name integer(kind=i_kind) :: i_spec, num_spec - - ! Get the gas-phase species ids + integer :: i_rxn, i_photo_rxn, i_base_rate, i_mech, i + type(mechanism_data_t), pointer :: mechanism + class(rxn_data_t), pointer :: rxn + character(len=:), allocatable :: key, str_val, rxn_key, rate_key, rxn_val + real(kind=dp) :: rate_val + + key = "MONARCH mod37" + call assert(418262750, this%camp_core%get_mechanism(key, mechanism)) + rxn_key = "type" + rxn_val = "PHOTOLYSIS" + rate_key = "base rate" + this%n_photo_rxn = 0 + do i_mech = 1, size(this%camp_core%mechanism) + do i_rxn = 1, this%camp_core%mechanism(i_mech)%val%size() + rxn => this%camp_core%mechanism(i_mech)%val%get_rxn(i_rxn) + call assert(106297725, rxn%property_set%get_string(rxn_key, str_val)) + if (trim(str_val)==rxn_val) this%n_photo_rxn = this%n_photo_rxn + 1 + end do + end do + allocate(this%photo_rxns(this%n_photo_rxn)) + allocate(this%base_rates(this%n_photo_rxn)) + i_photo_rxn = 0 + do i_mech = 1, size(this%camp_core%mechanism) + do i_rxn = 1, this%camp_core%mechanism(i_mech)%val%size() + rxn => this%camp_core%mechanism(i_mech)%val%get_rxn(i_rxn) + call assert(799145523, rxn%property_set%get_string(rxn_key, str_val)) + if (trim(str_val)/=rxn_val) cycle + i_photo_rxn = i_photo_rxn + 1 + call assert_msg(501329648, & + rxn%property_set%get_real(rate_key, rate_val), & + "Missing 'base rate' for photolysis reaction "// & + trim(to_string(i_photo_rxn))) + this%base_rates(i_photo_rxn) = rate_val + select type (rxn_photo => rxn) + class is (rxn_photolysis_t) + call this%camp_core%initialize_update_object(rxn_photo, & + this%photo_rxns(i_photo_rxn)) + class default + call die(722633162) + end select + end do + end do key_name = "gas-phase species" call assert_msg(939097252, & this%species_map_data%get_property_t(key_name, gas_species_list), & "Missing set of gas-phase species MONARCH ids") num_spec = gas_species_list%size() - - ! Get the aerosol-phase species ids key_name = "aerosol-phase species" if (this%species_map_data%get_property_t(key_name, & aero_species_list)) then num_spec = num_spec + aero_species_list%size() end if - - ! Set up the species map and MONARCH names array allocate(this%monarch_species_names(num_spec)) allocate(this%map_monarch_id(num_spec)) allocate(this%map_camp_id(num_spec)) - - ! Get the chemical species data call assert_msg(731700229, & this%camp_core%get_chem_spec_data(chem_spec_data), & "No chemical species data in camp_core.") - - ! Set the gas-phase water id key_name = "gas-phase water" call assert_msg(413656652, & this%species_map_data%get_string(key_name, spec_name), & "Missing gas-phase water species for MONARCH interface.") this%gas_phase_water_id = chem_spec_data%gas_state_id(spec_name) - call assert_msg(910692272, this%gas_phase_water_id.gt.0, & + call assert_msg(910692272, this%gas_phase_water_id>0, & "Could not find gas-phase water species '"//spec_name//"'.") - - ! Loop through the gas-phase species and set up the map call gas_species_list%iter_reset() i_spec = 1 do while (gas_species_list%get_key(spec_name)) - this%monarch_species_names(i_spec)%string = spec_name - call assert_msg(599522862, & gas_species_list%get_property_t(val=species_data), & - "Missing species data for '"//spec_name//"' in PartMC-camp "// & + "Missing species data for '"//spec_name//"' in CAMP-camp "// & "<-> MONARCH species map.") - key_name = "monarch id" call assert_msg(643926329, & species_data%get_int(key_name, this%map_monarch_id(i_spec)), & "Missing monarch id for species '"//spec_name//" in "// & - "PartMC-camp <-> MONARCH species map.") + "CAMP-camp <-> MONARCH species map.") this%map_monarch_id(i_spec) = this%map_monarch_id(i_spec) + & this%tracer_starting_id - 1 call assert_msg(450258014, & - this%map_monarch_id(i_spec).le.this%tracer_ending_id, & + this%map_monarch_id(i_spec)<=this%tracer_ending_id, & "Monarch id for species '"//spec_name//"' out of specified "// & "tracer array bounds.") - this%map_camp_id(i_spec) = chem_spec_data%gas_state_id(spec_name) - call assert_msg(916977002, this%map_camp_id(i_spec).gt.0, & - "Could not find species '"//spec_name//"' in PartMC-camp.") - + call assert_msg(916977002, this%map_camp_id(i_spec)>0, & + "Could not find species '"//spec_name//"' in CAMP-camp.") call gas_species_list%iter_next() i_spec = i_spec + 1 end do - ! Loop through the aerosol-phase species and add them to the map if (associated(aero_species_list)) then - call aero_species_list%iter_reset() do while(aero_species_list%get_key(spec_name)) - this%monarch_species_names(i_spec)%string = spec_name - call assert_msg(567689501, & aero_species_list%get_property_t(val=species_data), & "Missing species data for '"//spec_name//"' in " //& - "PartMC-camp <-> MONARCH species map.") - + "CAMP-camp <-> MONARCH species map.") key_name = "monarch id" call assert_msg(615451741, & species_data%get_int(key_name, this%map_monarch_id(i_spec)), & "Missing monarch id for species '"//spec_name//"' in "// & - "PartMC-camp <-> MONARCH species map.") + "CAMP-camp <-> MONARCH species map.") this%map_monarch_id(i_spec) = this%map_monarch_id(i_spec) + & this%tracer_starting_id - 1 call assert_msg(382644266, & - this%map_monarch_id(i_spec).le.this%tracer_ending_id, & + this%map_monarch_id(i_spec)<=this%tracer_ending_id, & "Monarch id for species '"//spec_name//"' out of "// & "specified tracer array bounds.") - key_name = "aerosol representation name" call assert_msg(963222513, & species_data%get_string(key_name, rep_name), & "Missing aerosol representation name for species '"// & - spec_name//"' in PartMC-camp <-> MONARCH species map.") - - ! Find the species PartMC id + spec_name//"' in CAMP-camp <-> MONARCH species map.") this%map_camp_id(i_spec) = 0 call assert_msg(377850668, & this%camp_core%get_aero_rep(rep_name, aero_rep_ptr), & "Could not find aerosol representation '"//rep_name//"'") this%map_camp_id(i_spec) = aero_rep_ptr%spec_state_id(spec_name) - call assert_msg(887136850, this%map_camp_id(i_spec) .gt. 0, & + call assert_msg(887136850, this%map_camp_id(i_spec) > 0, & "Could not find aerosol species '"//spec_name//"' in "// & "aerosol representation '"//rep_name//"'.") - call aero_species_list%iter_next() i_spec = i_spec + 1 end do @@ -741,218 +665,167 @@ subroutine create_map(this) end subroutine create_map -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Load initial concentrations subroutine load_init_conc(this) - - !> PartMC-camp <-> MONARCH interface - class(monarch_interface_t) :: this - + class(camp_monarch_interface_t) :: this type(chem_spec_data_t), pointer :: chem_spec_data class(aero_rep_data_t), pointer :: aero_rep_ptr type(property_t), pointer :: gas_species_list, aero_species_list, species_data character(len=:), allocatable :: key_name, spec_name, rep_name - integer(kind=i_kind) :: i_spec, num_spec + integer(kind=i_kind) :: i_spec, num_spec, i + real :: factor_ppb_to_ppm + if(this%output_file_title=="cb05_paperV2") then + factor_ppb_to_ppm=1.0E-3 + else + factor_ppb_to_ppm=1.0 + end if num_spec = 0 - - ! Get the gas-phase species key_name = "gas-phase species" if (this%init_conc_data%get_property_t(key_name, gas_species_list)) then num_spec = num_spec + gas_species_list%size() end if - - ! Get the aerosol-phase species key_name = "aerosol-phase species" if (this%init_conc_data%get_property_t(key_name, aero_species_list)) then num_spec = num_spec + aero_species_list%size() end if - - ! Get the chemical species data call assert_msg(885063268, & this%camp_core%get_chem_spec_data(chem_spec_data), & "No chemical species data in camp_core.") - - ! Allocate space for the initial concentrations and indices allocate(this%init_conc_camp_id(num_spec)) allocate(this%init_conc(num_spec)) - - ! Add the gas-phase initial concentrations if (associated(gas_species_list)) then - - ! Loop through the gas-phase species and load the initial concentrations call gas_species_list%iter_reset() i_spec = 1 do while (gas_species_list%get_key(spec_name)) - call assert_msg(325582312, & gas_species_list%get_property_t(val=species_data), & "Missing species data for '"//spec_name//"' for "// & - "PartMC-camp initial concentrations.") - + "CAMP-camp initial concentrations.") key_name = "init conc" call assert_msg(445070498, & species_data%get_real(key_name, this%init_conc(i_spec)), & "Missing 'init conc' for species '"//spec_name//" for "// & - "PartMC-camp initial concentrations.") - + "CAMP-camp initial concentrations.") + this%init_conc(i_spec) = this%init_conc(i_spec) * factor_ppb_to_ppm this%init_conc_camp_id(i_spec) = & chem_spec_data%gas_state_id(spec_name) - call assert_msg(940200584, this%init_conc_camp_id(i_spec).gt.0, & - "Could not find species '"//spec_name//"' in PartMC-camp.") - + call assert_msg(940200584, this%init_conc_camp_id(i_spec)>0, & + "Could not find species '"//spec_name//"' in CAMP-camp.") call gas_species_list%iter_next() i_spec = i_spec + 1 end do - end if - ! Add the aerosol-phase species initial concentrations if (associated(aero_species_list)) then - call aero_species_list%iter_reset() do while(aero_species_list%get_key(spec_name)) - call assert_msg(331096555, & aero_species_list%get_property_t(val=species_data), & "Missing species data for '"//spec_name//"' for " //& - "PartMC-camp initial concentrations.") - + "CAMP-camp initial concentrations.") key_name = "init conc" call assert_msg(782275469, & species_data%get_real(key_name, this%init_conc(i_spec)), & "Missing 'init conc' for species '"//spec_name//"' for "// & - "PartMC-camp initial concentrations.") + "CAMP-camp initial concentrations.") key_name = "aerosol representation name" call assert_msg(150863332, & species_data%get_string(key_name, rep_name), & "Missing aerosol representation name for species '"// & - spec_name//"' for PartMC-camp initial concentrations.") - - ! Find the species PartMC id + spec_name//"' for CAMP-camp initial concentrations.") this%init_conc_camp_id(i_spec) = 0 call assert_msg(258814777, & this%camp_core%get_aero_rep(rep_name, aero_rep_ptr), & "Could not find aerosol representation '"//rep_name//"'") this%init_conc_camp_id(i_spec) = & aero_rep_ptr%spec_state_id(spec_name) - call assert_msg(437149649, this%init_conc_camp_id(i_spec) .gt. 0, & + call assert_msg(437149649, this%init_conc_camp_id(i_spec) > 0, & "Could not find aerosol species '"//spec_name//"' in "// & "aerosol representation '"//rep_name//"'.") - call aero_species_list%iter_next() i_spec = i_spec + 1 end do end if - end subroutine load_init_conc - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + this%specs_emi_id(1)=chem_spec_data%gas_state_id("SO2") + this%specs_emi_id(2)=chem_spec_data%gas_state_id("NO2") + this%specs_emi_id(3)=chem_spec_data%gas_state_id("NO") + this%specs_emi_id(4)=chem_spec_data%gas_state_id("NH3") + this%specs_emi_id(5)=chem_spec_data%gas_state_id("CO") + this%specs_emi_id(6)=chem_spec_data%gas_state_id("ALD2") + this%specs_emi_id(7)=chem_spec_data%gas_state_id("FORM") + this%specs_emi_id(8)=chem_spec_data%gas_state_id("ETH") + this%specs_emi_id(9)=chem_spec_data%gas_state_id("IOLE") + this%specs_emi_id(10)=chem_spec_data%gas_state_id("OLE") + this%specs_emi_id(11)=chem_spec_data%gas_state_id("TOL") + this%specs_emi_id(12)=chem_spec_data%gas_state_id("XYL") + this%specs_emi_id(13)=chem_spec_data%gas_state_id("PAR") + this%specs_emi_id(14)=chem_spec_data%gas_state_id("ISOP") + this%specs_emi_id(15)=chem_spec_data%gas_state_id("MEOH") + this%specs_emi(1)=1.06E-09 + this%specs_emi(2)=7.56E-12 + this%specs_emi(3)=1.44E-10 + this%specs_emi(4)=8.93E-09 + this%specs_emi(5)=1.96E-09 + this%specs_emi(6)=4.25E-12 + this%specs_emi(7)=1.02E-11 + this%specs_emi(8)=4.62E-11 + this%specs_emi(9)=1.49E-11 + this%specs_emi(10)=1.49E-11 + this%specs_emi(11)=1.53E-11 + this%specs_emi(12)=1.40E-11 + this%specs_emi(13)=4.27E-10 + this%specs_emi(14)=6.03E-12 + this%specs_emi(15)=5.92E-13 - !> Get initial concentrations for the mock MONARCH model (for testing only) - subroutine get_init_conc(this, MONARCH_conc, MONARCH_water_conc, & - WATER_VAPOR_ID, MONARCH_air_density) + end subroutine load_init_conc - !> PartMC-camp <-> MONARCH interface - class(monarch_interface_t) :: this - !> MONARCH species concentrations to update + subroutine get_init_conc(this, MONARCH_conc, water_conc, & + WATER_VAPOR_ID,i_W,I_E,I_S,I_N) + class(camp_monarch_interface_t) :: this real, intent(inout) :: MONARCH_conc(:,:,:,:) - !> Atmospheric water concentrations (kg_H2O/kg_air) - real, intent(out) :: MONARCH_water_conc(:,:,:,:) - !> Index in water_conc corresponding to water vapor + real, intent(inout) :: water_conc(:,:,:,:) integer, intent(in) :: WATER_VAPOR_ID - !> Air density (kg_air/m^3) - real, intent(out) :: MONARCH_air_density(:,:,:) - - integer(kind=i_kind) :: i_spec, water_id, i,j,k - - ! Reset the species concentrations in CAMP and MONARCH - this%camp_state%state_var(:) = 0.0 - MONARCH_conc(:,:,:,:) = 0.0 - MONARCH_water_conc(:,:,:,WATER_VAPOR_ID) = 0.0 - - ! Set the air density to a nominal value - MONARCH_air_density(:,:,:) = 1.225 - - ! Set initial concentrations in CAMP - this%camp_state%state_var(this%init_conc_camp_id(:)) = & - this%init_conc(:) - - ! Copy species concentrations to MONARCH array - forall (i_spec = 1:size(this%map_monarch_id)) - MONARCH_conc(:,:,:,this%map_monarch_id(i_spec)) = & - this%camp_state%state_var(this%map_camp_id(i_spec)) - end forall - - ! Set the relative humidity - MONARCH_water_conc(:,:,:,WATER_VAPOR_ID) = & - this%camp_state%state_var(this%gas_phase_water_id) * & - 1.0d-9 / 1.225d0 - + integer, intent(in) :: i_W,I_E,I_S,I_N + integer(kind=i_kind) :: i_spec, water_id,i,j,k,r,NUM_VERT_CELLS,state_size_per_cell + NUM_VERT_CELLS=size(MONARCH_conc,3) + this%camp_state%state_var(this%init_conc_camp_id(:)) = this%init_conc(:) + if(this%n_cells==1) then + forall (i_spec = 1:size(this%map_monarch_id)) + MONARCH_conc(:,:,:,this%map_monarch_id(i_spec)) = & + this%camp_state%state_var(this%map_camp_id(i_spec)) + end forall + this%camp_state%state_var(this%gas_phase_water_id +(r*state_size_per_cell)) = & + water_conc(i,j,k,WATER_VAPOR_ID) * & + mwair / mwwat * 1.e6 + else + do i=i_W, I_E + do j=I_S, I_N + do k=1, NUM_VERT_CELLS + r=(k-1)*(I_E*I_N) + (j-1)*(I_E) + i-1 + forall (i_spec = 1:size(this%map_monarch_id)) + this%camp_state%state_var(this%init_conc_camp_id(i_spec)& + +r*state_size_per_cell) = this%init_conc(i_spec) + end forall + do i_spec=1, size(this%map_monarch_id) + MONARCH_conc(i,j,k,this%map_monarch_id(i_spec)) = & + this%camp_state%state_var(this%map_camp_id(i_spec)) + end do + this%camp_state%state_var(this%gas_phase_water_id +(r*state_size_per_cell)) = & + water_conc(i,j,k,WATER_VAPOR_ID) * & + mwair / mwwat * 1.e6 + end do + end do + end do + end if end subroutine get_init_conc -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Get the MONARCH species names and indices (for testing only) - subroutine get_MONARCH_species(this, species_names, MONARCH_ids) - - !> PartMC-camp <-> MONARCH interface - class(monarch_interface_t) :: this - !> Set of MONARCH species names - type(string_t), allocatable, intent(out) :: species_names(:) - !> MONARCH tracer ids - integer(kind=i_kind), allocatable, intent(out) :: MONARCH_ids(:) - species_names = this%monarch_species_names - MONARCH_ids = this%map_monarch_id - - end subroutine get_MONARCH_species - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Print the PartMC-camp data - subroutine do_print(this) - - !> PartMC-camp <-> MONARCH interface - class(monarch_interface_t) :: this - - call this%camp_core%print() - - end subroutine do_print - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Finalize the interface elemental subroutine finalize(this) - - !> PartMC-camp <-> MONARCH interface - type(monarch_interface_t), intent(inout) :: this - - if (associated(this%camp_core)) & - deallocate(this%camp_core) - if (associated(this%camp_state)) & - deallocate(this%camp_state) - if (allocated(this%monarch_species_names)) & - deallocate(this%monarch_species_names) - if (allocated(this%map_monarch_id)) & - deallocate(this%map_monarch_id) - if (allocated(this%map_camp_id)) & - deallocate(this%map_camp_id) - if (allocated(this%init_conc_camp_id)) & - deallocate(this%init_conc_camp_id) - if (allocated(this%init_conc)) & - deallocate(this%init_conc) - if (associated(this%species_map_data)) & - deallocate(this%species_map_data) - if (associated(this%init_conc_data)) & - deallocate(this%init_conc_data) - if (associated(this%property_set)) & - deallocate(this%property_set) + type(camp_monarch_interface_t), intent(inout) :: this + if (associated(this%camp_core)) deallocate(this%camp_core) end subroutine finalize -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -end module camp_monarch_interface +end module diff --git a/test/monarch/checkGPU.py b/test/monarch/checkGPU.py new file mode 100644 index 000000000..25d8924af --- /dev/null +++ b/test/monarch/checkGPU.py @@ -0,0 +1,32 @@ +# +# Copyright (C) 2022 Barcelona Supercomputing Center and University of +# Illinois at Urbana-Champaign +# SPDX-License-Identifier: MIT +# + +from mainMonarch import * + + +def checkGPU(): + conf = TestMonarch() + conf.chemFile = "cb05_paperV2" + conf.diffCellsL = [] + conf.diffCellsL.append("Realistic") + conf.nGPUsCaseBase = 1 + conf.nGPUsCaseOptimList = [1] + conf.mpiProcessesCaseBase = 1 + conf.mpiProcessesCaseOptimList.append(1) + conf.allocatedNodes = 1 + conf.allocatedTasksPerNode = 160 + conf.cells = [10] + conf.timeSteps = 3 + conf.timeStepsDt = 2 + conf.caseBase = "CPU One-cell" + conf.casesOptim = [] + conf.casesOptim.append("GPU BDF") + conf.plotYKey = "Speedup timecvStep" + """END OF CONFIGURATION VARIABLES""" + run_main(conf) + +if __name__ == "__main__": + checkGPU() \ No newline at end of file diff --git a/test/monarch/checkGPU.sh b/test/monarch/checkGPU.sh new file mode 100644 index 000000000..59ef7ffa4 --- /dev/null +++ b/test/monarch/checkGPU.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -e +ln -rs -fL out ../../build/out +ln -rs -fL settings ../../build/settings +python checkGPU.py \ No newline at end of file diff --git a/test/monarch/cloudJ/COPYRIGHT.txt b/test/monarch/cloudJ/COPYRIGHT.txt deleted file mode 100644 index 909f5ab00..000000000 --- a/test/monarch/cloudJ/COPYRIGHT.txt +++ /dev/null @@ -1 +0,0 @@ -Fast-J code, including developments such as Cloud-J, is distributed under GNU General Public License version 3.0 (GPLv3). A copy of the GNU public license is at http://sourceforge.net/p/webrtcbench/code/ci/default/tree/COPYING \ No newline at end of file diff --git a/test/monarch/cloudJ/cld_sub_mod.f90 b/test/monarch/cloudJ/cld_sub_mod.f90 deleted file mode 100644 index f676ee28d..000000000 --- a/test/monarch/cloudJ/cld_sub_mod.f90 +++ /dev/null @@ -1,1226 +0,0 @@ -!------------------------------------------------------------------------------ -! UCI fast-JX cloud-JX v-7.4d (11/2016) ! -!------------------------------------------------------------------------------ -! -! !DESCRIPTION: decides what to do with cloud fraction, -! including generate Independent Column Atmospheres (ICAs)for a max-ran -! cloud overlap algorithm, and Quadrature Colm Atmos (QCAs). -! v 7.3b corrected an indexing/segmentation error in IG2 affecting L_CLR2 -! no change in results, L_CLR2 = t or f does not affect top layer. -! v 7.3c added GLVL and reduced cloud corr factor when there were gaps in levels -! v 7.4d minor fix to ZZZ(L)-ZZZ(1) in sub ICA_NR to avoid possible seg-fault. -! - MODULE CLD_SUB_MOD - -! USES: - USE FJX_CMN_MOD - - USE FJX_SUB_MOD, ONLY : EXITC, PHOTO_JX - - IMPLICIT NONE -!----------------------------------------------------------------------- -! -! !PUBLIC SUBROUTINES: -! - PUBLIC :: CLOUD_JX - - CONTAINS - - - SUBROUTINE CLOUD_JX (U0,SZA,REFLB,SOLF,FG0,LPRTJ,PPP,ZZZ,TTT, & - DDD,RRR,OOO, LWP,IWP,REFFL,REFFI, CLDF,CLDCOR,CLDIW, & - AERSP,NDXAER,L1U,ANU,VALJXX,NJXU, & - CLDFLAG,NRANDO,IRAN,LNRG,NICA,JCOUNT) - - implicit none - - -!---Newest recommended approach (v7.3) to use cloud correlation lengths -! Problem with correlation is that each new cloud layer generates 2x combinations -! Thus the possibilities are for 2**Lcloudtop ICAs - that is too many (2**35) -! Using correlation lengths (3 km for tropical and high clouds, 1.5 km for stratus) -! Choose 6 bins (of thickness = correl length) as Max-Overlap, then have -! these bins be randomly or correlated with bins above -! For now just assume these are random as with the other 2 max-ran groups above. -! -! GRP1 = 0 - 1.5km, GRP2 = 1.5 - 3.5km, GRP3 = 3.5 - 6km -! GRP4 = 6 - 9km, GRP5 = 9 - 13km, GRP6 = 13km+ (GRP7 = separate cirrus shields) -! -!Key Refs -! Kato, S., et al (2010), Relationships among cloud occurrence frequency, overlap, -! and effective thickness derived from CALIPSO and CloudSat merged cloud vertical -! profiles, J. Geophys. Res., 115, D00H28, doi:10.1029/2009JD012277. -! Pincus, R., et al. (2005), Overlap assumptions for assumed probability distribution -! function cloud schemes in large-scale models, J. Geophys. Res., 110, D15S09, -! doi:10.1029/2004JD005100. -! Oreopoulos, L., et al (2012) Radiative impacts of cloud heterogeneity and overlap -! in an atmospheric General Circulation Model, Atmos. Chem. Phys., 12, 90979111, -! doi:10.5194/acp-12-9097-2012 -! Naud, C., & A. D. DelGenio (2006) Cloud Overlap Dependence on Atmospheric Dynamics, -! 16th ARM Science Team Meeting Proceedings, Albuquerque, NM, March 27 - 31, 2006. - - -! CLOUD_JX is fractional cloud cover driver for PHOTO_JX (fast-JX v7.2) -! calc J's for a single column atmosphere (aka Indep Colm Atmos or ICA) -! needs P, T, O3, clds, aersls; adds top-of-atmos layer from climatology -! needs day-fo-year for sun distance, SZA (not lat or long) - -!--CLOUD_JX: different cloud schemes (4:8 require max-ran overlap algorithm) -! CLDFLAG = 1 : Clear sky J's -! CLDFLAG = 2 : Averaged cloud cover -! CLDFLAG = 3 : cloud-fract**3/2, then average cloud cover -! CLDFLAG = 4 : Average direct solar beam over all ICAs, invert to get clouds -! CLDFLAG = 5 : Random select NRANDO ICA's from all(Independent Column Atmos.) -! CLDFLAG = 6 : Use all (up to 4) quadrature cloud cover QCAs (mid-pts of bin) -! CLDFLAG = 7 : Use all (up to 4) QCAs (average clouds within each Q-bin) -! CLDFLAG = 8 : Calcluate J's for ALL ICAs (up to 20,000 per cell!) - -!--CLDIW = index for each lcoud layer: -! = 0 = no cloud -! = 1 = water cloud only -! = 2 = ice cloud only -! = 3 = liquid+ice cloud mix -!----------------------------------------------------------------------- - -!---calling sequence variables - integer, intent(in) :: L1U,ANU,NJXU, CLDFLAG,IRAN,NRANDO,LNRG - real*8, intent(in) :: U0,SZA,REFLB,SOLF,FG0, CLDCOR - logical, intent(in) :: LPRTJ - real*8, intent(in), dimension(L1U+1) :: PPP,ZZZ - real*8, intent(in), dimension(L1U ) :: TTT,DDD,RRR,OOO, & - LWP,IWP,REFFL,REFFI - real*8, intent(in), dimension(L1U,ANU):: AERSP - integer, intent(in), dimension(L1U,ANU):: NDXAER - real*8, intent(in), dimension(L1U ) :: CLDF - integer, intent(in), dimension(L1U ) :: CLDIW -! reports out the JX J-values, upper level program converts to CTM chemistry J's - real*8, intent(out), dimension(L1U-1,NJXU):: VALJXX - integer, intent(out) :: NICA,JCOUNT - -!----------------------------------------------------------------------- - - logical LPRTJ0, LDARK - integer I,II,J,L,N, LTOP - real*8, dimension(L1U) :: LWPX,IWPX,REFFLX,REFFIX - real*8 CLDFR, XRAN, FSCALE, QCAOD, WTRAN, G0LIQ,G0ICE, SUM_W,SUM_O - - real*8, dimension(LWEPAR) :: CLTL,CLTI, CLT,CLDX - integer :: NRG, IRANX -! max number of max-overlap cloud groups set at 9 - integer, dimension(LWEPAR) :: NCLDF - integer, dimension(9) :: GBOT,GTOP,GLVL,GNR,GCMX - integer, dimension(9,CBIN_+1) :: GFNR - real*8, dimension(CBIN_) :: CFBIN - real*8, dimension(ICA_) :: WCOL,OCOL, OCDFS -! real*8, dimension(LWEPAR,ICA_) :: TCOL - integer, dimension(ICA_) :: ISORT - real*8, dimension(LWEPAR+1) :: TCLD,TTCOL,SOLT,TAUG - real*8, dimension(L1U-1,NJXU):: VALJXXX - real*8, dimension(NQD_) :: WTQCA - integer, dimension(NQD_) :: NQ1,NQ2,NDXQS - -!----------------------------------------------------------------------- - LPRTJ0 = LPRTJ - JCOUNT = 0 - NICA = 0 - do L = LWEPAR+1, L1U - LWPX(L) = 0.d0 - IWPX(L) = 0.d0 - REFFLX(L) = 0.d0 - REFFIX(L) = 0.d0 - enddo - -!---CLOUD_JX: different cloud schemes -!----------------------------------------------------------------------- - if (CLDFLAG.lt.1 .or. CLDFLAG.gt.8) & - call EXITC ('>>>stop, incorrect cloud index') - - if (CLDFLAG.le.3) then - -!----------------------------------------------------------------------- - if (CLDFLAG.eq.2) then -! 2 = average cloud cover - do L = 1, LWEPAR - CLDFR = CLDF(L) - LWPX(L) = LWP(L) * CLDFR - IWPX(L) = IWP(L) * CLDFR - REFFLX(L) = REFFL(L) - REFFIX(L) = REFFI(L) - enddo - -!----------------------------------------------------------------------- - elseif (CLDFLAG.eq.3) then -! 3 = average cloud cover, adjust cloud fraction **3/2 - do L = 1, LWEPAR - CLDFR = CLDF(L) * sqrt(CLDF(L)) - LWPX(L) = LWP(L) * CLDFR - IWPX(L) = IWP(L) * CLDFR - REFFLX(L) = REFFL(L) - REFFIX(L) = REFFI(L) - enddo - -!----------------------------------------------------------------------- - elseif (CLDFLAG.eq.1) then -! 1 = clear sky - no clouds - do L = 1, LWEPAR - LWPX(L) = 0.d0 - IWPX(L) = 0.d0 - enddo - endif -!----------------------------------------------------------------------- - -!----all above have only a single, simple call for fast_JX------------ - if(LPRTJ0) then - write(6,'(2a)') ' cloud_J v7.4 Internal print: clouds = ',& - TITCLD(CLDFLAG) - endif -!----------------------------------------------------------------------- - call PHOTO_JX (U0,SZA,REFLB,SOLF, LPRTJ0, PPP,ZZZ,TTT, & - DDD,RRR,OOO, LWPX,IWPX,REFFLX,REFFIX, & - AERSP,NDXAER, L1U,ANU, VALJXX,NJXU, LDARK) - if (.not.LDARK) JCOUNT = JCOUNT + 1 -!----------------------------------------------------------------------- - - else -!----------------------------------------------------------------------- -! All below = CLDFLAG = 4:8 need to set up cloud overlap algorithm -!----------------------------------------------------------------------- - do L = 1, LWEPAR - CLDX(L) = CLDF(L) - CLT(L) = 0.d0 - CLTI(L) = 0.d0 - CLTL(L) = 0.d0 - LWPX(L) = LWP(L) - IWPX(L) = IWP(L) - REFFLX(L) = REFFL(L) - REFFIX(L) = REFFI(L) - enddo -! do cloud fraction binning here and rescale IWP/LWP to conserve layer WP - - -! generate approx cloud visible optical depths for quadrature and sorting -! true wavelength dependence will be recalculated in PHOTO_JX - do L = 1,LWEPAR - if (REFFIX(L) .gt. 0.d0) then - CLTI(L) = IWPX(L)*0.75d0*2.d0/(REFFIX(L)*0.917d0) - CLT(L) = CLT(L) + CLTI(L) - endif - if (REFFLX(L) .gt. 0.d0) then - CLTL(L) = LWPX(L)*0.75d0*2.1d0/REFFLX(L) - CLT(L) = CLT(L) + CLTL(L) - endif - enddo - LTOP = LWEPAR -!------------------------------------------------------------------------- -!---Generate max-ran cloud overlap groups used for CLDFLAG = 4:8 -!---CLT(cloud ice+liq OD) & IWPX & LWPX adjusted to quantized cld fr -!------------------------------------------------------------------------- - call ICA_NR(CLDX,CLT,IWPX,LWPX,ZZZ, CLDIW,LTOP,LNRG,CBIN_,ICA_, & - CFBIN,CLDCOR,NCLDF, GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA) - - -!---call ICA_ALL to generate the weight and cloud total OD of each ICA -!------------------------------------------------------------------------- - call ICA_ALL(CLDX,CLT,LTOP,CBIN_,ICA_, CFBIN, & - CLDCOR,NCLDF,GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA, WCOL,OCOL) - - - if(LPRTJ0) then - write(6,*) ' cloud-J v7.4 internal print: #ICAs = ',NICA - endif - -!----------------------------------------------------------------------- -! 4 = average direct beam over all ICAs, est. isotropic equiv for liq/ice - if (CLDFLAG .eq. 4) then - G0LIQ= min(0.96d0, FG0*PCC(3,18,3)/3.d0) - G0ICE= min(0.96d0, FG0*PCC(3,18,6)/3.d0) - call ICA_DIRECT(U0,CLDX,CLT,CLTL,CLTI, LTOP,CBIN_,ICA_, & - CLDCOR,NCLDF,GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA, & - WCOL,TCLD,TTCOL,SOLT,G0LIQ,G0ICE,TAUG) - if(LPRTJ0) then - write(6,'(a,2f8.4)') ' Asymm factor g0 for Liq & Ice:', & - G0LIQ,G0ICE - write(6,*) & - ' Average Direct beam: cld OD, cld FR - inferred OD' - write(6,'(i5,3f10.4)') (L, CLT(L),CLDX(L),TCLD(L), L=1,LTOP) - endif - -! using TCLD as the eff-cloud OD in each layer, repartition bewteen ice & liq - do L=1,LTOP - if (TCLD(L).gt.1.d-7 .and. CLT(L).gt.1.d-7) then - FSCALE = TCLD(L) / CLT(L) - IWPX(L) = IWPX(L) * FSCALE - LWPX(L) = LWPX(L) * FSCALE - else - IWPX(L) = 0.d0 - LWPX(L) = 0.d0 - endif - enddo - call PHOTO_JX (U0,SZA,REFLB,SOLF, LPRTJ0, PPP,ZZZ,TTT, & - DDD,RRR,OOO, LWPX,IWPX,REFFLX,REFFIX, & - AERSP,NDXAER, L1U,ANU, VALJXX,NJXU, LDARK) - if (.not.LDARK) JCOUNT = JCOUNT + 1 - endif - - -!----------------------------------------------------------------------- -! 5 = random pick of NRANDO(#) ICAs (selected based on fractional area) - if (CLDFLAG .eq. 5) then - - if(LPRTJ) then - write(6,*) ' Average Js over random ICAs:',NRANDO - endif - - VALJXXX(:,:) = 0.d0 - WTRAN = 1.d0/float(NRANDO) - OCDFS(1) = WCOL(1) - do I = 2,NICA - OCDFS(I) = OCDFS(I-1) + WCOL(I) - enddo - do N=1,NRANDO - IRANX = mod (IRAN+N-1, NRAN_) + 1 - XRAN = RAN4(IRANX) - I = 1 - do while (XRAN .gt. OCDFS(I) .and. I .lt. NICA) - I = I+1 - enddo - call ICA_III(CLDX,CLT,LTOP,CBIN_,ICA_, I, & - CLDCOR,NCLDF,GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA, TTCOL) -!---zero out cloud water paths which are not in the selected random ICA - do L = 1, LTOP - LWPX(L) = LWP(L) - IWPX(L) = IWP(L) - enddo - do L = 1,LTOP - if(TTCOL(L) .lt. 1.d-8) then - IWPX(L) = 0.d0 - LWPX(L) = 0.d0 - endif - enddo - - if(LPRTJ) then - write(6,'(a,2i6,f8.3)') ' pick random ICA:',N,I,OCOL(I) - do L = 1,LTOP - if (TTCOL(L) .ge. 1.d-8) then - write(6,'(i5,f9.4,2f8.3)') L,TTCOL(L),LWPX(L),IWPX(L) - endif - enddo - endif - - call PHOTO_JX (U0,SZA,REFLB,SOLF, LPRTJ0, PPP,ZZZ,TTT, & - DDD,RRR,OOO, LWPX,IWPX,REFFLX,REFFIX, & - AERSP,NDXAER, L1U,ANU, VALJXX,NJXU, LDARK) - if (.not.LDARK) JCOUNT = JCOUNT + 1 - LPRTJ0 = .false. - do J = 1,NJXU - do L = 1,L1U-1 - VALJXXX(L,J) = VALJXXX(L,J) + VALJXX(L,J)*WTRAN - enddo - enddo - enddo - do J = 1,NJXU - do L = 1,L1U-1 - VALJXX(L,J) = VALJXXX(L,J) - enddo - enddo - endif - - -!----------------------------------------------------------------------- -! 6 = calculate qudrature QCAs, use all 4 mid points - if (CLDFLAG .eq. 6) then - call ICA_QUD(WCOL,OCOL,LTOP,ICA_,NQD_,NICA, & - WTQCA, ISORT,NQ1,NQ2,NDXQS) - - if (LPRTJ0) then - write(6,*) ' quadrature QCAs(avg): wt/range/index/OD' - do N=1,NQD_ - if (WTQCA(N).gt.0.d0) then - write(6,'(i5,f8.4,3i8,2f10.3)') & - N,WTQCA(N),NQ1(N),NQ2(N),NDXQS(N),OCOL(ISORT(NDXQS(N))) - endif - enddo - endif - - VALJXXX(:,:) = 0.d0 - do N = 1, NQD_ - if (WTQCA(N) .gt. 0.d0) then - I = ISORT(NDXQS(N)) - call ICA_III(CLDX,CLT,LTOP,CBIN_,ICA_, I, & - CLDCOR,NCLDF, GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA, TTCOL) -!---zero out cloud water paths which are not in the selected QCA - do L = 1, LTOP - LWPX(L) = LWP(L) - IWPX(L) = IWP(L) - enddo - do L = 1,LTOP - if (TTCOL(L) .lt. 1.d-8) then - IWPX(L) = 0.d0 - LWPX(L) = 0.d0 - endif - enddo - call PHOTO_JX (U0,SZA,REFLB,SOLF, LPRTJ0, PPP,ZZZ,TTT, & - DDD,RRR,OOO, LWPX,IWPX,REFFLX,REFFIX, & - AERSP,NDXAER, L1U,ANU, VALJXX,NJXU, LDARK) - if (.not.LDARK) JCOUNT = JCOUNT + 1 - LPRTJ0 = .false. - do J = 1,NJXU - do L = 1,L1U-1 - VALJXXX(L,J) = VALJXXX(L,J) + VALJXX(L,J)*WTQCA(N) - enddo - enddo - endif - enddo -!--- - do J = 1,NJXU - do L = 1,L1U-1 - VALJXX(L,J) = VALJXXX(L,J) - enddo - enddo - endif - - -!----------------------------------------------------------------------- -! 7 = calculate quadrature atmosphere - average cloud within each QCA bin. - if (CLDFLAG .eq. 7) then - - call ICA_QUD(WCOL,OCOL,LTOP,ICA_,NQD_,NICA, & - WTQCA, ISORT,NQ1,NQ2,NDXQS) - - VALJXXX(:,:) = 0.d0 - do N = 1, NQD_ - if (WTQCA(N) .gt. 0.d0) then - if (NQ2(N) .ge. NQ1(N)) then - IWPX(:) = 0.d0 - LWPX(:) = 0.d0 - QCAOD = 0.d0 - do II = NQ1(N),NQ2(N) - I = ISORT(II) - call ICA_III(CLDX,CLT,LTOP,CBIN_,ICA_, I, & - CLDCOR,NCLDF, GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA, TTCOL) - - if (LPRTJ) then - write(6,'(a,3i5,2f8.4,f9.3)') ' N(QCA)/II/I WCOL,OCOL', & - N,II,I,WCOL(I),WTQCA(N),OCOL(I) - endif - - do L = 1,LTOP - if (TTCOL(L) .gt. 1.d-8) then - IWPX(L) = IWPX(L) + IWP(L)*WCOL(I) - LWPX(L) = LWPX(L) + LWP(L)*WCOL(I) - QCAOD = QCAOD + TTCOL(L)*WCOL(I) - endif - enddo - enddo - do L = 1,LTOP - IWPX(L) = IWPX(L)/WTQCA(N) - LWPX(L) = LWPX(L)/WTQCA(N) - enddo - QCAOD = QCAOD/WTQCA(N) - - if (LPRTJ) then - write(6,'(a,i3,a,f10.5,f10.3)') & - 'Quad Atmos Avg #',N,' wt, tot-OD:',WTQCA(N),QCAOD - write(6,'(a)') 'L / LWP / IWP' - do L=1,LTOP - if (LWPX(L)+IWPX(L) .gt. 1.d-8) & - write(6,'(i4,2f10.3)') L,LWPX(L),IWPX(L) - enddo - endif - - call PHOTO_JX (U0,SZA,REFLB,SOLF, LPRTJ0, PPP,ZZZ,TTT, & - DDD,RRR,OOO, LWPX,IWPX,REFFLX,REFFIX, & - AERSP,NDXAER, L1U,ANU, VALJXX,NJXU, LDARK) - if (.not.LDARK) JCOUNT = JCOUNT + 1 - LPRTJ0 = .false. - do J = 1,NJXU - do L = 1,L1U-1 - VALJXXX(L,J) = VALJXXX(L,J) + VALJXX(L,J)*WTQCA(N) - enddo - enddo - endif - endif - enddo -!--- - do J = 1,NJXU - do L = 1,L1U-1 - VALJXX(L,J) = VALJXXX(L,J) - enddo - enddo - endif - - -!----------------------------------------------------------------------- -! 8 = average J's over all ICAs - if (CLDFLAG .eq. 8) then - - if(LPRTJ) then - write(6,*) ' Average Js over all ICAs: I/ODcol/WTcol' - write(6,'(i5,2f9.4)') (L,OCOL(L),WCOL(L), L=1,min(12,NICA-1)) - if (NICA.gt.12) write(6,'(a)') '. . .' - write(6,'(i5,2f9.4)') NICA,OCOL(NICA),WCOL(NICA) - endif - - VALJXXX(:,:) = 0.d0 - do I = 1, NICA - call ICA_III(CLDX,CLT,LTOP,CBIN_,ICA_, I, & - CLDCOR,NCLDF, GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA, TTCOL) -!---zero out cloud water paths which are not in the selected random ICA - do L = 1, LTOP - LWPX(L) = LWP(L) - IWPX(L) = IWP(L) - enddo - do L = 1,LTOP - if(TTCOL(L) .lt. 1.d-8) then - IWPX(L) = 0.d0 - LWPX(L) = 0.d0 - endif - enddo - call PHOTO_JX (U0,SZA,REFLB,SOLF, LPRTJ0, PPP,ZZZ,TTT, & - DDD,RRR,OOO, LWPX,IWPX,REFFLX,REFFIX, & - AERSP,NDXAER, L1U,ANU, VALJXX,NJXU, LDARK) - if (.not.LDARK) JCOUNT = JCOUNT + 1 - LPRTJ0 = .false. - do J = 1,NJXU - do L = 1,L1U-1 - VALJXXX(L,J) = VALJXXX(L,J) + VALJXX(L,J)*WCOL(I) - enddo - enddo - enddo - do J = 1,NJXU - do L = 1,L1U-1 - VALJXX(L,J) = VALJXXX(L,J) - enddo - enddo - endif -!----------------------------------------------------------------------- - - endif - - END SUBROUTINE CLOUD_JX - - -!----------------------------------------------------------------------- - SUBROUTINE ICA_NR(CLDF,CLTAU,IWPX,LWPX,ZZZ,CLDIW,LTOP,LNRG,CBIN_, & - ICA_,CFBIN,CLDCOR,NCLDF, GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA) -!----------------------------------------------------------------------- -!---Read in the cloud fraction (CLDF), cloud OD (CLTAU), cloud index (CLDIW) - -!---Derive max-ran cloud overlaps and set up all the ICAs (Independent Column -! Atmos) -! NCLDF(L) has value 1:CBIN_+1 = quantized cloud fraction (0:CBIN_). Value of 0 means NO -! clouds -! CFBIN(J) = cloud fraction assumed for bin L=0:CBIN_ -! (e.g., 1(=0-5%) = 0.025) -! CLTAU(J) = is readjusted for quantum bins to preserve CLDF*CLTAU - -!---Definition of ICAs is carefully laid out with key parameters below: -!----------------------------------------------------------------------- -! NICA = no. of ICAs -! NRG = no. of sub-groups that are randomly overlapped with each other, -! but are maximally overlapped among the contiguous layers in the sub-group. -! Technically, NRG can equal LTOP generating up to 2**LTOP ICAs. -! GBOT(G=1:NRG) = lower CTM layer of max-overlap group G -! GTOP(G=1:NRG) = upper CTM layer of max-overlap group G -! All layers, cloudy or clear are placed in one NRG group. -! GNR(G=1:NRG) = no. of unique quantized cloud fractions in group G -! (.le.CBIN_) -! Defines the number of uniques fractions in a maximally overlapped -! group. -! GFNR(G=1:NRG,1:GNR(G)) = cloud fraction quantum no (value = 0 to NCBIN) -! Stores the specific cloud fractions counted in GNR. -! -!--CLDIW = index for each lcoud layer: -! = 0 = no cloud -! = 1 = water cloud only -! = 2 = ice cloud only -! = 3 = liquid+ice cloud mix - -!----------------------------------------------------------------------- - implicit none - -!---Cloud Cover parameters (in fjx_cmn_mod.f90) -! integer, parameter :: NQD_ = 4 -! integer, parameter :: NRAN_ = 10007 ! dimension for random number -! integer, parameter :: CBIN_ = 10 ! # of quantized cld fraction bins -! may need to reduce quantum number for LNRG6 to be CBIN_ = 10 -! integer, parameter :: ICA_ = 20000 ! # of Indep Colm Atmospheres -!---Local Cloud Cover parameters -!---define break between randomly overlapped groups - integer, parameter :: NG_BRK = 0 -!---set up for correlated max-overlap groups based on observations - integer, parameter :: NRG6_ = 6 - real*8, dimension(NRG6_), parameter:: Zbin = & - [0.d5, 1.5d5, 3.5d5, 6.0d5, 9.0d5, 13.d5] - - integer,intent(in) :: LTOP, LNRG, CBIN_, ICA_ - integer,intent(in),dimension(LTOP) :: CLDIW - real*8, intent(in),dimension(LTOP) :: CLDF, ZZZ - real*8, intent(in) :: CLDCOR - real*8, intent(inout),dimension(LTOP) :: CLTAU,IWPX,LWPX - - integer, intent(out) :: NRG, NICA - integer, intent(out), dimension(LTOP) :: NCLDF - integer, intent(out), dimension(9) :: GBOT,GTOP,GLVL,GNR,GCMX - integer, intent(out), dimension(9,CBIN_+1) :: GFNR - real*8, intent(out), dimension(CBIN_) :: CFBIN - - real*8 FBIN, FSCALE, CLF_MIN, CLF_MAX, FSCALE2 - integer :: NRGX, NICAX - integer, dimension(9) :: GMIN,GMAX - integer, dimension(CBIN_) :: NSAME - integer I,K,L,LL,N,NC, L1,L2,L3, LCLTOP,LCIRRUS - logical L1GRP,L2GRP,L3GRP, L6GRP -!----------------------------------------------------------------------- - -!---quantize cloud fractions into bins to avoid excessive calculations for -!--- nearly identical maximally overlapping cloud fractions. -!--- CBIN_=20 => N=0=[0%], N=1=[0.001-5%],N=2=[5-10%], . -! N=19=[90-95%],N=20=[95-100%] -!---assume the upper end of the range and renormalize in-cloud TAU to preserve -! CLDF*TAU - FBIN = CBIN_ - do K = 1,CBIN_ - CFBIN(K) = float(K) / FBIN - enddo - -!---quantize cloud fractions into bins & adjust to conserve TAU*CF -! round up/down <2%=>0% and >98%=>100% works for FBIN = 10 or 25 (not 40) - CLF_MIN = 0.02d0 - CLF_MAX = 1.0d0 - CLF_MIN - -! clear out any small fraction clouds and quantize the cloud fraction as NCLDF - do L = 1,LTOP - if (CLDF(L).lt.CLF_MIN .or. CLDIW(L).eq.0) then - NCLDF(L) = 0 - CLTAU(L) = 0.d0 - IWPX(L) = 0.d0 - LWPX(L) = 0.d0 - elseif (CLDF(L) .gt. CLF_MAX) then - NCLDF(L) = FBIN - else - FSCALE2 = FBIN - FSCALE2 = CLDF(L)*FSCALE2 + 0.4999d0 - NCLDF(L) = max(FSCALE2,1.00001d0) - endif - enddo - -!---find the cloud-top layer (water or ice) or identify clear sky - LCLTOP = 0 - do L = 1,LTOP - if (NCLDF(L).gt.0) then - LCLTOP = L - endif - enddo - if (LCLTOP .eq. 0) then - NRG = 0 - NICA = 1 - goto 1 - endif - -! rescale LWPX, IWPX, CLTAU - do L = 1,LCLTOP - if (NCLDF(L) .gt. 0) then - FSCALE = CLDF(L) / CFBIN(NCLDF(L)) - CLTAU(L) = CLTAU(L) * FSCALE - IWPX(L) = IWPX(L) * FSCALE - LWPX(L) = LWPX(L) * FSCALE - endif - enddo - -!---define maximally overlapping sub-groups by set levels (LNRG) or min -! cloud fraction - if (LNRG .eq. 0) then -!----------------------------------------------------------------------------- -!---Identify the maximally overlapped groups by breaking at a minimun NCLDF(L) -!----------------------------------------------------------------------------- -!---search from bottom to top, finding 1st level in group with cloud fraction -! .ge. threshold, and then first level above that at which the cld fraction -! is .lt. threshold. NRG = number of such groups. - L = 1 - NRG = 0 - do while (L.lt.LCLTOP) - if (NCLDF(L) .gt. NG_BRK) then - NRG = NRG+1 - if (NRG.gt.9) exit - GMIN(NRG) = L - GMAX(NRG) = LCLTOP - do LL = L+1,LCLTOP -! look for first layer to drop below CLDF threshold = NGRBRK - if (NCLDF(LL) .le. NG_BRK) then - GMAX(NRG) = LL - exit - endif - enddo - L = GMAX(NRG)+1 - else - L = L+1 - endif - enddo - - elseif (LNRG .eq. 3) then -!----------------------------------------------------------------------------- -!---Alternative approach to fix a maximum of 3 random-overlap groups -! (for L60/L57 CTM) -!---GRP=1 (if at all) is L=1:8 (surf to +1 km) -!---GRP=2 (if at all) is L=9 to last LWCloud -!---GRP=3 (fi at all) is L=last-LWCld+1 to LTOP -!----------------------------------------------------------------------------- - L1 = 1 - L2 = 9 -!----- L3-1 = uppermost liquid water cloud, L3 = first of only ice-clouds - L3 = L2 - do L = LCLTOP,L2,-1 - if (CLDIW(L).eq.1 .or. CLDIW(L).eq.3) then - L3 = L+1 - exit - endif - enddo - - L1GRP = .false. - L2GRP = .false. - L3GRP = .false. - do L = L1,L2-1 - L1GRP = L1GRP .or. (NCLDF(L).gt.0) - enddo - do L = L2,L3-1 - L2GRP = L2GRP .or. (NCLDF(L).gt.0) - enddo - do L = L3,LCLTOP - L3GRP = L3GRP .or. (NCLDF(L).gt.0) - enddo - NRG = 0 - if (L1GRP) then - NRG = NRG+1 - GMIN(NRG) = L1 - GMAX(NRG) = L2-1 - endif - if (L2GRP) then - NRG = NRG+1 - GMIN(NRG) = L2 - GMAX(NRG) = L3-1 - endif - if (L3GRP) then - NRG = NRG+1 - GMIN(NRG) = L3 - GMAX(NRG) = LCLTOP - endif - NRG = max(NRG,1) - GMIN(1) = 1 - GMAX(NRG) = LCLTOP - - else -!----------------------------------------------------------------------------- -!---Newest recommended approach (v7.3) to use cloud correlation lengths -! Problem with correlation is that each new cloud layer generates 2x combinations -! Thus the possibilities are for 2**Lcloudtop ICAs - that is too many (2**35) -! Using correlation lengths (3 km for tropical and high clouds, 1.5 km for stratus) -! Choose 6 bins (of thickness = correl length) as Max-Overlap, then have -! these bins be randomly or correlated with bins above -! For now just assume these are random as with the other 2 max-ran groups above. -! -! GRP1 = 0 - 1.5km, GRP2 = 1.5 - 3.5km, GRP3 = 3.5 - 6km -! GRP4 = 6 - 9km, GRP5 = 9 - 13km, GRP6 = 13km+ -! -!Key Refs -! Kato, S., et al (2010), Relationships among cloud occurrence frequency, overlap, -! and effective thickness derived from CALIPSO and CloudSat merged cloud vertical -! profiles, J. Geophys. Res., 115, D00H28, doi:10.1029/2009JD012277. -! Pincus, R., et al. (2005), Overlap assumptions for assumed probability distribution -! function cloud schemes in large-scale models, J. Geophys. Res., 110, D15S09, -! doi:10.1029/2004JD005100. -! Oreopoulos, L., et al (2012) Radiative impacts of cloud heterogeneity and overlap -! in an atmospheric General Circulation Model, Atmos. Chem. Phys., 12, 90979111, -! doi:10.5194/acp-12-9097-2012 -! Naud, C., & A. D. DelGenio (2006) Cloud Overlap Dependence on Atmospheric Dynamics, -! 16th ARM Science Team Meeting Proceedings, Albuquerque, NM, March 27 - 31, 2006. -! -!---Find the levels in each of the NRG6_ altitude-defined groups - do L = 1,LCLTOP - do N = 2,NRG6_ - if (ZZZ(L)-ZZZ(1) .lt. Zbin(N)) then - GMAX(N-1) = L - endif - enddo - enddo - GMIN(1) = 1 - do N = 2,NRG6_ - GMIN(N) = GMAX(N-1) + 1 - enddo - GMAX(NRG6_) = LCLTOP - -!---find out if there are any clouds in each of the 6 correlated groups - NRG = 0 - do N = 1,NRG6_ - L6GRP = .false. - do L = GMIN(N),GMAX(N) - if (NCLDF(L) .gt. 0) then - L6GRP = .true. - endif - enddo - if (L6GRP) then - NRG = NRG + 1 - GMIN(NRG) = GMIN(N) - GMAX(NRG) = GMAX(N) - GLVL(NRG) = N - endif - enddo - -!---pull off cirrus shields from top MAX-GRP as separate MAX-GRP to -! allow better correlation between cumulus towers below them - if (NRG .gt. 0) then - LCIRRUS = 0 - do L = GMAX(NRG),GMIN(NRG),-1 - if (NCLDF(L).gt.FBIN/2 .and. CLDIW(L).eq.2) then - LCIRRUS = L - endif - enddo - if (LCIRRUS .gt.GMIN(NRG)) then -!---split the uppermost MAX-GRP - GMIN(NRG+1) = LCIRRUS - GMAX(NRG+1) = GMAX(NRG) - GLVL(NRG+1) = 7 - GMAX(NRG) = LCIRRUS-1 - NRG = NRG+1 - endif - endif - - endif -!---finished selection of max-overlap groups - -!---simplify groups if no clouds with NCLDF > NG_BRK - GBOT(:) = 0 - GTOP(:) = 0 - if (NRG .eq. 0) then - NRG = 1 - GBOT(1) = 1 - GTOP(1) = LCLTOP - else -!---assign levels between maximum overlap groups to group above. - GBOT(1) = 1 - GTOP(1) = GMAX(1) - do N=2,NRG - GBOT(N) = max(GTOP(N-1)+1, GMIN(N)) -! GBOT(N) = min(GTOP(N-1)+1, GMIN(N)) - GTOP(N) = GMAX(N) - enddo - GTOP(NRG) = LCLTOP - endif -!---for each max-overlap group calculate number of unique cloud fractions - do N = 1,NRG - NSAME(:) = 0 - GCMX(N) = 0 - do L = GBOT(N),GTOP(N) - if (NCLDF(L) .gt. 0) then - NSAME(NCLDF(L)) = 1 - GCMX(N) = max(GCMX(N),NCLDF(L)) - endif - enddo -!---sort cloud fractions in deceasing order for each max-overlap group -!--- note that largest bin N=CBIN_ (eg, 95-100%) will be treated as 100% - GFNR(N,1) = CBIN_ - NC = 1 - do I = CBIN_-1,1,-1 - if(NSAME(I) .gt. 0) then - NC = NC+1 - GFNR(N,NC) = I - endif - enddo - GNR(N) = NC - GFNR(N,NC+1) = 0 - enddo -!---number of unique columns in group: if too many ICAs, drop upper groups! - NICA = 1 - do N = 1,NRG - NICA = NICA*GNR(N) - if (NICA .le. ICA_) then - NICAX = NICA - NRGX = N - endif - enddo - if (NICA .gt. ICA_) then - write(6,*) 'NICA greater than ICA_',NICA,ICA_,NICAX,NRG,NRGX - NICA = NICAX - NRG = NRGX - endif - - 1 continue - - END SUBROUTINE ICA_NR - - - -!----------------------------------------------------------------------- - SUBROUTINE ICA_ALL(CLF,CLT,LTOP,CBINU,ICAU, CFBIN,CLDCOR,NCLDF, & - GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA, WCOL,OCOL) -!----------------------------------------------------------------------- -! OCOL() = cloud optical depth (total) in each ICA -! WCOL() = weight(fract area) of ICA, -! TCOL(,) profile of cloud OD is not calcualted here. -! ISORT() = index no. of ICA sorted by column OD from smallest to largest -!---Using the information on max-ran cloud overlap generated by ICA_NR, -!--- this usbroutine generates all the ICAs -! GBOT(I=1:NRG) = lower CTM layer of max-overlap group I -! GTOP(I=1:NRG) = upper CTM layer of max-overlap group I -! GNR(I=1:NRG) = no. of unique quantized cloud fractions in group I -! (.le.NCBINS) -! GFNR(I=1:NRG,1:GNR(I)) = cloud fraction quantum no (value = 1 to NCBIN) -!---See JL Neu, MJ Prather, JE Penner (2007), Global atmospheric chemistry: -! Integrating over fractional cloud cover,J. Geophys. Res., 112, D11306, -! doi:10.1029/2006JD008007 - - implicit none - - integer, intent(in) :: LTOP, CBINU, ICAU, NRG, NICA - integer, intent(in), dimension(LTOP) :: NCLDF - integer, intent(in), dimension(9) :: GBOT,GTOP,GLVL,GNR,GCMX - integer, intent(in), dimension(9,CBINU+1) :: GFNR - real*8, intent(in), dimension(LTOP) :: CLF,CLT - real*8, intent(in), dimension(CBINU) :: CFBIN - real*8, intent(in) :: CLDCOR - real*8, intent(out),dimension(ICAU) :: WCOL,OCOL -! real*8, intent(out),dimension(LTOP,ICAU) :: TCOL - - real*8 ODCOL,WTCOL,CF0(51), FWT(10,51),FWTC(10,51),FWTCC(10,51) - real*8 FIG1,FIG2,GCORR,GCOWT,CORRFAC, FCMX(10) ,CLTOT(100) - integer I, II, IG1,IG2, G, L, IGNR(10),GCLDY(10),GRP1,GRP2 - logical L_CLR1,L_CLR2 ,LSKIP ,LGR_CLR(10) -!----------------------------------------------------------------------- - CLTOT(:) = 0.d0 - - CF0(1) = 0.d0 - do L = 1,CBINU - CF0(L+1) = CFBIN(L) - enddo - - do G = 1,NRG - FCMX(G) = CF0(GCMX(G)+1) ! max cloud-fraction in MAX-GRP - if (FCMX(G) .lt. 0.99d0) then - LGR_CLR(G) = .true. ! 1st member of MAX-GRP G = clear sky - GCLDY(G) = 2 - else - LGR_CLR(G) = .false. - GCLDY(G) = 1 - endif - do I = 1,GNR(G) ! std weighting for each member of each MAX-Group - FWT(G,I) = CF0(GFNR(G,I)+1) - CF0(GFNR(G,I+1)+1) - FWTC(G,I) = FWT(G,I) - FWTCC(G,I) = FWT(G,I) - enddo - enddo - FCMX(NRG+1) = 0.d0 - -! pre-calculate correl factors here: no change if G = 100% cloud or G+1 = 100% cloud or clear -! also no correlation fix for top MAX-GRP - do G = 1,NRG-1 - LSKIP = GCMX(G+1).eq.0 .or. GCMX(G+1).eq.CBINU & - .or. GCMX(G).eq.0 .or. GCMX(G).eq.CBINU !must have cloudy&clear in both MAX-GRPs - if (.not.LSKIP) then - FIG2 = FCMX(G+1) ! cloudy fract of MAX-GRP just above (G+1) - GRP2 = GLVL(G+1) ! upper G6 group for NRG # G+1 - FIG1 = FCMX(G) ! cloudy fract of current MAX-GRP (sum of cloudy fracts) - GRP1 = GLVL(G) ! current G6 group for NRG # G - CORRFAC = CLDCOR**(GRP2-GRP1) ! Cloud Correl Factor decreases with gap in G6 groups - do I = 2,GNR(G) -! correlation factor: increase fract-area of cloudy member under cloudy section of upper layer (FIG2) -! Note that limits to increase depend on fract of cloud area above and the layer being increased - - GCORR = min(1.d0 + CORRFAC*(1.d0/FIG2 - 1.d0), 1.d0/FIG2, 1.d0/FIG1) - -! enhance weighting for cloudy members below a cloud, reduce weighting below clear sky - FWTC(G,I) = GCORR * FWT(G,I) - FWTCC(G,I) = FWT(G,I) * (1.d0 - GCORR*FIG2)/(1.d0-FIG2) - enddo - FWTC(G,1) = 1.d0 - FIG1*GCORR - FWTCC(G,1) = 1.d0 - FIG1*(1.d0-GCORR*FIG2)/(1.d0-FIG2) - endif - enddo - - do I = 1,NICA - WTCOL = 1.d0 - ODCOL = 0.d0 -! for each ICA locate the members of each GROUP that contributes to it - II = I - do G = 1,NRG - IGNR(G) = mod(II-1, GNR(G)) + 1 - II = (II-1)/GNR(G) + 1 - enddo - do G = 1,NRG - IG1 = IGNR(G) ! working on MAX-GRP = G, member IG1 - L_CLR1 = GFNR(G, IG1) .gt. GCMX(G) ! member IG1 is clear - if (G .eq. NRG) then ! fix of indexing error in Cloud-J 7.3 did not affect results - L_CLR2 = .true. - else - IG2 = IGNR(G+1) ! member of MAX-GRP = G+1 for this ICA - L_CLR2 = GFNR(G+1,IG2) .gt. GCMX(G+1) ! member above (IG2) is clear - endif -! all of these combinations should preserve the total weighting for layer member IG1 - if (.not.L_CLR2) then -! upper layer GRP member IG2 is a cloud layer (maybe one of several) - if (.not.L_CLR1) then -! immediate GRP layer member IG1 is a cloudy one - GCOWT = FWTC(G,IG1) - else -! immediate layer GRP member IG1 is the clear one (if it exists) - GCOWT = FWTC(G,1) - endif - else -! upper layer GRP member IG2 is a clear layer - if (.not.L_CLR1) then -! immediate GRP layer member IG1 is a cloudy one - GCOWT = FWTCC(G,IG1) - else -! immediate layer GRP member IG1 is the clear one (if it exists) - GCOWT = FWTCC(G,1) - endif - endif - WTCOL = WTCOL*GCOWT - do L = GBOT(G),GTOP(G) - if (NCLDF(L) .ge. GFNR(G,IG1)) then - ODCOL = ODCOL + CLT(L) -! could store the full 2-D array of atmospheres if needed: TCOL(L,I) = CLT(L) - endif - enddo - enddo - WCOL(I) = WTCOL - OCOL(I) = ODCOL - enddo - - END SUBROUTINE ICA_ALL - - - -!----------------------------------------------------------------------- - SUBROUTINE ICA_III(CLF,CLT,LTOP,CBINU,ICAU, III, & - CLDCOR,NCLDF, GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA, TCOL) -!----------------------------------------------------------------------- -! see ICA_ALL, this subroutine picks out the ICA atmosphere #III -! and loads the REFF/WPs for a FAST_JX calculation. - - implicit none - - integer, intent(in) :: LTOP, CBINU, ICAU, NRG, NICA, III - integer, intent(in), dimension(LTOP) :: NCLDF - integer, intent(in), dimension(9) :: GBOT,GTOP,GLVL,GNR,GCMX - integer, intent(in), dimension(9,CBINU+1) :: GFNR - real*8, intent(in), dimension(LTOP) :: CLF,CLT - real*8, intent(in) :: CLDCOR - real*8, intent(out),dimension(LTOP) :: TCOL - - integer II, IG, G, L - -!----------------------------------------------------------------------- - - TCOL(:) = 0.d0 - II = max(1, min(NICA,III)) - do G = 1,NRG - IG = mod(II-1, GNR(G)) + 1 - II = (II-1)/GNR(G) + 1 - do L = GBOT(G),GTOP(G) - if (NCLDF(L) .ge. GFNR(G,IG)) then - TCOL(L) = CLT(L) - endif - enddo - enddo - - END SUBROUTINE ICA_III - - - -!----------------------------------------------------------------------- - SUBROUTINE ICA_QUD(WCOL,OCOL, LTOP,ICAU,NQDU,NICA, & - WTQCA, ISORT,NQ1,NQ2,NDXQS) -!----------------------------------------------------------------------- -!---Take the full set of ICAs and group into the NQD_ ranges of total OD -!---Create the Cumulative Prob Fn and select the mid-point ICA for each group -!---The Quad atmospheres have weights WTQCA -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: LTOP,ICAU,NQDU,NICA - real*8, intent(in), dimension(ICAU) :: WCOL,OCOL - - real*8, intent(out), dimension(NQDU) :: WTQCA - integer, intent(out), dimension(ICAU) :: ISORT - integer, intent(out), dimension(NQDU) :: NQ1,NQ2,NDXQS - - real*8, dimension(ICA_) :: OCDFS, OCOLS - integer I, II, J, L, N, N1, N2 - - real*8, parameter:: OD_QUAD(4) =[0.5d0, 4.0d0, 30.d0, 1.d9] -!----------------------------------------------------------------------- - ISORT(:) = 0 - WTQCA(:) = 0.d0 - NDXQS(:) = 0 - -!---sort all the Indep Column Atmos (ICAs) in order of increasing column OD -!--- ISORT is the key, giving the ICA number from smallest to largest column OD -!--- OCOLS is the column OD sorted = OCOL(ISORT(I)) -!--- OCDFS is the Cum.Prob.Fn. of the successive, sorted ICA - if (NICA .eq. 1) then - ISORT(1) = 1 - OCOLS(1) = OCOL(1) - else - call HEAPSORT_A (NICA,OCOL,OCOLS,ISORT,ICA_) - endif - OCDFS(1) = WCOL(ISORT(1)) - do I = 2,NICA - OCDFS(I) = OCDFS(I-1) + WCOL(ISORT(I)) - enddo -!---find beginning/end of quad range, note NQ2 < NQ1 means nothing in that range - I = 1 - do N = 1,NQDU - do while (OCOLS(I).lt.OD_QUAD(N) .and. I.le.NICA) - I = I+1 - enddo - NQ2(N) = I-1 - enddo - NQ1(1) = 1 - do N = 2,NQDU - NQ1(N) = NQ2(N-1) + 1 - enddo -!---define QCA wts from cum prob, pick middle ICA as representative - do N = 1,NQDU - N1 = NQ1(N) - N2 = NQ2(N) - if (N2 .ge. N1) then - NDXQS(N) = (N1+N2)/2 - if (N1 .gt. 1) then - WTQCA(N) = OCDFS(N2)-OCDFS(N1-1) - else - WTQCA(N) = OCDFS(N2) - endif - endif - enddo - - END SUBROUTINE ICA_QUD - - - -!----------------------------------------------------------------------- - SUBROUTINE ICA_DIRECT(U0,CLF,CLT,TAULC,TAUIC, LTOP,CBINU,ICAU, & - CLDCOR,NCLDF,GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA, & - WCOL,TCLD, TTCOL,SOLT,G0L,G0I,TAUG) -!----------------------------------------------------------------------- - implicit none - - real*8, intent(in) :: U0, G0L,G0I, CLDCOR - integer, intent(in) :: LTOP, ICAU, CBINU, NICA, NRG - real*8, intent(in), dimension(LTOP) :: CLF,CLT, TAULC,TAUIC - integer, intent(in), dimension(LTOP) :: NCLDF - integer, intent(in), dimension(9) :: GBOT,GTOP,GLVL,GNR,GCMX - integer, intent(in), dimension(9,CBINU+1) :: GFNR - real*8, intent(in), dimension(ICAU) :: WCOL - real*8, intent(out),dimension(LTOP+1) :: TCLD,TTCOL,SOLT,TAUG -!---Local variables - real*8 SOLZ, ATTEN, USZA, TAUALL - integer II, L - -!---if low sun angle, just use average cloud cover - if (U0 .lt. 0.1) then - do L = 1,LTOP - TCLD(L) = CLF(L) * CLT(L) - enddo - else - USZA = 1.d0/U0 - SOLT(:) = 0.d0 - TAUG(:) = 1.d0 - do L = 1,LTOP - TAUALL = TAUIC(L) + TAULC(L) - if (TAUALL .gt. 1.d-7) then -! calc g0 to get equivlent isootropic OD below - TAUG(L) = (G0L*TAULC(L) + G0I*TAUIC(L))/TAUALL - endif - enddo - do II = 1,NICA - call ICA_III(CLF,CLT,LTOP,CBIN_,ICA_, II, & - CLDCOR,NCLDF, GFNR,GCMX,GNR,GBOT,GTOP,GLVL,NRG,NICA, TTCOL) - SOLZ = 1.d0 - do L = LTOP,1,-1 - if (TTCOL(L) .gt. 1.d-9) then - SOLZ = SOLZ * exp(-USZA*(1.d0-TAUG(L))*TTCOL(L)) - endif - SOLT(L) = SOLT(L) + WCOL(II)*SOLZ - enddo - enddo -!---Derive effective cloud OD (w/asymm factor corr. 1-g) for avg over ICAs - TCLD(:) = 0.d0 - SOLT(LTOP+1) = 1.d0 - do L = LTOP,1,-1 - ATTEN = SOLT(L+1)/SOLT(L) - if (ATTEN .gt. 1.00000001d0) then - TCLD(L) = log(ATTEN)/(USZA*(1.d0-TAUG(L))) - endif - enddo - endif - - END SUBROUTINE ICA_DIRECT - - - -!----------------------------------------------------------------------- - SUBROUTINE HEAPSORT_A (N,A,AX,IX,ND) -!----------------------------------------------------------------------- -! classic heapsort, sorts real*8 array A(N) into ASCENDING order, -! places sorted array AX(N): AX(1) .le. AX(N) -! returns indexing IX(N) that records the location of A in sequence: -! A(IX(J)) ==> AX(J), s.t. IX(1) = orig location of smallest A -! and IX(N) = original loc. of largest A - implicit none - integer, intent(in) :: N, ND - real*8, dimension(ND),intent(in) :: A - real*8, dimension(ND),intent(out) :: AX - integer,dimension(ND),intent(out) :: IX - integer :: I,J,L,IR,IA - real*8 :: RA - - do I = 1,N - IX(I) = I - AX(I) = A(I) - enddo - L = N/2+1 - IR = N - 10 continue - if (L .gt. 1) then - L = L-1 - RA = AX(L) - IA = IX(L) - else - RA = AX(IR) - IA = IX(IR) - AX(IR) = AX(1) - IX(IR) = IX(1) - IR = IR-1 - if (IR .eq. 1) then - AX(1) = RA - IX(1) = IA - return - endif - endif - I = L - J = L+L - 20 continue - if (J .le. IR) then - if (J .lt. IR) then - if (AX(J) .lt. AX(J+1)) then - J = J+1 - endif - endif - if (RA .lt. AX(J)) then - AX(I) = AX(J) - IX(I) = IX(J) - I = J - J = J+J - else - J = IR+1 - endif - goto 20 - endif - AX(I) = RA - IX(I) = IA - goto 10 - - END SUBROUTINE HEAPSORT_A - - - END MODULE CLD_SUB_MOD diff --git a/test/monarch/cloudJ/fjx_cmn_mod.f90 b/test/monarch/cloudJ/fjx_cmn_mod.f90 deleted file mode 100644 index 4251111c3..000000000 --- a/test/monarch/cloudJ/fjx_cmn_mod.f90 +++ /dev/null @@ -1,242 +0,0 @@ -!------------------------------------------------------------------------------ -! 'cmn_fjx_mod.f90' for fast-JX code v 7.4+ (prather 8/15) -! note that module and file begin with 'cmn_" -! small changes: LREF=51 instead of hardwired, JVMAP replaces JMAP -! MASFAC param added, also cloud params - see below -!------------------------------------------------------------------------------ -! -! NB - ALL of these common variables are set paramters, -! They are NOT to be used as variables for a local solution -! Thus this entire set is 'in' only after it is initialized -!----------------------------------------------------------------------- -! -! !INTERFACE: -! - MODULE FJX_CMN_MOD - - implicit none - public - -!----------------------------------------------------------------------- - ! Turn on/off RRTM-G absorption cross sections - logical, parameter:: LRRTMG= .true. -!----------------------------------------------------------------------- - - ! JXL_: vertical(levels) dim for J-values computed within fast-JX - integer, parameter :: JXL_=100, JXL1_=JXL_+1 - ! JXL2_: 2*JXL_ + 2 = mx no.levels in basic FJX grid (mid-level) - integer, parameter :: JXL2_=2*JXL_+2 - ! W_ = dim = no. of Fast-J Wavelength bins: currenly only 18, TROP-ONLY is done by zeroing FL fluxes - integer, parameter :: W_=18 - ! S_ = dim = number of wavelength bins INLCUDING the Solar-J extensions (RRTMG value = 27) - integer, parameter :: S_=27 - ! X_ = dim = max no. of X-section data sets (input data) - integer, parameter :: X_=72 - ! A_ = dim = max no. of Aerosol Mie sets (input data) not including clouds and SSA - integer, parameter :: A_=40 - ! SSA_ = dim = no. of strat sulfate aerosol types (input data) - integer, parameter :: SSA_=18 - ! C_ = dim = no. of cld-data sets (input data) ///currently just 4xLiq and 2xIce - integer, parameter :: C_=6 - ! N_ = no. of levels in Mie scattering arrays - ! = 2*NC+1 = 4*(L_+1) + 1`+ 2*sum(JADDLV) - integer, parameter :: N_=601 - ! M_ = no. of Gauss points used, must = 4 in fast_JX (no option) - integer, parameter :: M_=4 - ! M2_ = 2*M_ = 8, replaces MFIT - integer, parameter :: M2_=2*M_ - -!----------------------------------------------------------------------- - ! 4 Gauss pts = 8-stream - real*8, DIMENSION(M_), parameter :: & - EMU = [.06943184420297d0, .33000947820757d0, & - .66999052179243d0, .93056815579703d0] - real*8, DIMENSION(M_), parameter :: & - WT = [.17392742256873d0, .32607257743127d0, & - .32607257743127d0, .17392742256873d0] -!----------------------------------------------------------------------- - - ! MASFAC: Conversion factor for pressure to column density - real*8, parameter :: & - MASFAC = 100.d0*6.022d+23/(28.97d0*9.8d0*10.d0) - ! ZZHT: scale height (cm) used above top of CTM ZHL(LPAR+1) - real*8, parameter :: ZZHT = 5.d5 - ! RAD: Radius of Earth (cm) - real*8, parameter :: RAD = 6375.d5 - ! ATAU: heating rate (factor increase from one layer to the next) - real*8, parameter :: ATAU = 1.120d0 - ! ATAU0: minimum heating rate - real*8, parameter :: ATAU0 = 0.010d0 - ! JTAUMX = maximum number of divisions (i.e., may not get to ATAUMN) - integer, parameter :: JTAUMX = (N_ - 4*JXL_)/2 - - character*25, dimension(8), parameter :: TITCLD = & - ['clear sky - no clouds ', & - 'avg cloud cover ', & - 'avg cloud cover^3/2 ', & - 'ICAs - avg direct beam ', & - 'ICAs - random N ICAs ', & - 'QCAs - midpt of bins ', & - 'QCAs - avg clouds in bins', & - 'ICAs - use all ICAs*** '] - -!---- Variables in file 'FJX_spec.dat' (RD_XXX) - ! WL: Centres of wavelength bins - 'effective wavelength' (nm) - real*8 WL(S_) - ! WBIN: Boundaries of wavelength bins (microns) - real*8 WBIN(S_+1) - ! FL: Solar flux incident on top of atmosphere (cm-2.s-1) - ! FW: Solar flux in W/m2 - ! FP: PAR quantum action spectrum - real*8 FL(S_),FW(S_),FP(S_) - ! QRAYL: Rayleigh parameters (effective cross-section) (cm2) - real*8 QRAYL(S_) - ! SJSUB: intended for breakdown of the super-bins (1:27) into smaller sub-bins. - real*8 SJSUB(S_,15) - real*8 QO2(W_,3) ! QO2: O2 cross-sections - real*8 QO3(W_,3) ! QO3: O3 cross-sections - real*8 Q1D(W_,3) ! Q1D: O3 => O(1D) quantum yield - - ! QQQ: Supplied cross sections in each wavelength bin (cm2) - real*8 QQQ(W_,3,X_) - ! TQQ: Temperature for supplied cross sections - real*8 TQQ(3,X_) - ! LQQ = 1, 2, or 3 to determine interpolation with T or P - integer LQQ(X_) - - ! TITLEJX: Title (short & long) for supplied cross sections, from 'FJX_spec.dat' - CHARACTER*6 TITLEJX(X_) - CHARACTER*16 TITLEJL(X_) - ! SQQ: Flag for supplied cross sections, from 'FJX_spec.dat' - CHARACTER*1 SQQ(X_) - -!---- Variables in file 'FJX_scat-aer.dat' (RD_MIE) - ! TITLAA: Aerosol Mie Titles - character*12 TITLAA(A_) - ! QAA: Aerosol scattering phase functions - real*8 QAA(5,A_) - ! WAA: 5 Wavelengths for the supplied phase functions - real*8 WAA(5,A_) - ! PAA: Phase function: first 8 terms of expansion - real*8 PAA(8,5,A_) - ! RAA: Effective radius associated with aerosol type - real*8 RAA(A_) - ! SAA: Single scattering albedo - real*8 SAA(5,A_) - ! DAA: density (g/cm^3) - real*8 DAA(A_) - ! NAA: Number of categories for scattering phase functions - integer NAA - -!---- Variables in file 'FJX_scat-cld.dat' (RD_CLD) - ! NCC: Number of categories for cloud scattering phase functions - integer NCC - ! TITLCC: Cloud type titles - character*12 TITLCC(C_) - ! RCC: Effective radius associated with cloud type - real*8 RCC(C_) - ! GCC: Effective geometric cross section - real*8 GCC(C_) - ! DCC: density (g/cm^3) - real*8 DCC(C_) - ! QCC: Cloud Q-ext - real*8 QCC(S_,C_) - ! WCC: Wavelengths for supplied phase functions - real*8 WCC(S_,C_) - ! SCC: Single scattering albedo - real*8 SCC(S_,C_) - ! PCC: Phase function: first 8 terms of expansion - real*8 PCC(8,S_,C_) - -!---- Variables in file 'FJX_scat-ssa.dat' (RD_SSA) - ! NSS: Number of categories for Strat Sulf Aerosol scattering phase functions - integer NSS - ! TITLSS: Cloud type titles - character*12 TITLSS(SSA_) - ! RSS: Effective radius associated with cloud type - real*8 RSS(SSA_) - ! GSS: Effective geometric cross section - real*8 GSS(SSA_) - ! DSS: density (g/cm^3) - real*8 DSS(SSA_) - ! TSS: temperature (K) - real*8 TSS(SSA_) - ! WSS: weight percent sulfuric acid (%) - real*8 WSS(SSA_) - ! QSS: Q-ext ----begin wavelength dependent quantities - real*8 QSS(S_,SSA_) - ! SSS: Single scattering albedo - real*8 SSS(S_,SSA_) - ! PSS: Phase function: first 8 terms of expansion - real*8 PSS(8,S_,SSA_) - -!---- Variables in file 'FJX_scat-UMa.dat' (RD_CLD) - ! WMM: U Michigan aerosol wavelengths - real*8 WMM(6) - ! UMAER: U Michigan aerosol data sets - real*8 UMAER(3,6,21,33) - -!---- Variables in file 'atmos_std.dat' (RD_PROF) - integer, parameter :: LREF=51 ! layer dim. in reference profiles - integer, parameter :: JREF=18 ! latitude dim. in reference profiles - -!----- T and O3, H2O, CH4, reference profiles added underscore _ because TREF used in RRTMG_SW - real*8, DIMENSION(LREF,JREF,12) :: T_REF, O_REF, H2O_REF, CH4_REF - integer NJX,NW1,NW2,NS1,NS2 - -!-----------------NEW for FJX72 parameters for cloud grid now here------ - integer, parameter :: & - LPAR= 57, LWEPAR=34 & !this can be set by CTM code - ,L_=LPAR, L1_=L_+1 & ! L_ = number of CTM layers - ,L2_=2*L_+2 & ! no. levels in the Fast-JX grid that - ! includes both layer edges and layer mid-points - ,JVL_=LPAR & ! vertical(levels) dim for J-values sent to CTM - ,JVN_=101 & ! max no. of J-values - ,AN_=25 ! # FJX aerosols in layer (needs NDX for each) - -!----------------------------------------------------------------------- - ! variables used to map fast-JX J's onto CTM J's -!----------------------------------------------------------------------- - real*8 JFACTA(JVN_) ! multiplication factor for fast-JX calculated J - integer JIND(JVN_) ! index arrays that map Jvalue(j) onto rates - integer NRATJ ! number of Photolysis reactions in CTM chemistry, NRATJ <= JVN_ - integer NWBIN ! used to shut off SFlux (and Fast-J calc) for strat wavelengths - ! only values that invoke action are 8 & 12 (mimic W_=8 or 12) - integer NSBIN ! likewise used to zero FL, if NSBIN = 18 then FL(19:27)=0.0 - - character*6 JVMAP(JVN_) !label of J-value used to match w/FJX J's - character*50 JLABEL(JVN_) ! label of J-value used in the chem model - -! Cloud Cover parameters -!----------------------------------------------------------------------- -! NB CBIN_ was set at 20, but with NRG=6 groups, 10 gives a more reasonable number of ICAs - integer, parameter :: CBIN_ = 10 ! # of quantized cloud fraction bins - integer, parameter :: ICA_ = 20000 ! Max # of indep colm atmospheres - integer, parameter :: NQD_ = 4 ! # of cloud fraction bins (4) - - real*8, parameter :: CPI = 3.141592653589793d0 - real*8, parameter :: C2PI = 2.d0*CPI - real*8, parameter :: CPI180 = CPI/180.d0 - real*8, parameter :: G0 = 9.80665d0 - real*8, parameter :: G100 = 100.d0/G0 -!-------data to set up the random number sequence for use in cloud-JX - integer, parameter :: NRAN_ = 10007 ! dimension for random number - real*4 RAN4(NRAN_) ! Random number set - -! Solar J parameters - for Cloud-J v7.4 just do one sub-bin per RRTMg superbin -!----------------------------------------------------------------------- - integer, parameter:: W_r = S_-W_ ! Cloud-J fix, W_r = 82 for RRTMg in rrsw_fasj_cmn.f90 - real*8, dimension(L1_,W_r) :: TAUG_RRTMG ! Cloud-J fix, is defined in rrsw_fasj_cmn.f90 - - integer, parameter, dimension(S_) :: NGC = & - [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, 1 ] -! actual RRMTMg values -! integer, parameter, dimension(S_) :: NGC = & -! [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, & -! 1, 1, 1, 1, 1, 1, 1, 5, 10, 2, & -! 10, 10, 8, 8, 12, 6, 12] - - - END MODULE FJX_CMN_MOD diff --git a/test/monarch/cloudJ/fjx_init_mod.f90 b/test/monarch/cloudJ/fjx_init_mod.f90 deleted file mode 100644 index f9d29d821..000000000 --- a/test/monarch/cloudJ/fjx_init_mod.f90 +++ /dev/null @@ -1,863 +0,0 @@ -!<<<<<<<<<<<<<<<<<>>>NEW v-7.4 added Solar-J bins, W_=18 is only option, use NWBIN to zero strat fluxes -!>>>>NEW v-7.3 expanded input, full names & notes -!>>>>NEW v-6.8 now allow 1 to 3 sets of X-sects for T or P -! LQQ = 1, 2, or 3 to determine interpolation with T or P -! IF the temperatures TQQQ are <0, then use as pressure interp (hPa) -! NB - the temperatures and pressures must be increasing -!----------------------------------------------------------------------- -! NAMFIL Name of spectral data file (JX_spec.dat) >> j2 for fast-J2 -! NUN Channel number for reading data file -! -! NJX Number of species to calculate J-values for -! NWWW Number of wavelength bins, from 1:NWWW -! WBIN Boundaries of wavelength bins -! WL Centres of wavelength bins - 'effective wavelength' -! FL Solar flux incident on top of atmosphere (cm-2.s-1) -! QRAYL Rayleigh parameters (effective cross-section) (cm2) -! QO2 O2 cross-sections -! QO3 O3 cross-sections -! Q1D O3 => O(1D) quantum yield -! TQQ Temperature for supplied cross sections -! QQQ Supplied cross sections in each wavelength bin (cm2) -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: NUN - character(*), intent(in) :: NAMFIL - integer I, J, JJ, K, IW, NQRD, LQ, NWWW, NSSS - character*120 TIT_SPEC, TIT_J1N - character*16 TIT_J1L - character*6 TIT_J1S,TIT_J2S - - TQQ(:,:) = 0.d0 - -!----------spectral data----set for new format data------------------ -! note that X_ = max # Xsects read in -! NJX = # fast-JX J-values derived from this (.le. X_) - if (W_ .ne. 18) then - call EXITC(' no. wavelengths wrong: W_ .ne. 18') - endif - - open (NUN,FILE=NAMFIL,status='old',form='formatted') - - read (NUN,'(a120)',err=4) TIT_SPEC - read (NUN,*,err=4) - read (NUN,'(i5,5x,i5)',err=4) NWWW, NSSS -!print - write(6,'(a120)') TIT_SPEC - write(6,'(a,2i4)') 'NWWW NSSS =', NWWW,NSSS - if (NWWW.gt.W_ .or. NSSS.gt.S_) then - call EXITC(' W_ or S_ not large enough') - endif - - NW1 = 1 - NW2 = NWWW - NS1=1 - NS2=NSSS - -!----w-params: 1=w-eff 2=w-bins, 3=solar(photons), 4=solar(W/m2), 4=Y-PAR, 5=Rayleigh, 6=SJ sub-bins - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - read (NUN,'(5x,6e10.3)',err=4) (WL(IW),IW=1,NSSS) - - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - read (NUN,'(5x,6e10.3)',err=4) (WBIN(IW),IW=1,NSSS) - - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - read (NUN,'(5x,6e10.3)',err=4) (FL(IW),IW=1,NSSS) - - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - read (NUN,'(5x,6e10.3)',err=4) (FW(IW),IW=1,NSSS) - - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - read (NUN,'(5x,6e10.3)',err=4) (FP(IW),IW=1,NSSS) - - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - read (NUN,'(5x,6e10.3)',err=4) (QRAYL(IW),IW=1,NSSS) - - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - do I = 1,NSSS - SJSUB(I, 1)= 1.0d0 - SJSUB(I, 2:15)=0.0d0 - enddo -! do I = NWWW,NSSS ! fraction of solar radiation for each sub-bin -! read (NUN,105,err=4) (SJSUB(I,IW),IW=1,15) -! write(6 ,105) (SJSUB(I,IW),IW=1,15) -! enddo -! 105 format((5x, 5(1x,f10.5))/(5x, 5(1x,f10.5))/(5x, 5(1x,f10.5))) - -!---Read O2 X-sects, O3 X-sects, O3=>O(1D) quant yields (each at 3 temps) -!---NB the O3 and q-O3-O1D are at different temperatures and cannot be combined - - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - read (NUN,'(a1,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - SQQ(1),TQQ(1,1), (QO2(IW,1),IW=1,NWWW) - read (NUN,'(a6)',err=4) TIT_J2S - if (TIT_J2s .ne. TIT_J1S) go to 4 - read (NUN,'(1x,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - TQQ(2,1), (QO2(IW,2),IW=1,NWWW) - read (NUN,'(a6)',err=4) TIT_J2S - if (TIT_J2s .ne. TIT_J1S) go to 4 - read (NUN,'(1x,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - TQQ(3,1), (QO2(IW,3),IW=1,NWWW) - TITLEJX(1) = TIT_J1S - TITLEJL(1) = TIT_J1L - LQQ(1) = 3 - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - read (NUN,'(a1,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - SQQ(2),TQQ(1,2), (QO3(IW,1),IW=1,NWWW) - read (NUN,'(a6)',err=4) TIT_J2S - if (TIT_J2s .ne. TIT_J1S) go to 4 - read (NUN,'(1x,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - TQQ(2,2), (QO3(IW,2),IW=1,NWWW) - read (NUN,'(a6)',err=4) TIT_J2S - if (TIT_J2s .ne. TIT_J1S) go to 4 - read (NUN,'(1x,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - TQQ(3,2), (QO3(IW,3),IW=1,NWWW) - TITLEJX(2) = TIT_J1S - TITLEJL(2) = TIT_J1L - LQQ(2) = 3 - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - read (NUN,'(a1,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - SQQ(3),TQQ(1,3), (Q1D(IW,1),IW=1,NWWW) - read (NUN,'(a6)',err=4) TIT_J2S - if (TIT_J2s .ne. TIT_J1S) go to 4 - read (NUN,'(1x,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - TQQ(2,3), (Q1D(IW,2),IW=1,NWWW) - read (NUN,'(a6)',err=4) TIT_J2S - if (TIT_J2s .ne. TIT_J1S) go to 4 - read (NUN,'(1x,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - TQQ(3,3), (Q1D(IW,3),IW=1,NWWW) - TITLEJX(3) = TIT_J1S - TITLEJL(3) = TIT_J1L - LQQ(3) = 3 - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - -!---Read remaining species: X-sections at 1-2-3 T_s -!---read in 1 to 3 X-sects per J-value (JJ) - JJ = 3 -!-- read new Xsection block - 3 continue - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - if (TIT_J1S .eq. 'endofJ') goto 1 -!---try to add a new Xsect - 2 continue - JJ = JJ+1 - LQ = 1 - if (JJ .gt. X_) call EXITC(' RD_XXX: X_ not large enough') - TITLEJX(JJ) = TIT_J1S - TITLEJL(JJ) = TIT_J1L - read (NUN,'(a1,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - SQQ(JJ),TQQ(LQ,JJ),(QQQ(IW,LQ,JJ),IW=1,NWWW) - LQQ(JJ) = LQ -!try to read a 2nd Temperature or Pressure - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - - if (TIT_J1S .eq. 'endofJ') goto 1 - if (TIT_J1S .eq. TITLEJX(JJ)) then - LQ = 2 - read (NUN,'(1x,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - TQQ(LQ,JJ),(QQQ(IW,LQ,JJ),IW=1,NWWW) - LQQ(JJ) = LQ -!try to read a 3rd Temperature or Pressure - read (NUN,'(a6,1x,a16,1x,a120)',err=4) TIT_J1S,TIT_J1L,TIT_J1N - write(6,'(1x,a6,1x,a16,a8,a120)') TIT_J1S,TIT_J1L,' notes:',TIT_J1N !print - if (TIT_J1S .eq. 'endofJ') goto 1 - if (TIT_J1S .eq. TITLEJX(JJ)) then - LQ = 3 - read (NUN,'(1x,f3.0,1x,6e10.3/5x,6e10.3/5x,6e10.3)',err=4) & - TQQ(LQ,JJ),(QQQ(IW,LQ,JJ),IW=1,NWWW) - LQQ(JJ) = LQ - else - goto 2 - endif - else - goto 2 - endif - goto 3 - 4 continue - call EXITC(' RD_XXX: error in read') - 1 continue - NJX = JJ - -!---read in complete, process Xsects for reduced wavelengths (Trop-Only) -!--- possibly also for WACCM >200nm-only version. -!---TROP-ONLY (W_ = 12 or 8) then drop the strat Xsects (labeled 'x') - - if (NWBIN .eq. 12 .or. NWBIN .eq. 8) then - write(6,'(a)') & - ' >>>TROP-ONLY reduced wavelengths, drop strat X-sects' - JJ = 3 - do J = 4,NJX - if (SQQ(J) .ne. 'x') then -!---remove Xsects with 'x' label - JJ = JJ+1 - if (JJ .lt. J) then - TITLEJX(JJ) = TITLEJX(J) - LQQ(JJ) = LQQ(J) - SQQ(JJ) = SQQ(J) - do LQ = 1,LQQ(J) - TQQ(LQ,JJ) = TQQ(LQ,J) - do IW = 1,NWWW - QQQ(IW,LQ,JJ) = QQQ(IW,LQ,J) - enddo - enddo - endif - endif - enddo - NJX = JJ - endif - -!print----- - do J = 1,NJX - write(6,'(a8,i5,2x,a6,2x,a16,2x,a1,i3,2x,3f6.1)') & - ' X-sects',J,TITLEJX(J),TITLEJL(J),SQQ(J),LQQ(J),(TQQ(I,J),I=1,LQQ(J)) - enddo - -!---need to check that TQQ (= T(K) or p(hPa)) is monotonically increasing: - do J = 1,NJX - if ((LQQ(J).eq.3) .and. (TQQ(2,J).ge.TQQ(3,J))) then - call EXITC ('TQQ out of order') - endif - if ((LQQ(J).eq.2) .and. (TQQ(1,J).ge.TQQ(2,J))) then - call EXITC ('TQQ out of order') - endif - enddo - -!---zero strat SFluxes for TROP-ONLY (NWBIN = 12 or 8) - if (NWBIN .eq. 12) then - do IW = 1,4 - FL(IW) = 0.d0 - enddo - do IW = 9,10 - FL(IW) = 0.d0 - enddo - endif - if (NWBIN .eq. 8) then - do IW = 1,4 - FL(IW) = 0.d0 - enddo - FL(5) = FL(5) * 2.d0 - do IW = 6,11 - FL(IW) = 0.d0 - enddo - endif - if (NWBIN.eq.12 .or. NWBIN.eq.8) then - write(6,'(a)') 'Solar fluxes and Xsects for strat are dropped:' - write(6,'(i5,0p,f8.1,1p,e10.3)') (IW,WL(IW),FL(IW), IW=1,NWWW) - endif - if (NSBIN .eq. 18) then - do IW = 19,27 - FL(IW) = 0.d0 - enddo - write(6,'(a)') 'Solar fluxes > 778 nm are dropped' - endif - - close(NUN) - - END SUBROUTINE RD_XXX - - -!----------------------------------------------------------------------- - subroutine RD_CLD(NUN,NAMFIL) -!----------------------------------------------------------------------- -!-------aerosols/cloud scattering data set for fast-JX ver 7.4 -!----------------------------------------------------------------------- -! NAMFIL Name of scattering data file (e.g., FJX_scat-cld.dat) -! NUN Channel number for reading data file -! NCC Number of categories for cloud scattering phase functions -! QCC Cloud scattering phase functions -! WCC 5 Wavelengths for supplied phase functions -! PCC Phase function: first 8 terms of expansion -! RCC Effective radius associated with cloud type -! SCC Single scattering albedo -! DCC density (g/cm^3) -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: NUN - character(*), intent(in) :: NAMFIL - - integer I, J, K, JCC - character*120 TITLE0 - real*8 WCCJ,RCCJ,GCCJ, XNDR,XNDI - - open (NUN,FILE=NAMFIL,status='old',form='formatted',err=4) - - read (NUN,'(a120)',err=4) TITLE0 - write(6,'(a120)') TITLE0 !print---- - read (NUN,'(i4)') NCC - read (NUN,*) - write(6,'(i6,a)') NCC, ' types of clouds' !print---- - - do K = 1,NCC - read(NUN,'(4x,2f6.4,1x,a12)') DCC(K),RCC(K),TITLCC(K) - write(6,'(i4,1x,a12,2f10.4)') K,TITLCC(K),RCC(K),DCC(K) - enddo - - do J = 12,S_ - read (NUN,*) - do K = 1,NCC - read (NUN,'(i2,1x,3f5.3,f6.3,e8.1,f6.3,f8.5,7f6.3)',err=4) & - JCC,WCC(J,K),RCCJ,GCCJ,XNDR,XNDI,QCC(J,K),SCC(J,K),(PCC(I,J,K),I=2,8) - PCC(1,J,K) = 1.d0 - enddo - enddo - -! reproduce all cloud data for w < 295 nm from J=12 (= 295 nm), OK since trop clouds. - do K = 1,NCC - do J = 1,11 - WCC(J,K) = WCC(12,K) - QCC(J,K) = QCC(12,K) - SCC(J,K) = SCC(12,K) - do I = 1,8 - PCC(I,J,K) = PCC(I,12,K) - enddo - enddo - enddo - - goto 2 - - 4 continue - call EXITC(' RD_CLD: error in read') - - 2 continue - close(NUN) - - write(6,'(a,2f9.5,i5)') ' ATAU/ATAU0/JMX',ATAU,ATAU0,JTAUMX !print---- - - END SUBROUTINE RD_CLD - - -!----------------------------------------------------------------------- - subroutine RD_SSA(NUN,NAMFIL) -!----------------------------------------------------------------------- -!-------aerosols/cloud scattering data set for fast-JX ver 7.4 -!----------------------------------------------------------------------- -! NAMFIL Name of scattering data file (e.g., FJX_scat-ssa.dat) -! NUN Channel number for reading data file -! NSS Number of categories for cloud scattering phase functions -! QSS Cloud scattering phase functions -! WSS 5 Wavelengths for supplied phase functions -! PSS Phase function: first 8 terms of expansion -! RSS Effective radius associated with cloud type: Integ(r^3 dr)/Integ(r^2 dr) -! GSS Effective geometric cross section: Integ(pi r^2 dr) -! SSS Single scattering albedo -! DSS density (g/cm^3) -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: NUN - character(*), intent(in) :: NAMFIL - - integer I, J, JSS, K, JCC - character*120 TITLE0 - real*8 WJSS,XNDR,XNDI - - open (NUN,FILE=NAMFIL,status='old',form='formatted',err=4) - - read (NUN,'(a120)',err=4) TITLE0 - write(6,'(a120)') TITLE0 !print---- - read (NUN,*) - read (NUN,'(i4)') NSS - read (NUN,*) - write(6,'(i6,a)') NSS, ' types of strat sulf aerosols' !print---- - - do K = 1,NSS - read (NUN,'(a12,5f8.2)') & - TITLSS(K),RSS(K),GSS(K),DSS(K),TSS(K),WSS(K) - write(6,'(i4,1x,a12,2f10.4,2f8.1)') K,TITLSS(K),RSS(K),DSS(K),TSS(K),WSS(K) - - do J = 5,S_ - read(NUN,'(i2,2f8.4,e8.1,2f8.5,7f6.3)') & - JSS,WJSS,XNDR,XNDI,QSS(J,K),SSS(J,K),(PSS(I,J,K), I=2,8) - PSS(1,J,K) = 1.d0 - enddo - enddo - -! reproduce all SSA data for J=1:4 with J=5 - do K = 1,NSS - do J = 1,4 - QSS(J,K) = QSS(5,K) - SSS(J,K) = SSS(5,K) - do I = 1,8 - PSS(I,J,K) = PSS(I,5,K) - enddo - enddo - enddo - - goto 2 - - 4 continue - call EXITC(' RD_SSA: error in read') - - 2 continue - close(NUN) - - END SUBROUTINE RD_SSA - - -!----------------------------------------------------------------------- - subroutine RD_MIE(NUN,NAMFIL) -!----------------------------------------------------------------------- -!-------aerosols scattering data set for fast-JX ver 7.3+ -!----------------------------------------------------------------------- -! NAMFIL Name of scattering data file (e.g., FJX_scat.dat) -! NUN Channel number for reading data file -! NAA Number of categories for scattering phase functions -! QAA Aerosol scattering phase functions -! WAA 5 Wavelengths for the supplied phase functions -! PAA Phase function: first 8 terms of expansion -! RAA Effective radius associated with aerosol type -! SAA Single scattering albedo -! DAA density (g/cm^3) -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: NUN - character(*), intent(in) :: NAMFIL - - integer I, J, K , JAA - character*120 TITLE0 -! character*12 TITLAA(A_) ! TITLAA: Title for scattering data NEEDS to be in COMMON - Character*12 TITLAAJ - real*8 RAAJ, DAAJ - - open (NUN,FILE=NAMFIL,status='old',form='formatted',err=4) - - read (NUN,'(a120)',err=4) TITLE0 -!print---- - write(6,'(a120)') TITLE0 - read (NUN,*) - read (NUN,*) - do J = 1,A_ - read (NUN,'(i4,1x,a12,1x,2f6.3,1x,a120)',err=4) & - JAA,TITLAAJ,RAAJ,DAAJ,TITLE0 - if (JAA.gt.0) then - TITLAA(J) = TITLAAJ - RAA(J) = RAAJ - DAA(J) = DAAJ - do K = 1,5 - read (NUN,'(f4.0,f7.4,f7.4,7f6.3)',err=4) & - WAA(K,J),QAA(K,J),SAA(K,J),(PAA(I,K,J),I=2,8) - PAA(1,K,J) = 1.d0 - enddo - NAA = J -!print---- - write(6,'(i5,1x,a12,1x,7f7.3,1x,a80)') & - J,TITLAAJ,RAAJ,DAAJ,(QAA(K,J),K=1,5),TITLE0 - else - goto 2 - endif - enddo - goto 2 - - 4 continue - call EXITC(' RD_MIE: error in read') - 2 continue - close(NUN) - - END SUBROUTINE RD_MIE - - -!----------------------------------------------------------------------- - subroutine RD_UM(NUN,NAMFIL) -!----------------------------------------------------------------------- -!-------UMich aerosol optical data for fast-JX (ver 6.1+) -!----------------------------------------------------------------------- -! NAMFIL Name of scattering data file (e.g., FJX_scat.dat) -! NUN Channel number for reading data file -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: NUN - character(*), intent(in) :: NAMFIL - - integer I, J, K, L - character*120 TITLE0 - character*20 TITLUM(33) ! TITLUM: Title for U Michigan aerosol data set - - open (NUN,FILE=NAMFIL,status='old',form='formatted',err=4) - - read (NUN,'(a)',err=4) TITLE0 -!print---- - write(6,'(a120)') TITLE0 - read(NUN,'(5x,10f5.0)',err=4) WMM - -!---33 Different UM Aerosol Types: SULF, SS-1,-2,-3,-4, DD-1,-2,-3,-4, -!--- FF00(0%BC), FF02, ...FF14(14%BC), BB00, BB02, ...BB30(30%BC) - do L=1,33 - read(NUN,'(a4)',err=4) TITLUM(L) -!---21 Rel Hum: K=1=0%, =2=5%, ... =20=95%, =21=99% - do K=1,21 -!---6 wavelengths: J=1=200nm, 2=300nm, 3=400nm, (4'=550nm) 5=600nm, 6=1000nm -!---3 optic vars: I=1=SSAlbedo, =2=g, =3=k-ext - read(NUN,'(18f9.5)',err=4) ((UMAER(I,J,K,L),I=1,3),J=1,6) - enddo - enddo - - close(NUN) - -! collapse UM wavelengths, drop 550 nm - WMM(4) = WMM(5) - WMM(5) = WMM(6) - do L=1,33 - do K=1,21 - do I=1,3 - UMAER(I,4,K,L) = UMAER(I,5,K,L) - UMAER(I,5,K,L) = UMAER(I,6,K,L) - enddo - enddo - enddo - -!print---- - write(6,'(7(i5,1x,a4))') (L,TITLUM(L), L=1,33) - goto 2 - 4 continue - call EXITC(' RD_UM: error in read') - 2 continue - - END SUBROUTINE RD_UM - - -!----------------------------------------------------------------------- - subroutine RD_PROF(NJ2,NAMFIL) -!----------------------------------------------------------------------- -! Routine to input T and O3 reference profiles 'atmos_std.dat' -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: NJ2 - character(*), intent(in) :: NAMFIL -! - integer IA, I, M, L, LAT, MON, NTLATS, NTMONS, N216 - real*8 OFAC, OFAK - - character*78 TITLE0 -! - open (NJ2,file=NAMFIL,status='old',form='formatted') - read (NJ2,'(A)') TITLE0 - read (NJ2,'(2I5)') NTLATS,NTMONS -! write(6,'(1X,A)') TITLE0 - write(6,1000) NTLATS,NTMONS - N216 = min(216, NTLATS*NTMONS) - do IA = 1,N216 - read (NJ2,'(1X,I3,3X,I2)') LAT, MON - M = min(12, max(1, MON)) - L = min(18, max(1, (LAT+95)/10)) - read (NJ2,'(3X,11F7.1)') (T_REF(I,L,M), I=1,41) - read (NJ2,'(3X,11F7.4)') (O_REF(I,L,M), I=1,31) - enddo - close (NJ2) - -! Extend climatology to 100 km - OFAC = exp(-2.d5/5.d5) - do I = 32,LREF - OFAK = OFAC**(I-31) - do M = 1,NTMONS - do L = 1,NTLATS - O_REF(I,L,M) = O_REF(31,L,M)*OFAK - enddo - enddo - enddo - do L = 1,NTLATS - do M = 1,NTMONS - do I = 42,LREF - T_REF(I,L,M) = T_REF(41,L,M) - enddo - enddo - enddo - - 1000 format(1x,'std atmos profiles: T,O3',i3,' lat x ',i2,' mon') - - END SUBROUTINE RD_PROF - - -!----------------------------------------------------------------------- - subroutine RD_TRPROF(NJ2,NAMFIL) -!----------------------------------------------------------------------- -! Routine to input H2O and CH4 reference profiles 'atmos_h2och4.dat' -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: NJ2 - character(*), intent(in) :: NAMFIL -! - integer IA, I, M, L, LAT, MON, NTLATS, NTMONS, N216 - - character*78 TITLE0 -! - open (NJ2,file=NAMFIL,status='old',form='formatted') - read (NJ2,'(A)') TITLE0 - read (NJ2,'(2I5)') NTLATS,NTMONS -! write(6,'(1X,A)') TITLE0 - write(6,1000) NTLATS,NTMONS - N216 = min(216, NTLATS*NTMONS) - do IA = 1,N216 - read (NJ2,'(1X,I3,3X,I2)') LAT, MON -! write(6,'(1X,I3,3X,I2)') LAT, MON - M = min(12, max(1, MON)) - L = min(18, max(1, (LAT+95)/10)) - read (NJ2,'(3X,11E9.2)') (H2O_REF(I,L,M), I=1,31) - read (NJ2,'(3X,11F9.2)') (CH4_REF(I,L,M), I=1,31) -! write (6,'(3X,11E9.2)') (H2O_REF(I,L,M), I=1,31) -! write(6,'(3X,11F9.2)') (CH4REF(I,L,M), I=1,31) - enddo - close (NJ2) - -! Extend climatology to 100 km - do L = 1,NTLATS - do M = 1,NTMONS - do I = 32,LREF - H2O_REF(I,L,M) = H2O_REF(31,L,M) - CH4_REF(I,L,M) = CH4_REF(31,L,M) - enddo - enddo - enddo - - 1000 format(1x,'std atmos profiles: H2O,CH4',i3,' lat x ',i2,' mon') - - END SUBROUTINE RD_TRPROF - - -!----------------------------------------------------------------------- - subroutine RD_JS_JX(NUNIT,NAMFIL,TITLEJX,NJX) -!----------------------------------------------------------------------- -! Read 'FJX_j2j.dat' that defines mapping of fast-JX J's (TITLEJX(1:NJX)) -! onto the CTM reactions: react# JJ, named T_REACT, uses fast-JX's JVMAP -! including scaling factor JFACTA -!----------------------------------------------------------------------- -!---mapping variables stored in block /jvchem/JFACTA,JIND,NRATJ,JLABEL,JVMAP -! real*8 JFACTA(JVN_) integer JIND(JVN_), NRATJ -! character*50 JLABEL(JVN_) character*6 JVMAP(JVN_) -! JFACTA multiplication factor for fast-JX calculated J -! JLABEL label(*50) of J-value used in the main chem model -! JVMAP label(*6) of J-value used to match with fast-JX J's -! NRATJ number of Photolysis reactions in CTM chemistry, derived here -! NRATJ must be .le. JVN_ -!----------------------------------------------------------------------- - implicit none -! - integer, intent(in) :: NUNIT, NJX - character(*), intent(in) :: NAMFIL - character*6, intent(in),dimension(NJX) :: TITLEJX - integer J,JJ,K - character*120 CLINE - character*50 T_REACT - character*6 T_FJX - real*8 F_FJX - -! Read the FJX_j2j.dat file to map model specific J's onto fast-JX J's -! The chemistry code title describes fully the reaction (a50) -! Blank (unfilled) chemistry J's are unmapped -! The number NRATJ is the last JJ readin that is .le. JVN -! include fractional quantum yield for the fast-JX J's - - JLABEL(:) = '------' - JVMAP(:) = '------' - JFACTA(:) = 0.d0 - - open (NUNIT,file=NAMFIL,status='old',form='formatted') - - read (NUNIT,'(a)') CLINE - write(6,'(a)') CLINE - do J = 1,JVN_ - read (NUNIT,'(i4,1x,a50,4x,f5.3,2x,a6)') JJ,T_REACT,F_FJX,T_FJX - if (JJ .gt. JVN_) exit - JLABEL(JJ) = T_REACT - JFACTA(JJ) = F_FJX - JVMAP(JJ) = T_FJX - NRATJ = JJ - enddo - - close(NUNIT) - -!---Zero / Set index arrays that map Jvalue(j) onto rates - do K = 1,NRATJ - JIND(K) = 0 - do J = 1,NJX - if (JVMAP(K) .eq. TITLEJX(J)) then - JIND(K) = J - endif - enddo - enddo - - write(6,'(a,i4,a)')' Photochemistry Scheme with',NRATJ,' J-values' - do K=1,NRATJ - if (JVMAP(K) .ne. '------' ) then - J = JIND(K) - if (J.eq.0) then - write(6,'(i5,a50,f6.3,a,1x,a6)') K,JLABEL(K),JFACTA(K), & - ' no mapping onto fast-JX',JVMAP(K) - else - write(6,'(i5,a50,f6.3,a,i4,1x,a6)') K,JLABEL(K),JFACTA(K), & - ' mapped to FJX:',J,TITLEJX(J) - endif - endif - enddo - - END SUBROUTINE RD_JS_JX - - -!----------------------------------------------------------------------- - SUBROUTINE RANSET (ND,RAN4L,ISTART) -!----------------------------------------------------------------------- -! generates a sequence of real*4 pseudo-random numbers RAN4L(1:ND) -! program RAN3 from Press, based on Knuth - implicit none - integer, parameter :: MBIG=1000000000 - integer, parameter :: MSEED=161803398 - integer, parameter :: MZ=0 - real*4 , parameter :: FAC=1.e-9 - integer,intent(in) :: ND - real*4, intent(out) :: RAN4L(ND) - integer,intent(inout) :: ISTART - integer :: MA(55),MJ,MK,I,II,J,K,INEXT,INEXTP -!---initialization and/or fix of ISEED < 0 - MJ = MSEED - abs(ISTART) - MJ = mod(MJ,MBIG) - MA(55) = MJ - MK = 1 - do I=1,54 - II = mod(21*I,55) - MA(II) = MK - MK = MJ-MK - if (MK.lt.MZ) then - MK=MK+MBIG - endif - MJ = MA(II) - enddo - do K=1,4 - do I=1,55 - MA(I)=MA(I)-MA(1+MOD(I+30,55)) - if (MA(I) .lt. MZ) then - MA(I) = MA(I)+MBIG - endif - enddo - enddo - INEXT = 0 - INEXTP = 31 - ISTART = 1 -!---generate next ND pseudo-random numbers - do J=1,ND - INEXT = mod(INEXT,55) +1 - INEXTP = mod(INEXTP,55) +1 - MJ = MA(INEXT) - MA(INEXTP) - if (MJ .lt. MZ) then - MJ=MJ+MBIG - endif - MA(INEXT) = MJ - RAN4L(J) = MJ*FAC - enddo - - END SUBROUTINE RANSET - - - END MODULE FJX_INIT_MOD diff --git a/test/monarch/cloudJ/fjx_sub_mod.f90 b/test/monarch/cloudJ/fjx_sub_mod.f90 deleted file mode 100644 index 0d23b7a36..000000000 --- a/test/monarch/cloudJ/fjx_sub_mod.f90 +++ /dev/null @@ -1,2452 +0,0 @@ -!------------------------------------------------------------------------------ -! 'fjx_sub_mod.F90' for fast-JX code v7.4d (11/2016) -!------------------------------------------------------------------------------ -! -! !MODULE: FJX -! -! !DESCRIPTION: JX version 7.4 (08/2015) consistent with 7.1 data and results -! variables in call to PHOTO_JX are same as in 7.1, -! but a logical(out) LDARK is added to to count the number of J calcs -! Works new ver 7.3 tfor cloud-J -! + data sets for spectra, clouds and SS aerosols, new aerosol format -! Extended to v7.4 to allow for Solar-J -! v7.4d fixed the deposition of sunlight for SAZ>90, J's are unchanged. - -! !INTERFACE: -! - MODULE FJX_SUB_MOD -! -! !USES: -! - USE FJX_CMN_MOD - -! USE RRSW_FASTJ_CMN - - IMPLICIT NONE -! -! !PUBLIC SUBROUTINES: -! - PUBLIC :: SOLAR_JX, ACLIM_FJX, JP_ATM0, PHOTO_JX, EXITC - - - CONTAINS - -!----------------------------------------------------------------------- - subroutine SOLAR_JX(GMTIME,NDAY,YGRDJ,XGRDI, SZA,COSSZA,SOLFX) -!----------------------------------------------------------------------- -! GMTIME = UT for when J-values are wanted -! (for implicit solver this is at the end of the time step) -! NDAY = integer day of the year (used for solar lat and declin) -! YGRDJ = laitude (radians) for grid (I,J) -! XGDRI = longitude (radians) for grid (I,J) -! -! SZA = solar zenith angle in degrees -! COSSZA = U0 = cos(SZA) -!----------------------------------------------------------------------- - implicit none - - real*8, intent(in) :: GMTIME,YGRDJ,XGRDI - integer, intent(in) :: NDAY - real*8, intent(out) :: SZA,COSSZA,SOLFX -! - real*8 LOCT - real*8 SINDEC, SOLDEK, COSDEC, SINLAT, SOLLAT, COSLAT, COSZ -! - SINDEC = 0.3978d0*sin(0.9863d0*(dble(NDAY)-80.d0)*CPI180) - SOLDEK = asin(SINDEC) - COSDEC = cos(SOLDEK) - SINLAT = sin(YGRDJ) - SOLLAT = asin(SINLAT) - COSLAT = cos(SOLLAT) -! - LOCT = (((GMTIME)*15.d0)-180.d0)*CPI180 + XGRDI - COSSZA = COSDEC*COSLAT*cos(LOCT) + SINDEC*SINLAT - SZA = acos(COSSZA)/CPI180 -! - SOLFX = 1.d0-(0.034d0*cos(dble(NDAY-186)*C2PI/365.d0)) -! - END SUBROUTINE SOLAR_JX - - -!----------------------------------------------------------------------- - subroutine ACLIM_FJX (YLATD,MONTH,PPP, TTT,OOO, L1U) -!----------------------------------------------------------------------- -! Load fast-JX climatology for latitude & month given pressure grid -!----------------------------------------------------------------------- - implicit none - - real*8, intent(in) :: YLATD - integer, intent(in) :: MONTH, L1U - real*8, intent(in), dimension(L1U+1) :: PPP - real*8, intent(out), dimension(L1U) :: TTT,OOO - real*8, dimension(LREF) :: OREF2,TREF2,HREF2,CREF2 - real*8, dimension(LREF+1) :: PSTD - integer K, L, M, N - real*8 DDDL,DLOGP,F0,T0,H0,C0,PB,PC,XC - -! needed for RRTMG calculating taug_rrtmg -! colh2o(:)=0.d0 -! colco2(:)=0.d0 -! colo3(:)=0.d0 -! colch4(:)=0.d0 -! coldry(:)=0.d0 -! colo2(:)=0.d0 -! nlayers= L1U - -! Select appropriate month - M = max(1,min(12,MONTH)) -! Select appropriate latitudinal profiles - N = max(1, min(18, (int(YLATD+99)/10 ))) - do K = 1,LREF - OREF2(K) = O_REF(K,N,M) - TREF2(K) = T_REF(K,N,M) - HREF2(K)= H2O_REF(K,N,M) - CREF2(K)= CH4_REF(K,N,M) - enddo - -! Apportion O3 and T on supplied climatology z levels onto CTM levels +1 -! with mass (pressure) weighting, assuming constant mixing ratio and -! temperature half a layer on either side of the point supplied. -! PPP(L=1:L1_)=edge-pressure of CTM layer, PPP(L1_+1)=0 (top-of-atmos) -! Mass factor - delta-Pressure (mbars) to delta-Column (molecules.cm-2) -! MASFAC = 100.d0*6.022d+23/(28.97d0*9.8d0*10.d0) - -! Set up pressure levels for O3/T climatology - assume that value -! given for each 2 km z* level applies from 1 km below to 1 km above, -! so select pressures at these boundaries. Surface level values at -! 1000 mb are assumed to extend down to the actual PSURF (if > 1000) - PSTD(1) = max(PPP(1),1000.d0) - PSTD(2) = 1000.d0 * 10.d0**(-1.d0/16.d0) - DLOGP = 10.d0**(-2.d0/16.d0) - do K = 3,LREF - PSTD(K) = PSTD(K-1)*DLOGP - enddo - PSTD(LREF+1) = 0.d0 - do L = 1,L1U - F0 = 0.d0 - T0 = 0.d0 - H0= 0.d0 - C0= 0.d0 - do K = 1,LREF - PC = min(PPP(L),PSTD(K)) - PB = max(PPP(L+1),PSTD(K+1)) - if (PC .gt. PB) then - XC = (PC-PB)/(PPP(L)-PPP(L+1)) - F0 = F0 + OREF2(K)*XC - T0 = T0 + TREF2(K)*XC - H0 = H0 + HREF2(K)*XC - C0 = C0 + CREF2(K)*XC - endif - enddo - TTT(L) = T0 - DDDL = (PPP(L)-PPP(L+1))*MASFAC !molecules/cm2 - OOO(L) = F0*1.d-6*DDDL !F0 vmr mole/mole in ppm -! colh2o(L) = H0*(28.97/18)*DDDL !note H0=H2o in kg/kg -! colco2(L) = 355.d0* 1.d-6 *DDDL !CO2 -! colo3(L)= OOO(L) -! colch4(L) = C0* 1.d-9 *DDDL !CO=CH4 vmr in ppb -! coldry(L)= DDDL - colh2o(L) -! colo2(L)= 0.20948d0*DDDL - enddo - - END SUBROUTINE ACLIM_FJX - - -!<<<<<<<<<<<<<<<<<<>>R-effective determined by main code, not FJX -! REFF determined by user - some recommendations below (from Neu & Prather) -! REFFI is function of ice water content IWC (g/m3, 0.0001 to 0.1) -! IWC = IWP / delta-Z (of layer in m, approx OK) -! prefer Heymsfield++ 2003 JAM, log-log fit ext(/m) vs. IWC, Fig B1a, p.1389 -! EXT (/m) = 1.7e-3 * (IWC/0.1)**0.77 -! REFFI = 164. * IWC**0.23 (33 microns at 0.001 --- 164 at 1.0) -! REFFL is a simple function of pressure (PCLD): -! FACTOR = (PCLD - 610.) / 200. -! FACTOR = min(1.0, max(0.0, FACTOR)) -! REFFL = 9.60*FACTOR + 12.68*(1.-FACTOR) -!>>>indices for cloud scattering determined by FJX core, not main code. -! ice clouds pick heagonal or irregular: -! NDXI = 6 ! ice hexag (cold) -! if (TCLD .ge. 233.15) then -! NDXI = 7 ! ice irreg -! endif -! liquid clouds scaled to R-eff 3 - 6 - 12 - 20 microns: -! NDXC = 1 -! do I=2,4 -! if (REFFL .gt. 0.5*(RCC(I-1)+RCC(I))) then -! NDXC = I -! endif -! enddo - -!----------------------------------------------------------------------- - SUBROUTINE PHOTO_JX (U0,SZA,REFLB,SOLF, LPRTJ, PPP,ZZZ,TTT,DDD, & - RRR,OOO, LWP,IWP,REFFL,REFFI, & - AERSP,NDXAER, L1U,ANU, VALJXX,NJXU, LDARK) -!----------------------------------------------------------------------- -! -! PHOTO_JX is the gateway to fast-JX calculations: -! calc J's for a single column atmosphere (aka Indep Colm Atmos or ICA) -! needs P, T, O3, clds, aersls; adds top-of-atmos layer from climatology -! needs day-fo-year for sun distance, SZA (not lat or long) -!----------------------------------------------------------------------- - implicit none - - real*8, parameter:: HeatFac_ = 86400.d0*9.80616d0/1.00464d5 - -!---calling sequence variables - integer, intent(in) :: L1U,ANU,NJXU - real*8, intent(in) :: U0,SZA,REFLB,SOLF - logical, intent(in) :: LPRTJ - real*8, intent(in), dimension(L1U+1) :: PPP,ZZZ - real*8, intent(in), dimension(L1U ) :: TTT,DDD,RRR,OOO, & - LWP,IWP,REFFL,REFFI - real*8, intent(in), dimension(L1U,ANU):: AERSP - integer, intent(in), dimension(L1U,ANU):: NDXAER - -! reports out the JX J-values, upper level program converts to CTM chemistry J's - real*8, intent(out), dimension(L1U-1,NJXU):: VALJXX - logical, intent(out) :: LDARK - -!----------------------------------------------------------------------- -!--------key LOCAL atmospheric data needed to solve plane-parallel J---- -!-----these are dimensioned JXL_, and must have JXL_ .ge. L_ - real*8, dimension(JXL1_+1) :: TTJ,DDJ,OOJ,ZZJ - real*8, dimension(JXL1_+1) :: PPJ,RELH - integer,dimension(JXL2_+1) :: JXTRA -! - real*8, dimension(W_+W_r) :: FJTOP,FJBOT,FSBOT,FLXD0,RFL - real*8, dimension(JXL_,W_+W_r) :: AVGF, FJFLX - real*8, dimension(JXL1_,W_+W_r) :: DTAUX, FLXD - real*8, dimension(8,JXL1_,W_+W_r) :: POMEGAX -! - real*8, dimension(JXL1_) :: DTAU600 - real*8, dimension(8,JXL1_) :: POMG600 - real*8, dimension(S_,JXL1_) :: FFX - real*8, dimension(S_, 8) :: FFXNET - real*8, dimension(8) :: FFXNETS -!---flux/heating arrays (along with FJFLX,FLXD,FLXD0) - real*8 FLXJ(JXL1_),FFX0,FXBOT,FABOT - real*8 ODABS,ODRAY,ODI,ODL - real*8 RFLECT,FREFS,FREFL,FREFI, FREF1,FREF2,PREF1,PREF2 - real*8 AMF2(2*JXL1_+1,2*JXL1_+1) -!------------key SCATTERING arrays for clouds+aerosols------------------ - real*8 QQEXT(S_),SSALB(S_),SSLEG(8,S_),OPTX(S_),DDENS - real*8 OD(S_,JXL1_),SSA(S_,JXL1_),SLEG(8,S_,JXL1_) - real*8 OD600(JXL1_) - real*8 PATH,RH,XTINCT,RE_LIQ,RE_ICE,TE_ICE -!------------key arrays AFTER solving for J's--------------------------- - real*8 FFF(W_,JXL_),VALJ(X_) - real*8 FLXUP(S_),FLXDN(S_),DIRUP(S_),DIRDN(S_) - real*8 VALJL(JXL_,X_) !2-D array of J_s returned by JRATET - - integer LU,L2U, I,J,K,KR,KR0,KG,JG,L,M, NAER,RATIO(S_) - integer KDOKR(W_+W_r),LDOKR(W_+W_r) - real*8 XQO3,XQO2,TTTX, ODKL,DPKL, SWHEAT,SKPERD(S_+2,JXL1_) - real*8 ODRRTM,FRRTM -!----------------------------------------------------------------------- - - if (L1U .gt. JXL1_) then - call EXITC(' PHOTO_JX: not enough levels in JX') - endif - - LU = L1U - 1 - L2U = LU + LU + 2 - VALJXX(:,:) = 0.d0 - -!---special Cloud-J fixes to be able to run Soalr-J code - TAUG_RRTMG(:,:) = 0.d0 ! Cloud-J fix, values defined in Solar-J - SJSUB(:,:) = 0.d0 - SJSUB(:,1) = 1.d0 - -!---check for dark conditions SZA > 98.0 deg => tan ht = 63 km -! or 99.0 80 km - if (SZA .gt. 98.d0) then - LDARK = .true. - return - else - LDARK = .false. - endif - -!---load the amtospheric column data - do L = 1,L1U - PPJ(L) = PPP(L) - TTJ(L) = TTT(L) - DDJ(L) = DDD(L) - OOJ(L) = OOO(L) - enddo - PPJ(L1U+1) = 0.d0 - -!---calculate spherical weighting functions (AMF: Air Mass Factor) - do L = 1,L1U+1 - ZZJ(L) = ZZZ(L) - enddo - - RFLECT = REFLB - -!----------------------------------------------------------------------- - call SPHERE2 (U0,RAD,ZZJ,ZZHT,AMF2, L1U,JXL1_) -!----------------------------------------------------------------------- - -! lock indexing of RRTMg superbins (1:W_+W_r) onto std bins fluxes (1:S_) - KR = 0 - do K = 1,S_ - do J = 1,NGC(K) - KR = KR+1 - KDOKR(KR) = K - enddo - enddo - if (KR .ne. W_+W_r) write(6,'(a)') '>>>error w/ RRTM sub bins: KDOKR' - do KR = 1,W_+W_r - K = KDOKR(KR) - if (FL(K) .gt. 0.d0) then - LDOKR(KR) = 1 - else - LDOKR(KR) = 0 - endif - enddo - if (LPRTJ) then - write(6,'(a,3i8)') ' NWBIN / NSBIN:',NWBIN,NSBIN - write(6,'(a,3i8)') ' g-bin super-bin L-flux: W_,S_, W_+W_r ',W_,S_,W_+W_r - write(6,'(3i8)') (KR,KDOKR(KR),LDOKR(KR), KR = 1,W_+W_r) - endif - -! actual RRMTMg values - note that NGS is no longer used in this set of subs -! integer, parameter, dimension(S_) :: NGC = ( & -! /1, 1, 1, 1, 1, 1, 1, 1, 1, 1, & -! 1, 1, 1, 1, 1, 1, 1, 5, 10, 2, & -! 10, 10, 8, 8, 12, 6, 12/) - -!---calculate the optical properties (opt-depth, single-scat-alb, phase-fn(1:8)) - if (LPRTJ) then - write(6,*)'Fast-J v7.4 ---PHOTO_JX internal print: Clouds--' - write(6,*) ' L, P1,P2, WPath, Reff, OD' - endif - -! >>>> major loop over standard levels: - do L = 1,L1U -! >>>> - -! initialize scattering/absoprtion data with Rayleigh scattering (always non-zero) -! NB. SLEG(8,Kwavel,Llayer) includes the single-scattering albedo - do K = 1,S_ - do I = 1,8 - SLEG(I,K,L) = 0.d0 - enddo - ODRAY = DDJ(L)*QRAYL(K) - OD(K,L) = ODRAY - SSA(K,L) = ODRAY - SLEG(1,K,L) = 1.0d0*ODRAY - SLEG(3,K,L) = 0.5d0*ODRAY - enddo - -!---Liquid Water Cloud - if (LWP(L) .gt. 1.d-5 .and. REFFL(L) .gt. 0.1d0) then - RE_LIQ = REFFL(L) - call OPTICL (RE_LIQ, DDENS, QQEXT,SSALB,SSLEG) -!---extinction K(m2/g) = 3/4 * Q / [Reff(micron) * density(g/cm3)] - do K = 1,S_ - ODL = LWP(L) * 0.75d0 * QQEXT(K) / (RE_LIQ * DDENS) - OD(K,L) = OD(K,L) + ODL - SSA(K,L) = SSA(K,L) + SSALB(K)*ODL - do I = 1,8 - SLEG(I,K,L) = SLEG(I,K,L) + SSLEG(I,K)*SSALB(K)*ODL - enddo - enddo -!>>>diagnostic print of cloud data: - if (LPRTJ) then - write(6,'(a,i3,2f8.2,f8.1,f8.4,f8.2,f8.4)') & - 'Liq Cld',L,PPP(L),PPP(L+1),TTT(L),LWP(L),REFFL(L),OD(18,L) - endif - endif - -!---Ice Water Cloud - if (IWP(L) .gt. 1.d-5 .and. REFFI(L) .gt. 0.1d0) then - RE_ICE = REFFI(L) - TE_ICE = TTT(L) - call OPTICI (TE_ICE, DDENS, QQEXT,SSALB,SSLEG) -!---extinction K(m2/g) = 3/4 * Q / [Reff(micron) * density(g/cm3)] - do K = 1,S_ - ODL = IWP(L) * 0.75d0 * QQEXT(K) / (RE_ICE * DDENS) - OD(K,L) = OD(K,L) + ODL - SSA(K,L) = SSA(K,L) + SSALB(K)*ODL - do I = 1,8 - SLEG(I,K,L) = SLEG(I,K,L) + SSLEG(I,K)*SSALB(K)*ODL - enddo - enddo -!>>>diagnostic print of cloud data: - if (LPRTJ) then - write(6,'(a,i3,2f8.2,f8.1,f8.4,f8.2,f8.4)') & - '+IceCld',L,PPP(L),PPP(L+1),TTT(L),IWP(L),REFFI(L),OD(18,L) - endif - endif - -!---Strat Sulfate Aerosol Cloud: first aerosol index = 1 (bkgrd) or 2 (volcanic) - M = NDXAER(L,1) - if (M.eq.1 .or. M.eq.2) then - PATH = AERSP(L,M) - if (PATH .gt. 0.d0) then - call OPTICS (OPTX,SSALB,SSLEG, PATH,M) - do K = 1,S_ - OD(K,L) = OD(K,L) + OPTX(K) - SSA(K,L) = SSA(K,L) + SSALB(K)*OPTX(K) - do I = 1,8 - SLEG(I,K,L) = SLEG(I,K,L) + SSLEG(I,K)*SSALB(K)*OPTX(K) - enddo - enddo -!>>>diagnostic print of SSA data: - if (LPRTJ) then - write(6,'(a,i3,2f8.2,f8.1,2f8.5,1x,a12)') & - 'StratSA',L,PPP(L),PPP(L+1),TTT(L),PATH,OPTX(18),TITLSS(M) - endif - endif - endif - -!---OTHER aerosols in layer: check aerosol index -!---this uses data from climatology OR from current CTM (STT of aerosols) -!---subroutines OPTICA & OPTICM return the same information: -!--- PATH is the g/m2 in the layer, NAER in the cloud/aerosol index -!--- UMich aerosols use relative humidity (RH) - do M = 1,ANU - NAER = NDXAER(L,M) - PATH = AERSP(L,M) - if (PATH .gt. 0.d0) then - if (NAER .gt. 2) then - call OPTICA (OPTX,SSALB,SSLEG, PATH,RH, NAER) - do K = 1,S_ - OD(K,L) = OD(K,L) + OPTX(K) - SSA(K,L) = SSA(K,L) + SSALB(K)*OPTX(K) - do I = 1,8 - SLEG(I,K,L)=SLEG(I,K,L) + SSLEG(I,K)*SSALB(K)*OPTX(K) - enddo - enddo -!>>>diagnostic print of OPTICA data: - if (LPRTJ) then - write(6,'(a,i3,2f8.2,f8.1,2f8.5,i5)') & - 'aerosol',L,PPP(L),PPP(L+1),TTT(L),PATH,OPTX(18),NAER - endif - endif - endif - enddo - - RH = RRR(L) - do M = 1,ANU - NAER = NDXAER(L,M) - PATH = AERSP(L,M) - if (PATH .gt. 0.d0) then - if (NAER .lt. 0) then - call OPTICM (OPTX,SSALB,SSLEG, PATH,RH, -NAER) - do K = 1,S_ - OD(K,L) = OD(K,L) + OPTX(K) - SSA(K,L) = SSA(K,L) + SSALB(K)*OPTX(K) - do I = 1,8 - SLEG(I,K,L)=SLEG(I,K,L) + SSLEG(I,K)*SSALB(K)*OPTX(K) - enddo - enddo -!>>>diagnostic print of OPTICM data: - if (LPRTJ) then - write(6,'(a,i3,2f8.2,f8.1,2f8.5,i5)') & - 'aerosol',L,PPP(L),PPP(L+1),TTT(L),PATH,OPTX(18),NAER - endif - endif - endif - enddo - -!----pull out 600-nm scattering profile for add layers. - OD600(L) = OD(18,L) - -!---Add O2 & O3 absorbers to get final optical properties (Fast-J bins only 1:18) - do K = 1,W_ - TTTX = TTJ(L) - call X_interp (TTTX,XQO2, TQQ(1,1),QO2(K,1), TQQ(2,1),QO2(K,2),TQQ(3,1),QO2(K,3), LQQ(1)) - call X_interp (TTTX,XQO3, TQQ(1,2),QO3(K,1), TQQ(2,2),QO3(K,2),TQQ(3,2),QO3(K,3), LQQ(2)) - ODABS = XQO3*OOJ(L) + XQO2*DDJ(L)*0.20948d0 - OD(K,L) = OD(K,L) + ODABS - enddo - -!---renormalize the SLEG array by OD - note that SSA is included in SLEG and not used further - do K = 1,S_ - do I = 1,8 - SLEG(I,K,L) = SLEG(I,K,L)/OD(K,L) - enddo - enddo - - enddo ! end of 'do L = 1,L1U' - -! >>> now transform matrix OD(K,L) & SLEG (I,K,L) ==> DTAUX(L,KR) & POMEGAX(I,L,KR) -! this is needed for good caching in the solver -! >>> also at this time expand the K=1:S_ wavelengths of OD & SLEG to the KR=1:W_+W_r -! for the full sub-bins of RRMGg. For Cloud-J, just do the heating by clouds and ssa - KR0 = W_ - KR = 0 - do K = 1,S_ - do J = 1,NGC(K) ! for 1:17 just one gbin/bin, for 18:27 there are NGC gbins/bin - KR = KR+1 - if (KR .le. KR0) then - do L = 1,L1U - DTAUX(L,KR) = OD(K,L) - do I = 1,8 - POMEGAX(I,L,KR) = SLEG(I,K,L) - enddo - enddo - else - do L = 1,L1U - ODRRTM = TAUG_RRTMG(L,KR-KR0) - DTAUX(L,KR) = OD(K,L) + ODRRTM - FRRTM = OD(K,L)/DTAUX(L,KR) - do I = 1,8 - POMEGAX(I,L,KR) = SLEG(I,K,L)*FRRTM - enddo - enddo - endif - enddo - enddo - -!---set surface reflectance - RFL(:) = max(0.d0,min(1.d0,RFLECT)) - -!---Given the aerosol+cloud OD/layer in visible (600 nm) calculate how to add -! additonal levels at top of clouds (now uses log spacing) -!----------------------------------------------------------------------- - call EXTRAL(OD600,L1U,L2U,N_,JTAUMX,ATAU,ATAU0, JXTRA) -!----------------------------------------------------------------------- - -!---complete calculation of actinic and net fluxes for all L & wavelengths (incl W_+W_r) -!----------------------------------------------------------------------- - call OPMIE (DTAUX,POMEGAX,U0,RFL,AMF2,JXTRA, & - AVGF,FJTOP,FJBOT,FSBOT,FJFLX,FLXD,FLXD0, LDOKR,LU) -!----------------------------------------------------------------------- - - FFF(:,:) = 0.d0 - FREFI = 0.d0 - FREFL = 0.d0 - FREFS = 0.d0 - FLXUP(:) = 0.d0 - DIRUP(:) = 0.d0 - FLXDN(:) = 0.d0 - DIRDN(:) = 0.d0 - FLXJ(:) = 0.d0 - FFX(:,:) = 0.d0 - FFXNET(:,:) = 0.d0 - FFXNETS(:) = 0.d0 - FREF1 = 0.d0 - FREF2 = 0.d0 - PREF1 = 0.d0 - PREF2 = 0.d0 - -! accumulate data on solar fluxes: actinic = J-values (1:W_), users FL(K) [photons] -! note FFF(18,L) uses only the first sub-bin of K=18 (97% of flux) and applies 100% of FL(K) - do K = 1,W_ - if (LDOKR(K) .gt. 0) then - do L = 1,LU - FFF(K,L) = SOLF*FL(K)*AVGF(L,K) - enddo - PREF1 = PREF1 + FSBOT(K)*SOLF*FL(K)*FP(K) ! PAR direct - PREF2 = PREF2 + FJBOT(K)*SOLF*FL(K)*FP(K) ! PAR diffuse - endif - enddo - -!---use the FFF() values in photons/cm2/sec to calcualte J's -!---mapping J-values from fast-JX species onto CTM chemistry reactins is done in main code -!----------------------------------------------------------------------- - call JRATET(PPJ,TTJ,FFF, VALJXX, LU,NJXU) -!----------------------------------------------------------------------- - -! accumulate data on solar fluxes: energy and solar heating (!:S_), uses FW(K) [Watts] - KG = 0 - do K = 1,NS2 - do JG = 1,NGC(K) - KG = KG+1 - if (LDOKR(KG) .gt. 0) then - FLXUP(K) = FLXUP(K) + FJTOP(KG)*SJSUB(K,JG) - DIRUP(K) = DIRUP(K) - FLXD0(KG)*SJSUB(K,JG) - FLXDN(K) = FLXDN(K) - FJBOT(KG)*SJSUB(K,JG) - DIRDN(K) = DIRDN(K) - FSBOT(KG)*SJSUB(K,JG) - FREFI = FREFI + FLXD0(KG)*SOLF*FW(K)*SJSUB(K,JG) - FREFL = FREFL + FJTOP(KG)*SOLF*FW(K)*SJSUB(K,JG) - FREFS = FREFS + SOLF*FW(K)*SJSUB(K,JG) - FABOT = (1.d0 - RFL(KG))*(FJBOT(KG) + FSBOT(KG)) - FXBOT = FSBOT(KG) - FABOT - FLXJ(1) = FJFLX(1,KG) - FXBOT - do L = 2,LU - FLXJ(L) = FJFLX(L,KG) - FJFLX(L-1,KG) - enddo - FLXJ(LU+1) = FJTOP(KG) - FJFLX(LU,KG) - FFX0 = 0.d0 - do L = 1,L1U - FFX0 = FFX0 + (FLXD(L,KG) - FLXJ(L))*SJSUB(K,JG) - FFX(K,L) = FFX(K,L) + (FLXD(L,KG) - FLXJ(L))*SJSUB(K,JG) - enddo -! all these quantities (are for print) and are scaled to the input flux (SZA & solar distance) - FFXNET(K,1) = FFXNET(K,1) + FLXD0(KG) *SJSUB(K,JG)*SOLF*FW(K) ! direct(solar) flux dep into atmos (spherical) - FFXNET(K,2) = FFXNET(K,2) + FSBOT(KG) *SJSUB(K,JG)*SOLF*FW(K) ! direct(solar) flux dep onto LB (surface) - FFXNET(K,3) = FFXNET(K,3) + (FLXD0(KG)+FSBOT(KG))*SJSUB(K,JG)*SOLF*FW(K) ! total solar into atmopshere+surface - FFXNET(K,4) = FFXNET(K,4) + FJTOP(KG) *SJSUB(K,JG)*SOLF*FW(K) ! diffuse flux leaving top-of-atmos - FFXNET(K,5) = FFXNET(K,5) + FFX0*SOLF*FW(K) ! diffuse flux absorbed in atmos - FFXNET(K,6) = FFXNET(K,6) + FABOT *SJSUB(K,JG)*SOLF*FW(K) ! total (dir+dif) absorbed at LB (surface) - FFXNET(K,7) = FFXNET(K,7) + FSBOT(KG) *SJSUB(K,JG)*SOLF*FW(K) ! direct flux dep onto LB (surface diags) - FFXNET(K,8) = FFXNET(K,8) + FJBOT(KG) *SJSUB(K,JG)*SOLF*FW(K) ! diffuse flux dep onto LB (surface) - endif - enddo ! end JG/KG loop over g-bins embedded in the S_=27 super bins -!----------------------------------------------------------------------- - if (K .le. W_) then ! total Solar flux in atmosp <778 & >778 nm - FREF1 = FREF1 + FFXNET(K,3) - else - FREF2 = FREF2 + FFXNET(K,3) - endif - do J=1,8 - FFXNETS(J) = FFXNETS(J) + FFXNET(K,J) - enddo - enddo ! end loop over wavelength super bins K -!----------------------------------------------------------------------- - FREFL = FREFL/FREFS !calculate fractionreflected flux (energy weighted) - FREFI = FREFI/FREFS - -!------------------------PRINT OUT-------------------------------------- - if (LPRTJ) then -!---diagnostics/variables below are JUST for PRINT and NOT returned to the CTM code - write(6,*)'Fast-J v7.4 ---PHOTO_JX internal print: Atmosphere--' - do L=1,L1U - DTAU600(L) = DTAUX(L,NW2) - do I=1,8 - POMG600(I,L) = POMEGAX(I,L,NW2) - enddo - enddo - - call JP_ATM(PPJ,TTJ,DDJ,OOJ,ZZJ,DTAU600,POMG600,JXTRA, LU) - -!---PRINT SUMMARY of mean intensity, flux, heating rates: - write(6,*) - write(6,*)'Fast-J v7.4 ---PHOTO_JX internal print: Mean Intens--' - write(6,'(a,6f10.4)') & - ' SUMMARY fast-JX: albedo/SZA/u0/F-incd/F-refl/', & - RFLECT,SZA,U0,FREFI,FREFL,FREFS - - write(6,'(a5,18i8)') ' bin:',(K, K=NW1,NW2) - write(6,'(a5,18f8.1)') ' wvl:',(WL(K), K=NW1,NW2) - write(6,'(a)') ' ---- 100000=Fsolar MEAN INTENSITY per wvl bin' - RATIO(:) = 0.d0 - do L = LU,1,-1 - do K=NW1,NW2 - if (LDOKR(K) .gt. 0) then - RATIO(K) = (1.d5*FFF(K,L)/(SOLF*FL(K))) - endif - enddo - write(6,'(i3,2x,18i8)') L,(RATIO(K),K=NW1,NW2) - enddo -! convert to K/day - do L = 1,LU - SKPERD(NS2+1,L) = 0.d0 - SKPERD(NS2+2,L) = 0.d0 - DPKL = HeatFac_/(PPP(L)-PPP(L+1)) - do K = 1,NS2 - SKPERD(K,L) = FFX(K,L)*FW(K)*SOLF*DPKL - enddo - do K = 1,NW2 - SKPERD(NS2+1,L) = SKPERD(NS2+1,L) + SKPERD(K,L) - enddo - do K = NW2+1,NS2 - SKPERD(NS2+2,L) = SKPERD(NS2+2,L) + SKPERD(K,L) - enddo - enddo - - write(6,*) - write(6,*)'Fast-J v7.4 ---PHOTO_JX Net Fluxes include SZA & solar dist' - write(6,'(a,2f8.2)') ' ---NET FLUXES--- solar < 778 nm ',FREF1,FREF1+FREF2 - write(6,'(a11,18i8)') 'bins:',(K, K=NW1,NW2) - write(6,'(a11,18f8.1)') 'wavl:',(WL(K), K=NW1,NW2) - write(6,'(a11,18f8.2)') 'watt:',(FW(K), K=NW1,NW2) - write(6,'(a11,18f8.2)') ' sol atm+sf',(FFXNET(K,3), K=NW1,NW2) - write(6,'(a11,18f8.2)') ' sol in atm',(FFXNET(K,1), K=NW1,NW2) - write(6,'(a11,18f8.2)') ' sol at srf',(FFXNET(K,2), K=NW1,NW2) - write(6,'(a11,18f8.2)') ' dif outtop',(FFXNET(K,4), K=NW1,NW2) - write(6,'(a11,18f8.2)') ' abs in atm',(FFXNET(K,5), K=NW1,NW2) - write(6,'(a11,18f8.2)') ' abs at srf',(FFXNET(K,6), K=NW1,NW2) - write(6,'(a11,18f8.2)') ' srf direct',(FFXNET(K,7), K=NW1,NW2) - write(6,'(a11,18f8.2)') ' srf diffus',(FFXNET(K,8), K=NW1,NW2) - write(6,'(a11,1p,e10.3)') ' PAR direct',PREF1 - write(6,'(a11,1p,e10.3)') ' PAR diffus',PREF2 - - write(6,'(a,2f8.2)') ' ---NET FLUXES--- solar > 778 nm + totals ',FREF2,FREF1+FREF2 - write(6,'(a11,18i8)') 'bins:',(K, K=NW2+1,NS2) - write(6,'(a11,18f8.1)') 'wavl:',(WL(K), K=NW2+1,NS2) - write(6,'(a11,18f8.2)') 'watt:',(FW(K), K=NW2+1,NS2) - write(6,'(a11,18f8.2)') ' sol atm+sf',(FFXNET(K,3), K=NW2+1,NS2),FFXNETS(3) - write(6,'(a11,18f8.2)') ' sol in atm',(FFXNET(K,1), K=NW2+1,NS2),FFXNETS(1) - write(6,'(a11,18f8.2)') ' sol at srf',(FFXNET(K,2), K=NW2+1,NS2),FFXNETS(2) - write(6,'(a11,18f8.2)') ' dif outtop',(FFXNET(K,4), K=NW2+1,NS2),FFXNETS(4) - write(6,'(a11,18f8.2)') ' abs in atm',(FFXNET(K,5), K=NW2+1,NS2),FFXNETS(5) - write(6,'(a11,18f8.2)') ' abs at srf',(FFXNET(K,6), K=NW2+1,NS2),FFXNETS(6) - write(6,'(a11,18f8.2)') ' srf direct',(FFXNET(K,7), K=NW2+1,NS2),FFXNETS(7) - write(6,'(a11,18f8.2)') ' srf diffus',(FFXNET(K,8), K=NW2+1,NS2),FFXNETS(8) - - write(6,'(a)') 'heating rate profiles in K/day v7.4 180-778nm ' - write(6, '(a4, 18f7.1)')'wvl ',(WL(I),I=NW1,NW2) - do L = LU,1,-1 - write(6,'(i4,18f7.2)') L,(SKPERD(I,L), I=NW1,NW2) - enddo - write(6,'(a)') 'heating rate profiles in K/day v7.4 778-...nm plus 1:18 19:27 & 1:27' - write(6, '(a4,18f7.1)')'wvl ',(WL(I),I=NW2+1,NS2) - do L = LU,1,-1 - write(6,'(i4,18f7.2)') L,(SKPERD(I,L), I=NW2+1,NS2+2), & - SKPERD(NS2+1,L)+SKPERD(NS2+2,L) - enddo - - write(6,'(a)') ' Fast-J v7.4 ----J-values----' - write(6,'(1x,a,72(a6,3x))') 'L= ',(TITLEJX(K), K=1,NJX) - do L = LU,1,-1 - write(6,'(i3,1p, 72e9.2)') L,(VALJXX(L,K),K=1,NJX) - enddo - - endif ! end of LPRTJ if - - END SUBROUTINE PHOTO_JX - - -!<<<<<<<<<<<<<<<<<<<<<< ZTAU(2*L2_+1) -! Top: TTAU(L2_) ==> ZTAU(3) -! Infinity: 0.0 ==> ZTAU(1) -! index: 2*(L2_+1-L2)+1 ==> LZ -! -! Mie scattering code only used from surface to level L2_ -!------------------------------------------------------------------------ -! -!------------------------------------------------------------------------ -! Insert new levels, working downwards from the top of the atmosphere -! to the surface (down in 'LZ', up in 'L2'). This allows ztau and pomega -! to be incremented linearly, and the flux fz to be attenuated top-down -! (avoiding problems where lower level fluxes are zero). -!------------------------------------------------------------------------ -! -! Ascend through atmosphere transposing grid and adding extra points -! remember L2=1 is surface of CTM, but last layer (LZ) in scattering code. -! there are twice the number of layers in the LZ arrays (2*L2_ + 2*JADDTO + 1) -! because we need to insert the intermediate layers (even LZ) for the -! asymmetric scattering code. -! -! Transfer the L2=1:L2_+1 values (TTAU,FTAU2,POMEGAJ) onto the reverse -! order, expanded, doubled-level scatter grid. -! Note that we need to deal with the expansion by JADD levels (L2L). -! These JADDLV levels are skipped and need to be interpolated later. -! Note that only odd LZ levels are filled, -! -!----------------------re-grid data--------------------------------------------- -! Calculate cumulative total and define levels we want J-values at. -! Sum upwards for levels, and then downwards for Mie code readjustments. -! -! JXTRA(L2) Number of new levels to add between (L2) and (L2+1) -! ***JXTRA(1:L2_+1) is calculated based on the aerosol+cloud OD_s -! JADDLV(L2) Number of new levels actually added at each wavelength -! where JADDLV = 0 when there is effectively no FTAU2 -! JADDTO(L2) Total number of new levels to add to and above level (L2) -! JNDLEV(L) = L2 index that maps on CTM mid-layer L -! -!---JADDLV(L2=1:L2_) = number of levels to add between TTAU2(L2) and TTAU(L2+1) -!--- JADDLV is taken from JXTRA, which is based on visible OD. -!--- JADDTO(L2=1:L2_+1) is the cumulative number of levels to be added -!---these should be fixed for all wavelengths to lock-in the array sizes - - if (LU .gt. JXL_) then - call EXITC (' OPMIE: JXL_ .lt. L_') - endif - - L1U = LU + 1 - L2U = 2*LU + 2 - - - do L2 = 1,L2U,1 - JADDLV(L2) = JXTRA(L2) - enddo - JADDTO(L2U+1) = 0 - do L2 = L2U,1,-1 - JADDTO(L2) = JADDTO(L2+1) + JADDLV(L2) - enddo - -!---expanded grid now included CTM edge and mid layers plus expanded -!--- grid to allow for finer delta-tau at tops of clouds. -!--- DIM of new grid = L2U + JADDTO(1) + 1 - -!---L2LEV(L2) = L2-index for old level L2 in expanded J-grid (w/JADDLV) -! in absence of JADDLV, L2LEV(L2) = L2 - L2LEV(1) = 1 - do L2 = 2,L2U+1 - L2LEV(L2) = L2LEV(L2-1) + 1 + JADDLV(L2-1) - enddo - -!---JNDLEV(L=1:L_) = L2-index in expanded grid for CTM mid-layer L -!---JNELEV(L=1:L_) = L2-index for top of layer L - do L = 1,LU - JNDLEV(L) = L2LEV(2*L) - JNELEV(L) = L2LEV(2*L+1) - enddo - JNELEV(LU+1) = 0 !need to set this to top-of-atmosphere - - ND = 2*L2U + 2*JADDTO(1) + 1 - - if(ND .gt. N_) then - call EXITC (' overflow of scatter arrays: ND > N_') - endif - -!----------------begin wavelength dependent set up------------------------------ - -!---Reinitialize arrays - ZTAU(:,:) = 0.d0 - FZ(:,:) = 0.d0 - POMEGA(:,:,:) = 0.d0 - - FJACT(:,:) = 0.d0 - FJTOP(:) = 0.d0 - FJBOT(:) = 0.d0 - FSBOT(:) = 0.d0 - FJFLX(:,:) = 0.d0 - FLXD(:,:) = 0.d0 - FLXD0(:) = 0.d0 - FJT(:) = 0.d0 - FJB(:) = 0.d0 - FJ(:,:) = 0.d0 - FZ(:,:) = 0.d0 - ZTAU(:,:) = 0.d0 - - do K = 1,W_+W_r - if (LDOKR(K) .gt. 0) then - -!---Set up optical depth DTAU(L) - do L = 1,L1U - DTAU(L,K) = DTAUX(L,K) - enddo - DTAU(L1U+1,K) = 0.d0 - -!---Define the total scattering phase fn for each CTM layer L=1:L_+1 -!--- from a DTAU-wt_d mix of aerosols, cloud & Rayleigh -!---No. of quadrature pts fixed at 4(M_), expansion of phase fn @ 8 - do L = 1,L1U - do I = 1,M2_ - POMEGAJ(I,L,K) = POMEGAX(I,L,K) - enddo - enddo - -!---Calculate attenuated incident beam exp(-TTAU/U0 = DTAU * AirMassFactor) -!--- at the middle & edges of the CTM layers L=1:2*L1_+1 -!--- L1_ is top-edge of CTM (ie, L=38 = 2 hPa) which has TAU > 0 -!--- note that DTAU(L1_) is optical depth in the FULL CTM layer just above -!--- FTAU1 and DTAU1 are local, non-K for each half-layer - -! new v7.4d - FTAU2(:,:) = 0.d0 - FTAU2(L2U+1,:) = 1.0d0 - FTAU1(:) = 0.d0 - - do LL = 1,2*L1U+1 - L = (LL+1)/2 - DTAU1(LL) = 0.5d0*DTAU(L,K) - enddo - - LL0 = 0 - do LL = 1,2*L1U+1 - if (AMF2(LL,LL) .gt. 0.0d0) then -! there is sunlight at LL -! calc total attenuation of solar beam into level LL: lower edge of layer LL -! includes single pass through weights for all layers above (including LL,LL) -! and double weights for the layers below but above tangent hieght. -! the optical depth in layer LL is always looking 'up' as it is the amount -! deposited betwween boundary LL and LL+1 - XLTAU = 0.0d0 - do II = 1,2*L1U+1 - XLTAU = XLTAU + DTAU1(II)*AMF2(II,LL) - enddo - if (XLTAU .lt. 76.d0) then ! zero out flux at 1e-33 - FTAU2(LL,K) = exp(-XLTAU) -! calc attenuation of solar beam in layer LL (essential for heating rates) -! XLTAU1 is the attenuation (exp(-Tau/u0)) in layer LL -! it is the attenuation of flux coming in (U0>0) and flux going up/put (U0<0) - XLTAU1 = DTAU1(LL)*AMF2(LL,LL) -!--- need to keep the flux just up-sun of this ray path to get deposition - if (U0 .gt. 0.d0) then - FTAU1(LL) = exp(-XLTAU+XLTAU1) ! FTAU1 > FTAU2 - else - FTAU1(LL) = exp(-XLTAU-XLTAU1) ! FTAU1 < FTAU2 - endif - endif - - else - LL0 = LL ! highest level with no direct sunlight - endif - enddo ! LL loop - -! special case of flux for LL0 = layer just below a sunlit one,it has -! a ray passing thru the upper part but not illuminating LL0: (AMF2(LL0,LL0) = 0) - if (LL0 .gt. 0) then - XLTAU1 = DTAU1(LL0)*AMF2(LL0,LL0+1) - FTAU1(LL0) = FTAU2(LL0+1,K)*(1.d0-exp(-XLTAU1)) !total attenuated flux here - endif - -!---calculate direct solar flux deposited in each CTM half-layer: L=1:L2_ -!--- use FSBOT for surface flux, cannot do layer above CTM (L_+1) -!--- use 1/AMF2 instead of U0 to do cosine-weighted flux - FLXD1(:) = 0.d0 - do LL = 1,2*L1U - if (AMF2(LL,LL) .gt. 0.d0) then - FLXD1(LL) = abs(FTAU1(LL) - FTAU2(LL,K))/AMF2(LL,LL) - endif - enddo - if (LL0 .gt. 0) then - FLXD1(LL0) = FTAU1(LL0)/AMF2(LL0,LL0+1) - endif - - if (AMF2(1,1) .gt. 0.d0) then - FSBOT(K) = FTAU2(1,K)/AMF2(1,1) - else - FSBOT(K) = 0.d0 - endif - - do LL = 2,2*L1U,2 - L=LL/2 - FLXD(L,K) = FLXD1(LL)+FLXD1(LL-1) - enddo - -!---integrate solar flux depositied in CTM layers L=1:L_, cannot do top layer -!--- note FLXD0 .ne. (1.d0 - FTAU(L_+1))/AMF(L_+1,L_+1) with spherical atmos - FLXD0(K) = 0.d0 - if (AMF2(2*L1U,2*L1U) .gt. 0.d0) then - do L=1,L1U - FLXD0(K) = FLXD0(K) + FLXD(L,K) - enddo - endif - -!------------------------------------------------------------------------ -! Take optical properties on CTM layers and convert to a photolysis -! level grid corresponding to layer centres and boundaries. This is -! required so that J-values can be calculated for the centre of CTM -! layers; the index of these layers is kept in the JNDLEV array. -!------------------------------------------------------------------------ -!---Now combine the CTM layer edges (1:L_+2) with the CTM mid-layer -!--- points (1:L_) plus 1 for the mid point of added top layer. -!---combine these edge- and mid-layer points into grid of size: -!--- L2_+1 = 2*L1_+1 = 2*L_+3 -!---calculate column optical depths above each level, TTAU(1:L2_+1) -!--- note that TTAU(L2_+1)=0 and TTAU(1)=total OD - - TTAU(L2U+1,K) = 0.0d0 - do L2 = L2U,1,-1 - L = (L2+1)/2 - DTAUJ = 0.5d0 * DTAU(L,K) - TTAU(L2,K) = TTAU(L2+1,K) + DTAUJ - enddo - -!----solar flux incident on lower boundary & Lambertian reflect factor: - if (FSBOT(K) .gt. 0.d0) then - ZFLUX(K) = FSBOT(K)*RFL(K)/(1.d0+RFL(K)) - else - ZFLUX(K) = 0.d0 - endif - -! Calculate scattering properties, level centres then level boundaries -!>>>>>be careful of order, we are overwriting/shifting the 'POMEGAJ' upward -! in index - do L2 = L2U,2,-2 - L = L2/2 - do I = 1,M2_ - POMEGAJ(I,L2,K) = POMEGAJ(I,L,K) - enddo - enddo -!---lower boundary value is set (POMEGAJ(I,1)), but set upper: - do I = 1,M2_ - POMEGAJ(I,L2U+1,K) = POMEGAJ(I,L2U,K) - enddo -!---now have POMEGAJ filled at even points from L2=3:L2_-1 -!---use inverse interpolation for correct tau-weighted values at edges - do L2 = 3,L2U-1,2 - TAUDN = TTAU(L2-1,K)-TTAU(L2,K) - TAUUP = TTAU(L2,K)-TTAU(L2+1,K) - do I = 1,M2_ - POMEGAJ(I,L2,K) = (POMEGAJ(I,L2-1,K)*TAUDN + & - POMEGAJ(I,L2+1,K)*TAUUP) / (TAUDN+TAUUP) - enddo - enddo - -!---at this point FTAU2(1:L2_+1) and POMEAGJ(1:8, 1:L2_+1) -!--- where FTAU2(L2_+1) = 1.0 = top-of-atmos, FTAU2(1) = surface - - do L2 = 1,L2U+1 ! L2 = index of CTM edge- and mid-layers - L2L = L2LEV(L2) ! L2L = index for L2 in expanded scale(JADD) - LZ = ND + 2 - 2*L2L ! LZ = index for L2 in scatt arrays - ZTAU(LZ,K) = TTAU(L2,K) - FZ(LZ,K) = FTAU2(L2,K) - do I=1,M2_ - POMEGA(I,LZ,K) = POMEGAJ(I,L2,K) - enddo - enddo - -! Now go thru the pairs of L2 levels to see if we need JADD levels - do L2 = 1,L2U ! L2 = index of CTM edge- and mid-layers - L2L = L2LEV(L2) ! L2L = index for L2 in expanded scale(JADD) - LZ = ND + 2 - 2*L2L ! LZ = index for L2 in scatt arrays - L22 = L2LEV(L2+1) - L2LEV(L2) - 1 ! L22 = 0 if no added levels - - if (L22 .gt. 0) then - TAUBTM(K) = TTAU(L2,K) - TAUTOP(K) = TTAU(L2+1,K) - FBTM(K) = FTAU2(L2,K) - FTOP(K) = FTAU2(L2+1,K) - do I = 1,M2_ - POMEGAB(I,K) = POMEGAJ(I,L2,K) - enddo - -!---to fit L22 new layers between TAUBOT > TAUTOP, calculate new 1/ATAU factor -!--- such that TAU(just above TAU-btm) = ATUAZ * TAUBTM < TAUBTM - ATAUZ = exp(-log(TAUBTM(K)/max(TAUTOP(K),ATAU0))/float(L22+1)) - do L = 1,L22 ! add odd levels between L2LEV(L2) & L2LEV(L2+1) - LZZ = LZ - 2*L ! LZZ = index(odd) of added level in scatt arrays - ZTAU(LZZ,K) = TAUBTM(K) * ATAUZ - -!---fraction from TAUBTM=>TAUTOP - ATAUA=(TAUBTM(K)-ZTAU(LZZ,K))/(TAUBTM(K)-TAUTOP(K)) -!---solar flux at interp-levels: use exp(TAU/U0) if U0>0.02 (89 deg), -!---else scale by TAU - if (U0 .gt. 0.02d0) then - FZ(LZZ,K) = FTOP(K) * exp((TAUTOP(K)-ZTAU(LZZ,K))/U0) - else - if (FBTM(K) .lt. 1.d-32) then - FZ(LZZ,K) = 0.d0 - else - FZ(LZZ,K) = FBTM(K) * (FTOP(K)/FBTM(K))**ATAUA - endif - endif - do I = 1,M2_ - POMEGA(I,LZZ,K) = POMEGAB(I,K) + & - ATAUA*(POMEGAJ(I,L2+1,K)-POMEGAB(I,K)) - enddo - TAUBTM(K) = ZTAU(LZZ,K) - FBTM(K) = FZ(LZZ,K) - do I = 1,M2_ - POMEGAB(I,K) = POMEGA(I,LZZ,K) - enddo - enddo - endif - enddo - -! Now fill in the even points with simple interpolation in scatter arrays: - do LZ = 2,ND-1,2 - ZTAU(LZ,K) = 0.5d0*(ZTAU(LZ-1,K)+ZTAU(LZ+1,K)) - FZ(LZ,K) = sqrt(FZ(LZ-1,K)*FZ(LZ+1,K)) - do I=1,M2_ - POMEGA(I,LZ,K) = 0.5d0*(POMEGA(I,LZ-1,K)+POMEGA(I,LZ+1,K)) - enddo - enddo - - endif - enddo ! wavelength loop! - -!----------------------------------------------------------------------- - call MIESCT(FJ,FJT,FJB,POMEGA,FZ,ZTAU,ZFLUX,RFL,U0,LDOKR,ND) -!----------------------------------------------------------------------- - -!---Move mean intensity from scatter array FJ(LZ=1:ND) -!--- to CTM mid-level array FJACT(L=1:L_) - - do K = 1,W_+W_r - if (LDOKR(K) .gt. 0) then - -!---mean intensity at mid-layer: 4* + solar -! do L = 1,LU -! L2L = JNDLEV(L) -! LZ = ND+2 - 2*L2L -! FJACT(L,K) = 4.d0*FJ(LZ,K) + FZ(LZ,K) -! enddo - -!---mean intensity averaged throughout layer: - do L = 1,LU - LZ0 = ND+2 - 2*JNELEV(L) - if (L .gt. 1) then - LZ1 = ND+2 - 2*JNELEV(L-1) - else - LZ1 = ND - endif - SUMJ = (4.d0*FJ(LZ0,K)+FZ(LZ0,K))*(ZTAU(LZ0+2,K)-ZTAU(LZ0,K)) & - +(4.d0*FJ(LZ1,K)+FZ(LZ1,K))*(ZTAU(LZ1,K)-ZTAU(LZ1-2,K)) - SUMT = ZTAU(LZ0+2,K)-ZTAU(LZ0,K) + ZTAU(LZ1,K)-ZTAU(LZ1-2,K) - - do LZ = LZ0+2,LZ1-2,2 - SUMJ =SUMJ+(4.d0*FJ(LZ,K)+FZ(LZ,K))*(ZTAU(LZ+2,K)-ZTAU(LZ-2,K)) - SUMT =SUMT + ZTAU(LZ+2,K)-ZTAU(LZ-2,K) - enddo - FJACT(L,K) = SUMJ/SUMT - enddo - -!---mean diffuse flux: 4 (not solar) at top of layer L -!--- average (tau-wtd) the h's just above and below the L-edge - do L = 1,LU - L2L = JNELEV(L) - LZ = ND+2 - 2*L2L - FJFLX0 = (ZTAU(LZ+1,K)-ZTAU(LZ,K))/(ZTAU(LZ+1,K)-ZTAU(LZ-1,K)) - FJFLX(L,K)=4.d0*(FJ(LZ-1,K)*FJFLX0 + FJ(LZ+1,K)*(1.d0-FJFLX0)) - enddo - -!---diffuse fluxes reflected at top, incident at bottom - FJTOP(K) = FJT(K) - FJBOT(K) = FJB(K) - - endif - enddo ! wavelength loop! - - END SUBROUTINE OPMIE - - -!----------------------------------------------------------------------- - subroutine MIESCT(FJ,FJT,FJB, POMEGA,FZ,ZTAU,ZFLUX,RFL,U0,LDOKR,ND) -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: LDOKR(W_+W_r),ND - real*8, intent(in) :: POMEGA(M2_,N_,W_+W_r),FZ(N_,W_+W_r),ZTAU(N_,W_+W_r) & - ,RFL(W_+W_r),U0,ZFLUX(W_+W_r) - real*8, intent(out) :: FJ(N_,W_+W_r),FJT(W_+W_r),FJB(W_+W_r) - - real*8 PM(M_,M2_),PM0(M2_) - integer I, IM ,K - -!----------------------------------------------------------------------- -! This is an adaption of the Prather radiative transfer code, (mjp, 10/95) -! Prather, 1974, Astrophys. J. 192, 787-792. -! Solution of inhomogeneous Rayleigh scattering atmosphere. -! (original Rayleigh w/ polarization) -! Cochran and Trafton, 1978, Ap.J., 219, 756-762. -! Raman scattering in the atmospheres of the major planets. -! (first use of anisotropic code) -! Jacob, Gottlieb and Prather, 1989, J.Geophys.Res., 94, 12975-13002. -! Chemistry of a polluted cloudy boundary layer, -! (documentation of extension to anisotropic scattering) -! -! takes atmospheric structure and source terms from std J-code -! ALSO limited to 4 Gauss points, only calculates mean field! (M=1) -!----------------------------------------------------------------------- - do I = 1,M_ - call LEGND0 (EMU(I),PM0,M2_) - do IM = 1,M2_ - PM(I,IM) = PM0(IM) - enddo - enddo - - call LEGND0 (-U0,PM0,M2_) - do IM=1,M2_ - PM0(IM) = 0.25d0*PM0(IM) - enddo - -!---BLKSLV now called with all the wavelength arrays (K=1:W_) - - call BLKSLV(FJ,POMEGA,FZ,ZTAU,ZFLUX,RFL,PM,PM0,FJT,FJB,LDOKR,ND) - - END SUBROUTINE MIESCT - - -!----------------------------------------------------------------------- - subroutine LEGND0 (X,PL,N) -!----------------------------------------------------------------------- -!---Calculates ORDINARY Legendre fns of X (real) -!--- from P[0] = PL(1) = 1, P[1] = X, .... P[N-1] = PL(N) - implicit none - integer, intent(in) :: N - real*8, intent(in) :: X - real*8, intent(out) :: PL(N) - integer I - real*8 DEN -!---Always does PL(2) = P[1] - PL(1) = 1.d0 - PL(2) = X - do I = 3,N - DEN = (I-1) - PL(I) = PL(I-1)*X*(2.d0-1.0/DEN) - PL(I-2)*(1.d0-1.d0/DEN) - enddo - - END SUBROUTINE LEGND0 - - -!----------------------------------------------------------------------- - subroutine BLKSLV & - (FJ,POMEGA,FZ,ZTAU,ZFLUX,RFL,PM,PM0,FJTOP,FJBOT,LDOKR,ND) -!----------------------------------------------------------------------- -! Sets up and solves the block tri-diagonal system: -! A(I)*X(I-1) + B(I)*X(I) + C(I)*X(I+1) = H(I) -! This goes back to the old, dumb, fast version 5.3 -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: LDOKR(W_+W_r),ND - real*8, intent(in) :: POMEGA(M2_,N_,W_+W_r),FZ(N_,W_+W_r),ZTAU(N_,W_+W_r) & - ,PM(M_,M2_),PM0(M2_) & - ,RFL(W_+W_r),ZFLUX(W_+W_r) - real*8, intent(out) :: FJ(N_,W_+W_r),FJTOP(W_+W_r),FJBOT(W_+W_r) - - real*8, dimension(M_,N_,W_+W_r) :: A,C,H, RR - - real*8, dimension(M_,M_,N_,W_+W_r) :: B,AA,CC, DD - real*8, dimension(M_,M_) :: E - real*8 SUMB,SUMBX,SUMT - integer I, J, K, L - - do K = 1,W_+W_r - if (LDOKR(K) .gt. 0) then - call GEN_ID (POMEGA(1,1,K),FZ(1,K),ZTAU(1,K),ZFLUX(K),RFL(K), & - PM,PM0, B(1,1,1,K),CC(1,1,1,K),AA(1,1,1,K), & - A(1,1,K),H(1,1,K),C(1,1,K), ND) - endif - enddo - - do K = 1,W_+W_r - if (LDOKR(K) .gt. 0) then -!-----------UPPER BOUNDARY L=1 - L = 1 - do J = 1,M_ - do I = 1,M_ - E(I,J) = B(I,J,1,K) - enddo - enddo - -!---setup L & U matrices - E(2,1) = E(2,1)/E(1,1) - E(2,2) = E(2,2)-E(2,1)*E(1,2) - E(2,3) = E(2,3)-E(2,1)*E(1,3) - E(2,4) = E(2,4)-E(2,1)*E(1,4) - E(3,1) = E(3,1)/E(1,1) - E(3,2) = (E(3,2)-E(3,1)*E(1,2))/E(2,2) - E(3,3) = E(3,3)-E(3,1)*E(1,3)-E(3,2)*E(2,3) - E(3,4) = E(3,4)-E(3,1)*E(1,4)-E(3,2)*E(2,4) - E(4,1) = E(4,1)/E(1,1) - E(4,2) = (E(4,2)-E(4,1)*E(1,2))/E(2,2) - E(4,3) = (E(4,3)-E(4,1)*E(1,3)-E(4,2)*E(2,3))/E(3,3) - E(4,4) = E(4,4)-E(4,1)*E(1,4)-E(4,2)*E(2,4)-E(4,3)*E(3,4) -!---invert L - E(4,3) = -E(4,3) - E(4,2) = -E(4,2)-E(4,3)*E(3,2) - E(4,1) = -E(4,1)-E(4,2)*E(2,1)-E(4,3)*E(3,1) - E(3,2) = -E(3,2) - E(3,1) = -E(3,1)-E(3,2)*E(2,1) - E(2,1) = -E(2,1) -!---invert U - E(4,4) = 1.d0/E(4,4) - E(3,4) = -E(3,4)*E(4,4)/E(3,3) - E(3,3) = 1.d0/E(3,3) - E(2,4) = -(E(2,3)*E(3,4)+E(2,4)*E(4,4))/E(2,2) - E(2,3) = -E(2,3)*E(3,3)/E(2,2) - E(2,2) = 1.d0/E(2,2) - E(1,4) = -(E(1,2)*E(2,4)+E(1,3)*E(3,4)+E(1,4)*E(4,4))/E(1,1) - E(1,3) = -(E(1,2)*E(2,3)+E(1,3)*E(3,3))/E(1,1) - E(1,2) = -E(1,2)*E(2,2)/E(1,1) - E(1,1) = 1.d0/E(1,1) -!---multiply U-invers * L-inverse - E(1,1) = E(1,1)+E(1,2)*E(2,1)+E(1,3)*E(3,1)+E(1,4)*E(4,1) - E(1,2) = E(1,2)+E(1,3)*E(3,2)+E(1,4)*E(4,2) - E(1,3) = E(1,3)+E(1,4)*E(4,3) - E(2,1) = E(2,2)*E(2,1)+E(2,3)*E(3,1)+E(2,4)*E(4,1) - E(2,2) = E(2,2)+E(2,3)*E(3,2)+E(2,4)*E(4,2) - E(2,3) = E(2,3)+E(2,4)*E(4,3) - E(3,1) = E(3,3)*E(3,1)+E(3,4)*E(4,1) - E(3,2) = E(3,3)*E(3,2)+E(3,4)*E(4,2) - E(3,3) = E(3,3)+E(3,4)*E(4,3) - E(4,1) = E(4,4)*E(4,1) - E(4,2) = E(4,4)*E(4,2) - E(4,3) = E(4,4)*E(4,3) - - do J = 1,M_ - do I = 1,M_ - DD(I,J,1,K) = -E(I,1)*CC(1,J,1,K)-E(I,2)*CC(2,J,1,K) & - -E(I,3)*CC(3,J,1,K)-E(I,4)*CC(4,J,1,K) - enddo - RR(J,1,K) = E(J,1)*H(1,1,K)+E(J,2)*H(2,1,K) & - +E(J,3)*H(3,1,K)+E(J,4)*H(4,1,K) - enddo - -!----------CONTINUE THROUGH ALL DEPTH POINTS ID=2 TO ID=ND-1 - do L = 2,ND-1 - - do J = 1,M_ - do I = 1,M_ - B(I,J,L,K) = B(I,J,L,K) + A(I,L,K)*DD(I,J,L-1,K) - enddo - H(J,L,K) = H(J,L,K) - A(J,L,K)*RR(J,L-1,K) - enddo - - do J = 1,M_ - do I = 1,M_ - E(I,J) = B(I,J,L,K) - enddo - enddo - -!---setup L & U matrices - E(2,1) = E(2,1)/E(1,1) - E(2,2) = E(2,2)-E(2,1)*E(1,2) - E(2,3) = E(2,3)-E(2,1)*E(1,3) - E(2,4) = E(2,4)-E(2,1)*E(1,4) - E(3,1) = E(3,1)/E(1,1) - E(3,2) = (E(3,2)-E(3,1)*E(1,2))/E(2,2) - E(3,3) = E(3,3)-E(3,1)*E(1,3)-E(3,2)*E(2,3) - E(3,4) = E(3,4)-E(3,1)*E(1,4)-E(3,2)*E(2,4) - E(4,1) = E(4,1)/E(1,1) - E(4,2) = (E(4,2)-E(4,1)*E(1,2))/E(2,2) - E(4,3) = (E(4,3)-E(4,1)*E(1,3)-E(4,2)*E(2,3))/E(3,3) - E(4,4) = E(4,4)-E(4,1)*E(1,4)-E(4,2)*E(2,4)-E(4,3)*E(3,4) -!---invert L - E(4,3) = -E(4,3) - E(4,2) = -E(4,2)-E(4,3)*E(3,2) - E(4,1) = -E(4,1)-E(4,2)*E(2,1)-E(4,3)*E(3,1) - E(3,2) = -E(3,2) - E(3,1) = -E(3,1)-E(3,2)*E(2,1) - E(2,1) = -E(2,1) -!---invert U - E(4,4) = 1.d0/E(4,4) - E(3,4) = -E(3,4)*E(4,4)/E(3,3) - E(3,3) = 1.d0/E(3,3) - E(2,4) = -(E(2,3)*E(3,4)+E(2,4)*E(4,4))/E(2,2) - E(2,3) = -E(2,3)*E(3,3)/E(2,2) - E(2,2) = 1.d0/E(2,2) - E(1,4) = -(E(1,2)*E(2,4)+E(1,3)*E(3,4)+E(1,4)*E(4,4))/E(1,1) - E(1,3) = -(E(1,2)*E(2,3)+E(1,3)*E(3,3))/E(1,1) - E(1,2) = -E(1,2)*E(2,2)/E(1,1) - E(1,1) = 1.d0/E(1,1) -!---multiply U-invers * L-inverse - E(1,1) = E(1,1)+E(1,2)*E(2,1)+E(1,3)*E(3,1)+E(1,4)*E(4,1) - E(1,2) = E(1,2)+E(1,3)*E(3,2)+E(1,4)*E(4,2) - E(1,3) = E(1,3)+E(1,4)*E(4,3) - E(2,1) = E(2,2)*E(2,1)+E(2,3)*E(3,1)+E(2,4)*E(4,1) - E(2,2) = E(2,2)+E(2,3)*E(3,2)+E(2,4)*E(4,2) - E(2,3) = E(2,3)+E(2,4)*E(4,3) - E(3,1) = E(3,3)*E(3,1)+E(3,4)*E(4,1) - E(3,2) = E(3,3)*E(3,2)+E(3,4)*E(4,2) - E(3,3) = E(3,3)+E(3,4)*E(4,3) - E(4,1) = E(4,4)*E(4,1) - E(4,2) = E(4,4)*E(4,2) - E(4,3) = E(4,4)*E(4,3) - - do J = 1,M_ - do I = 1,M_ - DD(I,J,L,K) = - E(I,J)*C(J,L,K) - enddo - RR(J,L,K) = E(J,1)*H(1,L,K)+E(J,2)*H(2,L,K) & - + E(J,3)*H(3,L,K)+E(J,4)*H(4,L,K) - enddo - - enddo - -!---------FINAL DEPTH POINT: L=ND - L = ND - do J = 1,M_ - do I = 1,M_ - B(I,J,L,K) = B(I,J,L,K) & - + AA(I,1,L,K)*DD(1,J,L-1,K) + AA(I,2,L,K)*DD(2,J,L-1,K) & - + AA(I,3,L,K)*DD(3,J,L-1,K) + AA(I,4,L,K)*DD(4,J,L-1,K) - enddo - H(J,L,K) = H(J,L,K) & - - AA(J,1,L,K)*RR(1,L-1,K) - AA(J,2,L,K)*RR(2,L-1,K) & - - AA(J,3,L,K)*RR(3,L-1,K) - AA(J,4,L,K)*RR(4,L-1,K) - enddo - - do J = 1,M_ - do I = 1,M_ - E(I,J) = B(I,J,L,K) - enddo - enddo - -!---setup L & U matrices - E(2,1) = E(2,1)/E(1,1) - E(2,2) = E(2,2)-E(2,1)*E(1,2) - E(2,3) = E(2,3)-E(2,1)*E(1,3) - E(2,4) = E(2,4)-E(2,1)*E(1,4) - E(3,1) = E(3,1)/E(1,1) - E(3,2) = (E(3,2)-E(3,1)*E(1,2))/E(2,2) - E(3,3) = E(3,3)-E(3,1)*E(1,3)-E(3,2)*E(2,3) - E(3,4) = E(3,4)-E(3,1)*E(1,4)-E(3,2)*E(2,4) - E(4,1) = E(4,1)/E(1,1) - E(4,2) = (E(4,2)-E(4,1)*E(1,2))/E(2,2) - E(4,3) = (E(4,3)-E(4,1)*E(1,3)-E(4,2)*E(2,3))/E(3,3) - E(4,4) = E(4,4)-E(4,1)*E(1,4)-E(4,2)*E(2,4)-E(4,3)*E(3,4) -!---invert L - E(4,3) = -E(4,3) - E(4,2) = -E(4,2)-E(4,3)*E(3,2) - E(4,1) = -E(4,1)-E(4,2)*E(2,1)-E(4,3)*E(3,1) - E(3,2) = -E(3,2) - E(3,1) = -E(3,1)-E(3,2)*E(2,1) - E(2,1) = -E(2,1) -!---invert U - E(4,4) = 1.d0/E(4,4) - E(3,4) = -E(3,4)*E(4,4)/E(3,3) - E(3,3) = 1.d0/E(3,3) - E(2,4) = -(E(2,3)*E(3,4)+E(2,4)*E(4,4))/E(2,2) - E(2,3) = -E(2,3)*E(3,3)/E(2,2) - E(2,2) = 1.d0/E(2,2) - E(1,4) = -(E(1,2)*E(2,4)+E(1,3)*E(3,4)+E(1,4)*E(4,4))/E(1,1) - E(1,3) = -(E(1,2)*E(2,3)+E(1,3)*E(3,3))/E(1,1) - E(1,2) = -E(1,2)*E(2,2)/E(1,1) - E(1,1) = 1.d0/E(1,1) -!---multiply U-invers * L-inverse - E(1,1) = E(1,1)+E(1,2)*E(2,1)+E(1,3)*E(3,1)+E(1,4)*E(4,1) - E(1,2) = E(1,2)+E(1,3)*E(3,2)+E(1,4)*E(4,2) - E(1,3) = E(1,3)+E(1,4)*E(4,3) - E(2,1) = E(2,2)*E(2,1)+E(2,3)*E(3,1)+E(2,4)*E(4,1) - E(2,2) = E(2,2)+E(2,3)*E(3,2)+E(2,4)*E(4,2) - E(2,3) = E(2,3)+E(2,4)*E(4,3) - E(3,1) = E(3,3)*E(3,1)+E(3,4)*E(4,1) - E(3,2) = E(3,3)*E(3,2)+E(3,4)*E(4,2) - E(3,3) = E(3,3)+E(3,4)*E(4,3) - E(4,1) = E(4,4)*E(4,1) - E(4,2) = E(4,4)*E(4,2) - E(4,3) = E(4,4)*E(4,3) - - do J = 1,M_ - RR(J,L,K) = E(J,1)*H(1,L,K)+E(J,2)*H(2,L,K) & - +E(J,3)*H(3,L,K)+E(J,4)*H(4,L,K) - enddo - -!-----------BACK SOLUTION - do L = ND-1,1,-1 - do J = 1,M_ - RR(J,L,K) = RR(J,L,K) & - + DD(J,1,L,K)*RR(1,L+1,K) + DD(J,2,L,K)*RR(2,L+1,K) & - + DD(J,3,L,K)*RR(3,L+1,K) + DD(J,4,L,K)*RR(4,L+1,K) - enddo - enddo - -!----------mean J & H - do L = 1,ND,2 - FJ(L,K) = RR(1,L,K)*WT(1) + RR(2,L,K)*WT(2) & - + RR(3,L,K)*WT(3) + RR(4,L,K)*WT(4) - enddo - do L = 2,ND,2 - FJ(L,K) = RR(1,L,K)*WT(1)*EMU(1) + RR(2,L,K)*WT(2)*EMU(2) & - + RR(3,L,K)*WT(3)*EMU(3) + RR(4,L,K)*WT(4)*EMU(4) - enddo - -!---FJTOP = scaled diffuse flux out top-of-atmosphere (limit = mu0) -!---FJBOT = scaled diffuse flux onto surface: -!---ZFLUX = reflect/(1 + reflect) * mu0 * Fsolar(lower boundary) -!---SUMBX = flux from Lambert reflected I+ - SUMT = RR(1, 1,K)*WT(1)*EMU(1) + RR(2, 1,K)*WT(2)*EMU(2) & - + RR(3, 1,K)*WT(3)*EMU(3) + RR(4, 1,K)*WT(4)*EMU(4) - SUMB = RR(1,ND,K)*WT(1)*EMU(1) + RR(2,ND,K)*WT(2)*EMU(2) & - + RR(3,ND,K)*WT(3)*EMU(3) + RR(4,ND,K)*WT(4)*EMU(4) - SUMBX = 4.d0*SUMB*RFL(K)/(1.0d0 + RFL(K)) + ZFLUX(K) - - FJTOP(K) = 4.d0*SUMT - FJBOT(K) = 4.d0*SUMB - SUMBX - - endif - enddo - - END SUBROUTINE BLKSLV - - -!----------------------------------------------------------------------- - subroutine GEN_ID(POMEGA,FZ,ZTAU,ZFLUX,RFL,PM,PM0 & - ,B,CC,AA,A,H,C, ND) -!----------------------------------------------------------------------- -! Generates coefficient matrices for the block tri-diagonal system: -! A(I)*X(I-1) + B(I)*X(I) + C(I)*X(I+1) = H(I) -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: ND - real*8, intent(in) :: POMEGA(M2_,N_),PM(M_,M2_),PM0(M2_) - real*8, intent(in) :: ZFLUX,RFL - real*8, intent(in),dimension(N_) :: FZ,ZTAU - - real*8, intent(out),dimension(M_,M_,N_) :: B,AA,CC - real*8, intent(out),dimension(M_,N_) :: A,C,H - - integer I, J, K, L1,L2,LL - real*8 SUM0, SUM1, SUM2, SUM3 - real*8 DELTAU, D1, D2, SURFAC -! - real*8, dimension(M_,M_) :: S,T,U,V,W -!--------------------------------------------- - -!---------upper boundary: 2nd-order terms - L1 = 1 - L2 = 2 - do I = 1,M_ - SUM0 = & - POMEGA(1,L1)*PM(I,1)*PM0(1) + POMEGA(3,L1)*PM(I,3)*PM0(3) & - + POMEGA(5,L1)*PM(I,5)*PM0(5) + POMEGA(7,L1)*PM(I,7)*PM0(7) - SUM2 = & - POMEGA(1,L2)*PM(I,1)*PM0(1) + POMEGA(3,L2)*PM(I,3)*PM0(3) & - + POMEGA(5,L2)*PM(I,5)*PM0(5) + POMEGA(7,L2)*PM(I,7)*PM0(7) - SUM1 = & - POMEGA(2,L1)*PM(I,2)*PM0(2) + POMEGA(4,L1)*PM(I,4)*PM0(4) & - + POMEGA(6,L1)*PM(I,6)*PM0(6) + POMEGA(8,L1)*PM(I,8)*PM0(8) - SUM3 = & - POMEGA(2,L2)*PM(I,2)*PM0(2) + POMEGA(4,L2)*PM(I,4)*PM0(4) & - + POMEGA(6,L2)*PM(I,6)*PM0(6) + POMEGA(8,L2)*PM(I,8)*PM0(8) - H(I,L1) = 0.5d0*(SUM0*FZ(L1) + SUM2*FZ(L2)) - A(I,L1) = 0.5d0*(SUM1*FZ(L1) + SUM3*FZ(L2)) - enddo - - do I = 1,M_ - do J = 1,I - SUM0 = & - POMEGA(1,L1)*PM(I,1)*PM(J,1) + POMEGA(3,L1)*PM(I,3)*PM(J,3) & - + POMEGA(5,L1)*PM(I,5)*PM(J,5) + POMEGA(7,L1)*PM(I,7)*PM(J,7) - SUM2 = & - POMEGA(1,L2)*PM(I,1)*PM(J,1) + POMEGA(3,L2)*PM(I,3)*PM(J,3) & - + POMEGA(5,L2)*PM(I,5)*PM(J,5) + POMEGA(7,L2)*PM(I,7)*PM(J,7) - SUM1 = & - POMEGA(2,L1)*PM(I,2)*PM(J,2) + POMEGA(4,L1)*PM(I,4)*PM(J,4) & - + POMEGA(6,L1)*PM(I,6)*PM(J,6) + POMEGA(8,L1)*PM(I,8)*PM(J,8) - SUM3 = & - POMEGA(2,L2)*PM(I,2)*PM(J,2) + POMEGA(4,L2)*PM(I,4)*PM(J,4) & - + POMEGA(6,L2)*PM(I,6)*PM(J,6) + POMEGA(8,L2)*PM(I,8)*PM(J,8) - S(I,J) = - SUM2*WT(J) - S(J,I) = - SUM2*WT(I) - T(I,J) = - SUM1*WT(J) - T(J,I) = - SUM1*WT(I) - V(I,J) = - SUM3*WT(J) - V(J,I) = - SUM3*WT(I) - B(I,J,L1) = - 0.5d0*(SUM0 + SUM2)*WT(J) - B(J,I,L1) = - 0.5d0*(SUM0 + SUM2)*WT(I) - enddo - enddo - - do I = 1,M_ - S(I,I) = S(I,I) + 1.0d0 - T(I,I) = T(I,I) + 1.0d0 - V(I,I) = V(I,I) + 1.0d0 - B(I,I,L1)= B(I,I,L1) + 1.0d0 - - C(I,L1)= S(I,1)*A(1,L1)/EMU(1) + S(I,2)*A(2,L1)/EMU(2) & - + S(I,3)*A(3,L1)/EMU(3) + S(I,4)*A(4,L1)/EMU(4) - enddo - - do I = 1,M_ - do J = 1,M_ - W(J,I) = S(J,1)*T(1,I)/EMU(1) + S(J,2)*T(2,I)/EMU(2) & - + S(J,3)*T(3,I)/EMU(3) + S(J,4)*T(4,I)/EMU(4) - U(J,I) = S(J,1)*V(1,I)/EMU(1) + S(J,2)*V(2,I)/EMU(2) & - + S(J,3)*V(3,I)/EMU(3) + S(J,4)*V(4,I)/EMU(4) - enddo - enddo -!-------------upper boundary, 2nd-order, C-matrix is full (CC) - DELTAU = ZTAU(L2) - ZTAU(L1) - D2 = 0.25d0*DELTAU - do I = 1,M_ - do J = 1,M_ - B(I,J,L1) = B(I,J,L1) + D2*W(I,J) - CC(I,J,L1) = D2*U(I,J) - enddo - H(I,L1) = H(I,L1) + 2.0d0*D2*C(I,L1) - A(I,L1) = 0.0d0 - enddo - do I = 1,M_ - D1 = EMU(I)/DELTAU - B(I,I,L1) = B(I,I,L1) + D1 - CC(I,I,L1) = CC(I,I,L1) - D1 - enddo - -!------------intermediate points: can be even or odd, A & C diagonal -!---mid-layer h-points, Legendre terms 2,4,6,8 - do LL=2,ND-1,2 - DELTAU = ZTAU(LL+1) - ZTAU(LL-1) - do I = 1,M_ - A(I,LL) = EMU(I)/DELTAU - C(I,LL) = -A(I,LL) - H(I,LL) = FZ(LL)*( & - POMEGA(2,LL)*PM(I,2)*PM0(2) + POMEGA(4,LL)*PM(I,4)*PM0(4) & - + POMEGA(6,LL)*PM(I,6)*PM0(6) + POMEGA(8,LL)*PM(I,8)*PM0(8)) - enddo - do I = 1,M_ - do J=1,I - SUM0 = & - POMEGA(2,LL)*PM(I,2)*PM(J,2) + POMEGA(4,LL)*PM(I,4)*PM(J,4) & - +POMEGA(6,LL)*PM(I,6)*PM(J,6) + POMEGA(8,LL)*PM(I,8)*PM(J,8) - B(I,J,LL) = - SUM0*WT(J) - B(J,I,LL) = - SUM0*WT(I) - enddo - enddo - do I = 1,M_ - B(I,I,LL) = B(I,I,LL) + 1.0d0 - enddo - enddo - -!---odd-layer j-points, Legendre terms 1,3,5,7 - do LL=3,ND-2,2 - DELTAU = ZTAU(LL+1) - ZTAU(LL-1) - do I = 1,M_ - A(I,LL) = EMU(I)/DELTAU - C(I,LL) = -A(I,LL) - H(I,LL) = FZ(LL)*( & - POMEGA(1,LL)*PM(I,1)*PM0(1) + POMEGA(3,LL)*PM(I,3)*PM0(3) & - + POMEGA(5,LL)*PM(I,5)*PM0(5) + POMEGA(7,LL)*PM(I,7)*PM0(7)) - enddo - do I = 1,M_ - do J=1,I - SUM0 = & - POMEGA(1,LL)*PM(I,1)*PM(J,1) + POMEGA(3,LL)*PM(I,3)*PM(J,3) & - +POMEGA(5,LL)*PM(I,5)*PM(J,5) + POMEGA(7,LL)*PM(I,7)*PM(J,7) - B(I,J,LL) = - SUM0*WT(J) - B(J,I,LL) = - SUM0*WT(I) - enddo - enddo - do I = 1,M_ - B(I,I,LL) = B(I,I,LL) + 1.0d0 - enddo - enddo - -!---------lower boundary: 2nd-order terms - L1 = ND - L2 = ND-1 - do I = 1,M_ - SUM0 = & - POMEGA(1,L1)*PM(I,1)*PM0(1) + POMEGA(3,L1)*PM(I,3)*PM0(3) & - + POMEGA(5,L1)*PM(I,5)*PM0(5) + POMEGA(7,L1)*PM(I,7)*PM0(7) - SUM2 = & - POMEGA(1,L2)*PM(I,1)*PM0(1) + POMEGA(3,L2)*PM(I,3)*PM0(3) & - + POMEGA(5,L2)*PM(I,5)*PM0(5) + POMEGA(7,L2)*PM(I,7)*PM0(7) - SUM1 = & - POMEGA(2,L1)*PM(I,2)*PM0(2) + POMEGA(4,L1)*PM(I,4)*PM0(4) & - + POMEGA(6,L1)*PM(I,6)*PM0(6) + POMEGA(8,L1)*PM(I,8)*PM0(8) - SUM3 = & - POMEGA(2,L2)*PM(I,2)*PM0(2) + POMEGA(4,L2)*PM(I,4)*PM0(4) & - + POMEGA(6,L2)*PM(I,6)*PM0(6) + POMEGA(8,L2)*PM(I,8)*PM0(8) - H(I,L1) = 0.5d0*(SUM0*FZ(L1) + SUM2*FZ(L2)) - A(I,L1) = 0.5d0*(SUM1*FZ(L1) + SUM3*FZ(L2)) - enddo - - do I = 1,M_ - do J = 1,I - SUM0 = & - POMEGA(1,L1)*PM(I,1)*PM(J,1) + POMEGA(3,L1)*PM(I,3)*PM(J,3) & - + POMEGA(5,L1)*PM(I,5)*PM(J,5) + POMEGA(7,L1)*PM(I,7)*PM(J,7) - SUM2 = & - POMEGA(1,L2)*PM(I,1)*PM(J,1) + POMEGA(3,L2)*PM(I,3)*PM(J,3) & - + POMEGA(5,L2)*PM(I,5)*PM(J,5) + POMEGA(7,L2)*PM(I,7)*PM(J,7) - SUM1 = & - POMEGA(2,L1)*PM(I,2)*PM(J,2) + POMEGA(4,L1)*PM(I,4)*PM(J,4) & - + POMEGA(6,L1)*PM(I,6)*PM(J,6) + POMEGA(8,L1)*PM(I,8)*PM(J,8) - SUM3 = & - POMEGA(2,L2)*PM(I,2)*PM(J,2) + POMEGA(4,L2)*PM(I,4)*PM(J,4) & - + POMEGA(6,L2)*PM(I,6)*PM(J,6) + POMEGA(8,L2)*PM(I,8)*PM(J,8) - S(I,J) = - SUM2*WT(J) - S(J,I) = - SUM2*WT(I) - T(I,J) = - SUM1*WT(J) - T(J,I) = - SUM1*WT(I) - V(I,J) = - SUM3*WT(J) - V(J,I) = - SUM3*WT(I) - B(I,J,L1) = - 0.5d0*(SUM0 + SUM2)*WT(J) - B(J,I,L1) = - 0.5d0*(SUM0 + SUM2)*WT(I) - enddo - enddo - - do I = 1,M_ - S(I,I) = S(I,I) + 1.0d0 - T(I,I) = T(I,I) + 1.0d0 - V(I,I) = V(I,I) + 1.0d0 - B(I,I,L1)= B(I,I,L1) + 1.0d0 - - C(I,L1)= S(I,1)*A(1,L1)/EMU(1) + S(I,2)*A(2,L1)/EMU(2) & - + S(I,3)*A(3,L1)/EMU(3) + S(I,4)*A(4,L1)/EMU(4) - enddo - - do I = 1,M_ - do J = 1,M_ - W(J,I) = S(J,1)*T(1,I)/EMU(1) + S(J,2)*T(2,I)/EMU(2) & - + S(J,3)*T(3,I)/EMU(3) + S(J,4)*T(4,I)/EMU(4) - U(J,I) = S(J,1)*V(1,I)/EMU(1) + S(J,2)*V(2,I)/EMU(2) & - + S(J,3)*V(3,I)/EMU(3) + S(J,4)*V(4,I)/EMU(4) - enddo - enddo - -!------------lower boundary, 2nd-order, A-matrix is full (AA) - DELTAU = ZTAU(L1) - ZTAU(L2) - D2 = 0.25d0*DELTAU - SURFAC = 4.0d0*RFL/(1.0d0 + RFL) - do I = 1,M_ - D1 = EMU(I)/DELTAU - SUM0 = D1 + D2*(W(I,1)+W(I,2)+W(I,3)+W(I,4)) - SUM1 = SURFAC*SUM0 - do J = 1,M_ - AA(I,J,L1) = - D2*U(I,J) - B(I,J,L1) = B(I,J,L1) + D2*W(I,J) - SUM1*EMU(J)*WT(J) - enddo - H(I,L1) = H(I,L1) - 2.0d0*D2*C(I,L1) + SUM0*ZFLUX - enddo - - do I = 1,M_ - D1 = EMU(I)/DELTAU - AA(I,I,L1) = AA(I,I,L1) + D1 - B(I,I,L1) = B(I,I,L1) + D1 - C(I,L1) = 0.0d0 - enddo - - END SUBROUTINE GEN_ID - -!<<<<<<<<<<<<<<<<<<<<<<<<<>>special for Strat Sulfate Aerosols (SSA)! -! K = 01 S-Bkg just use 220K & 70 wt% values for now: KK = 3 + 1 = 4 -! K = 02 S-Vol LOGN:r=.080 s=.800 n=1.514/.../1.435 refKK = 9 + 4 = 13 -!>>> but the output OPTD, SSALB,SLEG now has a full SX-=27 wavelengths, not 5 (200-300-..-999mm) - - implicit none - - real*8, intent(in):: PATH ! path (g/m2) of aerosol/cloud - integer,intent(inout):: K ! index of cloud/aerosols - real*8, intent(out):: OPTD(S_) ! optical depth of layer - real*8, intent(out):: SSALB(S_) ! single-scattering albedo - real*8, intent(out):: SLEG(8,S_) ! scatt phase fn (Leg coeffs) - - integer I,J, KK - real*8 XTINCT, REFF,RHO - - if (K .eq. 1) then - KK = 4 ! background, 220K, 70 wt% - elseif (K .eq. 2) then - KK = 13 ! volcanic, 220K, 70 wt% - else - call EXITC ('OPTICS: SSA index out-of-range') - endif - - REFF = RSS(KK) - RHO = DSS(KK) - do J=1,S_ -!---extinction K(m2/g) = Q(wvl) / [4/3 * Reff(micron) * aerosol-density(g/cm3)] - XTINCT = 0.75d0*QSS(J,KK)/(REFF*RHO) - OPTD(J) = PATH*XTINCT - SSALB(J) = SSS(J,KK) - do I=1,8 - SLEG(I,J) = PSS(I,J,KK) - enddo - enddo - K = KK - - END SUBROUTINE OPTICS - - -!------------------------------------------------------------------------------ - subroutine OPTICA (OPTD,SSALB,SLEG, PATH,RELH,K) -!------------------------------------------------------------------------------ -!---for the UCI aerosol data sets, calculates optical properties at fast-JX's -! std 5 wavelengths:200-300-400-600-999nm -!---UCI aersols optical data v-7.4+ -! >>>special for Strat Sulfate Aerosols (SSA) #1 & #2 uses subroutine OPTICS! -! xxx 01 S-Bkg LOGN:r=.090 s=.600 n=1.514/.../1.435 reff=0.221___G=.0523_rho=1.630 -! xxx 02 S-Vol LOGN:r=.080 s=.800 n=1.514/.../1.435 reff=0.386___G=.0721_rho=1.630 -!03 UT-sulfate LOGN:r=0.05 s=.693 n=1.44 reff=0.166___G=.0205_rho=1.769 -!04 UT-sulfate LOGN:r=0.05 s=.693 n=1.46 reff=0.166___G=.0205_rho=1.769 -!05 UT-sulfatM LOGN:r=.050 s=.642 n=1.53 reff=0.140___G=.0179_rho=1.769 -!06 UM-BC1 LOGN:r=.050 s=.642 n=1.80+0.50i reff=0.140___G=.0179_rho=1.500 -!07 UM-BC2 LOGN:r=.080 s=.501 n=1.80+0.50i reff=0.150___G=.0332_rho=1.500 -!08 UM-BB08 (%BC)LOGN:r=.080 s=.500 n=1.552+0.04i reff=0.149___G=.0331_rho=1.230 -!09 UM-FF04 (%BC)LOGN:r=.050 s=.642 n=1.541+0.02i reff=0.140___G=.0179_rho=1.212 -!10 UM-FF10 (%BC)LOGN:r=.050 s=.642 n=1.557+0.05i reff=0.140___G=.0179_rho=1.230 -!11 MDust.15 (R.V. Martin generated phase fns) reff=0.150___G=1.000_rho=2.600 -!12 MDust.25 (R.V. Martin generated phase fns) reff=0.250___G=1.000_rho=2.600 -!13 MDust.40 (R.V. Martin generated phase fns) reff=0.400___G=1.000_rho=2.600 -!14 MDust.80 (R.V. Martin generated phase fns) reff=0.800___G=1.000_rho=2.600 -!15 MDust1.5 (R.V. Martin generated phase fns) reff=1.500___G=1.000_rho=2.600 -!16 MDust2.5 (R.V. Martin generated phase fns) reff=2.500___G=1.000_rho=2.600 -!17 MDust4.0 (R.V. Martin generated phase fns) reff=4.000___G=1.000_rho=2.600 - - implicit none - - real*8, intent(out):: OPTD(S_) ! optical depth of layer - real*8, intent(out):: SSALB(S_) ! single-scattering albedo - real*8, intent(out):: SLEG(8,S_) ! scatt phase fn (Leg coeffs) - real*8, intent(in):: PATH ! path (g/m2) of aerosol/cloud - real*8, intent(in):: RELH ! relative humidity (0.00->1.00+) - integer,intent(inout):: K ! index of cloud/aerosols - - integer I,J,JMIE - real*8 XTINCT, REFF,RHO,WAVE, QAAX,SAAX - - if (K.gt.NAA .or. K.lt.3) & - call EXITC ('OPTICA: aerosol index out-of-range') - - REFF = RAA(K) - RHO = DAA(K) - do J = 1,S_ - WAVE = WL(J) ! WL(1:S_=1:27) is in common = mean wavelength (nm) -!---Pick nearest Mie wavelength to get scattering properites------------ - JMIE=1 ! use 200 nm prop for <255 nm - if( WAVE .gt. 255.d0 ) JMIE=2 ! use 300 nm prop for 255-355 nm - if( WAVE .gt. 355.d0 ) JMIE=3 ! use 400 nm prop for 355-500 nm - if( WAVE .gt. 500.d0 ) JMIE=4 - if( WAVE .gt. 800.d0 ) JMIE=5 - QAAX = QAA(JMIE,K) - if( WAVE .gt. 1000.d0) QAAX = QAAX*1000.d0/WAVE - SAAX = SAA(JMIE,K) -!---extinction K(m2/g) = Q(wvl) / [4/3 * Reff(micron) * aerosol-density(g/cm3)] - XTINCT = 0.75d0*QAAX/(REFF*RHO) - OPTD(J) = PATH*XTINCT - SSALB(J) = SAAX - do I=1,8 - SLEG(I,J) = PAA(I,JMIE,K) - enddo - enddo - - END SUBROUTINE OPTICA - - -!------------------------------------------------------------------------------ - subroutine OPTICM (OPTD,SSALB,SLEG, PATH,RELH,LL) -!------------------------------------------------------------------------------ -!---U Michigan aerosol data sets, this generate fast-JX data formats. -!---Approximates the Legendre expansion(L) of the scattering phase fn as (2*L+1)*g**L -!---UMAER(I,J,K,L): -! I=1:3 = [SSAbldeo, g, k-ext(m2/g)] -! J=1:5 = [200, 300, 400, (550,) 600 , 1000 nm] -! K=1:21= [0, 5, 10, 15, ..., 90, 95, 99 %RelHum] -! L=1:33= UM aerosol types [SULF, SS-1,-2,-3,-4, DD-1,-2,-3,-4, FF00(0%BC), -! FF02, ...FF14(14%BC), BB00, BB02, ...BB30(30%BC)] - implicit none - - real*8, intent(out):: OPTD(S_) ! optical depth of layer - real*8, intent(out):: SSALB(S_) ! single-scattering albedo - real*8, intent(out):: SLEG(8,S_) ! scatt phase fn (Leg coeffs) - real*8, intent(in):: PATH ! path (g/m2) of aerosol/cloud - real*8, intent(in):: RELH ! relative humidity (0.00->1.00) - integer,intent(in):: LL ! index of cloud/aerosols - - integer KR,J,L, JMIE - real*8 R,FRH, GCOS, XTINCT, WAVE - -!---calculate fast-JX properties at the std 5 wavelengths:200-300-400-600-999nm -!---extrapolate phase fn from first term (g) - L = LL - if (L.lt.1 .or. L.gt.33) & - call EXITC ('OPTICM: aerosol index out-of-range') -!---pick nearest Relative Humidity - KR = 20.d0*RELH + 1.5d0 - KR = max(1, min(21, KR)) - - do J = 1,S_ - WAVE = WL(J) -!---Pick nearest Mie wavelength to get scattering properites------------ - JMIE=1 ! use 200 nm prop for <255 nm - if( WAVE .gt. 255.d0 ) JMIE=2 ! use 300 nm prop for 255-355 nm - if( WAVE .gt. 355.d0 ) JMIE=3 ! use 400 nm prop for 355-500 nm - if( WAVE .gt. 500.d0 ) JMIE=4 - if( WAVE .gt. 800.d0 ) JMIE=5 -!---extinction K(m2/g) = Q(wvl) / [4/3 * Reff(micron) * aerosol-density(g/cm3)] - XTINCT = UMAER(3,JMIE,KR,L) -! rescale/reduce optical depth as 1/WL for > 1000 nm - if( WAVE .gt. 1000.d0) XTINCT = XTINCT*1000.d0/WAVE - OPTD(J) = PATH*XTINCT - SSALB(J) = UMAER(1,JMIE,KR,L) - GCOS = UMAER(2,JMIE,KR,L) - SLEG(1,J) = 1.d0 - SLEG(2,J) = 3.d0*GCOS - SLEG(3,J) = 5.d0*GCOS**2 - SLEG(4,J) = 7.d0*GCOS**3 - SLEG(5,J) = 9.d0*GCOS**4 - SLEG(6,J) = 11.d0*GCOS**5 - SLEG(7,J) = 13.d0*GCOS**6 - SLEG(8,J) = 15.d0*GCOS**7 - enddo - - END SUBROUTINE OPTICM - - -!----------------------------------------------------------------------- - subroutine JRATET(PPJ,TTJ,FFF, VALJL,LU,NJXU) -!----------------------------------------------------------------------- -! in: -! PPJ(L_+1) = pressure profile at edges -! TTJ(L_+1) = = temperatures at mid-level -! FFF(K=1:NW, L=1:L_) = mean actinic flux -! out: -! VALJL(L_,JX_) JX_ = no of dimensioned J-values in CTM code -!----------------------------------------------------------------------- - implicit none - - integer, intent(in) :: LU,NJXU - real*8, intent(in) :: PPJ(LU+1),TTJ(LU+1) - real*8, intent(inout) :: FFF(W_,LU) - real*8, intent(out), dimension(LU,NJXU) :: VALJL - - real*8 VALJ(X_) - real*8 QO2TOT, QO3TOT, QO31DY, QO31D, QQQT, TFACT - real*8 TT,PP,DD,TT200,TFACA,TFAC0,TFAC1,TFAC2,QQQA,QQ2,QQ1A,QQ1B - integer J,K,L, IV - - if (NJXU .lt. NJX) then - write(6,'(A,2I5)') 'NJXU' - - L = LU+2 - write(6,'(1x,i3,0p,f6.2,f10.3,f7.2,1p,4e9.2,0p,f10.4,2f8.5,2i3)') & - L,ZZJ(L)*1.d-5,PPJ(L) - - XCOLO2 = 0.d0 - XCOLO3 = 0.d0 - ZTOP = ZZJ(LU+2) - - do L = LU+1,1,-1 - XCOLO2 = XCOLO2 + DDJ(L)*0.20948d0 - XCOLO3 = XCOLO3 + OOJ(L) - DELZ = ZTOP-ZZJ(L) - ZTOP = ZZJ(L) - ZKM = ZZJ(L)*1.d-5 - DAIR = DDJ(L)/DELZ - DOZO = OOJ(L)/DELZ - - write(6,'(1x,i3,0p,f6.2,f10.3,f7.2,1p,4e9.2,0p,f10.4,2f8.5,2i3)') & - L,ZKM,PPJ(L),TTJ(L),DAIR,DOZO,XCOLO2,XCOLO3,DTAU6(L), & - POMEG6(1,L),POMEG6(2,L)/3.d0, JXTRA(L+L),JXTRA(L+L-1) - - enddo - - END SUBROUTINE JP_ATM - - -!----------------------------------------------------------------------- - subroutine JP_ATM0(PPJ,TTJ,DDJ,OOJ,ZZJ, LU) -!----------------------------------------------------------------------- - implicit none -!----------------------------------------------------------------------- -!---the CTM has L_ = LU layers and fast-JX adds layer LU+1 -!---the pressure and altitude(Z) are on layer edge (LU+2) - - integer,intent(in) :: LU - real*8, intent(in), dimension(LU+2) :: PPJ,ZZJ - real*8, intent(in), dimension(LU+1) :: TTJ,DDJ,OOJ -!----------------------------------------------------------------------- - integer I,J,K,L - real*8 XCOLO2,XCOLO3,ZKM,DELZ,ZTOP - write(6,'(4a)') ' L z(km) p T ', & - ' d(air) d(O3)',' col(O2) col(O3) d-TAU SS-alb', & - ' g(cos) CTM lyr=>' - L = LU+2 - write(6,'(1x,i3,0p,f6.2,f10.3,f7.2,1p,4e9.2,0p,f10.4,2f8.5,2i3)') & - L,ZZJ(L)*1.d-5,PPJ(L) - XCOLO2 = 0.d0 - XCOLO3 = 0.d0 - ZTOP = ZZJ(LU+2) - do L = LU+1,1,-1 - XCOLO2 = XCOLO2 + DDJ(L)*0.20948d0 - XCOLO3 = XCOLO3 + OOJ(L) - DELZ = ZTOP-ZZJ(L) - ZTOP = ZZJ(L) - ZKM = ZZJ(L)*1.d-5 - write(6,'(1x,i3,0p,f6.2,f10.3,f7.2,1p,4e9.2,0p,f10.4,2f8.5,2i3)') & - L,ZKM,PPJ(L),TTJ(L),DDJ(L)/DELZ,OOJ(L)/DELZ, & - XCOLO2,XCOLO3 - enddo - - END SUBROUTINE JP_ATM0 - - -!----------------------------------------------------------------------- - subroutine SPHERE2(U0,RAD,ZHL,ZZHT,AMF2, L1U,LJX1U) -!----------------------------------------------------------------------- -!----new v6.2: does AirMassFactors for mid-layer, needed for SZA ~ 90 -! This new AMF2 does each of the half-layers of the CTM separately, -! whereas the original, based on the pratmo code did the whole layers -! and thus calculated the ray-path to the CTM layer edges, and the middle. -! Since fast-JX is meant to calculate the intensity at the mid-layer, the -! solar beam at low sun (interpolated between layer edges) was incorrect. -! This new model does make some approximations of the geometry of the layers: -! the CTM layer is split evenly in mass (good) and in height (approx). -! -! Calculation of spherical geometry; derive tangent heights, slant path -! lengths and air mass factor for each layer. Not called when -! SZA > 98 degrees. Beyond 90 degrees, include treatment of emergent -! beam (where tangent height is below altitude J-value desired at). -!----------------------------------------------------------------------- -! in: -! U0 cos(solar zenith angle) -! RAD radius of Earth mean sea level (cm) -! ZHL(L) height (cm) of the bottome edge of CTM level L -! ZZHT scale height (cm) used above top of CTM (ZHL(L_+1)) -! L1U dimension of CTM = levels +1 (L+1 = above-CTM level) -! out: -! AMF2(I,J) = air mass factor for CTM level I for sunlight reaching J -! these are calcualted for both layer middle and layer edge -!----------------------------------------------------------------------- - implicit none - integer, intent(in) :: L1U, LJX1U - real*8, intent(in) :: U0,RAD,ZHL(L1U+1),ZZHT - real*8, intent(out) :: AMF2(2*LJX1U+1,2*LJX1U+1) - - integer, parameter :: LSPH_ = 100 - -! RZ Distance from centre of Earth to each point (cm) -! RQ Square of radius ratios -! SHADHT Shadow height for the current SZA -! XL Slant path between points - - integer I, J, K, II, L2 - real*8 XMU1,XMU2,XL,DIFF,SHADHT,RZ(LSPH_+1) - real*8 RZ2(2*LSPH_+1),RQ2(2*LSPH_+1) - -!--- must have top-of-atmos (NOT top-of-CTM) defined -! ZHL(L1U+1) = ZHL(L1U) + ZZHT - - if (L1U .gt. LSPH_) then - call EXITC(' SPHERE2: temp arrays not large enough') - endif - - do II = 1,L1U - RZ(II) = RAD + ZHL(II) - enddo - RZ(L1U+1) = RZ(L1U) + ZZHT - -!---calculate heights for edges of split CTM-layers - L2 = 2*L1U - do II = 2,L2,2 - I = II/2 - RZ2(II-1) = RZ(I) - RZ2(II) = 0.5d0*(RZ(I)+RZ(I+1)) - enddo - RZ2(L2+1) = RZ(L1U+1) - do II = 1,L2 - RQ2(II) = (RZ2(II)/RZ2(II+1))**2 - enddo - -!---shadow height for SZA > 90 - if (U0 .lt. 0.0d0) then - SHADHT = RZ2(1)/dsqrt(1.0d0 - U0**2) - else - SHADHT = 0.d0 - endif - -!---up from the surface calculating the slant paths between each level -!--- and the level above, and deriving the appropriate Air Mass Factor - AMF2(:,:) = 0.d0 - - do 16 J = 1,2*L1U+1 - -! Air Mass Factors all zero if below the tangent height - if (RZ2(J) .lt. SHADHT) goto 16 -! Ascend from layer J calculating AMF2s - XMU1 = abs(U0) - do I = J,2*L1U - XMU2 = dsqrt(1.0d0 - RQ2(I)*(1.0d0-XMU1**2)) - XL = RZ2(I+1)*XMU2 - RZ2(I)*XMU1 - AMF2(I,J) = XL / (RZ2(I+1)-RZ2(I)) - XMU1 = XMU2 - enddo -!--fix above top-of-atmos (L=L1U+1), must set DTAU(L1U+1)=0 - AMF2(2*L1U+1,J) = 1.d0 -! -! Post-terminator case - Emergent Beam, calc air mass factors below layer - if (U0 .ge. 0.0d0) goto 16 - -! Descend from layer J - XMU1 = abs(U0) - do II = J-1,1,-1 - DIFF = RZ2(II+1)*sqrt(1.0d0-XMU1**2)-RZ2(II) - if (II.eq.1) DIFF = max(DIFF,0.d0) ! filter -! Tangent height below current level, keep going down - if (DIFF .lt. 0.0d0) then - XMU2 = sqrt(1.0d0 - (1.0d0-XMU1**2)/RQ2(II)) - XL = abs(RZ2(II+1)*XMU1-RZ2(II)*XMU2) -! Note that AMF2 is 2x since ray passes through layer on both sides of terminator - AMF2(II,J) = 2.d0*XL/(RZ2(II+1)-RZ2(II)) - XMU1 = XMU2 -! Lowest level - ray path passes through upper part of layer - else - XL = RZ2(II+1)*XMU1 - AMF2(II,J) = 2.d0*XL/(RZ2(II+1)-RZ2(II)) - goto 16 - endif - enddo - - 16 continue - - END SUBROUTINE SPHERE2 - - -!----------------------------------------------------------------------- - subroutine EXTRAL(DTAUX,L1X,L2X,NX,JTAUMX,ATAU,ATAU0, JXTRA) -!----------------------------------------------------------------------- -! -! new version 6.1, add sub-layers (JXTRA) to thick cloud/aerosol layers -! this version sets up log-spaced sub-layers of increasing thickness ATAU -! -! DTAUX(L=1:L1X) = Optical Depth in layer L (generally 600 nm OD) -! This can be just cloud or cloud+aerosol, it is used only to set -! the number in levels to insert in each layer L -! Set for log-spacing of tau levels, increasing top-down. -! -! N.B. the TTAU, etc calculated here are NOT used elsewhere - -!---The log-spacing parameters have been tested for convergence and chosen -!--- to be within 0.5% for ranges OD=1-500, rflect=0-100%, mu0=0.1-1.0 -!--- use of ATAU = 1.18 and min = 0.01, gives at most +135 pts for OD=100 -!--- ATAU = 1.12 now recommended for more -accurate heating rates (not J's) -!----------------------------------------------------------------------- -! - implicit none - integer, intent(in) :: JTAUMX,L1X,L2X !index of cloud/aerosol - integer, intent(in) :: NX !Mie scattering array size - real*8, intent(in) :: DTAUX(L1X) !cloud+3aerosol OD in each layer - real*8, intent(in) :: ATAU,ATAU0 - integer, intent(out):: JXTRA(L2X+1) !number of sub-layers to be added -! - integer JTOTL,I,L,L2 - real*8 TTAU(L2X+1),DTAUJ, ATAU1,ATAULN,ATAUM,ATAUN1 -! -!---Reinitialize arrays - TTAU(:) = 0.d0 - JXTRA(:) = 0 -! -!---combine these edge- and mid-layer points into grid of size: -!--- L2X+1 = 2*L1X+1 = 2*L_+3 -!---calculate column optical depths above each level, TTAU(1:L2X+1) -!--- note that TTAU(L2X+1)=0 and TTAU(1)=total OD -! -!---Divide thick layers to achieve better accuracy in the scattering code -!---In the original fast-J, equal sub-layers were chosen, this is wasteful -!---and this new code (ver 5.3) uses log-scale: -!--- Each succesive layer (down) increase thickness by ATAU > 1 -!--- e.g., if ATAU = 2, a layer with OD = 15 could be divided into -!--- 4 sub-layers with ODs = 1 - 2 - 4 - 8 -!---The key parameters are: -!--- ATAU = factor increase from one layer to the next -!--- ATAUMN = the smallest OD layer desired -!--- JTAUMX = maximum number of divisions (i.e., may not get to ATAUMN) -!---These are hardwired below, can be changed, but have been tested/optimized - - ATAU1 = ATAU - 1.d0 - ATAULN = log(ATAU) - TTAU(L2X+1) = 0.0d0 - do L2 = L2X,1,-1 - L = (L2+1)/2 - DTAUJ = 0.5d0 * DTAUX(L) - TTAU(L2) = TTAU(L2+1) + DTAUJ -!---Now compute the number of log-spaced sub-layers to be added in -!--- the interval TTAU(L2) > TTAU(L2+1) -!---The objective is to have successive TAU-layers increasing by factor ATAU >1 -!---the number of sub-layers + 1 - if (TTAU(L2) .lt. ATAU0) then - JXTRA(L2) = 0 - else - ATAUM = max(ATAU0, TTAU(L2+1)) - ATAUN1 = log(TTAU(L2)/ATAUM) / ATAULN - JXTRA(L2) = min(JTAUMX, max(0, int(ATAUN1 - 0.5d0))) - endif - enddo - -!---check on overflow of arrays, cut off JXTRA at lower L if too many levels - JTOTL = L2X + 2 - do L2 = L2X,1,-1 - JTOTL = JTOTL + JXTRA(L2) - if (JTOTL .gt. NX/2) then - write(6,'(A,2I5,F9.2)') 'EXTRAL: N_/L2_/L2-cutoff JXTRA:', & - NX,L2X,L2 - do L = L2,1,-1 - JXTRA(L) = 0 - enddo - go to 10 - endif - enddo - 10 continue - - END SUBROUTINE EXTRAL - -!<<<<<< maxCoresPerNode and + conf.mpiProcesses % maxCoresPerNode != 0): + print( + "ERROR: MORE THAN 40 MPI PROCESSES AND NOT " + "MULTIPLE OF 40, WHEN CTE-POWER ONLY HAS 40 CORES " + "PER NODE\n"); + raise + coresPerGPU = 10 + nGPUs = ceil(conf.mpiProcesses / coresPerGPU) + exec_str = "" + try: + ddt_pid = subprocess.check_output( + 'pidof -x $(ps cax | grep ddt)', shell=True) + if ddt_pid: + exec_str += 'ddt --connect ' + except Exception: + pass + exec_str += "mpirun -v -np " + str( + conf.mpiProcesses) + " --bind-to core " + if (conf.profileCuda == "nvprof" and conf.caseGpuCpu == + "GPU"): + pathNvprof = ("../../compile/power9/" + + conf.caseMulticellsOnecell + + str(conf.nCells) + "Cells" + ".nvprof ") + exec_str += ("nvprof --analysis-metrics -f -o " + + pathNvprof) + print("Saving profiling file in ", + os.path.abspath(os.getcwd()) + + "/" + pathNvprof + ".nvprof") + elif (conf.profileCuda == "nsight" and conf.caseGpuCpu + == "GPU"): + exec_str += ("/apps/NVIDIA-HPC-SDK/21.3/Linux_ppc64le" + "/21.3/profilers/Nsight_Compute/ncu ") + pathNvprof = ("../../compile/power9/" + + conf.caseMulticellsOnecell + + str(conf.nCells) + "Cells ") + exec_str += "--set full -f -o " + pathNvprof # last + print("Saving nsight file in ", + os.path.abspath(os.getcwd()) + + "/" + pathNvprof + ".ncu-rep") + path_exec = "../../build/mock_monarch" + exec_str += path_exec + try: + file1 = open(conf.campConf, "w") + if conf.caseGpuCpu == "CPU": + file1.write("USE_CPU=ON\n") + else: + file1.write("USE_CPU=OFF\n") + file1.write(str(nGPUs) + "\n") + file1.close() + except Exception as e: + print("write_camp_config_file fails", e) + print("exec_str:", exec_str, conf.diffCells, + conf.caseGpuCpu, + conf.caseMulticellsOnecell, "ncellsPerMPIProcess:", + conf.nCells, "nGPUs:", nGPUs) + conf_name = "settings/TestMonarch.json" + with open(conf_name, 'w', encoding='utf-8') as jsonFile: + json.dump(conf.__dict__, jsonFile, indent=4, + sort_keys=False) + nCellsStr = str(conf.nCells) + if conf.nCells >= 1000: + nCellsStr = str(int(conf.nCells / 1000)) + "k" + if conf.caseGpuCpu == "GPU": + caseGpuCpuName = str(nGPUs) + conf.caseGpuCpu + else: + caseGpuCpuName = str(conf.mpiProcesses) + "CPUcores" + is_import = False + data_path = ("out/stats" + caseGpuCpuName + nCellsStr + + "cells" + str(conf.timeSteps) + "tsteps.csv") + print("data_path", data_path) + data_path2 = ("out/state" + caseGpuCpuName + nCellsStr + + "cells" + str(conf.timeSteps) + "tsteps.csv") + if conf.is_import and os.path.exists(data_path): + is_import = True + if conf.is_out and not os.path.exists(data_path2): + is_import = False + if not is_import: + os.system(exec_str) + data_path = ("out/stats" + caseGpuCpuName + nCellsStr + + "cells" + str(conf.timeSteps) + "tsteps.csv") + if not is_import: + os.rename("out/stats.csv", data_path) + nRows_csv = (conf.timeSteps * conf.nCells * + conf.mpiProcesses) + df = pd_read_csv(data_path, nrows=nRows_csv) + data = df.to_dict('list') + y_key_words = conf.plotYKey.split() + y_key = y_key_words[-1] + data = data[y_key][0] + out = 0 + if conf.is_out: + if not is_import: + os.rename("out/state.csv", data_path2) + df = pd_read_csv(data_path2, header=None, + names=["Column1"]) + out = df["Column1"].tolist() + return data, out + + +# @profile +def run_cases(conf): + # Base case + conf.mpiProcesses = conf.mpiProcessesCaseBase + if conf.nCellsProcesses % conf.mpiProcesses != 0: + print( + "ERROR: On base case conf.nCellsProcesses % " + "conf.mpiProcesses != 0, nCellsProcesses, " + "mpiProcesses", + conf.nCellsProcesses, + conf.mpiProcesses) + raise + conf.nCells = int( + conf.nCellsProcesses / conf.mpiProcesses) + cases_words = conf.caseBase.split() + conf.caseGpuCpu = cases_words[0] + conf.caseMulticellsOnecell = cases_words[1] + conf.case = conf.caseBase + timeBase, valuesBase = run(conf) + # OptimCases + datacases = [] + for mpiProcessesCaseOptim in ( + conf.mpiProcessesCaseOptimList): + conf.mpiProcesses = mpiProcessesCaseOptim + if conf.nCellsProcesses % conf.mpiProcesses != 0: + print( + "WARNING: On optim case conf.nCellsProcesses % " + "conf.mpiProcesses != 0,nCellsProcesses, " + "mpiProcesses", + conf.nCellsProcesses, conf.mpiProcesses) + conf.nCells = int( + conf.nCellsProcesses / conf.mpiProcesses) + for caseOptim in conf.casesOptim: + cases_words = caseOptim.split() + conf.caseGpuCpu = cases_words[0] + conf.caseMulticellsOnecell = cases_words[1] + conf.case = caseOptim + timeOptim, valuesOptim = run(conf) + if conf.is_out: + math_functions.check_NRMSE(valuesBase, + valuesOptim, + conf.nCellsProcesses) + datay = timeBase / timeOptim + datacases.append(datay) + + return datacases + + +def run_cells(conf): + datacells = [] + for i in range(len(conf.cells)): + conf.nCellsProcesses = conf.cells[i] + datacases = run_cases(conf) + datacells.append(datacases) + if len(conf.cells) > 1: + datacellsTranspose = np.transpose(datacells) + datacells = datacellsTranspose.tolist() + return datacells + + +def run_diffCells(conf): + datacolumns = [] + for i, diff_cells in enumerate(conf.diffCellsL): + conf.diffCells = diff_cells + datacells = run_cells(conf) + datacolumns += datacells + return datacolumns + + +def plot_cases(conf, datay): + cases_words = conf.casesOptim[0].split() + conf.caseGpuCpu = cases_words[0] + conf.caseMulticellsOnecell = cases_words[1] + last_arch_optim = conf.caseGpuCpu + last_case_optim = conf.caseMulticellsOnecell + is_same_arch_optim = True + is_same_case_optim = True + for caseOptim in conf.casesOptim: + cases_words = caseOptim.split() + conf.caseGpuCpu = cases_words[0] + conf.caseMulticellsOnecell = cases_words[1] + if last_arch_optim != conf.caseGpuCpu: + is_same_arch_optim = False + last_arch_optim = conf.caseGpuCpu + if last_case_optim != conf.caseMulticellsOnecell: + is_same_case_optim = False + last_case_optim = conf.caseMulticellsOnecell + is_same_diff_cells = False + legend = [] + for diff_cells in conf.diffCellsL: + conf.diffCells = diff_cells + for mpiProcessesCaseOptim in ( + conf.mpiProcessesCaseOptimList): + for caseOptim in conf.casesOptim: + cases_words = caseOptim.split() + conf.caseGpuCpu = cases_words[0] + conf.caseMulticellsOnecell = cases_words[1] + case_multicells_onecell_name = "" + if (conf.caseMulticellsOnecell.find( + "BDF") != -1 or + conf.caseMulticellsOnecell.find( + "maxrregcount") != -1): + is_same_diff_cells = True + legend_name = "" + if len(conf.diffCellsL) > 1: + legend_name += conf.diffCells + " " + elif not is_same_arch_optim: + legend_name += conf.caseGpuCpu + " " + if not is_same_case_optim: + legend_name += case_multicells_onecell_name + if not legend_name == "": + legend.append(legend_name) + plotTitle = "" + nGPUsOptim = [int(i / 10) for i in conf.mpiProcessesCaseOptimList] + if not is_same_diff_cells and len(conf.diffCellsL) == 1: + plotTitle += conf.diffCells + " test: " + plotXKey = "" + if len(nGPUsOptim) > 1: + plotXKey = "GPUs" + if is_same_arch_optim: + if plotXKey == "GPUs": + plotTitle += "" + else: + if conf.caseGpuCpu == "GPU" and len( + nGPUsOptim) == 1 and \ + conf.mpiProcessesCaseOptimList[0] > 1: + plotTitle += str( + int(nGPUsOptim[0])) + " GPUs " + else: + plotTitle += conf.caseGpuCpu + " " + if plotXKey == "GPUs": + plotTitle += "GPU " + if len(legend) == 1 or not legend or len( + conf.diffCellsL) > 1: + if len(conf.mpiProcessesCaseOptimList) > 1: + legend_name += str(mpiProcessesCaseOptim) + " MPI " + if len(conf.diffCellsL) > 1: + plotTitle += "Implementations " + else: + plotTitle += "Implementations " + cases_words = conf.caseBase.split() + conf.caseGpuCpu = cases_words[0] + plotTitle += "vs " + str( + conf.mpiProcessesCaseBase) + " Cores CPU" + namey = "Speedup" + if len(conf.cells) > 1: + plotTitle += "" + datax = conf.cells + plot_x_key = "Cells" + elif plotXKey == "GPUs": + datax = nGPUsOptim + if len(conf.cells) > 1: + plotTitle += ", Cells: " + str(conf.cells[0]) + plot_x_key = plotXKey + else: + plot_x_key = "GPUs" + else: + plotTitle += ", Cells: " + str(conf.cells[0]) + datax = list(range(1, conf.timeSteps + 1, 1)) + plot_x_key = "Timesteps" + namex = plot_x_key + print(namex, ":", datax) + if legend: + print("plotTitle: ", plotTitle, " legend:", legend) + else: + print("plotTitle: ", plotTitle) + print(namey, ":", datay) + #plot_functions.plotsns(namex, namey, datax, datay, plotTitle, legend) + + +def run_main(conf): + if conf.is_out: + if (len( + conf.mpiProcessesCaseOptimList) > 1 or + conf.mpiProcessesCaseBase != + conf.mpiProcessesCaseOptimList[0]): + print( + "Disabled out error check because number of " + "processes should be the same for calculate " + "accuracy, only speedup can use different number") + conf.is_out = False + for i, mpiProcesses in enumerate( + conf.mpiProcessesCaseOptimList): + for j, cellsProcesses in enumerate(conf.cells): + nCells = int(cellsProcesses / mpiProcesses) + if nCells == 0: + print( + "WARNING: Configured less cells than MPI " + "processes, setting 1 cell per process") + conf.mpiProcessesCaseOptimList[i] = cellsProcesses + + datay = run_diffCells(conf) + #plot_cases(conf, datay) diff --git a/test/monarch/math_functions.py b/test/monarch/math_functions.py new file mode 100644 index 000000000..be2f3fdbe --- /dev/null +++ b/test/monarch/math_functions.py @@ -0,0 +1,37 @@ +from math import sqrt + + +def check_NRMSE(species1, species2, nCells): + n_state = int(len(species1)) + n_species = int(n_state / nCells) + NRMSEs_species = [0.] * n_species + max_y = [0.] * n_species + min_y = [float("inf")] * n_species + max_NRMSEs_species = 0. + for j2 in range(nCells): + for k in range(n_species): + k2 = k + j2 * n_species + y1 = species1[k2] + y2 = species2[k2] + NRMSEs_species[k] += (y1 - y2) ** 2 + if y1 > max_y[k]: + max_y[k] = y1 + if y1 < min_y[k]: + min_y[k] = y1 + for k in range(n_species): + if max_y[k] - min_y[k] > 1.0e-30: + NRMSEs_species[k] = (sqrt(NRMSEs_species[k] / nCells)) / (max_y[k] - min_y[k]) + + if NRMSEs_species[k] > max_NRMSEs_species: + max_NRMSEs_species = NRMSEs_species[k] + NRMSEs_species[k] = 0. + max_y[k] = 0. + min_y[k] = float("inf") + NRMSE = max_NRMSEs_species * 100 + tolerance = 1.0 # 1% error + if NRMSE > tolerance: + raise Exception("ERROR: NMRSE > tolerance; NMRSE:", NRMSE, "tolerance:", tolerance + ,"check debug utilities like debug.camp.diff.sh") + + print("NRMSE:",NRMSE) + diff --git a/test/monarch/mock_monarch.F90 b/test/monarch/mock_monarch.F90 index 504cddab8..a194c9f70 100644 --- a/test/monarch/mock_monarch.F90 +++ b/test/monarch/mock_monarch.F90 @@ -2,420 +2,348 @@ ! Illinois at Urbana-Champaign ! SPDX-License-Identifier: MIT -!> \file -!> The mock_monarch program +!> Mock version of the MONARCH model for testing integration with CAMP +program mock_monarch_t -!> Mock version of the MONARCH model for testing integration with PartMC -program mock_monarch - - use camp_util, only : assert_msg, almost_equal, & - to_string - use camp_monarch_interface + use camp_constants, only: const + use camp_util, only : assert_msg, almost_equal, to_string + use camp_monarch_interface_2 use camp_mpi + use json_module + +#ifdef SOLVE_EBI_IMPORT_CAMP_INPUT + ! EBI Solver + use module_bsc_chem_data + use EXT_HRDATA + use EXT_RXCM, only : NRXNS, RXLABEL + ! KPP Solver + use cb05cl_ae5_Initialize, only : KPP_Initialize => Initialize + use cb05cl_ae5_Model, only : KPP_NSPEC => NSPEC, & + KPP_STEPMIN => STEPMIN, & + KPP_STEPMAX => STEPMAX, & + KPP_RTOL => RTOL, & + KPP_ATOL => ATOL, & + KPP_TIME => TIME, & + KPP_C => C, & + KPP_RCONST => RCONST, & + KPP_Update_RCONST => Update_RCONST, & + KPP_INTEGRATE => INTEGRATE, & + KPP_SPC_NAMES => SPC_NAMES, & + KPP_PHOTO_RATES => PHOTO_RATES, & + KPP_TEMP => TEMP, & + KPP_PRESS => PRESS, & + KPP_SUN => SUN, & + KPP_M => M, & + KPP_N2 => N2, & + KPP_O2 => O2, & + KPP_H2 => H2, & + KPP_H2O => H2O, & + KPP_N2O => N2O, & + KPP_CH4 => CH4, & + KPP_NVAR => NVAR, & + KPP_NREACT => NREACT, & + KPP_DT => DT + use cb05cl_ae5_Parameters, only : KPP_IND_O2 => IND_O2 + use cb05cl_ae5_Initialize, ONLY: Initialize +#endif implicit none - !> File unit for model run-time messages - integer, parameter :: OUTPUT_FILE_UNIT = 6 - !> File unit for model results - integer, parameter :: RESULTS_FILE_UNIT = 7 - !> File unit for script generation - integer, parameter :: SCRIPTS_FILE_UNIT = 8 - !> File unit for results comparison - integer, parameter :: COMPARE_FILE_UNIT = 9 - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Parameters for mock MONARCH model ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Number of total species in mock MONARCH - integer, parameter :: NUM_MONARCH_SPEC = 800 - !> Number of vertical cells in mock MONARCH - integer, parameter :: NUM_VERT_CELLS = 3 - !> Starting W-E cell for camp-chem call - integer, parameter :: I_W = 1 - !> Ending W-E cell for camp-chem call - integer, parameter :: I_E = 5 - !> Starting S-N cell for camp-chem call - integer, parameter :: I_S = 1 - !> Ending S-N cell for camp-chem call - integer, parameter :: I_N = 5 - !> Number of W-E cells in mock MONARCH - integer, parameter :: NUM_WE_CELLS = I_E-I_W+1 - !> Number of S-N cells in mock MONARCH - integer, parameter :: NUM_SN_CELLS = I_N-I_S+1 - !> Starting index for camp-chem species in tracer array - integer, parameter :: START_CAMP_ID = 100 - !> Ending index for camp-chem species in tracer array - integer, parameter :: END_CAMP_ID = 650 - !> Time step (min) - real, parameter :: TIME_STEP = 1.6 - !> Number of time steps to integrate over - integer, parameter :: NUM_TIME_STEP = 5 - !> Index for water vapor in water_conc() + integer(kind=i_kind), parameter :: NUM_EBI_SPEC = 72 + integer(kind=i_kind), parameter :: NUM_EBI_PHOTO_RXN = 23 + integer, parameter :: NUM_MONARCH_SPEC = 250 + integer :: NUM_VERT_CELLS + integer :: I_W + integer :: I_E + integer :: I_S + integer :: I_N + integer :: NUM_WE_CELLS + integer :: NUM_SN_CELLS + integer, parameter :: START_CAMP_ID = 1!100 + integer, parameter :: END_CAMP_ID = 260!350 + real(kind=dp):: TIME_STEP ! (min) + integer :: NUM_TIME_STEP integer, parameter :: WATER_VAPOR_ID = 5 - !> Start time - real, parameter :: START_TIME = 360.0 - !> Number of cells to compute simultaneously + real, parameter :: START_TIME = 0 integer :: n_cells = 1 - !integer :: n_cells = (I_E - I_W+1)*(I_N - I_S+1)*NUM_VERT_CELLS - !> Check multiple cells results are correct? - logical :: check_multiple_cells = .false. - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! State variables for mock MONARCH model ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> NMMB style arrays (W->E, S->N, top->bottom, ...) - !> Temperature (K) - real :: temperature(NUM_WE_CELLS, NUM_SN_CELLS, NUM_VERT_CELLS) - !> Species conc (various units) - real :: species_conc(NUM_WE_CELLS, NUM_SN_CELLS, NUM_VERT_CELLS, NUM_MONARCH_SPEC) - !> Water concentrations (kg_H2O/kg_air) - real :: water_conc(NUM_WE_CELLS, NUM_SN_CELLS, NUM_VERT_CELLS, WATER_VAPOR_ID) - - !> WRF-style arrays (W->E, bottom->top, N->S) - !> Air density (kg_air/m^3) - real :: air_density(NUM_WE_CELLS, NUM_VERT_CELLS, NUM_SN_CELLS) - !> Air pressure (Pa) - real :: pressure(NUM_WE_CELLS, NUM_VERT_CELLS, NUM_SN_CELLS) - - !> Comparison values - real :: comp_species_conc(0:NUM_TIME_STEP, NUM_MONARCH_SPEC) - real :: species_conc_copy(NUM_WE_CELLS, NUM_SN_CELLS, NUM_VERT_CELLS, NUM_MONARCH_SPEC) - - !> Starting time for mock model run (min since midnight) - !! is tracked in MONARCH + character(len=:), allocatable :: DIFF_CELLS + real,allocatable :: temperature(:, :, :) + real, allocatable :: species_conc(:, :, :, :) + real, allocatable :: water_conc(:, :, :, :) !(kg_H2O/kg_air) + real, allocatable :: air_density(:, :, :) !(kg_air/m^3) + real, allocatable :: pressure(:, :, :) !(Pa) + real, allocatable :: conv(:, :, :) !(mol s-1 m-2 to ppmv) + integer :: i_hour = 0 real :: curr_time = START_TIME + type(camp_monarch_interface_t), pointer :: camp_interface + character(len=:), allocatable :: camp_input_file, chemFile,& + caseMulticellsOnecell, diffCells,caseGpuCpu + character(len=:), allocatable :: output_path, output_file_title, str_to_int_aux + character(len=:), allocatable :: str + character, allocatable :: buffer(:) + integer(kind=i_kind) :: pos, pack_size, ierr + character(len=512) :: arg + integer :: i_time, i_spec, i_case, i, j, k, z,r + integer :: plot_case, new_v_cells, aux_int + type(json_file) :: jfile + type(json_core) :: json + character(len=:), allocatable :: export_path + character(len=128) :: i_str + integer :: id - !> Set starting time for gnuplot scripts (includes initial conditions as first - !! data point) - real :: plot_start_time = START_TIME - - !> !!! Add to MONARCH variables !!! - type(monarch_interface_t), pointer :: camp_interface - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Mock model setup and evaluation variables ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> CAMP-chem input file file - character(len=:), allocatable :: camp_input_file - !> PartMC-camp <-> MONARCH interface configuration file - character(len=:), allocatable :: interface_input_file - !> Results file prefix - character(len=:), allocatable :: output_file_prefix - - character(len=500) :: arg - integer :: status_code, i_time, i_spec, i, j, k - !> Partmc nº of cases to test - integer :: camp_cases = 1 - - - ! Check the command line arguments - call assert_msg(129432506, command_argument_count().eq.3, "Usage: "// & - "./mock_monarch camp_input_file_list.json "// & - "interface_input_file.json output_file_prefix") - - ! initialize mpi (to take the place of a similar MONARCH call) call camp_mpi_init() - - !Check if repeat program to compare n_cells=1 with n_cells=N - if(check_multiple_cells) then - camp_cases=2 + I_W=1 + I_E=1 + I_S=1 + I_N=1 + DIFF_CELLS = "OFF" + call jfile%initialize() + export_path = "settings/TestMonarch"//".json" + call jfile%load_file(export_path); if (jfile%failed()) print*,& + "JSON not found at ",export_path + call jfile%get('chemFile',output_file_title) + camp_input_file = "settings/"//output_file_title//"/config.json" + output_path = "out/"//output_file_title + call jfile%get('nCells',NUM_VERT_CELLS) + call jfile%get('caseMulticellsOnecell',caseMulticellsOnecell) + output_path = output_path//"_"//caseMulticellsOnecell + if(caseMulticellsOnecell=="One-cell") then + n_cells = 1 + else + n_cells = (I_E - I_W+1)*(I_N - I_S+1)*NUM_VERT_CELLS end if + call jfile%get('timeSteps',NUM_TIME_STEP) + call jfile%get('timeStepsDt',TIME_STEP) + call jfile%get('diffCells',diffCells) + if(diffCells=="Realistic") then + DIFF_CELLS = "ON" + end if + NUM_WE_CELLS = I_E-I_W+1 + NUM_SN_CELLS = I_N-I_S+1 + call jfile%get('caseGpuCpu',caseGpuCpu) + if (camp_mpi_rank()==0) then + write(*,*) "Time-steps:", NUM_TIME_STEP, "Cells:",& + NUM_WE_CELLS*NUM_SN_CELLS*NUM_VERT_CELLS, & + diffCells, caseMulticellsOnecell,caseGpuCpu, "MPI processes",camp_mpi_size() - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! **** Add to MONARCH during initialization **** ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - ! Initialize PartMC-camp - call get_command_argument(1, arg, status=status_code) - call assert_msg(678165802, status_code.eq.0, "Error getting PartMC-camp "//& - "configuration file name") - camp_input_file = trim(arg) - call get_command_argument(2, arg, status=status_code) - call assert_msg(664104564, status_code.eq.0, "Error getting PartMC-camp "//& - "<-> MONARCH interface configuration file name") - interface_input_file = trim(arg) - - ! Initialize the mock model - call get_command_argument(3, arg, status=status_code) - call assert_msg(234156729, status_code.eq.0, "Error getting output file prefix") - output_file_prefix = trim(arg) - - call model_initialize(output_file_prefix) - - !Repeat in case we want create a checksum - do i=1, camp_cases - - camp_interface => monarch_interface_t(camp_input_file, interface_input_file, & - START_CAMP_ID, END_CAMP_ID, n_cells)!, n_cells - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! **** end initialization modification **** ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - ! Set conc from mock_model - call camp_interface%get_init_conc(species_conc, water_conc, WATER_VAPOR_ID, & - air_density) - - ! call camp_interface%print( ) - - ! Run the model - do i_time=0, NUM_TIME_STEP - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! **** Add to MONARCH during runtime for each time step **** ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - call output_results(curr_time) - call camp_interface%integrate(curr_time, & ! Starting time (min) - TIME_STEP, & ! Time step (min) - I_W, & ! Starting W->E grid cell - I_E, & ! Ending W->E grid cell - I_S, & ! Starting S->N grid cell - I_N, & ! Ending S->N grid cell - temperature, & ! Temperature (K) - species_conc, & ! Tracer array - water_conc, & ! Water concentrations (kg_H2O/kg_air) - WATER_VAPOR_ID, & ! Index in water_conc() corresponding to water vapor - air_density, & ! Air density (kg_air/m^3) - pressure) ! Air pressure (Pa) - curr_time = curr_time + TIME_STEP - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! **** end runtime modification **** ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - end do - - write(*,*) "Model run time: ", comp_time, " s" - - !Save results - if(i.eq.1) then - species_conc_copy(:,:,:,:) = species_conc(:,:,:,:) - end if - - ! Set 1 cell to get a checksum case - n_cells = 1 + end if + allocate(temperature(NUM_WE_CELLS,NUM_SN_CELLS,NUM_VERT_CELLS)) + allocate(species_conc(NUM_WE_CELLS,NUM_SN_CELLS,NUM_VERT_CELLS,NUM_MONARCH_SPEC)) + allocate(water_conc(NUM_WE_CELLS,NUM_SN_CELLS,NUM_VERT_CELLS,WATER_VAPOR_ID)) + allocate(air_density(NUM_WE_CELLS,NUM_SN_CELLS,NUM_VERT_CELLS)) + allocate(pressure(NUM_WE_CELLS,NUM_SN_CELLS,NUM_VERT_CELLS)) + allocate(conv(NUM_WE_CELLS, NUM_SN_CELLS, NUM_VERT_CELLS)) + + camp_interface => camp_monarch_interface_t(camp_input_file, output_file_title, & + START_CAMP_ID, END_CAMP_ID, n_cells) + + camp_interface%camp_state%state_var(:) = 0.0 + species_conc(:,:,:,:) = 0.0 + air_density(:,:,:) = 1.225 + water_conc(:,:,:,WATER_VAPOR_ID) = 0. + + call camp_interface%get_init_conc(species_conc, water_conc, WATER_VAPOR_ID, & + i_W,I_E,I_S,I_N) + + if(output_file_title=="monarch_cb05") then + call import_camp_input_json(camp_interface) + end if - end do + call set_env(camp_interface,output_path) - !If something to compare - if(camp_cases.gt.1) then - !Compare results - do i = I_W, I_E - do j = I_S, I_N - do k = 1, NUM_VERT_CELLS - do i_spec = START_CAMP_ID, END_CAMP_ID - call assert_msg( 394742768, & - almost_equal( real( species_conc(i,j,k,i_spec), kind=dp ), & - real( species_conc_copy(i,j,k,i_spec), kind=dp ), & - 1.d-5, 1d-4 ), & - "Concentration species mismatch for species "// & - trim( to_string( i_spec ) )//". Expected: "// & - trim( to_string( species_conc_copy(i,j,k,i_spec) ) )//", got: "// & - trim( to_string( species_conc(i,j,k,i_spec) ) ) ) - end do - end do - end do - end do +#ifdef SOLVE_EBI_IMPORT_CAMP_INPUT + if(caseMulticellsOnecell.eq."EBI") then + call solve_ebi(camp_interface) end if +#endif - write(*,*) "MONARCH interface tests - PASS" - - ! Output results and scripts - if (camp_mpi_rank().eq.0) then - call output_results(curr_time) - call create_gnuplot_script(camp_interface, output_file_prefix, & - plot_start_time, curr_time) + if(TIME_STEP*NUM_TIME_STEP>(60*24)) then !24h limit time-step + print*,"ERROR TIME_STEP*NUM_TIME_STEP.gt.(60*24): Reduce number of time-step or time-step size" + STOP end if - ! TODO I would still like to implement this once the results are stable - ! The evaluation is based on a run with reasonable seeming values and - ! few solver modifications. It is used to make sure future modifications - ! to the solver do not affect the results -#if 0 - do i_spec = START_CAMP_ID, END_CAMP_ID - call assert_msg( 394742768, & - almost_equal( real( species_conc(10,15,1,i_spec), kind=dp ), & - real( comp_species_conc(i_time,i_spec), kind=dp ), & - 1.d-4, 1d-3 ), & - "Concentration species mismatch for species "// & - trim( to_string( i_spec ) )//" at time step "// & - trim( to_string( i_time ) )//". Expected: "// & - trim( to_string( comp_species_conc(i_time,i_spec) ) )//", got: "// & - trim( to_string( species_conc(10,15,1,i_spec) ) ) ) + do i_time=1, NUM_TIME_STEP + call camp_interface%integrate(curr_time, & ! Starting time (min) + TIME_STEP, & ! Time step (min) + I_W, & ! Starting W->E grid cell + I_E, & ! Ending W->E grid cell + I_S, & ! Starting S->N grid cell + I_N, & ! Ending S->N grid cell + temperature, & ! Temperature (K) + species_conc, & ! Tracer array + water_conc, & ! Water concentrations (kg_H2O/kg_air) + WATER_VAPOR_ID, & ! Index in water_conc() corresponding to water vapor + air_density, & ! Air density (kg_air/m^3) + pressure, & ! Air pressure (Pa) + conv, & + i_hour,& + NUM_TIME_STEP,& + DIFF_CELLS,i_time) + curr_time = curr_time + TIME_STEP end do -#endif + call camp_mpi_barrier() + call camp_interface%camp_core%export_solver_stats() + call camp_interface%camp_core%join_solver_state() + call camp_mpi_barrier() - ! Deallocation + if (camp_mpi_rank()==0) then + write(*,*) "Model run time: ", comp_time, " s" + end if deallocate(camp_input_file) - deallocate(interface_input_file) - - ! Free the interface and the solver + deallocate(output_path) + deallocate(output_file_title) deallocate(camp_interface) - - ! close the output file - close(RESULTS_FILE_UNIT) - deallocate(output_file_prefix) - - ! finalize mpi call camp_mpi_finalize() contains -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Initialize the mock model - subroutine model_initialize(file_prefix) - - !> File prefix for model results + subroutine set_env(camp_interface,file_prefix) + type(camp_monarch_interface_t), intent(inout) :: camp_interface character(len=:), allocatable, intent(in) :: file_prefix - - integer :: i_spec character(len=:), allocatable :: file_name + integer :: z,o,i,j,k,r,i_cell,i_spec,mpi_size,ncells,tid,ncells_mpi + integer :: n_cells_print + real :: temp_init,press,press_init,press_end,press_range,press_slide + + temp_init = 290.016 + press_init = 100000. !Should be equal to camp_monarch_interface + if(DIFF_CELLS=="ON") then + ncells=(I_E - I_W+1)*(I_N - I_S+1)*NUM_VERT_CELLS + mpi_size=camp_mpi_size() + tid=camp_mpi_rank() + ncells_mpi=ncells*mpi_size + press_end = 10000. + press_range = press_end-press_init + if((ncells_mpi)==1) then + press_slide = 0. + else + press_slide = press_range/(ncells_mpi-1) + end if + do i=I_W,I_E + do j=I_S,I_N + do k=1,NUM_VERT_CELLS + o = (j-1)*(I_E) + (i-1) + z = (k-1)*(I_E*I_N) + o + z = tid*ncells+z + pressure(i,j,k)=press_init+press_slide*z + temperature(i,j,k)=temp_init*((pressure(i,j,k)/press_init)**(287./1004.)) !dry_adiabatic formula + end do + end do + end do + else + if(output_file_title=="cb05_paperV2") then + temperature(:,:,:) = temp_init + pressure(:,:,:) = press_init + end if + end if + if(output_file_title=="cb05_paperV2") then + air_density(:,:,:) = pressure(:,:,:)/(287.04*temperature(:,:,:)* & + (1.+0.60813824*water_conc(:,:,:,WATER_VAPOR_ID))) !kg m-3 + conv(:,:,:)=0.02897/air_density(:,:,:)*(TIME_STEP*60.)*1e6 !units of time_step to seconds - ! Open the output file - file_name = file_prefix//"_results.txt" - open(RESULTS_FILE_UNIT, file=file_name, status="replace", action="write") - - ! Open the compare file - ! TODO Implement once results are stable -#if 0 - file_name = file_prefix//"_comp.txt" - open(COMPARE_FILE_UNIT, file=file_name, action="read") -#endif - - ! TODO refine initial model conditions - temperature(:,:,:) = 300.614166259766 - species_conc(:,:,:,:) = 0.0 - water_conc(:,:,:,:) = 0.0 - water_conc(:,:,:,WATER_VAPOR_ID) = 0.01 - air_density(:,:,:) = 1.225 - pressure(:,:,:) = 94165.7187500000 - - !Initialize different axis values - !Species_conc is modified in monarch_interface%get_init_conc - - do i=I_W, I_E - temperature(i,:,:) = temperature(i,:,:) + 0.1*i - pressure(i,:,:) = pressure(i,:,:) - 1*i + end if + call camp_mpi_barrier() + end subroutine + + subroutine import_camp_input_json(camp_interface) + type(camp_monarch_interface_t), intent(inout) :: camp_interface + integer :: z,i,j,k,r,o,i_cell,i_spec,i_photo_rxn + integer :: state_size_per_cell + type(json_file) :: jfile + type(json_core) :: json + character(len=:), allocatable :: export_path, spec_name_json + real(kind=dp) :: dt, temp, press, real_val + type(string_t), allocatable :: camp_spec_names(:), unique_names(:) + real, dimension(NUM_EBI_PHOTO_RXN) :: ebi_photo_rates + character(len=128) :: mpi_rank_str, i_str + integer :: mpi_rank, id + character, allocatable :: buffer(:) + integer :: max_spec_name_size=512 + integer(kind=i_kind) :: pos, pack_size, size_state_per_cell + character(len=:), allocatable :: spec_name + real(kind=dp) :: base_rate + + state_size_per_cell = camp_interface%camp_core%size_state_per_cell + call jfile%initialize() + export_path = "settings/monarch_cb05/monarch_cell_init_concs.json" + call jfile%load_file(export_path); if (jfile%failed()) print*,& + "JSON not found at ",export_path + size_state_per_cell = camp_interface%camp_core%size_state_per_cell + mpi_rank = camp_mpi_rank() + if (mpi_rank==0) then + unique_names=camp_interface%camp_core%unique_names() + pack_size = 0 + do z=1, size_state_per_cell + pack_size = pack_size + camp_mpi_pack_size_string(trim(unique_names(z)%string)) end do - - do j=I_S, I_N - temperature(:,j,:) = temperature(:,j,:) + 0.3*j - pressure(:,:,j) = pressure(:,:,j) - 3*j + allocate(buffer(pack_size)) + pos = 0 + do z=1, size(unique_names) + call camp_mpi_pack_string(buffer, pos, trim(unique_names(z)%string)) end do - - do k=1, NUM_VERT_CELLS - temperature(:,:,k) = temperature(:,:,k) + 0.6*k - pressure(:,k,:) = pressure(:,k,:) - 6*k + end if + call camp_mpi_bcast_integer(pack_size, MPI_COMM_WORLD) + if (mpi_rank/=0) then + allocate(buffer(pack_size)) + end if + call camp_mpi_bcast_packed(buffer, MPI_COMM_WORLD) + if (mpi_rank/=0) then + pos = 0 + allocate(unique_names(size_state_per_cell)) + spec_name="" + do z=1,max_spec_name_size + spec_name=spec_name//" " + end do + do z=1, size_state_per_cell + call camp_mpi_unpack_string(buffer, pos, spec_name) + unique_names(z)%string= trim(spec_name) + end do + end if + deallocate(buffer) + camp_spec_names=unique_names + do i=1, size(camp_spec_names) + call jfile%get('input.species.'//camp_spec_names(i)%string,& + camp_interface%camp_state%state_var(i)) end do - - deallocate(file_name) - - ! Read the compare file - ! TODO Implement once results are stable -#if 0 - call read_comp_file() - close(COMPARE_FILE_UNIT) -#endif - - end subroutine model_initialize - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Read the comparison file (must have same dimensions as current config) - subroutine read_comp_file() - - integer :: i_time - real :: time, water - - do i_time = 0, NUM_TIME_STEP + 1 - read(COMPARE_FILE_UNIT, *) time, & - comp_species_conc(i_time, START_CAMP_ID:END_CAMP_ID), & - water + do z=0,n_cells-1 + do i=1,state_size_per_cell + camp_interface%camp_state%state_var(i+(z*state_size_per_cell))=& + camp_interface%camp_state%state_var(i) + end do end do - - end subroutine read_comp_file - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Output the model results - subroutine output_results(curr_time) - - !> Current model time (min since midnight) - real, intent(in) :: curr_time - - write(RESULTS_FILE_UNIT, *) curr_time, & - species_conc(2,3,1,START_CAMP_ID:END_CAMP_ID), & - water_conc(2,3,1,WATER_VAPOR_ID) - - end subroutine output_results - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Create a gnuplot script for viewing species concentrations - subroutine create_gnuplot_script(camp_interface, file_prefix, start_time, & - end_time) - - !> PartMC-camp <-> MONARCH interface - type(monarch_interface_t), intent(in) :: camp_interface - !> File prefix for gnuplot script - character(len=:), allocatable :: file_prefix - !> Plot start time - real :: start_time - !> Plot end time - real :: end_time - - type(string_t), allocatable :: species_names(:) - integer(kind=i_kind), allocatable :: tracer_ids(:) - character(len=:), allocatable :: file_name, spec_name - integer(kind=i_kind) :: i_char, i_spec, tracer_id - - ! Get the species names and ids - call camp_interface%get_MONARCH_species(species_names, tracer_ids) - - ! Adjust the tracer ids to match the results file - tracer_ids(:) = tracer_ids(:) - START_CAMP_ID + 2 - - ! Create the gnuplot script - file_name = file_prefix//".conf" - open(unit=SCRIPTS_FILE_UNIT, file=file_name, status="replace", action="write") - write(SCRIPTS_FILE_UNIT,*) "# "//file_name - write(SCRIPTS_FILE_UNIT,*) "# Run as: gnuplot "//file_name - write(SCRIPTS_FILE_UNIT,*) "set terminal png truecolor" - write(SCRIPTS_FILE_UNIT,*) "set autoscale" - write(SCRIPTS_FILE_UNIT,*) "set xrange [", start_time, ":", end_time, "]" - do i_spec = 1, size(species_names) - spec_name = species_names(i_spec)%string - forall (i_char = 1:len(spec_name), spec_name(i_char:i_char).eq.'/') & - spec_name(i_char:i_char) = '_' - write(SCRIPTS_FILE_UNIT,*) "set output '"//file_prefix//"_"// & - spec_name//".png'" - write(SCRIPTS_FILE_UNIT,*) "plot\" - write(SCRIPTS_FILE_UNIT,*) " '"//file_prefix//"_results.txt'\" - write(SCRIPTS_FILE_UNIT,*) " using 1:"// & - trim(to_string(tracer_ids(i_spec)))//" title '"// & - species_names(i_spec)%string//" (MONARCH)'" + do i=I_W,I_E + do j=I_S,I_N + do k=1,NUM_VERT_CELLS + o = (j-1)*(I_E) + (i-1) + z = (k-1)*(I_E*I_N) + o + species_conc(i,j,k,camp_interface%map_monarch_id(:)) = & + camp_interface%camp_state%state_var(camp_interface%map_camp_id(:)) + call jfile%get('input.temperature',temp) + temperature(i,j,k)=temp + call jfile%get('input.pressure',press) + pressure(i,j,k)=press + end do + end do end do - tracer_id = END_CAMP_ID - START_CAMP_ID + 3 - write(SCRIPTS_FILE_UNIT,*) "set output '"//file_prefix//"_H2O.png'" - write(SCRIPTS_FILE_UNIT,*) "plot\" - write(SCRIPTS_FILE_UNIT,*) " '"//file_prefix//"_results.txt'\" - write(SCRIPTS_FILE_UNIT,*) " using 1:"// & - trim(to_string(tracer_id))//" title 'H2O (MONARCH)'" - close(SCRIPTS_FILE_UNIT) - - deallocate(species_names) - deallocate(tracer_ids) - deallocate(file_name) - deallocate(spec_name) - - end subroutine create_gnuplot_script - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + do i = 1, state_size_per_cell + if (trim(camp_spec_names(i)%string)=="H2O") then + water_conc(:,:,:,WATER_VAPOR_ID) = camp_interface%camp_state%state_var(i) + end if + end do + do i=1, camp_interface%n_photo_rxn + write(i_str,*) i + i_str=adjustl(i_str) + call jfile%get('input.photo_rates.'//trim(i_str),& + camp_interface%base_rates(i)) + end do + do z =1, n_cells + do i = 1, camp_interface%n_photo_rxn + base_rate = camp_interface%base_rates(i) + call camp_interface%photo_rxns(i)%set_rate(base_rate) + call camp_interface%camp_core%update_data(camp_interface%photo_rxns(i),z) + end do + end do + call jfile%destroy() + end subroutine import_camp_input_json -end program mock_monarch +end program mock_monarch_t diff --git a/test/monarch/monarch_box_binned/aerosol_phases.json b/test/monarch/monarch_box_binned/aerosol_phases.json deleted file mode 100755 index 88aa9ec95..000000000 --- a/test/monarch/monarch_box_binned/aerosol_phases.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "description" : "These aerosol phases correspond to the MONARCH 'mod37' configuration", - "camp-data" : [ - { - "name" : "dust", - "type": "AERO_PHASE", - "species" : [ "LHD_DUST", "LLD_DUST" ], - "notes" : { - "MLD 02/05/2018" : "consider replacing this with a set of inorganic species" - } - }, - { - "name" : "sea_salt", - "type" : "AERO_PHASE", - "species" : [ "SEA_SALT" ], - "notes" : { - "MLD 02/05/2018" : "consider replacing with H2O, Na+, Cl-" - } - }, - { - "name" : "organic_matter", - "type" : "AERO_PHASE", - "species" : [ "POA", "ISOP-P1_aero", "ISOP-P2_aero", "TERP-P1_aero", "TERP-P2_aero" ] - }, - { - "name" : "black_carbon", - "type" : "AERO_PHASE", - "species" : [ "BC_phob", "BC_phil" ] - }, - { - "name" : "other_PM", - "type" : "AERO_PHASE", - "species" : [ "other_PM", "other_other_PM" ], - "description" : "unspecified particulate matter" - } - ] -} diff --git a/test/monarch/monarch_box_binned/monarch_mod37_aerosol_representation.json b/test/monarch/monarch_box_binned/monarch_mod37_aerosol_representation.json deleted file mode 100755 index ac5908b52..000000000 --- a/test/monarch/monarch_box_binned/monarch_mod37_aerosol_representation.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "description" : [ - "This is the mass-based MONARCH aerosol representation for the 'mod37' configuration", - "Parameter for the bins and modes were taken from Spada et al. (2015) manuscript -", - "'Global aerosols in the online multiscale NMMB/BSC Chemical Transport Model'" - ], - "camp-data" : [ - { - "name" : "MONARCH mass-based", - "type" : "AERO_REP_MODAL_BINNED_MASS", - "modes/bins" : - { - "dust" : - { - "type" : "BINNED", - "phases" : [ "dust" ], - "bins" : 8, - "minimum diameter [m]" : 1.0e-7, - "maximum diameter [m]" : 1.0e-5, - "scale" : "LOG" - }, - "sea_salt" : - { - "type" : "BINNED", - "phases" : [ "sea_salt" ], - "bins" : 8, - "minimum diameter [m]" : 1.0e-7, - "maximum diameter [m]" : 1.5e-5, - "scale" : "LOG" - }, - "organic_matter" : - { - "type" : "BINNED", - "phases" : [ "organic_matter" ], - "bins" : 8, - "minimum diameter [m]" : 6.577e-9, - "maximum diameter [m]" : 2.485e-5, - "scale" : "LOG" - }, - "black_carbon" : - { - "type" : "MODAL", - "phases" : [ "black_carbon" ], - "shape" : "LOG_NORMAL" - }, - "other_PM" : - { - "type" : "MODAL", - "phases" : [ "other_PM" ], - "shape" : "LOG_NORMAL", - "notes" : "FIXME - other PM not in manuscript, using parameters for organic aerosol" - } - } - } - ] -} diff --git a/test/monarch/monarch_box_binned/monarch_mod37_aerosol_representation.json.org b/test/monarch/monarch_box_binned/monarch_mod37_aerosol_representation.json.org deleted file mode 100755 index 240a1bfe6..000000000 --- a/test/monarch/monarch_box_binned/monarch_mod37_aerosol_representation.json.org +++ /dev/null @@ -1,56 +0,0 @@ -{ - "description" : [ - "This is the mass-based MONARCH aerosol representation for the 'mod37' configuration", - "Parameter for the bins and modes were taken from Spada et al. (2015) manuscript -", - "'Global aerosols in the online multiscale NMMB/BSC Chemical Transport Model'" - ], - "camp-data" : [ - { - "name" : "MONARCH mass-based", - "type" : "AERO_REP_MODAL_BINNED_MASS", - "modes/bins" : - { - "dust" : - { - "type" : "BINNED", - "phases" : [ "dust" ], - "bins" : 8, - "minimum diameter [m]" : 1.0e-7, - "maximum diameter [m]" : 1.0e-5, - "scale" : "LOG" - }, - "sea_salt" : - { - "type" : "BINNED", - "phases" : [ "sea_salt" ], - "bins" : 8, - "minimum diameter [m]" : 1.0e-7, - "maximum diameter [m]" : 1.5e-5, - "scale" : "LOG" - }, - "organic_matter" : - { - "type" : "BINNED", - "phases" : [ "organic_matter" ], - "bins" : 2, - "minimum diameter [m]" : 1.0e-9, - "maximum diameter [m]" : 2.0e-5, - "scale" : "LOG" - }, - "black_carbon" : - { - "type" : "MODAL", - "phases" : [ "black_carbon" ], - "shape" : "LOG_NORMAL" - }, - "other_PM" : - { - "type" : "MODAL", - "phases" : [ "other_PM" ], - "shape" : "LOG_NORMAL", - "notes" : "FIXME - other PM not in manuscript, using parameters for organic aerosol" - } - } - } - ] -} diff --git a/test/monarch/monarch_box_binned/tsigaridis_2_product_SOA_scheme/mechanism.json b/test/monarch/monarch_box_binned/tsigaridis_2_product_SOA_scheme/mechanism.json deleted file mode 100755 index 9bf99abb8..000000000 --- a/test/monarch/monarch_box_binned/tsigaridis_2_product_SOA_scheme/mechanism.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "notes" : [ - "2-product SOA scheme from MONARCH model. Based on Tsigaridis and Kanakidou (2007).", - "Details in Spada et al. (2013) in prep for Geosci. Model Dev.", - "Gas-phase rate constants taken from CB05 reactions with same reactants", - "TODO the CB05 reactions should be updated/removed to avoid competition with SOA scheme", - "Clausius clapyron parameters (C* and -dH/R) converted to SIMPOL.1 paramaters" - ], - "camp-data" : [ - { - "name" : "MONARCH mod37", - "type" : "MECHANISM", - "reactions" : [ - { - "type" : "ARRHENIUS", - "reactants" : { - "OH" : {}, - "ISOP" : {} - }, - "products" : { - "ISOP-P1" : { "yield" : 0.192 } - }, - "A" : 2.54e-11, - "C" : 407.6 - }, - { - "type" : "ARRHENIUS", - "reactants" : { - "O3" : {}, - "ISOP" : {} - }, - "products" : { - "ISOP-P2" : { "yield" : 0.215 } - }, - "A" : 7.86e-15, - "C" : -1912.0 - }, - { - "type" : "ARRHENIUS", - "reactants" : { - "OH" : {}, - "TERP": {} - }, - "products" : { - "TERP-P1" : { "yield" : 0.0288 } - }, - "A" : 1.5e-11, - "C" : 449.0 - }, - { - "type" : "ARRHENIUS", - "reactants" : { - "O3" : {}, - "TERP" : {} - }, - "products" : { - "TERP-P2" : { "yield" : 0.232 } - }, - "A" : 1.2e-15, - "C" : -821.0 - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "ISOP-P1", - "aerosol phase" : "organic_matter", - "aerosol-phase species" : "ISOP-P1_aero", - "B" : [ 3.81e3, -2.13e1, 0.0, 0.0 ] - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "ISOP-P2", - "aerosol phase" : "organic_matter", - "aerosol-phase species" : "ISOP-P2_aero", - "B" : [ 3.81e3, -2.09e1, 0.0, 0.0 ] - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "TERP-P1", - "aerosol phase" : "organic_matter", - "aerosol-phase species" : "TERP-P1_aero", - "B" : [ 2.19e3, -1.75e1, 0.0, 0.0 ] - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "TERP-P2", - "aerosol phase" : "organic_matter", - "aerosol-phase species" : "TERP-P2_aero", - "B" : [ 2.19e3, -1.53e1, 0.0, 0.0 ] - } - ] - } - ] -} diff --git a/test/monarch/monarch_box_binned/tsigaridis_2_product_SOA_scheme/species.json b/test/monarch/monarch_box_binned/tsigaridis_2_product_SOA_scheme/species.json deleted file mode 100755 index e46bc5511..000000000 --- a/test/monarch/monarch_box_binned/tsigaridis_2_product_SOA_scheme/species.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "description" : [ - "These species needed for the 2 product SOA scheme", - "(see mechanism.json for details)" - ], - "camp-data" : [ - { - "name" : "ISOP-P1", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.08806, - "description" : "gas-phase product from isoprene oxidation by OH", - "notes" : [ - "using diffusion coefficient from dry deposition", - "see notes on ISOP-P1_aero species" - ] - }, - { - "name" : "ISOP-P2", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.09003, - "description" : "gas-phase product from isoprene oxidation by O3", - "notes" : [ - "using diffusion coefficient from dry deposition", - "see notes on ISOP-P2_aero species" - ] - }, - { - "name" : "TERP-P1", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.17025, - "description" : "gas-phase product from monoterpene oxidation by OH", - "notes" : [ - "using diffusion coefficient from dry deposition", - "see notes on TERP-P1_aero species" - ] - }, - { - "name" : "TERP-P2", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.202162, - "description" : "gas-phase product from monoterpene oxidation by O3", - "notes" : [ - "using diffusion coefficient from dry deposition", - "see notes on TERP-P2_aero species" - ] - }, - { - "name" : "POA", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.41475, - "description" : "lumped hydrophobic particulate matter", - "num_ions" : 0, - "kappa" : 0.0, - "note" : "Using C30H54 for molecular weight. TODO find best surrogate" - }, - { - "name" : "ISOP-P1_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.08806, - "description" : "First isoprene SOA species in 2-product scheme", - "num_ions" : 0, - "kappa" : 0.1, - "note" : [ - "Using ketopropanoic acid for molecular weight. TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - }, - { - "name" : "ISOP-P2_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.09003, - "description" : "Second isoprene SOA species in 2-product scheme", - "num_ions" : 0, - "kappa" : 0.1, - "note" : [ - "Using oxalic acid for molecular weight. TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - }, - { - "name" : "TERP-P1_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.17025, - "description" : "First monoterpene SOA species in 2-product scheme", - "num_ions" : 0, - "kappa" : 0.1, - "note" : [ - "Using 2-hydroxy-3-isopropyl-6-methyl-cyclohexanone for molecular weight", - "TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - }, - { - "name" : "TERP-P2_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.202162, - "description" : "Second monoterpene SOA species in 2-product scheme", - "num_ions" : 0, - "kappa" : 0.1, - "note" : [ - "Using 2-methyl-5-carboxy-2,4-hexodienoic acid. TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - } - ] -} diff --git a/test/monarch/monarch_box_modal/aerosol_phases.json b/test/monarch/monarch_box_modal/aerosol_phases.json deleted file mode 100755 index 88aa9ec95..000000000 --- a/test/monarch/monarch_box_modal/aerosol_phases.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "description" : "These aerosol phases correspond to the MONARCH 'mod37' configuration", - "camp-data" : [ - { - "name" : "dust", - "type": "AERO_PHASE", - "species" : [ "LHD_DUST", "LLD_DUST" ], - "notes" : { - "MLD 02/05/2018" : "consider replacing this with a set of inorganic species" - } - }, - { - "name" : "sea_salt", - "type" : "AERO_PHASE", - "species" : [ "SEA_SALT" ], - "notes" : { - "MLD 02/05/2018" : "consider replacing with H2O, Na+, Cl-" - } - }, - { - "name" : "organic_matter", - "type" : "AERO_PHASE", - "species" : [ "POA", "ISOP-P1_aero", "ISOP-P2_aero", "TERP-P1_aero", "TERP-P2_aero" ] - }, - { - "name" : "black_carbon", - "type" : "AERO_PHASE", - "species" : [ "BC_phob", "BC_phil" ] - }, - { - "name" : "other_PM", - "type" : "AERO_PHASE", - "species" : [ "other_PM", "other_other_PM" ], - "description" : "unspecified particulate matter" - } - ] -} diff --git a/test/monarch/monarch_box_modal/custom_species.json b/test/monarch/monarch_box_modal/custom_species.json deleted file mode 100755 index df8673d47..000000000 --- a/test/monarch/monarch_box_modal/custom_species.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description" : [ - "These additional species are needed for the MONARCH 'mod37' configuration", - "Densities are taken from Spada et al. (2015) manuscript - ", - "'Global Aerosols in the online multiscale NMMB/BSC Chemical Transport Model", - "or estimated from bulk densities.", - "TODO check about molecular weights" - ], - "camp-data" : [ - { - "name" : "NH3", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "description" : "ammonia" - }, - { - "name" : "DMS", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "description" : "dimethylsulfide" - }, - { - "monarch name" : "lumped high-density dust species", - "name" : "LHD_DUST", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "molecular weight [kg mol-1]" : 0.1, - "density [kg m-3]" : 2650.0, - "num_ions" : 0, - "kappa" : 0.1 - }, - { - "monarch name" : "lumped low-density dust species", - "name" : "LLD_DUST", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "molecular weight [kg mol-1]" : 0.1, - "density [kg m-3]" : 2650.0, - "num_ions" : 0, - "kappa" : 0.1 - }, - { - "monarch name" : "lumped sea salt species", - "name" : "SEA_SALT", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "molecular weight [kg mol-1]" : 0.1, - "density [kg m-3]" : 2160.0, - "num_ions" : 0, - "kappa" : 0.53 - }, - { - "name" : "BC_phob", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.1, - "description" : "hydrophobic black carbon", - "num_ions" : 0, - "kappa" : 0 - }, - { - "name" : "BC_phil", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.1, - "description" : "hydrophilic black carbon", - "num_ions" : 0, - "kappa" : 0.001 - }, - { - "name" : "other_PM", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "molecular weight [kg mol-1]" : 0.1, - "density [kg m-3]" : 1800.0, - "description" : "unspecified particulate matter FIXME", - "num_ions" : 0, - "kappa" : 0 - }, - { - "name" : "other_other_PM", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "molecular weight [kg mol-1]" : 0.1, - "density [kg m-3]" : 1800.0, - "description" : "second unspecified particulate matter species FIXME", - "num_ions" : 0, - "kappa" : 0 - } - ] -} diff --git a/test/monarch/monarch_box_modal/monarch_mod37_aerosol_representation.json b/test/monarch/monarch_box_modal/monarch_mod37_aerosol_representation.json deleted file mode 100755 index f31ccd62d..000000000 --- a/test/monarch/monarch_box_modal/monarch_mod37_aerosol_representation.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "description" : [ - "This is the mass-based MONARCH aerosol representation for the 'mod37' configuration", - "Parameter for the bins and modes were taken from Spada et al. (2015) manuscript -", - "'Global aerosols in the online multiscale NMMB/BSC Chemical Transport Model'" - ], - "camp-data" : [ - { - "name" : "MONARCH mass-based", - "type" : "AERO_REP_MODAL_BINNED_MASS", - "modes/bins" : - { - "dust" : - { - "type" : "BINNED", - "phases" : [ "dust" ], - "bins" : 8, - "minimum diameter [m]" : 1.0e-7, - "maximum diameter [m]" : 1.0e-5, - "scale" : "LOG" - }, - "sea_salt" : - { - "type" : "BINNED", - "phases" : [ "sea_salt" ], - "bins" : 8, - "minimum diameter [m]" : 1.0e-7, - "maximum diameter [m]" : 1.5e-5, - "scale" : "LOG" - }, - "organic_matter_mode1" : - { - "type" : "MODAL", - "phases" : [ "organic_matter" ], - "shape" : "LOG_NORMAL", - "geometric mean diameter [m]" : 2.00e-8, - "geometric standard deviation" : 1.45 - }, - "organic_matter_mode2" : - { - "type" : "MODAL", - "phases" : [ "organic_matter" ], - "shape" : "LOG_NORMAL", - "geometric mean diameter [m]" : 1.16e-7, - "geometric standard deviation" : 1.65 - }, - "organic_matter_mode3" : - { - "type" : "MODAL", - "phases" : [ "organic_matter" ], - "shape" : "LOG_NORMAL", - "geometric mean diameter [m]" : 1.80e-6, - "geometric standard deviation" : 2.40 - }, - "black_carbon" : - { - "type" : "MODAL", - "phases" : [ "black_carbon" ], - "shape" : "LOG_NORMAL" - }, - "other_PM" : - { - "type" : "MODAL", - "phases" : [ "other_PM" ], - "shape" : "LOG_NORMAL", - "notes" : "FIXME - other PM not in manuscript, using parameters for organic aerosol" - } - } - } - ] -} diff --git a/test/monarch/monarch_box_modal/partitioning_species_params.json b/test/monarch/monarch_box_modal/partitioning_species_params.json deleted file mode 100755 index f014169a1..000000000 --- a/test/monarch/monarch_box_modal/partitioning_species_params.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "description" : [ - "Dry deposition reactions and species properties", - "TODO Consider updating diffusion coefficients according to Tang et al. Atmos. Chem. Phys., 14, 9233-9247 (2014)", - " available at https://www.atmos-chem-phys.net/14/9233/2014/acp-14-9233-2014.pdf" - ], - "camp-data" : [ - { - "name" : "NO2", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :6.316E-08, - "HLC exp factor [K]" :2.500E+03, - "dry dep reactivity factor [unitless]" :1.000E-01, - "diffusion coeff [m2 s-1]" :1.470E-05, - "dry dep notes" : [ - "HLC seems to be on the low end of measured values", - "(https://webbook.nist.gov/cgi/cbook.cgi?ID=C10102440&Mask=10)" - ] - }, - { - "name" : "NO", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.875E-08, - "HLC exp factor [K]" :1.480E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.830E-05 - }, - { - "name" : "O3", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.115E-07, - "HLC exp factor [K]" :2.300E+03, - "dry dep reactivity factor [unitless]" :1.000E+00, - "diffusion coeff [m2 s-1]" :1.750E-05 - }, - { - "name" : "NO3", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.480E-04, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :1.000E+00, - "diffusion coeff [m2 s-1]" :1.270E-05, - "dry dep notes" : [ - "HLC seems to be on the high end of measured values", - "(https://webbook.nist.gov/cgi/cbook.cgi?ID=C12033497&Units=SI&Mask=10#Solubility)" - ] - }, - { - "name" : "N2O5", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :9.869E+04, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :1.000E+00, - "diffusion coeff [m2 s-1]" :1.100E-05 - }, - { - "name" : "HNO3", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :0.98692, - "HLC exp factor [K]" :8.684E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.260E-05, - "dry dep notes" : [ - "Original HLC(298K)=2.69e13 (M atm-1) is orders of magnitude higher that nist values (~1e5); exp factor ok", - "https://webbook.nist.gov/cgi/cbook.cgi?ID=C7697372&Units=SI&Mask=10#Solubility", - "switched to nist value" - ] - }, - { - "name" : "HCL", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :0.98692, - "HLC exp factor [K]" :8.684E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.260E-05, - "dry dep notes" : [ - "Using parameters from HNO3" - ] - }, - { - "name" : "SULF", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :9.8692e5, - "HLC exp factor [K]" :8.684E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.260E-05, - "dry dep notes" : [ - "using HLC from nist (https://webbook.nist.gov/cgi/cbook.cgi?ID=C7664939&Units=SI&Mask=10#Solubility)" - ] - }, - { - "name" : "HONO", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :3.425E+00, - "HLC exp factor [K]" :3.775E+03, - "dry dep reactivity factor [unitless]" :1.000E-01, - "diffusion coeff [m2 s-1]" :1.530E-05 - }, - { - "name" : "PNA", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.974E+08, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :1.000E-01, - "diffusion coeff [m2 s-1]" :1.130E-05 - }, - { - "name" : "H2O2", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :7.353E-01, - "HLC exp factor [K]" :6.615E+03, - "dry dep reactivity factor [unitless]" :1.000E+00, - "diffusion coeff [m2 s-1]" :1.710E-05 - }, - { - "name" : "NTR", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.115E-05, - "HLC exp factor [K]" :5.487E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :9.200E-06 - }, - { - "name" : "ROOH", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.658E+01, - "HLC exp factor [K]" :1.024E+04, - "dry dep reactivity factor [unitless]" :1.000E-01, - "diffusion coeff [m2 s-1]" :1.270E-05 - }, - { - "name" : "FORM", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :2.931E-02, - "HLC exp factor [K]" :7.190E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.830E-05 - }, - { - "name" : "MEOH", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :2.931E-02, - "HLC exp factor [K]" :7.190E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.830E-05, - "dry dep notes" : [ - "Using values from FORM" - ] - }, - { - "name" : "ETOH", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :2.931E-02, - "HLC exp factor [K]" :7.190E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.830E-05, - "dry dep notes" : [ - "Using values from FORM" - ] - }, - { - "name" : "ALD2", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.125E-04, - "HLC exp factor [K]" :6.266E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.510E-05 - }, - { - "name" : "ALDX", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.125E-04, - "HLC exp factor [K]" :6.266E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.510E-05 - }, - { - "name" : "PAR", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.115E-08, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.180E-05 - }, - { - "name" : "CO", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :8.093E-08, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.890E-05 - }, - { - "name" : "MEPX", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :2.181E-03, - "HLC exp factor [K]" :5.607E+03, - "dry dep reactivity factor [unitless]" :1.000E-01, - "diffusion coeff [m2 s-1]" :1.440E-05 - }, - { - "name" : "FACD", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :9.721E+01, - "HLC exp factor [K]" :5.716E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.530E-05 - }, - { - "name" : "PAN", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :2.931E-05, - "HLC exp factor [K]" :5.760E+03, - "dry dep reactivity factor [unitless]" :1.000E-01, - "diffusion coeff [m2 s-1]" :9.100E-06 - }, - { - "name" : "PANX", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :2.931E-05, - "HLC exp factor [K]" :5.760E+03, - "dry dep reactivity factor [unitless]" :1.000E-01, - "diffusion coeff [m2 s-1]" :9.100E-06, - "dry dep notes" : [ - "Using values from PAN" - ] - }, - { - "name" : "PACD", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :4.668E-03, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :1.000E-01, - "diffusion coeff [m2 s-1]" :1.150E-05 - }, - { - "name" : "AACD", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :9.504E+00, - "HLC exp factor [K]" :8.374E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.240E-05 - }, - { - "name" : "OLE", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :4.698E-08, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.540E-05 - }, - { - "name" : "ETH", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :4.609E-08, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.890E-05 - }, - { - "name" : "IOLE", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.332E-08, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.210E-05 - }, - { - "name" : "TOL", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.490E-06, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.040E-05 - }, - { - "name" : "CRES", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :3.948E+00, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :9.600E-06 - }, - { - "name" : "MGLY", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :3.661E-02, - "HLC exp factor [K]" :7.541E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.180E-05 - }, - { - "name" : "XYL", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.431E-06, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :9.700E-06 - }, - { - "name" : "OPEN", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.431E-06, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :9.700E-06, - "dry dep notes" : [ - "Using values from XYL" - ] - }, - { - "name" : "ISOP", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :4.698E-08, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.210E-05 - }, - { - "name" : "TERP", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :4.698E-08, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.210E-05, - "dry dep notes" : [ - "Using values from ISOP" - ] - }, - { - "name" : "ISPD", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :4.698E-08, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.210E-05 - }, - { - "name" : "SO2", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :2.497E+00, - "HLC exp factor [K]" :5.816E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.260E-05, - "special dry deposition species" : "SO2" - }, - { - "name" : "ETHA", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.974E-08, - "HLC exp factor [K]" :0.000E+00, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.830E-05 - }, - { - "name" : "NH3", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :1.026E-01, - "HLC exp factor [K]" :3.660E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :2.270E-05, - "special dry deposition species" : "NH3" - }, - { - "name" : "ISOP-P1", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :9.721E+01, - "HLC exp factor [K]" :5.716E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.530E-05 - }, - { - "name" : "ISOP-P2", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :9.721E+01, - "HLC exp factor [K]" :5.716E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.530E-05, - "dry dep notes" : "changed diff coeff from 0.0 to match ISOP-P1" - }, - { - "name" : "TERP-P1", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :9.721E+01, - "HLC exp factor [K]" :5.716E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.530E-05 - }, - { - "name" : "TERP-P2", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" :9.721E+01, - "HLC exp factor [K]" :5.716E+03, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :1.530E-05, - "dry dep notes" : "changed diff coeff from 0.0 to match ISOP-P2" - }, - { - "name" : "DMS", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" : 5.59585E-06, - "HLC exp factor [K]" : 3500.0, - "dry dep reactivity factor [unitless]" :0.000E+00, - "diffusion coeff [m2 s-1]" :9.900E-03, - "dry dep notes" : [ - "got HLC params from nist webbook https://webbook.nist.gov/cgi/cbook.cgi?ID=C75183&Mask=10#Solubility" - ] - } - ] -} diff --git a/test/monarch/monarch_box_modal/tsigaridis_2_product_SOA_scheme/mechanism.json b/test/monarch/monarch_box_modal/tsigaridis_2_product_SOA_scheme/mechanism.json deleted file mode 100755 index 9bf99abb8..000000000 --- a/test/monarch/monarch_box_modal/tsigaridis_2_product_SOA_scheme/mechanism.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "notes" : [ - "2-product SOA scheme from MONARCH model. Based on Tsigaridis and Kanakidou (2007).", - "Details in Spada et al. (2013) in prep for Geosci. Model Dev.", - "Gas-phase rate constants taken from CB05 reactions with same reactants", - "TODO the CB05 reactions should be updated/removed to avoid competition with SOA scheme", - "Clausius clapyron parameters (C* and -dH/R) converted to SIMPOL.1 paramaters" - ], - "camp-data" : [ - { - "name" : "MONARCH mod37", - "type" : "MECHANISM", - "reactions" : [ - { - "type" : "ARRHENIUS", - "reactants" : { - "OH" : {}, - "ISOP" : {} - }, - "products" : { - "ISOP-P1" : { "yield" : 0.192 } - }, - "A" : 2.54e-11, - "C" : 407.6 - }, - { - "type" : "ARRHENIUS", - "reactants" : { - "O3" : {}, - "ISOP" : {} - }, - "products" : { - "ISOP-P2" : { "yield" : 0.215 } - }, - "A" : 7.86e-15, - "C" : -1912.0 - }, - { - "type" : "ARRHENIUS", - "reactants" : { - "OH" : {}, - "TERP": {} - }, - "products" : { - "TERP-P1" : { "yield" : 0.0288 } - }, - "A" : 1.5e-11, - "C" : 449.0 - }, - { - "type" : "ARRHENIUS", - "reactants" : { - "O3" : {}, - "TERP" : {} - }, - "products" : { - "TERP-P2" : { "yield" : 0.232 } - }, - "A" : 1.2e-15, - "C" : -821.0 - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "ISOP-P1", - "aerosol phase" : "organic_matter", - "aerosol-phase species" : "ISOP-P1_aero", - "B" : [ 3.81e3, -2.13e1, 0.0, 0.0 ] - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "ISOP-P2", - "aerosol phase" : "organic_matter", - "aerosol-phase species" : "ISOP-P2_aero", - "B" : [ 3.81e3, -2.09e1, 0.0, 0.0 ] - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "TERP-P1", - "aerosol phase" : "organic_matter", - "aerosol-phase species" : "TERP-P1_aero", - "B" : [ 2.19e3, -1.75e1, 0.0, 0.0 ] - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "TERP-P2", - "aerosol phase" : "organic_matter", - "aerosol-phase species" : "TERP-P2_aero", - "B" : [ 2.19e3, -1.53e1, 0.0, 0.0 ] - } - ] - } - ] -} diff --git a/test/monarch/monarch_box_modal/tsigaridis_2_product_SOA_scheme/species.json b/test/monarch/monarch_box_modal/tsigaridis_2_product_SOA_scheme/species.json deleted file mode 100755 index e46bc5511..000000000 --- a/test/monarch/monarch_box_modal/tsigaridis_2_product_SOA_scheme/species.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "description" : [ - "These species needed for the 2 product SOA scheme", - "(see mechanism.json for details)" - ], - "camp-data" : [ - { - "name" : "ISOP-P1", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.08806, - "description" : "gas-phase product from isoprene oxidation by OH", - "notes" : [ - "using diffusion coefficient from dry deposition", - "see notes on ISOP-P1_aero species" - ] - }, - { - "name" : "ISOP-P2", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.09003, - "description" : "gas-phase product from isoprene oxidation by O3", - "notes" : [ - "using diffusion coefficient from dry deposition", - "see notes on ISOP-P2_aero species" - ] - }, - { - "name" : "TERP-P1", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.17025, - "description" : "gas-phase product from monoterpene oxidation by OH", - "notes" : [ - "using diffusion coefficient from dry deposition", - "see notes on TERP-P1_aero species" - ] - }, - { - "name" : "TERP-P2", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.202162, - "description" : "gas-phase product from monoterpene oxidation by O3", - "notes" : [ - "using diffusion coefficient from dry deposition", - "see notes on TERP-P2_aero species" - ] - }, - { - "name" : "POA", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.41475, - "description" : "lumped hydrophobic particulate matter", - "num_ions" : 0, - "kappa" : 0.0, - "note" : "Using C30H54 for molecular weight. TODO find best surrogate" - }, - { - "name" : "ISOP-P1_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.08806, - "description" : "First isoprene SOA species in 2-product scheme", - "num_ions" : 0, - "kappa" : 0.1, - "note" : [ - "Using ketopropanoic acid for molecular weight. TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - }, - { - "name" : "ISOP-P2_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.09003, - "description" : "Second isoprene SOA species in 2-product scheme", - "num_ions" : 0, - "kappa" : 0.1, - "note" : [ - "Using oxalic acid for molecular weight. TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - }, - { - "name" : "TERP-P1_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.17025, - "description" : "First monoterpene SOA species in 2-product scheme", - "num_ions" : 0, - "kappa" : 0.1, - "note" : [ - "Using 2-hydroxy-3-isopropyl-6-methyl-cyclohexanone for molecular weight", - "TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - }, - { - "name" : "TERP-P2_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.202162, - "description" : "Second monoterpene SOA species in 2-product scheme", - "num_ions" : 0, - "kappa" : 0.1, - "note" : [ - "Using 2-methyl-5-carboxy-2,4-hexodienoic acid. TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - } - ] -} diff --git a/test/monarch/monarch_mod37_2_product_SOA.json b/test/monarch/monarch_mod37_2_product_SOA.json deleted file mode 100644 index a8b1286fb..000000000 --- a/test/monarch/monarch_mod37_2_product_SOA.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "notes" : [ - "2-product SOA scheme from MONARCH model. Based on Tsigaridis and Kanakidou (2007).", - "Details in Spada et al. (2013) in prep for Geosci. Model Dev.", - "Gas-phase rate constants taken from CB05 reactions with same reactants", - "TODO the CB05 reactions should be updated/removed to avoid competition with SOA scheme", - "Clausius clapyron parameters (C* and -dH/R) converted to SIMPOL.1 paramaters" - ], - "camp-data" : [ - { - "name" : "ISOP-P1", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.08806, - "diffusion coeff [m2 s-1]" : 1.2e-5, - "description" : "gas-phase product from isoprene oxidation by OH", - "notes" : [ - "TODO get actual gas-phase diffusion coefficient", - "see notes on ISOP-P1_aero species" - ] - }, - { - "name" : "ISOP-P2", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.09003, - "diffusion coeff [m2 s-1]" : 1.2e-5, - "description" : "gas-phase product from isoprene oxidation by O3", - "notes" : [ - "TODO get actual gas-phase diffusion coefficient", - "see notes on ISOP-P2_aero species" - ] - }, - { - "name" : "TERP-P1", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.17025, - "diffusion coeff [m2 s-1]" : 1.2e-5, - "description" : "gas-phase product from monoterpene oxidation by OH", - "notes" : [ - "TODO get actual gas-phase diffusion coefficient", - "see notes on TERP-P1_aero species" - ] - }, - { - "name" : "TERP-P2", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "molecular weight [kg mol-1]" : 0.202162, - "diffusion coeff [m2 s-1]" : 1.2e-5, - "description" : "gas-phase product from monoterpene oxidation by O3", - "notes" : [ - "TODO get actual gas-phase diffusion coefficient", - "see notes on TERP-P2_aero species" - ] - }, - { - "name" : "2 Product SOA scheme", - "type" : "MECHANISM", - "reactions" : [ - { - "type" : "ARRHENIUS", - "reactants" : { - "OH" : {}, - "ISOP" : {} - }, - "products" : { - "ISOP-P1" : { "yield" : 0.192 } - }, - "A" : 2.54e-11, - "C" : 407.6 - }, - { - "type" : "ARRHENIUS", - "reactants" : { - "O3" : {}, - "ISOP" : {} - }, - "products" : { - "ISOP-P2" : { "yield" : 0.215 } - }, - "A" : 7.86e-15, - "C" : -1912.0 - }, - { - "type" : "ARRHENIUS", - "reactants" : { - "OH" : {}, - "TERP": {} - }, - "products" : { - "TERP-P1" : { "yield" : 0.0288 } - }, - "A" : 1.5e-11, - "C" : 449.0 - }, - { - "type" : "ARRHENIUS", - "reactants" : { - "O3" : {}, - "TERP" : {} - }, - "products" : { - "TERP-P2" : { "yield" : 0.232 } - }, - "A" : 1.2e-15, - "C" : -821.0 - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "ISOP-P1", - "aerosol phase" : "organic matter", - "aerosol-phase species" : "ISOP-P1_aero", - "B" : [ 3.81e3, -2.13e1, 0.0, 0.0 ] - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "ISOP-P2", - "aerosol phase" : "organic matter", - "aerosol-phase species" : "ISOP-P2_aero", - "B" : [ 3.81e3, -2.09e1, 0.0, 0.0 ] - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "TERP-P1", - "aerosol phase" : "organic matter", - "aerosol-phase species" : "TERP-P1_aero", - "B" : [ 2.19e3, -1.75e1, 0.0, 0.0 ] - }, - { - "type" : "SIMPOL_PHASE_TRANSFER", - "gas-phase species" : "TERP-P2", - "aerosol phase" : "organic matter", - "aerosol-phase species" : "TERP-P2_aero", - "B" : [ 2.19e3, -1.53e1, 0.0, 0.0 ] - } - ] - } - ] -} diff --git a/test/monarch/monarch_mod37_aerosol_activity.json b/test/monarch/monarch_mod37_aerosol_activity.json deleted file mode 100644 index 2e734ec0a..000000000 --- a/test/monarch/monarch_mod37_aerosol_activity.json +++ /dev/null @@ -1,339 +0,0 @@ -{ - "notes" : [ - "PD-FiTE activity calculations for aqueous aerosol species. Parameters from tables 3 and 4 in", - "Topping et al. 2009." - ], - "camp-data" : [ - { - "type" : "SUB_MODEL_PDFITE", - "name" : "MONARCH inorganic activities", - "gas-phase water" : "H2O", - "aerosol-phase water" : "H2O_aq", - "aerosol phase" : "aqueous sulfate", - "calculate for" : { - "H-NO3" : { - "interactions" : [ - { - "ion pair": "H-NO3", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ 0.925133 ] - }, - { - "ion pair": "H-NO3", - "min RH" : 0.1, - "max RH" : 0.4, - "B" : [ 0.12091, 13.497, -67.771, 144.01, -117.97 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.4, - "max RH" : 0.9, - "B" : [ 1.3424, -0.8197, -0.52983, -0.37335 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.9, - "max RH" : 0.99, - "B" : [ -1420.5, 4467.9, -4682.7, 1635.1 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -0.2573751 ] - }, - { - "ion pair" : "H2-SO4", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ 7.0531446 ] - }, - { - "ion pair" : "H2-SO4", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ 9.3948, -26.808, 35.7654, -18.5094 ] - }, - { - "ion pair" : "H2-SO4", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -0.0511038 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -31.136334 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -40.4136, 108.798, -170.346, 100.926 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -1.7312977 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -11.93308 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -17.0372, 59.232, -86.312, 44.04 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -0.2599432 ] - } - ] - }, - "NH4/H" : { - "interactions" : [ - { - "ion pair" : "H-NO3", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -31.711852 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -39.1996, 84.264, -99.276, 54.108 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -0.5777093 ] - }, - { - "ion pair" : "H2-SO4", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -58.151568 ] - }, - { - "ion pair" : "H2-SO4", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -72.978, 165.162, -177.51, 85.332 ] - }, - { - "ion pair" : "H2-SO4", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -0.6476167 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -8.918661 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -15.213, 79.782, -193.326, 262.77, -133.71 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ 0.81654313 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -24.41782 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -25.8256, 12.772, 13.058 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.99, - "max RH" : 1.0, - "B": [ -0.3831742 ] - } - ] - }, - "H2-SO4" : { - "interactions" : [ - { - "ion pair" : "H2-SO4", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ 1.1220548 ] - }, - { - "ion pair" : "H2-SO4", - "min RH" : 0.1, - "max RH" : 0.9, - "B" : [ 1.3701, -2.1559, -3.5227, 2.7718 ] - }, - { - "ion pair" : "H2-SO4", - "min RH" : 0.9, - "max RH" : 0.99, - "B" : [ -395.18, 1333.7, -1504, 564.63 ] - }, - { - "ion pair" : "H2-SO4", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -1.0274756 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ 4.70701952 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ 8.5472, -50.16, 137.44, -216.596, 186.708, -65.528 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ 0.46534564 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -30.961877 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -48.3636, 235.092, -726.24, 1263.42, -1125, 400.26 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -1.5424153 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -15.557633 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -27.8844, 150.552, -298.588, 266.46, -90.128 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ 0.48525555 ] - } - ] - }, - "H-HSO4" : { - "interactions" : [ - { - "ion pair" : "H-HSO4", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ 1.1220548 ] - }, - { - "ion pair" : "H-HSO4", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ 2.6875, -11.832, 20.601, -18.593 ] - }, - { - "ion pair" : "H-HSO4", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -6.8759092 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -5.4701562 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -7.6016, 25.836, -49.924, 48.772, -16.8816 ] - }, - { - "ion pair" : "H-NO3", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ 0.15255283 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -39.541392 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -49.9236, 120.066, -172.5, 100.608 ] - }, - { - "ion pair" : "(NH4)2-SO4", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -2.5056682 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.0, - "max RH" : 0.1, - "B" : [ -25.289738 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.1, - "max RH" : 0.99, - "B" : [ -37.008, 141.284, -263.06, 227.336, -68.736 ] - }, - { - "ion pair" : "NH4-NO3", - "min RH" : 0.99, - "max RH" : 1.0, - "B" : [ -0.4055799 ] - } - ] - } - } - } - ] -} diff --git a/test/monarch/monarch_mod37_aerosol_phases.json b/test/monarch/monarch_mod37_aerosol_phases.json deleted file mode 100644 index abfa4d321..000000000 --- a/test/monarch/monarch_mod37_aerosol_phases.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "description" : "These aerosol phases correspond to the MONARCH 'mod37' configuration", - "camp-data" : [ - { - "name" : "dust", - "type": "AERO_PHASE", - "species" : [ "lumped high-density dust species", "lumped low-density dust species" ], - "notes" : { - "MLD 02/05/2018" : "consider replacing this with a set of inorganic species" - } - }, - { - "name" : "sea salt", - "type" : "AERO_PHASE", - "species" : [ "lumped sea salt species" ], - "notes" : { - "MLD 02/05/2018" : "consider replacing with H2O, Na+, Cl-" - } - }, - { - "name" : "organic matter", - "type" : "AERO_PHASE", - "species" : [ "PM_phob", "PM_phil", "ISOP-P1_aero", "ISOP-P2_aero", "TERP-P1_aero", "TERP-P2_aero" ] - }, - { - "name" : "black carbon", - "type" : "AERO_PHASE", - "species" : [ "BC_phob", "BC_phil" ] - }, - { - "name" : "aqueous sulfate", - "type" : "AERO_PHASE", - "species" : [ "H2O_aq", "H_p", "OH_m", - "H2SO4_aq", "SO4_mm", "HSO4_m", - "HNO3_aq", "NO3_m", - "NH3_aq", "NH4_p", - "(NH4)2-SO4", "NH4-NO3", "H-NO3", "H2-SO4", "H-HSO4", "NH4/H" - ], - "description" : "Aqueous sulfate aerosol phase for SO4--NO3--NH3 aerosol" - }, - { - "name" : "other PM", - "type" : "AERO_PHASE", - "species" : [ "other PM", "other other PM" ], - "description" : "unspecified particulate matter" - } - ] -} diff --git a/test/monarch/monarch_mod37_aerosol_representation.json b/test/monarch/monarch_mod37_aerosol_representation.json deleted file mode 100644 index 3331f0807..000000000 --- a/test/monarch/monarch_mod37_aerosol_representation.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "description" : [ - "This is the mass-based MONARCH aerosol representation for the 'mod37' configuration", - "Parameter for the bins and modes were taken from Spada et al. (2015) manuscript -", - "'Global aerosols in the online multiscale NMMB/BSC Chemical Transport Model'" - ], - "camp-data" : [ - { - "name" : "MONARCH mass-based", - "type" : "AERO_REP_MODAL_BINNED_MASS", - "modes/bins" : - { - "dust" : - { - "type" : "BINNED", - "phases" : [ "dust" ], - "bins" : 8, - "minimum diameter [m]" : 1.0e-7, - "maximum diameter [m]" : 1.0e-5, - "scale" : "LOG" - }, - "sea salt" : - { - "type" : "BINNED", - "phases" : [ "sea salt" ], - "bins" : 8, - "minimum diameter [m]" : 1.0e-7, - "maximum diameter [m]" : 1.5e-5, - "scale" : "LOG" - }, - "organic matter" : - { - "type" : "MODAL", - "phases" : [ "organic matter" ], - "shape" : "LOG_NORMAL" - }, - "black carbon" : - { - "type" : "MODAL", - "phases" : [ "black carbon" ], - "shape" : "LOG_NORMAL" - }, - "sulfate" : - { - "type" : "MODAL", - "phases" : [ "aqueous sulfate" ], - "shape" : "LOG_NORMAL" - }, - "other PM" : - { - "type" : "MODAL", - "phases" : [ "other PM" ], - "shape" : "LOG_NORMAL", - "notes" : "FIXME - other PM not in manuscript, using parameters for organic aerosol" - } - } - } - ] -} diff --git a/test/monarch/monarch_mod37_aerosol_species.json b/test/monarch/monarch_mod37_aerosol_species.json deleted file mode 100644 index 254d7c68f..000000000 --- a/test/monarch/monarch_mod37_aerosol_species.json +++ /dev/null @@ -1,295 +0,0 @@ -{ - "description" : [ - "These aerosol species and ion pairs are needed for the MONARCH 'mod37' configuration", - "Densities are taken from Spada et al. (2015) manuscript - ", - "'Global Aerosols in the online multiscale NMMB/BSC Chemical Transport Model", - "or estimated from bulk densities.", - "TODO check about molecular weight [kg mol-1]s" - ], - "camp-data" : [ - { - "name" : "lumped high-density dust species", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "molecular weight [kg mol-1]" : 0.1, - "density [kg m-3]" : 2650.0 - }, - { - "name" : "lumped low-density dust species", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "molecular weight [kg mol-1]" : 0.1, - "density [kg m-3]" : 2650.0 - }, - { - "name" : "lumped sea salt species", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "molecular weight [kg mol-1]" : 0.1, - "density [kg m-3]" : 2160.0 - }, - { - "name" : "PM_phob", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.41475, - "description" : "lumped hydrophobic particulate matter", - "note" : "Using C30H54 for molecular weight [kg mol-1]. TODO find best surrogate" - }, - { - "name" : "PM_phil", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.28448, - "description" : "lumped hydrophilic particulate matter", - "note" : "Using C18H36O2 for molecular weight [kg mol-1]. TODO find best surrogate" - }, - { - "name" : "ISOP-P1_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.08806, - "description" : "First isoprene SOA species in 2-product scheme", - "note" : [ - "Using ketopropanoic acid for molecular weight [kg mol-1]. TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - }, - { - "name" : "ISOP-P2_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.09003, - "description" : "Second isoprene SOA species in 2-product scheme", - "note" : [ - "Using oxalic acid for molecular weight [kg mol-1]. TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - }, - { - "name" : "TERP-P1_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.17025, - "description" : "First monoterpene SOA species in 2-product scheme", - "note" : [ - "Using 2-hydroxy-3-isopropyl-6-methyl-cyclohexanone for molecular weight [kg mol-1]", - "TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - }, - { - "name" : "TERP-P2_aero", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1800.0, - "molecular weight [kg mol-1]" : 0.202162, - "description" : "Second monoterpene SOA species in 2-product scheme", - "note" : [ - "Using 2-methyl-5-carboxy-2,4-hexodienoic acid. TODO find best surrogate", - "TODO update SIMPOL parameters based on MW of new surrogate" - ] - }, - { - "name" : "BC_phob", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.1, - "description" : "hydrophobic black carbon" - }, - { - "name" : "BC_phil", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.1, - "description" : "hydrophilic black carbon" - }, - { - "name" : "H2O_aq", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "tracer type" : "CONSTANT", - "absolute integration tolerance" : 1.0E-05, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.01801528, - "decscription" : "aerosol-phase water" - }, - { - "name" : "H_p", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-09, - "charge" : 1, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.001008, - "description" : "hydronium ion" - }, - { - "name" : "OH_m", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-09, - "charge" : -1, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.017008, - "description" : "hydroxide ion" - }, - { - "name" : "H2SO4_aq", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-09, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.098079, - "description" : "undissociated aqueous-phase sulfuric acid" - }, - { - "name" : "SO4_mm", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-09, - "charge" : -2, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.096063, - "description" : "sulfate ion" - }, - { - "name" : "HSO4_m", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-09, - "charge" : -1, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.097069, - "description" : "bisulfate ion" - }, - { - "name" : "HNO3_aq", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-09, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.0630129, - "description" : "undissociated aqueous-phase nitric acid" - }, - { - "name" : "NO3_m", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-09, - "charge" : -1, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.0620049, - "description" : "nitrate ion" - }, - { - "name" : "NH3_aq", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-09, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.017031, - "description" : "aqueous ammonia (neutral)" - }, - { - "name" : "NH4_p", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-09, - "charge": 1, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.018039, - "description" : "ammonium ion" - }, - { - "name" : "(NH4)2-SO4", - "type" : "CHEM_SPEC", - "tracer type" : "ION_PAIR", - "ions" : { - "NH4_p" : { "qty" : 2 }, - "SO4_mm" : {} - } - }, - { - "name" : "NH4-NO3", - "type" : "CHEM_SPEC", - "tracer type" : "ION_PAIR", - "ions" : { - "NH4_p" : {}, - "NO3_m" : {} - } - }, - { - "name" : "H-NO3", - "type" : "CHEM_SPEC", - "tracer type" : "ION_PAIR", - "ions" : { - "H_p" : {}, - "NO3_m" : {} - } - }, - { - "name" : "H2-SO4", - "type" : "CHEM_SPEC", - "tracer type" : "ION_PAIR", - "ions" : { - "H_p" : { "qty" : 2 }, - "SO4_mm" : {} - } - }, - { - "name" : "H-HSO4", - "type" : "CHEM_SPEC", - "tracer type" : "ION_PAIR", - "ions" : { - "H_p" : {}, - "HSO4_m" : {} - } - }, - { - "name" : "NH4/H", - "type" : "CHEM_SPEC", - "tracer type" : "ION_PAIR", - "ions" : { - "NH4_p" : {}, - "OH_m" : {} - } - }, - { - "name" : "other PM", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "molecular weight [kg mol-1]" : 0.100, - "density [kg m-3]" : 1000.0, - "description" : "unspecified particulate matter FIXME" - }, - { - "name" : "other other PM", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "absolute integration tolerance" : 1.0E-05, - "molecular weight [kg mol-1]" : 0.100, - "density [kg m-3]" : 1000.0, - "description" : "second unspecified particulate matter species FIXME" - } - ] -} diff --git a/test/monarch/monarch_mod37_comp.txt b/test/monarch/monarch_mod37_comp.txt deleted file mode 100644 index 19ceff6da..000000000 --- a/test/monarch/monarch_mod37_comp.txt +++ /dev/null @@ -1,102 +0,0 @@ - 360.000000 1.79999992E-02 2.00000009E-03 5.99999987E-02 0.00000000 0.00000000 2.00000009E-03 1.00000005E-03 0.00000000 7.99999980E-04 0.00000000 0.00000000 1.49999997E-02 4.99999989E-03 1.00000005E-03 1.00000005E-03 20.0000000 0.00000000 2.00000009E-03 1.00000000 0.00000000 0.00000000 1.00000005E-03 0.00000000 3.00000003E-03 9.99999978E-03 5.00000024E-04 8.29999987E-03 4.99999987E-06 0.00000000 0.00000000 3.00000003E-03 1.00000005E-03 0.00000000 3.99999991E-02 4.00000019E-03 0.00000000 0.100000001 5.00000024E-04 1.99999996E-02 0.00000000 0.00000000 1.00000005E-03 1.00000005E-03 9.99999975E-05 0.00000000 0.00000000 9.99999997E-07 9.99999975E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 0.720000029 0.819999993 0.920000017 1.01999998 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 361.600006 1.80762466E-02 1.87309459E-03 5.98993488E-02 1.11929886E-07 7.27692964E-08 2.00061547E-03 1.00002938E-03 4.59114672E-05 8.00435373E-04 1.69424868E-06 1.58134966E-07 1.50049319E-02 5.00159105E-03 1.00664713E-03 1.06324838E-03 19.9999847 4.18099916E-10 1.99999381E-03 0.999998629 1.75598359E-07 6.27636298E-09 9.99999233E-04 1.97526902E-06 2.99959420E-03 9.99967940E-03 4.99656657E-04 8.29983316E-03 5.24975212E-06 1.06748361E-08 2.05456843E-07 2.99974321E-03 9.99261276E-04 3.29191579E-07 3.99670303E-02 3.99998855E-03 1.17549153E-08 9.99988988E-02 4.99999616E-04 1.99999996E-02 5.56102094E-13 4.46588488E-10 9.99999582E-04 9.99995740E-04 9.74461436E-05 1.84330029E-09 0.00000000 7.18293620E-08 4.64455661E-05 1.32051637E-05 2.59498597E-06 2.78074150E-08 6.63509603E-09 2.35688269E-08 3.24740284E-07 2.45224712E-13 1.91726528E-08 8.50644994E-08 7.53020563E-11 1.37805316E-07 3.37301259E-07 1.70269795E-05 1.17549153E-08 4.12647000E-12 7.03778077E-11 4.07462792E-08 1.64768454E-09 6.60096759E-08 2.66927547E-09 2.17299601E-09 1.04087372E-09 4.20905151E-11 2.55385180E-06 1.00000000 1.98892696E-04 2.33267347E-04 3.15787511E-05 1.32530491E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.03633635E-02 2.88149305E-02 0.719139814 2.26130392E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 363.200012 1.81622356E-02 1.76474568E-03 5.98042309E-02 1.14472073E-07 1.45354761E-07 2.00094725E-03 1.00004359E-03 6.30001814E-05 8.00556678E-04 4.12612098E-06 3.21151560E-07 1.50084263E-02 5.00274450E-03 1.01119198E-03 1.11932110E-03 19.9999771 6.68053945E-10 1.99999032E-03 0.999997914 2.88839516E-07 1.06566169E-08 9.99999233E-04 4.20745710E-06 2.99934088E-03 9.99948848E-03 4.99363290E-04 8.29974376E-03 5.39993289E-06 1.73156440E-08 3.15580934E-07 2.99960561E-03 9.98835545E-04 5.15546674E-07 3.99424769E-02 3.99998203E-03 1.80558004E-08 9.99983102E-02 4.99999383E-04 1.99999996E-02 1.00329803E-12 6.93076985E-10 9.99999349E-04 9.99993412E-04 9.49928435E-05 1.84014604E-09 0.00000000 4.44434427E-08 2.75152743E-05 1.73035842E-05 3.45410604E-06 3.45643194E-08 3.92812849E-09 1.45404604E-08 3.28607143E-07 1.59956168E-13 1.18457129E-08 9.66832374E-08 6.93615165E-11 1.56623983E-07 5.17995716E-07 2.98976083E-05 1.80558004E-08 2.59794703E-12 6.86408291E-11 9.59477120E-08 3.14704995E-09 1.55434918E-07 5.09822939E-09 2.46981435E-09 2.45101561E-09 8.03923386E-11 5.00715532E-06 1.00000000 1.98910566E-04 2.33266634E-04 3.15888828E-05 1.34067319E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.04191646E-02 2.88388636E-02 0.719979584 2.28943285E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 364.800018 1.82483923E-02 1.66611711E-03 5.97137921E-02 1.16406142E-07 2.12012296E-07 2.00118707E-03 1.00005278E-03 7.01660538E-05 8.00609181E-04 6.72227952E-06 4.56978796E-07 1.50114447E-02 5.00372238E-03 1.01504487E-03 1.17299717E-03 19.9999714 8.36159308E-10 1.99998775E-03 0.999997377 3.68797203E-07 1.36593856E-08 9.99999349E-04 6.45274895E-06 2.99913739E-03 9.99933947E-03 4.99086455E-04 8.29967950E-03 5.50593677E-06 2.16903366E-08 3.94747843E-07 2.99950666E-03 9.98511561E-04 6.55485167E-07 3.99206914E-02 3.99997737E-03 2.25854624E-08 9.99978855E-02 4.99999209E-04 1.99999996E-02 1.28693931E-12 8.71522965E-10 9.99999233E-04 9.99991782E-04 9.26142093E-05 1.83657423E-09 0.00000000 3.40260797E-08 2.05620981E-05 1.88593676E-05 3.81558721E-06 3.39688491E-08 2.93391755E-09 1.09042810E-08 3.29042649E-07 1.28970876E-13 8.81789930E-09 9.28744583E-08 6.72888759E-11 1.50450646E-07 6.47844502E-07 4.13934722E-05 2.25854624E-08 1.99503239E-12 5.90914540E-11 1.47781634E-07 4.23593738E-09 2.39403079E-07 6.86217172E-09 2.37252973E-09 3.77513976E-09 1.08208519E-10 7.38579183E-06 1.00000000 1.98923561E-04 2.33267900E-04 3.15965044E-05 1.35601585E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.04587458E-02 2.88560260E-02 0.720580697 2.31699832E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 366.400024 1.83310602E-02 1.57484005E-03 5.96282743E-02 1.18224861E-07 2.72556122E-07 2.00139009E-03 1.00005965E-03 7.34959685E-05 8.00644746E-04 9.34067702E-06 5.78772244E-07 1.50142647E-02 5.00461273E-03 1.01861998E-03 1.22563040E-03 19.9999676 9.66131952E-10 1.99998566E-03 0.999996960 4.35354764E-07 1.61634581E-08 9.99999465E-04 8.71362226E-06 2.99895415E-03 9.99920722E-03 4.98816720E-04 8.29962548E-03 5.59391901E-06 2.50757015E-08 4.61344456E-07 2.99942330E-03 9.98229021E-04 7.76544368E-07 3.99000384E-02 3.99997365E-03 2.63958757E-08 9.99975279E-02 4.99999092E-04 1.99999996E-02 1.49305665E-12 1.02127351E-09 9.99999116E-04 9.99990385E-04 9.03116452E-05 1.83288684E-09 0.00000000 3.00445571E-08 1.82388958E-05 1.96998153E-05 4.02756086E-06 3.19188196E-08 2.60190558E-09 9.54625623E-09 3.29815123E-07 1.19098199E-13 7.68322472E-09 8.76931381E-08 6.73670703E-11 1.42054418E-07 7.57037981E-07 5.23328708E-05 2.63958757E-08 1.75649892E-12 5.26381959E-11 1.93416781E-07 5.09721731E-09 3.13327860E-07 8.25736901E-09 2.24018093E-09 4.94091967E-09 1.30210467E-10 9.68835684E-06 1.00000000 1.98933238E-04 2.33269311E-04 3.16010919E-05 1.37132345E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.04962111E-02 2.88726781E-02 0.721097708 2.34449357E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 368.000031 1.84096191E-02 1.48892694E-03 5.95469289E-02 1.19950116E-07 3.28120308E-07 2.00157845E-03 1.00006536E-03 7.56012814E-05 8.00675887E-04 1.19446686E-05 6.99096915E-07 1.50170019E-02 5.00545651E-03 1.02208450E-03 1.27778808E-03 19.9999638 1.08080989E-09 1.99998380E-03 0.999996543 4.96880489E-07 1.85309208E-08 9.99999698E-04 1.09892544E-05 2.99877906E-03 9.99908242E-03 4.98550129E-04 8.29957519E-03 5.67481220E-06 2.80032566E-08 5.22833602E-07 2.99934647E-03 9.97963361E-04 8.89904413E-07 3.98798548E-02 3.99996992E-03 2.99140517E-08 9.99972001E-02 4.99998976E-04 1.99999996E-02 1.67141182E-12 1.15906340E-09 9.99999000E-04 9.99989104E-04 8.80741791E-05 1.82927773E-09 0.00000000 2.80234733E-08 1.74405413E-05 2.04106655E-05 4.20699462E-06 2.99601624E-08 2.48808640E-09 8.89401530E-09 3.30687953E-07 1.15994698E-13 7.13616766E-09 8.39857108E-08 6.81069437E-11 1.36046054E-07 8.57827388E-07 6.30471841E-05 2.99140517E-08 1.63308852E-12 4.91522691E-11 2.34495829E-07 5.87185633E-09 3.79870784E-07 9.51218837E-09 2.14548246E-09 5.99031624E-09 1.49999235E-10 1.19258211E-05 1.00000000 1.98942143E-04 2.33271057E-04 3.16053047E-05 1.38660151E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.05308488E-02 2.88881324E-02 0.721574962 2.37186570E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 369.600037 1.84841268E-02 1.40756834E-03 5.94693422E-02 1.21592080E-07 3.79323978E-07 2.00175866E-03 1.00007025E-03 7.72325729E-05 8.00705981E-04 1.45273270E-05 8.21982212E-07 1.50196897E-02 5.00626583E-03 1.02548720E-03 1.32964063E-03 19.9999599 1.18781862E-09 1.99998193E-03 0.999996185 5.55765439E-07 2.08648636E-08 9.99999931E-04 1.32786881E-05 2.99860886E-03 9.99896135E-03 4.98285459E-04 8.29952769E-03 5.75178092E-06 3.06339061E-08 5.81404379E-07 2.99927336E-03 9.97707364E-04 9.98847099E-07 3.98599431E-02 3.99996666E-03 3.32652448E-08 9.99968871E-02 4.99998860E-04 1.99999996E-02 1.83980435E-12 1.28995181E-09 9.99998883E-04 9.99987940E-04 8.58960921E-05 1.82579341E-09 0.00000000 2.68237734E-08 1.72729251E-05 2.11332008E-05 4.38384313E-06 2.83590609E-08 2.46452370E-09 8.53262794E-09 3.31581987E-07 1.15607393E-13 6.83101797E-09 8.19296702E-08 6.91013358E-11 1.32712955E-07 9.53807330E-07 7.36334696E-05 3.32652448E-08 1.55944029E-12 4.76960658E-11 2.72148327E-07 6.61093313E-09 4.40861868E-07 1.07093756E-08 2.09296891E-09 6.95218327E-09 1.68879619E-10 1.41039063E-05 1.00000000 1.98950365E-04 2.33272876E-04 3.16089172E-05 1.40185162E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.05647266E-02 2.89033297E-02 0.722031891 2.39919480E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 371.200043 1.85550693E-02 1.32994191E-03 5.93949333E-02 1.23166004E-07 4.26994575E-07 2.00193399E-03 1.00007444E-03 7.87184617E-05 8.00736248E-04 1.70897783E-05 9.49356036E-07 1.50223458E-02 5.00704953E-03 1.02885219E-03 1.38128153E-03 19.9999561 1.29130640E-09 1.99998007E-03 0.999995828 6.13143868E-07 2.32083828E-08 1.00000016E-03 1.55800044E-05 2.99844169E-03 9.99884307E-03 4.98022127E-04 8.29948206E-03 5.82638086E-06 3.30609424E-08 6.38152471E-07 2.99920235E-03 9.97457420E-04 1.10501981E-06 3.98402028E-02 3.99996340E-03 3.65121444E-08 9.99965817E-02 4.99998743E-04 1.99999996E-02 2.00696729E-12 1.41655365E-09 9.99998767E-04 9.99986776E-04 8.37693588E-05 1.82243631E-09 0.00000000 2.59178456E-08 1.73389271E-05 2.19033900E-05 4.56757107E-06 2.70614464E-08 2.47440290E-09 8.27351965E-09 3.32465078E-07 1.16098008E-13 6.61104371E-09 8.10345071E-08 7.01678785E-11 1.31260435E-07 1.04677906E-06 8.41400397E-05 3.65121444E-08 1.50420019E-12 4.73265697E-11 3.07515819E-07 7.34319050E-09 4.98150655E-07 1.18954961E-08 2.07011075E-09 7.85568144E-09 1.87585877E-10 1.62306369E-05 1.00000000 1.98958020E-04 2.33274666E-04 3.16119731E-05 1.41707729E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.05985373E-02 2.89185755E-02 0.722477198 2.42651254E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 372.800049 1.86220501E-02 1.25634810E-03 5.93240038E-02 1.24664169E-07 4.70939085E-07 2.00210465E-03 1.00007805E-03 8.01584465E-05 8.00767215E-04 1.96295769E-05 1.08323059E-06 1.50249712E-02 5.00780623E-03 1.03218213E-03 1.43270975E-03 19.9999523 1.39259515E-09 1.99997844E-03 0.999995470 6.69169594E-07 2.55810271E-08 1.00000051E-03 1.78944374E-05 2.99827731E-03 9.99872666E-03 4.97760077E-04 8.29943735E-03 5.89878618E-06 3.52883980E-08 6.93181619E-07 2.99913366E-03 9.97213181E-04 1.20857362E-06 3.98206264E-02 3.99996014E-03 3.96606836E-08 9.99962837E-02 4.99998627E-04 1.99999996E-02 2.17688888E-12 1.53915558E-09 9.99998651E-04 9.99985612E-04 8.17001201E-05 1.81922810E-09 0.00000000 2.51762522E-08 1.75276091E-05 2.27364944E-05 4.76221658E-06 2.60449760E-08 2.50184473E-09 8.06964806E-09 3.33324465E-07 1.16986837E-13 6.43712639E-09 8.11197935E-08 7.12550088E-11 1.31396177E-07 1.13691135E-06 9.45714783E-05 3.96606836E-08 1.45951220E-12 4.77025884E-11 3.40829104E-07 8.08256573E-09 5.52110976E-07 1.30931239E-08 2.07229855E-09 8.70670736E-09 2.06474060E-10 1.82998720E-05 1.00000000 1.98965674E-04 2.33276689E-04 3.16152582E-05 1.43227677E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.06305748E-02 2.89330035E-02 0.722906709 2.45374106E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 374.400055 1.86852962E-02 1.18650089E-03 5.92563264E-02 1.26091862E-07 5.11546261E-07 2.00227136E-03 1.00008107E-03 8.16083921E-05 8.00799171E-04 2.21474056E-05 1.22455390E-06 1.50275696E-02 5.00853825E-03 1.03548134E-03 1.48394471E-03 19.9999485 1.49281376E-09 1.99997681E-03 0.999995112 7.24031622E-07 2.79914421E-08 1.00000086E-03 2.02211595E-05 2.99811549E-03 9.99861304E-03 4.97499248E-04 8.29939358E-03 5.96928294E-06 3.73408398E-08 7.46700152E-07 2.99906684E-03 9.96974064E-04 1.30982323E-06 3.98011953E-02 3.99995688E-03 4.27227782E-08 9.99960005E-02 4.99998510E-04 1.99999996E-02 2.35203155E-12 1.65827807E-09 9.99998534E-04 9.99984448E-04 7.96858876E-05 1.81616278E-09 0.00000000 2.45066776E-08 1.77701168E-05 2.36316264E-05 4.96869279E-06 2.52309800E-08 2.53699950E-09 7.88853693E-09 3.34155601E-07 1.17943199E-13 6.28234709E-09 8.18811543E-08 7.23312452E-11 1.32627079E-07 1.22454753E-06 1.04936793E-04 4.27227782E-08 1.41954753E-12 4.85108412E-11 3.72511977E-07 8.83884699E-09 6.03429442E-07 1.43181138E-08 2.09175721E-09 9.51608659E-09 2.25794217E-10 2.03141062E-05 1.00000000 1.98972688E-04 2.33278610E-04 3.16178230E-05 1.44744990E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.06631413E-02 2.89477613E-02 0.723328292 2.48098131E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 376.000061 1.87450834E-02 1.12010341E-03 5.91916479E-02 1.27452680E-07 5.49188485E-07 2.00243434E-03 1.00008363E-03 8.30872959E-05 8.00832117E-04 2.46447944E-05 1.37382904E-06 1.50301438E-02 5.00924746E-03 1.03875285E-03 1.53500214E-03 19.9999447 1.59261748E-09 1.99997518E-03 0.999994755 7.77839773E-07 3.04425356E-08 1.00000133E-03 2.25592212E-05 2.99795601E-03 9.99850128E-03 4.97239467E-04 8.29935167E-03 6.03805574E-06 3.92378041E-08 7.98852454E-07 2.99900165E-03 9.96739487E-04 1.40898806E-06 3.97818983E-02 3.99995409E-03 4.57066882E-08 9.99957174E-02 4.99998394E-04 1.99999996E-02 2.53362327E-12 1.77427484E-09 9.99998418E-04 9.99983400E-04 7.77235837E-05 1.81323090E-09 0.00000000 2.38823521E-08 1.80392617E-05 2.45825686E-05 5.18635261E-06 2.45619933E-08 2.57597188E-09 7.72025466E-09 3.34958315E-07 1.18902568E-13 6.13837381E-09 8.31110185E-08 7.33873587E-11 1.34616883E-07 1.30992601E-06 1.15242154E-04 4.57066882E-08 1.38252441E-12 4.95796772E-11 4.02856074E-07 9.61755653E-09 6.52578592E-07 1.55794098E-08 2.12318407E-09 1.02912674E-08 2.45687415E-10 2.22764083E-05 1.00000000 1.98979760E-04 2.33280749E-04 3.16206751E-05 1.46259976E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.06940538E-02 2.89617479E-02 0.723736644 2.50813570E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 377.600067 1.88015215E-02 1.05703878E-03 5.91298603E-02 1.28750557E-07 5.84080794E-07 2.00259383E-03 1.00008573E-03 8.46031035E-05 8.00866226E-04 2.71209537E-05 1.53190683E-06 1.50326937E-02 5.00993431E-03 1.04199734E-03 1.58588646E-03 19.9999409 1.69243020E-09 1.99997355E-03 0.999994457 8.30612919E-07 3.29373790E-08 1.00000179E-03 2.49082095E-05 2.99779861E-03 9.99839138E-03 4.96980792E-04 8.29931069E-03 6.10515553E-06 4.09896579E-08 8.49680362E-07 2.99893809E-03 9.96509334E-04 1.50613198E-06 3.97627279E-02 3.99995130E-03 4.86148011E-08 9.99954417E-02 4.99998278E-04 1.99999996E-02 2.72280874E-12 1.88725413E-09 9.99998301E-04 9.99982352E-04 7.58125607E-05 1.81042814E-09 0.00000000 2.32858000E-08 1.83239827E-05 2.55907198E-05 5.41601867E-06 2.40000979E-08 2.61718158E-09 7.55897744E-09 3.35732608E-07 1.19768209E-13 6.00044459E-09 8.46880113E-08 7.44189294E-11 1.37168968E-07 1.39311624E-06 1.25489227E-04 4.86148011E-08 1.34728199E-12 5.08277066E-11 4.32003560E-07 1.04237836E-08 6.99788757E-07 1.68852559E-08 2.16347895E-09 1.10358824E-08 2.66283662E-10 2.41874332E-05 1.00000000 1.98986250E-04 2.33282772E-04 3.16228543E-05 1.47772531E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.07255213E-02 2.89760716E-02 0.724138260 2.53530610E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 379.200073 1.88548528E-02 9.97064286E-04 5.90707473E-02 1.29988294E-07 6.16514058E-07 2.00274982E-03 1.00008748E-03 8.61564477E-05 8.00901500E-04 2.95768168E-05 1.69915893E-06 1.50352223E-02 5.01060067E-03 1.04521669E-03 1.63660850E-03 19.9999371 1.79254012E-09 1.99997192E-03 0.999994159 8.82405232E-07 3.54762477E-08 1.00000226E-03 2.72672951E-05 2.99764331E-03 9.99828242E-03 4.96723107E-04 8.29927064E-03 6.17068827E-06 4.26104059E-08 8.99271527E-07 2.99887615E-03 9.96283256E-04 1.60138904E-06 3.97436768E-02 3.99994850E-03 5.14521297E-08 9.99951735E-02 4.99998161E-04 1.99999996E-02 2.92011033E-12 1.99742245E-09 9.99998185E-04 9.99981305E-04 7.39501193E-05 1.80774540E-09 0.00000000 2.27145058E-08 1.86190009E-05 2.66520074E-05 5.65711434E-06 2.35170212E-08 2.65987077E-09 7.40372430E-09 3.36479530E-07 1.20574611E-13 5.86766991E-09 8.65206928E-08 7.54256102E-11 1.40135185E-07 1.47426329E-06 1.35681694E-04 5.14521297E-08 1.31361274E-12 5.22020170E-11 4.60097624E-07 1.12601724E-08 7.45291970E-07 1.82399340E-08 2.21030594E-09 1.17535883E-08 2.87650515E-10 2.60498764E-05 1.00000000 1.98992828E-04 2.33285013E-04 3.16253354E-05 1.49282918E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.07553944E-02 2.89896447E-02 0.724527597 2.56239362E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 380.800079 1.89051535E-02 9.40103200E-04 5.90142347E-02 1.31168690E-07 6.46645105E-07 2.00290233E-03 1.00008887E-03 8.77479179E-05 8.00937996E-04 3.20110630E-05 1.87650971E-06 1.50377285E-02 5.01124654E-03 1.04841101E-03 1.68716977E-03 19.9999332 1.89318627E-09 1.99997053E-03 0.999993861 9.33209094E-07 3.80613940E-08 1.00000284E-03 2.96361541E-05 2.99749011E-03 9.99817532E-03 4.96466353E-04 8.29923153E-03 6.23466531E-06 4.41072601E-08 9.47638910E-07 2.99881562E-03 9.96061251E-04 1.69477971E-06 3.97247449E-02 3.99994571E-03 5.42194130E-08 9.99949127E-02 4.99998045E-04 1.99999996E-02 3.12644116E-12 2.10481299E-09 9.99998068E-04 9.99980257E-04 7.21359975E-05 1.80517901E-09 0.00000000 2.21619469E-08 1.89221628E-05 2.77701492E-05 5.91072012E-06 2.30948913E-08 2.70373413E-09 7.25256877E-09 3.37199310E-07 1.21268379E-13 5.73851322E-09 8.85609595E-08 7.64064090E-11 1.43437603E-07 1.55338921E-06 1.45819955E-04 5.42194130E-08 1.28108299E-12 5.36835056E-11 4.87190391E-07 1.21306538E-08 7.89172816E-07 1.96498089E-08 2.26243602E-09 1.24457182E-08 3.09888393E-10 2.78639945E-05 1.00000000 1.98998838E-04 2.33287137E-04 3.16271653E-05 1.50791020E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.07858524E-02 2.90035661E-02 0.724910975 2.58950014E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 382.400085 1.89526435E-02 8.85937130E-04 5.89601211E-02 1.32294332E-07 6.74714215E-07 2.00305181E-03 1.00008992E-03 8.93750912E-05 8.00975715E-04 3.44244145E-05 2.06430354E-06 1.50402142E-02 5.01187379E-03 1.05158181E-03 1.73757994E-03 19.9999294 1.99452543E-09 1.99996913E-03 0.999993563 9.83070095E-07 4.06924379E-08 1.00000342E-03 3.20140171E-05 2.99733877E-03 9.99807008E-03 4.96210530E-04 8.29919335E-03 6.29717624E-06 4.54920048E-08 9.94857487E-07 2.99875671E-03 9.95843089E-04 1.78641858E-06 3.97059247E-02 3.99994291E-03 5.69209355E-08 9.99946594E-02 4.99997928E-04 1.99999996E-02 3.34213430E-12 2.20959784E-09 9.99997952E-04 9.99979326E-04 7.03676269E-05 1.80271997E-09 0.00000000 2.16294964E-08 1.92319876E-05 2.89424333E-05 6.17638034E-06 2.27197372E-08 2.74855783E-09 7.10594605E-09 3.37893283E-07 1.21898693E-13 5.61326363E-09 9.07663917E-08 7.73624914E-11 1.47007498E-07 1.63061816E-06 1.55907153E-04 5.69209355E-08 1.24976310E-12 5.52535621E-11 5.13369230E-07 1.30368170E-08 8.31572777E-07 2.11174545E-08 2.31878561E-09 1.31145015E-08 3.33037903E-10 2.96323633E-05 1.00000000 1.99004950E-04 2.33289480E-04 3.16293117E-05 1.52297114E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.08147494E-02 2.90167537E-02 0.725282729 2.61652581E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 384.000092 1.89973786E-02 8.34512757E-04 5.89083508E-02 1.33367294E-07 7.00838939E-07 2.00319802E-03 1.00009062E-03 9.10373274E-05 8.01014772E-04 3.68152359E-05 2.26360521E-06 1.50426794E-02 5.01248240E-03 1.05472899E-03 1.78783934E-03 19.9999256 2.09672990E-09 1.99996773E-03 0.999993265 1.03197340E-06 4.33716103E-08 1.00000412E-03 3.44006185E-05 2.99718929E-03 9.99796670E-03 4.95955639E-04 8.29915609E-03 6.35821971E-06 4.67702144E-08 1.04092965E-06 2.99869920E-03 9.95628769E-04 1.87631008E-06 3.96872163E-02 3.99994012E-03 5.95568395E-08 9.99944136E-02 4.99997812E-04 1.99999996E-02 3.56813168E-12 2.31178343E-09 9.99997836E-04 9.99978394E-04 6.86450076E-05 1.80036597E-09 0.00000000 2.11128750E-08 1.95479442E-05 3.01740110E-05 6.45538512E-06 2.23831584E-08 2.79426882E-09 6.96269797E-09 3.38561478E-07 1.22421414E-13 5.49101742E-09 9.31200219E-08 7.82933024E-11 1.50817371E-07 1.70595479E-06 1.65943231E-04 5.95568395E-08 1.21937670E-12 5.69122284E-11 5.38648862E-07 1.39824152E-08 8.72515784E-07 2.26489494E-08 2.37892106E-09 1.37603156E-08 3.57194940E-10 3.13549863E-05 1.00000000 1.99010523E-04 2.33291707E-04 3.16308178E-05 1.53801055E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.08442612E-02 2.90303007E-02 0.725649059 2.64357366E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 385.600098 1.90395694E-02 7.85621989E-04 5.88587373E-02 1.34390248E-07 7.25225448E-07 2.00334121E-03 1.00009108E-03 9.27316578E-05 8.01055168E-04 3.91842404E-05 2.47472076E-06 1.50451260E-02 5.01307379E-03 1.05785404E-03 1.83795730E-03 19.9999218 2.19989205E-09 1.99996633E-03 0.999992967 1.07996618E-06 4.60980836E-08 1.00000482E-03 3.67952161E-05 2.99704168E-03 9.99786425E-03 4.95701621E-04 8.29911977E-03 6.41788392E-06 4.79523976E-08 1.08592837E-06 2.99864309E-03 9.95418057E-04 1.96456563E-06 3.96686159E-02 3.99993733E-03 6.21312850E-08 9.99941751E-02 4.99997695E-04 1.99999996E-02 3.80467706E-12 2.41153564E-09 9.99997719E-04 9.99977463E-04 6.69655201E-05 1.79810855E-09 0.00000000 2.06140509E-08 1.98692633E-05 3.14625759E-05 6.74728790E-06 2.20778436E-08 2.84075452E-09 6.82347112E-09 3.39205315E-07 1.22886903E-13 5.37224309E-09 9.55999298E-08 7.92004101E-11 1.54831739E-07 1.77951961E-06 1.75931244E-04 6.21312850E-08 1.19004492E-12 5.86511117E-11 5.63095398E-07 1.49684318E-08 9.12108931E-07 2.42458835E-08 2.44228282E-09 1.43848489E-08 3.82384624E-10 3.30344774E-05 1.00000000 1.99016213E-04 2.33294137E-04 3.16326514E-05 1.55303103E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.08722530E-02 2.90431269E-02 0.726004362 2.67054196E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 387.200104 1.90792568E-02 7.39227049E-04 5.88112362E-02 1.35364772E-07 7.47962929E-07 2.00348115E-03 1.00009132E-03 9.44572239E-05 8.01097020E-04 4.15295726E-05 2.69887551E-06 1.50475530E-02 5.01364842E-03 1.06095686E-03 1.88793358E-03 19.9999180 2.30415820E-09 1.99996494E-03 0.999992669 1.12703083E-06 4.88741527E-08 1.00000564E-03 3.91975809E-05 2.99689593E-03 9.99776367E-03 4.95448476E-04 8.29908438E-03 6.47616071E-06 4.90430239E-08 1.12985072E-06 2.99858814E-03 9.95210954E-04 2.05118158E-06 3.96501198E-02 3.99993500E-03 6.46441123E-08 9.99939367E-02 4.99997579E-04 1.99999996E-02 4.05281537E-12 2.50884735E-09 9.99997603E-04 9.99976532E-04 6.53293246E-05 1.79594561E-09 0.00000000 2.01294554E-08 2.01957064E-05 3.28141869E-05 7.05353614E-06 2.17998632E-08 2.88798407E-09 6.68732714E-09 3.39824709E-07 1.23253892E-13 5.25621591E-09 9.82027402E-08 8.00832456E-11 1.59045115E-07 1.85130853E-06 1.85870900E-04 6.46441123E-08 1.16154048E-12 6.04768804E-11 5.86706506E-07 1.59987756E-08 9.50348578E-07 2.59145878E-08 2.50878451E-09 1.49880410E-08 4.08706818E-10 3.46706729E-05 1.00000000 1.99021364E-04 2.33296450E-04 3.16338555E-05 1.56803129E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.09008856E-02 2.90563237E-02 0.726354718 2.69753505E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 388.800110 1.91166420E-02 6.95128751E-04 5.87656684E-02 1.36293622E-07 7.69229246E-07 2.00361828E-03 1.00009132E-03 9.62110062E-05 8.01140268E-04 4.38520110E-05 2.93632593E-06 1.50499623E-02 5.01420721E-03 1.06403872E-03 1.93777739E-03 19.9999142 2.40958187E-09 1.99996354E-03 0.999992371 1.17321758E-06 5.16985921E-08 1.00000645E-03 4.16069997E-05 2.99675181E-03 9.99766402E-03 4.95196145E-04 8.29904992E-03 6.53313873E-06 5.00515078E-08 1.17276898E-06 2.99853459E-03 9.95007227E-04 2.13626845E-06 3.96317206E-02 3.99993267E-03 6.70994567E-08 9.99937057E-02 4.99997463E-04 1.99999996E-02 4.31272509E-12 2.60388244E-09 9.99997486E-04 9.99975600E-04 6.37337653E-05 1.79386928E-09 0.00000000 1.96610710E-08 2.05266424E-05 3.42265303E-05 7.37364371E-06 2.15451017E-08 2.93586511E-09 6.55490995E-09 3.40421167E-07 1.23571238E-13 5.14340570E-09 1.00915393E-07 8.09435713E-11 1.63436326E-07 1.92144103E-06 1.95765271E-04 6.70994567E-08 1.13399069E-12 6.23842367E-11 6.09539597E-07 1.70739884E-08 9.87327667E-07 2.76559380E-08 2.57809241E-09 1.55713593E-08 4.36175346E-10 3.62662322E-05 1.00000000 1.99026646E-04 2.33298968E-04 3.16353944E-05 1.58301380E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.09280244E-02 2.90688127E-02 0.726694584 2.72445027E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 390.400116 1.91517510E-02 6.53304800E-04 5.87220006E-02 1.37177892E-07 7.89089654E-07 2.00375239E-03 1.00009108E-03 9.79921242E-05 8.01185030E-04 4.61494783E-05 3.18849493E-06 1.50523540E-02 5.01475064E-03 1.06709951E-03 1.98748778E-03 19.9999104 2.51630228E-09 1.99996214E-03 0.999992132 1.21850621E-06 5.45738352E-08 1.00000727E-03 4.40232761E-05 2.99660931E-03 9.99756623E-03 4.94944630E-04 8.29901639E-03 6.58880344E-06 5.09813489E-08 1.21467531E-06 2.99848220E-03 9.94806876E-04 2.21981463E-06 3.96134220E-02 3.99993034E-03 6.94968634E-08 9.99934822E-02 4.99997346E-04 1.99999996E-02 4.58560490E-12 2.69662226E-09 9.99997370E-04 9.99974785E-04 6.21791914E-05 1.79187831E-09 0.00000000 1.92057907E-08 2.08618785E-05 3.57064273E-05 7.70921088E-06 2.13118554E-08 2.98437253E-09 6.42540954E-09 3.40994404E-07 1.23799639E-13 5.03319164E-09 1.03740909E-07 8.17807141E-11 1.68010274E-07 1.98990460E-06 2.05613818E-04 6.94968634E-08 1.10719680E-12 6.43828116E-11 6.31582338E-07 1.81983530E-08 1.02302636E-06 2.94768689E-08 2.65028399E-09 1.61344893E-08 4.64899674E-10 3.78208024E-05 1.00000000 1.99031419E-04 2.33301369E-04 3.16363148E-05 1.59797710E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.09558225E-02 2.90816780E-02 0.727029979 2.75139268E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 392.000122 1.91847682E-02 6.13572600E-04 5.86800687E-02 1.38020198E-07 8.07693652E-07 2.00388394E-03 1.00009062E-03 9.97976749E-05 8.01231246E-04 4.84227676E-05 3.45564081E-06 1.50547288E-02 5.01527963E-03 1.07014051E-03 2.03707349E-03 19.9999084 2.62435207E-09 1.99996098E-03 0.999991894 1.26294663E-06 5.74984718E-08 1.00000820E-03 4.64457589E-05 2.99646845E-03 9.99746937E-03 4.94693872E-04 8.29898287E-03 6.64324034E-06 5.18407184E-08 1.25563804E-06 2.99843098E-03 9.94609669E-04 2.30192450E-06 3.95952165E-02 3.99992801E-03 7.18402333E-08 9.99932662E-02 4.99997288E-04 1.99999996E-02 4.87162697E-12 2.78722134E-09 9.99997254E-04 9.99973970E-04 6.06630711E-05 1.78996507E-09 0.00000000 1.87655740E-08 2.12008363E-05 3.72515497E-05 8.05973104E-06 2.10976463E-08 3.03342151E-09 6.29945385E-09 3.41545899E-07 1.23986325E-13 4.92603203E-09 1.06670335E-07 8.25964505E-11 1.72752451E-07 2.05681204E-06 2.15419466E-04 7.18402333E-08 1.08128729E-12 6.64683864E-11 6.52885774E-07 1.93722336E-08 1.05752736E-06 3.13779687E-08 2.72513012E-09 1.66787331E-08 4.94889074E-10 3.93369228E-05 1.00000000 1.99036323E-04 2.33303974E-04 3.16375772E-05 1.61292366E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.09821603E-02 2.90938523E-02 0.727355361 2.77825817E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 393.600128 1.92157142E-02 5.75915095E-04 5.86398467E-02 1.38821406E-07 8.25092457E-07 2.00401270E-03 1.00009004E-03 1.01626647E-04 8.01279093E-04 5.06696888E-05 3.73936336E-06 1.50570869E-02 5.01579419E-03 1.07316149E-03 2.08653323E-03 19.9999065 2.73386913E-09 1.99995982E-03 0.999991655 1.30651949E-06 6.04749175E-08 1.00000913E-03 4.88742589E-05 2.99632922E-03 9.99737438E-03 4.94443928E-04 8.29895027E-03 6.69643441E-06 5.26325898E-08 1.29564853E-06 2.99838092E-03 9.94415605E-04 2.38258531E-06 3.95771042E-02 3.99992568E-03 7.41290833E-08 9.99930501E-02 4.99997230E-04 1.99999996E-02 5.17213139E-12 2.87565904E-09 9.99997137E-04 9.99973156E-04 5.91857934E-05 1.78812853E-09 0.00000000 1.83376709E-08 2.15432920E-05 3.88691078E-05 8.42688405E-06 2.09018651E-08 3.08298276E-09 6.17633455E-09 3.42075310E-07 1.24094433E-13 4.82138596E-09 1.09709489E-07 8.33901212E-11 1.77672277E-07 2.12214991E-06 2.25181633E-04 7.41290833E-08 1.05608458E-12 6.86520354E-11 6.73434158E-07 2.06002415E-08 1.09080509E-06 3.33667032E-08 2.80278001E-09 1.72036874E-08 5.26261312E-10 4.08142005E-05 1.00000000 1.99040718E-04 2.33306462E-04 3.16382320E-05 1.62785203E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.10091798E-02 2.91064084E-02 0.727676749 2.80515347E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 395.200134 1.92447621E-02 5.40161156E-04 5.86011820E-02 1.39584074E-07 8.41414192E-07 2.00413866E-03 1.00008934E-03 1.03476232E-04 8.01328511E-04 5.28911150E-05 4.03988315E-06 1.50594292E-02 5.01629570E-03 1.07616372E-03 2.13587563E-03 19.9999046 2.84486878E-09 1.99995865E-03 0.999991417 1.34927598E-06 6.35014814E-08 1.00001018E-03 5.13081686E-05 2.99619138E-03 9.99728031E-03 4.94194683E-04 8.29891860E-03 6.74846933E-06 5.33641682E-08 1.33477351E-06 2.99833203E-03 9.94224451E-04 2.46189893E-06 3.95590812E-02 3.99992336E-03 7.63672219E-08 9.99928415E-02 4.99997172E-04 1.99999996E-02 5.48725648E-12 2.96208613E-09 9.99997021E-04 9.99972341E-04 5.77448664E-05 1.78636217E-09 0.00000000 1.79238935E-08 2.18886908E-05 4.05565188E-05 8.81009510E-06 2.07228528E-08 3.13297455E-09 6.05662409E-09 3.42584087E-07 1.24168769E-13 4.71967176E-09 1.12851076E-07 8.41635511E-11 1.82757930E-07 2.18602827E-06 2.34903186E-04 7.63672219E-08 1.03170944E-12 7.09297066E-11 6.93276036E-07 2.18824781E-08 1.12293822E-06 3.54432359E-08 2.88304691E-09 1.77105939E-08 5.59019053E-10 4.22551275E-05 1.00000000 1.99045273E-04 2.33309140E-04 3.16392361E-05 1.64276469E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.10347651E-02 2.91182846E-02 0.727988541 2.83197276E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 396.800140 1.92719232E-02 5.06303448E-04 5.85640557E-02 1.40308757E-07 8.56695976E-07 2.00426206E-03 1.00008852E-03 1.05345302E-04 8.01379560E-04 5.50846707E-05 4.35904531E-06 1.50617557E-02 5.01678418E-03 1.07914698E-03 2.18509906E-03 19.9999027 2.95749647E-09 1.99995749E-03 0.999991179 1.39119561E-06 6.65806965E-08 1.00001122E-03 5.37473170E-05 2.99605494E-03 9.99718718E-03 4.93946194E-04 8.29888787E-03 6.79932737E-06 5.40378196E-08 1.37300174E-06 2.99828430E-03 9.94036323E-04 2.53984854E-06 3.95411476E-02 3.99992103E-03 7.85540095E-08 9.99926403E-02 4.99997113E-04 1.99999996E-02 5.81854833E-12 3.04647574E-09 9.99996904E-04 9.99971526E-04 5.63408139E-05 1.78466464E-09 0.00000000 1.75218577E-08 2.22367726E-05 4.23215279E-05 9.21116589E-06 2.05606430E-08 3.18336268E-09 5.93971539E-09 3.43071889E-07 1.24174840E-13 4.62042804E-09 1.16102619E-07 8.49160256E-11 1.88021602E-07 2.24842870E-06 2.44583440E-04 7.85540095E-08 1.00800542E-12 7.33138758E-11 7.12391682E-07 2.32240946E-08 1.15389491E-06 3.76159086E-08 2.96612312E-09 1.81989499E-08 5.93293914E-10 4.36591799E-05 1.00000000 1.99049333E-04 2.33311701E-04 3.16396472E-05 1.65765989E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.10610545E-02 2.91305501E-02 0.728296697 2.85882428E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 398.400146 1.92973651E-02 4.74175438E-04 5.85283227E-02 1.40998111E-07 8.71051498E-07 2.00438290E-03 1.00008748E-03 1.07231084E-04 8.01432237E-04 5.72514364E-05 4.69695033E-06 1.50640672E-02 5.01726102E-03 1.08211255E-03 2.23421212E-03 19.9999008 3.07174708E-09 1.99995632E-03 0.999990940 1.43233365E-06 6.97104170E-08 1.00001239E-03 5.61911256E-05 2.99591990E-03 9.99709591E-03 4.93698346E-04 8.29885714E-03 6.84909492E-06 5.46600667E-08 1.41040130E-06 2.99823750E-03 9.93850990E-04 2.61653781E-06 3.95232961E-02 3.99991870E-03 8.06933329E-08 9.99924392E-02 4.99997055E-04 1.99999996E-02 6.16604511E-12 3.12898174E-09 9.99996788E-04 9.99970711E-04 5.49710639E-05 1.78302995E-09 0.00000000 1.71331660E-08 2.25870026E-05 4.41609373E-05 9.62937520E-06 2.04139461E-08 3.23406746E-09 5.82611381E-09 3.43540194E-07 1.24155230E-13 4.52402071E-09 1.19457013E-07 8.56494667E-11 1.93451783E-07 2.30946375E-06 2.54225335E-04 8.06933329E-08 9.85081591E-13 7.57999497E-11 7.30830891E-07 2.46247023E-08 1.18375590E-06 3.98840925E-08 3.05182724E-09 1.86700255E-08 6.29075958E-10 4.50289299E-05 1.00000000 1.99053553E-04 2.33314451E-04 3.16404075E-05 1.67254024E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.10859357E-02 2.91421488E-02 0.728595674 2.88560037E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 400.000153 1.93210915E-02 4.43777069E-04 5.84939644E-02 1.41652450E-07 8.84507017E-07 2.00450118E-03 1.00008643E-03 1.09132307E-04 8.01486662E-04 5.93888653E-05 5.05569051E-06 1.50663638E-02 5.01772575E-03 1.08506018E-03 2.28321273E-03 19.9998989 3.18777515E-09 1.99995516E-03 0.999990702 1.47266917E-06 7.28932434E-08 1.00001367E-03 5.86394344E-05 2.99578626E-03 9.99700557E-03 4.93451196E-04 8.29882734E-03 6.89775197E-06 5.52328068E-08 1.44695923E-06 2.99819186E-03 9.93668451E-04 2.69194766E-06 3.95055264E-02 3.99991684E-03 8.27844602E-08 9.99922454E-02 4.99996997E-04 1.99999996E-02 6.53150537E-12 3.20957327E-09 9.99996671E-04 9.99969896E-04 5.36362386E-05 1.78145731E-09 0.00000000 1.67557292E-08 2.29390753E-05 4.60829688E-05 1.00666348E-05 2.02831689E-08 3.28504846E-09 5.71529180E-09 3.43988518E-07 1.24077330E-13 4.43004922E-09 1.22922785E-07 8.63631389E-11 1.99062271E-07 2.36911251E-06 2.63828086E-04 8.27844602E-08 9.62798417E-13 7.84017226E-11 7.48571381E-07 2.60899817E-08 1.21248502E-06 4.22569819E-08 3.14037685E-09 1.91232523E-08 6.66510291E-10 4.63637552E-05 1.00000000 1.99057293E-04 2.33317085E-04 3.16405858E-05 1.68740400E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.11115359E-02 2.91541405E-02 0.728891432 2.91241072E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 401.600159 1.93432570E-02 4.14956536E-04 5.84608540E-02 1.42274260E-07 8.97158998E-07 2.00461713E-03 1.00008526E-03 1.11046342E-04 8.01542774E-04 6.14980963E-05 5.43534634E-06 1.50686465E-02 5.01817977E-03 1.08799117E-03 2.33210926E-03 19.9998970 3.30556671E-09 1.99995399E-03 0.999990463 1.51225652E-06 7.61268879E-08 1.00001495E-03 6.10917195E-05 2.99565401E-03 9.99691617E-03 4.93204687E-04 8.29879846E-03 6.94538176E-06 5.57616531E-08 1.48274000E-06 2.99814716E-03 9.93488473E-04 2.76617584E-06 3.94878350E-02 3.99991497E-03 8.48310719E-08 9.99920517E-02 4.99996939E-04 1.99999996E-02 6.91495906E-12 3.28839600E-09 9.99996555E-04 9.99969197E-04 5.23339113E-05 1.77994097E-09 0.00000000 1.63910325E-08 2.32924922E-05 4.80841809E-05 1.05221643E-05 2.01672830E-08 3.33623107E-09 5.60771163E-09 3.44418282E-07 1.23981608E-13 4.33884928E-09 1.26493120E-07 8.70589087E-11 2.04842038E-07 2.42748138E-06 2.73394515E-04 8.48310719E-08 9.41258898E-13 8.11145109E-11 7.65660502E-07 2.76193912E-08 1.24015912E-06 4.47336994E-08 3.23159810E-09 1.95598400E-08 7.05583036E-10 4.76660825E-05 1.00000000 1.99061193E-04 2.33319908E-04 3.16411206E-05 1.70225365E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.11357540E-02 2.91654766E-02 0.729178488 2.93914657E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 403.200165 1.93638597E-02 3.87719279E-04 5.84289804E-02 1.42863684E-07 9.09025687E-07 2.00473075E-03 1.00008398E-03 1.12971706E-04 8.01600749E-04 6.35764372E-05 5.83829478E-06 1.50709152E-02 5.01862308E-03 1.09090505E-03 2.38089939E-03 19.9998951 3.42528850E-09 1.99995283E-03 0.999990225 1.55107466E-06 7.94140291E-08 1.00001635E-03 6.35478355E-05 2.99552293E-03 9.99682769E-03 4.92958818E-04 8.29877052E-03 6.99196289E-06 5.62481333E-08 1.51772974E-06 2.99810339E-03 9.93311172E-04 2.83920167E-06 3.94702218E-02 3.99991311E-03 8.68323795E-08 9.99918655E-02 4.99996881E-04 1.99999996E-02 7.31841497E-12 3.36541639E-09 9.99996439E-04 9.99968499E-04 5.10647842E-05 1.77848047E-09 0.00000000 1.60373173E-08 2.36468877E-05 5.01731556E-05 1.09979601E-05 2.00669277E-08 3.38756645E-09 5.50293722E-09 3.44828948E-07 1.23838318E-13 4.25009228E-09 1.30177042E-07 8.77360615E-11 2.10805666E-07 2.48454762E-06 2.82923807E-04 8.68323795E-08 9.20342253E-13 8.39532749E-11 7.82074380E-07 2.92192155E-08 1.26673945E-06 4.73244199E-08 3.32572148E-09 1.99791756E-08 7.46454842E-10 4.89352096E-05 1.00000000 1.99064627E-04 2.33322600E-04 3.16410806E-05 1.71708729E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.11607097E-02 2.91772150E-02 0.729462683 2.96591874E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 404.800171 1.93830468E-02 3.61917890E-04 5.83982170E-02 1.43423222E-07 9.20193600E-07 2.00484227E-03 1.00008259E-03 1.14905866E-04 8.01660470E-04 6.56252814E-05 6.26444535E-06 1.50731709E-02 5.01905661E-03 1.09380321E-03 2.42959149E-03 19.9998932 3.54690743E-09 1.99995167E-03 0.999989986 1.58918112E-06 8.27519386E-08 1.00001774E-03 6.60072910E-05 2.99539324E-03 9.99674015E-03 4.92713589E-04 8.29874258E-03 7.03758042E-06 5.66972993E-08 1.55199405E-06 2.99806055E-03 9.93136200E-04 2.91112474E-06 3.94526832E-02 3.99991125E-03 8.87921274E-08 9.99916792E-02 4.99996822E-04 1.99999996E-02 7.74176990E-12 3.44078277E-09 9.99996322E-04 9.99967800E-04 4.98263726E-05 1.77707049E-09 0.00000000 1.56958322E-08 2.40017944E-05 5.23456292E-05 1.14930508E-05 1.99811296E-08 3.43898421E-09 5.40135936E-09 3.45222048E-07 1.23685418E-13 4.16405666E-09 1.33967035E-07 8.83965054E-11 2.16941018E-07 2.54041925E-06 2.92418816E-04 8.87921274E-08 9.00138254E-13 8.69123662E-11 7.97862299E-07 3.08883230E-08 1.29230580E-06 5.00273103E-08 3.42255491E-09 2.03825206E-08 7.89096732E-10 5.01736213E-05 1.00000000 1.99068236E-04 2.33325482E-04 3.16414043E-05 1.73190754E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.11843094E-02 2.91883051E-02 0.729738474 2.99261678E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 406.400177 1.94008164E-02 3.37562145E-04 5.83685599E-02 1.43952860E-07 9.30674673E-07 2.00495147E-03 1.00008119E-03 1.16847099E-04 8.01722053E-04 6.76418058E-05 6.71646148E-06 1.50754135E-02 5.01948036E-03 1.09668530E-03 2.47818301E-03 19.9998913 3.67060249E-09 1.99995073E-03 0.999989808 1.62655545E-06 8.61433165E-08 1.00001926E-03 6.84699335E-05 2.99526472E-03 9.99665353E-03 4.92468942E-04 8.29871558E-03 7.08221341E-06 5.71103804E-08 1.58551859E-06 2.99801864E-03 9.92963789E-04 2.98192344E-06 3.94352190E-02 3.99990939E-03 9.07095057E-08 9.99915004E-02 4.99996764E-04 1.99999996E-02 8.18729286E-12 3.51446050E-09 9.99996206E-04 9.99967102E-04 4.86194476E-05 1.77571058E-09 0.00000000 1.53650657E-08 2.43567920E-05 5.46104966E-05 1.20095074E-05 1.99106829E-08 3.49042772E-09 5.30260724E-09 3.45597016E-07 1.23495222E-13 4.08046619E-09 1.37872405E-07 8.90395396E-11 2.23263129E-07 2.59507306E-06 3.01878696E-04 9.07095057E-08 8.80540161E-13 9.00079802E-11 8.12999247E-07 3.26335829E-08 1.31681770E-06 5.28534940E-08 3.52233620E-09 2.07692352E-08 8.33684288E-10 5.13805462E-05 1.00000000 1.99071394E-04 2.33328232E-04 3.16411606E-05 1.74671251E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.12086579E-02 2.91998032E-02 0.730011821 3.01935300E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 408.000183 1.94173008E-02 3.14517820E-04 5.83398938E-02 1.44454972E-07 9.40542918E-07 2.00505857E-03 1.00007968E-03 1.18793054E-04 8.01785442E-04 6.96274801E-05 7.19421132E-06 1.50776440E-02 5.01989527E-03 1.09955249E-03 2.52668187E-03 19.9998894 3.79633347E-09 1.99994980E-03 0.999989629 1.66325344E-06 8.95853418E-08 1.00002077E-03 7.09353262E-05 2.99513736E-03 9.99656785E-03 4.92224877E-04 8.29868857E-03 7.12594237E-06 5.74917038E-08 1.61836522E-06 2.99797766E-03 9.92793590E-04 3.05169192E-06 3.94178256E-02 3.99990752E-03 9.25880457E-08 9.99913216E-02 4.99996706E-04 1.99999996E-02 8.65486415E-12 3.58658947E-09 9.99996089E-04 9.99966403E-04 4.74416702E-05 1.77439585E-09 0.00000000 1.50461315E-08 2.47114513E-05 5.69631375E-05 1.25462766E-05 1.98546939E-08 3.54183172E-09 5.20702592E-09 3.45955186E-07 1.23303372E-13 3.99956468E-09 1.41885465E-07 8.96669891E-11 2.29759578E-07 2.64861092E-06 3.11306183E-04 9.25880457E-08 8.61630428E-13 9.32341288E-11 8.27532517E-07 3.44536772E-08 1.34035190E-06 5.58008360E-08 3.62486907E-09 2.11405293E-08 8.80183815E-10 5.25583237E-05 1.00000000 1.99074741E-04 2.33331171E-04 3.16412879E-05 1.76150468E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.12316802E-02 2.92106625E-02 0.730277121 3.04601565E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 409.600189 1.94324944E-02 2.92796758E-04 5.83122149E-02 1.44929444E-07 9.49806065E-07 2.00516358E-03 1.00007816E-03 1.20741708E-04 8.01850751E-04 7.15794013E-05 7.70066163E-06 1.50798624E-02 5.02030132E-03 1.10240455E-03 2.57508550E-03 19.9998875 3.92429245E-09 1.99994887E-03 0.999989450 1.69925590E-06 9.30807005E-08 1.00002240E-03 7.34033238E-05 2.99501116E-03 9.99648310E-03 4.91981395E-04 8.29866249E-03 7.16874729E-06 5.78422892E-08 1.65052029E-06 2.99793761E-03 9.92625719E-04 3.12040925E-06 3.94004993E-02 3.99990566E-03 9.44269658E-08 9.99911502E-02 4.99996648E-04 1.99999996E-02 9.14703556E-12 3.65713593E-09 9.99995973E-04 9.99965705E-04 4.62938406E-05 1.77312609E-09 0.00000000 1.47377825E-08 2.50652865E-05 5.94125486E-05 1.31054558E-05 1.98140508E-08 3.59313002E-09 5.11431919E-09 3.46296048E-07 1.23085068E-13 3.92113320E-09 1.46015395E-07 9.02782085E-11 2.36445217E-07 2.70101077E-06 3.20700405E-04 9.44269658E-08 8.43317766E-13 9.66079786E-11 8.41437043E-07 3.63560702E-08 1.36286781E-06 5.88814153E-08 3.73038800E-09 2.14957616E-08 9.28785993E-10 5.37061533E-05 1.00000000 1.99077636E-04 2.33333980E-04 3.16408550E-05 1.77628201E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.12554699E-02 2.92219389E-02 0.730540276 3.07271853E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 411.200195 1.94465294E-02 2.72266945E-04 5.82854152E-02 1.45378692E-07 9.58532155E-07 2.00526649E-03 1.00007653E-03 1.22690893E-04 8.01917864E-04 7.34994028E-05 8.23538448E-06 1.50820697E-02 5.02069946E-03 1.10524276E-03 2.62340205E-03 19.9998856 4.05441369E-09 1.99994794E-03 0.999989271 1.73462206E-06 9.66260814E-08 1.00002415E-03 7.58735187E-05 2.99488590E-03 9.99639928E-03 4.91738436E-04 8.29863735E-03 7.21071137E-06 5.81660444E-08 1.68204724E-06 2.99789826E-03 9.92459944E-04 3.18817183E-06 3.93832400E-02 3.99990380E-03 9.62299040E-08 9.99909788E-02 4.99996589E-04 1.99999996E-02 9.66345927E-12 3.72624420E-09 9.99995857E-04 9.99965006E-04 4.51735323E-05 1.77189674E-09 0.00000000 1.44408627E-08 2.54179231E-05 6.19529674E-05 1.36857270E-05 1.97877839E-08 3.64426578E-09 5.02474862E-09 3.46620993E-07 1.22872971E-13 3.84535115E-09 1.50253371E-07 9.08750575E-11 2.43305749E-07 2.75237676E-06 3.30064242E-04 9.62299040E-08 8.25668960E-13 1.00121987E-10 8.54763300E-07 3.83385554E-08 1.38444705E-06 6.20916580E-08 3.83866716E-09 2.18362199E-08 9.79434422E-10 5.48264616E-05 1.00000000 1.99080721E-04 2.33336978E-04 3.16407968E-05 1.79104711E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.12779520E-02 2.92325839E-02 0.730795860 3.09934802E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 412.800201 1.94593929E-02 2.52948026E-04 5.82594983E-02 1.45802389E-07 9.66722723E-07 2.00536754E-03 1.00007490E-03 1.24638274E-04 8.01986957E-04 7.53843415E-05 8.80180505E-06 1.50842657E-02 5.02108969E-03 1.10806664E-03 2.67162849E-03 19.9998837 4.18691393E-09 1.99994701E-03 0.999989092 1.76933088E-06 1.00224383E-07 1.00002589E-03 7.83457726E-05 2.99476180E-03 9.99631640E-03 4.91496059E-04 8.29861220E-03 7.25181144E-06 5.84636766E-08 1.71293004E-06 2.99785961E-03 9.92296264E-04 3.25495512E-06 3.93660441E-02 3.99990194E-03 9.79959296E-08 9.99908149E-02 4.99996531E-04 1.99999996E-02 1.02071147E-11 3.79387410E-09 9.99995740E-04 9.99964424E-04 4.40817203E-05 1.77070769E-09 0.00000000 1.41543914E-08 2.57688025E-05 6.45939144E-05 1.42893141E-05 1.97769232E-08 3.69516173E-09 4.93808949E-09 3.46929397E-07 1.22644570E-13 3.77205556E-09 1.54608927E-07 9.14568560E-11 2.50356607E-07 2.80268273E-06 3.39396676E-04 9.79959296E-08 8.08608063E-13 1.03795077E-10 8.67483152E-07 4.04095992E-08 1.40504426E-06 6.54452776E-08 3.94995059E-09 2.21611867E-08 1.03234543E-09 5.59182736E-05 1.00000000 1.99083370E-04 2.33339844E-04 3.16401893E-05 1.80579795E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.13012165E-02 2.92436536E-02 0.731049597 3.12601961E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 414.400208 1.94712095E-02 2.34714476E-04 5.82343601E-02 1.46202922E-07 9.74438990E-07 2.00546673E-03 1.00007327E-03 1.26581930E-04 8.02057912E-04 7.72363128E-05 9.39926394E-06 1.50864515E-02 5.02147246E-03 1.11087749E-03 2.71977275E-03 19.9998817 4.32170877E-09 1.99994608E-03 0.999988914 1.80344216E-06 1.03872004E-07 1.00002775E-03 8.08197219E-05 2.99463863E-03 9.99623444E-03 4.91254206E-04 8.29858799E-03 7.29212979E-06 5.87386282E-08 1.74323100E-06 2.99782190E-03 9.92134563E-04 3.32085392E-06 3.93489115E-02 3.99990007E-03 9.97286236E-08 9.99906510E-02 4.99996473E-04 1.99999996E-02 1.07774831E-11 3.86016774E-09 9.99995624E-04 9.99963842E-04 4.30159962E-05 1.76955472E-09 0.00000000 1.38790286E-08 2.61176101E-05 6.73287213E-05 1.49146872E-05 1.97804457E-08 3.74576992E-09 4.85454654E-09 3.47222681E-07 1.22430183E-13 3.70138231E-09 1.59072329E-07 9.20254220E-11 2.57582030E-07 2.85203123E-06 3.48700560E-04 9.97286236E-08 7.92191941E-13 1.07618359E-10 8.79648042E-07 4.25663202E-08 1.42474266E-06 6.89376094E-08 4.06398959E-09 2.24719763E-08 1.08744547E-09 5.69839976E-05 1.00000000 1.99086222E-04 2.33342886E-04 3.16399637E-05 1.82053700E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.13231920E-02 2.92541012E-02 0.731296062 3.15261818E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 416.000214 1.94819663E-02 2.17585854E-04 5.82100041E-02 1.46579936E-07 9.81680500E-07 2.00556405E-03 1.00007164E-03 1.28519197E-04 8.02130846E-04 7.90521590E-05 1.00314955E-05 1.50886262E-02 5.02184825E-03 1.11367495E-03 2.76783202E-03 19.9998798 4.45902737E-09 1.99994515E-03 0.999988735 1.83693680E-06 1.07571744E-07 1.00002973E-03 8.32952064E-05 2.99451640E-03 9.99615341E-03 4.91012877E-04 8.29856377E-03 7.33164597E-06 5.89914819E-08 1.77293555E-06 2.99778488E-03 9.91974841E-04 3.38584573E-06 3.93318385E-02 3.99989821E-03 1.01427140E-07 9.99904945E-02 4.99996415E-04 1.99999996E-02 1.13778579E-11 3.92508825E-09 9.99995507E-04 9.99963260E-04 4.19773351E-05 1.76843784E-09 0.00000000 1.36139811E-08 2.64637165E-05 7.01667232E-05 1.55640337E-05 1.97994137E-08 3.79600218E-09 4.77394524E-09 3.47500190E-07 1.22209629E-13 3.63320662E-09 1.63652601E-07 9.25801519E-11 2.64996629E-07 2.90039861E-06 3.57974961E-04 1.01427140E-07 7.76355326E-13 1.11611498E-10 8.91230854E-07 4.48177317E-08 1.44349826E-06 7.25832408E-08 4.18101465E-09 2.27678942E-08 1.14496479E-09 5.80226588E-05 1.00000000 1.99088638E-04 2.33345811E-04 3.16391961E-05 1.83526223E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.13459721E-02 2.92649753E-02 0.731541097 3.17926072E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 417.600220 1.94917768E-02 2.01446266E-04 5.81863374E-02 1.46935676E-07 9.88501142E-07 2.00565974E-03 1.00006990E-03 1.30448389E-04 8.02205643E-04 8.08341501E-05 1.06976713E-05 1.50907915E-02 5.02221752E-03 1.11646031E-03 2.81581376E-03 19.9998779 4.59877336E-09 1.99994422E-03 0.999988556 1.86987279E-06 1.11319899E-07 1.00003171E-03 8.57719206E-05 2.99439509E-03 9.99607332E-03 4.90772014E-04 8.29854049E-03 7.37043820E-06 5.92251901E-08 1.80210304E-06 2.99774855E-03 9.91816865E-04 3.45002081E-06 3.93148214E-02 3.99989635E-03 1.03094884E-07 9.99903381E-02 4.99996357E-04 1.99999996E-02 1.20076058E-11 3.98877065E-09 9.99995391E-04 9.99962678E-04 4.09634304E-05 1.76735315E-09 0.00000000 1.33597355E-08 2.68068761E-05 7.31006367E-05 1.62356810E-05 1.98327861E-08 3.84582099E-09 4.69643480E-09 3.47763319E-07 1.22010380E-13 3.56762198E-09 1.68339497E-07 9.31227595E-11 2.72583833E-07 2.94788219E-06 3.67222587E-04 1.03094884E-07 7.61145216E-13 1.15764613E-10 9.02281954E-07 4.71604942E-08 1.46139280E-06 7.63767645E-08 4.30076419E-09 2.30502302E-08 1.20481802E-09 5.90365635E-05 1.00000000 1.99091271E-04 2.33348910E-04 3.16388105E-05 1.84997625E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.13674857E-02 2.92752422E-02 0.731779218 3.20583060E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 419.200226 1.95006300E-02 1.86315418E-04 5.81633598E-02 1.47269759E-07 9.94898642E-07 2.00575381E-03 1.00006815E-03 1.32366506E-04 8.02282419E-04 8.25791140E-05 1.14018758E-05 1.50929466E-02 5.02258074E-03 1.11923320E-03 2.86371494E-03 19.9998760 4.74119055E-09 1.99994328E-03 0.999988377 1.90223273E-06 1.15119200E-07 1.00003381E-03 8.82497043E-05 2.99427472E-03 9.99599416E-03 4.90531616E-04 8.29851720E-03 7.40848736E-06 5.94402323E-08 1.83072007E-06 2.99771293E-03 9.91660752E-04 3.51335825E-06 3.92978638E-02 3.99989448E-03 1.04731079E-07 9.99901816E-02 4.99996298E-04 1.99999996E-02 1.26703873E-11 4.05118117E-09 9.99995274E-04 9.99962096E-04 3.99752826E-05 1.76630055E-09 0.00000000 1.31156908E-08 2.71463850E-05 7.61395277E-05 1.69317573E-05 1.98816501E-08 3.89512778E-09 4.62189487E-09 3.48011440E-07 1.21814939E-13 3.50454510E-09 1.73141345E-07 9.36527175E-11 2.80357114E-07 2.99446015E-06 3.76442535E-04 1.04731079E-07 7.46508053E-13 1.20097987E-10 9.12775079E-07 4.96042389E-08 1.47838375E-06 8.03337699E-08 4.42345049E-09 2.33183108E-08 1.26725130E-09 6.00247113E-05 1.00000000 1.99093483E-04 2.33351879E-04 3.16378937E-05 1.86467674E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.13898151E-02 2.92859413E-02 0.732016206 3.23244594E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 420.800232 1.95086319E-02 1.72082960E-04 5.81409931E-02 1.47584359E-07 1.00092211E-06 2.00584624E-03 1.00006640E-03 1.34272195E-04 8.02361115E-04 8.42896334E-05 1.21429457E-05 1.50950933E-02 5.02293836E-03 1.12199481E-03 2.91154324E-03 19.9998741 4.88616037E-09 1.99994235E-03 0.999988198 1.93407459E-06 1.18965673E-07 1.00003602E-03 9.07282811E-05 2.99415505E-03 9.99591500E-03 4.90291684E-04 8.29849485E-03 7.44587078E-06 5.96391914E-08 1.85884471E-06 2.99767777E-03 9.91506269E-04 3.57594627E-06 3.92809585E-02 3.99989309E-03 1.06339058E-07 9.99900326E-02 4.99996240E-04 1.99999996E-02 1.33653115E-11 4.11245171E-09 9.99995158E-04 9.99961514E-04 3.90105961E-05 1.76527626E-09 0.00000000 1.28821220E-08 2.74820814E-05 7.92751089E-05 1.76503600E-05 1.99448831E-08 3.94389588E-09 4.55040716E-09 3.48245948E-07 1.21647633E-13 3.44401774E-09 1.78047017E-07 9.41716566E-11 2.88298452E-07 3.04022774E-06 3.85637482E-04 1.06339058E-07 7.32478477E-13 1.24599997E-10 9.22761672E-07 5.21447596E-08 1.49455423E-06 8.44474499E-08 4.54878979E-09 2.35734507E-08 1.33215716E-09 6.09893978E-05 1.00000000 1.99095914E-04 2.33355022E-04 3.16373662E-05 1.87936632E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.14109039E-02 2.92960387E-02 0.732246578 3.25898901E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 422.400238 1.95157733E-02 1.58768322E-04 5.81192337E-02 1.47879106E-07 1.00656814E-06 2.00593704E-03 1.00006466E-03 1.36162082E-04 8.02441791E-04 8.59625725E-05 1.29252976E-05 1.50972307E-02 5.02329040E-03 1.12474489E-03 2.95929564E-03 19.9998722 5.03393949E-09 1.99994142E-03 0.999988019 1.96538281E-06 1.22861948E-07 1.00003823E-03 9.32074836E-05 2.99403630E-03 9.99583676E-03 4.90052218E-04 8.29847250E-03 7.48257116E-06 5.98224545E-08 1.88646493E-06 2.99764331E-03 9.91353532E-04 3.63776599E-06 3.92641053E-02 3.99989169E-03 1.07918126E-07 9.99898836E-02 4.99996182E-04 1.99999996E-02 1.40964046E-11 4.17255164E-09 9.99995042E-04 9.99960932E-04 3.80703787E-05 1.76428061E-09 0.00000000 1.26585800E-08 2.78131974E-05 8.25160096E-05 1.83935226E-05 2.00235792E-08 3.99201827E-09 4.48189175E-09 3.48466244E-07 1.21493229E-13 3.38598727E-09 1.83063975E-07 9.46791187E-11 2.96419898E-07 3.08516542E-06 3.94806586E-04 1.07918126E-07 7.19012252E-13 1.29291314E-10 9.32216494E-07 5.47922454E-08 1.50986364E-06 8.87342964E-08 4.67697214E-09 2.38150051E-08 1.39979583E-09 6.19296115E-05 1.00000000 1.99097936E-04 2.33358020E-04 3.16363148E-05 1.89404280E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.14328235E-02 2.93065757E-02 0.732476175 3.28557901E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 424.000244 1.95221528E-02 1.46267776E-04 5.80980070E-02 1.48156076E-07 1.01188095E-06 2.00602645E-03 1.00006291E-03 1.38035219E-04 8.02524330E-04 8.76007762E-05 1.37474308E-05 1.50993597E-02 5.02363732E-03 1.12748449E-03 3.00697936E-03 19.9998703 5.18438936E-09 1.99994049E-03 0.999987841 1.99621377E-06 1.26803883E-07 1.00004056E-03 9.56870863E-05 2.99391826E-03 9.99575946E-03 4.89813159E-04 8.29845015E-03 7.51866310E-06 5.99922529E-08 1.91363642E-06 2.99760932E-03 9.91202309E-04 3.69890222E-06 3.92473005E-02 3.99989029E-03 1.09471472E-07 9.99897346E-02 4.99996124E-04 1.99999996E-02 1.48625123E-11 4.23160795E-09 9.99994925E-04 9.99960350E-04 3.71523856E-05 1.76331028E-09 0.00000000 1.24451578E-08 2.81396606E-05 8.58531203E-05 1.91591480E-05 2.01165538E-08 4.03948119E-09 4.41637216E-09 3.48673666E-07 1.21373004E-13 3.33045103E-09 1.88180437E-07 9.51766513E-11 3.04702411E-07 3.12936459E-06 4.03952494E-04 1.09471472E-07 7.06133123E-13 1.34158643E-10 9.41191047E-07 5.75416585E-08 1.52439520E-06 9.31861592E-08 4.80769735E-09 2.40442901E-08 1.47003876E-09 6.28476046E-05 1.00000000 1.99100177E-04 2.33361192E-04 3.16356563E-05 1.90870865E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.14535250E-02 2.93165185E-02 0.732699513 3.31209712E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 425.600250 1.95277594E-02 1.34601170E-04 5.80773130E-02 1.48414870E-07 1.01685589E-06 2.00611446E-03 1.00006117E-03 1.39887867E-04 8.02608847E-04 8.92011303E-05 1.46141383E-05 1.51014803E-02 5.02397958E-03 1.13021338E-03 3.05459159E-03 19.9998684 5.33778310E-09 1.99993956E-03 0.999987662 2.02655315E-06 1.30794049E-07 1.00004300E-03 9.81669073E-05 2.99380114E-03 9.99568310E-03 4.89574566E-04 8.29842873E-03 7.55413066E-06 6.01488779E-08 1.94034783E-06 2.99757603E-03 9.91052599E-04 3.75933723E-06 3.92305478E-02 3.99988890E-03 1.10998457E-07 9.99895930E-02 4.99996066E-04 1.99999996E-02 1.56680832E-11 4.28959090E-09 9.99994809E-04 9.99959768E-04 3.62576611E-05 1.76236514E-09 0.00000000 1.22415553E-08 2.84606322E-05 8.92945900E-05 1.99491660E-05 2.02249151E-08 4.08616652E-09 4.35380887E-09 3.48867644E-07 1.21274017E-13 3.27738681E-09 1.93402926E-07 9.56638518E-11 3.13156534E-07 3.17280683E-06 4.13074304E-04 1.10998457E-07 6.93806449E-13 1.39222939E-10 9.49660887E-07 6.04038348E-08 1.53810959E-06 9.78205748E-08 4.94113150E-09 2.42606806E-08 1.54316271E-09 6.37423291E-05 1.00000000 1.99102025E-04 2.33364233E-04 3.16344813E-05 1.92336171E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.14750646E-02 2.93269046E-02 0.732922375 3.33866403E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 427.200256 1.95326880E-02 1.23672115E-04 5.80570884E-02 1.48657449E-07 1.02153285E-06 2.00620107E-03 1.00005942E-03 1.41719458E-04 8.02695227E-04 9.07666763E-05 1.55236121E-05 1.51035935E-02 5.02431719E-03 1.13293272E-03 3.10213910E-03 19.9998665 5.49396484E-09 1.99993863E-03 0.999987483 2.05645529E-06 1.34828227E-07 1.00004557E-03 1.00646757E-04 2.99368473E-03 9.99560673E-03 4.89336322E-04 8.29840731E-03 7.58904434E-06 6.02942407E-08 1.96665201E-06 2.99754320E-03 9.90904286E-04 3.81915061E-06 3.92138399E-02 3.99988750E-03 1.12502086E-07 9.99894515E-02 4.99996007E-04 1.99999996E-02 1.65117243E-11 4.34662173E-09 9.99994692E-04 9.99959186E-04 3.53840405E-05 1.76144221E-09 0.00000000 1.20477175E-08 2.87761341E-05 9.28306617E-05 2.07613284E-05 2.03474322E-08 4.13207513E-09 4.29417790E-09 3.49049515E-07 1.21214711E-13 3.22675686E-09 1.98719263E-07 9.61421290E-11 3.21762542E-07 3.21557854E-06 4.22174577E-04 1.12502086E-07 6.82047084E-13 1.44469381E-10 9.57676662E-07 6.33730295E-08 1.55108864E-06 1.02628242E-07 5.07696329E-09 2.44654714E-08 1.61902092E-09 6.46159533E-05 1.00000000 1.99104106E-04 2.33367449E-04 3.16337027E-05 1.93800457E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.14954084E-02 2.93367058E-02 0.733139277 3.36515866E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 428.800262 1.95369236E-02 1.13500690E-04 5.80373295E-02 1.48883430E-07 1.02590604E-06 2.00628652E-03 1.00005767E-03 1.43525860E-04 8.02783587E-04 9.22943582E-05 1.64810717E-05 1.51056983E-02 5.02465060E-03 1.13564217E-03 3.14961886E-03 19.9998646 5.65322722E-09 1.99993793E-03 0.999987304 2.08590654E-06 1.38908945E-07 1.00004813E-03 1.03126455E-04 2.99356901E-03 9.99553129E-03 4.89098486E-04 8.29838589E-03 7.62338914E-06 6.04285617E-08 1.99253827E-06 2.99751083E-03 9.90757369E-04 3.87832597E-06 3.91971767E-02 3.99988610E-03 1.13981763E-07 9.99893099E-02 4.99995949E-04 1.99999996E-02 1.73983709E-11 4.40267156E-09 9.99994576E-04 9.99958604E-04 3.45326116E-05 1.76054171E-09 0.00000000 1.18634818E-08 2.90852531E-05 9.64688661E-05 2.15974287E-05 2.04852295E-08 4.17707735E-09 4.23747570E-09 3.49218681E-07 1.21184435E-13 3.17856674E-09 2.04134835E-07 9.66111496E-11 3.30529161E-07 3.25766223E-06 4.31252440E-04 1.13981763E-07 6.70829386E-13 1.49918966E-10 9.65214895E-07 6.64608208E-08 1.56329429E-06 1.07627898E-07 5.21533083E-09 2.46580605E-08 1.69790915E-09 6.54673786E-05 1.00000000 1.99105794E-04 2.33370520E-04 3.16324149E-05 1.95263478E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.15166090E-02 2.93469578E-02 0.733355999 3.39170396E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 430.400269 1.95405576E-02 1.03993210E-04 5.80179766E-02 1.49094731E-07 1.03001321E-06 2.00637081E-03 1.00005593E-03 1.45307073E-04 8.02873750E-04 9.37876175E-05 1.74840789E-05 1.51077965E-02 5.02498029E-03 1.13834289E-03 3.19703808E-03 19.9998627 5.81537840E-09 1.99993723E-03 0.999987125 2.11496081E-06 1.43031670E-07 1.00005080E-03 1.05605854E-04 2.99345376E-03 9.99545585E-03 4.88861057E-04 8.29836540E-03 7.65723507E-06 6.05535249E-08 2.01805824E-06 2.99747894E-03 9.90611617E-04 3.93694199E-06 3.91805544E-02 3.99988471E-03 1.15440443E-07 9.99891758E-02 4.99995891E-04 1.99999996E-02 1.83260906E-11 4.45785986E-09 9.99994460E-04 9.99958022E-04 3.37011625E-05 1.75966075E-09 0.00000000 1.16885897E-08 2.93881494E-05 1.00198296E-04 2.24549476E-05 2.06369482E-08 4.22119362E-09 4.18361612E-09 3.49376535E-07 1.21198448E-13 3.13272919E-09 2.09636610E-07 9.70722669E-11 3.39435275E-07 3.29914315E-06 4.40310425E-04 1.15440443E-07 6.60156012E-13 1.55554070E-10 9.72327939E-07 6.96599969E-08 1.57481134E-06 1.12807875E-07 5.35590106E-09 2.48397871E-08 1.77964321E-09 6.62988314E-05 1.00000000 1.99107730E-04 2.33373765E-04 3.16315272E-05 1.96725508E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.15366325E-02 2.93566324E-02 0.733567119 3.41817737E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 432.000275 1.95435770E-02 9.51699549E-05 5.79990298E-02 1.49290955E-07 1.03384752E-06 2.00645393E-03 1.00005418E-03 1.47058556E-04 8.02965835E-04 9.52434639E-05 1.85382723E-05 1.51098873E-02 5.02530625E-03 1.14103442E-03 3.24439327E-03 19.9998608 5.98073013E-09 1.99993653E-03 0.999986947 2.14360557E-06 1.47198875E-07 1.00005360E-03 1.08084751E-04 2.99333921E-03 9.99538135E-03 4.88623977E-04 8.29834491E-03 7.69056714E-06 6.06692794E-08 2.04320213E-06 2.99744750E-03 9.90467146E-04 3.99498276E-06 3.91639769E-02 3.99988331E-03 1.16877558E-07 9.99890417E-02 4.99995833E-04 1.99999996E-02 1.93003166E-11 4.51215998E-09 9.99994343E-04 9.99957556E-04 3.28908318E-05 1.75879966E-09 0.00000000 1.15229817E-08 2.96838389E-05 1.04025770E-04 2.33355258E-05 2.08037214E-08 4.26428537E-09 4.13262136E-09 3.49522509E-07 1.21247806E-13 3.08926951E-09 2.15228809E-07 9.75251685E-11 3.48487731E-07 3.34000447E-06 4.49347659E-04 1.16877558E-07 6.50007988E-13 1.61395522E-10 9.78992944E-07 7.29828358E-08 1.58560306E-06 1.18188055E-07 5.49878143E-09 2.50100687E-08 1.86453697E-09 6.71091620E-05 1.00000000 1.99109272E-04 2.33376864E-04 3.16301412E-05 1.98186302E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.15575276E-02 2.93667633E-02 0.733778298 3.44470255E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 433.600281 1.95460655E-02 8.69430005E-05 5.79804331E-02 1.49473905E-07 1.03744378E-06 2.00653588E-03 1.00005243E-03 1.48780877E-04 8.03059665E-04 9.66655789E-05 1.96407163E-05 1.51119726E-02 5.02562942E-03 1.14371802E-03 3.29169165E-03 19.9998589 6.14906526E-09 1.99993583E-03 0.999986768 2.17189245E-06 1.51405956E-07 1.00005651E-03 1.10563051E-04 2.99322512E-03 9.99530684E-03 4.88387246E-04 8.29832442E-03 7.72345174E-06 6.07772748E-08 2.06801860E-06 2.99741654E-03 9.90323839E-04 4.05252194E-06 3.91474366E-02 3.99988191E-03 1.18295901E-07 9.99889076E-02 4.99995775E-04 1.99999996E-02 2.03186790E-11 4.56568428E-09 9.99994227E-04 9.99957090E-04 3.20994404E-05 1.75795534E-09 0.00000000 1.13662617E-08 2.99726034E-05 1.07939799E-04 2.42365004E-05 2.09841282E-08 4.30638902E-09 4.08436041E-09 3.49657967E-07 1.21344964E-13 3.04806713E-09 2.20898201E-07 9.79710965E-11 3.57665130E-07 3.38032646E-06 4.58366587E-04 1.18295901E-07 6.40379460E-13 1.67423728E-10 9.85261863E-07 7.64210668E-08 1.59575336E-06 1.23755029E-07 5.64363445E-09 2.51702303E-08 1.95237870E-09 6.79005534E-05 1.00000000 1.99111062E-04 2.33380139E-04 3.16291589E-05 1.99646121E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.15772605E-02 2.93763243E-02 0.733984172 3.47115584E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 435.200287 1.95480119E-02 7.93313229E-05 5.79621904E-02 1.49643228E-07 1.04079504E-06 2.00661668E-03 1.00005069E-03 1.50469146E-04 8.03155359E-04 9.80511250E-05 2.07973735E-05 1.51140513E-02 5.02594933E-03 1.14639336E-03 3.33892973E-03 19.9998569 6.32070885E-09 1.99993514E-03 0.999986649 2.19981030E-06 1.55655229E-07 1.00005942E-03 1.13040544E-04 2.99311173E-03 9.99523327E-03 4.88150894E-04 8.29830486E-03 7.75587614E-06 6.08776247E-08 2.09249902E-06 2.99738604E-03 9.90181579E-04 4.10954590E-06 3.91309336E-02 3.99988052E-03 1.19694974E-07 9.99887735E-02 4.99995716E-04 1.99999996E-02 2.13870397E-11 4.61840877E-09 9.99994110E-04 9.99956625E-04 3.13281416E-05 1.75712844E-09 0.00000000 1.12184457E-08 3.02534081E-05 1.11946189E-04 2.51592865E-05 2.11792823E-08 4.34735892E-09 4.03887457E-09 3.49782368E-07 1.21482685E-13 3.00916092E-09 2.26647515E-07 9.84097942E-11 3.66971847E-07 3.42009457E-06 4.67366393E-04 1.19694974E-07 6.31257199E-13 1.73658601E-10 9.91113779E-07 7.99874229E-08 1.60522836E-06 1.29529425E-07 5.79052983E-09 2.53197374E-08 2.04349426E-09 6.86718486E-05 1.00000000 1.99112488E-04 2.33383267E-04 3.16276819E-05 2.01104718E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.15978763E-02 2.93863453E-02 0.734190404 3.49766277E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 436.800293 1.95494927E-02 7.22535988E-05 5.79442494E-02 1.49800641E-07 1.04393280E-06 2.00669654E-03 1.00004894E-03 1.52124456E-04 8.03252740E-04 9.94039219E-05 2.20048751E-05 1.51161244E-02 5.02626644E-03 1.14906137E-03 3.38611403E-03 19.9998550 6.49542420E-09 1.99993444E-03 0.999986529 2.22740755E-06 1.59942104E-07 1.00006245E-03 1.15517170E-04 2.99299881E-03 9.99515969E-03 4.87914862E-04 8.29828531E-03 7.78790218E-06 6.09715514E-08 2.11668862E-06 2.99735577E-03 9.90040367E-04 4.16612329E-06 3.91144678E-02 3.99987912E-03 1.21077349E-07 9.99886468E-02 4.99995658E-04 1.99999996E-02 2.25026352E-11 4.67043870E-09 9.99993994E-04 9.99956159E-04 3.05748290E-05 1.75631654E-09 0.00000000 1.10790328E-08 3.05266476E-05 1.16033196E-04 2.61011573E-05 2.13877325E-08 4.38724834E-09 3.99599953E-09 3.49897050E-07 1.21670740E-13 2.97240521E-09 2.32463734E-07 9.88423926E-11 3.76386822E-07 3.45938315E-06 4.76349349E-04 1.21077349E-07 6.22628251E-13 1.80079007E-10 9.96598828E-07 8.36727452E-08 1.61410935E-06 1.35496421E-07 5.93913496E-09 2.54598742E-08 2.13764939E-09 6.94251648E-05 1.00000000 1.99114162E-04 2.33386570E-04 3.16266123E-05 2.02562369E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.16173521E-02 2.93958019E-02 0.734391570 3.52409780E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 438.400299 1.95504986E-02 6.57265846E-05 5.79266138E-02 1.49945777E-07 1.04685057E-06 2.00677547E-03 1.00004720E-03 1.53741654E-04 8.03351868E-04 1.00721365E-04 2.32694147E-05 1.51181910E-02 5.02658123E-03 1.15172181E-03 3.43324151E-03 19.9998531 6.67354483E-09 1.99993374E-03 0.999986410 2.25467465E-06 1.64268698E-07 1.00006559E-03 1.17992706E-04 2.99288635E-03 9.99508705E-03 4.87679179E-04 8.29826575E-03 7.81951894E-06 6.10591471E-08 2.14057991E-06 2.99732597E-03 9.89900087E-04 4.22224184E-06 3.90980355E-02 3.99987772E-03 1.22442628E-07 9.99885201E-02 4.99995600E-04 1.99999996E-02 2.36716844E-11 4.72175321E-09 9.99993877E-04 9.99955693E-04 2.98406430E-05 1.75551962E-09 0.00000000 1.09480860E-08 3.07912487E-05 1.20205375E-04 2.70632463E-05 2.16105480E-08 4.42590586E-09 3.95578459E-09 3.50001557E-07 1.21903369E-13 2.93784486E-09 2.38347894E-07 9.92686766E-11 3.85911733E-07 3.49817992E-06 4.85314697E-04 1.22442628E-07 6.14483453E-13 1.86703292E-10 1.00169859E-06 8.74900223E-08 1.62236643E-06 1.41677020E-07 6.08947603E-09 2.55901664E-08 2.23517582E-09 7.01593526E-05 1.00000000 1.99115471E-04 2.33389728E-04 3.16250553E-05 2.04018826E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.16377220E-02 2.94057261E-02 0.734593391 3.55058722E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 440.000305 1.95511002E-02 5.96757454E-05 5.79092391E-02 1.50080240E-07 1.04957689E-06 2.00685370E-03 1.00004545E-03 1.55322326E-04 8.03452625E-04 1.02007340E-04 2.45872252E-05 1.51202530E-02 5.02689369E-03 1.15437573E-03 3.48031824E-03 19.9998512 6.85481716E-09 1.99993304E-03 0.999986291 2.28165618E-06 1.68630535E-07 1.00006885E-03 1.20467128E-04 2.99277436E-03 9.99501441E-03 4.87443787E-04 8.29824619E-03 7.85078282E-06 6.11414492E-08 2.16421449E-06 2.99729640E-03 9.89760738E-04 4.27796476E-06 3.90816368E-02 3.99987632E-03 1.23793171E-07 9.99883935E-02 4.99995542E-04 1.99999996E-02 2.48910458E-11 4.77244910E-09 9.99993761E-04 9.99955228E-04 2.91235592E-05 1.75473591E-09 0.00000000 1.08250235E-08 3.10477117E-05 1.24450991E-04 2.80428230E-05 2.18462706E-08 4.46339943E-09 3.91804056E-09 3.50097139E-07 1.22187864E-13 2.90531577E-09 2.44287463E-07 9.96896593E-11 3.95526286E-07 3.53655264E-06 4.94264590E-04 1.23793171E-07 6.06804103E-13 1.93509153E-10 1.00646116E-06 9.14293281E-08 1.63007746E-06 1.48055165E-07 6.24123331E-09 2.57118433E-08 2.33582020E-09 7.08764346E-05 1.00000000 1.99117043E-04 2.33393046E-04 3.16239129E-05 2.05474353E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.16569668E-02 2.94150934E-02 0.734790444 3.57700549E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 441.600311 1.95512883E-02 5.41154404E-05 5.78921251E-02 1.50203761E-07 1.05210552E-06 2.00693100E-03 1.00004370E-03 1.56861090E-04 8.03555071E-04 1.03259510E-04 2.59646949E-05 1.51223093E-02 5.02720382E-03 1.15702278E-03 3.52734118E-03 19.9998493 7.03958225E-09 1.99993234E-03 0.999986172 2.30834439E-06 1.73029477E-07 1.00007222E-03 1.22940197E-04 2.99266283E-03 9.99494269E-03 4.87208716E-04 8.29822756E-03 7.88168472E-06 6.12185289E-08 2.18758646E-06 2.99726729E-03 9.89622320E-04 4.33328205E-06 3.90652679E-02 3.99987493E-03 1.25128651E-07 9.99882668E-02 4.99995484E-04 1.99999996E-02 2.61672715E-11 4.82250906E-09 9.99993645E-04 9.99954762E-04 2.84246998E-05 1.75396508E-09 0.00000000 1.07099369E-08 3.12949451E-05 1.28773245E-04 2.90407133E-05 2.20959215E-08 4.49957449E-09 3.88282118E-09 3.50183399E-07 1.22519711E-13 2.87486546E-09 2.50281744E-07 1.00105167E-10 4.05229315E-07 3.57449176E-06 5.03198302E-04 1.25128651E-07 5.99584239E-13 2.00512926E-10 1.01087051E-06 9.55037933E-08 1.63721654E-06 1.54652099E-07 6.39438813E-09 2.58244963E-08 2.43991760E-09 7.15752903E-05 1.00000000 1.99118251E-04 2.33396218E-04 3.16222868E-05 2.06928686E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.16771169E-02 2.94249300E-02 0.734988391 3.60348001E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 443.200317 1.95511281E-02 4.89758168E-05 5.78752309E-02 1.50317817E-07 1.05446327E-06 2.00700760E-03 1.00004196E-03 1.58360228E-04 8.03659030E-04 1.04481907E-04 2.73973892E-05 1.51243610E-02 5.02751255E-03 1.15966389E-03 3.57431639E-03 19.9998474 7.22755455E-09 1.99993164E-03 0.999986053 2.33478113E-06 1.77461033E-07 1.00007572E-03 1.25411956E-04 2.99255154E-03 9.99487098E-03 4.86973935E-04 8.29820894E-03 7.91227740E-06 6.12912743E-08 2.21073401E-06 2.99723842E-03 9.89484601E-04 4.38825236E-06 3.90489288E-02 3.99987353E-03 1.26451255E-07 9.99881402E-02 4.99995425E-04 1.99999996E-02 2.74965606E-11 4.87202367E-09 9.99993645E-04 9.99954296E-04 2.77420495E-05 1.75320558E-09 0.00000000 1.06021485E-08 3.15335819E-05 1.33160342E-04 3.00541687E-05 2.23579875E-08 4.53452031E-09 3.84990617E-09 3.50261587E-07 1.22903640E-13 2.84630675E-09 2.56318799E-07 1.00516123E-10 4.15001580E-07 3.61206025E-06 5.12117869E-04 1.26451255E-07 5.92798109E-13 2.07690670E-10 1.01497358E-06 9.97021843E-08 1.64385972E-06 1.61449648E-07 6.54863630E-09 2.59293245E-08 2.54718135E-09 7.22579425E-05 1.00000000 1.99119720E-04 2.33399551E-04 3.16210753E-05 2.08382102E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.16961606E-02 2.94342171E-02 0.735181808 3.62988263E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 444.800323 1.95506141E-02 4.42698838E-05 5.78585602E-02 1.50422139E-07 1.05664412E-06 2.00708350E-03 1.00004021E-03 1.59814095E-04 8.03764618E-04 1.05672407E-04 2.88919455E-05 1.51264081E-02 5.02781942E-03 1.16229896E-03 3.62124061E-03 19.9998455 7.41908757E-09 1.99993094E-03 0.999985933 2.36095957E-06 1.81926893E-07 1.00007933E-03 1.27882144E-04 2.99244071E-03 9.99479927E-03 4.86739445E-04 8.29819031E-03 7.94255357E-06 6.13597351E-08 2.23365237E-06 2.99720978E-03 9.89347696E-04 4.44286707E-06 3.90326194E-02 3.99987213E-03 1.27760714E-07 9.99880210E-02 4.99995367E-04 1.99999996E-02 2.88858538E-11 4.92097785E-09 9.99993645E-04 9.99953831E-04 2.70767450E-05 1.75245740E-09 0.00000000 1.05017763E-08 3.17625090E-05 1.37614290E-04 3.10837422E-05 2.26334596E-08 4.56807703E-09 3.81935461E-09 3.50331362E-07 1.23336129E-13 2.81968893E-09 2.62396384E-07 1.00922368E-10 4.24839357E-07 3.64924972E-06 5.21022594E-04 1.27760714E-07 5.86442732E-13 2.15056875E-10 1.01875617E-06 1.04037888E-07 1.64998403E-06 1.68469484E-07 6.70392009E-09 2.60259654E-08 2.65795363E-09 7.29232488E-05 1.00000000 1.99120841E-04 2.33402738E-04 3.16193909E-05 2.09834354E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.17161244E-02 2.94439774E-02 0.735376298 3.65634263E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 446.400330 1.95498038E-02 3.99337187E-05 5.78420758E-02 1.50518133E-07 1.05867241E-06 2.00715871E-03 1.00003846E-03 1.61225602E-04 8.03871604E-04 1.06835032E-04 3.04434161E-05 1.51284514E-02 5.02812490E-03 1.16492866E-03 3.66811990E-03 19.9998436 7.61387398E-09 1.99993025E-03 0.999985814 2.38691791E-06 1.86422682E-07 1.00008294E-03 1.30350818E-04 2.99233035E-03 9.99472849E-03 4.86505218E-04 8.29817168E-03 7.97256143E-06 6.14246574E-08 2.25637609E-06 2.99718138E-03 9.89211490E-04 4.49717936E-06 3.90163362E-02 3.99987074E-03 1.29059003E-07 9.99879017E-02 4.99995309E-04 1.99999996E-02 3.03308108E-11 4.96945418E-09 9.99993645E-04 9.99953365E-04 2.64268256E-05 1.75171877E-09 0.00000000 1.04081002E-08 3.19824721E-05 1.42123725E-04 3.21267762E-05 2.29208243E-08 4.60035032E-09 3.79093068E-09 3.50393918E-07 1.23819913E-13 2.79481505E-09 2.68503641E-07 1.01324713E-10 4.34725109E-07 3.68611722E-06 5.29914396E-04 1.29059003E-07 5.80488294E-13 2.22586907E-10 1.02226284E-06 1.08498760E-07 1.65566155E-06 1.75691937E-07 6.85996238E-09 2.61155559E-08 2.77192380E-09 7.35731664E-05 1.00000000 1.99122238E-04 2.33406085E-04 3.16181213E-05 2.11285704E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.17349893E-02 2.94531956E-02 0.735566497 3.68273146E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 448.000336 1.95486937E-02 3.59781916E-05 5.78257777E-02 1.50605558E-07 1.06054267E-06 2.00723344E-03 1.00003672E-03 1.62588956E-04 8.03980103E-04 1.07967942E-04 3.20585241E-05 1.51304901E-02 5.02842898E-03 1.16755278E-03 3.71495076E-03 19.9998417 7.81227083E-09 1.99992955E-03 0.999985695 2.41265070E-06 1.90949862E-07 1.00008666E-03 1.32817731E-04 2.99222022E-03 9.99465771E-03 4.86271281E-04 8.29815306E-03 8.00229373E-06 6.14860838E-08 2.27890155E-06 2.99715321E-03 9.89075867E-04 4.55118197E-06 3.90000828E-02 3.99986934E-03 1.30345896E-07 9.99877825E-02 4.99995251E-04 1.99999996E-02 3.18386116E-11 5.01743980E-09 9.99993645E-04 9.99952899E-04 2.57934062E-05 1.75098980E-09 0.00000000 1.03212381E-08 3.21923508E-05 1.46689315E-04 3.31835254E-05 2.32210216E-08 4.63118033E-09 3.76468989E-09 3.50448914E-07 1.24352256E-13 2.77173151E-09 2.74636733E-07 1.01723061E-10 4.44652613E-07 3.72265617E-06 5.38792636E-04 1.30345896E-07 5.74933222E-13 2.30292799E-10 1.02548165E-06 1.13098118E-07 1.66087295E-06 1.83138567E-07 7.01666503E-09 2.61977924E-08 2.88943225E-09 7.42065895E-05 1.00000000 1.99123286E-04 2.33409286E-04 3.16163823E-05 2.12735889E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.17547855E-02 2.94628888E-02 0.735758007 3.70917842E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 449.600342 1.95473339E-02 3.23459099E-05 5.78096397E-02 1.50685693E-07 1.06227697E-06 2.00730748E-03 1.00003497E-03 1.63907534E-04 8.04089883E-04 1.09075045E-04 3.37319652E-05 1.51325250E-02 5.02873212E-03 1.17017212E-03 3.76173900E-03 19.9998398 8.01395839E-09 1.99992885E-03 0.999985576 2.43819204E-06 1.95504271E-07 1.00009050E-03 1.35282971E-04 2.99211033E-03 9.99458693E-03 4.86037578E-04 8.29813536E-03 8.03179410E-06 6.15446325E-08 2.30125920E-06 2.99712527E-03 9.88940825E-04 4.60492220E-06 3.89838517E-02 3.99986794E-03 1.31623167E-07 9.99876633E-02 4.99995193E-04 1.99999996E-02 3.34045014E-11 5.06500886E-09 9.99993645E-04 9.99952434E-04 2.51746151E-05 1.75026882E-09 0.00000000 1.02404609E-08 3.23929817E-05 1.51300497E-04 3.42515013E-05 2.35325679E-08 4.66068517E-09 3.74039333E-09 3.50497487E-07 1.24934216E-13 2.75023959E-09 2.80786224E-07 1.02118078E-10 4.54606607E-07 3.75891705E-06 5.47659060E-04 1.31623167E-07 5.69745694E-13 2.38150055E-10 1.02845388E-06 1.17823255E-07 1.66568509E-06 1.90788796E-07 7.17378690E-09 2.62737299E-08 3.01015435E-09 7.48253806E-05 1.00000000 1.99124610E-04 2.33412648E-04 3.16150654E-05 2.14185187E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.17734976E-02 2.94720437E-02 0.735945404 3.73555385E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 451.200348 1.95457228E-02 2.90457465E-05 5.77936582E-02 1.50758339E-07 1.06387029E-06 2.00738106E-03 1.00003323E-03 1.65175457E-04 8.04201060E-04 1.10154768E-04 3.54705298E-05 1.51345562E-02 5.02903434E-03 1.17278646E-03 3.80848115E-03 19.9998379 8.21929724E-09 1.99992815E-03 0.999985456 2.46353738E-06 2.00087129E-07 1.00009446E-03 1.37746276E-04 2.99200090E-03 9.99451615E-03 4.85804165E-04 8.29811767E-03 8.06105709E-06 6.16003462E-08 2.32344610E-06 2.99709756E-03 9.88806365E-04 4.65839412E-06 3.89676467E-02 3.99986655E-03 1.32890634E-07 9.99875441E-02 4.99995134E-04 1.99999996E-02 3.50358804E-11 5.11215115E-09 9.99993645E-04 9.99951968E-04 2.45715491E-05 1.74955628E-09 0.00000000 1.01658824E-08 3.25832516E-05 1.55956644E-04 3.53306641E-05 2.38563533E-08 4.68870498E-09 3.71809272E-09 3.50539409E-07 1.25563717E-13 2.73038192E-09 2.86946829E-07 1.02509709E-10 4.64578477E-07 3.79489438E-06 5.56512969E-04 1.32890634E-07 5.64925277E-13 2.46168169E-10 1.03116975E-06 1.22687368E-07 1.67008216E-06 1.98663983E-07 7.33119254E-09 2.63431161E-08 3.13442716E-09 7.54284483E-05 1.00000000 1.99125599E-04 2.33415863E-04 3.16132828E-05 2.15633321E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.17931485E-02 2.94816792E-02 0.736134350 3.76198925E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 452.800354 1.95439048E-02 2.60255638E-05 5.77778108E-02 1.50824661E-07 1.06534299E-06 2.00745417E-03 1.00003148E-03 1.66396727E-04 8.04313400E-04 1.11210924E-04 3.72683753E-05 1.51365837E-02 5.02933562E-03 1.17539661E-03 3.85518279E-03 19.9998360 8.42794545E-09 1.99992745E-03 0.999985337 2.48871743E-06 2.04694430E-07 1.00009853E-03 1.40207776E-04 2.99189170E-03 9.99444630E-03 4.85570985E-04 8.29809997E-03 8.09011999E-06 6.16537363E-08 2.34548975E-06 2.99707009E-03 9.88672487E-04 4.71164003E-06 3.89514603E-02 3.99986515E-03 1.34149872E-07 9.99874249E-02 4.99995076E-04 1.99999996E-02 3.67273816E-11 5.15893328E-09 9.99993645E-04 9.99951502E-04 2.39823748E-05 1.74885051E-09 0.00000000 1.00967608E-08 3.27640955E-05 1.60648022E-04 3.64187144E-05 2.41909053E-08 4.71537387E-09 3.69754538E-09 3.50575704E-07 1.26240300E-13 2.71195733E-09 2.93110617E-07 1.02898530E-10 4.74555463E-07 3.83063343E-06 5.65356051E-04 1.34149872E-07 5.60437764E-13 2.54322702E-10 1.03366779E-06 1.27676856E-07 1.67412657E-06 2.06742115E-07 7.48868079E-09 2.64069389E-08 3.26190341E-09 7.60176190E-05 1.00000000 1.99126865E-04 2.33419240E-04 3.16119185E-05 2.17080582E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.18117303E-02 2.94907838E-02 0.736319363 3.78835201E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 454.400360 1.95418801E-02 2.32928523E-05 5.77620976E-02 1.50884517E-07 1.06669029E-06 2.00752681E-03 1.00002973E-03 1.67565318E-04 8.04426963E-04 1.12242167E-04 3.91323956E-05 1.51386075E-02 5.02963597E-03 1.17800222E-03 3.90184042E-03 19.9998341 8.64027072E-09 1.99992675E-03 0.999985218 2.51372830E-06 2.09327197E-07 1.00010273E-03 1.42667195E-04 2.99178273E-03 9.99437645E-03 4.85338067E-04 8.29808228E-03 8.11898008E-06 6.17048386E-08 2.36738765E-06 2.99704284E-03 9.88539075E-04 4.76465493E-06 3.89353000E-02 3.99986375E-03 1.35400725E-07 9.99873057E-02 4.99995018E-04 1.99999996E-02 3.84866618E-11 5.20534638E-09 9.99993645E-04 9.99951037E-04 2.34081908E-05 1.74815196E-09 0.00000000 1.00332063E-08 3.29344039E-05 1.65372883E-04 3.75153577E-05 2.45370781E-08 4.74053152E-09 3.67879749E-09 3.50606172E-07 1.26962365E-13 2.69500400E-09 2.99271022E-07 1.03284492E-10 4.84526879E-07 3.86613010E-06 5.74187667E-04 1.35400725E-07 5.56283643E-13 2.62620786E-10 1.03593982E-06 1.32804871E-07 1.67780513E-06 2.15044494E-07 7.64608288E-09 2.64649884E-08 3.39291928E-09 7.65918012E-05 1.00000000 1.99127797E-04 2.33422470E-04 3.16100995E-05 2.18526693E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.18312582E-02 2.95003708E-02 0.736506104 3.81477661E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 456.000366 1.95396859E-02 2.08005840E-05 5.77464923E-02 1.50938931E-07 1.06793107E-06 2.00759899E-03 1.00002799E-03 1.68685845E-04 8.04541633E-04 1.13252172E-04 4.10562243E-05 1.51406284E-02 5.02993586E-03 1.18060398E-03 3.94845940E-03 19.9998322 8.85590801E-09 1.99992605E-03 0.999985099 2.53859730E-06 2.13981593E-07 1.00010703E-03 1.45124679E-04 2.99167400E-03 9.99430660E-03 4.85105353E-04 8.29806458E-03 8.14767009E-06 6.17540792E-08 2.38916414E-06 2.99701560E-03 9.88406129E-04 4.81747611E-06 3.89191583E-02 3.99986235E-03 1.36644601E-07 9.99871865E-02 4.99994960E-04 1.99999996E-02 4.03077190E-11 5.25145039E-09 9.99993645E-04 9.99950571E-04 2.28471963E-05 1.74745918E-09 0.00000000 9.97448613E-09 3.30952134E-05 1.70122570E-04 3.86185311E-05 2.48934153E-08 4.76432582E-09 3.66160968E-09 3.50631836E-07 1.27728272E-13 2.67932498E-09 3.05421963E-07 1.03668109E-10 4.94482890E-07 3.90142395E-06 5.83009387E-04 1.36644601E-07 5.52427624E-13 2.71038664E-10 1.03802154E-06 1.38056990E-07 1.68117549E-06 2.23547758E-07 7.80324338E-09 2.65181761E-08 3.52710594E-09 7.71527921E-05 1.00000000 1.99129005E-04 2.33425846E-04 3.16086989E-05 2.19971946E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.18497282E-02 2.95094308E-02 0.736689091 3.84112857E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 457.600372 1.95373259E-02 1.85546432E-05 5.77309988E-02 1.50987773E-07 1.06906100E-06 2.00767070E-03 1.00002624E-03 1.69752297E-04 8.04657408E-04 1.14239825E-04 4.30467117E-05 1.51426466E-02 5.03023528E-03 1.18320179E-03 3.99503624E-03 19.9998302 9.07522590E-09 1.99992536E-03 0.999984980 2.56332146E-06 2.18658400E-07 1.00011134E-03 1.47579965E-04 2.99156550E-03 9.99423675E-03 4.84872871E-04 8.29804689E-03 8.17618638E-06 6.18014866E-08 2.41081716E-06 2.99698859E-03 9.88273649E-04 4.87009947E-06 3.89030352E-02 3.99986096E-03 1.37881386E-07 9.99870673E-02 4.99994901E-04 1.99999996E-02 4.21983073E-11 5.29723776E-09 9.99993645E-04 9.99950105E-04 2.23004663E-05 1.74677217E-09 0.00000000 9.92069360E-09 3.32454329E-05 1.74894289E-04 3.97276999E-05 2.52607233E-08 4.78660089E-09 3.64602082E-09 3.50652527E-07 1.28536694E-13 2.66495137E-09 3.11555823E-07 1.04049318E-10 5.04411162E-07 3.93651180E-06 5.91820513E-04 1.37881386E-07 5.48870194E-13 2.79580914E-10 1.03990658E-06 1.43446044E-07 1.68422730E-06 2.32272669E-07 7.95996691E-09 2.65663367E-08 3.66479114E-09 7.76995221E-05 1.00000000 1.99129892E-04 2.33429077E-04 3.16068472E-05 2.21416049E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.18691482E-02 2.95189749E-02 0.736873925 3.86754349E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 459.200378 1.95348319E-02 1.65135134E-05 5.77155985E-02 1.51032026E-07 1.07009714E-06 2.00774218E-03 1.00002449E-03 1.70769723E-04 8.04774114E-04 1.15208568E-04 4.50971384E-05 1.51446620E-02 5.03053470E-03 1.18579611E-03 4.04157583E-03 19.9998283 9.29784694E-09 1.99992466E-03 0.999984860 2.58792466E-06 2.23354064E-07 1.00011576E-03 1.50033229E-04 2.99145700E-03 9.99416690E-03 4.84640623E-04 8.29802919E-03 8.20455898E-06 6.18474090E-08 2.43236809E-06 2.99696182E-03 9.88141517E-04 4.92255822E-06 3.88869308E-02 3.99985956E-03 1.39112288E-07 9.99869555E-02 4.99994843E-04 1.99999996E-02 4.41519460E-11 5.34276090E-09 9.99993645E-04 9.99949640E-04 2.17662637E-05 1.74609005E-09 0.00000000 9.87112969E-09 3.33861644E-05 1.79680705E-04 4.08410961E-05 2.56375916E-08 4.80751350E-09 3.63180241E-09 3.50669069E-07 1.29385164E-13 2.65169597E-09 3.17668395E-07 1.04428556E-10 5.14304929E-07 3.97142821E-06 6.00622501E-04 1.39112288E-07 5.45576605E-13 2.88225277E-10 1.04162700E-06 1.48957156E-07 1.68701263E-06 2.41195153E-07 8.11614775E-09 2.66102926E-08 3.80559495E-09 7.82337229E-05 1.00000000 1.99131056E-04 2.33432467E-04 3.16054175E-05 2.22859293E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.18875213E-02 2.95279939E-02 0.737055123 3.89388502E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 460.800385 1.95322055E-02 1.46818438E-05 5.77002913E-02 1.51071561E-07 1.07103563E-06 2.00781319E-03 1.00002275E-03 1.71732128E-04 8.04891810E-04 1.16157498E-04 4.72143256E-05 1.51466746E-02 5.03083365E-03 1.18838681E-03 4.08807537E-03 19.9998264 9.52414059E-09 1.99992396E-03 0.999984741 2.61240393E-06 2.28069112E-07 1.00012030E-03 1.52484194E-04 2.99134874E-03 9.99409799E-03 4.84408607E-04 8.29801150E-03 8.23278515E-06 6.18918747E-08 2.45381511E-06 2.99693504E-03 9.88009735E-04 4.97484780E-06 3.88708450E-02 3.99985816E-03 1.40337221E-07 9.99868438E-02 4.99994785E-04 1.99999996E-02 4.61764932E-11 5.38801359E-09 9.99993645E-04 9.99949174E-04 2.12456489E-05 1.74541304E-09 0.00000000 9.82587700E-09 3.35163422E-05 1.84478093E-04 4.19579737E-05 2.60247912E-08 4.82691043E-09 3.61898778E-09 3.50681432E-07 1.30272637E-13 2.63958544E-09 3.23751237E-07 1.04805789E-10 5.24150437E-07 4.00617046E-06 6.09414710E-04 1.40337221E-07 5.42547561E-13 2.96974084E-10 1.04317780E-06 1.54602859E-07 1.68952329E-06 2.50335489E-07 8.27156832E-09 2.66499125E-08 3.94983779E-09 7.87543395E-05 1.00000000 1.99131900E-04 2.33435712E-04 3.16035366E-05 2.24301402E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.19068481E-02 2.95375027E-02 0.737238288 3.92029062E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 462.400391 1.95294749E-02 1.30231947E-05 5.76850586E-02 1.51107201E-07 1.07189192E-06 2.00788397E-03 1.00002100E-03 1.72644985E-04 8.05010321E-04 1.17089789E-04 4.93912230E-05 1.51486844E-02 5.03113260E-03 1.19097438E-03 4.13453905E-03 19.9998245 9.75371695E-09 1.99992326E-03 0.999984622 2.63678044E-06 2.32800275E-07 1.00012496E-03 1.54933063E-04 2.99124070E-03 9.99402907E-03 4.84176795E-04 8.29799380E-03 8.26089035E-06 6.19351681E-08 2.47517642E-06 2.99690850E-03 9.87878302E-04 5.02699731E-06 3.88547778E-02 3.99985677E-03 1.41557209E-07 9.99867320E-02 4.99994727E-04 1.99999996E-02 4.82649962E-11 5.43304202E-09 9.99993645E-04 9.99948708E-04 2.07369394E-05 1.74474013E-09 0.00000000 9.78428183E-09 3.36371195E-05 1.89280545E-04 4.30768887E-05 2.64209632E-08 4.84495688E-09 3.60736285E-09 3.50690357E-07 1.31196134E-13 2.62844413E-09 3.29802106E-07 1.05181384E-10 5.33944160E-07 4.04076809E-06 6.18198479E-04 1.41557209E-07 5.39749452E-13 3.05806880E-10 1.04458763E-06 1.60367904E-07 1.69180589E-06 2.59669008E-07 8.42617265E-09 2.66859335E-08 4.09712975E-09 7.92630526E-05 1.00000000 1.99133035E-04 2.33439103E-04 3.16020851E-05 2.25742668E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.19251318E-02 2.95464881E-02 0.737417996 3.94662246E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 464.000397 1.95266437E-02 1.15413068E-05 5.76699041E-02 1.51138863E-07 1.07266260E-06 2.00795452E-03 1.00001926E-03 1.73502282E-04 8.05129646E-04 1.18004689E-04 5.16346554E-05 1.51506914E-02 5.03143156E-03 1.19355868E-03 4.18096362E-03 19.9998226 9.98695082E-09 1.99992256E-03 0.999984503 2.66105144E-06 2.37547880E-07 1.00012973E-03 1.57379545E-04 2.99113290E-03 9.99396015E-03 4.83945187E-04 8.29797704E-03 8.28887187E-06 6.19773104E-08 2.49645041E-06 2.99688196E-03 9.87747102E-04 5.07900313E-06 3.88387293E-02 3.99985537E-03 1.42772180E-07 9.99866202E-02 4.99994669E-04 1.99999996E-02 5.04254520E-11 5.47783996E-09 9.99993645E-04 9.99948243E-04 2.02411957E-05 1.74407122E-09 0.00000000 9.74641257E-09 3.37474485E-05 1.94083535E-04 4.41969132E-05 2.68268501E-08 4.86150187E-09 3.59695496E-09 3.50695814E-07 1.32154772E-13 2.61829469E-09 3.35811819E-07 1.05555301E-10 5.43671149E-07 4.07521884E-06 6.26973109E-04 1.42772180E-07 5.37183254E-13 3.14723969E-10 1.04585251E-06 1.66264613E-07 1.69385385E-06 2.69215633E-07 8.57972626E-09 2.67182507E-08 4.24778568E-09 7.97588000E-05 1.00000000 1.99133850E-04 2.33442348E-04 3.16001824E-05 2.27182798E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.19443879E-02 2.95559634E-02 0.737599790 3.97301950E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 465.600403 1.95237342E-02 1.02042322E-05 5.76548129E-02 1.51167285E-07 1.07336155E-06 2.00802484E-03 1.00001751E-03 1.74309927E-04 8.05249671E-04 1.18905133E-04 5.39372013E-05 1.51526965E-02 5.03173051E-03 1.19614019E-03 4.22735373E-03 19.9998207 1.02234354E-08 1.99992186E-03 0.999984384 2.68523536E-06 2.42308914E-07 1.00013462E-03 1.59823874E-04 2.99102510E-03 9.99389123E-03 4.83713782E-04 8.29796027E-03 8.31675152E-06 6.20185432E-08 2.51765300E-06 2.99685542E-03 9.87616251E-04 5.13088980E-06 3.88226956E-02 3.99985397E-03 1.43983044E-07 9.99865085E-02 4.99994610E-04 1.99999996E-02 5.26503667E-11 5.52244828E-09 9.99993645E-04 9.99947777E-04 1.97567679E-05 1.74340564E-09 0.00000000 9.71166525E-09 3.38485406E-05 1.98882641E-04 4.53169305E-05 2.72411356E-08 4.87671814E-09 3.58756647E-09 3.50698485E-07 1.33145231E-13 2.60897481E-09 3.41780208E-07 1.05927843E-10 5.53331176E-07 4.10954863E-06 6.35739882E-04 1.43983044E-07 5.34816766E-13 3.23706950E-10 1.04699814E-06 1.72277282E-07 1.69570865E-06 2.78949955E-07 8.73222383E-09 2.67475215E-08 4.40140502E-09 8.02432260E-05 1.00000000 1.99134956E-04 2.33445739E-04 3.15987054E-05 2.28622084E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.19626045E-02 2.95649227E-02 0.737778246 3.99934277E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 467.200409 1.95207503E-02 9.01452404E-06 5.76397851E-02 1.51192438E-07 1.07398591E-06 2.00809492E-03 1.00001576E-03 1.75062101E-04 8.05370393E-04 1.19790551E-04 5.63054455E-05 1.51546989E-02 5.03202947E-03 1.19871867E-03 4.27370612E-03 19.9998188 1.04635376E-08 1.99992117E-03 0.999984264 2.70932969E-06 2.47083449E-07 1.00013963E-03 1.62265758E-04 2.99091754E-03 9.99382231E-03 4.83482581E-04 8.29794351E-03 8.34452658E-06 6.20588807E-08 2.53878306E-06 2.99682911E-03 9.87485633E-04 5.18265415E-06 3.88066769E-02 3.99985258E-03 1.45189716E-07 9.99863967E-02 4.99994552E-04 1.99999996E-02 5.49476055E-11 5.56686164E-09 9.99993645E-04 9.99947311E-04 1.92846746E-05 1.74274351E-09 0.00000000 9.68008962E-09 3.39393991E-05 2.03672709E-04 4.64358745E-05 2.76645125E-08 4.89046315E-09 3.57921670E-09 3.50698372E-07 1.34166617E-13 2.60050026E-09 3.47697721E-07 1.06298997E-10 5.62908724E-07 4.14375472E-06 6.44498155E-04 1.45189716E-07 5.32650367E-13 3.32754158E-10 1.04802166E-06 1.78417579E-07 1.69736575E-06 2.88890845E-07 8.88342200E-09 2.67736713E-08 4.55828530E-09 8.07153192E-05 1.00000000 1.99135742E-04 2.33448984E-04 3.15967845E-05 2.30060235E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.19817935E-02 2.95743719E-02 0.737958848 4.02573235E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 468.800415 1.95177104E-02 7.94475636E-06 5.76248094E-02 1.51214905E-07 1.07454821E-06 2.00816477E-03 1.00001402E-03 1.75765032E-04 8.05491640E-04 1.20663572E-04 5.87317627E-05 1.51566993E-02 5.03232842E-03 1.20129460E-03 4.32002498E-03 19.9998169 1.07068425E-08 1.99992047E-03 0.999984145 2.73335036E-06 2.51868784E-07 1.00014464E-03 1.64705431E-04 2.99080997E-03 9.99375340E-03 4.83251584E-04 8.29792675E-03 8.37221614E-06 6.20985148E-08 2.55985378E-06 2.99680280E-03 9.87355248E-04 5.23431754E-06 3.87906730E-02 3.99985118E-03 1.46392964E-07 9.99862850E-02 4.99994494E-04 1.99999996E-02 5.73092997E-11 5.61111468E-09 9.99993645E-04 9.99946846E-04 1.88233207E-05 1.74208414E-09 0.00000000 9.65114033E-09 3.40212609E-05 2.08450845E-04 4.75529705E-05 2.80957249E-08 4.90291363E-09 3.57172758E-09 3.50695984E-07 1.35215556E-13 2.59272537E-09 3.53566065E-07 1.06668993E-10 5.72406634E-07 4.17785986E-06 6.53249095E-04 1.46392964E-07 5.30654297E-13 3.41849715E-10 1.04894536E-06 1.84669702E-07 1.69886130E-06 2.99012754E-07 9.03336428E-09 2.67972720E-08 4.71802286E-09 8.11766731E-05 1.00000000 1.99136819E-04 2.33452389E-04 3.15952893E-05 2.31497557E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.19999506E-02 2.95833051E-02 0.738136172 4.05204706E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 470.400421 1.95146203E-02 6.99690963E-06 5.76098859E-02 1.51234687E-07 1.07504593E-06 2.00823438E-03 1.00001227E-03 1.76412956E-04 8.05613468E-04 1.21523735E-04 6.12226431E-05 1.51586980E-02 5.03262784E-03 1.20386772E-03 4.36630705E-03 19.9998150 1.09537170E-08 1.99991977E-03 0.999984026 2.75729485E-06 2.56664777E-07 1.00014976E-03 1.67142614E-04 2.99070263E-03 9.99368448E-03 4.83020791E-04 8.29790998E-03 8.39981840E-06 6.21374596E-08 2.58086402E-06 2.99677672E-03 9.87225096E-04 5.28587680E-06 3.87746841E-02 3.99984978E-03 1.47592729E-07 9.99861732E-02 4.99994436E-04 1.99999996E-02 5.97433283E-11 5.65520342E-09 9.99993645E-04 9.99946380E-04 1.83737156E-05 1.74142767E-09 0.00000000 9.62485736E-09 3.40931583E-05 2.13211402E-04 4.86670360E-05 2.85354442E-08 4.91393060E-09 3.56511443E-09 3.50691380E-07 1.36291247E-13 2.58566213E-09 3.59375434E-07 1.07037823E-10 5.81808933E-07 4.21186132E-06 6.61992002E-04 1.47592729E-07 5.28828934E-13 3.50990487E-10 1.04976709E-06 1.91044947E-07 1.70019177E-06 3.09333927E-07 9.18180021E-09 2.68182685E-08 4.88090590E-09 8.16262764E-05 1.00000000 1.99137576E-04 2.33455634E-04 3.15933503E-05 2.32933744E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.20190836E-02 2.95927338E-02 0.738315821 4.07842882E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 472.000427 1.95114929E-02 6.14781493E-06 5.75950071E-02 1.51252308E-07 1.07549010E-06 2.00830400E-03 1.00001052E-03 1.77012218E-04 8.05735704E-04 1.22373342E-04 6.37704361E-05 1.51606947E-02 5.03292726E-03 1.20643852E-03 4.41255653E-03 19.9998131 1.12037473E-08 1.99991907E-03 0.999983907 2.78117682E-06 2.61469069E-07 1.00015500E-03 1.69577557E-04 2.99059530E-03 9.99361556E-03 4.82790172E-04 8.29789322E-03 8.42734971E-06 6.21758716E-08 2.60182492E-06 2.99675064E-03 9.87095060E-04 5.33734965E-06 3.87587100E-02 3.99984838E-03 1.48789653E-07 9.99860615E-02 4.99994378E-04 1.99999996E-02 6.22416355E-11 5.69915670E-09 9.99993645E-04 9.99945914E-04 1.79343388E-05 1.74077353E-09 0.00000000 9.60076374E-09 3.41563209E-05 2.17952896E-04 4.97776200E-05 2.89824911E-08 4.92368990E-09 3.55922092E-09 3.50685042E-07 1.37390425E-13 2.57918353E-09 3.65129182E-07 1.07405689E-10 5.91121136E-07 4.24577775E-06 6.70727983E-04 1.48789653E-07 5.27147607E-13 3.60163288E-10 1.05050606E-06 1.97527768E-07 1.70138799E-06 3.19829212E-07 9.32881505E-09 2.68371476E-08 5.04653785E-09 8.20656569E-05 1.00000000 1.99138638E-04 2.33459039E-04 3.15918442E-05 2.34369101E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.20371848E-02 2.96016447E-02 0.738492191 4.10473570E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 473.600433 1.95083339E-02 5.39862094E-06 5.75801730E-02 1.51267756E-07 1.07587880E-06 2.00837338E-03 1.00000878E-03 1.77557333E-04 8.05858348E-04 1.23212070E-04 6.63813189E-05 1.51626896E-02 5.03322715E-03 1.20900676E-03 4.45877016E-03 19.9998112 1.14572902E-08 1.99991837E-03 0.999983788 2.80499398E-06 2.66281262E-07 1.00016035E-03 1.72009983E-04 2.99048820E-03 9.99354664E-03 4.82559757E-04 8.29787645E-03 8.45480736E-06 6.22137648E-08 2.62273556E-06 2.99672456E-03 9.86965257E-04 5.38873337E-06 3.87427509E-02 3.99984699E-03 1.49983663E-07 9.99859497E-02 4.99994319E-04 1.99999996E-02 6.48118573E-11 5.74297054E-09 9.99993645E-04 9.99945449E-04 1.75061523E-05 1.74012149E-09 0.00000000 9.57888435E-09 3.42098465E-05 2.22669361E-04 5.08834673E-05 2.94374924E-08 4.93206098E-09 3.55405683E-09 3.50677027E-07 1.38512303E-13 2.57329669E-09 3.70817531E-07 1.07772589E-10 6.00327382E-07 4.27960731E-06 6.79456338E-04 1.49983663E-07 5.25610100E-13 3.69363540E-10 1.05116078E-06 2.04128668E-07 1.70244789E-06 3.30515604E-07 9.47415923E-09 2.68538756E-08 5.21518650E-09 8.24938470E-05 1.00000000 1.99139380E-04 2.33462299E-04 3.15898942E-05 2.35803338E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.20562695E-02 2.96110529E-02 0.738670945 4.13111076E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 475.200439 1.95051525E-02 4.72987040E-06 5.75653724E-02 1.51281455E-07 1.07622157E-06 2.00844253E-03 1.00000703E-03 1.78054761E-04 8.05981341E-04 1.24041937E-04 6.90476008E-05 1.51646826E-02 5.03352704E-03 1.21157279E-03 4.50495211E-03 19.9998093 1.17139294E-08 1.99991767E-03 0.999983668 2.82875772E-06 2.71099367E-07 1.00016582E-03 1.74440152E-04 2.99038109E-03 9.99347772E-03 4.82329517E-04 8.29785969E-03 8.48220498E-06 6.22512530E-08 2.64360528E-06 2.99669849E-03 9.86835686E-04 5.44004342E-06 3.87268029E-02 3.99984559E-03 1.51175300E-07 9.99858379E-02 4.99994261E-04 1.99999996E-02 6.74457434E-11 5.78666981E-09 9.99993645E-04 9.99944983E-04 1.70876938E-05 1.73947146E-09 0.00000000 9.55880441E-09 3.42549611E-05 2.27360666E-04 5.19844325E-05 2.98993363E-08 4.93922014E-09 3.54948648E-09 3.50667705E-07 1.39653832E-13 2.56789101E-09 3.76445371E-07 1.08138672E-10 6.09435574E-07 4.31336548E-06 6.88178116E-04 1.51175300E-07 5.24192777E-13 3.78580750E-10 1.05174752E-06 2.10832326E-07 1.70339774E-06 3.41368320E-07 9.61795799E-09 2.68688645E-08 5.38646105E-09 8.29123092E-05 1.00000000 1.99140413E-04 2.33465704E-04 3.15883735E-05 2.37236745E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.20743260E-02 2.96199471E-02 0.738846540 4.15740982E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 476.800446 1.95019562E-02 4.14225178E-06 5.75506091E-02 1.51293406E-07 1.07651681E-06 2.00851168E-03 1.00000529E-03 1.78499249E-04 8.06104566E-04 1.24862694E-04 7.17752264E-05 1.51666738E-02 5.03382739E-03 1.21413649E-03 4.55109868E-03 19.9998074 1.19740156E-08 1.99991697E-03 0.999983549 2.85246597E-06 2.75922702E-07 1.00017141E-03 1.76867761E-04 2.99027422E-03 9.99340974E-03 4.82099480E-04 8.29784293E-03 8.50953984E-06 6.22883576E-08 2.66443294E-06 2.99667264E-03 9.86706233E-04 5.49127708E-06 3.87108698E-02 3.99984419E-03 1.52364507E-07 9.99857262E-02 4.99994203E-04 1.99999996E-02 7.01507741E-11 5.83025095E-09 9.99993645E-04 9.99944517E-04 1.66798982E-05 1.73882331E-09 0.00000000 9.54053636E-09 3.42908024E-05 2.32020611E-04 5.30792095E-05 3.03686178E-08 4.94504349E-09 3.54551521E-09 3.50657160E-07 1.40814213E-13 2.56297028E-09 3.82003037E-07 1.08503935E-10 6.18430079E-07 4.34704998E-06 6.96892617E-04 1.52364507E-07 5.22895149E-13 3.87809340E-10 1.05226536E-06 2.17648662E-07 1.70423607E-06 3.52403390E-07 9.75996350E-09 2.68820948E-08 5.56061464E-09 8.33201047E-05 1.00000000 1.99141141E-04 2.33468963E-04 3.15864090E-05 2.38669032E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.20933697E-02 2.96293404E-02 0.739024580 4.18377854E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 478.400452 1.94987506E-02 3.61952061E-06 5.75358756E-02 1.51304008E-07 1.07677306E-06 2.00858060E-03 1.00000354E-03 1.78897346E-04 8.06228025E-04 1.25676073E-04 7.45564539E-05 1.51686631E-02 5.03412820E-03 1.21669809E-03 4.59721405E-03 19.9998055 1.22371295E-08 1.99991628E-03 0.999983430 2.87612829E-06 2.80749646E-07 1.00017700E-03 1.79293100E-04 2.99016736E-03 9.99334175E-03 4.81869618E-04 8.29782616E-03 8.53682377E-06 6.23251708E-08 2.68522649E-06 2.99664680E-03 9.86576895E-04 5.54244707E-06 3.86949480E-02 3.99984280E-03 1.53551724E-07 9.99856144E-02 4.99994145E-04 1.99999996E-02 7.29184768E-11 5.87373528E-09 9.99993645E-04 9.99944052E-04 1.62813485E-05 1.73817671E-09 0.00000000 9.52372847E-09 3.43185893E-05 2.36650347E-04 5.41679365E-05 3.08442907E-08 4.94970553E-09 3.54202734E-09 3.50645649E-07 1.41990667E-13 2.55844079E-09 3.87496812E-07 1.08868498E-10 6.27321072E-07 4.38067445E-06 7.05600833E-04 1.53551724E-07 5.21696456E-13 3.97041455E-10 1.05272795E-06 2.24562584E-07 1.70498504E-06 3.63596371E-07 9.90033744E-09 2.68939147E-08 5.73726133E-09 8.37186526E-05 1.00000000 1.99142160E-04 2.33472369E-04 3.15848811E-05 2.40100489E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.21113852E-02 2.96382178E-02 0.739199519 4.21007015E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 480.000458 1.94955412E-02 3.16213527E-06 5.75211719E-02 1.51313230E-07 1.07698895E-06 2.00864952E-03 1.00000179E-03 1.79243914E-04 8.06351600E-04 1.26481900E-04 7.73970824E-05 1.51706506E-02 5.03442949E-03 1.21925748E-03 4.64329449E-03 19.9998035 1.25036195E-08 1.99991558E-03 0.999983311 2.89974287E-06 2.85579318E-07 1.00018270E-03 1.81715877E-04 2.99006049E-03 9.99327376E-03 4.81639931E-04 8.29780940E-03 8.56405495E-06 6.23617069E-08 2.70598480E-06 2.99662095E-03 9.86447791E-04 5.59355021E-06 3.86790410E-02 3.99984140E-03 1.54736910E-07 9.99855027E-02 4.99994087E-04 1.99999996E-02 7.57562624E-11 5.91711879E-09 9.99993645E-04 9.99943586E-04 1.58929688E-05 1.73753156E-09 0.00000000 9.50838785E-09 3.43374995E-05 2.41243513E-04 5.52492675E-05 3.13269339E-08 4.95308772E-09 3.53902618E-09 3.50633314E-07 1.43182422E-13 2.55430455E-09 3.92917144E-07 1.09232359E-10 6.36093091E-07 4.41423617E-06 7.14302063E-04 1.54736910E-07 5.20596207E-13 4.06270712E-10 1.05313484E-06 2.31583542E-07 1.70564363E-06 3.74962610E-07 1.00388347E-08 2.69043099E-08 5.91664318E-09 8.41070359E-05 1.00000000 1.99142873E-04 2.33475628E-04 3.15829093E-05 2.41530826E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.21303953E-02 2.96475962E-02 0.739376903 4.23643254E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 481.600464 1.94923338E-02 2.75658954E-06 5.75064942E-02 1.51321387E-07 1.07717199E-06 2.00871821E-03 1.00000005E-03 1.79545648E-04 8.06475291E-04 1.27281644E-04 8.02893119E-05 1.51726361E-02 5.03473124E-03 1.22181489E-03 4.68934467E-03 19.9998016 1.27730608E-08 1.99991488E-03 0.999983191 2.92331765E-06 2.90410355E-07 1.00018852E-03 1.84136385E-04 2.98995385E-03 9.99320578E-03 4.81410418E-04 8.29779264E-03 8.59124248E-06 6.23980370E-08 2.72671423E-06 2.99659511E-03 9.86318802E-04 5.64459788E-06 3.86631452E-02 3.99984000E-03 1.55920418E-07 9.99853909E-02 4.99994028E-04 1.99999996E-02 7.86554225E-11 5.96041971E-09 9.99993645E-04 9.99943120E-04 1.55133748E-05 1.73688763E-09 0.00000000 9.49421519E-09 3.43487445E-05 2.45802454E-04 5.63236208E-05 3.18155458E-08 4.95536323E-09 3.53641338E-09 3.50620383E-07 1.44387052E-13 2.55048138E-09 3.98271567E-07 1.09595638E-10 6.44758359E-07 4.44774651E-06 7.22997182E-04 1.55920418E-07 5.19576407E-13 4.15491752E-10 1.05349727E-06 2.38696657E-07 1.70623048E-06 3.86477950E-07 1.01756488E-08 2.69135718E-08 6.09837958E-09 8.44866299E-05 1.00000000 1.99143891E-04 2.33479033E-04 3.15813741E-05 2.42960348E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.21483773E-02 2.96564605E-02 0.739551187 4.26271707E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 483.200470 1.94891337E-02 2.40311465E-06 5.74918427E-02 1.51328507E-07 1.07732114E-06 2.00878689E-03 9.99998418E-04 1.79797644E-04 8.06598982E-04 1.28075189E-04 8.32386722E-05 1.51746208E-02 5.03503345E-03 1.22437021E-03 4.73536039E-03 19.9997997 1.30457947E-08 1.99991418E-03 0.999983072 2.94685083E-06 2.95241733E-07 1.00019446E-03 1.86554316E-04 2.98984721E-03 9.99313779E-03 4.81181109E-04 8.29777587E-03 8.61838453E-06 6.24341752E-08 2.74741387E-06 2.99656927E-03 9.86189931E-04 5.69558688E-06 3.86472605E-02 3.99983861E-03 1.57102193E-07 9.99852791E-02 4.99993970E-04 1.99999996E-02 8.16231527E-11 6.00363448E-09 9.99993645E-04 9.99942655E-04 1.51434606E-05 1.73624504E-09 0.00000000 9.48121137E-09 3.43515458E-05 2.50320765E-04 5.73896323E-05 3.23106875E-08 4.95642061E-09 3.53419027E-09 3.50606939E-07 1.45603798E-13 2.54697219E-09 4.03550871E-07 1.09958306E-10 6.53301925E-07 4.48120318E-06 7.31685548E-04 1.57102193E-07 5.18636458E-13 4.24697666E-10 1.05381503E-06 2.45910741E-07 1.70674502E-06 3.98156743E-07 1.03105435E-08 2.69216915E-08 6.28269659E-09 8.48565469E-05 1.00000000 1.99144590E-04 2.33482278E-04 3.15793950E-05 2.44388735E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.21673577E-02 2.96658259E-02 0.739728034 4.28907350E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 484.800476 1.94859430E-02 2.09070186E-06 5.74772134E-02 1.51334831E-07 1.07744279E-06 2.00885534E-03 9.99996788E-04 1.80006537E-04 8.06722674E-04 1.28863772E-04 8.62374727E-05 1.51766036E-02 5.03533613E-03 1.22692366E-03 4.78134584E-03 19.9997978 1.33213991E-08 1.99991348E-03 0.999982953 2.97034944E-06 3.00072429E-07 1.00020040E-03 1.88969978E-04 2.98974058E-03 9.99306981E-03 4.80951974E-04 8.29775911E-03 8.64548929E-06 6.24701784E-08 2.76808919E-06 2.99654342E-03 9.86061175E-04 5.74652677E-06 3.86313871E-02 3.99983721E-03 1.58282546E-07 9.99851674E-02 4.99993912E-04 1.99999996E-02 8.46507031E-11 6.04677775E-09 9.99993645E-04 9.99942189E-04 1.47818937E-05 1.73560366E-09 0.00000000 9.46913126E-09 3.43470856E-05 2.54801766E-04 5.84479458E-05 3.28114176E-08 4.95642949E-09 3.53227536E-09 3.50593126E-07 1.46830586E-13 2.54371058E-09 4.08763469E-07 1.10320475E-10 6.61737431E-07 4.51461574E-06 7.40368036E-04 1.58282546E-07 5.17761073E-13 4.33885483E-10 1.05409754E-06 2.53211425E-07 1.70720239E-06 4.09975627E-07 1.04437348E-08 2.69289089E-08 6.46922560E-09 8.52181111E-05 1.00000000 1.99145594E-04 2.33485684E-04 3.15778489E-05 2.45816336E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.21853136E-02 2.96746753E-02 0.739901841 4.31535095E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 486.400482 1.94827653E-02 1.81955886E-06 5.74626066E-02 1.51340373E-07 1.07753601E-06 2.00892380E-03 9.99995158E-04 1.80167495E-04 8.06846248E-04 1.29647276E-04 8.92911703E-05 1.51785845E-02 5.03563927E-03 1.22947514E-03 4.82729729E-03 19.9997959 1.36002187E-08 1.99991278E-03 0.999982834 2.99381099E-06 3.04901164E-07 1.00020645E-03 1.91383064E-04 2.98963394E-03 9.99300182E-03 4.80723014E-04 8.29774234E-03 8.67255494E-06 6.25060537E-08 2.78873881E-06 2.99651758E-03 9.85932536E-04 5.79741436E-06 3.86155285E-02 3.99983581E-03 1.59461408E-07 9.99850556E-02 4.99993854E-04 1.99999996E-02 8.77452833E-11 6.08984596E-09 9.99993645E-04 9.99941723E-04 1.44295727E-05 1.73496328E-09 0.00000000 9.45797396E-09 3.43346073E-05 2.59238936E-04 5.94971752E-05 3.33182975E-08 4.95528063E-09 3.53066976E-09 3.50579057E-07 1.48066672E-13 2.54069721E-09 4.13900295E-07 1.10682123E-10 6.70050213E-07 4.54798146E-06 7.49043946E-04 1.59461408E-07 5.16949927E-13 4.43047793E-10 1.05434447E-06 2.60607237E-07 1.70760222E-06 4.21948499E-07 1.05749907E-08 2.69352185E-08 6.65818600E-09 8.55704347E-05 1.00000000 1.99146292E-04 2.33488929E-04 3.15758662E-05 2.47242802E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.22042641E-02 2.96840295E-02 0.740078151 4.34170179E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 488.000488 1.94796044E-02 1.58065666E-06 5.74480183E-02 1.51345304E-07 1.07760638E-06 2.00899225E-03 9.99993528E-04 1.80287228E-04 8.06969707E-04 1.30426764E-04 9.23920379E-05 1.51805645E-02 5.03594289E-03 1.23202486E-03 4.87321895E-03 19.9997940 1.38818246E-08 1.99991209E-03 0.999982715 3.01724208E-06 3.09727255E-07 1.00021262E-03 1.93793894E-04 2.98952754E-03 9.99293383E-03 4.80494229E-04 8.29772558E-03 8.69958785E-06 6.25418437E-08 2.80936752E-06 2.99649197E-03 9.85804014E-04 5.84825830E-06 3.85996811E-02 3.99983441E-03 1.60639047E-07 9.99849439E-02 4.99993796E-04 1.99999996E-02 9.08979350E-11 6.13285245E-09 9.99993645E-04 9.99941258E-04 1.40851862E-05 1.73432368E-09 0.00000000 9.44753609E-09 3.43152824E-05 2.63636553E-04 6.05381829E-05 3.38304211E-08 4.95314145E-09 3.52930596E-09 3.50564932E-07 1.49310374E-13 2.53787724E-09 4.18970700E-07 1.11043334E-10 6.78255390E-07 4.58130853E-06 7.57714151E-04 1.60639047E-07 5.16190064E-13 4.52183790E-10 1.05456354E-06 2.68084023E-07 1.70795693E-06 4.34052396E-07 1.07045492E-08 2.69408176E-08 6.84921542E-09 8.59148204E-05 1.00000000 1.99147282E-04 2.33492334E-04 3.15743164E-05 2.48668453E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.22221939E-02 2.96928678E-02 0.740251482 4.36797254E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 489.600494 1.94764640E-02 1.37405380E-06 5.74334487E-02 1.51349667E-07 1.07765334E-06 2.00906047E-03 9.99991898E-04 1.80361196E-04 8.07092991E-04 1.31202149E-04 9.55452051E-05 1.51825426E-02 5.03624696E-03 1.23457261E-03 4.91910707E-03 19.9997921 1.41665506E-08 1.99991139E-03 0.999982595 3.04064019E-06 3.14549254E-07 1.00021891E-03 1.96202149E-04 2.98942113E-03 9.99286585E-03 4.80265619E-04 8.29770882E-03 8.72658529E-06 6.25775698E-08 2.82997416E-06 2.99646636E-03 9.85675491E-04 5.89905449E-06 3.85838449E-02 3.99983302E-03 1.61815393E-07 9.99848321E-02 4.99993737E-04 1.99999996E-02 9.41155764E-11 6.17579277E-09 9.99993645E-04 9.99940792E-04 1.37495945E-05 1.73368497E-09 0.00000000 9.43781586E-09 3.42884050E-05 2.67988245E-04 6.15696044E-05 3.43483322E-08 4.94991159E-09 3.52818352E-09 3.50550749E-07 1.50560947E-13 2.53525023E-09 4.23966100E-07 1.11404087E-10 6.86339035E-07 4.61459422E-06 7.66377896E-04 1.61815393E-07 5.15480941E-13 4.61285926E-10 1.05475476E-06 2.75649683E-07 1.70826650E-06 4.46300078E-07 1.08321920E-08 2.69457026E-08 7.04251502E-09 8.62504094E-05 1.00000000 1.99147966E-04 2.33495579E-04 3.15723228E-05 2.50092999E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.22411221E-02 2.97022127E-02 0.740427375 4.39431742E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 491.200500 1.94733422E-02 1.19261369E-06 5.74188940E-02 1.51353618E-07 1.07768142E-06 2.00912869E-03 9.99990269E-04 1.80395829E-04 8.07216042E-04 1.31974288E-04 9.87433014E-05 1.51845198E-02 5.03655151E-03 1.23711862E-03 4.96496586E-03 19.9997902 1.44539820E-08 1.99991069E-03 0.999982476 3.06401057E-06 3.19366791E-07 1.00022519E-03 1.98608162E-04 2.98931473E-03 9.99279786E-03 4.80037183E-04 8.29769205E-03 8.75355363E-06 6.26132461E-08 2.85056240E-06 2.99644074E-03 9.85547085E-04 5.94981111E-06 3.85680199E-02 3.99983162E-03 1.62990659E-07 9.99847203E-02 4.99993679E-04 1.99999996E-02 9.73894992E-11 6.21867846E-09 9.99993645E-04 9.99940326E-04 1.34215616E-05 1.73304693E-09 0.00000000 9.42864808E-09 3.42550775E-05 2.72298843E-04 6.25924295E-05 3.48711886E-08 4.94574826E-09 3.52724849E-09 3.50536624E-07 1.51817049E-13 2.53277221E-09 4.28896044E-07 1.11764445E-10 6.94316668E-07 4.64784534E-06 7.75036053E-04 1.62990659E-07 5.14812097E-13 4.70355144E-10 1.05492416E-06 2.83290888E-07 1.70854071E-06 4.58670030E-07 1.09581624E-08 2.69500315E-08 7.23774596E-09 8.65784459E-05 1.00000000 1.99148955E-04 2.33498984E-04 3.15707694E-05 2.51516729E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.22590221E-02 2.97110397E-02 0.740600288 4.42058183E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 492.800507 1.94702446E-02 1.03629441E-06 5.74043579E-02 1.51357142E-07 1.07769029E-06 2.00919691E-03 9.99988639E-04 1.80386880E-04 8.07338802E-04 1.32743124E-04 1.01991143E-04 1.51864951E-02 5.03685651E-03 1.23966276E-03 5.01079112E-03 19.9997883 1.47444421E-08 1.99990999E-03 0.999982357 3.08735116E-06 3.24178188E-07 1.00023160E-03 2.01011615E-04 2.98920833E-03 9.99272987E-03 4.79808921E-04 8.29767529E-03 8.78049104E-06 6.26488941E-08 2.87113107E-06 2.99641513E-03 9.85418796E-04 6.00052408E-06 3.85522060E-02 3.99983022E-03 1.64164774E-07 9.99846086E-02 4.99993621E-04 1.99999996E-02 1.00726337E-10 6.26150509E-09 9.99993645E-04 9.99939861E-04 1.31019133E-05 1.73240966E-09 0.00000000 9.42003098E-09 3.42146559E-05 2.76562088E-04 6.36053301E-05 3.53995162E-08 4.94055907E-09 3.52650043E-09 3.50522640E-07 1.53077949E-13 2.53044208E-09 4.33752490E-07 1.12124400E-10 7.02175271E-07 4.68105964E-06 7.83687865E-04 1.64164774E-07 5.14182935E-13 4.79383755E-10 1.05507172E-06 2.91014885E-07 1.70877968E-06 4.71173934E-07 1.10822560E-08 2.69538027E-08 7.43509210E-09 8.68980933E-05 1.00000000 1.99149639E-04 2.33502229E-04 3.15687721E-05 2.52939353E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.22779280E-02 2.97203753E-02 0.740775764 4.44692075E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 494.400513 1.94671713E-02 8.99435577E-07 5.73898368E-02 1.51360396E-07 1.07768392E-06 2.00926489E-03 9.99987009E-04 1.80340590E-04 8.07461212E-04 1.33509340E-04 1.05281579E-04 1.51884686E-02 5.03716199E-03 1.24220527E-03 5.05658705E-03 19.9997864 1.50375232E-08 1.99990929E-03 0.999982238 3.11066651E-06 3.28983390E-07 1.00023812E-03 2.03412827E-04 2.98910215E-03 9.99266189E-03 4.79580805E-04 8.29765853E-03 8.80740117E-06 6.26845278E-08 2.89168338E-06 2.99638952E-03 9.85290622E-04 6.05120022E-06 3.85364033E-02 3.99982883E-03 1.65337937E-07 9.99844968E-02 4.99993563E-04 1.99999996E-02 1.04117506E-10 6.30428287E-09 9.99993645E-04 9.99939395E-04 1.27894618E-05 1.73177306E-09 0.00000000 9.41183398E-09 3.41681916E-05 2.80783337E-04 6.46094122E-05 3.59325227E-08 4.93449459E-09 3.52589580E-09 3.50508856E-07 1.54342671E-13 2.52822518E-09 4.38545271E-07 1.12484008E-10 7.09930703E-07 4.71424255E-06 7.92334205E-04 1.65337937E-07 5.13585051E-13 4.88374285E-10 1.05520246E-06 2.98809056E-07 1.70899125E-06 4.83791382E-07 1.12047225E-08 2.69571423E-08 7.63423103E-09 8.72105447E-05 1.00000000 1.99150614E-04 2.33505620E-04 3.15672150E-05 2.54361163E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.22958094E-02 2.97291931E-02 0.740948260 4.47317883E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 496.000519 1.94641240E-02 7.81896517E-07 5.73753305E-02 1.51363395E-07 1.07766198E-06 2.00933288E-03 9.99985379E-04 1.80253104E-04 8.07583274E-04 1.34272908E-04 1.08618995E-04 1.51904412E-02 5.03746793E-03 1.24474592E-03 5.10234991E-03 19.9997845 1.53335300E-08 1.99990859E-03 0.999982119 3.13395435E-06 3.33780605E-07 1.00024475E-03 2.05811491E-04 2.98899598E-03 9.99259390E-03 4.79352893E-04 8.29764176E-03 8.83428311E-06 6.27201686E-08 2.91221795E-06 2.99636391E-03 9.85162565E-04 6.10183542E-06 3.85206118E-02 3.99982743E-03 1.66510063E-07 9.99843851E-02 4.99993504E-04 1.99999996E-02 1.07569176E-10 6.34700736E-09 9.99993645E-04 9.99938929E-04 1.24849794E-05 1.73113701E-09 0.00000000 9.40405087E-09 3.41151026E-05 2.84956681E-04 6.56034172E-05 3.64707020E-08 4.92747132E-09 3.52543306E-09 3.50495355E-07 1.55610442E-13 2.52611998E-09 4.43267055E-07 1.12843242E-10 7.17571140E-07 4.74739181E-06 8.00974318E-04 1.66510063E-07 5.13017742E-13 4.97319241E-10 1.05531637E-06 3.06679766E-07 1.70917565E-06 4.96532664E-07 1.13253753E-08 2.69600520E-08 7.83532617E-09 8.75150290E-05 1.00000000 1.99151284E-04 2.33508865E-04 3.15652142E-05 2.55781866E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.23146966E-02 2.97385193E-02 0.741123378 4.49951254E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 497.600525 1.94611028E-02 6.79278912E-07 5.73608354E-02 1.51366208E-07 1.07762776E-06 2.00940087E-03 9.99983749E-04 1.80130373E-04 8.07704928E-04 1.35034395E-04 1.11996596E-04 1.51924118E-02 5.03777433E-03 1.24728493E-03 5.14808344E-03 19.9997826 1.56320681E-08 1.99990789E-03 0.999981999 3.15721877E-06 3.38570032E-07 1.00025139E-03 2.08207930E-04 2.98888981E-03 9.99252591E-03 4.79125127E-04 8.29762500E-03 8.86114049E-06 6.27558165E-08 2.93273774E-06 2.99633830E-03 9.85034509E-04 6.15243607E-06 3.85048315E-02 3.99982603E-03 1.67681307E-07 9.99842733E-02 4.99993446E-04 1.99999996E-02 1.11073047E-10 6.38968700E-09 9.99993645E-04 9.99938464E-04 1.21873409E-05 1.73050163E-09 0.00000000 9.39658218E-09 3.40563784E-05 2.89087766E-04 6.65885236E-05 3.70133186E-08 4.91963181E-09 3.52507890E-09 3.50482168E-07 1.56880598E-13 2.52409937E-09 4.47927562E-07 1.13202177E-10 7.25112329E-07 4.78051197E-06 8.09608959E-04 1.67681307E-07 5.12474286E-13 5.06222342E-10 1.05541733E-06 3.14615249E-07 1.70933902E-06 5.09378765E-07 1.14444623E-08 2.69626295E-08 8.03807687E-09 8.78126666E-05 1.00000000 1.99152259E-04 2.33512255E-04 3.15636535E-05 2.57201755E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.23325519E-02 2.97473278E-02 0.741295516 4.52576391E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 499.200531 1.94581095E-02 5.91458956E-07 5.73463552E-02 1.51368866E-07 1.07758103E-06 2.00946885E-03 9.99982120E-04 1.79968716E-04 8.07826116E-04 1.35793758E-04 1.15418559E-04 1.51943816E-02 5.03808167E-03 1.24982209E-03 5.19378390E-03 19.9997807 1.59334395E-08 1.99990720E-03 0.999981880 3.18045750E-06 3.43349711E-07 1.00025814E-03 2.10601851E-04 2.98878364E-03 9.99245793E-03 4.78897535E-04 8.29760823E-03 8.88797149E-06 6.27914929E-08 2.95324116E-06 2.99631269E-03 9.84906568E-04 6.20299852E-06 3.84890623E-02 3.99982464E-03 1.68851599E-07 9.99841616E-02 4.99993388E-04 1.99999996E-02 1.14635114E-10 6.43231779E-09 9.99993645E-04 9.99937998E-04 1.18973030E-05 1.72986658E-09 0.00000000 9.38942080E-09 3.39914768E-05 2.93170742E-04 6.75635019E-05 3.75608593E-08 4.91089613E-09 3.52483132E-09 3.50469350E-07 1.58152395E-13 2.52216159E-09 4.52519885E-07 1.13560765E-10 7.32543072E-07 4.81360075E-06 8.18237488E-04 1.68851599E-07 5.11954194E-13 5.15076093E-10 1.05550532E-06 3.22621446E-07 1.70948147E-06 5.22339292E-07 1.15618084E-08 2.69648783E-08 8.24263413E-09 8.81027008E-05 1.00000000 1.99152928E-04 2.33515500E-04 3.15616489E-05 2.58620537E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.23514205E-02 2.97566447E-02 0.741470277 4.55209203E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 500.800537 1.94551423E-02 5.15002000E-07 5.73318861E-02 1.51371438E-07 1.07752453E-06 2.00953661E-03 9.99980490E-04 1.79773881E-04 8.07946839E-04 1.36551447E-04 1.18878343E-04 1.51963495E-02 5.03838947E-03 1.25235762E-03 5.23945550E-03 19.9997787 1.62372569E-08 1.99990650E-03 0.999981761 3.20367417E-06 3.48120096E-07 1.00026501E-03 2.12993560E-04 2.98867747E-03 9.99238994E-03 4.78670117E-04 8.29759147E-03 8.91477976E-06 6.28271977E-08 2.97373094E-06 2.99628708E-03 9.84778744E-04 6.25352777E-06 3.84733044E-02 3.99982324E-03 1.70021082E-07 9.99840498E-02 4.99993330E-04 1.99999996E-02 1.18247245E-10 6.47490683E-09 9.99993645E-04 9.99937532E-04 1.16137826E-05 1.72923209E-09 0.00000000 9.38249034E-09 3.39213366E-05 2.97211605E-04 6.85295963E-05 3.81126277E-08 4.90140106E-09 3.52466545E-09 3.50456901E-07 1.59425411E-13 2.52028642E-09 4.57053716E-07 1.13919076E-10 7.39879056E-07 4.84666270E-06 8.26860603E-04 1.70021082E-07 5.11452100E-13 5.23885324E-10 1.05558343E-06 3.30687271E-07 1.70960789E-06 5.35396282E-07 1.16776597E-08 2.69668732E-08 8.44871462E-09 8.83862231E-05 1.00000000 1.99153903E-04 2.33518891E-04 3.15600846E-05 2.60038534E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.23692572E-02 2.97654457E-02 0.741642058 4.57833670E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 502.400543 1.94522049E-02 4.49788558E-07 5.73174320E-02 1.51373925E-07 1.07745825E-06 2.00960436E-03 9.99978860E-04 1.79542418E-04 8.08066980E-04 1.37307434E-04 1.22379861E-04 1.51983164E-02 5.03869774E-03 1.25489128E-03 5.28509403E-03 19.9997768 1.65438117E-08 1.99990580E-03 0.999981642 3.22686651E-06 3.52879084E-07 1.00027188E-03 2.15382752E-04 2.98857153E-03 9.99232195E-03 4.78442875E-04 8.29757471E-03 8.94156256E-06 6.28629451E-08 2.99420549E-06 2.99626146E-03 9.84650920E-04 6.30402019E-06 3.84575576E-02 3.99982184E-03 1.71189669E-07 9.99839380E-02 4.99993272E-04 1.99999996E-02 1.21915200E-10 6.51745014E-09 9.99993645E-04 9.99937067E-04 1.13375118E-05 1.72859804E-09 0.00000000 9.37578370E-09 3.38454520E-05 3.01204651E-04 6.94856062E-05 3.86691035E-08 4.89107244E-09 3.52457885E-09 3.50444935E-07 1.60698928E-13 2.51847165E-09 4.61522632E-07 1.14277081E-10 7.47109880E-07 4.87969464E-06 8.35477607E-04 1.71189669E-07 5.10967516E-13 5.32642652E-10 1.05565164E-06 3.38818126E-07 1.70971839E-06 5.48558489E-07 1.17918528E-08 2.69686176E-08 8.65645688E-09 8.86624912E-05 1.00000000 1.99154558E-04 2.33522136E-04 3.15580764E-05 2.61455396E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.23881072E-02 2.97747552E-02 0.741816461 4.60465960E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 504.000549 1.94492936E-02 3.93137668E-07 5.73029853E-02 1.51376398E-07 1.07738435E-06 2.00967211E-03 9.99977230E-04 1.79279945E-04 8.08186596E-04 1.38062082E-04 1.25916733E-04 1.52002815E-02 5.03900647E-03 1.25742343E-03 5.33070369E-03 19.9997749 1.68527183E-08 1.99990510E-03 0.999981523 3.25003816E-06 3.57627471E-07 1.00027886E-03 2.17769761E-04 2.98846560E-03 9.99225397E-03 4.78215778E-04 8.29755794E-03 8.96832353E-06 6.28987351E-08 3.01466730E-06 2.99623609E-03 9.84523213E-04 6.35448077E-06 3.84418182E-02 3.99982044E-03 1.72357502E-07 9.99838263E-02 4.99993213E-04 1.99999996E-02 1.25630895E-10 6.55995436E-09 9.99993645E-04 9.99936601E-04 1.10674273E-05 1.72796455E-09 0.00000000 9.36924405E-09 3.37647252E-05 3.05156194E-04 7.04328559E-05 3.92296080E-08 4.88004126E-09 3.52455198E-09 3.50433425E-07 1.61972757E-13 2.51670174E-09 4.65936296E-07 1.14634816E-10 7.54251175E-07 4.91270112E-06 8.44089314E-04 1.72357502E-07 5.10496376E-13 5.41353851E-10 1.05571246E-06 3.47003436E-07 1.70981673E-06 5.61808804E-07 1.19046346E-08 2.69701701E-08 8.86559093E-09 8.89325747E-05 1.00000000 1.99155518E-04 2.33525527E-04 3.15565085E-05 2.62871472E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.24059215E-02 2.97835469E-02 0.741987884 4.63089757E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 505.600555 1.94464121E-02 3.44958863E-07 5.72885536E-02 1.51378856E-07 1.07730295E-06 2.00973987E-03 9.99975600E-04 1.78983188E-04 8.08305573E-04 1.38815361E-04 1.29492677E-04 1.52022457E-02 5.03931567E-03 1.25995383E-03 5.37628075E-03 19.9997730 1.71642647E-08 1.99990440E-03 0.999981403 3.27318639E-06 3.62362925E-07 1.00028596E-03 2.20154267E-04 2.98835966E-03 9.99218598E-03 4.77988884E-04 8.29754118E-03 8.99505994E-06 6.29345820E-08 3.03511456E-06 2.99621071E-03 9.84395621E-04 6.40490589E-06 3.84260938E-02 3.99981905E-03 1.73524484E-07 9.99837145E-02 4.99993155E-04 1.99999996E-02 1.29399894E-10 6.60241506E-09 9.99993645E-04 9.99936135E-04 1.08042459E-05 1.72733128E-09 0.00000000 9.36286337E-09 3.36786907E-05 3.09060677E-04 7.13701738E-05 3.97946245E-08 4.86823826E-09 3.52458307E-09 3.50422397E-07 1.63246139E-13 2.51497512E-09 4.70288683E-07 1.14992273E-10 7.61293222E-07 4.94567939E-06 8.52694910E-04 1.73524484E-07 5.10038192E-13 5.50011703E-10 1.05576578E-06 3.55248204E-07 1.70990313E-06 5.75155241E-07 1.20158514E-08 2.69715343E-08 9.07624376E-09 8.91957534E-05 1.00000000 1.99156173E-04 2.33528772E-04 3.15544967E-05 2.64286442E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.24247491E-02 2.97928490E-02 0.742161989 4.65721488E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 507.200562 1.94435567E-02 3.03217575E-07 5.72741330E-02 1.51381343E-07 1.07721564E-06 2.00980739E-03 9.99973970E-04 1.78657414E-04 8.08423909E-04 1.39567564E-04 1.33101712E-04 1.52042080E-02 5.03962534E-03 1.26248260E-03 5.42182894E-03 19.9997711 1.74780794E-08 1.99990370E-03 0.999981284 3.29631462E-06 3.67086471E-07 1.00029306E-03 2.22536604E-04 2.98825372E-03 9.99211799E-03 4.77762136E-04 8.29752441E-03 9.02177544E-06 6.29704857E-08 3.05554954E-06 2.99618533E-03 9.84268030E-04 6.45530008E-06 3.84103768E-02 3.99981765E-03 1.74690740E-07 9.99836028E-02 4.99993097E-04 1.99999996E-02 1.33214509E-10 6.64483890E-09 9.99993645E-04 9.99935670E-04 1.05469671E-05 1.72669856E-09 0.00000000 9.35660083E-09 3.35881778E-05 3.12924385E-04 7.22988771E-05 4.03635099E-08 4.85578511E-09 3.52465745E-09 3.50411881E-07 1.64519128E-13 2.51328025E-09 4.74589029E-07 1.15349473E-10 7.68250970E-07 4.97863311E-06 8.61295208E-04 1.74690740E-07 5.09589820E-13 5.58622426E-10 1.05581353E-06 3.63542739E-07 1.70998044E-06 5.88582225E-07 1.21257386E-08 2.69727529E-08 9.28816846E-09 8.94530313E-05 1.00000000 1.99157133E-04 2.33532162E-04 3.15529251E-05 2.65700626E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.24425486E-02 2.98016313E-02 0.742333055 4.68344651E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 508.800568 1.94407292E-02 2.67815011E-07 5.72597235E-02 1.51383873E-07 1.07712265E-06 2.00987491E-03 9.99972341E-04 1.78299670E-04 8.08541547E-04 1.40318647E-04 1.36747214E-04 1.52061693E-02 5.03993547E-03 1.26500963E-03 5.46734454E-03 19.9997692 1.77944379E-08 1.99990300E-03 0.999981165 3.31942033E-06 3.71795693E-07 1.00030028E-03 2.24916468E-04 2.98814778E-03 9.99205001E-03 4.77535563E-04 8.29750765E-03 9.04846729E-06 6.30064534E-08 3.07597065E-06 2.99615995E-03 9.84140555E-04 6.50565926E-06 3.83946709E-02 3.99981625E-03 1.75856172E-07 9.99834910E-02 4.99993039E-04 1.99999996E-02 1.37079931E-10 6.68722100E-09 9.99993645E-04 9.99935204E-04 1.02962667E-05 1.72606629E-09 0.00000000 9.35044930E-09 3.34927718E-05 3.16742051E-04 7.32178669E-05 4.09367331E-08 4.84262008E-09 3.52477403E-09 3.50401933E-07 1.65790965E-13 2.51161558E-09 4.78831907E-07 1.15706410E-10 7.75115609E-07 5.01155910E-06 8.69889511E-04 1.75856172E-07 5.09150935E-13 5.67179081E-10 1.05585571E-06 3.71891389E-07 1.71004865E-06 6.02096691E-07 1.22341577E-08 2.69738312E-08 9.50147605E-09 8.97037316E-05 1.00000000 1.99157788E-04 2.33535393E-04 3.15509096E-05 2.67113675E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.24613576E-02 2.98109259E-02 0.742506802 4.70975861E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 510.400574 1.94379278E-02 2.37195010E-07 5.72453216E-02 1.51386445E-07 1.07702533E-06 2.00994243E-03 9.99970711E-04 1.77915004E-04 8.08658544E-04 1.41068856E-04 1.40423421E-04 1.52081298E-02 5.04024606E-03 1.26753515E-03 5.51283173E-03 19.9997673 1.81129742E-08 1.99990231E-03 0.999981046 3.34250649E-06 3.76491897E-07 1.00030750E-03 2.27294178E-04 2.98804208E-03 9.99198202E-03 4.77309164E-04 8.29749089E-03 9.07513913E-06 6.30424779E-08 3.09637994E-06 2.99613457E-03 9.84013197E-04 6.55598842E-06 3.83789763E-02 3.99981486E-03 1.77020908E-07 9.99833792E-02 4.99992981E-04 1.99999996E-02 1.40988610E-10 6.72956713E-09 9.99993645E-04 9.99934739E-04 1.00511688E-05 1.72543446E-09 0.00000000 9.34437772E-09 3.33932658E-05 3.20520048E-04 7.41284821E-05 4.15136725E-08 4.82885820E-09 3.52492147E-09 3.50392469E-07 1.67061826E-13 2.50997245E-09 4.83026326E-07 1.16063117E-10 7.81901690E-07 5.04446098E-06 8.78478517E-04 1.77020908E-07 5.08719098E-13 5.75688497E-10 1.05589368E-06 3.80285059E-07 1.71011015E-06 6.15684030E-07 1.23413386E-08 2.69748011E-08 9.71593472E-09 8.99488296E-05 1.00000000 1.99158749E-04 2.33538784E-04 3.15493344E-05 2.68525968E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.24791384E-02 2.98196990E-02 0.742677569 4.73598354E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 512.000549 1.94351543E-02 2.11294847E-07 5.72309308E-02 1.51389088E-07 1.07692381E-06 2.01000995E-03 9.99969081E-04 1.77500580E-04 8.08774785E-04 1.41818164E-04 1.44133592E-04 1.52100883E-02 5.04055712E-03 1.27005880E-03 5.55828586E-03 19.9997654 1.84339619E-08 1.99990161E-03 0.999980927 3.36557059E-06 3.81172470E-07 1.00031483E-03 2.29669429E-04 2.98793637E-03 9.99191403E-03 4.77082940E-04 8.29747412E-03 9.10178824E-06 6.30785806E-08 3.11677559E-06 2.99610919E-03 9.83885839E-04 6.60628302E-06 3.83632928E-02 3.99981393E-03 1.78184834E-07 9.99832675E-02 4.99992922E-04 1.99999996E-02 1.44945667E-10 6.77187284E-09 9.99993645E-04 9.99934273E-04 9.81234916E-06 1.72480286E-09 0.00000000 9.33838074E-09 3.32892596E-05 3.24253167E-04 7.50296313E-05 4.20948076E-08 4.81444129E-09 3.52509866E-09 3.50383630E-07 1.68330993E-13 2.50834953E-09 4.87167085E-07 1.16419568E-10 7.88600858E-07 5.07733603E-06 8.87061527E-04 1.78184834E-07 5.08294036E-13 5.84143789E-10 1.05592756E-06 3.88727841E-07 1.71016495E-06 6.29350779E-07 1.24471491E-08 2.69756661E-08 9.93164839E-09 9.01876483E-05 1.00000000 1.99159389E-04 2.33542014E-04 3.15473153E-05 2.69937125E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.24979325E-02 2.98289862E-02 0.742851019 4.76229005E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 513.600525 1.94324050E-02 1.88933626E-07 5.72165512E-02 1.51391816E-07 1.07681922E-06 2.01007747E-03 9.99967451E-04 1.77061214E-04 8.08890327E-04 1.42566743E-04 1.47872241E-04 1.52120460E-02 5.04086865E-03 1.27258094E-03 5.60371159E-03 19.9997635 1.87570421E-08 1.99990091E-03 0.999980807 3.38861582E-06 3.85838945E-07 1.00032229E-03 2.32042556E-04 2.98783067E-03 9.99184605E-03 4.76856861E-04 8.29745736E-03 9.12841733E-06 6.31147472E-08 3.13715964E-06 2.99608381E-03 9.83758597E-04 6.65654807E-06 3.83476205E-02 3.99981299E-03 1.79348078E-07 9.99831557E-02 4.99992864E-04 1.99999996E-02 1.48943774E-10 6.81414347E-09 9.99993645E-04 9.99933807E-04 9.57886186E-06 1.72417158E-09 0.00000000 9.33243616E-09 3.31814990E-05 3.27947811E-04 7.59226677E-05 4.26795275E-08 4.79947726E-09 3.52529761E-09 3.50375302E-07 1.69598737E-13 2.50674081E-09 4.91262824E-07 1.16775797E-10 7.95227095E-07 5.11018743E-06 8.95639299E-04 1.79348078E-07 5.07873908E-13 5.92552118E-10 1.05595825E-06 3.97211267E-07 1.71021463E-06 6.43083240E-07 1.25518085E-08 2.69764513E-08 1.01484003E-08 9.04211338E-05 1.00000000 1.99160349E-04 2.33545405E-04 3.15457401E-05 2.71347526E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.25156909E-02 2.98377518E-02 0.743021429 4.78850864E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 515.200500 1.94296837E-02 1.70055358E-07 5.72021827E-02 1.51394630E-07 1.07671167E-06 2.01014476E-03 9.99965821E-04 1.76594316E-04 8.09005054E-04 1.43314581E-04 1.51642336E-04 1.52140018E-02 5.04118064E-03 1.27510133E-03 5.64910471E-03 19.9997616 1.90824778E-08 1.99990021E-03 0.999980688 3.41163945E-06 3.90488623E-07 1.00032974E-03 2.34413237E-04 2.98772496E-03 9.99177899E-03 4.76630958E-04 8.29744060E-03 9.15502369E-06 6.31509920E-08 3.15753050E-06 2.99605844E-03 9.83631471E-04 6.70677900E-06 3.83319594E-02 3.99981206E-03 1.80510540E-07 9.99830440E-02 4.99992806E-04 1.99999996E-02 1.52987734E-10 6.85637458E-09 9.99993645E-04 9.99933342E-04 9.35135267E-06 1.72354075E-09 0.00000000 9.32654043E-09 3.30696312E-05 3.31598974E-04 7.68065365E-05 4.32683080E-08 4.78391415E-09 3.52551766E-09 3.50367600E-07 1.70864367E-13 2.50514542E-09 4.95308825E-07 1.17131790E-10 8.01772785E-07 5.14301200E-06 9.04211076E-04 1.80510540E-07 5.07458550E-13 6.00906880E-10 1.05598588E-06 4.05738916E-07 1.71025943E-06 6.56887210E-07 1.26551987E-08 2.69771583E-08 1.03662829E-08 9.06486457E-05 1.00000000 1.99160990E-04 2.33548635E-04 3.15437173E-05 2.72756792E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.25344738E-02 2.98470315E-02 0.743194580 4.81480956E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 516.800476 1.94269866E-02 1.53779354E-07 5.71878254E-02 1.51397558E-07 1.07660208E-06 2.01021205E-03 9.99964192E-04 1.76104397E-04 8.09119025E-04 1.44061822E-04 1.55438756E-04 1.52159566E-02 5.04149310E-03 1.27762021E-03 5.69446944E-03 19.9997597 1.94099226E-08 1.99989951E-03 0.999980569 3.43464467E-06 3.95123266E-07 1.00033730E-03 2.36781809E-04 2.98761926E-03 9.99171194E-03 4.76405228E-04 8.29742383E-03 9.18161004E-06 6.31873078E-08 3.17788977E-06 2.99603306E-03 9.83504346E-04 6.75698038E-06 3.83163057E-02 3.99981113E-03 1.81672320E-07 9.99829322E-02 4.99992748E-04 1.99999996E-02 1.57070537E-10 6.89857149E-09 9.99993645E-04 9.99932876E-04 9.12892028E-06 1.72291015E-09 0.00000000 9.32067756E-09 3.29543400E-05 3.35212972E-04 7.76825764E-05 4.38605632E-08 4.76785100E-09 3.52575236E-09 3.50360409E-07 1.72128276E-13 2.50355869E-09 4.99313273E-07 1.17487575E-10 8.08251116E-07 5.17581384E-06 9.12777672E-04 1.81672320E-07 5.07046607E-13 6.09215400E-10 1.05601123E-06 4.14303059E-07 1.71030047E-06 6.70750239E-07 1.27575266E-08 2.69778067E-08 1.05850981E-08 9.08710790E-05 1.00000000 1.99161936E-04 2.33552026E-04 3.15421385E-05 2.74165301E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.25522137E-02 2.98557896E-02 0.743364692 4.84102219E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 518.400452 1.94243137E-02 1.40056400E-07 5.71734756E-02 1.51400613E-07 1.07649055E-06 2.01027934E-03 9.99962562E-04 1.75589128E-04 8.09232122E-04 1.44808422E-04 1.59264149E-04 1.52179096E-02 5.04180603E-03 1.28013734E-03 5.73980156E-03 19.9997578 1.97396286E-08 1.99989881E-03 0.999980450 3.45762851E-06 3.99740060E-07 1.00034487E-03 2.39147950E-04 2.98751355E-03 9.99164488E-03 4.76179674E-04 8.29740707E-03 9.20817456E-06 6.32237018E-08 3.19823607E-06 2.99600768E-03 9.83377337E-04 6.80714811E-06 3.83006632E-02 3.99981020E-03 1.82833318E-07 9.99828205E-02 4.99992690E-04 1.99999996E-02 1.61196681E-10 6.94072932E-09 9.99993645E-04 9.99932410E-04 8.91217587E-06 1.72228021E-09 0.00000000 9.31484312E-09 3.28353162E-05 3.38785030E-04 7.85497905E-05 4.44567547E-08 4.75124340E-09 3.52600127E-09 3.50353844E-07 1.73389745E-13 2.50197996E-09 5.03271963E-07 1.17843124E-10 8.14655323E-07 5.20858885E-06 9.21338273E-04 1.82833318E-07 5.06637917E-13 6.17471407E-10 1.05603431E-06 4.22906766E-07 1.71033787E-06 6.84677218E-07 1.28586857E-08 2.69783982E-08 1.08049241E-08 9.10878225E-05 1.00000000 1.99162576E-04 2.33555256E-04 3.15401157E-05 2.75572675E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.25709742E-02 2.98650619E-02 0.743537486 4.86731753E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 520.000427 1.94216631E-02 1.28240856E-07 5.71591370E-02 1.51403754E-07 1.07637777E-06 2.01034662E-03 9.99960932E-04 1.75052628E-04 8.09344405E-04 1.45554513E-04 1.63113844E-04 1.52198616E-02 5.04211942E-03 1.28265296E-03 5.78510528E-03 19.9997559 2.00712691E-08 1.99989812E-03 0.999980330 3.48059393E-06 4.04340852E-07 1.00035255E-03 2.41511996E-04 2.98740808E-03 9.99157783E-03 4.75954264E-04 8.29739030E-03 9.23471907E-06 6.32601740E-08 3.21857101E-06 2.99598230E-03 9.83250327E-04 6.85728673E-06 3.82850319E-02 3.99980927E-03 1.83993649E-07 9.99827087E-02 4.99992631E-04 1.99999996E-02 1.65359657E-10 6.98285341E-09 9.99993645E-04 9.99931945E-04 8.70028089E-06 1.72165049E-09 0.00000000 9.30902733E-09 3.27131784E-05 3.42321146E-04 7.94094449E-05 4.50563356E-08 4.73417971E-09 3.52626039E-09 3.50347790E-07 1.74649236E-13 2.50040588E-09 5.07192283E-07 1.18198479E-10 8.20997400E-07 5.24134111E-06 9.29893635E-04 1.83993649E-07 5.06231504E-13 6.25682006E-10 1.05605579E-06 4.31543157E-07 1.71037254E-06 6.98657004E-07 1.29588651E-08 2.69789453E-08 1.10255849E-08 9.12997202E-05 1.00000000 1.99163522E-04 2.33558632E-04 3.15385332E-05 2.76979292E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.25886992E-02 2.98738126E-02 0.743707299 4.89352308E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 - 521.600403 1.94190368E-02 1.18283886E-07 5.71448095E-02 1.51407022E-07 1.07626386E-06 2.01041368E-03 9.99959302E-04 1.74492918E-04 8.09455814E-04 1.46300066E-04 1.66990096E-04 1.52218118E-02 5.04243327E-03 1.28516683E-03 5.83037687E-03 19.9997540 2.04050732E-08 1.99989742E-03 0.999980211 3.50353866E-06 4.08922887E-07 1.00036035E-03 2.43873641E-04 2.98730261E-03 9.99151077E-03 4.75729030E-04 8.29737354E-03 9.26124176E-06 6.32967243E-08 3.23889276E-06 2.99595692E-03 9.83123435E-04 6.90739171E-06 3.82694118E-02 3.99980834E-03 1.85153198E-07 9.99825969E-02 4.99992573E-04 1.99999996E-02 1.69563433E-10 7.02493930E-09 9.99993645E-04 9.99931479E-04 8.49379012E-06 1.72102099E-09 0.00000000 9.30322663E-09 3.25876717E-05 3.45817010E-04 8.02606373E-05 4.56597391E-08 4.71662354E-09 3.52652951E-09 3.50342390E-07 1.75906097E-13 2.49883625E-09 5.11070766E-07 1.18553611E-10 8.27271663E-07 5.27406701E-06 9.38443060E-04 1.85153198E-07 5.05827259E-13 6.33841424E-10 1.05607558E-06 4.40214649E-07 1.71040460E-06 7.12693577E-07 1.30579760E-08 2.69794516E-08 1.12471437E-08 9.15062119E-05 1.00000000 1.99164162E-04 2.33561863E-04 3.15365032E-05 2.78384774E-04 0.00000000 0.100000001 0.200000003 0.300000012 0.500000000 0.699999988 0.899999976 1.20000005 1.39999998 0.109999999 0.209999993 0.310000002 0.509999990 0.709999979 0.910000026 1.21000004 1.40999997 0.519999981 0.620000005 0.00000000 6.26074374E-02 2.98830755E-02 0.743879795 4.91981320E-02 0.430000007 0.529999971 9.60839987E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.649999976 0.750000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 2.01599998E-03 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.17153740 3.07115841 3.07115841 6.17801779E-05 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326519E-07 diff --git a/test/monarch/monarch_mod37_inorganic_partitioning.json b/test/monarch/monarch_mod37_inorganic_partitioning.json deleted file mode 100644 index 4980d1896..000000000 --- a/test/monarch/monarch_mod37_inorganic_partitioning.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "description" : [ - "Partitioning of inorganic species. Reactions are based on original MONARCH implementation", - "of EQSAM where only the SO4-NO3-NH4 system is included and is only calculated for the sulfate", - "aerosol mode and H2SO4 is assumed to partition completely and immediately to the aerosol phase.", - "Partitioning reaction parameters are from CAPRAM2.4 (Ervens et al. 2003)" - ], - "camp-data" : [ - { - "name" : "SULF", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" : 8.586232e6, - "HLC exp factor [K]" : 0.0, - "diffusion coeff [m2 s-1]" : 1.30e-5, - "N star" : 1.83, - "molecular weight [kg mol-1]" : 0.0981 - }, - { - "name" : "HNO3", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" : 2.0725389, - "HLC exp factor [K]" : 8700.0, - "diffusion coeff [m2 s-1]" : 1.32e-5, - "N star" : 1.94, - "molecular weight [kg mol-1]" : 0.06301 - }, - { - "name" : "NH3", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" : 5.990624e-4, - "HLC exp factor [K]" : 3920.0, - "diffusion coeff [m2 s-1]" : 2.3e-5, - "N star" : 1.92, - "molecular weight [kg mol-1]" : 0.017031 - }, - { - "name" : "MONARCH mod37", - "type" : "MECHANISM", - "reactions" : [ - { - "type" : "HL_PHASE_TRANSFER", - "gas-phase species" : "SULF", - "aerosol phase" : "aqueous sulfate", - "aerosol-phase species" : "H2SO4_aq", - "aerosol-phase water" : "H2O_aq" - }, - { - "type" : "HL_PHASE_TRANSFER", - "gas-phase species" : "HNO3", - "aerosol phase" : "aqueous sulfate", - "aerosol-phase species" : "HNO3_aq", - "aerosol-phase water" : "H2O_aq" - }, - { - "type" : "HL_PHASE_TRANSFER", - "gas-phase species" : "NH3", - "aerosol phase" : "aqueous sulfate", - "aerosol-phase species" : "NH3_aq", - "aerosol-phase water" : "H2O_aq" - } - ] - }, - { - "type" : "SUB_MODEL_ZSR_AEROSOL_WATER", - "name" : "MONARCH inorganic aerosol water", - "notes" : [ "Y_j parameters taken from Jacobson et al. (1996) Table 2" ], - "aerosol phase" : "aqueous sulfate", - "gas-phase water" : "H2O", - "aerosol-phase water" : "H2O_aq", - "ion pairs" : { - "H-HSO4" : { - "type" : "JACOBSON", - "ions" : { - "H_p" : {}, - "HSO4_m" : {} - }, - "Y_j" : [5.611895, -1.387446e1, 1.750682e1, 7.138146e1, -3.109173e2, 4.662288e2, -3.128612e2, 7.767097e1], - "low RH" : 0.0 - }, - "H2-SO4" : { - "type" : "JACOBSON", - "ions" : { - "H_p" : { "qty" : 2 }, - "SO4_mm" : {} - }, - "Y_j" : [5.611895, -1.387446e1, 1.750682e1, 7.138146e1, -3.109173e2, 4.662288e2, -3.128612e2, 7.767097e1], - "low RH" : 0.0 - }, - "H-NO3" : { - "type" : "JACOBSON", - "ions" : { - "H_p" : {}, - "NO3_m" : {} - }, - "Y_j" : [4.852977, -6.621314, 3.390133e1, -1.985191e2, 6.281150e2, -1.038494e3, 8.498917e2, -2.729090e2], - "low RH" : 0.0 - }, - "NH4-HSO4" : { - "type" : "JACOBSON", - "ions" : { - "NH4_p" : {}, - "HSO4_m" : {} - }, - "Y_j" : [5.515580, 3.588744, -6.363443e1, 3.687630e2, -1.023972e3, 1.394436e3, -9.168213e2, 2.328726e2], - "low RH" : 0.0 - }, - "(NH4)2-SO4" : { - "type" : "JACOBSON", - "ions" : { - "NH4_p" : { "qty" : 2 }, - "SO4_mm" : {} - }, - "Y_j" : [4.363511e2, -4.947645e3, 2.399693e4, -6.364664e4, 9.952891e4, -9.179112e4, 4.626748e4, -9.844195e3], - "low RH" : 0.47 - }, - "NH4-NO3" : { - "type" : "JACOBSON", - "ions" : { - "NH4_p" : {}, - "NO3_m" : {} - }, - "Y_j" : [1.235157e4, -1.097966e5, 4.173924e5, -8.792165, 1.108433e6, -8.364973e5, 3.499527e5, -6.261910e4], - "low RH" : 0.62 - } - } - } - ] -} - - diff --git a/test/monarch/monarch_mod37_inorganic_rxns.json b/test/monarch/monarch_mod37_inorganic_rxns.json deleted file mode 100644 index 6aa25d859..000000000 --- a/test/monarch/monarch_mod37_inorganic_rxns.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "description" : [ - "These reactions are based on the original MONARCH implementation of EQSAM where", - "only the SO4-NO3-NH3 system is included, and inorganic reactions are only applied", - "to the sulfate aerosol mode. Reaction parameters are from CAPRAM2.4 (Ervens et al. 2003)", - "!!!NOTE!!! The reverse rate constants have been scaled down by a factor of 1.0e5 to reduce the stiffness of the system. This is still being evaluated" - ], - "camp-data" : [ - { - "name" : "MONARCH mod37", - "type" : "MECHANISM", - "reactions" : [ - { - "type" : "AQUEOUS_EQUILIBRIUM", - "aerosol phase" : "aqueous sulfate", - "aerosol-phase water" : "H2O_aq", - "A" : 1.8e-16, - "C" : -6800.0, - "k_reverse" : 1.3e06, - "reactants" : { - "H2O_aq" : {} - }, - "products" : { - "H_p" : {}, - "OH_m" : {} - } - }, - { - "type" : "AQUEOUS_EQUILIBRIUM", - "aerosol phase" : "aqueous sulfate", - "aerosol-phase water" : "H2O_aq", - "A" : 1.02e-2, - "C" : 2700.0, - "k_reverse" : 1.0e06, - "ion pair" : "H2-SO4", - "reactants" : { - "HSO4_m" : {} - }, - "products": { - "SO4_mm" : {}, - "H_p" : {} - } - }, - { - "type" : "AQUEOUS_EQUILIBRIUM", - "aerosol phase" : "aqueous sulfate", - "aerosol-phase water" : "H2O_aq", - "A" : 1000.0, - "k_reverse" : 5.0e05, - "ion pair" : "H-HSO4", - "reactants" : { - "H2SO4_aq" : {} - }, - "products" : { - "HSO4_m" : {}, - "H_p" : {} - } - }, - { - "type" : "AQUEOUS_EQUILIBRIUM", - "aerosol phase" : "aqueous sulfate", - "aerosol-phase water" : "H2O_aq", - "A" : 3.17e-7, - "C" : -560.0, - "k_reverse" : 3.4e05, - "ion pair" : "NH4/H", - "reactants" : { - "NH3_aq" : {}, - "H2O_aq" : {} - }, - "products" : { - "NH4_p" : {}, - "OH_m" : {} - } - }, - { - "type" : "AQUEOUS_EQUILIBRIUM", - "aerosol phase" : "aqueous sulfate", - "aerosol-phase water" : "H2O_aq", - "A" : 22.0, - "C" : 1800.0, - "k_reverse" : 5.0e05, - "ion pair" : "H-NO3", - "reactants" : { - "HNO3_aq" : {} - }, - "products" : { - "NO3_m" : {}, - "H_p" : {} - } - } - ] - } - ] -} diff --git a/test/monarch/monarch_mod37_species.json b/test/monarch/monarch_mod37_species.json deleted file mode 100644 index 9ec1af72f..000000000 --- a/test/monarch/monarch_mod37_species.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "description" : "Gas- and aerosol-phase MONARCH species that are not part of the base CB05 mechanism but are included in the 'mod37' configuration", - "camp-data" : [ - { - "name" : "NH3", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "description" : "ammonia" - }, - { - "name" : "DMS", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03, - "description" : "dimethylsulfide" - } - ] -} - diff --git a/test/monarch/monarch_original.F90 b/test/monarch/monarch_original.F90 deleted file mode 100644 index d9349a1fe..000000000 --- a/test/monarch/monarch_original.F90 +++ /dev/null @@ -1,56 +0,0 @@ -! Copyright (C) 2021 Barcelona Supercomputing Center and University of -! Illinois at Urbana-Champaign -! SPDX-License-Identifier: MIT - -!> \file -!> The monarch_original module - -!> Functions to run original MONARCH modules for testing integration with PartMC -module monarch_original - - implicit none - private - - public :: monarch_original_t - - !> MONARCH original wrapper type - !! - !! Allows mock MONARCH model to initialize and run original MONARCH modules - !! for testing integration with PartMC - type :: monarch_original_t - private - contains - !> Initialize the original MONARCH modules - procedure :: initialize - !> Solve for chemistry using original MONARCH modules - procedure :: solve - end type :: monarch_original_t - -contains - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Initialize the original MONARCH modules - subroutine initialize( GLOBAL & - ,CHEM & - ,CAT_AERO & - ,NUM_AERO & - ,NUM_GAS & - ,NUM_GAS_TOTAL & - ,NUM_TRACERS_TOTAL & - ,NUM_TRACERS_CHEM & - ,NUM_WATER & - ,NUM_TRACERS_MET & - ,IDS, IDE, JDS, JDE, LM & - ,IMS, IME, JMS, JME & - ,ITS, ITE, JTS, JTE) - - - - end subroutine initialize - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -end module monarch_original diff --git a/test/monarch/plot.conf b/test/monarch/plot.conf deleted file mode 100644 index 695f88a67..000000000 --- a/test/monarch/plot.conf +++ /dev/null @@ -1,9 +0,0 @@ -set terminal png truecolor -set autoscale -set ylabel 'rate_{dep}' -set xlabel 'd[ind]' -set xtics rotate by 45 -set output "deriv_comp.png" -plot "local_1_i118_d118" \ -using 2:3 title "calculated rate", \ - '' using 2:4 title "jac estimated rate" diff --git a/test/monarch/plot_functions.py b/test/monarch/plot_functions.py new file mode 100644 index 000000000..56a768ded --- /dev/null +++ b/test/monarch/plot_functions.py @@ -0,0 +1,27 @@ +import matplotlib as mpl + +mpl.use('TkAgg') +import matplotlib.pyplot as plt +from pandas import DataFrame +import seaborn as sns + + +def plotsns(namex, namey, datax, datay, plot_title, legend): + sns.set_style("whitegrid") + sns.set_context("paper", font_scale=1.25) + ax = plt.subplot(111) + ax.set_xlabel(namex) + ax.set_ylabel(namey) + if legend and len(legend) > 1: + print("WARNING: Increase plot window manually to take better screenshot") + datay = list(map(list, zip(*datay))) + data = DataFrame(datay, datax, columns=legend) + sns.lineplot(data=data, palette="tab10", linewidth=2.5) + ax.set_title(plot_title, y=1.06) + ax.legend(loc='lower center', bbox_to_anchor=(0.5, 1), + ncol=len(legend), labels=legend, frameon=True, shadow=False, borderaxespad=0.) + else: + ax.set_title(plot_title) + sns.lineplot(x=datax,y=datay[0], palette="tab10", linewidth=2.5, legend=False) + ax.set_xticks(datax) + plt.show() diff --git a/test/monarch/plot_simple.conf b/test/monarch/plot_simple.conf deleted file mode 100644 index 8d4f02726..000000000 --- a/test/monarch/plot_simple.conf +++ /dev/null @@ -1,9 +0,0 @@ -# plot_simple.conf -# Run as: gnuplot plot_simple.conf -set terminal png truecolor -set output "out/simple.png" -set autoscale -plot "out/results_simple.txt" \ -using 1:2 dashtype "- " title "modeled A",\ - '' using 1:3 dashtype ". " title "modeled B",\ - '' using 1:4 dashtype "_ " title "modeled C" diff --git a/test/monarch/run.sh b/test/monarch/run.sh new file mode 100644 index 000000000..e49fbac4a --- /dev/null +++ b/test/monarch/run.sh @@ -0,0 +1,29 @@ +set -e +make_and_check() { + curr_path=$(pwd) + cd ../../build + unbuffer make | tee output_make.log + make_exit_status=${PIPESTATUS[0]} + if [ $make_exit_status -ne 0 ]; then + exit 1 + fi + cd $curr_path + if grep -q "Scanning dependencies" ../../build/output_make.log; then + echo "Changes made by 'make' command." + python checkGPU.py + fi +} + +make_run() { + ln -rs -fL out ../../build/out + ln -rs -fL settings ../../build/settings + curr_path=$(pwd) + cd ../../build + make + cd $curr_path + #python TestMonarch.py + python checkGPU.py +} + +make_run +#make_and_check diff --git a/test/monarch/sbatch_run.sh b/test/monarch/sbatch_run.sh new file mode 100644 index 000000000..e439f6060 --- /dev/null +++ b/test/monarch/sbatch_run.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +##SBATCH --qos=debug +#SBATCH --job-name=camp_test_monarch +#SBATCH --output=out_sbatch.txt +#SBATCH --error=err_sbatch.txt +#SBATCH --nodes=1 +#SBATCH --ntasks-per-node=160 +#SBATCH --gres=gpu:4 +#SBATCH --exclusive + +set -e +make_run(){ + curr_path=$(pwd) + cd ../../build + make + cd $curr_path + python TestMonarch1.py + python TestMonarch2.py + python TestMonarch3.py + python TestMonarch4.py +} +time make_run \ No newline at end of file diff --git a/test/monarch/settings/TestMonarch.json b/test/monarch/settings/TestMonarch.json new file mode 100644 index 000000000..7b5e3c4c0 --- /dev/null +++ b/test/monarch/settings/TestMonarch.json @@ -0,0 +1,40 @@ +{ + "chemFile": "cb05_paperV2", + "diffCells": "Realistic", + "timeSteps": 3, + "timeStepsDt": 2, + "case": "GPU BDF", + "nCells": 2, + "caseGpuCpu": "GPU", + "caseMulticellsOnecell": "BDF", + "mpiProcesses": 20, + "allocatedNodes": 1, + "allocatedTasksPerNode": 160, + "diffCellsL": [ + "Realistic" + ], + "mpiProcessesCaseBase": 20, + "mpiProcessesCaseOptimList": [ + 20 + ], + "cells": [ + 40 + ], + "caseBase": "CPU One-cell", + "casesOptim": [ + "GPU BDF" + ], + "plotYKey": "Speedup timecvStep", + "is_import": false, + "profileCuda": "", + "is_out": true, + "sbatch_job_id": "", + "exportPath": "exports", + "results_file": "_solver_stats.csv", + "nCellsProcesses": 40, + "campConf": "settings/config_variables_c_solver.txt", + "nGPUsCaseBase": 1, + "nGPUsCaseOptimList": [ + 2 + ] +} \ No newline at end of file diff --git a/test/monarch/monarch_box_binned/cb05_abs_tol.json b/test/monarch/settings/cb05_paperV2/cb05_abs_tol.json similarity index 100% rename from test/monarch/monarch_box_binned/cb05_abs_tol.json rename to test/monarch/settings/cb05_paperV2/cb05_abs_tol.json diff --git a/test/monarch/monarch_box_binned/cb05_mechanism.json b/test/monarch/settings/cb05_paperV2/cb05_mechanism.json similarity index 100% rename from test/monarch/monarch_box_binned/cb05_mechanism.json rename to test/monarch/settings/cb05_paperV2/cb05_mechanism.json diff --git a/test/monarch/monarch_box_binned/cb05_species.json b/test/monarch/settings/cb05_paperV2/cb05_species.json similarity index 100% rename from test/monarch/monarch_box_binned/cb05_species.json rename to test/monarch/settings/cb05_paperV2/cb05_species.json diff --git a/test/monarch/settings/cb05_paperV2/config.json b/test/monarch/settings/cb05_paperV2/config.json new file mode 100644 index 000000000..d09bc3663 --- /dev/null +++ b/test/monarch/settings/cb05_paperV2/config.json @@ -0,0 +1,10 @@ +{ + "camp-files" : [ + "settings/cb05_paperV2/cb05_abs_tol.json", + "settings/cb05_paperV2/cb05_mechanism.json", + "settings/cb05_paperV2/cb05_species.json", + "settings/cb05_paperV2/custom_species.json", + "settings/cb05_paperV2/partitioning_species_params.json" + ] +} + diff --git a/test/monarch/monarch_box_binned/custom_species.json b/test/monarch/settings/cb05_paperV2/custom_species.json similarity index 100% rename from test/monarch/monarch_box_binned/custom_species.json rename to test/monarch/settings/cb05_paperV2/custom_species.json diff --git a/test/monarch/settings/cb05_paperV2/interface.json b/test/monarch/settings/cb05_paperV2/interface.json new file mode 100644 index 000000000..2ad3992f3 --- /dev/null +++ b/test/monarch/settings/cb05_paperV2/interface.json @@ -0,0 +1,173 @@ +{ + "notes" : "Species map and initial concentrations for current MONARCH chemistry scheme", + "monarch-data" : + [ + { + "name" : "MONARCH chemistry species map", + "type" : "SPECIES_MAP", + "gas-phase water" : "H2O", + "gas-phase species" : { + "NO2" : { "monarch id" : 1 }, + "NO" : { "monarch id" : 2 }, + "O3" : { "monarch id" : 3 }, + "NO3" : { "monarch id" : 4 }, + "N2O5" : { "monarch id" : 5 }, + "HNO3" : { "monarch id" : 6 }, + "HONO" : { "monarch id" : 7 }, + "PNA" : { "monarch id" : 8 }, + "H2O2" : { "monarch id" : 9 }, + "NTR" : { "monarch id" : 10 }, + "ROOH" : { "monarch id" : 11 }, + "FORM" : { "monarch id" : 12 }, + "ALD2" : { "monarch id" : 13 }, + "ALDX" : { "monarch id" : 14 }, + "PAR" : { "monarch id" : 15 }, + "CO" : { "monarch id" : 16 }, + "MEPX" : { "monarch id" : 17 }, + "MEOH" : { "monarch id" : 18 }, + "FACD" : { "monarch id" : 19 }, + "PAN" : { "monarch id" : 20 }, + "PACD" : { "monarch id" : 21 }, + "AACD" : { "monarch id" : 22 }, + "PANX" : { "monarch id" : 23 }, + "OLE" : { "monarch id" : 24 }, + "ETH" : { "monarch id" : 25 }, + "IOLE" : { "monarch id" : 26 }, + "TOL" : { "monarch id" : 27 }, + "CRES" : { "monarch id" : 28 }, + "OPEN" : { "monarch id" : 29 }, + "MGLY" : { "monarch id" : 30 }, + "XYL" : { "monarch id" : 31 }, + "ISOP" : { "monarch id" : 32 }, + "ISPD" : { "monarch id" : 33 }, + "TERP" : { "monarch id" : 34 }, + "SO2" : { "monarch id" : 35 }, + "SULF" : { "monarch id" : 36 }, + "ETOH" : { "monarch id" : 37 }, + "ETHA" : { "monarch id" : 38 }, + "CL2" : { "monarch id" : 39 }, + "HOCL" : { "monarch id" : 40 }, + "FMCL" : { "monarch id" : 41 }, + "HCL" : { "monarch id" : 42 }, + "BENZENE" : { "monarch id" : 43 }, + "SESQ" : { "monarch id" : 44 }, + "O" : { "monarch id" : 45 }, + "O1D" : { "monarch id" : 46 }, + "OH" : { "monarch id" : 47 }, + "HO2" : { "monarch id" : 48 }, + "XO2" : { "monarch id" : 49 }, + "XO2N" : { "monarch id" : 50 }, + "MEO2" : { "monarch id" : 51 }, + "HCO3" : { "monarch id" : 52 }, + "C2O3" : { "monarch id" : 53 }, + "CXO3" : { "monarch id" : 54 }, + "ROR" : { "monarch id" : 55 }, + "TO2" : { "monarch id" : 56 }, + "TOLRO2" : { "monarch id" : 57 }, + "CRO" : { "monarch id" : 58 }, + "XYLRO2" : { "monarch id" : 59 }, + "ISOPRXN" : { "monarch id" : 60 }, + "TRPRXN" : { "monarch id" : 61 }, + "SULRXN" : { "monarch id" : 62 }, + "CL" : { "monarch id" : 63 }, + "CLO" : { "monarch id" : 64 }, + "TOLNRXN" : { "monarch id" : 65 }, + "TOLHRXN" : { "monarch id" : 66 }, + "XYLNRXN" : { "monarch id" : 67 }, + "XYLHRXN" : { "monarch id" : 68 }, + "BENZRO2" : { "monarch id" : 69 }, + "BNZNRXN" : { "monarch id" : 70 }, + "BNZHRXN" : { "monarch id" : 71 }, + "SESQRXN" : { "monarch id" : 72 }, + "NH3" : { "monarch id" : 73 } + } + }, + { + "name" : "Initial concentrations for MONARCH chemical species", + "type" : "INIT_CONC", + "gas-phase species" : { + "AACD" : { "init conc" : 0.2E+00 }, + "ALD2" : { "init conc" : 1.0E+00 }, + "ALDX" : { "init conc" : 0.0 }, + "BENZENE" : { "init conc" : 0.0 }, + "BENZRO2" : { "init conc" : 0.0 }, + "BNZHRXN" : { "init conc" : 0.0 }, + "BNZNRXN" : { "init conc" : 0.0 }, + "C2O3" : { "init conc" : 0.0 }, + "CH4" : { "init conc" : 2.2E+03 }, + "CL" : { "init conc" : 0.0 }, + "CL2" : { "init conc" : 0.0 }, + "CLO" : { "init conc" : 0.0 }, + "CO" : { "init conc" : 2.1E+02 }, + "CRES" : { "init conc" : 0.0 }, + "CRO" : { "init conc" : 0.0 }, + "CXO3" : { "init conc" : 0.0 }, + "ETH" : { "init conc" : 0.2E+00 }, + "ETHA" : { "init conc" : 1.0E+00 }, + "ETOH" : { "init conc" : 0.0 }, + "FACD" : { "init conc" : 0.0 }, + "FMCL" : { "init conc" : 0.0 }, + "FORM" : { "init conc" : 1.2E+00 }, + "H2O2" : { "init conc" : 1.1E+00 }, + "HCL" : { "init conc" : 0.7E+00 }, + "HCO3" : { "init conc" : 0.0 }, + "HNO3" : { "init conc" : 1.0E+00 }, + "HO2" : { "init conc" : 0.0 }, + "HOCL" : { "init conc" : 0.0 }, + "HONO" : { "init conc" : 0.0 }, + "IOLE" : { "init conc" : 3.1E-04 }, + "ISOP" : { "init conc" : 5.0E+00 }, + "ISOPRXN" : { "init conc" : 0.0 }, + "ISPD" : { "init conc" : 0.0 }, + "MEO2" : { "init conc" : 0.0 }, + "MEOH" : { "init conc" : 1.2E-01 }, + "MEPX" : { "init conc" : 0.5E+00 }, + "MGLY" : { "init conc" : 0.0 }, + "N2O5" : { "init conc" : 0.0 }, + "NO" : { "init conc" : 0.1E+00 }, + "NO2" : { "init conc" : 1.0E+00 }, + "NO3" : { "init conc" : 0.0 }, + "NTR" : { "init conc" : 0.1E+00 }, + "O" : { "init conc" : 0.0E+00 }, + "O1D" : { "init conc" : 0.0E+00 }, + "O3" : { "init conc" : 5.0E+01 }, + "OH" : { "init conc" : 0.0 }, + "OLE" : { "init conc" : 2.3E-02 }, + "OPEN" : { "init conc" : 0.0 }, + "PACD" : { "init conc" : 0.0 }, + "PAN" : { "init conc" : 0.8E+00 }, + "PANX" : { "init conc" : 0.0 }, + "PAR" : { "init conc" : 2.0E+00 }, + "PNA" : { "init conc" : 0.0 }, + "ROOH" : { "init conc" : 2.5E-02 }, + "ROR" : { "init conc" : 0.0 }, + "SESQ" : { "init conc" : 0.0 }, + "SESQRXN" : { "init conc" : 0.0 }, + "SO2" : { "init conc" : 0.8E+00 }, + "SULF" : { "init conc" : 0.0 }, + "SULRXN" : { "init conc" : 0.0 }, + "TERP" : { "init conc" : 0.0E+00 }, + "TO2" : { "init conc" : 0.0 }, + "TOL" : { "init conc" : 0.1E+00 }, + "TOLHRXN" : { "init conc" : 0.0 }, + "TOLNRXN" : { "init conc" : 0.0 }, + "TOLRO2" : { "init conc" : 0.0 }, + "TRPRXN" : { "init conc" : 0.0 }, + "XO2" : { "init conc" : 0.0 }, + "XO2N" : { "init conc" : 0.0 }, + "XYL" : { "init conc" : 0.1E+00 }, + "XYLHRXN" : { "init conc" : 0.0 }, + "XYLNRXN" : { "init conc" : 0.0 }, + "XYLRO2" : { "init conc" : 0.0 }, + "N2O" : { "init conc" : 0.0 }, + "DUMMY" : { "init conc" : 0.0 }, + "O2" : { "init conc" : 2.095E+08 }, + "H2O" : { "init conc" : 0.03 }, + "N2" : { "init conc" : 7.8E+08 }, + "H2" : { "init conc" : 5.6E+02 }, + "M" : { "init conc" : 1.0E+09 }, + "NH3" : { "init conc" : 0.5E+00 } + } + } + ] +} diff --git a/test/monarch/monarch_box_binned/partitioning_species_params.json b/test/monarch/settings/cb05_paperV2/partitioning_species_params.json similarity index 100% rename from test/monarch/monarch_box_binned/partitioning_species_params.json rename to test/monarch/settings/cb05_paperV2/partitioning_species_params.json diff --git a/test/monarch/settings/config_variables_c_solver.txt b/test/monarch/settings/config_variables_c_solver.txt new file mode 100644 index 000000000..a9812aa9e --- /dev/null +++ b/test/monarch/settings/config_variables_c_solver.txt @@ -0,0 +1,2 @@ +USE_CPU=ON +1 diff --git a/test/monarch/monarch_box_modal/cb05_abs_tol.json b/test/monarch/settings/monarch_cb05/cb05_abs_tol.json similarity index 98% rename from test/monarch/monarch_box_modal/cb05_abs_tol.json rename to test/monarch/settings/monarch_cb05/cb05_abs_tol.json index 7a3bfc5f9..68eb57885 100755 --- a/test/monarch/monarch_box_modal/cb05_abs_tol.json +++ b/test/monarch/settings/monarch_cb05/cb05_abs_tol.json @@ -394,11 +394,6 @@ "type" : "CHEM_SPEC", "absolute integration tolerance" : 1.0E+00 }, - { - "name" : "N2O", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03 - }, { "name" : "DUMMY", "type" : "CHEM_SPEC", diff --git a/test/monarch/cb05cl_ae5_abs_tol.json b/test/monarch/settings/monarch_cb05/cb05_abs_tol_lower_tol.json similarity index 98% rename from test/monarch/cb05cl_ae5_abs_tol.json rename to test/monarch/settings/monarch_cb05/cb05_abs_tol_lower_tol.json index 05584fe86..68eb57885 100644 --- a/test/monarch/cb05cl_ae5_abs_tol.json +++ b/test/monarch/settings/monarch_cb05/cb05_abs_tol_lower_tol.json @@ -52,7 +52,7 @@ { "name" : "HNO3", "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-09 + "absolute integration tolerance" : 1.0E-03 }, { "name" : "HONO", @@ -267,7 +267,7 @@ { "name" : "SULF", "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-09 + "absolute integration tolerance" : 1.0E+00 }, { "name" : "SULRXN", @@ -394,11 +394,6 @@ "type" : "CHEM_SPEC", "absolute integration tolerance" : 1.0E+00 }, - { - "name" : "N2O", - "type" : "CHEM_SPEC", - "absolute integration tolerance" : 1.0E-03 - }, { "name" : "DUMMY", "type" : "CHEM_SPEC", diff --git a/test/monarch/monarch_box_modal/cb05_mechanism.json b/test/monarch/settings/monarch_cb05/cb05_mechanism.json similarity index 100% rename from test/monarch/monarch_box_modal/cb05_mechanism.json rename to test/monarch/settings/monarch_cb05/cb05_mechanism.json diff --git a/test/monarch/monarch_box_modal/cb05_mechanism.noR142R143.json b/test/monarch/settings/monarch_cb05/cb05_mechanism_nobaserates.json similarity index 98% rename from test/monarch/monarch_box_modal/cb05_mechanism.noR142R143.json rename to test/monarch/settings/monarch_cb05/cb05_mechanism_nobaserates.json index 45b4bb992..6f8a7d829 100755 --- a/test/monarch/monarch_box_modal/cb05_mechanism.noR142R143.json +++ b/test/monarch/settings/monarch_cb05/cb05_mechanism_nobaserates.json @@ -13,7 +13,6 @@ "O" : {} }, "orig params" : "TUV_J(4, THETA)", - "base rate" : 4.77e-3, "Fast-J id" : "NO2", "type" : "PHOTOLYSIS" }, @@ -128,7 +127,6 @@ "O" : {} }, "orig params" : "TUV_J(3, THETA)", - "base rate" : 2.53e-4, "Fast-J id" : "O3", "type" : "PHOTOLYSIS" }, @@ -141,7 +139,6 @@ "O1D" : {} }, "orig params" : "TUV_J(2, THETA)", - "base rate" : 2.26e-6, "Fast-J id" : "O3_1d", "type" : "PHOTOLYSIS" }, @@ -216,8 +213,6 @@ "O" : {} }, "orig params" : "TUV_J(6, THETA)", - "scaling factor" : 0.89, - "base rate" : 1.31e-1, "Fast-J id" : "NO3_X", "type" : "PHOTOLYSIS" }, @@ -230,8 +225,6 @@ "NO" : {} }, "orig params" : "TUV_J(5, THETA)", - "scaling factor" : 0.11, - "base rate" : 1.31e-1, "Fast-J id" : "NO3_L", "type" : "PHOTOLYSIS" }, @@ -399,7 +392,6 @@ "OH" : {} }, "orig params" : "TUV_J(12, THETA)", - "base rate" : 9.18e-4, "Fast-J id" : "HONO", "type" : "PHOTOLYSIS" }, @@ -583,7 +575,6 @@ "OH" : { "yield" : 2.000 } }, "orig params" : "TUV_J(11, THETA)", - "base rate" : 2.59e-6, "Fast-J id" : "H2O2", "type" : "PHOTOLYSIS" }, @@ -814,7 +805,6 @@ "NO3" : { "yield" : 0.390 } }, "orig params" : "TUV_J(14, THETA)", - "base rate" : 1.89e-6, "Fast-J id" : "HO2NO2", "type" : "PHOTOLYSIS" }, @@ -828,7 +818,6 @@ "NO2" : {} }, "orig params" : "TUV_J(13, THETA)", - "base rate" : 8.61e-8, "Fast-J id" : "HONO2", "type" : "PHOTOLYSIS" }, @@ -842,7 +831,6 @@ "NO3" : {} }, "orig params" : "TUV_J(8, THETA)", - "base rate" : 0.00e+1, "Fast-J id" : "N2O5", "type" : "PHOTOLYSIS" }, @@ -983,7 +971,6 @@ "PAR" : { "yield" : -0.660 } }, "orig params" : "TUV_J(91, THETA)", - "base rate" : 4.77e-7, "Fast-J id" : "NTR", "type" : "PHOTOLYSIS" }, @@ -1016,7 +1003,6 @@ "ALDX" : { "yield" : 0.500 } }, "orig params" : "TUV_J(26, THETA)", - "base rate" : 1.81e-6, "Fast-J id" : "MeOOH", "type" : "PHOTOLYSIS" }, @@ -1127,7 +1113,6 @@ "OH" : {} }, "orig params" : "TUV_J(26, THETA)", - "base rate" : 1.81e-6, "Fast-J id" : "MeOOH", "type" : "PHOTOLYSIS" }, @@ -1173,7 +1158,6 @@ "CO" : {} }, "orig params" : "TUV_J(15, THETA)", - "base rate" : 7.93e-6, "Fast-J id" : "HCHO_a", "type" : "PHOTOLYSIS" }, @@ -1186,7 +1170,6 @@ "CO" : {} }, "orig params" : "TUV_J(16, THETA)", - "base rate" : 2.20e-5, "Fast-J id" : "HCHO_b", "type" : "PHOTOLYSIS" }, @@ -1359,7 +1342,6 @@ "HO2" : {} }, "orig params" : "TUV_J(17, THETA)+TUV_J(19, THETA)", - "base rate" : 2.20e-6, "Fast-J id" : "ALD2", "type" : "PHOTOLYSIS" }, @@ -1430,7 +1412,6 @@ "NO2" : {} }, "orig params" : "TUV_J(28, THETA)", - "base rate" : 0.00e+1, "Fast-J id" : "PAN", "type" : "PHOTOLYSIS" }, @@ -1524,7 +1505,6 @@ "OH" : {} }, "orig params" : "TUV_J(26, THETA)", - "base rate" : 1.81e-6, "Fast-J id" : "PACD", "type" : "PHOTOLYSIS" }, @@ -1601,7 +1581,6 @@ "HO2" : {} }, "orig params" : "TUV_J(20, THETA)", - "base rate" : 2.20e-6, "Fast-J id" : "ALDX", "type" : "PHOTOLYSIS" }, @@ -1674,7 +1653,6 @@ "NO2" : {} }, "orig params" : "TUV_J(28, THETA)", - "base rate" : 0.00e+1, "Fast-J id" : "PAN", "type" : "PHOTOLYSIS" }, @@ -2219,7 +2197,6 @@ }, "scaling factor" : 9.0, "orig params" : "9.0 * TUV_J(15, THETA)", - "base rate" : 7.17e-5, "Fast-J id" : "HCHO_a", "type" : "PHOTOLYSIS" }, @@ -2312,7 +2289,6 @@ "CO" : {} }, "orig params" : "TUV_J(24, THETA)", - "base rate" : 7.64e-5, "Fast-J id" : "MGLY", "type" : "PHOTOLYSIS" }, @@ -2336,6 +2312,49 @@ "B" : 0.0E+00, "C" : -0.0E+00 }, + { + "rxn id" : "R142", + "reactants" : { + "OH" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.912 } , + "FORM" : { "yield" : 0.629 } , + "XO2" : { "yield" : 0.991 } , + "HO2" : { "yield" : 0.912 } , + "XO2N" : { "yield" : 0.088 }, + "ISOPRXN" : {} + }, + "orig params" : "CMAQ_1to4(2.54E-11, 0.0E+00, -407.6)", + "type" : "ARRHENIUS", + "A" : 2.54E-11, + "B" : 0.0E+00, + "C" : 407.6 + }, + { + "rxn id" : "R143", + "reactants" : { + "O3" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.650 } , + "FORM" : { "yield" : 0.600 } , + "XO2" : { "yield" : 0.200 } , + "HO2" : { "yield" : 0.066 } , + "OH" : { "yield" : 0.266 } , + "CXO3" : { "yield" : 0.200 } , + "ALDX" : { "yield" : 0.150 } , + "PAR" : { "yield" : 0.350 } , + "CO" : { "yield" : 0.066 } + }, + "orig params" : "CMAQ_1to4(7.86E-15, 0.0E+00, 1912.0)", + "type" : "ARRHENIUS", + "A" : 7.86E-15, + "B" : 0.0E+00, + "C" : -1912.0 + }, { "rxn id" : "R144", "reactants" : { @@ -2443,7 +2462,6 @@ }, "scaling factor" : 0.0036, "orig params" : "0.0036 * TUV_J(89, THETA)", - "base rate" : 5.50e-7, "Fast-J id" : "ISPD", "type" : "PHOTOLYSIS" }, @@ -2619,7 +2637,6 @@ "CL" : { "yield" : 2.000 } }, "orig params" : "TUV_J(58, THETA)", - "base rate" : 0.00e+1, "notes" : "Fast-J does not currently calculate Cl2 photolysis", "type" : "PHOTOLYSIS" }, @@ -3103,7 +3120,6 @@ "O" : { "yield" : 2 } }, "orig params" : "TUV_J(1, THETA)", - "base rate" : 0.00e+1, "notes" : "Fast-J does not currently calculate O2 photolysis", "type" : "PHOTOLYSIS" } diff --git a/test/monarch/monarch_box_binned/cb05_mechanism.noR142R143.json b/test/monarch/settings/monarch_cb05/cb05_mechanism_scalingfactor.json similarity index 98% rename from test/monarch/monarch_box_binned/cb05_mechanism.noR142R143.json rename to test/monarch/settings/monarch_cb05/cb05_mechanism_scalingfactor.json index 45b4bb992..76c1517bc 100755 --- a/test/monarch/monarch_box_binned/cb05_mechanism.noR142R143.json +++ b/test/monarch/settings/monarch_cb05/cb05_mechanism_scalingfactor.json @@ -216,7 +216,7 @@ "O" : {} }, "orig params" : "TUV_J(6, THETA)", - "scaling factor" : 0.89, + "scaling" : 0.89, "base rate" : 1.31e-1, "Fast-J id" : "NO3_X", "type" : "PHOTOLYSIS" @@ -230,7 +230,7 @@ "NO" : {} }, "orig params" : "TUV_J(5, THETA)", - "scaling factor" : 0.11, + "scaling" : 0.11, "base rate" : 1.31e-1, "Fast-J id" : "NO3_L", "type" : "PHOTOLYSIS" @@ -2336,6 +2336,49 @@ "B" : 0.0E+00, "C" : -0.0E+00 }, + { + "rxn id" : "R142", + "reactants" : { + "OH" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.912 } , + "FORM" : { "yield" : 0.629 } , + "XO2" : { "yield" : 0.991 } , + "HO2" : { "yield" : 0.912 } , + "XO2N" : { "yield" : 0.088 }, + "ISOPRXN" : {} + }, + "orig params" : "CMAQ_1to4(2.54E-11, 0.0E+00, -407.6)", + "type" : "ARRHENIUS", + "A" : 2.54E-11, + "B" : 0.0E+00, + "C" : 407.6 + }, + { + "rxn id" : "R143", + "reactants" : { + "O3" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.650 } , + "FORM" : { "yield" : 0.600 } , + "XO2" : { "yield" : 0.200 } , + "HO2" : { "yield" : 0.066 } , + "OH" : { "yield" : 0.266 } , + "CXO3" : { "yield" : 0.200 } , + "ALDX" : { "yield" : 0.150 } , + "PAR" : { "yield" : 0.350 } , + "CO" : { "yield" : 0.066 } + }, + "orig params" : "CMAQ_1to4(7.86E-15, 0.0E+00, 1912.0)", + "type" : "ARRHENIUS", + "A" : 7.86E-15, + "B" : 0.0E+00, + "C" : -1912.0 + }, { "rxn id" : "R144", "reactants" : { diff --git a/test/monarch/settings/monarch_cb05/cb05_mechanism_yarwood2005.json b/test/monarch/settings/monarch_cb05/cb05_mechanism_yarwood2005.json new file mode 100644 index 000000000..c337d1ec5 --- /dev/null +++ b/test/monarch/settings/monarch_cb05/cb05_mechanism_yarwood2005.json @@ -0,0 +1,2634 @@ +{ "camp-data" : [ + { + "name" : "MONARCH mod37", + "type" : "MECHANISM", + "reactions" : [ + { + "rxn id" : "R1", + "reactants" : { + "NO2" : {} + }, + "products" : { + "NO" : {} , + "O" : {} + }, + "orig params" : "TUV_J(4, THETA)", + "Fast-J id" : "NO2", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R2", + "reactants" : { + "O" : {} , + "O2" : {} , + "M" : {} + }, + "products" : { + "O3" : {} , + "M" : {} + }, + "orig params" : "O2 * M * CMAQ_1to4(6.0E-34, -2.4, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 6.0E-34, + "B" : -2.4, + "C" : -0.0E+00 + }, + { + "rxn id" : "R3", + "reactants" : { + "O3" : {} , + "NO" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(3.0E-12, 0.0E+00, 1500.0)", + "type" : "ARRHENIUS", + "A" : 3.0E-12, + "B" : 0.0E+00, + "C" : -1500.0 + }, + { + "rxn id" : "R4", + "reactants" : { + "O" : {} , + "NO2" : {} + }, + "products" : { + "NO" : {} + }, + "orig params" : "CMAQ_1to4(5.6E-12, 0.0E+00, -180.0)", + "type" : "ARRHENIUS", + "A" : 5.6E-12, + "B" : 0.0E+00, + "C" : 180.0 + }, + { + "rxn id" : "R5", + "reactants" : { + "O" : {} , + "NO2" : {} + }, + "products" : { + "NO3" : {} + }, + "orig params" : "CMAQ_10(2.5E-31, -1.8, 0.0E+00, 2.2E-11, -0.7, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 2.5E-31, + "k0_B" : -1.8, + "k0_C" : -0.0E+00, + "kinf_A" : 2.2E-11, + "kinf_B" : -0.7, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R6", + "reactants" : { + "O" : {} , + "NO" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_10(9.0E-32, -1.5, 0.0E+00, 3.0E-11, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 9.0E-32, + "k0_B" : -1.5, + "k0_C" : -0.0E+00, + "kinf_A" : 3.0E-11, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R7", + "reactants" : { + "NO2" : {} , + "O3" : {} + }, + "products" : { + "NO3" : {} + }, + "orig params" : "CMAQ_1to4(1.2E-13, 0.0E+00, 2450.0)", + "type" : "ARRHENIUS", + "A" : 1.2E-13, + "B" : 0.0E+00, + "C" : -2450.0 + }, + { + "rxn id" : "R8", + "reactants" : { + "O3" : {} + }, + "products" : { + "O" : {} + }, + "orig params" : "TUV_J(3, THETA)", + "Fast-J id" : "O3", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R9", + "reactants" : { + "O3" : {} + }, + "products" : { + "O1D" : {} + }, + "orig params" : "TUV_J(2, THETA)", + "Fast-J id" : "O3_1d", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R10", + "reactants" : { + "O1D" : {} , + "M" : {} + }, + "products" : { + "O" : {} , + "M" : {} + }, + "orig params" : "M * CMAQ_1to4(2.1E-11, 0.0E+00, -102.0)", + "type" : "ARRHENIUS", + "A" : 2.1E-11, + "B" : 0.0E+00, + "C" : 102.0 + }, + { + "rxn id" : "R11", + "reactants" : { + "O1D" : {} , + "H2O" : {} + }, + "products" : { + "OH" : { "yield" : 2.000 } + }, + "orig params" : "H2O * CMAQ_1to4(2.2E-10, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.2E-10, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R12", + "reactants" : { + "O3" : {} , + "OH" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(1.7E-12, 0.0E+00, 940.0)", + "type" : "ARRHENIUS", + "A" : 1.7E-12, + "B" : 0.0E+00, + "C" : -940.0 + }, + { + "rxn id" : "R13", + "reactants" : { + "O3" : {} , + "HO2" : {} + }, + "products" : { + "OH" : {} + }, + "orig params" : "CMAQ_1to4(1.0E-14, 0.0E+00, 490.0)", + "type" : "ARRHENIUS", + "A" : 1.0E-14, + "B" : 0.0E+00, + "C" : -490.0 + }, + { + "rxn id" : "R14", + "reactants" : { + "NO3" : {} + }, + "products" : { + "NO2" : {} , + "O" : {} + }, + "orig params" : "TUV_J(6, THETA)", + "Fast-J id" : "NO3_X", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R15", + "reactants" : { + "NO3" : {} + }, + "products" : { + "NO" : {} + }, + "orig params" : "TUV_J(5, THETA)", + "Fast-J id" : "NO3_L", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R16", + "reactants" : { + "NO3" : {} , + "NO" : {} + }, + "products" : { + "NO2" : { "yield" : 2.000 } + }, + "orig params" : "CMAQ_1to4(1.5E-11, 0.0E+00, -170.0)", + "type" : "ARRHENIUS", + "A" : 1.5E-11, + "B" : 0.0E+00, + "C" : 170.0 + }, + { + "rxn id" : "R17", + "reactants" : { + "NO3" : {} , + "NO2" : {} + }, + "products" : { + "NO" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(4.5E-14, 0.0E+00, 1260.0)", + "type" : "ARRHENIUS", + "A" : 4.5E-14, + "B" : 0.0E+00, + "C" : -1260.0 + }, + { + "rxn id" : "R18", + "reactants" : { + "NO3" : {} , + "NO2" : {} + }, + "products" : { + "N2O5" : {} + }, + "orig params" : "CMAQ_10(2.0E-30, -4.4, 0.0E+00, 1.4E-12, -0.7, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 2.0E-30, + "k0_B" : -4.4, + "k0_C" : -0.0E+00, + "kinf_A" : 1.4E-12, + "kinf_B" : -0.7, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R19", + "reactants" : { + "N2O5" : {} , + "H2O" : {} + }, + "products" : { + "HNO3" : { "yield" : 2.000 } + }, + "orig params" : "H2O * CMAQ_1to4(2.5E-22, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.5E-22, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R20", + "reactants" : { + "N2O5" : {} , + "H2O" : { "qty" : 2 } + }, + "products" : { + "HNO3" : { "yield" : 2.000 } + }, + "orig params" : "H2O**2 * CMAQ_1to4(1.8E-39, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.8E-39, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R21", + "reactants" : { + "N2O5" : {} + }, + "products" : { + "NO3" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_10(1.0E-03, -3.5, 11000.0, 9.7E+14, 0.1, 11080.0, 0.45, 1.0)", + "type" : "TROE", + "k0_A" : 1.0E-03, + "k0_B" : -3.5, + "k0_C" : -11000.0, + "kinf_A" : 9.7E+14, + "kinf_B" : 0.1, + "kinf_C" : -11080.0, + "Fc" : 0.45, + "N" : 1.0 + }, + { + "rxn id" : "R22", + "reactants" : { + "NO" : { "qty" : 2 } , + "O2" : {} + }, + "products" : { + "NO2" : { "yield" : 2.000 } + }, + "orig params" : "O2 * CMAQ_1to4(3.3E-39, 0.0E+00, -530.0)", + "type" : "ARRHENIUS", + "A" : 3.3E-39, + "B" : 0.0E+00, + "C" : 530.0 + }, + { + "rxn id" : "R23", + "reactants" : { + "NO" : {} , + "NO2" : {} , + "H2O" : {} + }, + "products" : { + "HONO" : { "yield" : 2.000 } + }, + "orig params" : "H2O * CMAQ_1to4(5.0E-40, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.0E-40, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R24", + "reactants" : { + "NO" : {} , + "OH" : {} + }, + "products" : { + "HONO" : {} + }, + "orig params" : "CMAQ_10(7.0E-31, -2.6, 0.0E+00, 3.6E-11, -0.1, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 7.0E-31, + "k0_B" : -2.6, + "k0_C" : -0.0E+00, + "kinf_A" : 3.6E-11, + "kinf_B" : -0.1, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R25", + "reactants" : { + "HONO" : {} + }, + "products" : { + "NO" : {} , + "OH" : {} + }, + "orig params" : "TUV_J(12, THETA)", + "Fast-J id" : "HONO", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R26", + "reactants" : { + "OH" : {} , + "HONO" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(1.8E-11, 0.0E+00, 390.0)", + "type" : "ARRHENIUS", + "A" : 1.8E-11, + "B" : 0.0E+00, + "C" : -390.0 + }, + { + "rxn id" : "R27", + "reactants" : { + "HONO" : { "qty" : 2 } + }, + "products" : { + "NO" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(1.0E-20, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.0E-20, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R28", + "reactants" : { + "NO2" : {} , + "OH" : {} + }, + "products" : { + "HNO3" : {} + }, + "orig params" : "CMAQ_10(2.0E-30, -3.0, 0.0E+00, 2.5E-11, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 2.0E-30, + "k0_B" : -3.0, + "k0_C" : -0.0E+00, + "kinf_A" : 2.5E-11, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R29", + "reactants" : { + "OH" : {} , + "HNO3" : {} + }, + "products" : { + "NO3" : {} + }, + "orig params" : "CMAQ_8(2.4E-14, -460.0, 2.7E-17, -2199.0, 6.5E-34, -1335.0)", + "type" : "CMAQ_OH_HNO3", + "k0_A" : 2.4E-14, + "k0_C" : 460.0, + "k2_A" : 2.7E-17, + "k2_C" : 2199.0, + "k3_A" : 6.5E-34, + "k3_C" : 1335.0 + }, + { + "rxn id" : "R30", + "reactants" : { + "HO2" : {} , + "NO" : {} + }, + "products" : { + "OH" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(3.5E-12, 0.0E+00, -250.0)", + "type" : "ARRHENIUS", + "A" : 3.5E-12, + "B" : 0.0E+00, + "C" : 250.0 + }, + { + "rxn id" : "R31", + "reactants" : { + "HO2" : {} , + "NO2" : {} + }, + "products" : { + "PNA" : {} + }, + "orig params" : "CMAQ_10(1.8E-31, -3.2, 0.0E+00, 4.7E-12, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 1.8E-31, + "k0_B" : -3.2, + "k0_C" : -0.0E+00, + "kinf_A" : 4.7E-12, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R32", + "reactants" : { + "PNA" : {} + }, + "products" : { + "HO2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_10(4.1E-5, 0.0E+00, 10650.0, 4.8E15, 0.0E+00, 11170.0, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 4.1E-5, + "k0_B" : 0.0E+00, + "k0_C" : -10650.0, + "kinf_A" : 4.8E15, + "kinf_B" : 0.0E+00, + "kinf_C" : -11170.0, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R33", + "reactants" : { + "OH" : {} , + "PNA" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(1.3E-12, 0.0E+00, -380.0)", + "type" : "ARRHENIUS", + "A" : 1.3E-12, + "B" : 0.0E+00, + "C" : 380.0 + }, + { + "rxn id" : "R34", + "reactants" : { + "HO2" : { "qty" : 2 } + }, + "products" : { + "H2O2" : {} + }, + "orig params" : "CMAQ_9(2.3E-13, -6.0E+02, 1.7E-33, -1.0E+03)", + "type" : "CMAQ_H2O2", + "k1_A" : 2.3E-13, + "k1_C" : 6.0E+02, + "k2_A" : 1.7E-33, + "k2_C" : 1.0E+03 + }, + { + "rxn id" : "R35", + "reactants" : { + "HO2" : { "qty" : 2 } , + "H2O" : {} + }, + "products" : { + "H2O2" : {} + }, + "orig params" : "H2O * CMAQ_9(3.22E-34, -2.8E+03, 2.38E-54, -3.2E+3)", + "type" : "CMAQ_H2O2", + "k1_A" : 3.22E-34, + "k1_C" : 2.8E+03, + "k2_A" : 2.38E-54, + "k2_C" : 3.2E+3 + }, + { + "rxn id" : "R36", + "reactants" : { + "H2O2" : {} + }, + "products" : { + "OH" : { "yield" : 2.000 } + }, + "orig params" : "TUV_J(11, THETA)", + "Fast-J id" : "H2O2", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R37", + "reactants" : { + "OH" : {} , + "H2O2" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(2.9E-12, 0.0E+00, 160.0)", + "type" : "ARRHENIUS", + "A" : 2.9E-12, + "B" : 0.0E+00, + "C" : -160.0 + }, + { + "rxn id" : "R38", + "reactants" : { + "O1D" : {} , + "H2" : {} + }, + "products" : { + "OH" : {} , + "HO2" : {} + }, + "orig params" : "H2 * CMAQ_1to4(1.1E-10, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.1E-10, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R39", + "reactants" : { + "OH" : {} , + "H2" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "H2 * CMAQ_1to4(5.5E-12, 0.0E+00, 2000.0) {IUPAC '06 at 230K evaluates 9/10 * this}", + "type" : "ARRHENIUS", + "A" : 5.5E-12, + "B" : 0.0E+00, + "C" : -2000.0 + }, + { + "rxn id" : "R40", + "reactants" : { + "OH" : {} , + "O" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(2.2E-11, 0.0E+00, -120.0)", + "type" : "ARRHENIUS", + "A" : 2.2E-11, + "B" : 0.0E+00, + "C" : 120.0 + }, + { + "rxn id" : "R41", + "reactants" : { + "OH" : { "qty" : 2 } + }, + "products" : { + "O" : {} + }, + "orig params" : "CMAQ_1to4(4.2E-12, 0.0E+00, 240.0) {IUPAC '06 at 230K evaluates 4/3* this}", + "type" : "ARRHENIUS", + "A" : 4.2E-12, + "B" : 0.0E+00, + "C" : -240.0 + }, + { + "rxn id" : "R42", + "reactants" : { + "OH" : { "qty" : 2 } + }, + "products" : { + "H2O2" : {} + }, + "orig params" : "CMAQ_10(6.9E-31, -1.0, 0.0E+00, 2.6E-11, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 6.9E-31, + "k0_B" : -1.0, + "k0_C" : -0.0E+00, + "kinf_A" : 2.6E-11, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R43", + "reactants" : { + "OH" : {} , + "HO2" : {} + }, + "products" : { + "DUMMY" : {} + }, + "orig params" : "CMAQ_1to4(4.8E-11, 0.0E+00, -250.0)", + "type" : "ARRHENIUS", + "A" : 4.8E-11, + "B" : 0.0E+00, + "C" : 250.0 + }, + { + "rxn id" : "R44", + "reactants" : { + "HO2" : {} , + "O" : {} + }, + "products" : { + "OH" : {} + }, + "orig params" : "CMAQ_1to4(3.0E-11, 0.0E+00, -200.0)", + "type" : "ARRHENIUS", + "A" : 3.0E-11, + "B" : 0.0E+00, + "C" : 200.0 + }, + { + "rxn id" : "R45", + "reactants" : { + "H2O2" : {} , + "O" : {} + }, + "products" : { + "OH" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(1.4E-12, 0.0E+00, 2000.0)", + "type" : "ARRHENIUS", + "A" : 1.4E-12, + "B" : 0.0E+00, + "C" : -2000.0 + }, + { + "rxn id" : "R46", + "reactants" : { + "NO3" : {} , + "O" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(1.0E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.0E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R47", + "reactants" : { + "NO3" : {} , + "OH" : {} + }, + "products" : { + "HO2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(2.2E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.2E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R48", + "reactants" : { + "NO3" : {} , + "HO2" : {} + }, + "products" : { + "HNO3" : {} + }, + "orig params" : "CMAQ_1to4(3.5E-12, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.5E-12, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R49", + "reactants" : { + "NO3" : {} , + "O3" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(1.0E-17, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.0E-17, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R50", + "reactants" : { + "NO3" : { "qty" : 2 } + }, + "products" : { + "NO2" : { "yield" : 2.000 } + }, + "orig params" : "CMAQ_1to4(8.5E-13, 0.0E+00, 2450.0)", + "type" : "ARRHENIUS", + "A" : 8.5E-13, + "B" : 0.0E+00, + "C" : -2450.0 + }, + { + "rxn id" : "R51", + "reactants" : { + "PNA" : {} + }, + "products" : { + "HO2" : { "yield" : 0.610 } , + "NO2" : { "yield" : 0.610 } , + "OH" : { "yield" : 0.390 } , + "NO3" : { "yield" : 0.390 } + }, + "orig params" : "TUV_J(14, THETA)", + "Fast-J id" : "HO2NO2", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R52", + "reactants" : { + "HNO3" : {} + }, + "products" : { + "OH" : {} , + "NO2" : {} + }, + "orig params" : "TUV_J(13, THETA)", + "Fast-J id" : "HONO2", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R53", + "reactants" : { + "N2O5" : {} + }, + "products" : { + "NO2" : {} , + "NO3" : {} + }, + "orig params" : "TUV_J(8, THETA)", + "Fast-J id" : "N2O5", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R54", + "reactants" : { + "XO2" : {} , + "NO" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(2.6E-12, 0.0E+00, -365.0)", + "type" : "ARRHENIUS", + "A" : 2.6E-12, + "B" : 0.0E+00, + "C" : 365.0 + }, + { + "rxn id" : "R55", + "reactants" : { + "XO2N" : {} , + "NO" : {} + }, + "products" : { + "NTR" : {} + }, + "orig params" : "CMAQ_1to4(2.6E-12, 0.0E+00, -365.0)", + "type" : "ARRHENIUS", + "A" : 2.6E-12, + "B" : 0.0E+00, + "C" : 365.0 + }, + { + "rxn id" : "R56", + "reactants" : { + "XO2" : {} , + "HO2" : {} + }, + "products" : { + "ROOH" : {} + }, + "orig params" : "CMAQ_1to4(7.5E-13, 0.0E+00, -700.0)", + "type" : "ARRHENIUS", + "A" : 7.5E-13, + "B" : 0.0E+00, + "C" : 700.0 + }, + { + "rxn id" : "R57", + "reactants" : { + "XO2N" : {} , + "HO2" : {} + }, + "products" : { + "ROOH" : {} + }, + "orig params" : "CMAQ_1to4(7.5E-13, 0.0E+00, -700.0)", + "type" : "ARRHENIUS", + "A" : 7.5E-13, + "B" : 0.0E+00, + "C" : 700.0 + }, + { + "rxn id" : "R58", + "reactants" : { + "XO2" : { "qty" : 2 } + }, + "products" : { + "DUMMY" : {} + }, + "orig params" : "CMAQ_1to4(6.8E-14, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 6.8E-14, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R59", + "reactants" : { + "XO2N" : { "qty" : 2 } + }, + "products" : { + "DUMMY" : {} + }, + "orig params" : "CMAQ_1to4(6.8E-14, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 6.8E-14, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R60", + "reactants" : { + "XO2" : {} , + "XO2N" : {} + }, + "products" : { + "DUMMY" : {} + }, + "orig params" : "CMAQ_1to4(6.8E-14, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 6.8E-14, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R61", + "reactants" : { + "NTR" : {} , + "OH" : {} + }, + "products" : { + "HNO3" : {} , + "HO2" : {} , + "FORM" : { "yield" : 0.330 } , + "ALD2" : { "yield" : 0.330 } , + "ALDX" : { "yield" : 0.330 } , + "PAR" : { "yield" : -0.660 } + }, + "orig params" : "CMAQ_1to4(5.9E-13, 0.0E+00, 360.0)", + "type" : "ARRHENIUS", + "A" : 5.9E-13, + "B" : 0.0E+00, + "C" : -360.0 + }, + { + "rxn id" : "R62", + "reactants" : { + "NTR" : {} + }, + "products" : { + "NO2" : {} , + "HO2" : {}, + "FORM" : { "yield" : 0.330 } , + "ALD2" : { "yield" : 0.330 } , + "ALDX" : { "yield" : 0.330 } , + "PAR" : { "yield" : -0.660 } + }, + "orig params" : "TUV_J(91, THETA)", + "Fast-J id" : "NTR", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R63", + "reactants" : { + "ROOH" : {} , + "OH" : {} + }, + "products" : { + "XO2" : {} , + "ALD2" : { "yield" : 0.500 } , + "ALDX" : { "yield" : 0.500 } + }, + "orig params" : "CMAQ_1to4(3.01E-12, 0.0E+00, -190.0)", + "type" : "ARRHENIUS", + "A" : 3.01E-12, + "B" : 0.0E+00, + "C" : 190.0 + }, + { + "rxn id" : "R64", + "reactants" : { + "ROOH" : {} + }, + "products" : { + "OH" : {}, + "HO2" : {} , + "ALD2" : { "yield" : 0.500 } , + "ALDX" : { "yield" : 0.500 } + }, + "orig params" : "TUV_J(26, THETA)", + "Fast-J id" : "MeOOH", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R65", + "reactants" : { + "OH" : {} , + "CO" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_9(1.44E-13, 0.0E+00, 3.43E-33, 0.0E+00)", + "type" : "CMAQ_H2O2", + "k1_A" : 1.44E-13, + "k1_C" : 0.0E+00, + "k2_A" : 3.43E-33, + "k2_C" : 0.0E+00 + }, + { + "rxn id" : "R66", + "reactants" : { + "OH" : {} , + "CH4" : {} + }, + "products" : { + "MEO2" : {} + }, + "orig params" : "CMAQ_1to4(2.45E-12, 0.0E+00, 1775.0)", + "type" : "ARRHENIUS", + "A" : 2.45E-12, + "B" : 0.0E+00, + "C" : -1775.0 + }, + { + "rxn id" : "R67", + "reactants" : { + "MEO2" : {} , + "NO" : {} + }, + "products" : { + "FORM" : {} , + "HO2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(2.8E-12, 0.0E+00, -300.0)", + "type" : "ARRHENIUS", + "A" : 2.8E-12, + "B" : 0.0E+00, + "C" : 300.0 + }, + { + "rxn id" : "R68", + "reactants" : { + "MEO2" : {} , + "HO2" : {} + }, + "products" : { + "MEPX" : {} + }, + "orig params" : "CMAQ_1to4(4.1E-13, 0.0E+00, -750.0)", + "type" : "ARRHENIUS", + "A" : 4.1E-13, + "B" : 0.0E+00, + "C" : 750.0 + }, + { + "rxn id" : "R69", + "reactants" : { + "MEO2" : { "qty" : 2 } + }, + "products" : { + "FORM" : { "yield" : 1.370 } , + "HO2" : { "yield" : 0.740 } , + "MEOH" : { "yield" : 0.630 } + }, + "orig params" : "CMAQ_1to4(9.5E-14, 0.0E+00, -390.0)", + "type" : "ARRHENIUS", + "A" : 9.5E-14, + "B" : 0.0E+00, + "C" : 390.0 + }, + { + "rxn id" : "R70", + "reactants" : { + "MEPX" : {} , + "OH" : {} + }, + "products" : { + "MEO2" : { "yield" : 0.700 } , + "XO2" : { "yield" : 0.300 } , + "HO2" : { "yield" : 0.300 } + }, + "orig params" : "CMAQ_1to4(3.8E-12, 0.0E+00, -200.0)", + "type" : "ARRHENIUS", + "A" : 3.8E-12, + "B" : 0.0E+00, + "C" : 200.0 + }, + { + "rxn id" : "R71", + "reactants" : { + "MEPX" : {} + }, + "products" : { + "FORM" : {}, + "HO2" : {}, + "OH" : {} + }, + "orig params" : "TUV_J(26, THETA)", + "Fast-J id" : "MeOOH", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R72", + "reactants" : { + "MEOH" : {} , + "OH" : {} + }, + "products" : { + "FORM" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(7.3E-12, 0.0E+00, 620.0)", + "type" : "ARRHENIUS", + "A" : 7.3E-12, + "B" : 0.0E+00, + "C" : -620.0 + }, + { + "rxn id" : "R73", + "reactants" : { + "FORM" : {} , + "OH" : {} + }, + "products" : { + "HO2" : {} , + "CO" : {} + }, + "orig params" : "CMAQ_1to4(9.0E-12, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 9.0E-12, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R74", + "reactants" : { + "FORM" : {} + }, + "products" : { + "HO2" : { "yield" : 2.000 } , + "CO" : {} + }, + "orig params" : "TUV_J(15, THETA)", + "Fast-J id" : "HCHO_a", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R75", + "reactants" : { + "FORM" : {} + }, + "products" : { + "CO" : {} + }, + "orig params" : "TUV_J(16, THETA)", + "Fast-J id" : "HCHO_b", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R76", + "reactants" : { + "FORM" : {} , + "O" : {} + }, + "products" : { + "OH" : {} , + "HO2" : {} , + "CO" : {} + }, + "orig params" : "CMAQ_1to4(3.4E-11, 0.0E+00, 1600.0)", + "type" : "ARRHENIUS", + "A" : 3.4E-11, + "B" : 0.0E+00, + "C" : -1600.0 + }, + { + "rxn id" : "R77", + "reactants" : { + "FORM" : {} , + "NO3" : {} + }, + "products" : { + "HNO3" : {} , + "HO2" : {} , + "CO" : {} + }, + "orig params" : "CMAQ_1to4(5.8E-16, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.8E-16, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R78", + "reactants" : { + "FORM" : {} , + "HO2" : {} + }, + "products" : { + "HCO3" : {} + }, + "orig params" : "CMAQ_1to4(9.7E-15, 0.0E+00, -625.0)", + "type" : "ARRHENIUS", + "A" : 9.7E-15, + "B" : 0.0E+00, + "C" : 625.0 + }, + { + "rxn id" : "R79", + "reactants" : { + "HCO3" : {} + }, + "products" : { + "FORM" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(2.4E+12, 0.0E+00, 7000.0)", + "type" : "ARRHENIUS", + "A" : 2.4E+12, + "B" : 0.0E+00, + "C" : -7000.0 + }, + { + "rxn id" : "R80", + "reactants" : { + "HCO3" : {} , + "NO" : {} + }, + "products" : { + "FACD" : {} , + "NO2" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(5.6E-12, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.6E-12, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R81", + "reactants" : { + "HCO3" : {} , + "HO2" : {} + }, + "products" : { + "MEPX" : {} + }, + "orig params" : "CMAQ_1to4(5.6E-15, 0.0E+00, -2300.0)", + "type" : "ARRHENIUS", + "A" : 5.6E-15, + "B" : 0.0E+00, + "C" : 2300.0 + }, + { + "rxn id" : "R82", + "reactants" : { + "FACD" : {} , + "OH" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(4.0E-13, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 4.0E-13, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R83", + "reactants" : { + "ALD2" : {} , + "O" : {} + }, + "products" : { + "C2O3" : {} , + "OH" : {} + }, + "orig params" : "CMAQ_1to4(1.8E-11, 0.0E+00, 1100.0)", + "type" : "ARRHENIUS", + "A" : 1.8E-11, + "B" : 0.0E+00, + "C" : -1100.0 + }, + { + "rxn id" : "R84", + "reactants" : { + "ALD2" : {} , + "OH" : {} + }, + "products" : { + "C2O3" : {} + }, + "orig params" : "CMAQ_1to4(5.6E-12, 0.0E+00, -270.0)", + "type" : "ARRHENIUS", + "A" : 5.6E-12, + "B" : 0.0E+00, + "C" : 270.0 + }, + { + "rxn id" : "R85", + "reactants" : { + "ALD2" : {} , + "NO3" : {} + }, + "products" : { + "C2O3" : {} , + "HNO3" : {} + }, + "orig params" : "CMAQ_1to4(1.4E-12, 0.0E+00, 1900.0)", + "type" : "ARRHENIUS", + "A" : 1.4E-12, + "B" : 0.0E+00, + "C" : -1900.0 + }, + { + "rxn id" : "R86", + "reactants" : { + "ALD2" : {} + }, + "products" : { + "MEO2" : {} , + "CO" : {} , + "HO2" : {} + }, + "orig params" : "TUV_J(17, THETA)+TUV_J(19, THETA)", + "Fast-J id" : "ALD2", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R87", + "reactants" : { + "C2O3" : {} , + "NO" : {} + }, + "products" : { + "MEO2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(8.1E-12, 0.0E+00, -270.0)", + "type" : "ARRHENIUS", + "A" : 8.1E-12, + "B" : 0.0E+00, + "C" : 270.0 + }, + { + "rxn id" : "R88", + "reactants" : { + "C2O3" : {} , + "NO2" : {} + }, + "products" : { + "PAN" : {} + }, + "orig params" : "CMAQ_10(2.7E-28, -7.1, 0.0E+00, 1.2E-11, -0.9, 0.0E+00, 0.3, 1.0)", + "type" : "TROE", + "k0_A" : 2.7E-28, + "k0_B" : -7.1, + "k0_C" : -0.0E+00, + "kinf_A" : 1.2E-11, + "kinf_B" : -0.9, + "kinf_C" : -0.0E+00, + "Fc" : 0.3, + "N" : 1.0 + }, + { + "rxn id" : "R89", + "reactants" : { + "PAN" : {} + }, + "products" : { + "C2O3" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_10(4.9E-3, 0.0E+00, 12100.0, 5.4E16, 0.0E+00, 13830.0, 0.3, 1.0)", + "type" : "TROE", + "k0_A" : 4.9E-3, + "k0_B" : 0.0E+00, + "k0_C" : -12100.0, + "kinf_A" : 5.4E16, + "kinf_B" : 0.0E+00, + "kinf_C" : -13830.0, + "Fc" : 0.3, + "N" : 1.0 + }, + { + "rxn id" : "R90", + "reactants" : { + "PAN" : {} + }, + "products" : { + "C2O3" : {} , + "NO2" : {} + }, + "orig params" : "TUV_J(28, THETA)", + "Fast-J id" : "PAN", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R91", + "reactants" : { + "C2O3" : {} , + "HO2" : {} + }, + "products" : { + "PACD" : { "yield" : 0.800 } , + "AACD" : { "yield" : 0.200 } , + "O3" : { "yield" : 0.200 } + }, + "orig params" : "CMAQ_1to4(4.3E-13, 0.0E+00, -1040.0)", + "type" : "ARRHENIUS", + "A" : 4.3E-13, + "B" : 0.0E+00, + "C" : 1040.0 + }, + { + "rxn id" : "R92", + "reactants" : { + "C2O3" : {} , + "MEO2" : {} + }, + "products" : { + "MEO2" : { "yield" : 0.900 }, + "HO2" : { "yield" : 0.900 } , + "FORM" : {}, + "AACD" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(2.0E-12, 0.0E+00, -500.0)", + "type" : "ARRHENIUS", + "A" : 2.0E-12, + "B" : 0.0E+00, + "C" : 500.0 + }, + { + "rxn id" : "R93", + "reactants" : { + "C2O3" : {} , + "XO2" : {} + }, + "products" : { + "MEO2" : { "yield" : 0.900 } , + "AACD" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(4.4E-13, 0.0E+00, -1070.0)", + "type" : "ARRHENIUS", + "A" : 4.4E-13, + "B" : 0.0E+00, + "C" : 1070.0 + }, + { + "rxn id" : "R94", + "reactants" : { + "C2O3" : { "qty" : 2 } + }, + "products" : { + "MEO2" : { "yield" : 2.000 } + }, + "orig params" : "CMAQ_1to4(2.9E-12, 0.0E+00, -500.0) {same as IUPAC}", + "type" : "ARRHENIUS", + "A" : 2.9E-12, + "B" : 0.0E+00, + "C" : 500.0 + }, + { + "rxn id" : "R95", + "reactants" : { + "PACD" : {} , + "OH" : {} + }, + "products" : { + "C2O3" : {} + }, + "orig params" : "CMAQ_1to4(4.0E-13, 0.0E+00, -200.0)", + "type" : "ARRHENIUS", + "A" : 4.0E-13, + "B" : 0.0E+00, + "C" : 200.0 + }, + { + "rxn id" : "R96", + "reactants" : { + "PACD" : {} + }, + "products" : { + "MEO2" : {} , + "OH" : {} + }, + "scaling factor" : 0.0, + "notes" : "multiplied by zero to match cb05 tech report", + "orig params" : "TUV_J(26, THETA)", + "Fast-J id" : "PACD", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R97", + "reactants" : { + "AACD" : {} , + "OH" : {} + }, + "products" : { + "MEO2" : {} + }, + "orig params" : "CMAQ_1to4(4.0E-13, 0.0E+00, -200.0)", + "type" : "ARRHENIUS", + "A" : 4.0E-13, + "B" : 0.0E+00, + "C" : 200.0 + }, + { + "rxn id" : "R98", + "reactants" : { + "ALDX" : {} , + "O" : {} + }, + "products" : { + "CXO3" : {} , + "OH" : {} + }, + "orig params" : "CMAQ_1to4(1.3E-11, 0.0E+00, 870.0)", + "type" : "ARRHENIUS", + "A" : 1.3E-11, + "B" : 0.0E+00, + "C" : -870.0 + }, + { + "rxn id" : "R99", + "reactants" : { + "ALDX" : {} , + "OH" : {} + }, + "products" : { + "CXO3" : {} + }, + "orig params" : "CMAQ_1to4(5.1E-12, 0.0E+00, -405.0)", + "type" : "ARRHENIUS", + "A" : 5.1E-12, + "B" : 0.0E+00, + "C" : 405.0 + }, + { + "rxn id" : "R100", + "reactants" : { + "ALDX" : {} , + "NO3" : {} + }, + "products" : { + "CXO3" : {} , + "HNO3" : {} + }, + "orig params" : "CMAQ_1to4(6.5E-15, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 6.5E-15, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R101", + "reactants" : { + "ALDX" : {} + }, + "products" : { + "MEO2" : {} , + "CO" : {} , + "HO2" : {} + }, + "orig params" : "TUV_J(20, THETA)", + "Fast-J id" : "ALDX", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R102", + "reactants" : { + "CXO3" : {} , + "NO" : {} + }, + "products" : { + "ALD2" : {} , + "NO2" : {} , + "HO2" : {} , + "XO2" : {} + }, + "orig params" : "CMAQ_1to4(6.7E-12, 0.0E+00, -340.0)", + "type" : "ARRHENIUS", + "A" : 6.7E-12, + "B" : 0.0E+00, + "C" : 340.0 + }, + { + "rxn id" : "R103", + "reactants" : { + "CXO3" : {} , + "NO2" : {} + }, + "products" : { + "PANX" : {} + }, + "orig params" : "CMAQ_10(2.7E-28, -7.1, 0.0E+00, 1.2E-11, -0.9, 0.0E+00, 0.3, 1.0)", + "type" : "TROE", + "k0_A" : 2.7E-28, + "k0_B" : -7.1, + "k0_C" : -0.0E+00, + "kinf_A" : 1.2E-11, + "kinf_B" : -0.9, + "kinf_C" : -0.0E+00, + "Fc" : 0.3, + "N" : 1.0 + }, + { + "rxn id" : "R104", + "reactants" : { + "PANX" : {} + }, + "products" : { + "CXO3" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_10(4.9E-3, 0.0E+00, 12100.0, 5.4E16, 0.0E+00, 13830.0, 0.3, 1.0)", + "type" : "TROE", + "k0_A" : 4.9E-3, + "k0_B" : 0.0E+00, + "k0_C" : -12100.0, + "kinf_A" : 5.4E16, + "kinf_B" : 0.0E+00, + "kinf_C" : -13830.0, + "Fc" : 0.3, + "N" : 1.0 + }, + { + "rxn id" : "R105", + "reactants" : { + "PANX" : {} + }, + "products" : { + "CXO3" : {} , + "NO2" : {} + }, + "orig params" : "TUV_J(28, THETA)", + "Fast-J id" : "PAN", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R106", + "reactants" : { + "PANX" : {} , + "OH" : {} + }, + "products" : { + "ALD2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(3.0E-13, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.0E-13, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R107", + "reactants" : { + "CXO3" : {} , + "HO2" : {} + }, + "products" : { + "PACD" : { "yield" : 0.800 } , + "AACD" : { "yield" : 0.200 } , + "O3" : { "yield" : 0.200 } + }, + "orig params" : "CMAQ_1to4(4.3E-13, 0.0E+00, -1040.0)", + "type" : "ARRHENIUS", + "A" : 4.3E-13, + "B" : 0.0E+00, + "C" : 1040.0 + }, + { + "rxn id" : "R108", + "reactants" : { + "CXO3" : {} , + "MEO2" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.900 } , + "XO2" : { "yield" : 0.900 } , + "HO2" : {} , + "AACD" : { "yield" : 0.100 } , + "FORM" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(2.0E-12, 0.0E+00, -500.0)", + "type" : "ARRHENIUS", + "A" : 2.0E-12, + "B" : 0.0E+00, + "C" : 500.0 + }, + { + "rxn id" : "R109", + "reactants" : { + "CXO3" : {} , + "XO2" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.900 } , + "AACD" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(4.4E-13, 0.0E+00, -1070.0)", + "type" : "ARRHENIUS", + "A" : 4.4E-13, + "B" : 0.0E+00, + "C" : 1070.0 + }, + { + "rxn id" : "R110", + "reactants" : { + "CXO3" : { "qty" : 2 } + }, + "products" : { + "ALD2" : { "yield" : 2.000 } , + "XO2" : { "yield" : 2.000 } , + "HO2" : { "yield" : 2.000 } + }, + "orig params" : "CMAQ_1to4(2.9E-12, 0.0E+00, -500.0)", + "type" : "ARRHENIUS", + "A" : 2.9E-12, + "B" : 0.0E+00, + "C" : 500.0 + }, + { + "rxn id" : "R111", + "reactants" : { + "CXO3" : {} , + "C2O3" : {} + }, + "products" : { + "MEO2" : {} , + "XO2" : {} , + "HO2" : {} , + "ALD2" : {} + }, + "orig params" : "CMAQ_1to4(2.9E-12, 0.0E+00, -500.0)", + "type" : "ARRHENIUS", + "A" : 2.9E-12, + "B" : 0.0E+00, + "C" : 500.0 + }, + { + "rxn id" : "R112", + "reactants" : { + "PAR" : {} , + "OH" : {} + }, + "products" : { + "XO2" : { "yield" : 0.870 } , + "XO2N" : { "yield" : 0.130 } , + "HO2" : { "yield" : 0.110 } , + "ALD2" : { "yield" : 0.060 } , + "PAR" : { "yield" : -0.110 } , + "ROR" : { "yield" : 0.760 } , + "ALDX" : { "yield" : 0.050 } + }, + "orig params" : "CMAQ_1to4(8.1E-13, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 8.1E-13, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R113", + "reactants" : { + "ROR" : {} + }, + "products" : { + "XO2" : { "yield" : 0.960 } , + "ALD2" : { "yield" : 0.600 } , + "HO2" : { "yield" : 0.940 } , + "PAR" : { "yield" : -2.100 } , + "XO2N" : { "yield" : 0.040 } , + "ROR" : { "yield" : 0.020 } , + "ALDX" : { "yield" : 0.500 } + }, + "orig params" : "CMAQ_1to4(1.0E+15, 0.0E+00, 8000.0)", + "type" : "ARRHENIUS", + "A" : 1.0E+15, + "B" : 0.0E+00, + "C" : -8000.0 + }, + { + "rxn id" : "R114", + "reactants" : { + "ROR" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(1.6E+3, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.6E+3, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R115", + "reactants" : { + "ROR" : {} , + "NO2" : {} + }, + "products" : { + "NTR" : {} + }, + "orig params" : "CMAQ_1to4(1.5E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.5E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R116", + "reactants" : { + "O" : {} , + "OLE" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.200 } , + "ALDX" : { "yield" : 0.300 } , + "HO2" : { "yield" : 0.300 } , + "XO2" : { "yield" : 0.200 } , + "CO" : { "yield" : 0.200 } , + "FORM" : { "yield" : 0.200 } , + "XO2N" : { "yield" : 0.010 } , + "PAR" : { "yield" : 0.200 } , + "OH" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(1.0E-11, 0.0E+00, 280.0)", + "type" : "ARRHENIUS", + "A" : 1.0E-11, + "B" : 0.0E+00, + "C" : -280.0 + }, + { + "rxn id" : "R117", + "reactants" : { + "OH" : {} , + "OLE" : {} + }, + "products" : { + "FORM" : { "yield" : 0.800 } , + "ALD2" : { "yield" : 0.330 } , + "ALDX" : { "yield" : 0.620 } , + "XO2" : { "yield" : 0.800 } , + "HO2" : { "yield" : 0.950 } , + "PAR" : { "yield" : -0.700 } + }, + "orig params" : "CMAQ_1to4(3.2E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.2E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R118", + "reactants" : { + "O3" : {} , + "OLE" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.180 } , + "FORM" : { "yield" : 0.740 } , + "ALDX" : { "yield" : 0.320 } , + "XO2" : { "yield" : 0.220 } , + "OH" : { "yield" : 0.100 } , + "CO" : { "yield" : 0.330 } , + "HO2" : { "yield" : 0.440 } , + "PAR" : { "yield" : -1.000 } + }, + "orig params" : "CMAQ_1to4(6.5E-15, 0.0E+00, 1900.0)", + "type" : "ARRHENIUS", + "A" : 6.5E-15, + "B" : 0.0E+00, + "C" : -1900.0 + }, + { + "rxn id" : "R119", + "reactants" : { + "NO3" : {} , + "OLE" : {} + }, + "products" : { + "NO2" : {} , + "FORM" : {} , + "XO2" : { "yield" : 0.910 } , + "XO2N" : { "yield" : 0.090 } , + "ALDX" : { "yield" : 0.560 } , + "ALD2" : { "yield" : 0.350 } , + "PAR" : { "yield" : -1.000 } + }, + "orig params" : "CMAQ_1to4(7.0E-13, 0.0E+00, 2160.0)", + "type" : "ARRHENIUS", + "A" : 7.0E-13, + "B" : 0.0E+00, + "C" : -2160.0 + }, + { + "rxn id" : "R120", + "reactants" : { + "O" : {} , + "ETH" : {} + }, + "products" : { + "FORM" : {} , + "HO2" : { "yield" : 1.700 } , + "CO" : {} , + "XO2" : { "yield" : 0.700 } , + "OH" : { "yield" : 0.300 } + }, + "orig params" : "CMAQ_1to4(1.04E-11, 0.0E+00, 792.0)", + "type" : "ARRHENIUS", + "A" : 1.04E-11, + "B" : 0.0E+00, + "C" : -792.0 + }, + { + "rxn id" : "R121", + "reactants" : { + "OH" : {} , + "ETH" : {} + }, + "products" : { + "XO2" : {} , + "FORM" : { "yield" : 1.560 } , + "ALDX" : { "yield" : 0.220 } , + "HO2" : {} + }, + "orig params" : "CMAQ_10(1.0E-28, -0.8, 0.0E+00, 8.8E-12, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 1.0E-28, + "k0_B" : -0.8, + "k0_C" : -0.0E+00, + "kinf_A" : 8.8E-12, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R122", + "reactants" : { + "O3" : {} , + "ETH" : {} + }, + "products" : { + "FORM" : {} , + "CO" : { "yield" : 0.630 } , + "HO2" : { "yield" : 0.130 } , + "OH" : { "yield" : 0.130 } , + "FACD" : { "yield" : 0.370 } + }, + "orig params" : "CMAQ_1to4(1.2E-14, 0.0E+00, 2630.0)", + "type" : "ARRHENIUS", + "A" : 1.2E-14, + "B" : 0.0E+00, + "C" : -2630.0 + }, + { + "rxn id" : "R123", + "reactants" : { + "NO3" : {} , + "ETH" : {} + }, + "products" : { + "NO2" : {} , + "XO2" : {} , + "FORM" : { "yield" : 2.0 } + }, + "orig params" : "CMAQ_1to4(3.3E-12, 0.0E+00, 2880.0)", + "type" : "ARRHENIUS", + "A" : 3.3E-12, + "B" : 0.0E+00, + "C" : -2880.0 + }, + { + "rxn id" : "R124", + "reactants" : { + "IOLE" : {} , + "O" : {} + }, + "products" : { + "ALD2" : { "yield" : 1.240 } , + "ALDX" : { "yield" : 0.660 } , + "HO2" : { "yield" : 0.100 } , + "XO2" : { "yield" : 0.100 } , + "CO" : { "yield" : 0.100 } , + "PAR" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(2.3E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.3E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R125", + "reactants" : { + "IOLE" : {} , + "OH" : {} + }, + "products" : { + "ALD2" : { "yield" : 1.300 } , + "ALDX" : { "yield" : 0.700 } , + "HO2" : {}, + "XO2" : {} + }, + "orig params" : "CMAQ_1to4(1.0E-11, 0.0E+00, -550.0)", + "type" : "ARRHENIUS", + "A" : 1.0E-11, + "B" : 0.0E+00, + "C" : 550.0 + }, + { + "rxn id" : "R126", + "reactants" : { + "IOLE" : {} , + "O3" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.650 } , + "ALDX" : { "yield" : 0.350 } , + "FORM" : { "yield" : 0.250 } , + "CO" : { "yield" : 0.250 } , + "O" : { "yield" : 0.500 } , + "OH" : { "yield" : 0.500 } , + "HO2" : { "yield" : 0.500 } + }, + "orig params" : "CMAQ_1to4(8.4E-15, 0.0E+00, 1100.0)", + "type" : "ARRHENIUS", + "A" : 8.4E-15, + "B" : 0.0E+00, + "C" : -1100.0 + }, + { + "rxn id" : "R127", + "reactants" : { + "IOLE" : {} , + "NO3" : {} + }, + "products" : { + "ALD2" : { "yield" : 1.180 } , + "ALDX" : { "yield" : 0.640 } , + "HO2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(9.6E-13, 0.0E+00, 270.0)", + "type" : "ARRHENIUS", + "A" : 9.6E-13, + "B" : 0.0E+00, + "C" : -270.0 + }, + { + "rxn id" : "R128", + "reactants" : { + "TOL" : {} , + "OH" : {} + }, + "products" : { + "HO2" : { "yield" : 0.440 } , + "XO2" : { "yield" : 0.080 } , + "CRES" : { "yield" : 0.360 } , + "TO2" : { "yield" : 0.560 } + }, + "orig params" : "CMAQ_1to4(1.8E-12, 0.0E+00, -355.0)", + "type" : "ARRHENIUS", + "A" : 1.8E-12, + "B" : 0.0E+00, + "C" : 355.0 + }, + { + "rxn id" : "R129", + "reactants" : { + "TO2" : {} , + "NO" : {} + }, + "products" : { + "NO2" : { "yield" : 0.900 } , + "HO2" : { "yield" : 0.900 } , + "OPEN" : { "yield" : 0.900 } , + "NTR" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(8.1E-12, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 8.1E-12, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R130", + "reactants" : { + "TO2" : {} + }, + "products" : { + "CRES" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(4.2E+00, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 4.2E+00, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R131", + "reactants" : { + "OH" : {} , + "CRES" : {} + }, + "products" : { + "CRO" : { "yield" : 0.400 } , + "XO2" : { "yield" : 0.600 } , + "HO2" : { "yield" : 0.600 } , + "OPEN" : { "yield" : 0.300 } + }, + "orig params" : "CMAQ_1to4(4.1E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 4.1E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R132", + "reactants" : { + "CRES" : {} , + "NO3" : {} + }, + "products" : { + "CRO" : {} , + "HNO3" : {} + }, + "orig params" : "CMAQ_1to4(2.2E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.2E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R133", + "reactants" : { + "CRO" : {} , + "NO2" : {} + }, + "products" : { + "NTR" : {} + }, + "orig params" : "CMAQ_1to4(1.4E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.4E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R134", + "reactants" : { + "CRO" : {} , + "HO2" : {} + }, + "products" : { + "CRES" : {} + }, + "orig params" : "CMAQ_1to4(5.5E-12, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.5E-12, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R135", + "reactants" : { + "OPEN" : {} + }, + "products" : { + "C2O3" : {} , + "HO2" : {} , + "CO" : {} + }, + "scaling factor" : 9.0, + "orig params" : "9.0 * TUV_J(15, THETA)", + "Fast-J id" : "HCHO_a", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R136", + "reactants" : { + "OPEN" : {} , + "OH" : {} + }, + "products" : { + "XO2" : {} , + "CO" : { "yield" : 2.000 } , + "HO2" : { "yield" : 2.000 } , + "C2O3" : {} , + "FORM" : {} + }, + "orig params" : "CMAQ_1to4(3.0E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.0E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R137", + "reactants" : { + "OPEN" : {} , + "O3" : {} + }, + "products" : { + "ALDX" : { "yield" : 0.030 } , + "C2O3" : { "yield" : 0.620 } , + "FORM" : { "yield" : 0.700 } , + "XO2" : { "yield" : 0.030 } , + "CO" : { "yield" : 0.690 } , + "OH" : { "yield" : 0.080 } , + "HO2" : { "yield" : 0.760 } , + "MGLY" : { "yield" : 0.200 } + }, + "orig params" : "CMAQ_1to4(5.4E-17, 0.0E+00, 500.0)", + "type" : "ARRHENIUS", + "A" : 5.4E-17, + "B" : 0.0E+00, + "C" : -500.0 + }, + { + "rxn id" : "R138", + "reactants" : { + "OH" : {} , + "XYL" : {} + }, + "products" : { + "HO2" : { "yield" : 0.700 } , + "XO2" : { "yield" : 0.500 } , + "CRES" : { "yield" : 0.200 } , + "MGLY" : { "yield" : 0.800 } , + "PAR" : { "yield" : 1.100 } , + "TO2" : { "yield" : 0.300 } + }, + "orig params" : "CMAQ_1to4(1.7E-11, 0.0E+00, -116.0)", + "type" : "ARRHENIUS", + "A" : 1.7E-11, + "B" : 0.0E+00, + "C" : 116.0 + }, + { + "rxn id" : "R139", + "reactants" : { + "OH" : {} , + "MGLY" : {} + }, + "products" : { + "XO2" : {} , + "C2O3" : {} + }, + "orig params" : "CMAQ_1to4(1.8E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.7E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R140", + "reactants" : { + "MGLY" : {} + }, + "products" : { + "C2O3" : {} , + "HO2" : {} , + "CO" : {} + }, + "orig params" : "TUV_J(24, THETA)", + "Fast-J id" : "MGLY", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R141", + "reactants" : { + "O" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.750 } , + "FORM" : { "yield" : 0.500 } , + "XO2" : { "yield" : 0.250 } , + "HO2" : { "yield" : 0.250 } , + "CXO3" : { "yield" : 0.250 } , + "PAR" : { "yield" : 0.250 } + }, + "orig params" : "CMAQ_1to4(3.6E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.6E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R142", + "reactants" : { + "OH" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.912 } , + "FORM" : { "yield" : 0.629 } , + "XO2" : { "yield" : 0.991 } , + "HO2" : { "yield" : 0.912 } , + "XO2N" : { "yield" : 0.088 } + }, + "orig params" : "CMAQ_1to4(2.54E-11, 0.0E+00, -407.6)", + "type" : "ARRHENIUS", + "A" : 2.54E-11, + "B" : 0.0E+00, + "C" : 407.6 + }, + { + "rxn id" : "R143", + "reactants" : { + "O3" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.650 } , + "FORM" : { "yield" : 0.600 } , + "XO2" : { "yield" : 0.200 } , + "HO2" : { "yield" : 0.066 } , + "OH" : { "yield" : 0.266 } , + "CXO3" : { "yield" : 0.200 } , + "ALDX" : { "yield" : 0.150 } , + "PAR" : { "yield" : 0.350 } , + "CO" : { "yield" : 0.066 } + }, + "orig params" : "CMAQ_1to4(7.86E-15, 0.0E+00, 1912.0)", + "type" : "ARRHENIUS", + "A" : 7.86E-15, + "B" : 0.0E+00, + "C" : -1912.0 + }, + { + "rxn id" : "R144", + "reactants" : { + "NO3" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.200 } , + "NTR" : { "yield" : 0.800 } , + "XO2" : {} , + "HO2" : { "yield" : 0.800 } , + "NO2" : { "yield" : 0.200 } , + "ALDX" : { "yield" : 0.800 } , + "PAR" : { "yield" : 2.400 } + }, + "orig params" : "CMAQ_1to4(3.03E-12, 0.0E+00, 448.0)", + "type" : "ARRHENIUS", + "A" : 3.03E-12, + "B" : 0.0E+00, + "C" : -448.0 + }, + { + "rxn id" : "R145", + "reactants" : { + "OH" : {} , + "ISPD" : {} + }, + "products" : { + "PAR" : { "yield" : 1.565 } , + "FORM" : { "yield" : 0.167 } , + "XO2" : { "yield" : 0.713 } , + "HO2" : { "yield" : 0.503 } , + "CO" : { "yield" : 0.334 } , + "MGLY" : { "yield" : 0.168 } , + "ALD2" : { "yield" : 0.252 } , + "C2O3" : { "yield" : 0.210 } , + "CXO3" : { "yield" : 0.250 } , + "ALDX" : { "yield" : 0.120 } + }, + "orig params" : "CMAQ_1to4(3.36E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.36E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R146", + "reactants" : { + "O3" : {} , + "ISPD" : {} + }, + "products" : { + "C2O3" : { "yield" : 0.114 } , + "FORM" : { "yield" : 0.150 } , + "MGLY" : { "yield" : 0.850 } , + "HO2" : { "yield" : 0.154 } , + "OH" : { "yield" : 0.268 } , + "XO2" : { "yield" : 0.064 } , + "ALD2" : { "yield" : 0.020 } , + "PAR" : { "yield" : 0.360 } , + "CO" : { "yield" : 0.225 } + }, + "orig params" : "CMAQ_1to4(7.1E-18, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 7.1E-18, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R147", + "reactants" : { + "NO3" : {} , + "ISPD" : {} + }, + "products" : { + "ALDX" : { "yield" : 0.357 } , + "FORM" : { "yield" : 0.282 } , + "PAR" : { "yield" : 1.282 } , + "HO2" : { "yield" : 0.925 } , + "CO" : { "yield" : 0.643 } , + "NTR" : { "yield" : 0.850 } , + "CXO3" : { "yield" : 0.075 } , + "XO2" : { "yield" : 0.075 } , + "HNO3" : { "yield" : 0.150 } + }, + "orig params" : "CMAQ_1to4(1.0E-15, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.0E-15, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R148", + "reactants" : { + "ISPD" : {} + }, + "products" : { + "CO" : { "yield" : 0.333 } , + "ALD2" : { "yield" : 0.067 }, + "FORM" : { "yield" : 0.900 } , + "PAR" : { "yield" : 0.832 }, + "HO2" : { "yield" : 1.033 } , + "XO2" : { "yield" : 0.700 }, + "C2O3" : { "yield" : 0.967 } + }, + "scaling factor" : 0.0036, + "orig params" : "0.0036 * TUV_J(89, THETA)", + "Fast-J id" : "ISPD", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R149", + "reactants" : { + "TERP" : {} , + "O" : {} + }, + "products" : { + "ALDX" : { "yield" : 0.150 } , + "PAR" : { "yield" : 5.12 } + }, + "orig params" : "CMAQ_1to4(3.6E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.6E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R150", + "reactants" : { + "TERP" : {} , + "OH" : {} + }, + "products" : { + "HO2" : { "yield" : 0.750 } , + "XO2" : { "yield" : 1.250 } , + "XO2N" : { "yield" : 0.250 } , + "FORM" : { "yield" : 0.280 }, + "PAR" : { "yield" : 1.66 } , + "ALDX" : { "yield" : 0.470 } + }, + "orig params" : "CMAQ_1to4(1.5E-11, 0.0E+00, -449.0)", + "type" : "ARRHENIUS", + "A" : 1.5E-11, + "B" : 0.0E+00, + "C" : 449.0 + }, + { + "rxn id" : "R151", + "reactants" : { + "TERP" : {} , + "O3" : {} + }, + "products" : { + "OH" : { "yield" : 0.570 } , + "HO2" : { "yield" : 0.070 } , + "XO2" : { "yield" : 0.760 } , + "XO2N" : { "yield" : 0.180 } , + "FORM" : { "yield" : 0.240 } , + "CO" : { "yield" : 0.001 } , + "PAR" : { "yield" : 7.000 } , + "ALDX" : { "yield" : 0.210 } , + "CXO3" : { "yield" : 0.390 } + }, + "orig params" : "CMAQ_1to4(1.2E-15, 0.0E+00, 821.0)", + "type" : "ARRHENIUS", + "A" : 1.2E-15, + "B" : 0.0E+00, + "C" : -821.0 + }, + { + "rxn id" : "R152", + "reactants" : { + "TERP" : {} , + "NO3" : {} + }, + "products" : { + "NO2" : { "yield" : 0.470 } , + "HO2" : { "yield" : 0.280 } , + "XO2" : { "yield" : 1.030 } , + "XO2N" : { "yield" : 0.250 } , + "ALDX" : { "yield" : 0.470 } , + "NTR" : { "yield" : 0.530 } + }, + "orig params" : "CMAQ_1to4(3.7E-12, 0.0E+00, -175.0)", + "type" : "ARRHENIUS", + "A" : 3.7E-12, + "B" : 0.0E+00, + "C" : 175.0 + }, + { + "rxn id" : "R153", + "reactants" : { + "SO2" : {} , + "OH" : {} + }, + "products" : { + "SULF" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_10(3.0E-31, -3.3, 0.0E+00, 1.5E-12, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 3.0E-31, + "k0_B" : -3.3, + "k0_C" : -0.0E+00, + "kinf_A" : 1.5E-12, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R154", + "reactants" : { + "OH" : {} , + "ETOH" : {} + }, + "products" : { + "HO2" : {} , + "ALD2" : { "yield" : 0.900 } , + "ALDX" : { "yield" : 0.050 } , + "FORM" : { "yield" : 0.100 } , + "XO2" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(6.9E-12, 0.0E+00, 230.0)", + "type" : "ARRHENIUS", + "A" : 6.9E-12, + "B" : 0.0E+00, + "C" : -230.0 + }, + { + "rxn id" : "R155", + "reactants" : { + "OH" : {} , + "ETHA" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.991 } , + "XO2" : { "yield" : 0.991 } , + "XO2N" : { "yield" : 0.009 } , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(8.7E-12, 0.0E+00, 1070.0)", + "type" : "ARRHENIUS", + "A" : 8.7E-12, + "B" : 0.0E+00, + "C" : -1070.0 + }, + { + "rxn id" : "R156", + "reactants" : { + "NO2" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.200 } , + "NTR" : { "yield" : 0.800 } , + "XO2" : {} , + "HO2" : { "yield" : 0.800 } , + "NO" : { "yield" : 0.200 } , + "ALDX" : { "yield" : 0.800 } , + "PAR" : { "yield" : 2.400 } + }, + "orig params" : "CMAQ_1to4(1.5E-19, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.5E-19, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "jo2", + "reactants" : { + "O2" : {} + }, + "products" : { + "O" : { "yield" : 2 } + }, + "orig params" : "TUV_J(1, THETA)", + "notes" : "Fast-J does not currently calculate O2 photolysis", + "type" : "PHOTOLYSIS" + } + ] +} +]} diff --git a/test/monarch/settings/monarch_cb05/cb05_mechanism_yield_positive.json b/test/monarch/settings/monarch_cb05/cb05_mechanism_yield_positive.json new file mode 100644 index 000000000..150f6ca1a --- /dev/null +++ b/test/monarch/settings/monarch_cb05/cb05_mechanism_yield_positive.json @@ -0,0 +1,3155 @@ +{ "camp-data" : [ + { + "name" : "MONARCH mod37", + "type" : "MECHANISM", + "reactions" : [ + { + "rxn id" : "R1", + "reactants" : { + "NO2" : {} + }, + "products" : { + "NO" : {} , + "O" : {} + }, + "orig params" : "TUV_J(4, THETA)", + "base rate" : 4.77e-3, + "Fast-J id" : "NO2", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R2", + "reactants" : { + "O" : {} , + "O2" : {} , + "M" : {} + }, + "products" : { + "O3" : {} , + "M" : {} + }, + "orig params" : "O2 * M * CMAQ_1to4(6.0E-34, -2.4, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 6.0E-34, + "B" : -2.4, + "C" : -0.0E+00 + }, + { + "rxn id" : "R3", + "reactants" : { + "O3" : {} , + "NO" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(3.0E-12, 0.0E+00, 1500.0)", + "type" : "ARRHENIUS", + "A" : 3.0E-12, + "B" : 0.0E+00, + "C" : -1500.0 + }, + { + "rxn id" : "R4", + "reactants" : { + "O" : {} , + "NO2" : {} + }, + "products" : { + "NO" : {} + }, + "orig params" : "CMAQ_1to4(5.6E-12, 0.0E+00, -180.0)", + "type" : "ARRHENIUS", + "A" : 5.6E-12, + "B" : 0.0E+00, + "C" : 180.0 + }, + { + "rxn id" : "R5", + "reactants" : { + "O" : {} , + "NO2" : {} + }, + "products" : { + "NO3" : {} + }, + "orig params" : "CMAQ_10(2.5E-31, -1.8, 0.0E+00, 2.2E-11, -0.7, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 2.5E-31, + "k0_B" : -1.8, + "k0_C" : -0.0E+00, + "kinf_A" : 2.2E-11, + "kinf_B" : -0.7, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R6", + "reactants" : { + "O" : {} , + "NO" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_10(9.0E-32, -1.5, 0.0E+00, 3.0E-11, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 9.0E-32, + "k0_B" : -1.5, + "k0_C" : -0.0E+00, + "kinf_A" : 3.0E-11, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R7", + "reactants" : { + "NO2" : {} , + "O3" : {} + }, + "products" : { + "NO3" : {} + }, + "orig params" : "CMAQ_1to4(1.2E-13, 0.0E+00, 2450.0)", + "type" : "ARRHENIUS", + "A" : 1.2E-13, + "B" : 0.0E+00, + "C" : -2450.0 + }, + { + "rxn id" : "R8", + "reactants" : { + "O3" : {} + }, + "products" : { + "O" : {} + }, + "orig params" : "TUV_J(3, THETA)", + "base rate" : 2.53e-4, + "Fast-J id" : "O3", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R9", + "reactants" : { + "O3" : {} + }, + "products" : { + "O1D" : {} + }, + "orig params" : "TUV_J(2, THETA)", + "base rate" : 2.26e-6, + "Fast-J id" : "O3_1d", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R10", + "reactants" : { + "O1D" : {} , + "M" : {} + }, + "products" : { + "O" : {} , + "M" : {} + }, + "orig params" : "M * CMAQ_1to4(2.1E-11, 0.0E+00, -102.0)", + "type" : "ARRHENIUS", + "A" : 2.1E-11, + "B" : 0.0E+00, + "C" : 102.0 + }, + { + "rxn id" : "R11", + "reactants" : { + "O1D" : {} , + "H2O" : {} + }, + "products" : { + "OH" : { "yield" : 2.000 } + }, + "orig params" : "H2O * CMAQ_1to4(2.2E-10, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.2E-10, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R12", + "reactants" : { + "O3" : {} , + "OH" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(1.7E-12, 0.0E+00, 940.0)", + "type" : "ARRHENIUS", + "A" : 1.7E-12, + "B" : 0.0E+00, + "C" : -940.0 + }, + { + "rxn id" : "R13", + "reactants" : { + "O3" : {} , + "HO2" : {} + }, + "products" : { + "OH" : {} + }, + "orig params" : "CMAQ_1to4(1.0E-14, 0.0E+00, 490.0)", + "type" : "ARRHENIUS", + "A" : 1.0E-14, + "B" : 0.0E+00, + "C" : -490.0 + }, + { + "rxn id" : "R14", + "reactants" : { + "NO3" : {} + }, + "products" : { + "NO2" : {} , + "O" : {} + }, + "orig params" : "TUV_J(6, THETA)", + "scaling factor" : 0.89, + "base rate" : 1.31e-1, + "Fast-J id" : "NO3_X", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R15", + "reactants" : { + "NO3" : {} + }, + "products" : { + "NO" : {} + }, + "orig params" : "TUV_J(5, THETA)", + "scaling factor" : 0.11, + "base rate" : 1.31e-1, + "Fast-J id" : "NO3_L", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R16", + "reactants" : { + "NO3" : {} , + "NO" : {} + }, + "products" : { + "NO2" : { "yield" : 2.000 } + }, + "orig params" : "CMAQ_1to4(1.5E-11, 0.0E+00, -170.0)", + "type" : "ARRHENIUS", + "A" : 1.5E-11, + "B" : 0.0E+00, + "C" : 170.0 + }, + { + "rxn id" : "R17", + "reactants" : { + "NO3" : {} , + "NO2" : {} + }, + "products" : { + "NO" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(4.5E-14, 0.0E+00, 1260.0)", + "type" : "ARRHENIUS", + "A" : 4.5E-14, + "B" : 0.0E+00, + "C" : -1260.0 + }, + { + "rxn id" : "R18", + "reactants" : { + "NO3" : {} , + "NO2" : {} + }, + "products" : { + "N2O5" : {} + }, + "orig params" : "CMAQ_10(2.0E-30, -4.4, 0.0E+00, 1.4E-12, -0.7, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 2.0E-30, + "k0_B" : -4.4, + "k0_C" : -0.0E+00, + "kinf_A" : 1.4E-12, + "kinf_B" : -0.7, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R19", + "reactants" : { + "N2O5" : {} , + "H2O" : {} + }, + "products" : { + "HNO3" : { "yield" : 2.000 } , + "DUMMY" : {} + }, + "orig params" : "H2O * CMAQ_1to4(2.5E-22, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.5E-22, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R20", + "reactants" : { + "N2O5" : {} , + "H2O" : { "qty" : 2 } + }, + "products" : { + "HNO3" : { "yield" : 2.000 } + }, + "orig params" : "H2O**2 * CMAQ_1to4(1.8E-39, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.8E-39, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R21", + "reactants" : { + "N2O5" : {} + }, + "products" : { + "NO3" : {} , + "NO2" : {} , + "DUMMY" : {} + }, + "orig params" : "CMAQ_10(1.0E-03, -3.5, 11000.0, 9.7E+14, 0.1, 11080.0, 0.45, 1.0)", + "type" : "TROE", + "k0_A" : 1.0E-03, + "k0_B" : -3.5, + "k0_C" : -11000.0, + "kinf_A" : 9.7E+14, + "kinf_B" : 0.1, + "kinf_C" : -11080.0, + "Fc" : 0.45, + "N" : 1.0 + }, + { + "rxn id" : "R22", + "reactants" : { + "NO" : { "qty" : 2 } , + "O2" : {} + }, + "products" : { + "NO2" : { "yield" : 2.000 } + }, + "orig params" : "O2 * CMAQ_1to4(3.3E-39, 0.0E+00, -530.0)", + "type" : "ARRHENIUS", + "A" : 3.3E-39, + "B" : 0.0E+00, + "C" : 530.0 + }, + { + "rxn id" : "R23", + "reactants" : { + "NO" : {} , + "NO2" : {} , + "H2O" : {} + }, + "products" : { + "HONO" : { "yield" : 2.000 } + }, + "orig params" : "H2O * CMAQ_1to4(5.0E-40, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.0E-40, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R24", + "reactants" : { + "NO" : {} , + "OH" : {} + }, + "products" : { + "HONO" : {} + }, + "orig params" : "CMAQ_10(7.0E-31, -2.6, 0.0E+00, 3.6E-11, -0.1, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 7.0E-31, + "k0_B" : -2.6, + "k0_C" : -0.0E+00, + "kinf_A" : 3.6E-11, + "kinf_B" : -0.1, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R25", + "reactants" : { + "HONO" : {} + }, + "products" : { + "NO" : {} , + "OH" : {} + }, + "orig params" : "TUV_J(12, THETA)", + "base rate" : 9.18e-4, + "Fast-J id" : "HONO", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R26", + "reactants" : { + "OH" : {} , + "HONO" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(1.8E-11, 0.0E+00, 390.0)", + "type" : "ARRHENIUS", + "A" : 1.8E-11, + "B" : 0.0E+00, + "C" : -390.0 + }, + { + "rxn id" : "R27", + "reactants" : { + "HONO" : { "qty" : 2 } + }, + "products" : { + "NO" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(1.0E-20, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.0E-20, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R28", + "reactants" : { + "NO2" : {} , + "OH" : {} + }, + "products" : { + "HNO3" : {} + }, + "orig params" : "CMAQ_10(2.0E-30, -3.0, 0.0E+00, 2.5E-11, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 2.0E-30, + "k0_B" : -3.0, + "k0_C" : -0.0E+00, + "kinf_A" : 2.5E-11, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R29", + "reactants" : { + "OH" : {} , + "HNO3" : {} + }, + "products" : { + "NO3" : {} + }, + "orig params" : "CMAQ_8(2.4E-14, -460.0, 2.7E-17, -2199.0, 6.5E-34, -1335.0)", + "type" : "CMAQ_OH_HNO3", + "k0_A" : 2.4E-14, + "k0_C" : 460.0, + "k2_A" : 2.7E-17, + "k2_C" : 2199.0, + "k3_A" : 6.5E-34, + "k3_C" : 1335.0 + }, + { + "rxn id" : "R30", + "reactants" : { + "HO2" : {} , + "NO" : {} + }, + "products" : { + "OH" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(3.5E-12, 0.0E+00, -250.0)", + "type" : "ARRHENIUS", + "A" : 3.5E-12, + "B" : 0.0E+00, + "C" : 250.0 + }, + { + "rxn id" : "R31", + "reactants" : { + "HO2" : {} , + "NO2" : {} + }, + "products" : { + "PNA" : {} + }, + "orig params" : "CMAQ_10(1.8E-31, -3.2, 0.0E+00, 4.7E-12, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 1.8E-31, + "k0_B" : -3.2, + "k0_C" : -0.0E+00, + "kinf_A" : 4.7E-12, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R32", + "reactants" : { + "PNA" : {} + }, + "products" : { + "HO2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_10(4.1E-5, 0.0E+00, 10650.0, 4.8E15, 0.0E+00, 11170.0, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 4.1E-5, + "k0_B" : 0.0E+00, + "k0_C" : -10650.0, + "kinf_A" : 4.8E15, + "kinf_B" : 0.0E+00, + "kinf_C" : -11170.0, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R33", + "reactants" : { + "OH" : {} , + "PNA" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(1.3E-12, 0.0E+00, -380.0)", + "type" : "ARRHENIUS", + "A" : 1.3E-12, + "B" : 0.0E+00, + "C" : 380.0 + }, + { + "rxn id" : "R34", + "reactants" : { + "HO2" : { "qty" : 2 } + }, + "products" : { + "H2O2" : {} , + "DUMMY" : {} + }, + "orig params" : "CMAQ_9(2.3E-13, -6.0E+02, 1.7E-33, -1.0E+03)", + "type" : "CMAQ_H2O2", + "k1_A" : 2.3E-13, + "k1_C" : 6.0E+02, + "k2_A" : 1.7E-33, + "k2_C" : 1.0E+03 + }, + { + "rxn id" : "R35", + "reactants" : { + "HO2" : { "qty" : 2 } , + "H2O" : {} + }, + "products" : { + "H2O2" : {} + }, + "orig params" : "H2O * CMAQ_9(3.22E-34, -2.8E+03, 2.38E-54, -3.2E+3)", + "type" : "CMAQ_H2O2", + "k1_A" : 3.22E-34, + "k1_C" : 2.8E+03, + "k2_A" : 2.38E-54, + "k2_C" : 3.2E+3 + }, + { + "rxn id" : "R36", + "reactants" : { + "H2O2" : {} + }, + "products" : { + "OH" : { "yield" : 2.000 } + }, + "orig params" : "TUV_J(11, THETA)", + "base rate" : 2.59e-6, + "Fast-J id" : "H2O2", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R37", + "reactants" : { + "OH" : {} , + "H2O2" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(2.9E-12, 0.0E+00, 160.0)", + "type" : "ARRHENIUS", + "A" : 2.9E-12, + "B" : 0.0E+00, + "C" : -160.0 + }, + { + "rxn id" : "R38", + "reactants" : { + "O1D" : {} , + "H2" : {} + }, + "products" : { + "OH" : {} , + "HO2" : {} + }, + "orig params" : "H2 * CMAQ_1to4(1.1E-10, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.1E-10, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R39", + "reactants" : { + "OH" : {} , + "H2" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "H2 * CMAQ_1to4(5.5E-12, 0.0E+00, 2000.0) {IUPAC '06 at 230K evaluates 9/10 * this}", + "type" : "ARRHENIUS", + "A" : 5.5E-12, + "B" : 0.0E+00, + "C" : -2000.0 + }, + { + "rxn id" : "R40", + "reactants" : { + "OH" : {} , + "O" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(2.2E-11, 0.0E+00, -120.0)", + "type" : "ARRHENIUS", + "A" : 2.2E-11, + "B" : 0.0E+00, + "C" : 120.0 + }, + { + "rxn id" : "R41", + "reactants" : { + "OH" : { "qty" : 2 } + }, + "products" : { + "O" : {} + }, + "orig params" : "CMAQ_1to4(4.2E-12, 0.0E+00, 240.0) {IUPAC '06 at 230K evaluates 4/3* this}", + "type" : "ARRHENIUS", + "A" : 4.2E-12, + "B" : 0.0E+00, + "C" : -240.0 + }, + { + "rxn id" : "R42", + "reactants" : { + "OH" : { "qty" : 2 } + }, + "products" : { + "H2O2" : {} + }, + "orig params" : "CMAQ_10(6.9E-31, -1.0, 0.0E+00, 2.6E-11, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 6.9E-31, + "k0_B" : -1.0, + "k0_C" : -0.0E+00, + "kinf_A" : 2.6E-11, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R43", + "reactants" : { + "OH" : {} , + "HO2" : {} + }, + "products" : { + "DUMMY" : {} + }, + "orig params" : "CMAQ_1to4(4.8E-11, 0.0E+00, -250.0)", + "type" : "ARRHENIUS", + "A" : 4.8E-11, + "B" : 0.0E+00, + "C" : 250.0 + }, + { + "rxn id" : "R44", + "reactants" : { + "HO2" : {} , + "O" : {} + }, + "products" : { + "OH" : {} + }, + "orig params" : "CMAQ_1to4(3.0E-11, 0.0E+00, -200.0)", + "type" : "ARRHENIUS", + "A" : 3.0E-11, + "B" : 0.0E+00, + "C" : 200.0 + }, + { + "rxn id" : "R45", + "reactants" : { + "H2O2" : {} , + "O" : {} + }, + "products" : { + "OH" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(1.4E-12, 0.0E+00, 2000.0)", + "type" : "ARRHENIUS", + "A" : 1.4E-12, + "B" : 0.0E+00, + "C" : -2000.0 + }, + { + "rxn id" : "R46", + "reactants" : { + "NO3" : {} , + "O" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(1.0E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.0E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R47", + "reactants" : { + "NO3" : {} , + "OH" : {} + }, + "products" : { + "HO2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(2.2E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.2E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R48", + "reactants" : { + "NO3" : {} , + "HO2" : {} + }, + "products" : { + "HNO3" : {} + }, + "orig params" : "CMAQ_1to4(3.5E-12, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.5E-12, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R49", + "reactants" : { + "NO3" : {} , + "O3" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(1.0E-17, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.0E-17, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R50", + "reactants" : { + "NO3" : { "qty" : 2 } + }, + "products" : { + "NO2" : { "yield" : 2.000 } + }, + "orig params" : "CMAQ_1to4(8.5E-13, 0.0E+00, 2450.0)", + "type" : "ARRHENIUS", + "A" : 8.5E-13, + "B" : 0.0E+00, + "C" : -2450.0 + }, + { + "rxn id" : "R51", + "reactants" : { + "PNA" : {} + }, + "products" : { + "HO2" : { "yield" : 0.610 } , + "NO2" : { "yield" : 0.610 } , + "OH" : { "yield" : 0.390 } , + "NO3" : { "yield" : 0.390 } + }, + "orig params" : "TUV_J(14, THETA)", + "base rate" : 1.89e-6, + "Fast-J id" : "HO2NO2", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R52", + "reactants" : { + "HNO3" : {} + }, + "products" : { + "OH" : {} , + "NO2" : {} + }, + "orig params" : "TUV_J(13, THETA)", + "base rate" : 8.61e-8, + "Fast-J id" : "HONO2", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R53", + "reactants" : { + "N2O5" : {} + }, + "products" : { + "NO2" : {} , + "NO3" : {} + }, + "orig params" : "TUV_J(8, THETA)", + "base rate" : 0.00e+1, + "Fast-J id" : "N2O5", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R54", + "reactants" : { + "XO2" : {} , + "NO" : {} + }, + "products" : { + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(2.6E-12, 0.0E+00, -365.0)", + "type" : "ARRHENIUS", + "A" : 2.6E-12, + "B" : 0.0E+00, + "C" : 365.0 + }, + { + "rxn id" : "R55", + "reactants" : { + "XO2N" : {} , + "NO" : {} + }, + "products" : { + "NTR" : {} + }, + "orig params" : "CMAQ_1to4(2.6E-12, 0.0E+00, -365.0)", + "type" : "ARRHENIUS", + "A" : 2.6E-12, + "B" : 0.0E+00, + "C" : 365.0 + }, + { + "rxn id" : "R56", + "reactants" : { + "XO2" : {} , + "HO2" : {} + }, + "products" : { + "ROOH" : {} + }, + "orig params" : "CMAQ_1to4(7.5E-13, 0.0E+00, -700.0)", + "type" : "ARRHENIUS", + "A" : 7.5E-13, + "B" : 0.0E+00, + "C" : 700.0 + }, + { + "rxn id" : "R57", + "reactants" : { + "XO2N" : {} , + "HO2" : {} + }, + "products" : { + "ROOH" : {} + }, + "orig params" : "CMAQ_1to4(7.5E-13, 0.0E+00, -700.0)", + "type" : "ARRHENIUS", + "A" : 7.5E-13, + "B" : 0.0E+00, + "C" : 700.0 + }, + { + "rxn id" : "R58", + "reactants" : { + "XO2" : { "qty" : 2 } + }, + "products" : { + "DUMMY" : {} + }, + "orig params" : "CMAQ_1to4(6.8E-14, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 6.8E-14, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R59", + "reactants" : { + "XO2N" : { "qty" : 2 } + }, + "products" : { + "DUMMY" : {} + }, + "orig params" : "CMAQ_1to4(6.8E-14, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 6.8E-14, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R60", + "reactants" : { + "XO2" : {} , + "XO2N" : {} + }, + "products" : { + "DUMMY" : {} + }, + "orig params" : "CMAQ_1to4(6.8E-14, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 6.8E-14, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R61", + "reactants" : { + "NTR" : {} , + "OH" : {} + }, + "products" : { + "HNO3" : {} , + "HO2" : {} , + "FORM" : { "yield" : 0.330 } , + "ALD2" : { "yield" : 0.330 } , + "ALDX" : { "yield" : 0.330 } , + "PAR" : { "yield" : 1.0 } + }, + "orig params" : "CMAQ_1to4(5.9E-13, 0.0E+00, 360.0)", + "type" : "ARRHENIUS", + "A" : 5.9E-13, + "B" : 0.0E+00, + "C" : -360.0 + }, + { + "rxn id" : "R62", + "reactants" : { + "NTR" : {} + }, + "products" : { + "NO2" : {} , + "HO2" : {}, + "FORM" : { "yield" : 0.330 } , + "ALD2" : { "yield" : 0.330 } , + "ALDX" : { "yield" : 0.330 } , + "PAR" : { "yield" : 1.0 } + }, + "orig params" : "TUV_J(91, THETA)", + "base rate" : 4.77e-7, + "Fast-J id" : "NTR", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R63", + "reactants" : { + "ROOH" : {} , + "OH" : {} + }, + "products" : { + "XO2" : {} , + "ALD2" : { "yield" : 0.500 } , + "ALDX" : { "yield" : 0.500 } + }, + "orig params" : "CMAQ_1to4(3.01E-12, 0.0E+00, -190.0)", + "type" : "ARRHENIUS", + "A" : 3.01E-12, + "B" : 0.0E+00, + "C" : 190.0 + }, + { + "rxn id" : "R64", + "reactants" : { + "ROOH" : {} + }, + "products" : { + "OH" : {}, + "HO2" : {} , + "ALD2" : { "yield" : 0.500 } , + "ALDX" : { "yield" : 0.500 } + }, + "orig params" : "TUV_J(26, THETA)", + "base rate" : 1.81e-6, + "Fast-J id" : "MeOOH", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R65", + "reactants" : { + "OH" : {} , + "CO" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_9(1.44E-13, 0.0E+00, 3.43E-33, 0.0E+00)", + "type" : "CMAQ_H2O2", + "k1_A" : 1.44E-13, + "k1_C" : 0.0E+00, + "k2_A" : 3.43E-33, + "k2_C" : 0.0E+00 + }, + { + "rxn id" : "R66", + "reactants" : { + "OH" : {} , + "CH4" : {} + }, + "products" : { + "MEO2" : {} + }, + "orig params" : "CMAQ_1to4(2.45E-12, 0.0E+00, 1775.0)", + "type" : "ARRHENIUS", + "A" : 2.45E-12, + "B" : 0.0E+00, + "C" : -1775.0 + }, + { + "rxn id" : "R67", + "reactants" : { + "MEO2" : {} , + "NO" : {} + }, + "products" : { + "FORM" : {} , + "HO2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(2.8E-12, 0.0E+00, -300.0)", + "type" : "ARRHENIUS", + "A" : 2.8E-12, + "B" : 0.0E+00, + "C" : 300.0 + }, + { + "rxn id" : "R68", + "reactants" : { + "MEO2" : {} , + "HO2" : {} + }, + "products" : { + "MEPX" : {} + }, + "orig params" : "CMAQ_1to4(4.1E-13, 0.0E+00, -750.0)", + "type" : "ARRHENIUS", + "A" : 4.1E-13, + "B" : 0.0E+00, + "C" : 750.0 + }, + { + "rxn id" : "R69", + "reactants" : { + "MEO2" : { "qty" : 2 } + }, + "products" : { + "FORM" : { "yield" : 1.370 } , + "HO2" : { "yield" : 0.740 } , + "MEOH" : { "yield" : 0.630 } + }, + "orig params" : "CMAQ_1to4(9.5E-14, 0.0E+00, -390.0)", + "type" : "ARRHENIUS", + "A" : 9.5E-14, + "B" : 0.0E+00, + "C" : 390.0 + }, + { + "rxn id" : "R70", + "reactants" : { + "MEPX" : {} , + "OH" : {} + }, + "products" : { + "MEO2" : { "yield" : 0.700 } , + "XO2" : { "yield" : 0.300 } , + "HO2" : { "yield" : 0.300 } + }, + "orig params" : "CMAQ_1to4(3.8E-12, 0.0E+00, -200.0)", + "type" : "ARRHENIUS", + "A" : 3.8E-12, + "B" : 0.0E+00, + "C" : 200.0 + }, + { + "rxn id" : "R71", + "reactants" : { + "MEPX" : {} + }, + "products" : { + "FORM" : {}, + "HO2" : {}, + "OH" : {} + }, + "orig params" : "TUV_J(26, THETA)", + "base rate" : 1.81e-6, + "Fast-J id" : "MeOOH", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R72", + "reactants" : { + "MEOH" : {} , + "OH" : {} + }, + "products" : { + "FORM" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(7.3E-12, 0.0E+00, 620.0)", + "type" : "ARRHENIUS", + "A" : 7.3E-12, + "B" : 0.0E+00, + "C" : -620.0 + }, + { + "rxn id" : "R73", + "reactants" : { + "FORM" : {} , + "OH" : {} + }, + "products" : { + "HO2" : {} , + "CO" : {} + }, + "orig params" : "CMAQ_1to4(9.0E-12, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 9.0E-12, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R74", + "reactants" : { + "FORM" : {} + }, + "products" : { + "HO2" : { "yield" : 2.000 } , + "CO" : {} + }, + "orig params" : "TUV_J(15, THETA)", + "base rate" : 7.93e-6, + "Fast-J id" : "HCHO_a", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R75", + "reactants" : { + "FORM" : {} + }, + "products" : { + "CO" : {} + }, + "orig params" : "TUV_J(16, THETA)", + "base rate" : 2.20e-5, + "Fast-J id" : "HCHO_b", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R76", + "reactants" : { + "FORM" : {} , + "O" : {} + }, + "products" : { + "OH" : {} , + "HO2" : {} , + "CO" : {} + }, + "orig params" : "CMAQ_1to4(3.4E-11, 0.0E+00, 1600.0)", + "type" : "ARRHENIUS", + "A" : 3.4E-11, + "B" : 0.0E+00, + "C" : -1600.0 + }, + { + "rxn id" : "R77", + "reactants" : { + "FORM" : {} , + "NO3" : {} + }, + "products" : { + "HNO3" : {} , + "HO2" : {} , + "CO" : {} + }, + "orig params" : "CMAQ_1to4(5.8E-16, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.8E-16, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R78", + "reactants" : { + "FORM" : {} , + "HO2" : {} + }, + "products" : { + "HCO3" : {} + }, + "orig params" : "CMAQ_1to4(9.7E-15, 0.0E+00, -625.0)", + "type" : "ARRHENIUS", + "A" : 9.7E-15, + "B" : 0.0E+00, + "C" : 625.0 + }, + { + "rxn id" : "R79", + "reactants" : { + "HCO3" : {} + }, + "products" : { + "FORM" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(2.4E+12, 0.0E+00, 7000.0)", + "type" : "ARRHENIUS", + "A" : 2.4E+12, + "B" : 0.0E+00, + "C" : -7000.0 + }, + { + "rxn id" : "R80", + "reactants" : { + "HCO3" : {} , + "NO" : {} + }, + "products" : { + "FACD" : {} , + "NO2" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(5.6E-12, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.6E-12, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R81", + "reactants" : { + "HCO3" : {} , + "HO2" : {} + }, + "products" : { + "MEPX" : {} + }, + "orig params" : "CMAQ_1to4(5.6E-15, 0.0E+00, -2300.0)", + "type" : "ARRHENIUS", + "A" : 5.6E-15, + "B" : 0.0E+00, + "C" : 2300.0 + }, + { + "rxn id" : "R82", + "reactants" : { + "FACD" : {} , + "OH" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(4.0E-13, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 4.0E-13, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R83", + "reactants" : { + "ALD2" : {} , + "O" : {} + }, + "products" : { + "C2O3" : {} , + "OH" : {} + }, + "orig params" : "CMAQ_1to4(1.8E-11, 0.0E+00, 1100.0)", + "type" : "ARRHENIUS", + "A" : 1.8E-11, + "B" : 0.0E+00, + "C" : -1100.0 + }, + { + "rxn id" : "R84", + "reactants" : { + "ALD2" : {} , + "OH" : {} + }, + "products" : { + "C2O3" : {} + }, + "orig params" : "CMAQ_1to4(5.6E-12, 0.0E+00, -270.0)", + "type" : "ARRHENIUS", + "A" : 5.6E-12, + "B" : 0.0E+00, + "C" : 270.0 + }, + { + "rxn id" : "R85", + "reactants" : { + "ALD2" : {} , + "NO3" : {} + }, + "products" : { + "C2O3" : {} , + "HNO3" : {} + }, + "orig params" : "CMAQ_1to4(1.4E-12, 0.0E+00, 1900.0)", + "type" : "ARRHENIUS", + "A" : 1.4E-12, + "B" : 0.0E+00, + "C" : -1900.0 + }, + { + "rxn id" : "R86", + "reactants" : { + "ALD2" : {} + }, + "products" : { + "MEO2" : {} , + "CO" : {} , + "HO2" : {} + }, + "orig params" : "TUV_J(17, THETA)+TUV_J(19, THETA)", + "base rate" : 2.20e-6, + "Fast-J id" : "ALD2", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R87", + "reactants" : { + "C2O3" : {} , + "NO" : {} + }, + "products" : { + "MEO2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(8.1E-12, 0.0E+00, -270.0)", + "type" : "ARRHENIUS", + "A" : 8.1E-12, + "B" : 0.0E+00, + "C" : 270.0 + }, + { + "rxn id" : "R88", + "reactants" : { + "C2O3" : {} , + "NO2" : {} + }, + "products" : { + "PAN" : {} + }, + "orig params" : "CMAQ_10(2.7E-28, -7.1, 0.0E+00, 1.2E-11, -0.9, 0.0E+00, 0.3, 1.0)", + "type" : "TROE", + "k0_A" : 2.7E-28, + "k0_B" : -7.1, + "k0_C" : -0.0E+00, + "kinf_A" : 1.2E-11, + "kinf_B" : -0.9, + "kinf_C" : -0.0E+00, + "Fc" : 0.3, + "N" : 1.0 + }, + { + "rxn id" : "R89", + "reactants" : { + "PAN" : {} + }, + "products" : { + "C2O3" : {} , + "NO2" : {} , + "DUMMY" : {} + }, + "orig params" : "CMAQ_10(4.9E-3, 0.0E+00, 12100.0, 5.4E16, 0.0E+00, 13830.0, 0.3, 1.0)", + "type" : "TROE", + "k0_A" : 4.9E-3, + "k0_B" : 0.0E+00, + "k0_C" : -12100.0, + "kinf_A" : 5.4E16, + "kinf_B" : 0.0E+00, + "kinf_C" : -13830.0, + "Fc" : 0.3, + "N" : 1.0 + }, + { + "rxn id" : "R90", + "reactants" : { + "PAN" : {} + }, + "products" : { + "C2O3" : {} , + "NO2" : {} + }, + "orig params" : "TUV_J(28, THETA)", + "base rate" : 0.00e+1, + "Fast-J id" : "PAN", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R91", + "reactants" : { + "C2O3" : {} , + "HO2" : {} + }, + "products" : { + "PACD" : { "yield" : 0.800 } , + "AACD" : { "yield" : 0.200 } , + "O3" : { "yield" : 0.200 } + }, + "orig params" : "CMAQ_1to4(4.3E-13, 0.0E+00, -1040.0)", + "type" : "ARRHENIUS", + "A" : 4.3E-13, + "B" : 0.0E+00, + "C" : 1040.0 + }, + { + "rxn id" : "R92", + "reactants" : { + "C2O3" : {} , + "MEO2" : {} + }, + "products" : { + "MEO2" : { "yield" : 0.900 }, + "HO2" : { "yield" : 0.900 } , + "FORM" : {}, + "AACD" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(2.0E-12, 0.0E+00, -500.0)", + "type" : "ARRHENIUS", + "A" : 2.0E-12, + "B" : 0.0E+00, + "C" : 500.0 + }, + { + "rxn id" : "R93", + "reactants" : { + "C2O3" : {} , + "XO2" : {} + }, + "products" : { + "MEO2" : { "yield" : 0.900 } , + "AACD" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(4.4E-13, 0.0E+00, -1070.0)", + "type" : "ARRHENIUS", + "A" : 4.4E-13, + "B" : 0.0E+00, + "C" : 1070.0 + }, + { + "rxn id" : "R94", + "reactants" : { + "C2O3" : { "qty" : 2 } + }, + "products" : { + "MEO2" : { "yield" : 2.000 } + }, + "orig params" : "CMAQ_1to4(2.9E-12, 0.0E+00, -500.0) {same as IUPAC}", + "type" : "ARRHENIUS", + "A" : 2.9E-12, + "B" : 0.0E+00, + "C" : 500.0 + }, + { + "rxn id" : "R95", + "reactants" : { + "PACD" : {} , + "OH" : {} + }, + "products" : { + "C2O3" : {} + }, + "orig params" : "CMAQ_1to4(4.0E-13, 0.0E+00, -200.0)", + "type" : "ARRHENIUS", + "A" : 4.0E-13, + "B" : 0.0E+00, + "C" : 200.0 + }, + { + "rxn id" : "R96", + "reactants" : { + "PACD" : {} + }, + "products" : { + "MEO2" : {} , + "OH" : {} + }, + "orig params" : "TUV_J(26, THETA)", + "base rate" : 1.81e-6, + "Fast-J id" : "PACD", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R97", + "reactants" : { + "AACD" : {} , + "OH" : {} + }, + "products" : { + "MEO2" : {} + }, + "orig params" : "CMAQ_1to4(4.0E-13, 0.0E+00, -200.0)", + "type" : "ARRHENIUS", + "A" : 4.0E-13, + "B" : 0.0E+00, + "C" : 200.0 + }, + { + "rxn id" : "R98", + "reactants" : { + "ALDX" : {} , + "O" : {} + }, + "products" : { + "CXO3" : {} , + "OH" : {} + }, + "orig params" : "CMAQ_1to4(1.3E-11, 0.0E+00, 870.0)", + "type" : "ARRHENIUS", + "A" : 1.3E-11, + "B" : 0.0E+00, + "C" : -870.0 + }, + { + "rxn id" : "R99", + "reactants" : { + "ALDX" : {} , + "OH" : {} + }, + "products" : { + "CXO3" : {} + }, + "orig params" : "CMAQ_1to4(5.1E-12, 0.0E+00, -405.0)", + "type" : "ARRHENIUS", + "A" : 5.1E-12, + "B" : 0.0E+00, + "C" : 405.0 + }, + { + "rxn id" : "R100", + "reactants" : { + "ALDX" : {} , + "NO3" : {} + }, + "products" : { + "CXO3" : {} , + "HNO3" : {} + }, + "orig params" : "CMAQ_1to4(6.5E-15, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 6.5E-15, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R101", + "reactants" : { + "ALDX" : {} + }, + "products" : { + "MEO2" : {} , + "CO" : {} , + "HO2" : {} + }, + "orig params" : "TUV_J(20, THETA)", + "base rate" : 2.20e-6, + "Fast-J id" : "ALDX", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R102", + "reactants" : { + "CXO3" : {} , + "NO" : {} + }, + "products" : { + "ALD2" : {} , + "NO2" : {} , + "HO2" : {} , + "XO2" : {} + }, + "orig params" : "CMAQ_1to4(6.7E-12, 0.0E+00, -340.0)", + "type" : "ARRHENIUS", + "A" : 6.7E-12, + "B" : 0.0E+00, + "C" : 340.0 + }, + { + "rxn id" : "R103", + "reactants" : { + "CXO3" : {} , + "NO2" : {} + }, + "products" : { + "PANX" : {} + }, + "orig params" : "CMAQ_10(2.7E-28, -7.1, 0.0E+00, 1.2E-11, -0.9, 0.0E+00, 0.3, 1.0)", + "type" : "TROE", + "k0_A" : 2.7E-28, + "k0_B" : -7.1, + "k0_C" : -0.0E+00, + "kinf_A" : 1.2E-11, + "kinf_B" : -0.9, + "kinf_C" : -0.0E+00, + "Fc" : 0.3, + "N" : 1.0 + }, + { + "rxn id" : "R104", + "reactants" : { + "PANX" : {} + }, + "products" : { + "CXO3" : {} , + "NO2" : {} , + "DUMMY" : {} + }, + "orig params" : "CMAQ_10(4.9E-3, 0.0E+00, 12100.0, 5.4E16, 0.0E+00, 13830.0, 0.3, 1.0)", + "type" : "TROE", + "k0_A" : 4.9E-3, + "k0_B" : 0.0E+00, + "k0_C" : -12100.0, + "kinf_A" : 5.4E16, + "kinf_B" : 0.0E+00, + "kinf_C" : -13830.0, + "Fc" : 0.3, + "N" : 1.0 + }, + { + "rxn id" : "R105", + "reactants" : { + "PANX" : {} + }, + "products" : { + "CXO3" : {} , + "NO2" : {} + }, + "orig params" : "TUV_J(28, THETA)", + "base rate" : 0.00e+1, + "Fast-J id" : "PAN", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R106", + "reactants" : { + "PANX" : {} , + "OH" : {} + }, + "products" : { + "ALD2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(3.0E-13, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.0E-13, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R107", + "reactants" : { + "CXO3" : {} , + "HO2" : {} + }, + "products" : { + "PACD" : { "yield" : 0.800 } , + "AACD" : { "yield" : 0.200 } , + "O3" : { "yield" : 0.200 } + }, + "orig params" : "CMAQ_1to4(4.3E-13, 0.0E+00, -1040.0)", + "type" : "ARRHENIUS", + "A" : 4.3E-13, + "B" : 0.0E+00, + "C" : 1040.0 + }, + { + "rxn id" : "R108", + "reactants" : { + "CXO3" : {} , + "MEO2" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.900 } , + "XO2" : { "yield" : 0.900 } , + "HO2" : {} , + "AACD" : { "yield" : 0.100 } , + "FORM" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(2.0E-12, 0.0E+00, -500.0)", + "type" : "ARRHENIUS", + "A" : 2.0E-12, + "B" : 0.0E+00, + "C" : 500.0 + }, + { + "rxn id" : "R109", + "reactants" : { + "CXO3" : {} , + "XO2" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.900 } , + "AACD" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(4.4E-13, 0.0E+00, -1070.0)", + "type" : "ARRHENIUS", + "A" : 4.4E-13, + "B" : 0.0E+00, + "C" : 1070.0 + }, + { + "rxn id" : "R110", + "reactants" : { + "CXO3" : { "qty" : 2 } + }, + "products" : { + "ALD2" : { "yield" : 2.000 } , + "XO2" : { "yield" : 2.000 } , + "HO2" : { "yield" : 2.000 } + }, + "orig params" : "CMAQ_1to4(2.9E-12, 0.0E+00, -500.0)", + "type" : "ARRHENIUS", + "A" : 2.9E-12, + "B" : 0.0E+00, + "C" : 500.0 + }, + { + "rxn id" : "R111", + "reactants" : { + "CXO3" : {} , + "C2O3" : {} + }, + "products" : { + "MEO2" : {} , + "XO2" : {} , + "HO2" : {} , + "ALD2" : {} + }, + "orig params" : "CMAQ_1to4(2.9E-12, 0.0E+00, -500.0)", + "type" : "ARRHENIUS", + "A" : 2.9E-12, + "B" : 0.0E+00, + "C" : 500.0 + }, + { + "rxn id" : "R112", + "reactants" : { + "PAR" : {} , + "OH" : {} + }, + "products" : { + "XO2" : { "yield" : 0.870 } , + "XO2N" : { "yield" : 0.130 } , + "HO2" : { "yield" : 0.110 } , + "ALD2" : { "yield" : 0.060 } , + "PAR" : { "yield" : 1.0 } , + "ROR" : { "yield" : 0.760 } , + "ALDX" : { "yield" : 0.050 } + }, + "orig params" : "CMAQ_1to4(8.1E-13, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 8.1E-13, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R113", + "reactants" : { + "ROR" : {} + }, + "products" : { + "XO2" : { "yield" : 0.960 } , + "ALD2" : { "yield" : 0.600 } , + "HO2" : { "yield" : 0.940 } , + "PAR" : { "yield" : 1.0 } , + "XO2N" : { "yield" : 0.040 } , + "ROR" : { "yield" : 0.020 } , + "ALDX" : { "yield" : 0.500 } + }, + "orig params" : "CMAQ_1to4(1.0E+15, 0.0E+00, 8000.0)", + "type" : "ARRHENIUS", + "A" : 1.0E+15, + "B" : 0.0E+00, + "C" : -8000.0 + }, + { + "rxn id" : "R114", + "reactants" : { + "ROR" : {} + }, + "products" : { + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(1.6E+3, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.6E+3, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R115", + "reactants" : { + "ROR" : {} , + "NO2" : {} + }, + "products" : { + "NTR" : {} + }, + "orig params" : "CMAQ_1to4(1.5E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.5E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R116", + "reactants" : { + "O" : {} , + "OLE" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.200 } , + "ALDX" : { "yield" : 0.300 } , + "HO2" : { "yield" : 0.300 } , + "XO2" : { "yield" : 0.200 } , + "CO" : { "yield" : 0.200 } , + "FORM" : { "yield" : 0.200 } , + "XO2N" : { "yield" : 0.010 } , + "PAR" : { "yield" : 0.200 } , + "OH" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(1.0E-11, 0.0E+00, 280.0)", + "type" : "ARRHENIUS", + "A" : 1.0E-11, + "B" : 0.0E+00, + "C" : -280.0 + }, + { + "rxn id" : "R117", + "reactants" : { + "OH" : {} , + "OLE" : {} + }, + "products" : { + "FORM" : { "yield" : 0.800 } , + "ALD2" : { "yield" : 0.330 } , + "ALDX" : { "yield" : 0.620 } , + "XO2" : { "yield" : 0.800 } , + "HO2" : { "yield" : 0.950 } , + "PAR" : { "yield" : 1.0 } + }, + "orig params" : "CMAQ_1to4(3.2E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.2E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R118", + "reactants" : { + "O3" : {} , + "OLE" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.180 } , + "FORM" : { "yield" : 0.740 } , + "ALDX" : { "yield" : 0.320 } , + "XO2" : { "yield" : 0.220 } , + "OH" : { "yield" : 0.100 } , + "CO" : { "yield" : 0.330 } , + "HO2" : { "yield" : 0.440 } , + "PAR" : { "yield" : -1.000 } + }, + "orig params" : "CMAQ_1to4(6.5E-15, 0.0E+00, 1900.0)", + "type" : "ARRHENIUS", + "A" : 6.5E-15, + "B" : 0.0E+00, + "C" : -1900.0 + }, + { + "rxn id" : "R119", + "reactants" : { + "NO3" : {} , + "OLE" : {} + }, + "products" : { + "NO2" : {} , + "FORM" : {} , + "XO2" : { "yield" : 0.910 } , + "XO2N" : { "yield" : 0.090 } , + "ALDX" : { "yield" : 0.560 } , + "ALD2" : { "yield" : 0.350 } , + "PAR" : { "yield" : 1.0 } + }, + "orig params" : "CMAQ_1to4(7.0E-13, 0.0E+00, 2160.0)", + "type" : "ARRHENIUS", + "A" : 7.0E-13, + "B" : 0.0E+00, + "C" : -2160.0 + }, + { + "rxn id" : "R120", + "reactants" : { + "O" : {} , + "ETH" : {} + }, + "products" : { + "FORM" : {} , + "HO2" : { "yield" : 1.700 } , + "CO" : {} , + "XO2" : { "yield" : 0.700 } , + "OH" : { "yield" : 0.300 } + }, + "orig params" : "CMAQ_1to4(1.04E-11, 0.0E+00, 792.0)", + "type" : "ARRHENIUS", + "A" : 1.04E-11, + "B" : 0.0E+00, + "C" : -792.0 + }, + { + "rxn id" : "R121", + "reactants" : { + "OH" : {} , + "ETH" : {} + }, + "products" : { + "XO2" : {} , + "FORM" : { "yield" : 1.560 } , + "ALDX" : { "yield" : 0.220 } , + "HO2" : {} + }, + "orig params" : "CMAQ_10(1.0E-28, -0.8, 0.0E+00, 8.8E-12, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 1.0E-28, + "k0_B" : -0.8, + "k0_C" : -0.0E+00, + "kinf_A" : 8.8E-12, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R122", + "reactants" : { + "O3" : {} , + "ETH" : {} + }, + "products" : { + "FORM" : {} , + "CO" : { "yield" : 0.630 } , + "HO2" : { "yield" : 0.130 } , + "OH" : { "yield" : 0.130 } , + "FACD" : { "yield" : 0.370 } + }, + "orig params" : "CMAQ_1to4(1.2E-14, 0.0E+00, 2630.0)", + "type" : "ARRHENIUS", + "A" : 1.2E-14, + "B" : 0.0E+00, + "C" : -2630.0 + }, + { + "rxn id" : "R123", + "reactants" : { + "NO3" : {} , + "ETH" : {} + }, + "products" : { + "NO2" : {} , + "XO2" : {} , + "FORM" : { "yield" : 2.0 } + }, + "orig params" : "CMAQ_1to4(3.3E-12, 0.0E+00, 2880.0)", + "type" : "ARRHENIUS", + "A" : 3.3E-12, + "B" : 0.0E+00, + "C" : -2880.0 + }, + { + "rxn id" : "R124", + "reactants" : { + "IOLE" : {} , + "O" : {} + }, + "products" : { + "ALD2" : { "yield" : 1.240 } , + "ALDX" : { "yield" : 0.660 } , + "HO2" : { "yield" : 0.100 } , + "XO2" : { "yield" : 0.100 } , + "CO" : { "yield" : 0.100 } , + "PAR" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(2.3E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.3E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R125", + "reactants" : { + "IOLE" : {} , + "OH" : {} + }, + "products" : { + "ALD2" : { "yield" : 1.300 } , + "ALDX" : { "yield" : 0.700 } , + "HO2" : {}, + "XO2" : {} + }, + "orig params" : "CMAQ_1to4(1.0E-11, 0.0E+00, -550.0)", + "type" : "ARRHENIUS", + "A" : 1.0E-11, + "B" : 0.0E+00, + "C" : 550.0 + }, + { + "rxn id" : "R126", + "reactants" : { + "IOLE" : {} , + "O3" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.650 } , + "ALDX" : { "yield" : 0.350 } , + "FORM" : { "yield" : 0.250 } , + "CO" : { "yield" : 0.250 } , + "O" : { "yield" : 0.500 } , + "OH" : { "yield" : 0.500 } , + "HO2" : { "yield" : 0.500 } + }, + "orig params" : "CMAQ_1to4(8.4E-15, 0.0E+00, 1100.0)", + "type" : "ARRHENIUS", + "A" : 8.4E-15, + "B" : 0.0E+00, + "C" : -1100.0 + }, + { + "rxn id" : "R127", + "reactants" : { + "IOLE" : {} , + "NO3" : {} + }, + "products" : { + "ALD2" : { "yield" : 1.180 } , + "ALDX" : { "yield" : 0.640 } , + "HO2" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(9.6E-13, 0.0E+00, 270.0)", + "type" : "ARRHENIUS", + "A" : 9.6E-13, + "B" : 0.0E+00, + "C" : -270.0 + }, + { + "rxn id" : "R128", + "reactants" : { + "TOL" : {} , + "OH" : {} + }, + "products" : { + "HO2" : { "yield" : 0.440 } , + "XO2" : { "yield" : 0.080 } , + "CRES" : { "yield" : 0.360 } , + "TO2" : { "yield" : 0.560 } , + "TOLRO2" : { "yield" : 0.765 } + }, + "orig params" : "CMAQ_1to4(1.8E-12, 0.0E+00, -355.0)", + "type" : "ARRHENIUS", + "A" : 1.8E-12, + "B" : 0.0E+00, + "C" : 355.0 + }, + { + "rxn id" : "R129", + "reactants" : { + "TO2" : {} , + "NO" : {} + }, + "products" : { + "NO2" : { "yield" : 0.900 } , + "HO2" : { "yield" : 0.900 } , + "OPEN" : { "yield" : 0.900 } , + "NTR" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(8.1E-12, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 8.1E-12, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R130", + "reactants" : { + "TO2" : {} + }, + "products" : { + "CRES" : {} , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(4.2E+00, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 4.2E+00, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R131", + "reactants" : { + "OH" : {} , + "CRES" : {} + }, + "products" : { + "CRO" : { "yield" : 0.400 } , + "XO2" : { "yield" : 0.600 } , + "HO2" : { "yield" : 0.600 } , + "OPEN" : { "yield" : 0.300 } + }, + "orig params" : "CMAQ_1to4(4.1E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 4.1E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R132", + "reactants" : { + "CRES" : {} , + "NO3" : {} + }, + "products" : { + "CRO" : {} , + "HNO3" : {} + }, + "orig params" : "CMAQ_1to4(2.2E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.2E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R133", + "reactants" : { + "CRO" : {} , + "NO2" : {} + }, + "products" : { + "NTR" : {} + }, + "orig params" : "CMAQ_1to4(1.4E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.4E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R134", + "reactants" : { + "CRO" : {} , + "HO2" : {} + }, + "products" : { + "CRES" : {} + }, + "orig params" : "CMAQ_1to4(5.5E-12, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.5E-12, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R135", + "reactants" : { + "OPEN" : {} + }, + "products" : { + "C2O3" : {} , + "HO2" : {} , + "CO" : {} + }, + "scaling factor" : 9.0, + "orig params" : "9.0 * TUV_J(15, THETA)", + "base rate" : 7.17e-5, + "Fast-J id" : "HCHO_a", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R136", + "reactants" : { + "OPEN" : {} , + "OH" : {} + }, + "products" : { + "XO2" : {} , + "CO" : { "yield" : 2.000 } , + "HO2" : { "yield" : 2.000 } , + "C2O3" : {} , + "FORM" : {} + }, + "orig params" : "CMAQ_1to4(3.0E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.0E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R137", + "reactants" : { + "OPEN" : {} , + "O3" : {} + }, + "products" : { + "ALDX" : { "yield" : 0.030 } , + "C2O3" : { "yield" : 0.620 } , + "FORM" : { "yield" : 0.700 } , + "XO2" : { "yield" : 0.030 } , + "CO" : { "yield" : 0.690 } , + "OH" : { "yield" : 0.080 } , + "HO2" : { "yield" : 0.760 } , + "MGLY" : { "yield" : 0.200 } + }, + "orig params" : "CMAQ_1to4(5.4E-17, 0.0E+00, 500.0)", + "type" : "ARRHENIUS", + "A" : 5.4E-17, + "B" : 0.0E+00, + "C" : -500.0 + }, + { + "rxn id" : "R138", + "reactants" : { + "OH" : {} , + "XYL" : {} + }, + "products" : { + "HO2" : { "yield" : 0.700 } , + "XO2" : { "yield" : 0.500 } , + "CRES" : { "yield" : 0.200 } , + "MGLY" : { "yield" : 0.800 } , + "PAR" : { "yield" : 1.100 } , + "TO2" : { "yield" : 0.300 } , + "XYLRO2" : { "yield" : 0.804 } + }, + "orig params" : "CMAQ_1to4(1.7E-11, 0.0E+00, -116.0)", + "type" : "ARRHENIUS", + "A" : 1.7E-11, + "B" : 0.0E+00, + "C" : 116.0 + }, + { + "rxn id" : "R139", + "reactants" : { + "OH" : {} , + "MGLY" : {} + }, + "products" : { + "XO2" : {} , + "C2O3" : {} + }, + "orig params" : "CMAQ_1to4(1.8E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.8E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R140", + "reactants" : { + "MGLY" : {} + }, + "products" : { + "C2O3" : {} , + "HO2" : {} , + "CO" : {} + }, + "orig params" : "TUV_J(24, THETA)", + "base rate" : 7.64e-5, + "Fast-J id" : "MGLY", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R141", + "reactants" : { + "O" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.750 } , + "FORM" : { "yield" : 0.500 } , + "XO2" : { "yield" : 0.250 } , + "HO2" : { "yield" : 0.250 } , + "CXO3" : { "yield" : 0.250 } , + "PAR" : { "yield" : 0.250 } + }, + "orig params" : "CMAQ_1to4(3.6E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.6E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R142", + "reactants" : { + "OH" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.912 } , + "FORM" : { "yield" : 0.629 } , + "XO2" : { "yield" : 0.991 } , + "HO2" : { "yield" : 0.912 } , + "XO2N" : { "yield" : 0.088 }, + "ISOPRXN" : {} + }, + "orig params" : "CMAQ_1to4(2.54E-11, 0.0E+00, -407.6)", + "type" : "ARRHENIUS", + "A" : 2.54E-11, + "B" : 0.0E+00, + "C" : 407.6 + }, + { + "rxn id" : "R143", + "reactants" : { + "O3" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.650 } , + "FORM" : { "yield" : 0.600 } , + "XO2" : { "yield" : 0.200 } , + "HO2" : { "yield" : 0.066 } , + "OH" : { "yield" : 0.266 } , + "CXO3" : { "yield" : 0.200 } , + "ALDX" : { "yield" : 0.150 } , + "PAR" : { "yield" : 0.350 } , + "CO" : { "yield" : 0.066 } + }, + "orig params" : "CMAQ_1to4(7.86E-15, 0.0E+00, 1912.0)", + "type" : "ARRHENIUS", + "A" : 7.86E-15, + "B" : 0.0E+00, + "C" : -1912.0 + }, + { + "rxn id" : "R144", + "reactants" : { + "NO3" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.200 } , + "NTR" : { "yield" : 0.800 } , + "XO2" : {} , + "HO2" : { "yield" : 0.800 } , + "NO2" : { "yield" : 0.200 } , + "ALDX" : { "yield" : 0.800 } , + "PAR" : { "yield" : 2.400 } + }, + "orig params" : "CMAQ_1to4(3.03E-12, 0.0E+00, 448.0)", + "type" : "ARRHENIUS", + "A" : 3.03E-12, + "B" : 0.0E+00, + "C" : -448.0 + }, + { + "rxn id" : "R145", + "reactants" : { + "OH" : {} , + "ISPD" : {} + }, + "products" : { + "PAR" : { "yield" : 1.565 } , + "FORM" : { "yield" : 0.167 } , + "XO2" : { "yield" : 0.713 } , + "HO2" : { "yield" : 0.503 } , + "CO" : { "yield" : 0.334 } , + "MGLY" : { "yield" : 0.168 } , + "ALD2" : { "yield" : 0.252 } , + "C2O3" : { "yield" : 0.210 } , + "CXO3" : { "yield" : 0.250 } , + "ALDX" : { "yield" : 0.120 } + }, + "orig params" : "CMAQ_1to4(3.36E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.36E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R146", + "reactants" : { + "O3" : {} , + "ISPD" : {} + }, + "products" : { + "C2O3" : { "yield" : 0.114 } , + "FORM" : { "yield" : 0.150 } , + "MGLY" : { "yield" : 0.850 } , + "HO2" : { "yield" : 0.154 } , + "OH" : { "yield" : 0.268 } , + "XO2" : { "yield" : 0.064 } , + "ALD2" : { "yield" : 0.020 } , + "PAR" : { "yield" : 0.360 } , + "CO" : { "yield" : 0.225 } + }, + "orig params" : "CMAQ_1to4(7.1E-18, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 7.1E-18, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R147", + "reactants" : { + "NO3" : {} , + "ISPD" : {} + }, + "products" : { + "ALDX" : { "yield" : 0.357 } , + "FORM" : { "yield" : 0.282 } , + "PAR" : { "yield" : 1.282 } , + "HO2" : { "yield" : 0.925 } , + "CO" : { "yield" : 0.643 } , + "NTR" : { "yield" : 0.850 } , + "CXO3" : { "yield" : 0.075 } , + "XO2" : { "yield" : 0.075 } , + "HNO3" : { "yield" : 0.150 } + }, + "orig params" : "CMAQ_1to4(1.0E-15, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.0E-15, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R148", + "reactants" : { + "ISPD" : {} + }, + "products" : { + "CO" : { "yield" : 0.333 } , + "ALD2" : { "yield" : 0.067 }, + "FORM" : { "yield" : 0.900 } , + "PAR" : { "yield" : 0.832 }, + "HO2" : { "yield" : 1.033 } , + "XO2" : { "yield" : 0.700 }, + "C2O3" : { "yield" : 0.967 } + }, + "scaling factor" : 0.0036, + "orig params" : "0.0036 * TUV_J(89, THETA)", + "base rate" : 5.50e-7, + "Fast-J id" : "ISPD", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "R149", + "reactants" : { + "TERP" : {} , + "O" : {} + }, + "products" : { + "ALDX" : { "yield" : 0.150 } , + "PAR" : { "yield" : 5.12 } , + "TRPRXN" : {} + }, + "orig params" : "CMAQ_1to4(3.6E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.6E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "R150", + "reactants" : { + "TERP" : {} , + "OH" : {} + }, + "products" : { + "HO2" : { "yield" : 0.750 } , + "XO2" : { "yield" : 1.250 } , + "XO2N" : { "yield" : 0.250 } , + "FORM" : { "yield" : 0.280 }, + "PAR" : { "yield" : 1.66 } , + "ALDX" : { "yield" : 0.470 } , + "TRPRXN" : {} + }, + "orig params" : "CMAQ_1to4(1.5E-11, 0.0E+00, -449.0)", + "type" : "ARRHENIUS", + "A" : 1.5E-11, + "B" : 0.0E+00, + "C" : 449.0 + }, + { + "rxn id" : "R151", + "reactants" : { + "TERP" : {} , + "O3" : {} + }, + "products" : { + "OH" : { "yield" : 0.570 } , + "HO2" : { "yield" : 0.070 } , + "XO2" : { "yield" : 0.760 } , + "XO2N" : { "yield" : 0.180 } , + "FORM" : { "yield" : 0.240 } , + "CO" : { "yield" : 0.001 } , + "PAR" : { "yield" : 7.000 } , + "ALDX" : { "yield" : 0.210 } , + "CXO3" : { "yield" : 0.390 }, + "TRPRXN" : {} + }, + "orig params" : "CMAQ_1to4(1.2E-15, 0.0E+00, 821.0)", + "type" : "ARRHENIUS", + "A" : 1.2E-15, + "B" : 0.0E+00, + "C" : -821.0 + }, + { + "rxn id" : "R152", + "reactants" : { + "TERP" : {} , + "NO3" : {} + }, + "products" : { + "NO2" : { "yield" : 0.470 } , + "HO2" : { "yield" : 0.280 } , + "XO2" : { "yield" : 1.030 } , + "XO2N" : { "yield" : 0.250 } , + "ALDX" : { "yield" : 0.470 } , + "NTR" : { "yield" : 0.530 }, + "TRPRXN" : {} + }, + "orig params" : "CMAQ_1to4(3.7E-12, 0.0E+00, -175.0)", + "type" : "ARRHENIUS", + "A" : 3.7E-12, + "B" : 0.0E+00, + "C" : 175.0 + }, + { + "rxn id" : "R153", + "reactants" : { + "SO2" : {} , + "OH" : {} + }, + "products" : { + "SULF" : {} , + "HO2" : {} , + "SULRXN" : {} + }, + "orig params" : "CMAQ_10(3.0E-31, -3.3, 0.0E+00, 1.5E-12, 0.0E+00, 0.0E+00, 0.6, 1.0)", + "type" : "TROE", + "k0_A" : 3.0E-31, + "k0_B" : -3.3, + "k0_C" : -0.0E+00, + "kinf_A" : 1.5E-12, + "kinf_B" : 0.0E+00, + "kinf_C" : -0.0E+00, + "Fc" : 0.6, + "N" : 1.0 + }, + { + "rxn id" : "R154", + "reactants" : { + "OH" : {} , + "ETOH" : {} + }, + "products" : { + "HO2" : {} , + "ALD2" : { "yield" : 0.900 } , + "ALDX" : { "yield" : 0.050 } , + "FORM" : { "yield" : 0.100 } , + "XO2" : { "yield" : 0.100 } + }, + "orig params" : "CMAQ_1to4(6.9E-12, 0.0E+00, 230.0)", + "type" : "ARRHENIUS", + "A" : 6.9E-12, + "B" : 0.0E+00, + "C" : -230.0 + }, + { + "rxn id" : "R155", + "reactants" : { + "OH" : {} , + "ETHA" : {} + }, + "products" : { + "ALD2" : { "yield" : 0.991 } , + "XO2" : { "yield" : 0.991 } , + "XO2N" : { "yield" : 0.009 } , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(8.7E-12, 0.0E+00, 1070.0)", + "type" : "ARRHENIUS", + "A" : 8.7E-12, + "B" : 0.0E+00, + "C" : -1070.0 + }, + { + "rxn id" : "R156", + "reactants" : { + "NO2" : {} , + "ISOP" : {} + }, + "products" : { + "ISPD" : { "yield" : 0.200 } , + "NTR" : { "yield" : 0.800 } , + "XO2" : {} , + "HO2" : { "yield" : 0.800 } , + "NO" : { "yield" : 0.200 } , + "ALDX" : { "yield" : 0.800 } , + "PAR" : { "yield" : 2.400 } + }, + "orig params" : "CMAQ_1to4(1.5E-19, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.5E-19, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL1", + "reactants" : { + "CL2" : {} + }, + "products" : { + "CL" : { "yield" : 2.000 } + }, + "orig params" : "TUV_J(58, THETA)", + "base rate" : 0.00e+1, + "notes" : "Fast-J does not currently calculate Cl2 photolysis", + "type" : "PHOTOLYSIS" + }, + { + "rxn id" : "CL3", + "reactants" : { + "CL" : {} , + "O3" : {} + }, + "products" : { + "CLO" : {} + }, + "orig params" : "CMAQ_1to4(2.3E-11, 0.0E+00, 200.0)", + "type" : "ARRHENIUS", + "A" : 2.3E-11, + "B" : 0.0E+00, + "C" : -200.0 + }, + { + "rxn id" : "CL4", + "reactants" : { + "CLO" : { "qty" : 2 } + }, + "products" : { + "CL2" : { "yield" : 0.300 } , + "CL" : { "yield" : 1.400 } + }, + "orig params" : "CMAQ_1to4(1.63E-14, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.63E-14, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL5", + "reactants" : { + "CLO" : {} , + "NO" : {} + }, + "products" : { + "CL" : {} , + "NO2" : {} + }, + "orig params" : "CMAQ_1to4(6.4E-12, 0.0E+00, -290.0)", + "type" : "ARRHENIUS", + "A" : 6.4E-12, + "B" : 0.0E+00, + "C" : 290.0 + }, + { + "rxn id" : "CL6", + "reactants" : { + "CLO" : {} , + "HO2" : {} + }, + "products" : { + "HOCL" : {} + }, + "orig params" : "CMAQ_1to4(2.7E-12, 0.0E+00, -220.0)", + "type" : "ARRHENIUS", + "A" : 2.7E-12, + "B" : 0.0E+00, + "C" : 220.0 + }, + { + "rxn id" : "CL7", + "reactants" : { + "OH" : {} , + "FMCL" : {} + }, + "products" : { + "CL" : {} , + "CO" : {} + }, + "orig params" : "CMAQ_1to4(5.0E-13, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.0E-13, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL9", + "reactants" : { + "CL" : {} , + "CH4" : {} + }, + "products" : { + "HCL" : {} , + "MEO2" : {} + }, + "orig params" : "CMAQ_1to4(6.6E-12, 0.0E+00, 1240.0)", + "type" : "ARRHENIUS", + "A" : 6.6E-12, + "B" : 0.0E+00, + "C" : -1240.0 + }, + { + "rxn id" : "CL10", + "reactants" : { + "CL" : {} , + "PAR" : {} + }, + "products" : { + "HCL" : {} , + "XO2" : { "yield" : 0.870 } , + "XO2N" : { "yield" : 0.130 } , + "HO2" : { "yield" : 0.110 } , + "ALD2" : { "yield" : 0.060 } , + "PAR" : { "yield" : 1.0 } , + "ROR" : { "yield" : 0.760 } , + "ALDX" : { "yield" : 0.050 } + }, + "orig params" : "CMAQ_1to4(5.0E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.0E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL11", + "reactants" : { + "CL" : {} , + "ETHA" : {} + }, + "products" : { + "HCL" : {} , + "ALD2" : { "yield" : 0.991 } , + "XO2" : { "yield" : 0.991 } , + "XO2N" : { "yield" : 0.009 } , + "HO2" : {} + }, + "orig params" : "CMAQ_1to4(8.3E-11, 0.0E+00, 100.0)", + "type" : "ARRHENIUS", + "A" : 8.3E-11, + "B" : 0.0E+00, + "C" : -100.0 + }, + { + "rxn id" : "CL12", + "reactants" : { + "CL" : {} , + "ETH" : {} + }, + "products" : { + "FMCL" : {} , + "XO2" : { "yield" : 2.000 } , + "HO2" : { "yield" : 1.000 } , + "FORM" : { "yield" : 1.000 } + }, + "orig params" : "CMAQ_1to4(1.07E-10, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.07E-10, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL13", + "reactants" : { + "CL" : {} , + "OLE" : {} + }, + "products" : { + "FMCL" : {} , + "ALD2" : { "yield" : 0.330 } , + "ALDX" : { "yield" : 0.670 } , + "XO2" : { "yield" : 2.000 } , + "HO2" : { "yield" : 1.000 } , + "PAR" : { "yield" : 1.0 } + }, + "orig params" : "CMAQ_1to4(2.5E-10, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 2.5E-10, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL14", + "reactants" : { + "CL" : {} , + "IOLE" : {} + }, + "products" : { + "HCL" : { "yield" : 0.300 } , + "FMCL" : { "yield" : 0.700 } , + "ALD2" : { "yield" : 0.450 } , + "ALDX" : { "yield" : 0.550 } , + "OLE" : { "yield" : 0.300 } , + "PAR" : { "yield" : 0.300 } , + "XO2" : { "yield" : 1.700 } , + "HO2" : { "yield" : 1.000 } + }, + "orig params" : "CMAQ_1to4(3.5E-10, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 3.5E-10, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL15", + "reactants" : { + "CL" : {} , + "ISOP" : {} + }, + "products" : { + "HCL" : { "yield" : 0.15 } , + "XO2" : { "yield" : 1.000 } , + "HO2" : { "yield" : 1.000 } , + "FMCL" : { "yield" : 0.850 } , + "ISPD" : { "yield" : 1.000 } + }, + "orig params" : "CMAQ_1to4(4.3E-10, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 4.3E-10, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL16", + "reactants" : { + "CL" : {} , + "FORM" : {} + }, + "products" : { + "HCL" : {} , + "HO2" : { "yield" : 1.000 }, + "CO" : { "yield" : 1.000 } + }, + "orig params" : "CMAQ_1to4(8.2E-11, 0.0E+00, 34.0)", + "type" : "ARRHENIUS", + "A" : 8.2E-11, + "B" : 0.0E+00, + "C" : -34.0 + }, + { + "rxn id" : "CL17", + "reactants" : { + "CL" : {} , + "ALD2" : {} + }, + "products" : { + "HCL" : {} , + "C2O3" : { "yield" : 1.000 } + }, + "orig params" : "CMAQ_1to4(7.9E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 7.9E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL18", + "reactants" : { + "CL" : {} , + "ALDX" : {} + }, + "products" : { + "HCL" : {} , + "CXO3" : { "yield" : 1.000 } + }, + "orig params" : "CMAQ_1to4(1.3E-10, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.3E-10, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL19", + "reactants" : { + "CL" : {} , + "MEOH" : {} + }, + "products" : { + "HCL" : {} , + "HO2" : { "yield" : 1.000 }, + "FORM" : { "yield" : 1.000 } + }, + "orig params" : "CMAQ_1to4(5.5E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 5.5E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "CL20", + "reactants" : { + "CL" : {} , + "ETOH" : {} + }, + "products" : { + "HCL" : {} , + "HO2" : { "yield" : 1.000 }, + "ALD2" : { "yield" : 1.000 } + }, + "orig params" : "CMAQ_1to4(8.2E-11, 0.0E+00, -45.0)", + "type" : "ARRHENIUS", + "A" : 8.2E-11, + "B" : 0.0E+00, + "C" : 45.0 + }, + { + "rxn id" : "CL21", + "reactants" : { + "HCL" : {} , + "OH" : {} + }, + "products" : { + "CL" : {} + }, + "orig params" : "CMAQ_1to4(6.58E-13, 1.16, -58.0)", + "type" : "ARRHENIUS", + "A" : 6.58E-13, + "B" : 1.16, + "C" : 58.0 + }, + { + "rxn id" : "SA01", + "reactants" : { + "TOLRO2" : {} , + "NO" : {} + }, + "products" : { + "NO" : {} , + "TOLNRXN" : {} + }, + "orig params" : "CMAQ_1to4(2.70e-12, 0.0E+00, -360.0)", + "type" : "ARRHENIUS", + "A" : 2.70e-12, + "B" : 0.0E+00, + "C" : 360.0 + }, + { + "rxn id" : "SA02", + "reactants" : { + "TOLRO2" : {} , + "HO2" : {} + }, + "products" : { + "HO2" : {} , + "TOLHRXN" : {} + }, + "orig params" : "CMAQ_1to4(1.90e-13, 0.0E+00, -1300.0)", + "type" : "ARRHENIUS", + "A" : 1.90e-13, + "B" : 0.0E+00, + "C" : 1300.0 + }, + { + "rxn id" : "SA03", + "reactants" : { + "XYLRO2" : {} , + "NO" : {} + }, + "products" : { + "NO" : {} , + "XYLNRXN" : {} + }, + "orig params" : "CMAQ_1to4(2.70e-12, 0.0E+00, -360.0)", + "type" : "ARRHENIUS", + "A" : 2.70e-12, + "B" : 0.0E+00, + "C" : 360.0 + }, + { + "rxn id" : "SA04", + "reactants" : { + "XYLRO2" : {} , + "HO2" : {} + }, + "products" : { + "HO2" : {} , + "XYLHRXN" : {} + }, + "orig params" : "CMAQ_1to4(1.90e-13, 0.0E+00, -1300.0)", + "type" : "ARRHENIUS", + "A" : 1.90e-13, + "B" : 0.0E+00, + "C" : 1300.0 + }, + { + "rxn id" : "SA05", + "reactants" : { + "BENZENE" : {} , + "OH" : {} + }, + "products" : { + "OH" : {} , + "BENZRO2" : { "yield" : 0.764 } + }, + "orig params" : "CMAQ_1to4(2.47e-12, 0.0E+00, 206.0)", + "type" : "ARRHENIUS", + "A" : 2.47e-12, + "B" : 0.0E+00, + "C" : -206.0 + }, + { + "rxn id" : "SA06", + "reactants" : { + "BENZRO2" : {} , + "NO" : {} + }, + "products" : { + "NO" : {} , + "BNZNRXN" : {} + }, + "orig params" : "CMAQ_1to4(2.70e-12, 0.0E+00, -360.0)", + "type" : "ARRHENIUS", + "A" : 2.70e-12, + "B" : 0.0E+00, + "C" : 360.0 + }, + { + "rxn id" : "SA07", + "reactants" : { + "BENZRO2" : {} , + "HO2" : {} + }, + "products" : { + "HO2" : {} , + "BNZHRXN" : {} + }, + "orig params" : "CMAQ_1to4(1.90e-13, 0.0E+00, -1300.0)", + "type" : "ARRHENIUS", + "A" : 1.90e-13, + "B" : 0.0E+00, + "C" : 1300.0 + }, + { + "rxn id" : "SA08", + "reactants" : { + "SESQ" : {} , + "O3" : {} + }, + "products" : { + "O3" : {} , + "SESQRXN" : {} + }, + "orig params" : "CMAQ_1to4(1.16E-14, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.16E-14, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "SA09", + "reactants" : { + "SESQ" : {} , + "OH" : {} + }, + "products" : { + "OH" : {} , + "SESQRXN" : {} + }, + "orig params" : "CMAQ_1to4(1.97E-10, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.97E-10, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "SA10", + "reactants" : { + "SESQ" : {} , + "NO3" : {} + }, + "products" : { + "NO3" : {} , + "SESQRXN" : {} + }, + "orig params" : "CMAQ_1to4(1.90E-11, 0.0E+00, 0.0E+00)", + "type" : "ARRHENIUS", + "A" : 1.90E-11, + "B" : 0.0E+00, + "C" : -0.0E+00 + }, + { + "rxn id" : "jo2", + "reactants" : { + "O2" : {} + }, + "products" : { + "O" : { "yield" : 2 } + }, + "orig params" : "TUV_J(1, THETA)", + "base rate" : 0.00e+1, + "notes" : "Fast-J does not currently calculate O2 photolysis", + "type" : "PHOTOLYSIS" + } + ] +} +]} diff --git a/test/monarch/monarch_box_modal/cb05_species.json b/test/monarch/settings/monarch_cb05/cb05_species.json similarity index 94% rename from test/monarch/monarch_box_modal/cb05_species.json rename to test/monarch/settings/monarch_cb05/cb05_species.json index 3f42cf3c6..3f6cde00e 100755 --- a/test/monarch/monarch_box_modal/cb05_species.json +++ b/test/monarch/settings/monarch_cb05/cb05_species.json @@ -1,5 +1,5 @@ { -"notes" :"Descriptions are from CB5 Final Report RT-04-00675 (www.camx.com/files/cb05_final_report_120805.aspx) and from notes in the cb05cl_ae5_aq_CMAQ.def mechanism file", +"notes" :"Descriptions are from CB5 Final Report RT-04-00675 (www.camx.com/files/cb05_final_report_120805.aspx) and from notes in the cb05cl_ae5_aq_CMAQ.def mechanism file", "camp-data" : [ { "name" : "AACD", @@ -44,7 +44,8 @@ { "name" : "CH4", "type" : "CHEM_SPEC", - "description" : "methane" + "description" : "methane", + "tracer type" : "CONSTANT" }, { "name" : "CL", @@ -366,11 +367,6 @@ "type" : "CHEM_SPEC", "description" : "first generation product from XYL" }, - { - "name" : "N2O", - "type" : "CHEM_SPEC", - "description" : "nitrous oxide - does not participate in CB05 reactions" - }, { "name" : "DUMMY", "type" : "CHEM_SPEC", @@ -379,22 +375,31 @@ { "name" : "O2", "type" : "CHEM_SPEC", - "description" : "molecular oxygen" + "description" : "molecular oxygen", + "tracer type" : "CONSTANT" + }, + { + "name" : "N2", + "type" : "CHEM_SPEC", + "description" : "molecular hydrogen", + "tracer type" : "CONSTANT" }, { "name" : "H2O", "type" : "CHEM_SPEC", - "is gas-phase water" : true, - "description" : "water vapor" + "description" : "water vapor", + "tracer type" : "CONSTANT" }, { "name" : "H2", "type" : "CHEM_SPEC", - "description" : "molecular hydrogen" + "description" : "molecular hydrogen", + "tracer type" : "CONSTANT" }, { "name" : "M", "type" : "CHEM_SPEC", - "description" : "third body" + "description" : "third body", + "tracer type" : "CONSTANT" } ]} diff --git a/test/monarch/settings/monarch_cb05/config.json b/test/monarch/settings/monarch_cb05/config.json new file mode 100644 index 000000000..7e203645e --- /dev/null +++ b/test/monarch/settings/monarch_cb05/config.json @@ -0,0 +1,8 @@ +{ + "camp-files" : [ + "settings/monarch_cb05/cb05_mechanism.json", + "settings/monarch_cb05/cb05_species.json", + "settings/monarch_cb05/cb05_abs_tol.json" + ] +} + diff --git a/test/monarch/settings/monarch_cb05/interface.json b/test/monarch/settings/monarch_cb05/interface.json new file mode 100644 index 000000000..a5a381701 --- /dev/null +++ b/test/monarch/settings/monarch_cb05/interface.json @@ -0,0 +1,170 @@ +{ + "notes" : "Species map and initial concentrations for current MONARCH chemistry scheme", + "monarch-data" : + [ + { + "name" : "MONARCH chemistry species map", + "type" : "SPECIES_MAP", + "gas-phase water" : "H2O", + "gas-phase species" : { + "NO2" : { "monarch id" : 1 }, + "NO" : { "monarch id" : 2 }, + "O3" : { "monarch id" : 3 }, + "NO3" : { "monarch id" : 4 }, + "N2O5" : { "monarch id" : 5 }, + "HNO3" : { "monarch id" : 6 }, + "HONO" : { "monarch id" : 7 }, + "PNA" : { "monarch id" : 8 }, + "H2O2" : { "monarch id" : 9 }, + "NTR" : { "monarch id" : 10 }, + "ROOH" : { "monarch id" : 11 }, + "FORM" : { "monarch id" : 12 }, + "ALD2" : { "monarch id" : 13 }, + "ALDX" : { "monarch id" : 14 }, + "PAR" : { "monarch id" : 15 }, + "CO" : { "monarch id" : 16 }, + "MEPX" : { "monarch id" : 17 }, + "MEOH" : { "monarch id" : 18 }, + "FACD" : { "monarch id" : 19 }, + "PAN" : { "monarch id" : 20 }, + "PACD" : { "monarch id" : 21 }, + "AACD" : { "monarch id" : 22 }, + "PANX" : { "monarch id" : 23 }, + "OLE" : { "monarch id" : 24 }, + "ETH" : { "monarch id" : 25 }, + "IOLE" : { "monarch id" : 26 }, + "TOL" : { "monarch id" : 27 }, + "CRES" : { "monarch id" : 28 }, + "OPEN" : { "monarch id" : 29 }, + "MGLY" : { "monarch id" : 30 }, + "XYL" : { "monarch id" : 31 }, + "ISOP" : { "monarch id" : 32 }, + "ISPD" : { "monarch id" : 33 }, + "TERP" : { "monarch id" : 34 }, + "SO2" : { "monarch id" : 35 }, + "SULF" : { "monarch id" : 36 }, + "ETOH" : { "monarch id" : 37 }, + "ETHA" : { "monarch id" : 38 }, + "CL2" : { "monarch id" : 39 }, + "HOCL" : { "monarch id" : 40 }, + "FMCL" : { "monarch id" : 41 }, + "HCL" : { "monarch id" : 42 }, + "BENZENE" : { "monarch id" : 43 }, + "SESQ" : { "monarch id" : 44 }, + "O" : { "monarch id" : 45 }, + "O1D" : { "monarch id" : 46 }, + "OH" : { "monarch id" : 47 }, + "HO2" : { "monarch id" : 48 }, + "XO2" : { "monarch id" : 49 }, + "XO2N" : { "monarch id" : 50 }, + "MEO2" : { "monarch id" : 51 }, + "HCO3" : { "monarch id" : 52 }, + "C2O3" : { "monarch id" : 53 }, + "CXO3" : { "monarch id" : 54 }, + "ROR" : { "monarch id" : 55 }, + "TO2" : { "monarch id" : 56 }, + "TOLRO2" : { "monarch id" : 57 }, + "CRO" : { "monarch id" : 58 }, + "XYLRO2" : { "monarch id" : 59 }, + "ISOPRXN" : { "monarch id" : 60 }, + "TRPRXN" : { "monarch id" : 61 }, + "SULRXN" : { "monarch id" : 62 }, + "CL" : { "monarch id" : 63 }, + "CLO" : { "monarch id" : 64 }, + "TOLNRXN" : { "monarch id" : 65 }, + "TOLHRXN" : { "monarch id" : 66 }, + "XYLNRXN" : { "monarch id" : 67 }, + "XYLHRXN" : { "monarch id" : 68 }, + "BENZRO2" : { "monarch id" : 69 }, + "BNZNRXN" : { "monarch id" : 70 }, + "BNZHRXN" : { "monarch id" : 71 }, + "SESQRXN" : { "monarch id" : 72 } + } + }, + { + "name" : "Initial concentrations for MONARCH chemical species", + "type" : "INIT_CONC", + "gas-phase species" : { + "AACD" : { "init conc" : 0.2E+00 }, + "ALD2" : { "init conc" : 1.0E+00 }, + "ALDX" : { "init conc" : 0.0 }, + "BENZENE" : { "init conc" : 0.0 }, + "BENZRO2" : { "init conc" : 0.0 }, + "BNZHRXN" : { "init conc" : 0.0 }, + "BNZNRXN" : { "init conc" : 0.0 }, + "C2O3" : { "init conc" : 0.0 }, + "CH4" : { "init conc" : 1.85 }, + "CL" : { "init conc" : 0.0 }, + "CL2" : { "init conc" : 0.0 }, + "CLO" : { "init conc" : 0.0 }, + "CO" : { "init conc" : 2.1E+02 }, + "CRES" : { "init conc" : 0.0 }, + "CRO" : { "init conc" : 0.0 }, + "CXO3" : { "init conc" : 0.0 }, + "ETH" : { "init conc" : 0.2E+00 }, + "ETHA" : { "init conc" : 1.0E+00 }, + "ETOH" : { "init conc" : 0.0 }, + "FACD" : { "init conc" : 0.0 }, + "FMCL" : { "init conc" : 0.0 }, + "FORM" : { "init conc" : 1.2E+00 }, + "H2O2" : { "init conc" : 1.1E+00 }, + "HCL" : { "init conc" : 0.7E+00 }, + "HCO3" : { "init conc" : 0.0 }, + "HNO3" : { "init conc" : 1.0E+00 }, + "HO2" : { "init conc" : 0.0 }, + "HOCL" : { "init conc" : 0.0 }, + "HONO" : { "init conc" : 0.0 }, + "IOLE" : { "init conc" : 3.1E-04 }, + "ISOP" : { "init conc" : 5.0E+00 }, + "ISOPRXN" : { "init conc" : 0.0 }, + "ISPD" : { "init conc" : 0.0 }, + "MEO2" : { "init conc" : 0.0 }, + "MEOH" : { "init conc" : 1.2E-01 }, + "MEPX" : { "init conc" : 0.5E+00 }, + "MGLY" : { "init conc" : 0.0 }, + "N2O5" : { "init conc" : 0.0 }, + "NO" : { "init conc" : 0.1E+00 }, + "NO2" : { "init conc" : 1.0E+00 }, + "NO3" : { "init conc" : 0.0 }, + "NTR" : { "init conc" : 0.1E+00 }, + "O" : { "init conc" : 0.0 }, + "O1D" : { "init conc" : 0.0 }, + "O3" : { "init conc" : 5.0E+01 }, + "OH" : { "init conc" : 0.0 }, + "OLE" : { "init conc" : 2.3E-02 }, + "OPEN" : { "init conc" : 0.0 }, + "PACD" : { "init conc" : 0.0 }, + "PAN" : { "init conc" : 0.8E+00 }, + "PANX" : { "init conc" : 0.0 }, + "PAR" : { "init conc" : 2.0E+00 }, + "PNA" : { "init conc" : 0.0 }, + "ROOH" : { "init conc" : 2.5E-02 }, + "ROR" : { "init conc" : 0.0 }, + "SESQ" : { "init conc" : 0.0 }, + "SESQRXN" : { "init conc" : 0.0 }, + "SO2" : { "init conc" : 0.8E+00 }, + "SULF" : { "init conc" : 0.0 }, + "SULRXN" : { "init conc" : 0.0 }, + "TERP" : { "init conc" : 0.0E+00 }, + "TO2" : { "init conc" : 0.0 }, + "TOL" : { "init conc" : 0.1E+00 }, + "TOLHRXN" : { "init conc" : 0.0 }, + "TOLNRXN" : { "init conc" : 0.0 }, + "TOLRO2" : { "init conc" : 0.0 }, + "TRPRXN" : { "init conc" : 0.0 }, + "XO2" : { "init conc" : 0.0 }, + "XO2N" : { "init conc" : 0.0 }, + "XYL" : { "init conc" : 0.1E+00 }, + "XYLHRXN" : { "init conc" : 0.0 }, + "XYLNRXN" : { "init conc" : 0.0 }, + "XYLRO2" : { "init conc" : 0.0 }, + "DUMMY" : { "init conc" : 0.0 }, + "O2" : { "init conc" : 2.095E+05 }, + "H2O" : { "init conc" : 0.0 }, + "N2" : { "init conc" : 7.80055E+05 }, + "H2" : { "init conc" : 5.6E-01 }, + "M" : { "init conc" : 1.0E+06 } + } + } + ] +} diff --git a/test/monarch/settings/monarch_cb05/monarch_cell_init_concs.json b/test/monarch/settings/monarch_cb05/monarch_cell_init_concs.json new file mode 100644 index 000000000..93b2f5867 --- /dev/null +++ b/test/monarch/settings/monarch_cb05/monarch_cell_init_concs.json @@ -0,0 +1,198 @@ +{ + "input": { + "dt": 0.18E+3, + "temperature": 0.31159140014648438E+3, + "pressure": 0.969868984375E+5, + "species": { + "AACD": 0.62174171944207046E-5, + "ALD2": 0.19614510165411048E-4, + "ALDX": 0.7857509444875177E-5, + "BENZENE": 0.10000000031710769E-29, + "BENZRO2": 0.10000000031710769E-29, + "BNZHRXN": 0.10040059938791311E-29, + "BNZNRXN": 0.10001450121541943E-29, + "C2O3": 0.47164380845288179E-7, + "CH4": 0.18500000000000001E+1, + "CL": 0.10000000031710769E-29, + "CL2": 0.10000000031710769E-29, + "CLO": 0.31090640230757751E-24, + "CO": 0.11599300056695938E+0, + "CRES": 0.1524196004315749E-27, + "CRO": 0.11912129484340255E-27, + "CXO3": 0.25590109586914878E-7, + "ETH": 0.10000000031710769E-29, + "ETHA": 0.23231759398167906E-11, + "ETOH": 0.10000000031710769E-29, + "FACD": 0.69096887933550732E-10, + "FMCL": 0.10000000031710769E-29, + "FORM": 0.44474098831415176E-3, + "H2O2": 0.10000000031710769E-29, + "HCL": 0.5277364824578279E-25, + "HCO3": 0.23332139172105304E-12, + "HNO3": 0.53833751007914543E-3, + "HO2": 0.72130276862480969E-7, + "HOCL": 0.57933061355217259E-22, + "HONO": 0.22021460210908117E-7, + "IOLE": 0.10000000031710769E-29, + "ISOP": 0.10000000031710769E-29, + "ISOPRXN": 0.1000055956702176E-29, + "ISPD": 0.45674711330578916E-29, + "MEO2": 0.21012319848523475E-5, + "MEOH": 0.13912099529989064E-3, + "MEPX": 0.65547437407076359E-3, + "MGLY": 0.16599439727396681E-27, + "N2O5": 0.12908010376122547E-5, + "NO": 0.19265480659669265E-4, + "NO2": 0.50812170229619369E-4, + "NO3": 0.54465101129608229E-4, + "NTR": 0.61614870649172315E-14, + "O": 0.13578099514882948E-22, + "O1D": 0.10000000031710769E-29, + "O3": 0.49882911145687103E-1, + "OH": 0.14055109853750025E-9, + "OLE": 0.10000000031710769E-29, + "OPEN": 0.19160119829526249E-26, + "PACD": 0.47154189815046266E-4, + "PAN": 0.37651270758942701E-5, + "PANX": 0.64504598640269251E-6, + "PAR": 0.10000000031710769E-29, + "PNA": 0.1258950055316177E-8, + "ROOH": 0.43987289245706052E-4, + "ROR": 0.10000000031710769E-29, + "SESQ": 0.10000000031710769E-29, + "SESQRXN": 0.18213070501651804E-27, + "SO2": 0.81664336903486401E-4, + "SULF": 0.14046659657651617E-6, + "SULRXN": 0.81880395796929406E-8, + "TERP": 0.10000000031710769E-29, + "TO2": 0.10000000031710769E-29, + "TOL": 0.10000000031710769E-29, + "TOLHRXN": 0.10040059938791311E-29, + "TOLNRXN": 0.10001450121541943E-29, + "TOLRO2": 0.10000000031710769E-29, + "TRPRXN": 0.37742479212812042E-28, + "XO2": 0.39686949548922712E-6, + "XO2N": 0.12433550310631572E-17, + "XYL": 0.10000000031710769E-29, + "XYLHRXN": 0.10040059938791311E-29, + "XYLNRXN": 0.10001450121541943E-29, + "XYLRO2": 0.10000000031710769E-29, + "DUMMY": 0.0E+0, + "O2": 0.2095E+6, + "N2": 0.780055E+6, + "H2O": 0.75393860000000004E+4, + "H2": 0.56000000000000005E+0, + "M": 0.1E+7 + }, + "photo_rates": { + "1": 0.81393060000000007E-2, + "2": 0.44343159999999998E-3, + "3": 0.34047619999999997E-4, + "4": 0.17952699999999999E+0, + "5": 0.23127600000000002E-1, + "6": 0.18042119999999999E-2, + "7": 0.63994860000000003E-5, + "8": 0.38076179999999998E-5, + "9": 0.61251409999999997E-6, + "10": 0.44840879999999998E-4, + "11": 0.24762390000000001E-5, + "12": 0.47993339999999996E-5, + "13": 0.47993339999999996E-5, + "14": 0.26903319999999998E-4, + "15": 0.41220329999999998E-4, + "16": 0.46659810000000004E-5, + "17": 0.73674310000000004E-6, + "18": 0.2384226E-6, + "19": 0.42100369999999999E-4, + "20": 0.73674310000000004E-6, + "21": 0.26903319999999998E-4, + "22": 0.74832529999999998E-3, + "23": 0.1539452E-5, + "24": 0.0E+0, + "25": 0.0E+0 + } + }, + "output": { + "species": { + "AACD": 0.62590025718772617E-5, + "ALD2": 0.19621388572631832E-4, + "ALDX": 0.7798674680107242E-5, + "BENZENE": 0.99897638061926027E-30, + "BENZRO2": 0.35806511323632006E-30, + "BNZHRXN": 0.12900024345796077E-29, + "BNZNRXN": 0.13574982932824609E-29, + "C2O3": 0.23480471486267303E-6, + "CH4": 0.18500000000000001E+1, + "CL": 0.8080837576396643E-28, + "CL2": 0.10000000031710769E-29, + "CLO": 0.17192030339156026E-24, + "CO": 0.11598110707191707E+0, + "CRES": 0.1406781839236749E-27, + "CRO": 0.383888778542257E-29, + "CXO3": 0.52938660710781139E-7, + "ETH": 0.99300450059474726E-30, + "ETHA": 0.23226520264256829E-11, + "ETOH": 0.99735807572494656E-30, + "FACD": 0.82349344972383265E-10, + "FMCL": 0.99959831560303616E-30, + "FORM": 0.44295350214668767E-3, + "H2O2": 0.28033805780900199E-5, + "HCL": 0.13823701822056611E-24, + "HCO3": 0.28007223872145878E-10, + "HNO3": 0.54008983710208329E-3, + "HO2": 0.16351599456740513E-4, + "HOCL": 0.57986504276184414E-22, + "HONO": 0.10793072900454678E-6, + "IOLE": 0.91092752785414626E-30, + "ISOP": 0.92411819066147499E-30, + "ISOPRXN": 0.10686941318326539E-29, + "ISPD": 0.45053929045298567E-29, + "MEO2": 0.89618989930190377E-5, + "MEOH": 0.13907141768162783E-3, + "MEPX": 0.65343029024404623E-3, + "MGLY": 0.14543127335017645E-27, + "N2O5": 0.86641882865399625E-9, + "NO": 0.25207232522198142E-4, + "NO2": 0.10056236426103146E-3, + "NO3": 0.46520218691699088E-7, + "NTR": 0.61599306926735448E-14, + "O": 0.42132347431301411E-9, + "O1D": 0.24490839345374436E-14, + "O3": 0.49933954018022163E-1, + "OH": 0.21055700878724304E-6, + "OLE": 0.97231160079249704E-30, + "OPEN": 0.17935229397737992E-26, + "PACD": 0.47264707366947338E-4, + "PAN": 0.31820988123059635E-5, + "PANX": 0.58290694144719426E-6, + "PAR": 0.11695237407614084E-29, + "PNA": 0.11469422141202172E-6, + "ROOH": 0.44088999905958151E-4, + "ROR": 0.16903666420655522E-34, + "SESQ": 0.23832008919912267E-30, + "SESQRXN": 0.18289238493049001E-27, + "SO2": 0.81610341268319132E-4, + "SULF": 0.19446223174378802E-6, + "SULRXN": 0.62183674746964797E-7, + "TERP": 0.90887289109506313E-30, + "TO2": 0.1916774465381348E-35, + "TOL": 0.99550570335989456E-30, + "TOLHRXN": 0.12907275688726646E-29, + "TOLNRXN": 0.13583024604690902E-29, + "TOLRO2": 0.35855911921820305E-30, + "TRPRXN": 0.37833606324888056E-28, + "XO2": 0.84893072054066609E-6, + "XO2N": 0.27523716743524836E-17, + "XYL": 0.98066583887287257E-30, + "XYLHRXN": 0.1294012961076942E-29, + "XYLNRXN": 0.13619456894201406E-29, + "XYLRO2": 0.36373702680307706E-30, + "DUMMY": 0.96713882097368612E-5, + "O2": 0.2095E+6, + "N2": 0.780055E+6, + "H2O": 0.75393860000000004E+4, + "H2": 0.56000000000000005E+0, + "M": 0.1E+7 + } + } +} diff --git a/test/monarch/simple_comp.txt b/test/monarch/simple_comp.txt deleted file mode 100644 index bf10c2e10..000000000 --- a/test/monarch/simple_comp.txt +++ /dev/null @@ -1,102 +0,0 @@ - 360.000000 0.00000000 1.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 361.600006 0.739248812 0.178082421 8.26687142E-02 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 363.200012 1.36417902 0.178082421 0.279656023 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 364.800018 1.89246905 0.178082421 0.573283494 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 366.400024 2.33906341 0.178082451 0.948606610 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 368.000031 2.71659565 0.178082466 1.39299178 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 369.600037 3.03574586 0.178082436 1.89575911 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 371.200043 3.30554223 0.178082421 2.44788027 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 372.800049 3.53361678 0.178082421 3.04172325 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 374.400055 3.72642159 0.178082421 3.67083597 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 376.000061 3.88941073 0.178082436 4.32976437 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 377.600067 4.02719498 0.178082436 5.01389790 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 379.200073 4.14367199 0.178082451 5.71933842 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 380.800079 4.24213696 0.178082451 6.44279099 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 382.400085 4.32537508 0.178082451 7.18147039 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 384.000092 4.39574099 0.178082466 7.93302202 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 385.600098 4.45522547 0.178082466 8.69545460 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 387.200104 4.50551128 0.178082421 9.46708679 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 388.800110 4.54802084 0.178082421 10.2464952 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 390.400116 4.58395672 0.178082421 11.0324774 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 392.000122 4.61433506 0.178082421 11.8240166 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 393.600128 4.64001608 0.178082421 12.6202536 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 395.200134 4.66172552 0.178082421 13.4204617 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 396.800140 4.68007803 0.178082421 14.2240267 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 398.400146 4.69559240 0.178082421 15.0304298 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 400.000153 4.70870733 0.178082421 15.8392324 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 401.600159 4.71979427 0.178082421 16.6500626 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 403.200165 4.72916651 0.178082436 17.4626083 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 404.800171 4.73708963 0.178082421 18.2766037 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 406.400177 4.74378729 0.178082421 19.0918236 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 408.000183 4.74944925 0.178082421 19.9080791 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 409.600189 4.75423574 0.178082421 20.7252102 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 411.200195 4.75828218 0.178082421 21.5430813 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 412.800201 4.76170301 0.178082421 22.3615780 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 414.400208 4.76459455 0.178082421 23.1806030 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 416.000214 4.76703882 0.178082421 24.0000763 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 417.600220 4.76910543 0.178082421 24.8199272 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 419.200226 4.77085209 0.178082421 25.6400986 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 420.800232 4.77232885 0.178082421 26.4605389 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 422.400238 4.77357721 0.178082421 27.2812080 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 424.000244 4.77463245 0.178082421 28.1020699 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 425.600250 4.77552462 0.178082421 28.9230957 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 427.200256 4.77627897 0.178082421 29.7442589 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 428.800262 4.77691650 0.178082421 30.5655384 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 430.400269 4.77745533 0.178082421 31.3869171 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 432.000275 4.77791119 0.178082421 32.2083778 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 433.600281 4.77829647 0.178082421 33.0299110 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 435.200287 4.77862215 0.178082421 33.8515015 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 436.800293 4.77889729 0.178082421 34.6731453 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 438.400299 4.77912998 0.178082421 35.4948311 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 440.000305 4.77932644 0.178082421 36.3165512 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 441.600311 4.77949286 0.178082421 37.1383018 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 443.200317 4.77963352 0.178082421 37.9600792 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 444.800323 4.77975225 0.178082421 38.7818794 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 446.400330 4.77985287 0.178082421 39.6036949 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 448.000336 4.77993774 0.178082421 40.4255295 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 449.600342 4.78000927 0.178082421 41.2473755 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 451.200348 4.78006983 0.178082421 42.0692329 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 452.800354 4.78012133 0.178082421 42.8910980 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 454.400360 4.78016472 0.178082421 43.7129707 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 456.000366 4.78020144 0.178082421 44.5348511 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 457.600372 4.78023243 0.178082421 45.3567390 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 459.200378 4.78025866 0.178082421 46.1786308 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 460.800385 4.78028059 0.178082421 47.0005264 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 462.400391 4.78029919 0.178082421 47.8224258 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 464.000397 4.78031492 0.178082421 48.6443291 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 465.600403 4.78032827 0.178082421 49.4662323 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 467.200409 4.78033972 0.178082421 50.2881393 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 468.800415 4.78034925 0.178082421 51.1100464 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 470.400421 4.78035736 0.178082421 51.9319572 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 472.000427 4.78036404 0.178082421 52.7538681 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 473.600433 4.78036976 0.178082421 53.5757790 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 475.200439 4.78037453 0.178082421 54.3976898 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 476.800446 4.78037882 0.178082421 55.2196045 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 478.400452 4.78038216 0.178082421 56.0415192 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 480.000458 4.78038502 0.178082421 56.8634338 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 481.600464 4.78038740 0.178082421 57.6853485 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 483.200470 4.78038979 0.178082421 58.5072632 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 484.800476 4.78039169 0.178082421 59.3291779 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 486.400482 4.78039312 0.178082421 60.1510925 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 488.000488 4.78039455 0.178082421 60.9730072 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 489.600494 4.78039551 0.178082421 61.7949219 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 491.200500 4.78039646 0.178082421 62.6168365 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 492.800507 4.78039742 0.178082421 63.4387550 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 494.400513 4.78039789 0.178082421 64.2606735 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 496.000519 4.78039837 0.178082421 65.0825882 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 497.600525 4.78039885 0.178082421 65.9045029 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 499.200531 4.78039932 0.178082421 66.7264175 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 500.800537 4.78039980 0.178082421 67.5483322 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 502.400543 4.78040028 0.178082421 68.3702469 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 504.000549 4.78040028 0.178082421 69.1921616 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 505.600555 4.78040028 0.178082421 70.0140762 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 507.200562 4.78040028 0.178082421 70.8359909 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 508.800568 4.78040028 0.178082421 71.6579056 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 510.400574 4.78040028 0.178082421 72.4798203 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 512.000549 4.78040028 0.178082421 73.3017349 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 513.600525 4.78040028 0.178082421 74.1236496 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 515.200500 4.78040028 0.178082421 74.9455643 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 516.800476 4.78040028 0.178082421 75.7674789 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 518.400452 4.78040028 0.178082421 76.5893936 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 520.000427 4.78040028 0.178082421 77.4113083 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 - 521.600403 4.78040028 0.178082421 78.2332230 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8.16326506E-10 diff --git a/test/monarch/solver_test_mech.json b/test/monarch/solver_test_mech.json deleted file mode 100644 index b4b305894..000000000 --- a/test/monarch/solver_test_mech.json +++ /dev/null @@ -1,302 +0,0 @@ -{ - "camp-data" : [ - { - "name" : "H2O", - "type" : "CHEM_SPEC", - "molecular weight [kg mol-1]" : 0.01801528 - }, - { - "name" : "H2O_aq", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "tracer type" : "CONSTANT", - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.01801528 - }, - { - "name" : "H2SO4", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" : 8.586232e6, - "HLC exp factor [K]" : 0.0, - "diffusion coeff [m2 s-1]" : 1.30e-5, - "N star" : 1.83, - "molecular weight [kg mol-1]" : 0.0981 - }, - { - "name" : "HNO3", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" : 2.0725389, - "HLC exp factor [K]" : 8700.0, - "diffusion coeff [m2 s-1]" : 1.32e-5, - "N star" : 1.94, - "molecular weight [kg mol-1]" : 0.06301 - }, - { - "name" : "NH3", - "type" : "CHEM_SPEC", - "HLC(298K) [M Pa-1]" : 5.990624e-4, - "HLC exp factor [K]" : 3920.0, - "diffusion coeff [m2 s-1]" : 2.3e-5, - "N star" : 1.92, - "molecular weight [kg mol-1]" : 0.017031 - }, - { - "name" : "H_p", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "charge" : 1, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.001008 - }, - { - "name" : "OH_m", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "charge" : -1, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.017008 - }, - { - "name" : "H2SO4_aq", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.098079 - }, - { - "name" : "HSO4_m", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "charge" : -1, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.097069 - }, - { - "name" : "SO4_mm", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "charge" : -2, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.096063 - }, - { - "name" : "HNO3_aq", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.0630129 - }, - { - "name" : "NO3_m", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "charge" : -1, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.0620049 - }, - { - "name" : "NH3_aq", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.017031 - }, - { - "name" : "NH4_p", - "type" : "CHEM_SPEC", - "phase" : "AEROSOL", - "charge" : 1, - "density [kg m-3]" : 1000.0, - "molecular weight [kg mol-1]" : 0.018039 - }, - { - "name" : "aq inorg", - "type" : "AERO_PHASE", - "species" : [ "H2O_aq", "H_p", "OH_m", "H2SO4_aq", "HSO4_m", "SO4_mm", "HNO3_aq", "NO3_m", "NH3_aq", "NH4_p" ] - }, - { - "name" : "one mode", - "type" : "AERO_REP_MODAL_BINNED_MASS", - "modes/bins" : - { - "the mode" : - { - "type" : "MODAL", - "phases" : [ "aq inorg" ], - "shape" : "LOG_NORMAL", - "geometric mean diameter [m]" : 2.12e-8, - "geometric standard deviation" : 2.24 - } - } - }, - { - "name" : "MONARCH mod37", - "type" : "MECHANISM", - "reactions" : [ - { - "type" : "HL_PHASE_TRANSFER", - "gas-phase species" : "H2SO4", - "aerosol phase" : "aq inorg", - "aerosol-phase species" : "H2SO4_aq", - "aerosol-phase water" : "H2O_aq" - }, - { - "type" : "HL_PHASE_TRANSFER", - "gas-phase species" : "HNO3", - "aerosol phase" : "aq inorg", - "aerosol-phase species" : "HNO3_aq", - "aerosol-phase water" : "H2O_aq" - }, - { - "type" : "HL_PHASE_TRANSFER", - "gas-phase species" : "NH3", - "aerosol phase" : "aq inorg", - "aerosol-phase species" : "NH3_aq", - "aerosol-phase water" : "H2O_aq" - }, - { - "type" : "AQUEOUS_EQUILIBRIUM", - "aerosol phase" : "aq inorg", - "aerosol-phase water" : "H2O_aq", - "A" : 1.8e-16, - "C" : -6800.0, - "k_reverse" : 1.3e11, - "reactants" : { - "H2O_aq" : {} - }, - "products" : { - "H_p" : {}, - "OH_m" : {} - } - }, - { - "type" : "AQUEOUS_EQUILIBRIUM", - "aerosol phase" : "aq inorg", - "aerosol-phase water" : "H2O_aq", - "A" : 1.02e-2, - "C" : 2700.0, - "k_reverse" : 1.0e11, - "ion pair IDEAL" : "H2-SO4", - "reactants" : { - "HSO4_m" : {} - }, - "products": { - "SO4_mm" : {}, - "H_p" : {} - } - }, - { - "type" : "AQUEOUS_EQUILIBRIUM", - "aerosol phase" : "aq inorg", - "aerosol-phase water" : "H2O_aq", - "A" : 1000.0, - "k_reverse" : 5.0e10, - "ion pair IDEAL" : "H-HSO4", - "reactants" : { - "H2SO4_aq" : {} - }, - "products" : { - "HSO4_m" : {}, - "H_p" : {} - } - }, - { - "type" : "AQUEOUS_EQUILIBRIUM", - "aerosol phase" : "aq inorg", - "aerosol-phase water" : "H2O_aq", - "A" : 22.0, - "C" : 1800.0, - "k_reverse" : 5.0e10, - "ion pair IDEAL" : "H-NO3", - "reactants" : { - "HNO3_aq" : {} - }, - "products" : { - "NO3_m" : {}, - "H_p" : {} - } - }, - { - "type" : "AQUEOUS_EQUILIBRIUM", - "aerosol phase" : "aq inorg", - "aerosol-phase water" : "H2O_aq", - "A" : 3.17e-7, - "C" : -560.0, - "k_reverse" : 3.4e10, - "ion pair IDEAL" : "NH4/H", - "reactants" : { - "NH3_aq" : {}, - "H2O_aq" : {} - }, - "products" : { - "NH4_p" : {}, - "OH_m" : {} - } - }, - { - "type" : "ZSR_AEROSOL_WATER", - "notes" : [ "Y_j parameters taken from Jacobson et al. (1996) Table 2" ], - "aerosol phase" : "aq inorg", - "gas-phase water" : "H2O", - "aerosol-phase water" : "H2O_aq", - "ion pairs" : { - "H-HSO4" : { - "type" : "JACOBSON", - "ions" : { - "H_p" : {}, - "HSO4_m" : {} - }, - "Y_j" : [5.611895, -1.387446e1, 1.750682e1, 7.138146e1, -3.109173e2, 4.662288e2, -3.128612e2, 7.767097e1], - "low RH" : 0.0 - }, - "H2-SO4" : { - "type" : "JACOBSON", - "ions" : { - "H_p" : { "qty" : 2 }, - "SO4_mm" : {} - }, - "Y_j" : [5.611895, -1.387446e1, 1.750682e1, 7.138146e1, -3.109173e2, 4.662288e2, -3.128612e2, 7.767097e1], - "low RH" : 0.0 - }, - "H-NO3" : { - "type" : "JACOBSON", - "ions" : { - "H_p" : {}, - "NO3_m" : {} - }, - "Y_j" : [4.852977, -6.621314, 3.390133e1, -1.985191e2, 6.281150e2, -1.038494e3, 8.498917e2, -2.729090e2], - "low RH" : 0.0 - }, - "NH4-HSO4" : { - "type" : "JACOBSON", - "ions" : { - "NH4_p" : {}, - "HSO4_m" : {} - }, - "Y_j" : [5.515580, 3.588744, -6.363443e1, 3.687630e2, -1.023972e3, 1.394436e3, -9.168213e2, 2.328726e2], - "low RH" : 0.0 - }, - "(NH4)2-SO4" : { - "type" : "JACOBSON", - "ions" : { - "NH4_p" : { "qty" : 2 }, - "SO4_mm" : {} - }, - "Y_j" : [4.363511e2, -4.947645e3, 2.399693e4, -6.364664e4, 9.952891e4, -9.179112e4, 4.626748e4, -9.844195e3], - "low RH" : 0.47 - }, - "NH4-NO3" : { - "type" : "JACOBSON", - "ions" : { - "NH4_p" : {}, - "NO3_m" : {} - }, - "Y_j" : [1.235157e4, -1.097966e5, 4.173924e5, -8.792165, 1.108433e6, -8.364973e5, 3.499527e5, -6.261910e4], - "low RH" : 0.62 - } - } - } - ] - } - ] -} diff --git a/test/monarch/test_monarch_1.sh b/test/monarch/test_monarch_1.sh deleted file mode 100755 index 782ce7303..000000000 --- a/test/monarch/test_monarch_1.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -# exit on error -set -e -# turn on command echoing -set -v -# make sure that the current directory is the one where this script is -cd ${0%/*} -# make the output directory if it doesn't exist -mkdir -p out -# copy the compare file to the output directory -cp simple_comp.txt out/simple_comp.txt - -((counter = 1)) -while [ true ] -do - echo Attempt $counter - -if [[ $1 == "MPI" ]]; then - exec_str="mpirun -v -np 2 ../../mock_monarch config_simple.json interface_simple.json out/simple" -else - exec_str="../../mock_monarch config_simple.json interface_simple.json out/simple" -fi - - if ! $exec_str; then - echo Failure "$counter" - if [ "$counter" -gt 1 ] - then - echo FAIL - exit 1 - fi - echo retrying... - else - echo PASS - exit 0 - fi - ((counter++)) -done - diff --git a/test/monarch/test_monarch_2.sh b/test/monarch/test_monarch_2.sh deleted file mode 100755 index 69509928c..000000000 --- a/test/monarch/test_monarch_2.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -# exit on error -set -e -# turn on command echoing -set -v -# make sure that the current directory is the one where this script is -cd ${0%/*} -# make the output directory if it doesn't exist -mkdir -p out -# copy the compare file to the output directory -cp monarch_mod37_comp.txt out/monarch_mod37_comp.txt - -((counter = 1)) -while [ true ] -do - echo Attempt $counter - -if [[ $1 == "MPI" ]]; then - exec_str="mpirun -v -np 2 ../../mock_monarch config_monarch_mod37.json interface_monarch_mod37.json out/monarch_mod37" -else - exec_str="../../mock_monarch config_monarch_mod37.json interface_monarch_mod37.json out/monarch_mod37" -fi - - if ! $exec_str; then - echo Failure "$counter" - if [ "$counter" -gt 10 ] - then - echo FAIL - exit 1 - fi - echo retrying... - else - echo PASS - exit 0 - fi - ((counter++)) -done - diff --git a/test/monarch_output/stats_monarch_netcdf.py b/test/monarch_output/stats_monarch_netcdf.py new file mode 100644 index 000000000..3d01023e1 --- /dev/null +++ b/test/monarch_output/stats_monarch_netcdf.py @@ -0,0 +1,110 @@ +import matplotlib as mpl + +mpl.use('TkAgg') + +import netCDF4 as nc +import numpy as np +import pandas as pd +import time +import seaborn as sns +import matplotlib.pyplot as plt + + +def calculate_speedup(file1_path, file2_path): + df1 = pd.read_csv(file1_path) + df2 = pd.read_csv(file2_path) + timecvStep_values1 = df1["timecvStep"].values + timecvStep_values2 = df2["timecvStep"].values + speedup = timecvStep_values1 / timecvStep_values2 + return speedup + +def calculate_nrmse(data1, data2): + rmsd = np.sqrt(np.mean((data1 - data2) ** 2)) + range_data1 = np.max(data1) - np.min(data1) + nrmse = (rmsd / range_data1) * 100 + return nrmse + + +def process_variable(dataset1, dataset2, var_name): + print(f"Processing variable: {var_name}") + array1 = np.ma.getdata(dataset1.variables[var_name][-1, ...]) + array2 = np.ma.getdata(dataset2.variables[var_name][-1, ...]) + + abs_diff = np.abs(array1 - array2) + max_array = np.maximum(np.abs(array1), np.abs(array2)) + relative_error = np.where(max_array == 0, 0, abs_diff / max_array) + + mean = np.mean(relative_error) + print(mean) + if np.isnan(mean) or mean == 0.: + if mean == 0: + print(f"Variable difference mean: {var_name} is 0") + return False + else: + nrmse = calculate_nrmse(array1, array2) + max_error = np.max(relative_error) + quantile25 = np.percentile(relative_error, 25) + quantile50 = np.percentile(relative_error, 50) + quantile75 = np.percentile(relative_error, 75) + quantile95 = np.percentile(relative_error, 95) + median = np.median(relative_error) + std_dev = np.std(relative_error) + + return var_name, nrmse, std_dev,mean, median, quantile25, quantile50,\ + quantile75, quantile95, max_error, relative_error + + +file1_path_header = "../../../../monarch_out/cpu_tstep479_O3/" +file2_path_header = "../../../../monarch_out/gpu_tstep479_O3/" + +# Calculate the speedup +file1 = file1_path_header + "out/stats.csv" +file2 = file2_path_header + "out/stats.csv" +speedup = calculate_speedup(file1, file2) + +#Path to netCDF +file1 = file1_path_header + "nmmb_hst_01_nc4_0000h_00m_00.00s.nc" +file2 = file2_path_header + "nmmb_hst_01_nc4_0000h_00m_00.00s.nc" + +dataset1 = nc.Dataset(file1) +dataset2 = nc.Dataset(file2) + +variable_names = dataset1.variables.keys() + +summary_data = [] +start_time = time.time() + +for var_name in variable_names: + variable = dataset1.variables[var_name] + if len(variable.dimensions) == 4: + result = process_variable(dataset1, dataset2, var_name) + if result: + summary_data.append(result) + +print(f"Execution time: {time.time()-start_time:.2f} seconds") +dataset1.close() +dataset2.close() +if not summary_data: + print("summary_data is empty") + exit(1) + +summary_table = pd.DataFrame(summary_data, columns=[ + 'Variable','NRMSE[%]','Std Dev','Mean','Median','Quantiles 25', 'Quantile 50','Quantile 75', + 'Quantile 95','Max','Relative Error']) + +worst_variables = summary_table.nlargest(6, 'NRMSE[%]') +highest_nrmse_row = worst_variables.iloc[0] +highest_nrmse_variable = highest_nrmse_row['Variable'] +highest_nrmse = highest_nrmse_row['NRMSE[%]'] +print(f"Highest NRMSE[%]: {highest_nrmse:.2f} for variable: {highest_nrmse_variable}") +print("Speedup:", speedup) +plt.figure() +data = [row['Relative Error'].reshape(-1) * 100 for _, row in worst_variables.iterrows()] +variable_names = [row['Variable'] for _, row in worst_variables.iterrows()] +sns.boxplot(data=data, orient='v', showfliers=False) +plt.ylabel("Relative Error [%]") +plt.xticks(range(len(variable_names)), variable_names, rotation=90) +plt.title("Box Plot of highest NRMSE for MONARCH-CAMP 2 GPUs 24h") +plt.show() +#worst_variables.to_csv("exports/summary_table.csv", index=False) + diff --git a/test/monarch_output/tmp.py b/test/monarch_output/tmp.py new file mode 100644 index 000000000..085ff0168 --- /dev/null +++ b/test/monarch_output/tmp.py @@ -0,0 +1,50 @@ +import matplotlib as mpl + +mpl.use('TkAgg') +import pandas as pd +import seaborn as sns +import matplotlib.pyplot as plt +import numpy as np + + +# Sample data +#data = sns.load_dataset("tips") # Load a built-in dataset as an example + +data = np.array([1,3,5]) +# Create a box plot +sns.boxplot(data=data, showfliers=False) +print(data) + +# Add labels and title +plt.xlabel("Day of the week") +plt.ylabel("Total Bill Amount ($)") +plt.title("Box Plot of Total Bill Amount by Day") + +# Show the plot +plt.show() +raise + + +# Create a DataFrame from your CSV data +#data = pd.read_csv('exports/summary_table.csv') + +array1= [1,3,5] +array2=[2,7,4] +# Create a DataFrame from two arrays of variables (replace with your own data) +data = pd.DataFrame({'Variable1': array1, 'Variable2': array2}) + +# Calculate the difference between the two variables +data['Difference'] = data['Variable1'] - data['Variable2'] + +# Create a violin plot +sns.violinplot(x='Difference', data=data) + +# Print the standard deviation of the difference +std_deviation = data['Difference'].std() +print(f"Standard Deviation of Difference: {std_deviation}") + +# Customize the plot +plt.title("Violin Plot of Difference") +plt.xlabel("Difference") +plt.ylabel("Density") +plt.show() \ No newline at end of file diff --git a/test/unit_rxn_data/test_aqueous_equilibrium.sh b/test/unit_rxn_data/test_aqueous_equilibrium.sh index 5d39e9eef..544b38a41 100755 --- a/test/unit_rxn_data/test_aqueous_equilibrium.sh +++ b/test/unit_rxn_data/test_aqueous_equilibrium.sh @@ -17,12 +17,16 @@ do if [[ $1 = "MPI" ]]; then exec_str="mpirun -v -np 2 ../../test_rxn_aqueous_equilibrium" else - exec_str="../../test_rxn_aqueous_equilibrium" + if [ -z ${SLURM_TASK_PID+x} ]; then + exec_str="../../test_rxn_aqueous_equilibrium" + else + exec_str="mpirun -v -np 1 --bind-to none ../../test_rxn_aqueous_equilibrium" + fi fi if ! $exec_str; then echo Failure "$counter" - if [ "$counter" -gt 10 ] + if [ "$counter" -gt 0 ] then echo FAIL exit 1 diff --git a/test/unit_rxn_data/test_rxn_CMAQ_H2O2.F90 b/test/unit_rxn_data/test_rxn_CMAQ_H2O2.F90 index 25406eae8..f58af4c8e 100644 --- a/test/unit_rxn_data/test_rxn_CMAQ_H2O2.F90 +++ b/test/unit_rxn_data/test_rxn_CMAQ_H2O2.F90 @@ -285,8 +285,8 @@ logical function run_CMAQ_H2O2_test() run_CMAQ_H2O2_test = .false. end if end if - deallocate(buffer) + #endif deallocate(camp_core) diff --git a/test/unit_tests/unit_test_driver.F90 b/test/unit_tests/unit_test_driver.F90 index 80a219345..061e6a3de 100644 --- a/test/unit_tests/unit_test_driver.F90 +++ b/test/unit_tests/unit_test_driver.F90 @@ -121,7 +121,7 @@ program unit_test_driver ! unpack the data one_cell_core => camp_core_t( ) - multicell_core => camp_core_t( ) + multicell_core => camp_core_t( n_cells=N_CELLS ) unit_test => UNIT_TEST_TYPE_ pos = 0 call one_cell_core%bin_unpack( buffer, pos ) @@ -320,17 +320,17 @@ program unit_test_driver else results = 1 end if - end if - ! Send the results back to the primary process - call camp_mpi_transfer_integer(results, results, 1, 0) + ! Send the results back to the primary process + call camp_mpi_transfer_integer(results, results, 1, 0) - ! Convert the results back to a logical - if( camp_mpi_rank( ) .eq. 0 ) then - if( results .eq. 0 ) then - passed = .true. - else - passed = .false. + ! Convert the results back to a logical + if( camp_mpi_rank( ) .eq. 0 ) then + if( results .eq. 0 ) then + passed = .true. + else + passed = .false. + end if end if end if diff --git a/tool/format_code.sh b/tool/format_code.sh new file mode 100644 index 000000000..e6de0f809 --- /dev/null +++ b/tool/format_code.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# turn on command echoing +set -v + +# make sure that the current directory is the camp root dir +cd "${0%/*}/.." +find src/. -iname *.h -o -iname *.c -o -iname *.cpp -o -iname *.hpp \ + | xargs clang-format -style=file -i -fallback-style=none From 7e2d5770781a162d77eeb78490a4391720448fd2 Mon Sep 17 00:00:00 2001 From: cguzman Date: Wed, 13 Dec 2023 16:56:19 +0100 Subject: [PATCH 2/3] merge gpu branch onto main --- CMakeLists.txt | 54 +-- compile/power9/check.sh | 1 - compile/power9/compile.camp.sh | 4 +- data/CAMP_v1_paper/README.md | 7 +- data/CAMP_v1_paper/binned/mock_monarch.F90 | 3 + data/CAMP_v1_paper/modal/mock_monarch.F90 | 3 + .../boot_camp/part_1_code/box_model.F90 | 5 +- .../boot_camp/part_3_code/box_model.F90 | 1 + .../boot_camp/part_4_code/box_model.F90 | 1 + doc/references.bib | 36 ++ src/Jacobian.c | 14 +- src/Jacobian.h | 7 +- src/aero_phase_solver.c | 6 +- src/camp_common.h | 1 - src/camp_core.F90 | 50 ++- .../camp_debug_2.c => camp_debug.c} | 56 +-- src/camp_debug.h | 11 + src/camp_solver.c | 61 +-- src/camp_solver.h | 5 +- src/camp_solver_data.F90 | 39 +- src/cuda/cuda_structs.h | 2 - src/cuda/cvode_cuda.cu | 393 ++---------------- src/cuda/cvode_gpu.cu | 15 +- src/cuda/cvode_init.cu | 46 +- src/debug_and_stats/camp_debug_2.h | 22 - src/rxn_solver.h | 1 - src/rxns.h | 1 - src/rxns/rxn_CMAQ_H2O2.c | 2 +- src/rxns/rxn_CMAQ_OH_HNO3.c | 2 +- src/rxns/rxn_HL_phase_transfer.c | 20 +- src/rxns/rxn_SIMPOL_phase_transfer.c | 20 +- src/rxns/rxn_aqueous_equilibrium.c | 28 +- src/rxns/rxn_arrhenius.c | 4 +- src/rxns/rxn_condensed_phase_arrhenius.c | 4 +- src/rxns/rxn_condensed_phase_photolysis.c | 4 +- src/rxns/rxn_emission.c | 2 +- src/rxns/rxn_first_order_loss.c | 2 +- src/rxns/rxn_photolysis.c | 2 +- src/rxns/rxn_ternary_chemical_activation.c | 2 +- src/rxns/rxn_troe.c | 2 +- src/rxns/rxn_wennberg_no_ro2.c | 6 +- src/rxns/rxn_wennberg_tunneling.c | 2 +- src/rxns/rxn_wet_deposition.c | 2 +- src/solver_stats.F90 | 8 - src/sub_models/sub_model_PDFiTE.c | 24 +- src/sub_models/sub_model_ZSR_aerosol_water.c | 52 +-- src/time_derivative.c | 12 +- src/time_derivative.h | 6 +- test/chemistry/cb05cl_ae5/test_cb05cl_ae5.F90 | 7 - test/monarch/TestMonarch.py | 12 +- test/monarch/TestMonarch1.py | 8 +- test/monarch/TestMonarch2.py | 5 +- test/monarch/TestMonarch3.py | 5 +- test/monarch/TestMonarch4.py | 5 +- test/monarch/TestMonarch5.py | 36 ++ test/monarch/camp_monarch_interface.F90 | 45 +- test/monarch/checkGPU.py | 4 - test/monarch/checkGPU.sh | 2 - test/monarch/diff_TestMonarch.py | 4 - test/monarch/mainMonarch.py | 98 ++--- test/monarch/mock_monarch.F90 | 4 +- test/monarch/run.sh | 4 +- test/monarch/sbatch_run.sh | 6 +- test/monarch/settings/TestMonarch.json | 8 +- test/monarch_output/stats_monarch_netcdf.py | 7 +- test/monarch_output/tmp.py | 50 --- .../test_aero_rep_single_particle.F90 | 3 - .../test_sub_model_ZSR_aerosol_water.c | 28 +- 68 files changed, 466 insertions(+), 926 deletions(-) rename src/{debug_and_stats/camp_debug_2.c => camp_debug.c} (70%) delete mode 100644 src/debug_and_stats/camp_debug_2.h create mode 100644 test/monarch/TestMonarch5.py delete mode 100644 test/monarch_output/tmp.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 69f9605c9..3191d492e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -225,12 +225,10 @@ endif() ###################################################################### # copy dirs -if(DISABLE_TESTS) -else () -SET(ENABLE_TESTS ON) -endif () -if(ENABLE_TESTS) +SET(USE_TESTS ON) + +if(USE_TESTS) add_custom_target(copy_data ALL ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/data ${CMAKE_BINARY_DIR}/data_run) add_custom_target(copy_test ALL ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/test ${CMAKE_BINARY_DIR}/test_run) add_custom_target(copy_mechanism ALL ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/mechanisms ${CMAKE_BINARY_DIR}/mechanisms_run) @@ -241,23 +239,24 @@ endif() ###################################################################### # Unit test macro -if (ENABLE_TESTS) - macro(do_unit_test test_name result) - if(ENABLE_MPI) - add_test(unit_test_${test_name} mpirun -v -np 1 ${CMAKE_BINARY_DIR}/unit_test_${test_name}) - else() - add_test(unit_test_${test_name} ${CMAKE_BINARY_DIR}/unit_test_${test_name}) - endif() - set_tests_properties(unit_test_${test_name} - PROPERTIES PASS_REGULAR_EXPRESSION ${result}) - endmacro(do_unit_test) +if (USE_TESTS) +macro(do_unit_test test_name result) +if(ENABLE_MPI) + add_test(unit_test_${test_name} mpirun -v -np 2 ${CMAKE_BINARY_DIR}/unit_test_${test_name}) +else() + add_test(unit_test_${test_name} ${CMAKE_BINARY_DIR}/unit_test_${test_name}) +endif() +set_tests_properties(unit_test_${test_name} + PROPERTIES PASS_REGULAR_EXPRESSION ${result}) +endmacro(do_unit_test) endif() ###################################################################### # tests enable_testing() -if (ENABLE_TESTS) + +if (USE_TESTS) do_unit_test(property "PASS") do_unit_test(chem_spec_data "PASS") do_unit_test(aero_phase_data "PASS") @@ -277,7 +276,7 @@ if (ENABLE_GPU) add_test(NAME test_gpu COMMAND checkGPU.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test/monarch) endif() -if (ENABLE_TESTS) +if (USE_TESTS) # New unit tests (UNDER DEVELOPMENT) add_test(test_rxn_arrhenius_mech ${CMAKE_BINARY_DIR}/test_run/unit_tests/input_files/run_rxn_arrhenius.sh ${MPI_TEST_FLAG}) @@ -406,7 +405,7 @@ set(SUB_MODELS_SRC ${SUB_MODELS_F_SRC} ${SUB_MODELS_C_SRC}) set(CAMP_C_SRC src/camp_solver.c src/rxn_solver.c src/aero_phase_solver.c src/aero_rep_solver.c src/sub_model_solver.c - src/debug_and_stats/camp_debug_2.c + src/camp_debug.c src/time_derivative.c src/Jacobian.c src/debug_diff_check.c) @@ -479,14 +478,6 @@ install( ) endif() -###################################################################### -# camp-chem box model - -add_executable(camp_box_model test/camp_box_model_data.F90 - test/camp_box_model.F90) - -target_link_libraries(camp_box_model camplib) - ###################################################################### # test_chemistry_cb05cl_ae5 @@ -538,7 +529,16 @@ if (ENABLE_GPU) target_link_libraries(mock_monarch camplib) endif() -if (ENABLE_TESTS) +if (USE_TESTS) + +###################################################################### +# camp-chem box model + +add_executable(camp_box_model test/camp_box_model_data.F90 + test/camp_box_model.F90) + +target_link_libraries(camp_box_model camplib) + ###################################################################### # test_chemistry_cb05cl_ae5 diff --git a/compile/power9/check.sh b/compile/power9/check.sh index 2a3b85736..5446182c2 100644 --- a/compile/power9/check.sh +++ b/compile/power9/check.sh @@ -2,7 +2,6 @@ set -e cd ../../build make -j 4 ctest --output-on-failure -#make test #./unit_test_aero_rep_single_particle cd ../test/monarch #./checkGPU.sh diff --git a/compile/power9/compile.camp.sh b/compile/power9/compile.camp.sh index f98388fda..2ed62243f 100644 --- a/compile/power9/compile.camp.sh +++ b/compile/power9/compile.camp.sh @@ -37,7 +37,6 @@ elif [ LOCAL_MACHINE==CGUZMAN ]; then echo "MPI is not installed. Installing..." sudo apt update sudo apt install -y mpi-default-dev - #if run | Invalid MIT-MAGIC-COOKIE-1 key THEN sudo apt-remove openmpi-bin AND sudo apt-get install libcr-dev mpich2 mpich2-doc fi else echo "Unknown architecture" @@ -65,8 +64,9 @@ cmake -D CMAKE_C_COMPILER=$(which mpicc) \ -D ENABLE_GPU=ON \ -D ENABLE_GSL:BOOL=FALSE \ -D ENABLE_NETCDF=ON \ --D DISABLE_INSTALL_OPTIONS=TRUE \ .. +ln -sf ../test/monarch/settings +ln -sf ../test/monarch/out make -j 4 VERBOSE=1 cd $curr_path diff --git a/data/CAMP_v1_paper/README.md b/data/CAMP_v1_paper/README.md index 346a4c310..fc287955f 100644 --- a/data/CAMP_v1_paper/README.md +++ b/data/CAMP_v1_paper/README.md @@ -2,10 +2,7 @@ Configurations for recreating experiments for: - * M. Dawson, C. Guzman, J. H. Curtis, M. Acosta, S. Zhu, D. Dabdub, - A. Conley, M. West, N. Riemer, and O. Jorba (2021), - Chemistry Across Multiple Phases (CAMP) version 1.0: An - Integrated multi-phase chemistry model, in preparation + * Dawson, M. L., Guzman, C., Curtis, J. H., Acosta, M., Zhu, S., Dabdub, D., Conley, A., West, M., Riemer, N., and Jorba, O.: Chemistry Across Multiple Phases (CAMP) version 1.0: an integrated multiphase chemistry model, Geosci. Model Dev., 15, 3663–3689, https://doi.org/10.5194/gmd-15-3663-2022, 2022. The binned and modal box model experiments are run as part of the CAMP testing suite. The results will be in the build folder under: @@ -13,4 +10,4 @@ The binned and modal box model experiments are run as part of the CAMP testing s ``` data_run/CAMP_v1_paper/binned/out/ data_run/CAMP_v1_paper/modal/out/ -``` \ No newline at end of file +``` diff --git a/data/CAMP_v1_paper/binned/mock_monarch.F90 b/data/CAMP_v1_paper/binned/mock_monarch.F90 index 05feb8d5c..92ee9d15c 100644 --- a/data/CAMP_v1_paper/binned/mock_monarch.F90 +++ b/data/CAMP_v1_paper/binned/mock_monarch.F90 @@ -362,6 +362,9 @@ program mock_monarch ! finalize mpi call camp_mpi_finalize() + ! Free the interface and the solver + deallocate(camp_interface) + contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/data/CAMP_v1_paper/modal/mock_monarch.F90 b/data/CAMP_v1_paper/modal/mock_monarch.F90 index a45392a21..2d394d63c 100755 --- a/data/CAMP_v1_paper/modal/mock_monarch.F90 +++ b/data/CAMP_v1_paper/modal/mock_monarch.F90 @@ -344,6 +344,9 @@ program mock_monarch ! finalize mpi call camp_mpi_finalize() + ! Free the interface and the solver + deallocate(camp_interface) + contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/doc/camp_tutorial/boot_camp/part_1_code/box_model.F90 b/doc/camp_tutorial/boot_camp/part_1_code/box_model.F90 index 226f97f9e..0d610f183 100644 --- a/doc/camp_tutorial/boot_camp/part_1_code/box_model.F90 +++ b/doc/camp_tutorial/boot_camp/part_1_code/box_model.F90 @@ -90,11 +90,12 @@ program box_model camp_state%state_var( idx_O2 ) end do - deallocate( camp_state ) - #ifdef CAMP_USE_MPI call camp_mpi_finalize( ) #endif + deallocate( camp_core ) + deallocate( camp_state ) + end program box_model !! [Solve and output] diff --git a/doc/camp_tutorial/boot_camp/part_3_code/box_model.F90 b/doc/camp_tutorial/boot_camp/part_3_code/box_model.F90 index 7f938c796..f098dee7d 100644 --- a/doc/camp_tutorial/boot_camp/part_3_code/box_model.F90 +++ b/doc/camp_tutorial/boot_camp/part_3_code/box_model.F90 @@ -108,6 +108,7 @@ program box_model camp_state%state_var( idx_O2 ) end do + deallocate( camp_core ) deallocate( camp_state ) #ifdef CAMP_USE_MPI diff --git a/doc/camp_tutorial/boot_camp/part_4_code/box_model.F90 b/doc/camp_tutorial/boot_camp/part_4_code/box_model.F90 index 457b6639d..4689625b9 100644 --- a/doc/camp_tutorial/boot_camp/part_4_code/box_model.F90 +++ b/doc/camp_tutorial/boot_camp/part_4_code/box_model.F90 @@ -170,6 +170,7 @@ program box_model #endif !! [output] + deallocate( camp_core ) deallocate( camp_state ) end program box_model diff --git a/doc/references.bib b/doc/references.bib index 12cec3614..1c9f9af32 100644 --- a/doc/references.bib +++ b/doc/references.bib @@ -1,3 +1,39 @@ +@article{Tie2003, +author = {Tie, Xuexi and Emmons, Louisa and Horowitz, Larry and Brasseur, Guy and Ridley, Brian and Atlas, Elliot and Stround, Craig and Hess, Peter and Klonecki, Andrzej and Madronich, Sasha and Talbot, Robert and Dibb, Jack}, +title = {Effect of sulfate aerosol on tropospheric NOx and ozone budgets: Model simulations and TOPSE evidence}, +journal = {Journal of Geophysical Research: Atmospheres}, +volume = {108}, +number = {D4}, +pages = {}, +keywords = {tropospheric aerosol, NOx, ozone}, +doi = {https://doi.org/10.1029/2001JD001508}, +url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2001JD001508}, +eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2001JD001508}, +abstract = {The distributions of NOx and O3 are analyzed during TOPSE (Tropospheric Ozone Production about the Spring Equinox). In this study these data are compared with the calculations of a global chemical/transport model (Model for OZone And Related chemical Tracers (MOZART)). Specifically, the effect that hydrolysis of N2O5 on sulfate aerosols has on tropospheric NOx and O3 budgets is studied. The results show that without this heterogeneous reaction, the model significantly overestimates NOx concentrations at high latitudes of the Northern Hemisphere (NH) in winter and spring in comparison to the observations during TOPSE; with this reaction, modeled NOx concentrations are close to the measured values. This comparison provides evidence that the hydrolysis of N2O5 on sulfate aerosol plays an important role in controlling the tropospheric NOx and O3 budgets. The calculated reduction of NOx attributed to this reaction is 80 to 90\% in winter at high latitudes over North America. Because of the reduction of NOx, O3 concentrations are also decreased. The maximum O3 reduction occurs in spring although the maximum NOx reduction occurs in winter when photochemical O3 production is relatively low. The uncertainties related to uptake coefficient and aerosol loading in the model is analyzed. The analysis indicates that the changes in NOx due to these uncertainties are much smaller than the impact of hydrolysis of N2O5 on sulfate aerosol. The effect that hydrolysis of N2O5 on global NOx and O3 budgets are also assessed by the model. The results suggest that in the Northern Hemisphere, the average NOx budget decreases 50\% due to this reaction in winter and 5\% in summer. The average O3 budget is reduced by 8\% in winter and 6\% in summer. In the Southern Hemisphere (SH), the sulfate aerosol loading is significantly smaller than in the Northern Hemisphere. As a result, sulfate aerosol has little impact on NOx and O3 budgets of the Southern Hemisphere.}, +year = {2003} +} +@article{Wennberg2018, +author = {Wennberg, Paul O. and Bates, Kelvin H. and Crounse, John D. and Dodson, Leah G. and McVay, Renee C. and Mertens, Laura A. and Nguyen, Tran B. and Praske, Eric and Schwantes, Rebecca H. and Smarte, Matthew D. and St Clair, Jason M. and Teng, Alexander P. and Zhang, Xuan and Seinfeld, John H.}, +title = {Gas-Phase Reactions of Isoprene and Its Major Oxidation Products}, +journal = {Chemical Reviews}, +volume = {118}, +number = {7}, +pages = {3337-3390}, +year = {2018}, +doi = {10.1021/acs.chemrev.7b00439}, +note ={PMID: 29522327}, +URL = {https://doi.org/10.1021/acs.chemrev.7b00439}, +eprint = {https://doi.org/10.1021/acs.chemrev.7b00439} +} +@techreport{JPL15, +author = {J. B. Burkholder, S. P. Sander, J. Abbatt, J. R. Barker, R. E. Huie, C. E. Kolb, M. J. Kurylo, V. L. Orkin, D. M. +Wilmouth, and P. H. Wine}, +title = {Chemical Kinetics and Photochemical Data for Use in Atmospheric Studies, Evaluation No. 18 JPL Publication 15-10}, +institution = {Jet Propulsion Laboratory}, +location = {Pasadena}, +year = {2015}, +url = {http://jpldataeval.jpl.nasa.gov} +} @article{Ervens2003, abstract = {A detailed and extended chemical mechanism describing tropospheric aqueous phase chemistry (147 species and 438 reactions) is presented here as Chemical Aqueous Phase Radical Mechanism (CAPRAM) 2.4 (MODAC mechanism). The mechanism based on the former version 2.3 [ Herrmann et al., 2000] contains extended organic and transition metal chemistry and is formulated more explicitly based on a critical review of the literature. The aqueous chemistry has been coupled to the gas phase mechanism Regional Atmospheric Chemistry Modeling (RACM) [ Stockwell et al., 1997], and phase exchange accounted for using the resistance model of Schwartz [1986]. A method for estimating mass accommodation coefficients ({\&}{\#}945;) is described, which accounts for functional groups contained in a particular compound. A condensed version has also been developed to allow the use of CAPRAM 2.4 (MODAC mechanism) in higher-scale models. Here the reproducibility of the concentration levels of selected target species (i.e., NO x , S(IV), H2O2, NO3, OH, O3, and H+) within the limits of ± 5{\%} was used as a goal for eliminating insignificant reactions from the complete CAPRAM 2.4 (MODAC mechanism). This has been done using a range of initial conditions chosen to represent different atmospheric scenarios, and this produces a robust and concise set of reactions. The most interesting results are obtained using atmospheric conditions typical for an urban scenario, and the effects introduced by updating the aqueous phase chemistry are highlighted, in particular, with regard to radicals, redox cycling of transition metal ions and organic compounds. Finally, the reduced scheme has been incorporated into a one-dimensional (1-D) marine cloud model to demonstrate the applicability of this mechanism.}, author = {Ervens, B.}, diff --git a/src/Jacobian.c b/src/Jacobian.c index 4d5dbf06c..d206a72a2 100644 --- a/src/Jacobian.c +++ b/src/Jacobian.c @@ -60,13 +60,13 @@ int jacobian_initialize(Jacobian *jac, unsigned int num_spec, return 0; } jac->production_partials = - (long double *)malloc(num_elem * sizeof(long double)); + (double *)malloc(num_elem * sizeof(double)); if (!jac->production_partials) { free(jac->col_ptrs); free(jac->row_ids); return 0; } - jac->loss_partials = (long double *)malloc(num_elem * sizeof(long double)); + jac->loss_partials = (double *)malloc(num_elem * sizeof(double)); if (!jac->loss_partials) { free(jac->col_ptrs); free(jac->row_ids); @@ -171,13 +171,13 @@ unsigned int jacobian_build_matrix(Jacobian *jac) { exit(EXIT_FAILURE); } jac->production_partials = - (long double *)malloc(jac->num_elem * sizeof(long double)); + (double *)malloc(jac->num_elem * sizeof(double)); if (!jac->production_partials) { jacobian_free(jac); return 0; } jac->loss_partials = - (long double *)malloc(jac->num_elem * sizeof(long double)); + (double *)malloc(jac->num_elem * sizeof(double)); if (!jac->loss_partials) { jacobian_free(jac); return 0; @@ -228,8 +228,8 @@ void jacobian_output(Jacobian jac, double *dest_array) { for (unsigned int i_col = 0; i_col < jac.num_spec; ++i_col) { for (unsigned int i_elem = jac.col_ptrs[i_col]; i_elem < jac.col_ptrs[i_col + 1]; ++i_elem) { - long double drf_dy = jac.production_partials[i_elem]; - long double drr_dy = jac.loss_partials[i_elem]; + double drf_dy = jac.production_partials[i_elem]; + double drr_dy = jac.loss_partials[i_elem]; dest_array[i_elem] = drf_dy - drr_dy; } } @@ -237,7 +237,7 @@ void jacobian_output(Jacobian jac, double *dest_array) { void jacobian_add_value(Jacobian jac, unsigned int elem_id, unsigned int prod_or_loss, - long double jac_contribution) { + double jac_contribution) { if (prod_or_loss == JACOBIAN_PRODUCTION) jac.production_partials[elem_id] += jac_contribution; if (prod_or_loss == JACOBIAN_LOSS) diff --git a/src/Jacobian.h b/src/Jacobian.h index 864f17855..51ed221b0 100644 --- a/src/Jacobian.h +++ b/src/Jacobian.h @@ -33,9 +33,8 @@ typedef struct { unsigned int num_elem; // Number of potentially non-zero Jacobian elements unsigned int *col_ptrs; // Index of start/end of each column in data array unsigned int *row_ids; // Row id of each Jacobian element in data array - long double - *production_partials; // Data array for productions rate partial derivs - long double *loss_partials; // Data array for loss rate partial derivs + double *production_partials; // Data array for productions rate partial derivs + double *loss_partials; // Data array for loss rate partial derivs JacobianColumnElements *elements; // Jacobian elements flagged for inclusion } Jacobian; @@ -138,7 +137,7 @@ void jacobian_output(Jacobian jac, double *dest_array); */ void jacobian_add_value(Jacobian jac, unsigned int elem_id, unsigned int prod_or_loss, - long double jac_contribution); + double jac_contribution); /** \brief Prints the Jacobian structure * diff --git a/src/aero_phase_solver.c b/src/aero_phase_solver.c index 90a4f0bbd..8d207895d 100644 --- a/src/aero_phase_solver.c +++ b/src/aero_phase_solver.c @@ -101,15 +101,15 @@ void aero_phase_get_mass__kg_m3(ModelData *model_data, int aero_phase_idx, [model_data->aero_phase_float_indices[aero_phase_idx]]); // Sum the mass and MW - long double l_mass = MINIMUM_MASS_; - long double moles = MINIMUM_MASS_ / MINIMUM_MW_; + double l_mass = MINIMUM_MASS_; + double moles = MINIMUM_MASS_ / MINIMUM_MW_; int i_jac = 0; for (int i_spec = 0; i_spec < NUM_STATE_VAR_; i_spec++) { if (SPEC_TYPE_(i_spec) == CHEM_SPEC_VARIABLE || SPEC_TYPE_(i_spec) == CHEM_SPEC_CONSTANT || SPEC_TYPE_(i_spec) == CHEM_SPEC_PSSA) { l_mass += state_var[i_spec]; - moles += state_var[i_spec] / (long double)MW_(i_spec); + moles += state_var[i_spec] / (double)MW_(i_spec); if (jac_elem_mass) jac_elem_mass[i_jac] = 1.0L; if (jac_elem_MW) jac_elem_MW[i_jac] = 1.0L / MW_(i_spec); i_jac++; diff --git a/src/camp_common.h b/src/camp_common.h index 05d990051..dfd2bbae6 100644 --- a/src/camp_common.h +++ b/src/camp_common.h @@ -270,7 +270,6 @@ typedef struct { float rate_cells_gpu; #endif int use_cpu; - int nGPUs; void *cvode_mem; // CVodeMem object ModelData model_data; // Model data (used during initialization and solving) diff --git a/src/camp_core.F90 b/src/camp_core.F90 index fbd0ff247..b3079d40d 100644 --- a/src/camp_core.F90 +++ b/src/camp_core.F90 @@ -183,8 +183,13 @@ module camp_camp_core procedure :: get_rel_tol !> Get the absolute tolerance for a species on the state array procedure :: get_abs_tol + !> Create a file for saving output concentrations + procedure :: init_export_solver_state + !> Export output concentrations to calculate accuracy between CPU and GPU versions at checkGPU test procedure :: export_solver_state + !> Join the files created by each MPI process at "export_solver_state" function into a single file. procedure :: join_solver_state + !> Export execution time of GPU and CPU code to calculate speedups at TestMonarch.py procedure :: export_solver_stats !> Get a new model state variable procedure :: new_state_one_cell @@ -679,7 +684,7 @@ subroutine initialize(this) ! Variables for setting initial state values class(aero_rep_data_t), pointer :: rep - integer(kind=i_kind) :: i, i_state_elem, i_name + integer(kind=i_kind) :: i_state_elem, i_name ! Species name for looking up properties character(len=:), allocatable :: spec_name @@ -1151,23 +1156,18 @@ end function spec_state_id !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> Initialize the solver - subroutine solver_initialize(this, use_cpu, nGPUs) + subroutine solver_initialize(this, use_cpu) class(camp_core_t), intent(inout) :: this integer, intent(in), optional :: use_cpu - integer, intent(in), optional :: nGPUs type(string_t), allocatable :: spec_names(:) - integer :: i_spec, n_gas_spec, use_cpu1, nGPUs1 + integer :: i_spec, n_gas_spec, use_cpu1 call assert_msg(662920365, .not.this%solver_is_initialized, & "Attempting to initialize the solver twice.") use_cpu1=1 - nGPUs1=1 if (present(use_cpu)) then use_cpu1=use_cpu end if - if (present(nGPUs)) then - nGPUs1=nGPUs - end if ! Set up either two solvers (gas and aerosol) or one solver (combined) if (this%split_gas_aero) then @@ -1193,8 +1193,7 @@ subroutine solver_initialize(this, use_cpu, nGPUs) GAS_RXN, & ! Reaction phase this%n_cells, & ! # of cells computed simultaneosly spec_names, & ! Species names - use_cpu1, & - nGPUs1 & + use_cpu1& ) call this%solver_data_aero%initialize( & this%var_type, & ! State array variable types @@ -1206,8 +1205,7 @@ subroutine solver_initialize(this, use_cpu, nGPUs) AERO_RXN, & ! Reaction phase this%n_cells, & ! # of cells computed simultaneosly spec_names, & ! Species names - use_cpu1, & - nGPUs1 & + use_cpu1& ) else @@ -1230,10 +1228,8 @@ subroutine solver_initialize(this, use_cpu, nGPUs) GAS_AERO_RXN, & ! Reaction phase this%n_cells, & ! # of cells computed simultaneosly spec_names, & ! Species names - use_cpu1, & - nGPUs1 & + use_cpu1& ) - end if this%solver_is_initialized = .true. @@ -1505,6 +1501,24 @@ subroutine solve(this, camp_state, time_step, rxn_phase, solver_stats) end subroutine solve + subroutine init_export_solver_state(this) + use camp_rxn_data + use iso_c_binding + class(camp_core_t), intent(inout) :: this + integer(kind=i_kind) :: phase + type(camp_solver_data_t), pointer :: solver + phase = GAS_AERO_RXN + if (phase.eq.GAS_RXN) then + solver => this%solver_data_gas + else if (phase.eq.AERO_RXN) then + solver => this%solver_data_aero + else if (phase.eq.GAS_AERO_RXN) then + solver => this%solver_data_gas_aero + end if + call solver%init_export_solver_data_state() + end subroutine + + !> Export output concentrations to calculate accuracy between CPU and GPU versions at checkGPU test subroutine export_solver_state(this) use camp_rxn_data use iso_c_binding @@ -1522,6 +1536,7 @@ subroutine export_solver_state(this) call solver%export_solver_data_state() end subroutine + !> Join the files created by each MPI process at "export_solver_state" function into a single file. subroutine join_solver_state(this) use camp_rxn_data use iso_c_binding @@ -1539,6 +1554,7 @@ subroutine join_solver_state(this) call solver%join_solver_data_state() end subroutine + !> Export execution time of GPU and CPU code to calculate speedups at TestMonarch.py subroutine export_solver_stats(this) use camp_rxn_data use iso_c_binding @@ -1562,7 +1578,7 @@ subroutine export_solver_stats(this) integer(kind=i_kind) function pack_size(this, comm) !> Chemical model - class(camp_core_t), intent(inout) :: this + class(camp_core_t), intent(in) :: this !> MPI communicator integer, intent(in), optional :: comm @@ -1621,7 +1637,7 @@ end function pack_size subroutine bin_pack(this, buffer, pos, comm) !> Chemical model - class(camp_core_t), intent(inout) :: this + class(camp_core_t), intent(in) :: this !> Memory buffer character, intent(inout) :: buffer(:) !> Current buffer position diff --git a/src/debug_and_stats/camp_debug_2.c b/src/camp_debug.c similarity index 70% rename from src/debug_and_stats/camp_debug_2.c rename to src/camp_debug.c index 387d74351..271bf1e14 100644 --- a/src/debug_and_stats/camp_debug_2.c +++ b/src/camp_debug.c @@ -6,12 +6,7 @@ * SPDX-License-Identifier: MIT */ -#include "camp_debug_2.h" -#include -#include -#include -#include -#include "../camp_solver.h" +#include "camp_solver.h" #ifdef CAMP_DEBUG_GPU #ifdef CAMP_USE_MPI @@ -95,49 +90,22 @@ void join_export_state(){ #endif } -void init_export_stats(){ -#ifdef CAMP_DEBUG_GPU - int rank; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - char file_path[]="out/stats.csv"; - if(rank==0){ - printf("export_stats enabled\n"); - FILE *fptr; - fptr = fopen(file_path,"w"); - fprintf(fptr, "timecvStep,timeCVode\n"); - fclose(fptr); - } -#endif -} - void export_stats(SolverData *sd){ #ifdef CAMP_DEBUG_GPU int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0) { FILE *fptr; - fptr = fopen("out/stats.csv", "a"); - CVodeMem cv_mem = (CVodeMem) sd->cvode_mem; - fprintf(fptr, "%.17le,",cv_mem->timecvStep); - fprintf(fptr, "%.17le",sd->timeCVode); - fprintf(fptr, "\n"); - fclose(fptr); - } -#endif -} - -void print_double(double *x, int len, const char *s){ -#ifdef USE_PRINT_ARRAYS - for (int i=0; icvode_mem; + fprintf(fptr, "%.17le,",cv_mem->timecvStep); + fprintf(fptr, "%.17le",sd->timeCVode); + fprintf(fptr, "\n"); + fclose(fptr); + }else { + printf("File '%s' does not exist.\n", "out/stats.csv"); + } } #endif -} +} \ No newline at end of file diff --git a/src/camp_debug.h b/src/camp_debug.h index 41af364e3..8ce253c25 100644 --- a/src/camp_debug.h +++ b/src/camp_debug.h @@ -8,6 +8,17 @@ #ifndef CAMP_DEBUG_H #define CAMP_DEBUG_H +#include "camp_common.h" + +// Create a file for saving output concentrations +void init_export_state(); +// Export output concentrations to calculate accuracy between CPU and GPU versions at checkGPU test +void export_state(SolverData *sd); +// Join the files created by each MPI process at "export_solver_state" function into a single file. +void join_export_state(); +// Export execution time of GPU and CPU code to calculate speedups at TestMonarch.py +void export_stats(SolverData *sd); + // file name prefix int file_name_prefix = 1; diff --git a/src/camp_solver.c b/src/camp_solver.c index 54931f40d..ecc2a188c 100644 --- a/src/camp_solver.c +++ b/src/camp_solver.c @@ -30,7 +30,6 @@ #include #endif #include "camp_debug.h" -#include "debug_and_stats/camp_debug_2.h" #ifdef CAMP_DEBUG_GPU #ifdef CAMP_USE_MPI @@ -96,8 +95,9 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, int n_aero_rep_float_param, int n_aero_rep_env_param, int n_sub_model, int n_sub_model_int_param, int n_sub_model_float_param, int n_sub_model_env_param, - int use_cpu, int nGPUs) { + int use_cpu) { // Create the SolverData object + SolverData *sd = (SolverData *)malloc(sizeof(SolverData)); if (sd == NULL) { printf("\n\nERROR allocating space for SolverData\n\n"); @@ -124,7 +124,6 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, sd->model_data.n_per_cell_state_var = n_state_var; sd->use_cpu = use_cpu; - sd->nGPUs = nGPUs; #ifdef DEV_CPU_GPU sd->rate_cells_gpu=1; printf("Set cells to gpu to %lf %\n",sd->rate_cells_gpu*100); @@ -373,8 +372,6 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, #ifdef CAMP_DEBUG_GPU sd->timeCVode = 0.; - init_export_stats(); - init_export_state(); #endif // Return a pointer to the new SolverData object @@ -596,16 +593,6 @@ int solver_run(void *solver_data, double *state, double *env, double t_initial, aero_rep_update_env_state(md); sub_model_update_env_state(md); rxn_update_env_state(md); - //if(i_cell==0){ - //print_double(md->grid_cell_env,CAMP_NUM_ENV_PARAM_,"env689"); - //print_double(md->grid_cell_state,n_state_var,"state688"); - //double *yp = N_VGetArrayPointer(sd->y); - //print_double(yp,md->n_per_cell_dep_var,"y660"); - //} - //print_double(md->grid_cell_env,CAMP_NUM_ENV_PARAM_,"env689"); - //double *yp = N_VGetArrayPointer(sd->y)+i_cell*md->n_per_cell_dep_var; - //print_double(yp,md->n_per_cell_dep_var,"y660"); - //print_double(md->grid_cell_state,md->n_per_cell_state_var,"state688"); } //Reset jac solving, otherwise values from previous iteration would be carried to current iteration @@ -670,8 +657,6 @@ int solver_run(void *solver_data, double *state, double *env, double t_initial, #endif sd->solver_flag = flag; #ifdef FAILURE_DETAIL - if (flag < 0) { -#else if (check_flag(&flag, "CVode", 1) != CAMP_SOLVER_SUCCESS) { if (flag == -6) { long int lsflag; @@ -683,13 +668,14 @@ int solver_run(void *solver_data, double *state, double *env, double t_initial, if (flag != 0) printf("\nCall to f() at failed state failed with flag %d \n",flag); solver_print_stats(sd->cvode_mem); +#else + if (flag < 0) { #endif return CAMP_SOLVER_FAIL; } } // Update the species concentrations on the state array i_dep_var = 0; - //printf("NV_Ith_S(sd->y, i_dep_var)\n"); for (int i_cell = 0; i_cell < n_cells; i_cell++) { for (int i_spec = 0; i_spec < n_state_var; i_spec++) { if (md->var_type[i_spec] == CHEM_SPEC_VARIABLE) { @@ -732,10 +718,6 @@ int solver_run(void *solver_data, double *state, double *env, double t_initial, * \param last_time_step__s Pointer to set to the last time step size [s] * \param next_time_step__s Pointer to set to the next time step size [s] * \param Jac_eval_fails Number of Jacobian evaluation failures - * \param RHS_evals_total Total calls to `f()` - * \param Jac_evals_total Total calls to `Jac()` - * \param RHS_time__s Compute time for calls to f() [s] - * \param Jac_time__s Compute time for calls to Jac() [s] * \param max_loss_precision Indicators of loss of precision in derivative * calculation for each species */ @@ -745,8 +727,6 @@ void solver_get_statistics(void *solver_data, int *solver_flag, int *num_steps, int *NLS_convergence_fails, int *DLS_Jac_evals, int *DLS_RHS_evals, double *last_time_step__s, double *next_time_step__s, int *Jac_eval_fails, - int *RHS_evals_total, int *Jac_evals_total, - double *RHS_time__s, double *Jac_time__s, double *max_loss_precision ) { SolverData *sd = (SolverData *)solver_data; @@ -798,21 +778,17 @@ void solver_get_statistics(void *solver_data, int *solver_flag, int *num_steps, } #endif #ifdef CAMP_DEBUG - *RHS_evals_total = -1; - *Jac_evals_total = -1; - *RHS_time__s = 0.0; - *Jac_time__s = 0.0; *max_loss_precision = sd->max_loss_precision; #else - *RHS_evals_total = -1; - *Jac_evals_total = -1; - *RHS_time__s = 0.0; - *Jac_time__s = 0.0; *max_loss_precision = 0.0; #endif } +void init_export_solver_state(){ + init_export_state(); +} + void export_solver_state(void *solver_data){ SolverData *sd = (SolverData *)solver_data; export_state(sd); @@ -917,7 +893,6 @@ int f(realtype t, N_Vector y, N_Vector deriv, void *solver_data) { SUNMatMatvec(md->J_solver, md->J_tmp, md->J_tmp2); N_VLinearSum(1.0, md->J_deriv, 1.0, md->J_tmp2, md->J_tmp); - //print_double(md->total_state,n_state_var,"state602"); // Loop through the grid cells and update the derivative array for (int i_cell = 0; i_cell < n_cells; ++i_cell) { // Set the grid cell state pointers @@ -951,20 +926,6 @@ int f(realtype t, N_Vector y, N_Vector deriv, void *solver_data) { time_derivative_output(sd->time_deriv, deriv_data, NULL, sd->output_precision); } - if(i_cell==0) { - //double *yp = N_VGetArrayPointer(y); - //print_double(yp,86,"y646"); - //double *J_state = N_VGetArrayPointer(md->J_state); - //print_double(J_state,86,"J_state644"); - //print_double(jac_deriv_data,86,"J_tmp643"); - //double *J_deriv = N_VGetArrayPointer(md->J_deriv); - //print_double(J_deriv,86,"J_deriv644"); - //double *J_tmp2 = N_VGetArrayPointer(md->J_tmp2); - //print_double(J_tmp2,86,"J_tmp2645"); - //print_double(sd->time_deriv.loss_rates,sd->time_deriv.num_spec,"loss_rates"); - //print_double(sd->time_deriv.production_rates,sd->time_deriv.num_spec,"production_rates"); - //print_double(deriv_data,86,"deriv_data645"); - } #ifdef CAMP_DEBUG sd->max_loss_precision = time_derivative_max_loss_precision(sd->time_deriv); #endif @@ -1066,8 +1027,8 @@ int Jac(realtype t, N_Vector y, N_Vector deriv, SUNMatrix J, void *solver_data, JacMap *jac_map = md->jac_map; SM_DATA_S(md->J_params)[0] = 1.0; // dummy value for non-sub model calcs for (int i_map = 0; i_map < md->n_mapped_values; ++i_map){ - long double drf_dy = sd->jac.production_partials[jac_map[i_map].rxn_id]; - long double drr_dy = sd->jac.loss_partials[jac_map[i_map].rxn_id]; + double drf_dy = sd->jac.production_partials[jac_map[i_map].rxn_id]; + double drr_dy = sd->jac.loss_partials[jac_map[i_map].rxn_id]; SM_DATA_S(J) [i_cell * md->n_per_cell_solver_jac_elem + jac_map[i_map].solver_id] += @@ -1827,7 +1788,9 @@ bool is_anything_going_on_here(SolverData *sd, realtype t_initial, } } } +#ifdef CAMP_DEBUG printf("DEBUG: is_anything_going_on_here is false, returning success without cvode computing\n"); +#endif return false; } return true; diff --git a/src/camp_solver.h b/src/camp_solver.h index 6e8fdae8f..e780048aa 100644 --- a/src/camp_solver.h +++ b/src/camp_solver.h @@ -21,7 +21,7 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, int n_aero_rep_float_param, int n_aero_rep_env_param, int n_sub_model, int n_sub_model_int_param, int n_sub_model_float_param, int n_sub_model_env_param, - int use_cpu, int nGPUs); + int use_cpu); void solver_set_spec_name(void *solver_data, char *spec_name, int size_spec_name, int i); void solver_initialize(void *solver_data, double *abs_tol, double rel_tol, @@ -38,9 +38,8 @@ void solver_get_statistics(void *solver_data, int *solver_flag, int *num_steps, int *NLS_convergence_fails, int *DLS_Jac_evals, int *DLS_RHS_evals, double *last_time_step__s, double *next_time_step__s, int *Jac_eval_fails, - int *RHS_evals_total, int *Jac_evals_total, - double *RHS_time__s, double *Jac_time__s, double *max_loss_precision); +void init_export_solver_state(); void export_solver_state(void *solver_data); void join_solver_state(void *solver_data); void export_solver_stats(void *solver_data); diff --git a/src/camp_solver_data.F90 b/src/camp_solver_data.F90 index 759ddbd62..1f8edc00c 100644 --- a/src/camp_solver_data.F90 +++ b/src/camp_solver_data.F90 @@ -50,7 +50,7 @@ type(c_ptr) function solver_new(n_state_var, n_cells, var_type, & n_aero_rep_int_param, n_aero_rep_float_param, & n_aero_rep_env_param, n_sub_model, n_sub_model_int_param,& n_sub_model_float_param, n_sub_model_env_param,& - use_cpu, nGPUs) bind (c) + use_cpu) bind (c) use iso_c_binding !> Number of variables on the state array per grid cell !! (including const, PSSA, etc.) @@ -92,7 +92,6 @@ type(c_ptr) function solver_new(n_state_var, n_cells, var_type, & !> Total number of environment-dependent parameters for all sub models integer(kind=c_int), value :: n_sub_model_env_param integer(kind=c_int), value :: use_cpu - integer(kind=c_int), value :: nGPUs end function solver_new !> Set specie name @@ -167,8 +166,7 @@ subroutine solver_get_statistics( solver_data, solver_flag, num_steps, & RHS_evals, LS_setups, error_test_fails, NLS_iters, & NLS_convergence_fails, DLS_Jac_evals, DLS_RHS_evals, & last_time_step__s, next_time_step__s, Jac_eval_fails, & - RHS_evals_total, Jac_evals_total, RHS_time__s, & - Jac_time__s, max_loss_precision) bind (c) + max_loss_precision) bind (c) use iso_c_binding !> Pointer to the solver data type(c_ptr), value :: solver_data @@ -196,18 +194,14 @@ subroutine solver_get_statistics( solver_data, solver_flag, num_steps, & type(c_ptr), value :: next_time_step__s !> Number of Jacobian evaluation failures type(c_ptr), value :: Jac_eval_fails - !> Total number of calls to `f()` - type(c_ptr), value :: RHS_evals_total - !> Total number of calls to `Jac()` - type(c_ptr), value :: Jac_evals_total - !> Compute time for calls to `f()` - type(c_ptr), value :: RHS_time__s - !> Compute time for calls to `Jac()` - type(c_ptr), value :: Jac_time__s !> Maximum loss of precision on last call the f() type(c_ptr), value :: max_loss_precision end subroutine solver_get_statistics + subroutine init_export_solver_state() bind (c) + use iso_c_binding + end subroutine + subroutine export_solver_state( solver_data) bind (c) use iso_c_binding type(c_ptr), value :: solver_data @@ -417,9 +411,15 @@ end subroutine solver_free procedure :: update_aero_rep_data !> Integrate over a given time step procedure :: solve + !> Get solver statistics after an integration attempt procedure:: get_solver_stats + !> Create a file for saving output concentrations + procedure:: init_export_solver_data_state + !> Export output concentrations to calculate accuracy between CPU and GPU versions at checkGPU test procedure:: export_solver_data_state + !> Join the files created by each MPI process at "export_solver_state" function into a single file. procedure:: join_solver_data_state + !> Export execution time of GPU and CPU code to calculate speedups at TestMonarch.py procedure:: export_solver_data_stats !> Checks whether a solver is available procedure :: is_solver_available @@ -454,7 +454,7 @@ end function constructor !> Initialize the solver subroutine initialize(this, var_type, abs_tol, mechanisms, aero_phases, & aero_reps, sub_models, rxn_phase, n_cells,& - spec_names, use_cpu, nGPUs) + spec_names, use_cpu) !> Solver data class(camp_solver_data_t), intent(inout) :: this @@ -474,7 +474,6 @@ subroutine initialize(this, var_type, abs_tol, mechanisms, aero_phases, & !> Sub models to include type(sub_model_data_ptr), pointer, intent(in) :: sub_models(:) integer, intent(in) :: use_cpu - integer, intent(in) :: nGPUs !> Reactions phase to solve -- gas, aerosol, or both (default) !! Use parameters in camp_rxn_data to specify phase: !! GAS_RXN, AERO_RXN, GAS_AERO_RXN @@ -658,8 +657,7 @@ subroutine initialize(this, var_type, abs_tol, mechanisms, aero_phases, & n_sub_model_int_param, & ! # of sub model int params n_sub_model_float_param, & ! # of sub model real params n_sub_model_env_param, & ! # of sub model env params - use_cpu,& - nGPUs& + use_cpu& ) ! Add all the condensed reaction data to the solver data block for @@ -964,15 +962,16 @@ subroutine get_solver_stats( this, solver_stats) c_loc( solver_stats%last_time_step__s ), & ! Last time step [s] c_loc( solver_stats%next_time_step__s ), & ! Next time step [s] c_loc( solver_stats%Jac_eval_fails ), & ! Number of Jac eval fails - c_loc( solver_stats%RHS_evals_total ), & ! total f() calls - c_loc( solver_stats%Jac_evals_total ), & ! total Jac() calls - c_loc( solver_stats%RHS_time__s ), & ! Compute time f() [s] - c_loc( solver_stats%Jac_time__s ), & ! Compute time Jac() [s] c_loc( solver_stats%max_loss_precision) & ! Maximum loss of precision ) end subroutine + subroutine init_export_solver_data_state( this) + class(camp_solver_data_t), intent(inout) :: this + call init_export_solver_state() + end subroutine + subroutine export_solver_data_state( this) class(camp_solver_data_t), intent(inout) :: this call export_solver_state(this%solver_c_ptr) diff --git a/src/cuda/cuda_structs.h b/src/cuda/cuda_structs.h index f83d6d9e6..1c918c285 100644 --- a/src/cuda/cuda_structs.h +++ b/src/cuda/cuda_structs.h @@ -8,7 +8,6 @@ typedef struct { unsigned int num_spec; // Number of species in the derivative - // long double is treated as double in GPU double *production_rates; // Production rates for all species double *loss_rates; // Loss rates for all species #ifdef CAMP_DEBUG @@ -90,7 +89,6 @@ typedef struct{ int* jA; int* iA; int cells_method; - int threads,blocks; int nnz; int nnz_J_solver; size_t deriv_size; diff --git a/src/cuda/cvode_cuda.cu b/src/cuda/cvode_cuda.cu index c9fd84232..6a777de09 100644 --- a/src/cuda/cvode_cuda.cu +++ b/src/cuda/cvode_cuda.cu @@ -5,32 +5,6 @@ #include "cvode_cuda.h" -__device__ -void print_double(double *x, int len, const char *s){ -#ifdef USE_PRINT_ARRAYS - __syncthreads(); - if(threadIdx.x==0 && blockIdx.x==0){ - for (int i=0; in_shr_empty); - __syncthreads(); - if(tid==0)printf("%s min %le\n",s,min); - __syncthreads(); -} -#endif - __device__ void cudaDeviceBCGprecond_2(double* dA, int* djA, int* diA, double* ddiag, double alpha){ int row= threadIdx.x + blockDim.x*blockIdx.x; int nnz=diA[blockDim.x]; @@ -429,15 +387,13 @@ __device__ void cudaDeviceSpmv_2CSR(double* dx, double* db, double* dA, int* djA } __syncthreads(); dx[row]=sum; - __syncthreads(); } __device__ void cudaDeviceSpmv_2CSC_block(double* dx, double* db, double* dA, int* djA, int* diA){ int row = threadIdx.x + blockDim.x*blockIdx.x; - __syncthreads(); dx[row]=0.0; - __syncthreads(); int nnz=diA[blockDim.x]; + __syncthreads(); for(int j=diA[threadIdx.x]; jJ_tmp2, md->J_tmp, md->J_solver, md->djA, md->diA); md->J_tmp[i]=md->J_deriv[i]+md->J_tmp2[i]; TimeDerivativeGPU deriv_data; + __syncthreads(); deriv_data.production_rates = md->production_rates; deriv_data.loss_rates = md->loss_rates; __syncthreads(); @@ -625,12 +578,11 @@ __device__ void cudaDevicecalc_deriv(double time_step, double *y, deriv_data.production_rates = &( md->production_rates[blockDim.x*blockIdx.x]); deriv_data.loss_rates = &( md->loss_rates[blockDim.x*blockIdx.x]); sc->grid_cell_state = &( md->state[md->state_size_cell*blockIdx.x]); - int n_rxn = md->n_rxn; __syncthreads(); + int n_rxn = md->n_rxn; #ifdef IS_DEBUG_MODE_removeAtomic if(threadIdx.x==0){ for (int j = 0; j < n_rxn; j++){ - //printf("n_rxn %d i %d j %d \n",n_rxn,i,j); solveRXN(j,deriv_data, time_step, md, sc); } } @@ -665,22 +617,12 @@ __device__ void cudaDevicecalc_deriv(double time_step, double *y, } else { yout[i] = 0.0; } - //print_double(y,86,"y646"); - //print_double(md->J_state,86,"J_state644"); - //print_double(md->J_tmp,86,"J_tmp643"); - //print_double(md->J_deriv,86,"J_deriv644"); - //print_double(md->J_tmp2,86,"J_tmp2645"); - //print_double(deriv_data.loss_rates,86,"loss_rates"); - //print_double(deriv_data.production_rates,86,"production_rates"); - //print_double(yout,86,"deriv_data645"); - __syncthreads(); } __device__ int cudaDevicef(double time_step, double *y, - double *yout, ModelDataGPU *md, ModelDataVariable *sc, int *flag) + double *yout, ModelDataGPU *md, ModelDataVariable *sc) { - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS int clock_khz=md->clock_khz; clock_t start; @@ -688,13 +630,8 @@ int cudaDevicef(double time_step, double *y, #endif time_step = sc->cv_next_h; time_step = time_step > 0. ? time_step : md->init_time_step; - //print_double(md->state,md->state_size_cell,"state661"); - int checkflag=cudaDevicecamp_solver_check_model_state(md, sc, y, flag); - //print_double(md->state,md->state_size_cell,"state663"); - __syncthreads(); + int checkflag=cudaDevicecamp_solver_check_model_state(md, sc, y); if(checkflag==CAMP_SOLVER_FAIL){ - *flag=CAMP_SOLVER_FAIL; - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS int i = blockIdx.x * blockDim.x + threadIdx.x; if(threadIdx.x==0) sc->timef += ((double)(int)(clock() - start))/(clock_khz*1000); @@ -706,46 +643,36 @@ int cudaDevicef(double time_step, double *y, int i = blockIdx.x * blockDim.x + threadIdx.x; if(threadIdx.x==0) sc->timef += ((double)(int)(clock() - start))/(clock_khz*1000); #endif - __syncthreads(); - *flag=0; - __syncthreads(); return 0; } __device__ int CudaDeviceguess_helper(double h_n, double* y_n, double* y_n1, double* hf, double* atmp1, - double* acorr, int *flag, ModelDataGPU *md, ModelDataVariable *sc + double* acorr, ModelDataGPU *md, ModelDataVariable *sc ) { extern __shared__ double sdata[]; int i = blockIdx.x * blockDim.x + threadIdx.x; - __syncthreads(); double min; - cudaDevicemin_2(&min, y_n[i], sdata, md->n_shr_empty); + cudaDevicemin(&min, y_n[i], sdata, md->n_shr_empty); if(min>-SMALL){ return 0; } - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS int clock_khz=md->clock_khz; clock_t start; start = clock(); #endif atmp1[i]=y_n1[i]; - __syncthreads(); if (h_n > 0.) { acorr[i]=(1./h_n)*hf[i]; } else { acorr[i]=hf[i]; } - //print_double(acorr,86,"acorr711"); double t_0 = h_n > 0. ? sc->cv_tn - h_n : sc->cv_tn - 1.; double t_j = 0.; - __syncthreads(); for (int iter = 0; iter < GUESS_MAX_ITER && t_0 + t_j < sc->cv_tn; iter++) { - __syncthreads(); double h_j = sc->cv_tn - (t_0 + t_j); - //print_double(atmp1,86,"atmp720"); #ifdef IS_DEBUG_MODE_CudaDeviceguess_helper if(threadIdx.x==0){ int i_fast = -1; @@ -759,7 +686,7 @@ int CudaDeviceguess_helper(double h_n, double* y_n, } if (i_fast >= 0 && h_n > 0.) h_j *= 0.95 + 0.1 * iter / (double)GUESS_MAX_ITER; - sdata[0]=h_j; + sdata[0] = h_j; } __syncthreads(); h_j=sdata[0]; @@ -769,32 +696,24 @@ int CudaDeviceguess_helper(double h_n, double* y_n, if (t_star < 0. || (t_star == 0. && acorr[i] >= 0.)){ t_star=h_j; } - cudaDevicemin_2(&min, t_star, sdata, md->n_shr_empty); + cudaDevicemin(&min, t_star, sdata, md->n_shr_empty); if(mincv_tn < t_0 + t_j + h_j ? sc->cv_tn - (t_0 + t_j) : h_j; - __syncthreads(); if (h_n == 0. && sc->cv_tn - (h_j + t_j + t_0) > md->cv_reltol) { - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->timeguess_helper += ((double)(clock() - start))/(clock_khz*1000); #endif return -1; } atmp1[i]+=h_j*acorr[i]; - __syncthreads(); t_j += h_j; - int aux_flag=0; - //print_double(atmp1,86,"atmp1766"); - int fflag=cudaDevicef(t_0 + t_j, atmp1, acorr,md,sc,&aux_flag); - //print_double(acorr,86,"acorr721"); - __syncthreads(); + int fflag=cudaDevicef(t_0 + t_j, atmp1, acorr,md,sc); if (fflag == CAMP_SOLVER_FAIL) { acorr[i] = 0.; - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->timeguess_helper += ((double)(clock() - start))/(clock_khz*1000); #endif @@ -802,24 +721,19 @@ int CudaDeviceguess_helper(double h_n, double* y_n, } if (iter == GUESS_MAX_ITER - 1 && t_0 + t_j < sc->cv_tn) { if (h_n == 0.){ - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->timeguess_helper += ((double)(clock() - start))/(clock_khz*1000); #endif return -1; } } - __syncthreads(); } - __syncthreads(); acorr[i]=atmp1[i]-y_n[i]; if (h_n > 0.) acorr[i]=acorr[i]*0.999; hf[i]=atmp1[i]-y_n1[i]; - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->timeguess_helper += ((double)(clock() - start))/(clock_khz*1000); #endif - __syncthreads(); return 1; } @@ -862,12 +776,10 @@ __device__ void solveRXNJac( __device__ void cudaDevicecalc_Jac(double *y,ModelDataGPU *md, ModelDataVariable *sc ){ - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS int clock_khz=md->clock_khz; clock_t start; start = clock(); - __syncthreads(); #endif JacobianGPU *jac = &md->jac; JacobianGPU jacBlock; @@ -875,7 +787,6 @@ __device__ void cudaDevicecalc_Jac(double *y,ModelDataGPU *md, ModelDataVariable jacBlock.num_elem = jac->num_elem; jacBlock.production_partials = &( jac->production_partials[jacBlock.num_elem[0]*blockIdx.x]); jacBlock.loss_partials = &( jac->loss_partials[jacBlock.num_elem[0]*blockIdx.x]); - __syncthreads(); sc->grid_cell_state = &( md->state[md->state_size_cell*blockIdx.x]); __syncthreads(); int n_rxn = md->n_rxn; @@ -918,34 +829,28 @@ __device__ void cudaDevicecalc_Jac(double *y,ModelDataGPU *md, ModelDataVariable jacBlock.production_partials[jac_map[j].rxn_id] = 0.0; jacBlock.loss_partials[jac_map[j].rxn_id] = 0.0; } - __syncthreads(); + __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->timecalc_Jac += ((double)(clock() - start))/(clock_khz*1000); #endif } __device__ -int cudaDeviceJac(int *flag, ModelDataGPU *md, ModelDataVariable *sc) +int cudaDeviceJac(ModelDataGPU *md, ModelDataVariable *sc) { int i = blockIdx.x * blockDim.x + threadIdx.x; int retval; - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS int clock_khz=md->clock_khz; clock_t start; start = clock(); #endif md->use_deriv_est=0; - int aux_flag=0; - __syncthreads(); - //print_double(md->dcv_y,86,"dcv_y914"); - retval=cudaDevicef(sc->cv_next_h, md->dcv_y, md->dftemp,md,sc,&aux_flag); + retval=cudaDevicef(sc->cv_next_h, md->dcv_y, md->dftemp,md,sc); md->use_deriv_est=1; - __syncthreads(); if(retval==CAMP_SOLVER_FAIL) return CAMP_SOLVER_FAIL; cudaDevicecalc_Jac(md->dcv_y,md, sc); - __syncthreads(); int nnz = md->n_mapped_values[0]; int n_iters = nnz / blockDim.x; for (int z = 0; z < n_iters; z++) { @@ -957,16 +862,11 @@ int cudaDeviceJac(int *flag, ModelDataGPU *md, ModelDataVariable *sc) int j = threadIdx.x + n_iters*blockDim.x + nnz * blockIdx.x; md->J_solver[j]=md->dA[j]; } - __syncthreads(); md->J_state[i]=md->dcv_y[i]; md->J_deriv[i]=md->dftemp[i]; - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->timeJac += ((double)(clock() - start))/(clock_khz*1000); #endif - __syncthreads(); - *flag = 0; - __syncthreads(); return 0; } @@ -984,30 +884,21 @@ int cudaDevicelinsolsetup( (convfail == CV_FAIL_OTHER); jok = !jbad; if (jok==1) { - __syncthreads(); sc->cv_jcur = 0; cudaDeviceJacCopy(md->diA, md->dsavedJ, md->dA); - __syncthreads(); } else { - __syncthreads(); sc->nstlj = sc->cv_nst; sc->cv_jcur = 1; - __syncthreads(); - int aux_flag=0; - __syncthreads(); - int guess_flag=cudaDeviceJac(&aux_flag,md,sc); - __syncthreads(); + int guess_flag=cudaDeviceJac(md,sc); if (guess_flag < 0) { return -1;} if (guess_flag > 0) { return 1;} cudaDeviceJacCopy(md->diA, md->dA, md->dsavedJ); } - __syncthreads(); int i = blockIdx.x * blockDim.x + threadIdx.x; md->dx[i]=0.; cudaDeviceBCGprecond_2(md->dA, md->djA, md->diA, md->ddiag, -sc->cv_gamma); - __syncthreads(); return 0; } @@ -1046,10 +937,7 @@ void solveBcgCudaDeviceCVODE(ModelDataGPU *md, ModelDataVariable *sc) temp1 = sqrt(temp1); rho0 = rho1; it++; - __syncthreads(); - //if(i==0)printf("end iter %d BCG GPU\n",it); } - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->counterBCGInternal += it; if(threadIdx.x==0) sc->counterBCG++; @@ -1060,45 +948,31 @@ __device__ int cudaDevicecvNewtonIteration(ModelDataGPU *md, ModelDataVariable *sc){ extern __shared__ double flag_shr2[]; int i = blockIdx.x * blockDim.x + threadIdx.x; - int aux_flag=0; double del, delp, dcon; int m = 0; del = delp = 0.0; int retval; - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS int clock_khz=md->clock_khz; clock_t start; #endif for(;;) { - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS start = clock(); #endif - //print_double(md->dtempv,86,"dtempvN_VLinearSum1"); md->dtempv[i]=sc->cv_rl1*md->dzn[i+md->nrows]+md->cv_acor[i]; - //print_double(md->dtempv,86,"dtempvN_VLinearSum2"); md->dtempv[i]=sc->cv_gamma*md->dftemp[i]-md->dtempv[i]; - //print_double(md->dtempv,86,"dtempvcv_lsolve1"); solveBcgCudaDeviceCVODE(md, sc); - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->dtBCG += ((double)(int)(clock() - start))/(clock_khz*1000); #endif md->dtempv[i] = md->dx[i]; - //print_double(md->dtempv,86,"dtempvcv_lsolve2"); - __syncthreads(); cudaDeviceVWRMS_Norm_2(md->dx, md->dewt, &del, md->n_shr_empty); md->dftemp[i]=md->dcv_y[i]+md->dtempv[i]; - __syncthreads(); - //print_double(md->dcv_y,86,"dcv_y2994"); - //print_double(md->dftemp,86,"cv_ftemplsolve"); int guessflag=CudaDeviceguess_helper(0., md->dftemp, - md->dcv_y, md->dtempv, md->dtempv1,md->dtempv2, &aux_flag, md, sc - ); - __syncthreads(); + md->dcv_y, md->dtempv, md->dtempv1,md->dtempv2, md, sc); if (guessflag < 0) { - if (!(sc->cv_jcur)) { //Bool set up during linsolsetup just before Jacobian + if (!(sc->cv_jcur)) { return TRY_AGAIN; } else { return RHSFUNC_RECVR; @@ -1106,29 +980,22 @@ int cudaDevicecvNewtonIteration(ModelDataGPU *md, ModelDataVariable *sc){ } md->dftemp[i]=md->dcv_y[i]+md->dtempv[i]; double min; - cudaDevicemin_2(&min, md->dftemp[i], flag_shr2, md->n_shr_empty); + cudaDevicemin(&min, md->dftemp[i], flag_shr2, md->n_shr_empty); if (min < -CAMP_TINY) { return CONV_FAIL; } - __syncthreads(); md->cv_acor[i]+=md->dtempv[i]; md->dcv_y[i]=md->dzn[i]+md->cv_acor[i]; - //print_double(md->cv_acor,86,"cv_acor1060"); - //print_double(md->dcv_y,86,"dcv_y1060"); if (m > 0) { sc->cv_crate = SUNMAX(0.3 * sc->cv_crate, del / delp); } dcon = del * SUNMIN(1.0, sc->cv_crate) / md->cv_tq[4+blockIdx.x*(NUM_TESTS + 1)]; - flag_shr2[0]=0; + __syncthreads(); + flag_shr2[0] = 0; __syncthreads(); if (dcon <= 1.) { - //print_double(md->cv_acor,86,"cv_acor1505"); - //print_double(md->dewt,86,"dewt1505"); cudaDeviceVWRMS_Norm_2(md->cv_acor, md->dewt, &sc->cv_acnrm, md->n_shr_empty); - //print_double(&sc->cv_acnrm,1,"cv_acnrm1151"); - __syncthreads(); sc->cv_jcur = 0; - __syncthreads(); return CV_SUCCESS; } m++; @@ -1140,10 +1007,7 @@ int cudaDevicecvNewtonIteration(ModelDataGPU *md, ModelDataVariable *sc){ } } delp = del; - __syncthreads(); - //print_double(md->dcv_y,86,"dcv_y1137"); - retval=cudaDevicef(sc->cv_next_h, md->dcv_y, md->dftemp, md, sc, &aux_flag); - __syncthreads(); + retval=cudaDevicef(sc->cv_next_h, md->dcv_y, md->dftemp, md, sc); md->cv_acor[i]=md->dcv_y[i]+md->dzn[i]; if (retval < 0) { return CV_RHSFUNC_FAIL; @@ -1155,7 +1019,6 @@ int cudaDevicecvNewtonIteration(ModelDataGPU *md, ModelDataVariable *sc){ return RHSFUNC_RECVR; } } - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->dtPostBCG += ((double)(clock() - start))/(clock_khz*1000); #endif @@ -1167,10 +1030,8 @@ int cudaDevicecvNlsNewton(int nflag, ModelDataGPU *md, ModelDataVariable *sc ) { extern __shared__ int flag_shr[]; - int flagDevice = 0; int i = blockIdx.x * blockDim.x + threadIdx.x; int retval=0; - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS int clock_khz=md->clock_khz; clock_t start; @@ -1182,31 +1043,18 @@ int cudaDevicecvNlsNewton(int nflag, (sc->cv_nst == 0) || (sc->cv_nst >= sc->cv_nstlp + MSBP) || (dgamrat > DGMAX); - __syncthreads(); - //print_double(md->cv_last_yn,86,"cv_last_yn1175"); md->dftemp[i]=md->dzn[i]-md->cv_last_yn[i]; - //print_double(md->dftemp,86,"cv_ftemppN_VLinearSum2"); md->cv_acor_init[i]=0.; - __syncthreads(); int guessflag=CudaDeviceguess_helper(sc->cv_h, md->dzn, md->cv_last_yn, md->dftemp, md->dtempv1, - md->cv_acor_init, &flagDevice,md, sc + md->cv_acor_init, md, sc ); - __syncthreads(); if(guessflag<0){ return RHSFUNC_RECVR; } for(;;) { - __syncthreads(); - //print_double(md->cv_acor_init,86,"cv_acor_init1140"); md->dcv_y[i] = md->dzn[i]+md->cv_acor_init[i]; - //print_double(md->dcv_y,86,"dcv_y1139"); - int aux_flag=0; - //print_double(md->dftemp,86,"cv_ftemppcv_f1"); - //print_double(&sc->cv_tn,1,"cv_tn1216"); - retval=cudaDevicef(sc->cv_tn, md->dcv_y,md->dftemp,md,sc,&aux_flag); - //print_double(md->dftemp,86,"cv_ftemppcv_f2"); - //print_double(md->dcv_y,86,"dcv_y1144"); + retval=cudaDevicef(sc->cv_tn, md->dcv_y,md->dftemp,md,sc); if (retval < 0) { return CV_RHSFUNC_FAIL; } @@ -1214,14 +1062,10 @@ int cudaDevicecvNlsNewton(int nflag, return RHSFUNC_RECVR; } if (callSetup) { - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS start = clock(); #endif - __syncthreads(); int linflag=cudaDevicelinsolsetup(md, sc,convfail); - //print_double(md->dftemp,86,"cv_ftempp1160"); - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->timelinsolsetup += ((double)(clock() - start))/(clock_khz*1000); #endif @@ -1229,7 +1073,6 @@ int cudaDevicecvNlsNewton(int nflag, sc->cv_gamrat = sc->cv_crate = 1.0; sc->cv_gammap = sc->cv_gamma; sc->cv_nstlp = sc->cv_nst; - __syncthreads(); if (linflag < 0) { flag_shr[0] = CV_LSETUP_FAIL; break; @@ -1239,28 +1082,20 @@ int cudaDevicecvNlsNewton(int nflag, break; } } - __syncthreads(); md->cv_acor[i] = md->cv_acor_init[i]; - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS start = clock(); #endif - __syncthreads(); int nItflag=cudaDevicecvNewtonIteration(md, sc); - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->timeNewtonIteration += ((double)(clock() - start))/(clock_khz*1000); #endif if (nItflag != TRY_AGAIN) { return nItflag; } - __syncthreads(); callSetup = 1; - __syncthreads(); convfail = CV_FAIL_BAD_J; - __syncthreads(); } //for(;;) - __syncthreads(); return nflag; } @@ -1268,36 +1103,27 @@ __device__ void cudaDevicecvRescale(ModelDataGPU *md, ModelDataVariable *sc) { int i = blockIdx.x * blockDim.x + threadIdx.x; double factor; - __syncthreads(); factor = sc->cv_eta; for (int j=1; j <= sc->cv_q; j++) { md->dzn[i+md->nrows*j]*=factor; - __syncthreads(); factor *= sc->cv_eta; - __syncthreads(); } - //print_double(&sc->cv_eta,1,"cv_eta_1290"); sc->cv_h = sc->cv_hscale * sc->cv_eta; sc->cv_next_h = sc->cv_h; sc->cv_hscale = sc->cv_h; - __syncthreads(); } __device__ void cudaDevicecvRestore(ModelDataGPU *md, ModelDataVariable *sc, double saved_t) { int i = blockIdx.x * blockDim.x + threadIdx.x; int j, k; - __syncthreads(); sc->cv_tn=saved_t; - print_double(md->dzn,86,"dzn1299"); for (k = 1; k <= sc->cv_q; k++){ for (j = sc->cv_q; j >= k; j--) { md->dzn[i+md->nrows*(j-1)]-=md->dzn[i+md->nrows*j]; } } md->dzn[i]=md->cv_last_yn[i]; - print_double(md->dzn,86,"dzn1306"); - __syncthreads(); } __device__ @@ -1313,20 +1139,15 @@ int cudaDevicecvHandleNFlag(ModelDataGPU *md, ModelDataVariable *sc, int *nflagP if (*nflagPtr == CV_RHSFUNC_FAIL) return(CV_RHSFUNC_FAIL); (*ncfPtr)++; sc->cv_etamax = 1.; - __syncthreads(); if ((fabs(sc->cv_h) <= sc->cv_hmin*ONEPSM) || (*ncfPtr == sc->cv_maxncf)) { if (*nflagPtr == CONV_FAIL) return(CV_CONV_FAILURE); if (*nflagPtr == RHSFUNC_RECVR) return(CV_REPTD_RHSFUNC_ERR); } - __syncthreads(); sc->cv_eta = SUNMAX(ETACF, sc->cv_hmin / fabs(sc->cv_h)); - //print_double(&sc->cv_eta,1,"cv_eta_1337"); - __syncthreads(); *nflagPtr = PREV_CONV_FAIL; cudaDevicecvRescale(md, sc); - __syncthreads(); return (PREDICT_AGAIN); } @@ -1337,7 +1158,6 @@ void cudaDevicecvSetTqBDFt(ModelDataGPU *md, ModelDataVariable *sc, extern __shared__ int flag_shr[]; double A1, A2, A3, A4, A5, A6; double C, Cpinv, Cppinv; - __syncthreads(); A1 = 1. - alpha0_hat + alpha0; A2 = 1. + sc->cv_q * A1; md->cv_tq[2+blockIdx.x*(NUM_TESTS + 1)] = fabs(A1 / (alpha0 * A2)); @@ -1351,14 +1171,12 @@ void cudaDevicecvSetTqBDFt(ModelDataGPU *md, ModelDataVariable *sc, md->cv_tq[1+blockIdx.x*(NUM_TESTS + 1)] = fabs(C * Cpinv); } else md->cv_tq[1+blockIdx.x*(NUM_TESTS + 1)] = 1.; - __syncthreads(); hsum += md->cv_tau[sc->cv_q+blockIdx.x*(L_MAX + 1)]; xi_inv = sc->cv_h / hsum; A5 = alpha0 - (1. / (sc->cv_q+1)); A6 = alpha0_hat - xi_inv; Cppinv = (1. - A6 + A5) / A2; md->cv_tq[3+blockIdx.x*(NUM_TESTS + 1)] = fabs(Cppinv / (xi_inv * (sc->cv_q+2) * A5)); - __syncthreads(); } md->cv_tq[4+blockIdx.x*(NUM_TESTS + 1)] = md->cv_nlscoef / md->cv_tq[2+blockIdx.x*(NUM_TESTS + 1)]; } @@ -1368,12 +1186,10 @@ void cudaDevicecvSetBDF(ModelDataGPU *md, ModelDataVariable *sc) { extern __shared__ int flag_shr[]; double alpha0, alpha0_hat, xi_inv, xistar_inv, hsum; int z,j; - __syncthreads(); md->cv_l[0+blockIdx.x*L_MAX] = md->cv_l[1+blockIdx.x*L_MAX] = xi_inv = xistar_inv = 1.; for (z=2; z <= sc->cv_q; z++) md->cv_l[z+blockIdx.x*L_MAX] = 0.; alpha0 = alpha0_hat = -1.; hsum = sc->cv_h; - __syncthreads(); if (sc->cv_q > 1) { for (j=2; j < sc->cv_q; j++) { hsum += md->cv_tau[j-1+blockIdx.x*(L_MAX + 1)]; @@ -1381,7 +1197,6 @@ void cudaDevicecvSetBDF(ModelDataGPU *md, ModelDataVariable *sc) { alpha0 -= 1. / j; for (z=j; z >= 1; z--) md->cv_l[z+blockIdx.x*L_MAX] += md->cv_l[z-1+blockIdx.x*L_MAX]*xi_inv; } - __syncthreads(); alpha0 -= 1. / sc->cv_q; xistar_inv = -md->cv_l[1+blockIdx.x*L_MAX] - alpha0; hsum += md->cv_tau[sc->cv_q-1+blockIdx.x*(L_MAX + 1)]; @@ -1390,49 +1205,37 @@ void cudaDevicecvSetBDF(ModelDataGPU *md, ModelDataVariable *sc) { for (z=sc->cv_q; z >= 1; z--) md->cv_l[z+blockIdx.x*L_MAX] += md->cv_l[z-1+blockIdx.x*L_MAX]*xistar_inv; } - __syncthreads(); cudaDevicecvSetTqBDFt(md, sc, hsum, alpha0, alpha0_hat, xi_inv, xistar_inv); } __device__ void cudaDevicecvSet(ModelDataGPU *md, ModelDataVariable *sc) { extern __shared__ int flag_shr[]; - __syncthreads(); cudaDevicecvSetBDF(md,sc); - __syncthreads(); sc->cv_rl1 = 1.0 / md->cv_l[1+blockIdx.x*L_MAX]; sc->cv_gamma = sc->cv_h * sc->cv_rl1; - __syncthreads(); if (sc->cv_nst == 0){ sc->cv_gammap = sc->cv_gamma; } - __syncthreads(); sc->cv_gamrat = (sc->cv_nst > 0) ? sc->cv_gamma / sc->cv_gammap : 1.; // protect x / x != 1.0 - __syncthreads(); } __device__ void cudaDevicecvPredict(ModelDataGPU *md, ModelDataVariable *sc) { int i = blockIdx.x * blockDim.x + threadIdx.x; int j, k; - __syncthreads(); sc->cv_tn += sc->cv_h; - __syncthreads(); if (md->cv_tstopset) { if ((sc->cv_tn - md->cv_tstop)*sc->cv_h > 0.) sc->cv_tn = md->cv_tstop; } md->cv_last_yn[i]=md->dzn[i]; - __syncthreads(); - print_double(md->dzn,86,"dzn1432"); for (k = 1; k <= sc->cv_q; k++){ for (j = sc->cv_q; j >= k; j--){ md->dzn[i+md->nrows*(j-1)]+=md->dzn[i+md->nrows*j]; - __syncthreads(); } } - print_double(md->dzn,86,"dzn1439"); } __device__ @@ -1453,7 +1256,6 @@ void cudaDevicecvDecreaseBDF(ModelDataGPU *md, ModelDataVariable *sc) { md->dzn[i+md->nrows*j]=-md->cv_l[j+blockIdx.x*L_MAX]* md->dzn[i+md->nrows*sc->cv_q]+md->dzn[i+md->nrows*j]; } - print_double(md->dzn,86,"dzn1460"); } __device__ @@ -1465,64 +1267,45 @@ int cudaDevicecvDoErrorTest(ModelDataGPU *md, ModelDataVariable *sc, double min_val; int retval; md->dftemp[i]=md->cv_l[blockIdx.x*L_MAX]*md->cv_acor[i]+md->dzn[i]; - cudaDevicemin_2(&min_val, md->dftemp[i], flag_shr2, md->n_shr_empty); + cudaDevicemin(&min_val, md->dftemp[i], flag_shr2, md->n_shr_empty); if (min_val < 0. && min_val > -CAMP_TINY) { md->dftemp[i]=fabs(md->dftemp[i]); md->dzn[i]=md->dftemp[i]-md->cv_l[0+blockIdx.x*L_MAX]*md->cv_acor[i]; min_val = 0.; } - print_double(md->dzn,86,"dzn1487"); - //print_double(&md->cv_tq[2+blockIdx.x*(NUM_TESTS + 1)],1,"cv_tq_21504"); - //print_double(&sc->cv_acnrm,1,"cv_acnrm1504"); dsm = sc->cv_acnrm * md->cv_tq[2+blockIdx.x*(NUM_TESTS + 1)]; - //print_double(&dsm,1,"dsm1504"); *dsmPtr = dsm; if (dsm <= 1. && min_val >= 0.) return(CV_SUCCESS); (*nefPtr)++; *nflagPtr = PREV_ERR_FAIL; cudaDevicecvRestore(md, sc, saved_t); - __syncthreads(); if ((fabs(sc->cv_h) <= sc->cv_hmin*ONEPSM) || (*nefPtr == md->cv_maxnef)) return(CV_ERR_FAILURE); sc->cv_etamax = 1.; - __syncthreads(); if (*nefPtr <= MXNEF1) { sc->cv_eta = 1. / (dSUNRpowerR(BIAS2*dsm,1./sc->cv_L) + ADDON); - __syncthreads(); sc->cv_eta = SUNMAX(ETAMIN, SUNMAX(sc->cv_eta, sc->cv_hmin / fabs(sc->cv_h))); - __syncthreads(); if (*nefPtr >= SMALL_NEF) sc->cv_eta = SUNMIN(sc->cv_eta, ETAMXF); - __syncthreads(); - //print_double(&sc->cv_eta,1,"cv_eta_1510"); cudaDevicecvRescale(md, sc); return(TRY_AGAIN); } - __syncthreads(); if (sc->cv_q > 1) { sc->cv_eta = SUNMAX(ETAMIN,sc->cv_hmin / fabs(sc->cv_h)); - //print_double(&sc->cv_eta,1,"cv_eta_1517"); cudaDevicecvDecreaseBDF(md, sc); sc->cv_L = sc->cv_q; - //print_int(&sc->cv_L,1,"cv_L1547"); sc->cv_q--; sc->cv_qwait = sc->cv_L; cudaDevicecvRescale(md, sc); - __syncthreads(); return(TRY_AGAIN); } - __syncthreads(); sc->cv_eta = SUNMAX(ETAMIN, sc->cv_hmin / fabs(sc->cv_h)); - //print_double(&sc->cv_eta,1,"cv_eta_1529"); - __syncthreads(); sc->cv_h *= sc->cv_eta; sc->cv_next_h = sc->cv_h; sc->cv_hscale = sc->cv_h; - __syncthreads(); sc->cv_qwait = 10; - int aux_flag=0; - retval=cudaDevicef(sc->cv_tn, md->dzn, md->dtempv,md,sc, &aux_flag); + retval=cudaDevicef(sc->cv_tn, md->dzn, md->dtempv,md,sc); if (retval < 0) return(CV_RHSFUNC_FAIL); if (retval > 0) return(CV_UNREC_RHSFUNC_ERR); md->dzn[i+md->nrows]=sc->cv_h*md->dtempv[i]; @@ -1533,20 +1316,15 @@ __device__ void cudaDevicecvCompleteStep(ModelDataGPU *md, ModelDataVariable *sc) { int i = blockIdx.x * blockDim.x + threadIdx.x; int z, j; - __syncthreads(); sc->cv_nst++; - __syncthreads(); sc->cv_hu = sc->cv_h; for (z=sc->cv_q; z >= 2; z--) md->cv_tau[z+blockIdx.x*(L_MAX + 1)] = md->cv_tau[z-1+blockIdx.x*(L_MAX + 1)]; if ((sc->cv_q==1) && (sc->cv_nst > 1)) md->cv_tau[2+blockIdx.x*(L_MAX + 1)] = md->cv_tau[1+blockIdx.x*(L_MAX + 1)]; md->cv_tau[1+blockIdx.x*(L_MAX + 1)] = sc->cv_h; - __syncthreads(); for (j=0; j <= sc->cv_q; j++){ md->dzn[i+md->nrows*j]+=md->cv_l[j+blockIdx.x*L_MAX]*md->cv_acor[i]; - __syncthreads(); } - print_double(md->dzn,86,"dzn1554"); sc->cv_qwait--; if ((sc->cv_qwait == 1) && (sc->cv_q != md->cv_qmax)) { md->dzn[i+md->nrows*md->cv_qmax]=md->cv_acor[i]; @@ -1559,143 +1337,76 @@ __device__ void cudaDevicecvChooseEta(ModelDataGPU *md, ModelDataVariable *sc) { int i = blockIdx.x * blockDim.x + threadIdx.x; double etam; - //print_double(&sc->cv_etaqm1,1,"cv_etaqm1605"); - //print_double(&sc->cv_etaq,1,"cv_etaq1605"); - //print_double(&sc->cv_etaqp1,1,"cv_etaqp1605"); etam = SUNMAX(sc->cv_etaqm1, SUNMAX(sc->cv_etaq, sc->cv_etaqp1)); - //print_double(&etam,1,"etam1605"); - __syncthreads(); if (etam < THRESH) { sc->cv_eta = 1.; - //print_double(&sc->cv_eta,1,"cv_eta1609"); sc->cv_qprime = sc->cv_q; return; } - __syncthreads(); if (etam == sc->cv_etaq) { sc->cv_eta = sc->cv_etaq; - //print_double(&sc->cv_eta,1,"cv_eta1616"); sc->cv_qprime = sc->cv_q; } else if (etam == sc->cv_etaqm1) { sc->cv_eta = sc->cv_etaqm1; - //print_double(&sc->cv_eta,1,"cv_eta1620"); sc->cv_qprime = sc->cv_q - 1; } else { sc->cv_eta = sc->cv_etaqp1; - //print_double(&sc->cv_eta,1,"cv_eta1624"); sc->cv_qprime = sc->cv_q + 1; - __syncthreads(); md->dzn[i+md->nrows*md->cv_qmax]=md->cv_acor[i]; } - __syncthreads(); - print_double(md->dzn,86,"dzn1581"); } __device__ void cudaDevicecvSetEta(ModelDataGPU *md, ModelDataVariable *sc) { - __syncthreads(); if (sc->cv_eta < THRESH) { sc->cv_eta = 1.; sc->cv_hprime = sc->cv_h; } else { - __syncthreads(); sc->cv_eta = SUNMIN(sc->cv_eta, sc->cv_etamax); - __syncthreads(); sc->cv_eta /= SUNMAX(ONE, fabs(sc->cv_h)*md->cv_hmax_inv*sc->cv_eta); - __syncthreads(); sc->cv_hprime = sc->cv_h * sc->cv_eta; - __syncthreads(); } - //print_double(&sc->cv_eta,1,"cv_eta_1618"); - __syncthreads(); } __device__ int cudaDevicecvPrepareNextStep(ModelDataGPU *md, ModelDataVariable *sc, double dsm) { int i = blockIdx.x * blockDim.x + threadIdx.x; - __syncthreads(); if (sc->cv_etamax == 1.) { sc->cv_qwait = SUNMAX(sc->cv_qwait, 2); sc->cv_qprime = sc->cv_q; sc->cv_hprime = sc->cv_h; sc->cv_eta = 1.; - //print_double(&sc->cv_eta,1,"cv_eta_1631"); return 0; } - __syncthreads(); - //print_double(&dsm,1,"dsm1639"); - //print_int(&sc->cv_L,1,"cv_L1639"); - //double BIAS2dsm=BIAS2*dsm; - //print_double(&BIAS2dsm,1,"BIAS2dsm"); - //double cv_L1=sc->cv_L; - //print_double(&cv_L1,1,"1cv_L"); - //double cv_etaq_power=dSUNRpowerR(BIAS2dsm,cv_L1); - //print_double(&cv_etaq_power,1,"cv_etaq_power"); - //double cv_etaq_sqrt=sqrt(BIAS2dsm); - //print_double(&cv_etaq_sqrt,1,"cv_etaq_sqrt"); sc->cv_etaq=1./(dSUNRpowerR(BIAS2*dsm,1./sc->cv_L) + ADDON); - //print_double(&sc->cv_etaq,1,"cv_etaq1639"); - /* - if(sc->cv_L!=2){ - //print_int(&sc->cv_L,1,"cv_L1674"); - if(i==0)printf("WARNING: pow is innacurate from CPU" - " result for CUDA/10.1.105 " - " (which is used during development at CTE-POWER) " - " (debug by compare pow(x,0.5) and" - " sqrt(x.0.5), double x=3.28586921557249207e-12)\n"); - } - */ - __syncthreads(); if (sc->cv_qwait != 0) { sc->cv_eta = sc->cv_etaq; - //print_double(&sc->cv_eta,1,"cv_eta1639"); sc->cv_qprime = sc->cv_q; cudaDevicecvSetEta(md, sc); return 0; } - __syncthreads(); sc->cv_qwait = 2; double ddn; sc->cv_etaqm1 = 0.; - __syncthreads(); if (sc->cv_q > 1) { cudaDeviceVWRMS_Norm_2(&md->dzn[md->nrows*sc->cv_q], md->dewt, &ddn, md->n_shr_empty); - __syncthreads(); ddn *= md->cv_tq[1+blockIdx.x*(NUM_TESTS + 1)]; - __syncthreads(); sc->cv_etaqm1 = 1./(dSUNRpowerR(BIAS1*ddn, 1./sc->cv_q) + ADDON); } double dup, cquot; sc->cv_etaqp1 = 0.; - __syncthreads(); if (sc->cv_q != md->cv_qmax && sc->cv_saved_tq5 != 0.) { cquot = (md->cv_tq[5+blockIdx.x*(NUM_TESTS + 1)] / sc->cv_saved_tq5) * dSUNRpowerI(sc->cv_h/md->cv_tau[2+blockIdx.x*(L_MAX + 1)],(double)sc->cv_L); md->dtempv[i]=md->cv_acor[i]-cquot*md->dzn[i+md->nrows*md->cv_qmax]; - //print_double(md->dtempv,86,"dtempv1658"); cudaDeviceVWRMS_Norm_2(md->dtempv, md->dewt, &dup, md->n_shr_empty); - __syncthreads(); dup *= md->cv_tq[3+blockIdx.x*(NUM_TESTS + 1)]; - __syncthreads(); - //print_double(&dup,1,"dup1728"); - //print_int(&sc->cv_L,1,"cv_L1728"); - //double BIAS3dup=BIAS3*dup; - //print_double(&BIAS3dup,1,"BIAS3dup"); - //double cv_L1=1./(sc->cv_L+1); - //print_double(&cv_L1,1,"1cv_L1732"); - //double cv_etaq_power=dSUNRpowerR(BIAS3dup,1./cv_L1); - //double cv_etaq_power=(double)pow((double)BIAS3dup,(double)cv_L1); - //print_double(&cv_etaq_power,1,"cv_etaq_power1734"); sc->cv_etaqp1 = 1. / (dSUNRpowerR(BIAS3*dup, 1./(sc->cv_L+1)) + ADDON); - //print_double(&sc->cv_etaqp1,1,"cv_etaqp1728"); } - __syncthreads(); cudaDevicecvChooseEta(md, sc); - __syncthreads(); cudaDevicecvSetEta(md, sc); - __syncthreads(); return CV_SUCCESS; } @@ -1722,12 +1433,9 @@ void cudaDevicecvIncreaseBDF(ModelDataGPU *md, ModelDataVariable *sc) { } A1 = (-alpha0 - alpha1) / prod; md->dzn[i+md->nrows*sc->cv_L]=A1*md->dzn[i+md->nrows*sc->cv_indx_acor]; - __syncthreads(); for (j=2; j <= sc->cv_q; j++){ md->dzn[i+md->nrows*j]+=md->cv_l[j+blockIdx.x*L_MAX]*md->dzn[i+md->nrows*(sc->cv_L)]; - __syncthreads(); } - print_double(md->dzn,86,"dzn1687"); } __device__ @@ -1744,7 +1452,6 @@ void cudaDevicecvAdjustParams(ModelDataGPU *md, ModelDataVariable *sc) { } sc->cv_q = sc->cv_qprime; sc->cv_L = sc->cv_q+1; - //print_int(&sc->cv_L,1,"cv_L1770"); sc->cv_qwait = sc->cv_L; } cudaDevicecvRescale(md, sc); @@ -1758,30 +1465,21 @@ int cudaDevicecvStep(ModelDataGPU *md, ModelDataVariable *sc) { int nflag=FIRST_CALL; double saved_t=sc->cv_tn; double dsm; - __syncthreads(); if ((sc->cv_nst > 0) && (sc->cv_hprime != sc->cv_h)){ cudaDevicecvAdjustParams(md, sc); } - __syncthreads(); for (;;) { - __syncthreads(); cudaDevicecvPredict(md, sc); - __syncthreads(); cudaDevicecvSet(md, sc); - __syncthreads(); nflag = cudaDevicecvNlsNewton(nflag,md, sc); - __syncthreads(); int kflag = cudaDevicecvHandleNFlag(md, sc, &nflag, saved_t, &ncf); - __syncthreads(); if (kflag == PREDICT_AGAIN) { continue; } if (kflag != DO_ERROR_TEST) { return (kflag); } - __syncthreads(); int eflag=cudaDevicecvDoErrorTest(md,sc,&nflag,saved_t,&nef,&dsm); - __syncthreads(); if (eflag == TRY_AGAIN){ continue; } @@ -1790,14 +1488,10 @@ int cudaDevicecvStep(ModelDataGPU *md, ModelDataVariable *sc) { } break; } - __syncthreads(); cudaDevicecvCompleteStep(md, sc); - __syncthreads(); cudaDevicecvPrepareNextStep(md, sc, dsm); - __syncthreads(); sc->cv_etamax=10.; md->cv_acor[i]*=md->cv_tq[2+blockIdx.x*(NUM_TESTS + 1)]; - __syncthreads(); return(CV_SUCCESS); } @@ -1808,7 +1502,6 @@ int cudaDeviceCVodeGetDky(ModelDataGPU *md, ModelDataVariable *sc, double s, c, r; double tfuzz, tp, tn1; int z, j; - __syncthreads(); tfuzz = FUZZ_FACTOR * md->cv_uround * (fabs(sc->cv_tn) + fabs(sc->cv_hu)); if (sc->cv_hu < 0.) tfuzz = -tfuzz; tp = sc->cv_tn - sc->cv_hu - tfuzz; @@ -1816,7 +1509,6 @@ int cudaDeviceCVodeGetDky(ModelDataGPU *md, ModelDataVariable *sc, if ((t-tp)*(t-tn1) > 0.) { return(CV_BAD_T); } - __syncthreads(); s = (t - sc->cv_tn) / sc->cv_h; for (j=sc->cv_q; j >= k; j--) { c = 1.; @@ -1827,11 +1519,8 @@ int cudaDeviceCVodeGetDky(ModelDataGPU *md, ModelDataVariable *sc, dky[i]=c*md->dzn[i+md->nrows*j]+s*dky[i]; } } - __syncthreads(); if (k == 0) return(CV_SUCCESS); - __syncthreads(); r = dSUNRpowerI(double(sc->cv_h),double(-k)); - __syncthreads(); dky[i]=dky[i]*r; return(CV_SUCCESS); } @@ -1843,8 +1532,7 @@ int cudaDevicecvEwtSetSV(ModelDataGPU *md, ModelDataVariable *sc,double *weight) md->dtempv[i]=fabs(md->dzn[i]); double min; md->dtempv[i]=md->cv_reltol*md->dtempv[i]+md->cv_Vabstol[i]; - cudaDevicemin_2(&min, md->dtempv[i], flag_shr2, md->n_shr_empty); -__syncthreads(); + cudaDevicemin(&min, md->dtempv[i], flag_shr2, md->n_shr_empty); if (min <= 0.) return(-1); weight[i]= 1./md->dtempv[i]; return(0); @@ -1860,18 +1548,16 @@ int cudaDeviceCVode(ModelDataGPU *md, ModelDataVariable *sc) { sc->cv_nst=0; sc->cv_nstlp=0; for(;;) { - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->countercvStep++; #endif + __syncthreads(); flag_shr[0] = 0; __syncthreads(); sc->cv_next_h = sc->cv_h; int ewtsetOK = 0; if (sc->cv_nst > 0) { - //print_double(md->dtempv,86,"dtempvcv_efun0"); ewtsetOK = cudaDevicecvEwtSetSV(md, sc, md->dewt); - //print_double(md->dtempv,86,"dtempvcv_efun1"); if (ewtsetOK != 0) { sc->cv_tretlast = sc->tret = sc->cv_tn; md->yout[i] = md->dzn[i]; @@ -1895,8 +1581,6 @@ int cudaDeviceCVode(ModelDataGPU *md, ModelDataVariable *sc) { md->yout[i] = md->dzn[i]; sc->cv_tolsf *= 2.; if(i==0) printf("ERROR: cv_tolsf\n"); - __syncthreads(); - if(i==0) printf("ERROR: cv_tolsf\n"); return CV_TOO_MUCH_ACC; } else { sc->cv_tolsf = 1.; @@ -1909,9 +1593,7 @@ int cudaDeviceCVode(ModelDataGPU *md, ModelDataVariable *sc) { if(i==0)printf("WARNING: h below roundoff level in tn"); } #endif - print_double(md->dzn,86,"dzn1858"); kflag2 = cudaDevicecvStep(md, sc); - __syncthreads(); if (kflag2 != CV_SUCCESS) { sc->cv_tretlast = sc->tret = sc->cv_tn; md->yout[i] = md->dzn[i]; @@ -1931,7 +1613,6 @@ int cudaDeviceCVode(ModelDataGPU *md, ModelDataVariable *sc) { sc->cv_tretlast = sc->tret = md->cv_tstop; md->cv_tstopset = SUNFALSE; if(i==0) printf("ERROR: cv_tstopset\n"); - __syncthreads(); return CV_TSTOP_RETURN; } if ((sc->cv_tn + sc->cv_hprime - md->cv_tstop) * sc->cv_h > 0.) { @@ -1948,28 +1629,20 @@ void cudaGlobalCVode(ModelDataGPU md_object) { ModelDataGPU *md = &md_object; extern __shared__ int flag_shr[]; int i = blockIdx.x * blockDim.x + threadIdx.x; - //TODO CHECK IF USING SC AS LOCAL INSTEAD OF MD->SCELLS HAS BETTER MAPE AND FINE IN MONARCH - //IF WANT TO USE SC 1 PER BLOCK, THEN CHECK ALL SC->SOMETHING = SOMETHING AND BLOCKIDX.X CALLS AND ADD IF(THREADIDX.X==0)...SYNCTHREADS() TO AVOID OVERLAPPING - //ModelDataVariable *sc = &md->sCells[blockIdx.x]; ModelDataVariable sc_object = md->sCells[blockIdx.x]; ModelDataVariable *sc = &sc_object; - __syncthreads(); int istate; if(inrows){ #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS int clock_khz=md->clock_khz; clock_t start; start = clock(); - __syncthreads(); #endif istate=cudaDeviceCVode(md,sc); - __syncthreads(); #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS if(threadIdx.x==0) sc->dtcudaDeviceCVode += ((double)(int)(clock() - start))/(clock_khz*1000); - __syncthreads(); #endif } - __syncthreads(); if(threadIdx.x==0) md->flagCells[blockIdx.x]=istate; #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS ModelDataVariable *mdvo = md->mdvo; diff --git a/src/cuda/cvode_gpu.cu b/src/cuda/cvode_gpu.cu index 53b683352..071b47c08 100644 --- a/src/cuda/cvode_gpu.cu +++ b/src/cuda/cvode_gpu.cu @@ -12,13 +12,6 @@ extern "C" { #include #endif -void print_double_cv_gpu(double *x, int len, const char *s){ -#ifdef USE_PRINT_ARRAYS - for (int i=0; isCells[i], &mCPU->mdvCPU, sizeof(ModelDataVariable), cudaMemcpyHostToDevice, stream); } - //double *zn0 = NV_DATA_S(cv_mem->cv_zn[0]); - //print_double_cv_gpu(zn0,86,"dzn807"); - //double *zn1 = NV_DATA_S(cv_mem->cv_zn[1]); - //print_double_cv_gpu(zn1,86,"dzn825"); cvodeRun(mGPU,stream); cudaMemcpyAsync(cv_acor_init, mGPU->cv_acor_init, mGPU->nrows * sizeof(double), cudaMemcpyDeviceToHost, stream); cudaMemcpyAsync(youtArray, mGPU->yout, mGPU->nrows * sizeof(double), cudaMemcpyDeviceToHost, stream); @@ -639,7 +628,6 @@ int cudaCVode(void *cvode_mem, realtype tout, N_Vector yout, cv_mem->timecvStep+= mscvStep/1000; #ifdef CAMP_PROFILE_DEVICE_FUNCTIONS cudaMemcpy(&mCPU->mdvCPU, mGPU->mdvo, sizeof(ModelDataVariable), cudaMemcpyDeviceToHost); - //printf("mCPU->mdvCPU.dtcudaDeviceCVode %lf\n",mCPU->mdvCPU.dtcudaDeviceCVode); #endif #endif istate = CV_SUCCESS; @@ -649,8 +637,9 @@ int cudaCVode(void *cvode_mem, realtype tout, N_Vector yout, int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf("cudaCVode2 kflag %d cell %d rank %d\n",istate,i,rank); + printf("Exiting...\n"); + MPI_Abort(MPI_COMM_WORLD, 1); istate = cvHandleFailure_gpu(cv_mem, istate); - //Optional: call EXPORT_NETCDF after this fail } } return(istate); diff --git a/src/cuda/cvode_init.cu b/src/cuda/cvode_init.cu index 8b5394e90..16c996f88 100644 --- a/src/cuda/cvode_init.cu +++ b/src/cuda/cvode_init.cu @@ -7,6 +7,7 @@ extern "C" { #include "cvode_gpu.h" } +#include #ifdef CAMP_USE_MPI #include #endif @@ -34,39 +35,20 @@ void constructor_cvode_gpu(SolverData *sd){ mCPU->env_size = CAMP_NUM_ENV_PARAM_ * n_cells * sizeof(double); //Temp and pressure size_t rxn_env_data_idx_size = (n_rxn+1) * sizeof(int); size_t map_state_deriv_size = n_dep_var * n_cells * sizeof(int); - int coresPerNode = 40; - int size; - MPI_Comm_size(MPI_COMM_WORLD, &size); - if (size > 40 && size % coresPerNode != 0) { - printf("ERROR: MORE THAN 40 MPI PROCESSES AND NOT MULTIPLE OF 40, WHEN CTE-POWER ONLY HAS 40 CORES PER NODE\n"); - exit(0); - } - int nGPUsMax=4; + int nGPUsMax; cudaGetDeviceCount(&nGPUsMax); - if (sd->nGPUs > nGPUsMax) { - printf("ERROR: Not enough GPUs to launch, nGPUs %d nGPUsMax %d\n", sd->nGPUs, nGPUsMax); - exit(0); - } - if (size > sd->nGPUs*(coresPerNode/nGPUsMax)){ - printf("ERROR: size,sd->nGPUs,coresPerNode,nGPUsMax %d %d %d %d " - "MORE MPI PROCESSES THAN DEVICES (FOLLOW PROPORTION, " - "FOR CTE-POWER IS 10 PROCESSES FOR EACH GPU)\n",size,sd->nGPUs,coresPerNode,nGPUsMax); - exit(0); - } - int rank; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - cudaSetDevice(0); - for (int i = 0; i < coresPerNode; i++) { - if (rank < coresPerNode / nGPUsMax * (i + 1) && rank >= coresPerNode / nGPUsMax * i && inGPUs) { - cudaSetDevice(i); - mCPU->threads = 1024; - mCPU->blocks = (n_dep_var*n_cells + mCPU->threads - 1) / mCPU->threads; - } - } + int rankNode, sizeNode; + MPI_Comm commNode; + MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, 0, + MPI_INFO_NULL, &commNode); + MPI_Comm_rank(commNode, &rankNode); + MPI_Comm_size(commNode, &sizeNode); + int MPIsPerGPU = sizeNode / nGPUsMax; + cudaSetDevice(rankNode / MPIsPerGPU); mGPU->n_rxn=md->n_rxn; mGPU->n_rxn_env_data=md->n_rxn_env_data; - cudaMalloc((void **) &mGPU->state, state_size); - cudaMalloc((void **) &mGPU->env, mCPU->env_size); + HANDLE_ERROR(cudaMalloc((void **) &mGPU->state, state_size)); + HANDLE_ERROR(cudaMalloc((void **) &mGPU->env, mCPU->env_size)); cudaMalloc((void **) &mGPU->rxn_env_data, md->n_rxn_env_data * n_cells * sizeof(double)); cudaMalloc((void **) &mGPU->rxn_env_data_idx, rxn_env_data_idx_size); cudaMalloc((void **) &mGPU->map_state_deriv, map_state_deriv_size); @@ -116,9 +98,9 @@ void constructor_cvode_gpu(SolverData *sd){ Jacobian *jac = &sd->jac; JacobianGPU *jacgpu = &(mGPU->jac); cudaMalloc((void **) &jacgpu->num_elem, 1 * sizeof(jacgpu->num_elem)); - cudaMemcpy(jacgpu->num_elem, &jac->num_elem, 1 * sizeof(jacgpu->num_elem), cudaMemcpyHostToDevice); + HANDLE_ERROR(cudaMemcpy(jacgpu->num_elem, &jac->num_elem, 1 * sizeof(jacgpu->num_elem), cudaMemcpyHostToDevice)); int num_elem = jac->num_elem * n_cells; - cudaMalloc((void **) &(jacgpu->production_partials), num_elem * sizeof(double)); + HANDLE_ERROR(cudaMalloc((void **) &(jacgpu->production_partials), num_elem * sizeof(double))); HANDLE_ERROR(cudaMalloc((void **) &(jacgpu->loss_partials), num_elem * sizeof(double))); double *aux=(double*)malloc(sizeof(double)*num_elem); for (int i = 0; i < num_elem; i++) { diff --git a/src/debug_and_stats/camp_debug_2.h b/src/debug_and_stats/camp_debug_2.h deleted file mode 100644 index acb947372..000000000 --- a/src/debug_and_stats/camp_debug_2.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * ----------------------------------------------------------------- - * Programmer(s): Christian G. Ruiz and Mario Acosta - * ----------------------------------------------------------------- - * Copyright (C) 2022 Barcelona Supercomputing Center - * SPDX-License-Identifier: MIT - */ - -#ifndef CAMP_DEBUG_2_H -#define CAMP_DEBUG_2_H - -#include "../camp_common.h" - -void init_export_state(); -void export_state(SolverData *sd); -void join_export_state(); -void init_export_stats(); -void export_stats(SolverData *sd); -void print_double(double *x, int len, const char *s); -void print_int(int *x, int len, const char *s); - -#endif // CAMP_DEBUG_2_H diff --git a/src/rxn_solver.h b/src/rxn_solver.h index 311818d46..0ab48281e 100644 --- a/src/rxn_solver.h +++ b/src/rxn_solver.h @@ -12,7 +12,6 @@ #define RXN_SOLVER_H #include "Jacobian.h" #include "camp_common.h" -#include "debug_and_stats/camp_debug_2.h" /** Public reaction functions **/ diff --git a/src/rxns.h b/src/rxns.h index c1af29d3f..69ada0cbb 100644 --- a/src/rxns.h +++ b/src/rxns.h @@ -15,7 +15,6 @@ #define RXNS_H_ #include "Jacobian.h" #include "camp_common.h" -#include "debug_and_stats/camp_debug_2.h" // aqueous_equilibrium void rxn_aqueous_equilibrium_get_used_jac_elem(int *rxn_int_data, diff --git a/src/rxns/rxn_CMAQ_H2O2.c b/src/rxns/rxn_CMAQ_H2O2.c index e939ee9cb..0c8a23275 100644 --- a/src/rxns/rxn_CMAQ_H2O2.c +++ b/src/rxns/rxn_CMAQ_H2O2.c @@ -146,7 +146,7 @@ void rxn_CMAQ_H2O2_calc_deriv_contrib(ModelData *model_data, double *env_data = model_data->grid_cell_env; // Calculate the reaction rate - long double rate = RATE_CONSTANT_; + double rate = RATE_CONSTANT_; for (int i_spec = 0; i_spec < NUM_REACT_; i_spec++) rate *= state[REACT_(i_spec)]; diff --git a/src/rxns/rxn_CMAQ_OH_HNO3.c b/src/rxns/rxn_CMAQ_OH_HNO3.c index 7d3e0f051..1292c517c 100644 --- a/src/rxns/rxn_CMAQ_OH_HNO3.c +++ b/src/rxns/rxn_CMAQ_OH_HNO3.c @@ -153,7 +153,7 @@ void rxn_CMAQ_OH_HNO3_calc_deriv_contrib( double *env_data = model_data->grid_cell_env; // Calculate the reaction rate - long double rate = RATE_CONSTANT_; + double rate = RATE_CONSTANT_; for (int i_spec = 0; i_spec < NUM_REACT_; i_spec++) rate *= state[REACT_(i_spec)]; diff --git a/src/rxns/rxn_HL_phase_transfer.c b/src/rxns/rxn_HL_phase_transfer.c index 29efbb4df..ddc60dd02 100644 --- a/src/rxns/rxn_HL_phase_transfer.c +++ b/src/rxns/rxn_HL_phase_transfer.c @@ -303,18 +303,18 @@ void rxn_HL_phase_transfer_calc_deriv_contrib( // this was replaced with transition-regime rate equation #if 0 - long double cond_rate = - ((long double)1.0) / (radius * radius / (3.0 * DIFF_COEFF_) + + double cond_rate = + ((double)1.0) / (radius * radius / (3.0 * DIFF_COEFF_) + 4.0 * radius / (3.0 * MFP_M_)); #endif // Calculate the rate constant for diffusion limited mass transfer to the // aerosol phase (1/s) - long double cond_rate = + double cond_rate = gas_aerosol_transition_rxn_rate_constant(DIFF_COEFF_, MFP_M_, radius, ALPHA_); // Calculate the evaporation rate constant (1/s) - long double evap_rate = cond_rate / (EQUIL_CONST_); + double evap_rate = cond_rate / (EQUIL_CONST_); // Calculate the evaporation and condensation rates (ppm/s) cond_rate *= state[GAS_SPEC_]; @@ -397,17 +397,17 @@ void rxn_HL_phase_transfer_calc_jac_contrib(ModelData *model_data, Jacobian jac, // this was replaced with transition-regime rate equation #if 0 - long double cond_rate = 1.0 / (radius * radius / (3.0 * DIFF_COEFF_) + + double cond_rate = 1.0 / (radius * radius / (3.0 * DIFF_COEFF_) + 4.0 * radius / (3.0 * MFP_M_)); #endif // Calculate the rate constant for diffusion limited mass transfer to the // aerosol phase (1/s) - long double cond_rate = + double cond_rate = gas_aerosol_transition_rxn_rate_constant(DIFF_COEFF_, MFP_M_, radius, ALPHA_); // Calculate the evaporation rate constant (1/s) - long double evap_rate = cond_rate / (EQUIL_CONST_); + double evap_rate = cond_rate / (EQUIL_CONST_); // Change in the gas-phase is evaporation - condensation (ppm/s) if (JAC_ID_(0) >= 0) @@ -447,14 +447,14 @@ void rxn_HL_phase_transfer_calc_jac_contrib(ModelData *model_data, Jacobian jac, // Calculate d_rate/d_effecive_radius and d_rate/d_number_concentration // ( This was replaced with transition-regime rate equation. ) #if 0 - long double d_rate_d_radius = + double d_rate_d_radius = -rate * cond_rate * (2.0 * radius / (3.0 * DIFF_COEFF_) + 4.0 / (3.0 * MFP_M_)); #endif - long double d_cond_d_radius = + double d_cond_d_radius = d_gas_aerosol_transition_rxn_rate_constant_d_radius( DIFF_COEFF_, MFP_M_, radius, ALPHA_) * state[GAS_SPEC_]; - long double d_evap_d_radius = d_cond_d_radius / state[GAS_SPEC_] / + double d_evap_d_radius = d_cond_d_radius / state[GAS_SPEC_] / (EQUIL_CONST_)*state[AERO_SPEC_(i_phase)] / state[AERO_WATER_(i_phase)]; diff --git a/src/rxns/rxn_SIMPOL_phase_transfer.c b/src/rxns/rxn_SIMPOL_phase_transfer.c index 627fff458..2b3f14058 100644 --- a/src/rxns/rxn_SIMPOL_phase_transfer.c +++ b/src/rxns/rxn_SIMPOL_phase_transfer.c @@ -332,22 +332,22 @@ void rxn_SIMPOL_phase_transfer_calc_deriv_contrib( // This was replaced with the transition-regime condensation rate // equations #if 0 - long double cond_rate = - ((long double)1.0) / (radius * radius / (3.0 * DIFF_COEFF_) + + double cond_rate = + ((double)1.0) / (radius * radius / (3.0 * DIFF_COEFF_) + 4.0 * radius / (3.0 * MFP_M_)); #endif // Calculate the rate constant for diffusion limited mass transfer to the // aerosol phase (m3/#/s) - long double cond_rate = + double cond_rate = gas_aerosol_transition_rxn_rate_constant(DIFF_COEFF_, MFP_M_, radius, ALPHA_); // Calculate the evaporation rate constant (ppm_x*m^3/kg_x/s) - long double evap_rate = + double evap_rate = cond_rate * (EQUIL_CONST_ * aero_phase_avg_MW / aero_phase_mass); // Get the activity coefficient (if one exists) - long double act_coeff = 1.0; + double act_coeff = 1.0; if (AERO_ACT_ID_(i_phase) > -1) { act_coeff = state[AERO_ACT_ID_(i_phase)]; } @@ -470,22 +470,22 @@ void rxn_SIMPOL_phase_transfer_calc_jac_contrib(ModelData *model_data, // This was replaced with the transition-regime condensation rate // equations #if 0 - long double cond_rate = - ((long double)1.0) / (radius * radius / (3.0 * DIFF_COEFF_) + + double cond_rate = + ((double)1.0) / (radius * radius / (3.0 * DIFF_COEFF_) + 4.0 * radius / (3.0 * MFP_M_)); #endif // Calculate the rate constant for diffusion limited mass transfer to the // aerosol phase (m3/#/s) - long double cond_rate = + double cond_rate = gas_aerosol_transition_rxn_rate_constant(DIFF_COEFF_, MFP_M_, radius, ALPHA_); // Calculate the evaporation rate constant (ppm_x*m^3/kg_x/s) - long double evap_rate = + double evap_rate = cond_rate * (EQUIL_CONST_ * aero_phase_avg_MW / aero_phase_mass); // Get the activity coefficient (if one exists) - long double act_coeff = 1.0; + double act_coeff = 1.0; if (AERO_ACT_ID_(i_phase) > -1) { act_coeff = state[AERO_ACT_ID_(i_phase)]; } diff --git a/src/rxns/rxn_aqueous_equilibrium.c b/src/rxns/rxn_aqueous_equilibrium.c index 044fd5f82..7e8697c86 100644 --- a/src/rxns/rxn_aqueous_equilibrium.c +++ b/src/rxns/rxn_aqueous_equilibrium.c @@ -275,25 +275,25 @@ void rxn_aqueous_equilibrium_update_env_state(ModelData *model_data, * \param rate_reverse [output] calculated reverse rate * \return reaction rate per mixing ratio of water [M_X/s*kg_H2O/m^3] */ -long double calc_standard_rate(int *rxn_int_data, double *rxn_float_data, +double calc_standard_rate(int *rxn_int_data, double *rxn_float_data, double *rxn_env_data, bool is_water_partial, - long double *rate_forward, - long double *rate_reverse) { + double *rate_forward, + double *rate_reverse) { int *int_data = rxn_int_data; double *float_data = rxn_float_data; - long double react_fact, prod_fact; - long double water = WATER_CONC_; + double react_fact, prod_fact; + double water = WATER_CONC_; // Get the product of all reactants - react_fact = (long double)REACT_CONC_(0) * MASS_FRAC_TO_M_(0); + react_fact = (double)REACT_CONC_(0) * MASS_FRAC_TO_M_(0); for (int i_react = 1; i_react < NUM_REACT_; i_react++) { react_fact *= REACT_CONC_(i_react) * MASS_FRAC_TO_M_(i_react) / water; } // Get the product of all product - prod_fact = (long double)PROD_CONC_(0) * MASS_FRAC_TO_M_(NUM_REACT_); - prod_fact *= (long double)ACTIVITY_COEFF_VALUE_; + prod_fact = (double)PROD_CONC_(0) * MASS_FRAC_TO_M_(NUM_REACT_); + prod_fact *= (double)ACTIVITY_COEFF_VALUE_; for (int i_prod = 1; i_prod < NUM_PROD_; i_prod++) { prod_fact *= PROD_CONC_(i_prod) * MASS_FRAC_TO_M_(NUM_REACT_ + i_prod) / water; @@ -331,7 +331,7 @@ void rxn_aqueous_equilibrium_calc_deriv_contrib( // Calculate derivative contributions for each aerosol phase for (int i_phase = 0, i_deriv = 0; i_phase < NUM_AERO_PHASE_; i_phase++) { // If no aerosol water is present, no reaction occurs - long double water = state[WATER_(i_phase)]; + double water = state[WATER_(i_phase)]; if (water < MIN_WATER_ * SMALL_WATER_CONC_(i_phase)) { i_deriv += NUM_REACT_ + NUM_PROD_; continue; @@ -350,8 +350,8 @@ void rxn_aqueous_equilibrium_calc_deriv_contrib( } // Get the rate using the standard calculation - long double rate_forward, rate_reverse; - long double rate = + double rate_forward, rate_reverse; + double rate = calc_standard_rate(rxn_int_data, rxn_float_data, rxn_env_data, false, &rate_forward, &rate_reverse); if (rate == ZERO) { @@ -413,21 +413,21 @@ void rxn_aqueous_equilibrium_calc_jac_contrib(ModelData *model_data, // Calculate Jacobian contributions for each aerosol phase for (int i_phase = 0, i_jac = 0; i_phase < NUM_AERO_PHASE_; i_phase++) { // If not aerosol water is present, no reaction occurs - long double water = state[WATER_(i_phase)]; + double water = state[WATER_(i_phase)]; if (water < MIN_WATER_ * SMALL_WATER_CONC_(i_phase)) { i_jac += (NUM_REACT_ + NUM_PROD_) * (NUM_REACT_ + NUM_PROD_ + 2); continue; } // Calculate the forward rate (M/s) - long double forward_rate = RATE_CONST_FORWARD_; + double forward_rate = RATE_CONST_FORWARD_; for (int i_react = 0; i_react < NUM_REACT_; i_react++) { forward_rate *= state[REACT_(i_phase * NUM_REACT_ + i_react)] * MASS_FRAC_TO_M_(i_react) / water; } // Calculate the reverse rate (M/s) - long double reverse_rate = RATE_CONST_REVERSE_; + double reverse_rate = RATE_CONST_REVERSE_; for (int i_prod = 0; i_prod < NUM_PROD_; i_prod++) { reverse_rate *= state[PROD_(i_phase * NUM_PROD_ + i_prod)] * MASS_FRAC_TO_M_(NUM_REACT_ + i_prod) / water; diff --git a/src/rxns/rxn_arrhenius.c b/src/rxns/rxn_arrhenius.c index 79bbe3905..03dda4f64 100644 --- a/src/rxns/rxn_arrhenius.c +++ b/src/rxns/rxn_arrhenius.c @@ -138,7 +138,7 @@ void rxn_arrhenius_calc_deriv_contrib(ModelData *model_data, double *env_data = model_data->grid_cell_env; // Calculate the reaction rate - long double rate = RATE_CONSTANT_; + double rate = RATE_CONSTANT_; for (int i_spec = 0; i_spec < NUM_REACT_; i_spec++) rate *= state[REACT_(i_spec)]; @@ -186,7 +186,7 @@ void rxn_arrhenius_calc_jac_contrib(ModelData *model_data, Jacobian jac, int i_elem = 0; for (int i_ind = 0; i_ind < NUM_REACT_; i_ind++) { // Calculate d_rate / d_i_ind - long double rate = RATE_CONSTANT_; + double rate = RATE_CONSTANT_; for (int i_spec = 0; i_spec < NUM_REACT_; i_spec++) if (i_spec != i_ind) rate *= state[REACT_(i_spec)]; diff --git a/src/rxns/rxn_condensed_phase_arrhenius.c b/src/rxns/rxn_condensed_phase_arrhenius.c index d64dfb757..620a5343e 100644 --- a/src/rxns/rxn_condensed_phase_arrhenius.c +++ b/src/rxns/rxn_condensed_phase_arrhenius.c @@ -192,7 +192,7 @@ void rxn_condensed_phase_arrhenius_calc_deriv_contrib( // Calculate derivative contributions for each aerosol phase for (int i_phase = 0, i_deriv = 0; i_phase < NUM_AERO_PHASE_; i_phase++) { // If this is an aqueous reaction, get the unit conversion from mol/m3 -> M - long double unit_conv = 1.0; + double unit_conv = 1.0; if (WATER_(i_phase) >= 0) { unit_conv = state[WATER_(i_phase)]; // convert from kg/m3->L/m3 @@ -206,7 +206,7 @@ void rxn_condensed_phase_arrhenius_calc_deriv_contrib( } // Calculate the reaction rate rate (M/s or mol/m3/s) - long double rate = RATE_CONSTANT_; + double rate = RATE_CONSTANT_; for (int i_react = 0; i_react < NUM_REACT_; i_react++) { rate *= state[REACT_(i_phase * NUM_REACT_ + i_react)] * KGM3_TO_MOLM3_(i_react) * unit_conv; diff --git a/src/rxns/rxn_condensed_phase_photolysis.c b/src/rxns/rxn_condensed_phase_photolysis.c index 425b69303..1073c6de5 100644 --- a/src/rxns/rxn_condensed_phase_photolysis.c +++ b/src/rxns/rxn_condensed_phase_photolysis.c @@ -211,7 +211,7 @@ void rxn_condensed_phase_photolysis_calc_deriv_contrib( // Calculate derivative contributions for each aerosol phase for (int i_phase = 0, i_deriv = 0; i_phase < NUM_AERO_PHASE_; i_phase++) { // If this is an aqueous reaction, get the unit conversion from mol/m3 -> M - long double unit_conv = 1.0; + double unit_conv = 1.0; if (WATER_(i_phase) >= 0) { unit_conv = state[WATER_(i_phase)]; // convert from kg/m3->L/m3 @@ -225,7 +225,7 @@ void rxn_condensed_phase_photolysis_calc_deriv_contrib( } // Calculate the reaction rate rate (M/s or mol/m3/s) - long double rate = RATE_CONSTANT_; + double rate = RATE_CONSTANT_; for (int i_react = 0; i_react < NUM_REACT_; i_react++) { rate *= state[REACT_(i_phase * NUM_REACT_ + i_react)] * KGM3_TO_MOLM3_(i_react) * unit_conv; diff --git a/src/rxns/rxn_emission.c b/src/rxns/rxn_emission.c index 5b710c7fc..5d03c9ff8 100644 --- a/src/rxns/rxn_emission.c +++ b/src/rxns/rxn_emission.c @@ -141,7 +141,7 @@ void rxn_emission_calc_deriv_contrib(ModelData *model_data, // Add contributions to the time derivative if (DERIV_ID_ >= 0) - time_derivative_add_value(time_deriv, DERIV_ID_, (long double)RATE_); + time_derivative_add_value(time_deriv, DERIV_ID_, (double)RATE_); return; } diff --git a/src/rxns/rxn_first_order_loss.c b/src/rxns/rxn_first_order_loss.c index b73839865..af7d9404c 100644 --- a/src/rxns/rxn_first_order_loss.c +++ b/src/rxns/rxn_first_order_loss.c @@ -149,7 +149,7 @@ void rxn_first_order_loss_calc_deriv_contrib( double *env_data = model_data->grid_cell_env; // Calculate the reaction rate - long double rate = RATE_CONSTANT_ * state[REACT_]; + double rate = RATE_CONSTANT_ * state[REACT_]; // Add contributions to the time derivative if (DERIV_ID_ >= 0) time_derivative_add_value(time_deriv, DERIV_ID_, -rate); diff --git a/src/rxns/rxn_photolysis.c b/src/rxns/rxn_photolysis.c index 6f468d307..00ebd5728 100644 --- a/src/rxns/rxn_photolysis.c +++ b/src/rxns/rxn_photolysis.c @@ -167,7 +167,7 @@ void rxn_photolysis_calc_deriv_contrib( double *env_data = model_data->grid_cell_env; // Calculate the reaction rate - long double rate = RATE_CONSTANT_; + double rate = RATE_CONSTANT_; for (int i_spec = 0; i_spec < NUM_REACT_; i_spec++) rate *= state[REACT_(i_spec)]; diff --git a/src/rxns/rxn_ternary_chemical_activation.c b/src/rxns/rxn_ternary_chemical_activation.c index b00ff5d24..ff091f315 100644 --- a/src/rxns/rxn_ternary_chemical_activation.c +++ b/src/rxns/rxn_ternary_chemical_activation.c @@ -154,7 +154,7 @@ void rxn_ternary_chemical_activation_calc_deriv_contrib( double *env_data = model_data->grid_cell_env; // Calculate the reaction rate - long double rate = RATE_CONSTANT_; + double rate = RATE_CONSTANT_; for (int i_spec = 0; i_spec < NUM_REACT_; i_spec++) rate *= state[REACT_(i_spec)]; diff --git a/src/rxns/rxn_troe.c b/src/rxns/rxn_troe.c index 09e1cf397..35edbb2a0 100644 --- a/src/rxns/rxn_troe.c +++ b/src/rxns/rxn_troe.c @@ -150,7 +150,7 @@ void rxn_troe_calc_deriv_contrib(ModelData *model_data, double *env_data = model_data->grid_cell_env; // Calculate the reaction rate - long double rate = RATE_CONSTANT_; + double rate = RATE_CONSTANT_; for (int i_spec = 0; i_spec < NUM_REACT_; i_spec++) rate *= state[REACT_(i_spec)]; diff --git a/src/rxns/rxn_wennberg_no_ro2.c b/src/rxns/rxn_wennberg_no_ro2.c index d996c7acf..56dcb4898 100644 --- a/src/rxns/rxn_wennberg_no_ro2.c +++ b/src/rxns/rxn_wennberg_no_ro2.c @@ -167,9 +167,9 @@ void rxn_wennberg_no_ro2_calc_deriv_contrib( double *env_data = model_data->grid_cell_env; // Calculate the reaction rate - long double rate = 1.0; - long double k_a = ALKOXY_RATE_CONSTANT_; - long double k_n = NITRATE_RATE_CONSTANT_; + double rate = 1.0; + double k_a = ALKOXY_RATE_CONSTANT_; + double k_n = NITRATE_RATE_CONSTANT_; for (int i_spec = 0; i_spec < NUM_REACT_; i_spec++) rate *= state[REACT_(i_spec)]; diff --git a/src/rxns/rxn_wennberg_tunneling.c b/src/rxns/rxn_wennberg_tunneling.c index 2816ec85e..6cd37a29a 100644 --- a/src/rxns/rxn_wennberg_tunneling.c +++ b/src/rxns/rxn_wennberg_tunneling.c @@ -137,7 +137,7 @@ void rxn_wennberg_tunneling_calc_deriv_contrib( double *env_data = model_data->grid_cell_env; // Calculate the reaction rate - long double rate = RATE_CONSTANT_; + double rate = RATE_CONSTANT_; for (int i_spec = 0; i_spec < NUM_REACT_; i_spec++) rate *= state[REACT_(i_spec)]; diff --git a/src/rxns/rxn_wet_deposition.c b/src/rxns/rxn_wet_deposition.c index 55db42142..58bde7c45 100644 --- a/src/rxns/rxn_wet_deposition.c +++ b/src/rxns/rxn_wet_deposition.c @@ -157,7 +157,7 @@ void rxn_wet_deposition_calc_deriv_contrib( // Add contributions to the time derivative for (int i_spec = 0; i_spec < NUM_SPEC_; i_spec++) { if (DERIV_ID_(i_spec) >= 0) { - long double rate = RATE_CONSTANT_ * state[REACT_(i_spec)]; + double rate = RATE_CONSTANT_ * state[REACT_(i_spec)]; time_derivative_add_value(time_deriv, DERIV_ID_(i_spec), -rate); } } diff --git a/src/solver_stats.F90 b/src/solver_stats.F90 index d1248f7ce..1fa083849 100644 --- a/src/solver_stats.F90 +++ b/src/solver_stats.F90 @@ -49,14 +49,6 @@ module camp_solver_stats real(kind=dp) :: next_time_step__s !> Jacobian evaluation failures integer(kind=i_kind) :: Jac_eval_fails - !> Total calls to `f()` - integer(kind=i_kind) :: RHS_evals_total - !> Total calls to `Jac()` - integer(kind=i_kind) :: Jac_evals_total - !> Compute time for calls to `f()` [s] - real(kind=dp) :: RHS_time__s - !> Compute time for calls to `Jac()` [s] - real(kind=dp) :: Jac_time__s !> Maximum loss of precision on last deriv call real(kind=dp) :: max_loss_precision #ifdef CAMP_DEBUG diff --git a/src/sub_models/sub_model_PDFiTE.c b/src/sub_models/sub_model_PDFiTE.c index cdbec019f..0a9ffc16b 100644 --- a/src/sub_models/sub_model_PDFiTE.c +++ b/src/sub_models/sub_model_PDFiTE.c @@ -173,7 +173,7 @@ void sub_model_PDFiTE_calculate(int *sub_model_int_data, double *float_data = sub_model_float_data; // Calculate the water activity---i.e., relative humidity (0-1) - long double a_w = PPM_TO_RH_ * state[GAS_WATER_ID_]; + double a_w = PPM_TO_RH_ * state[GAS_WATER_ID_]; // Keep a_w within 0-1 // TODO Filter =( try to remove @@ -205,16 +205,16 @@ void sub_model_PDFiTE_calculate(int *sub_model_int_data, // across all other ion pairs (not i_ion_pair) // where v_x is the stoichiometric coefficient for species x in // the other ion_pair and N_x is its concentration. - long double omega = 0.0; + double omega = 0.0; for (int j_ion_pair = 0; j_ion_pair < NUM_ION_PAIRS_; ++j_ion_pair) { if (i_ion_pair == j_ion_pair) continue; - omega += (long double)2.0 * + omega += (double)2.0 * (NUM_CATION_(j_ion_pair) + NUM_ANION_(j_ion_pair)) * CATION_N_(j_ion_pair) * ANION_N_(j_ion_pair); } // Initialize ln(gamma) - long double ln_gamma = 0.0; + double ln_gamma = 0.0; // Add contributions from each interacting ion_pair for (int i_inter = 0; i_inter < NUM_INTER_(i_ion_pair); i_inter++) { @@ -230,7 +230,7 @@ void sub_model_PDFiTE_calculate(int *sub_model_int_data, int j_ion_pair = INTER_SPEC_ID_(i_ion_pair, i_inter); // Calculate ln_gamma_inter - long double ln_gamma_inter = 0.0; + double ln_gamma_inter = 0.0; for (int i_B = 0; i_B < NUM_B_(i_ion_pair, i_inter); i_B++) { ln_gamma_inter += B_Z_(i_ion_pair, i_inter, i_B) * pow(a_w, i_B); } @@ -317,16 +317,16 @@ void sub_model_PDFiTE_get_jac_contrib(int *sub_model_int_data, // across all other ion pairs (not i_ion_pair) // where v_x is the stoichiometric coefficient for species x in // the other ion_pair and N_x is its concentration. - long double omega = 0.0; + double omega = 0.0; for (int j_ion_pair = 0; j_ion_pair < NUM_ION_PAIRS_; ++j_ion_pair) { if (i_ion_pair == j_ion_pair) continue; - omega += (long double)2.0 * + omega += (double)2.0 * (NUM_CATION_(j_ion_pair) + NUM_ANION_(j_ion_pair)) * CATION_N_(j_ion_pair) * ANION_N_(j_ion_pair); } // Initialize ln(gamma) - long double ln_gamma = 0.0; + double ln_gamma = 0.0; // Add contributions from each interacting ion_pair for (int i_inter = 0; i_inter < NUM_INTER_(i_ion_pair); i_inter++) { @@ -342,7 +342,7 @@ void sub_model_PDFiTE_get_jac_contrib(int *sub_model_int_data, int j_ion_pair = INTER_SPEC_ID_(i_ion_pair, i_inter); // Calculate ln_gamma_inter - long double ln_gamma_inter = 0.0; + double ln_gamma_inter = 0.0; for (int i_B = 0; i_B < NUM_B_(i_ion_pair, i_inter); i_B++) { ln_gamma_inter += B_Z_(i_ion_pair, i_inter, i_B) * pow(a_w, i_B); } @@ -367,7 +367,7 @@ void sub_model_PDFiTE_get_jac_contrib(int *sub_model_int_data, } // Loop on interacting ion_pairs - long double gamma_i = exp(ln_gamma); + double gamma_i = exp(ln_gamma); // Loop through the ion pairs to set the partial derivatives for (int i_inter = 0; i_inter < NUM_INTER_(i_ion_pair); i_inter++) { @@ -383,8 +383,8 @@ void sub_model_PDFiTE_get_jac_contrib(int *sub_model_int_data, int j_ion_pair = INTER_SPEC_ID_(i_ion_pair, i_inter); // Calculate ln_gamma_inter and dln_gamma_inter_d_water - long double ln_gamma_inter = B_Z_(i_ion_pair, i_inter, 0); - long double d_ln_gamma_inter_d_water = 0.0; + double ln_gamma_inter = B_Z_(i_ion_pair, i_inter, 0); + double d_ln_gamma_inter_d_water = 0.0; for (int i_B = 1; i_B < NUM_B_(i_ion_pair, i_inter); i_B++) { ln_gamma_inter += B_Z_(i_ion_pair, i_inter, i_B) * pow(a_w, i_B); d_ln_gamma_inter_d_water += diff --git a/src/sub_models/sub_model_ZSR_aerosol_water.c b/src/sub_models/sub_model_ZSR_aerosol_water.c index fd79ff369..fe7bca6f5 100644 --- a/src/sub_models/sub_model_ZSR_aerosol_water.c +++ b/src/sub_models/sub_model_ZSR_aerosol_water.c @@ -222,7 +222,7 @@ void sub_model_ZSR_aerosol_water_calculate(int *sub_model_int_data, double *float_data = sub_model_float_data; // Calculate the water activity---i.e., relative humidity (0-1) - long double a_w = PPM_TO_RH_ * state[GAS_WATER_ID_]; + double a_w = PPM_TO_RH_ * state[GAS_WATER_ID_]; // Calculate the total aerosol water for each instance of the aerosol phase for (int i_phase = 0; i_phase < NUM_PHASE_; i_phase++) { @@ -231,7 +231,7 @@ void sub_model_ZSR_aerosol_water_calculate(int *sub_model_int_data, // Get the contribution from each ion pair for (int i_ion_pair = 0; i_ion_pair < NUM_ION_PAIR_; i_ion_pair++) { - long double molality, conc; + double molality, conc; // Determine which type of activity calculation should be used switch (TYPE_(i_ion_pair)) { @@ -239,7 +239,7 @@ void sub_model_ZSR_aerosol_water_calculate(int *sub_model_int_data, case ACT_TYPE_JACOBSON:; // Determine whether to use the minimum RH in the calculation - long double j_aw = + double j_aw = a_w > JACOB_low_RH_(i_ion_pair) ? a_w : JACOB_low_RH_(i_ion_pair); // Calculate the molality of the pure binary ion pair solution @@ -249,11 +249,11 @@ void sub_model_ZSR_aerosol_water_calculate(int *sub_model_int_data, molality *= molality; // (mol/kg) // Calculate the water associated with this ion pair - long double cation = + double cation = state[PHASE_ID_(i_phase) + JACOB_CATION_ID_(i_ion_pair)] / JACOB_NUM_CATION_(i_ion_pair) / JACOB_CATION_MW_(i_ion_pair) / 1000.0; // (umol/m3) - long double anion = + double anion = state[PHASE_ID_(i_phase) + JACOB_ANION_ID_(i_ion_pair)] / JACOB_NUM_ANION_(i_ion_pair) / JACOB_ANION_MW_(i_ion_pair) / 1000.0; // (umol/m3) @@ -265,8 +265,8 @@ void sub_model_ZSR_aerosol_water_calculate(int *sub_model_int_data, // (e^(alpha*cation) + e^(alpha*anion)) // where alpha is a constant smoothing factor // orig eq: conc = (cation > anion ? anion : cation); - long double e_ac = exp(ALPHA_ * cation); - long double e_aa = exp(ALPHA_ * anion); + double e_ac = exp(ALPHA_ * cation); + double e_aa = exp(ALPHA_ * anion); conc = (cation * e_ac + anion * e_aa) / (e_ac + e_aa); *water += conc / molality * 1000.0; // (ug/m3) @@ -277,7 +277,7 @@ void sub_model_ZSR_aerosol_water_calculate(int *sub_model_int_data, case ACT_TYPE_EQSAM:; // Keep the water activity within the range specified in EQSAM - long double e_aw = a_w > 0.99 ? 0.99 : a_w; + double e_aw = a_w > 0.99 ? 0.99 : a_w; e_aw = e_aw < 0.001 ? 0.001 : e_aw; // Calculate the molality of the ion pair @@ -323,15 +323,15 @@ void sub_model_ZSR_aerosol_water_get_jac_contrib(int *sub_model_int_data, double *env_data = model_data->grid_cell_env; // Calculate the water activity---i.e., relative humidity (0-1) - long double a_w = PPM_TO_RH_ * state[GAS_WATER_ID_]; - long double d_aw_d_wg = PPM_TO_RH_; + double a_w = PPM_TO_RH_ * state[GAS_WATER_ID_]; + double d_aw_d_wg = PPM_TO_RH_; // Calculate the total aerosol water for each instance of the aerosol phase for (int i_phase = 0; i_phase < NUM_PHASE_; i_phase++) { // Get the contribution from each ion pair for (int i_ion_pair = 0; i_ion_pair < NUM_ION_PAIR_; i_ion_pair++) { - long double molality, d_molal_d_wg; - long double conc; + double molality, d_molal_d_wg; + double conc; // Determine which type of activity calculation should be used switch (TYPE_(i_ion_pair)) { @@ -339,9 +339,9 @@ void sub_model_ZSR_aerosol_water_get_jac_contrib(int *sub_model_int_data, case ACT_TYPE_JACOBSON:; // Determine whether to use the minimum RH in the calculation - long double j_aw = + double j_aw = a_w > JACOB_low_RH_(i_ion_pair) ? a_w : JACOB_low_RH_(i_ion_pair); - long double d_jaw_d_wg = + double d_jaw_d_wg = a_w > JACOB_low_RH_(i_ion_pair) ? d_aw_d_wg : 0.0; // Calculate the molality of the pure binary ion pair solution @@ -355,30 +355,30 @@ void sub_model_ZSR_aerosol_water_get_jac_contrib(int *sub_model_int_data, d_molal_d_wg *= d_jaw_d_wg; // Calculate the water associated with this ion pair - long double cation = + double cation = state[PHASE_ID_(i_phase) + JACOB_CATION_ID_(i_ion_pair)] / JACOB_NUM_CATION_(i_ion_pair) / JACOB_CATION_MW_(i_ion_pair) / 1000.0; // (umol/m3) - long double d_cation_d_C = 1.0 / JACOB_NUM_CATION_(i_ion_pair) / + double d_cation_d_C = 1.0 / JACOB_NUM_CATION_(i_ion_pair) / JACOB_CATION_MW_(i_ion_pair) / 1000.0; - long double anion = + double anion = state[PHASE_ID_(i_phase) + JACOB_ANION_ID_(i_ion_pair)] / JACOB_NUM_ANION_(i_ion_pair) / JACOB_ANION_MW_(i_ion_pair) / 1000.0; // (umol/m3) - long double d_anion_d_A = 1.0 / JACOB_NUM_ANION_(i_ion_pair) / + double d_anion_d_A = 1.0 / JACOB_NUM_ANION_(i_ion_pair) / JACOB_ANION_MW_(i_ion_pair) / 1000.0; // Calculate the smooth-maximum ion pair concentration // (see calculate() function for details) - long double e_ac = exp(ALPHA_ * cation); - long double e_aa = exp(ALPHA_ * anion); + double e_ac = exp(ALPHA_ * cation); + double e_aa = exp(ALPHA_ * anion); conc = (cation * e_ac + anion * e_aa) / (e_ac + e_aa); - long double denom = (e_ac + e_aa) * (e_ac + e_aa); - long double d_conc_d_cation = + double denom = (e_ac + e_aa) * (e_ac + e_aa); + double d_conc_d_cation = (e_ac * e_ac + e_ac * e_aa * (1.0 - ALPHA_ * anion + ALPHA_ * cation)) / denom; - long double d_conc_d_anion = + double d_conc_d_anion = (e_aa * e_aa + e_ac * e_aa * (1.0 - ALPHA_ * cation + ALPHA_ * anion)) / denom; @@ -397,9 +397,9 @@ void sub_model_ZSR_aerosol_water_get_jac_contrib(int *sub_model_int_data, case ACT_TYPE_EQSAM:; // Keep the water activity within the range specified in EQSAM - long double e_aw = a_w > 0.99 ? 0.99 : a_w; + double e_aw = a_w > 0.99 ? 0.99 : a_w; e_aw = e_aw < 0.001 ? 0.001 : e_aw; - long double d_eaw_d_wg = a_w > 0.99 ? 0.0 : d_aw_d_wg; + double d_eaw_d_wg = a_w > 0.99 ? 0.0 : d_aw_d_wg; d_eaw_d_wg = a_w < 0.001 ? 0.0 : d_eaw_d_wg; // Calculate the molality of the ion pair @@ -418,7 +418,7 @@ void sub_model_ZSR_aerosol_water_get_jac_contrib(int *sub_model_int_data, for (int i_ion = 0; i_ion < EQSAM_NUM_ION_(i_ion_pair); i_ion++) { conc = state[PHASE_ID_(i_phase) + EQSAM_ION_ID_(i_ion_pair, i_ion)]; conc = (conc > 0.0 ? conc : 0.0); - long double d_conc_d_ion = (conc > 0.0 ? 1.0 : 0.0); + double d_conc_d_ion = (conc > 0.0 ? 1.0 : 0.0); // Gas-phase water contribution J[EQSAM_GAS_WATER_JAC_ID_(i_phase, i_ion_pair)] += diff --git a/src/time_derivative.c b/src/time_derivative.c index 34c7bb7a8..0dd822f39 100644 --- a/src/time_derivative.c +++ b/src/time_derivative.c @@ -17,11 +17,11 @@ int time_derivative_initialize(TimeDerivative *time_deriv, if (num_spec <= 0) return 0; time_deriv->production_rates = - (long double *)malloc(num_spec * sizeof(long double)); + (double *)malloc(num_spec * sizeof(double)); if (time_deriv->production_rates == NULL) return 0; time_deriv->loss_rates = - (long double *)malloc(num_spec * sizeof(long double)); + (double *)malloc(num_spec * sizeof(double)); if (time_deriv->loss_rates == NULL) { free(time_deriv->production_rates); return 0; @@ -45,8 +45,8 @@ void time_derivative_reset(TimeDerivative time_deriv) { void time_derivative_output(TimeDerivative time_deriv, double *dest_array, double *deriv_est, unsigned int output_precision) { - long double *r_p = time_deriv.production_rates; - long double *r_l = time_deriv.loss_rates; + double *r_p = time_deriv.production_rates; + double *r_l = time_deriv.loss_rates; #ifdef CAMP_DEBUG time_deriv.last_max_loss_precision = 1.0; @@ -56,7 +56,7 @@ void time_derivative_output(TimeDerivative time_deriv, double *dest_array, double prec_loss = 1.0; if (*r_p + *r_l != 0.0) { if (deriv_est) { - long double scale_fact; + double scale_fact; scale_fact = 1.0 / (*r_p + *r_l) / (1.0 / (*r_p + *r_l) + MAX_PRECISION_LOSS / fabsl(*r_p - *r_l)); @@ -88,7 +88,7 @@ void time_derivative_output(TimeDerivative time_deriv, double *dest_array, } void time_derivative_add_value(TimeDerivative time_deriv, unsigned int spec_id, - long double rate_contribution) { + double rate_contribution) { if (rate_contribution > 0.0) { time_deriv.production_rates[spec_id] += rate_contribution; } else { diff --git a/src/time_derivative.h b/src/time_derivative.h index 74052a290..c3d42fb5a 100644 --- a/src/time_derivative.h +++ b/src/time_derivative.h @@ -20,8 +20,8 @@ /* Time derivative for solver species */ typedef struct { unsigned int num_spec; // Number of species in the derivative - long double *production_rates; // Production rates for all species - long double *loss_rates; // Loss rates for all species + double *production_rates; // Production rates for all species + double *loss_rates; // Loss rates for all species #ifdef CAMP_DEBUG double last_max_loss_precision; // Maximum loss of precision at last output #endif @@ -62,7 +62,7 @@ void time_derivative_output(TimeDerivative time_deriv, double *dest_array, * spec_id */ void time_derivative_add_value(TimeDerivative time_deriv, unsigned int spec_id, - long double rate_contribution); + double rate_contribution); #ifdef CAMP_DEBUG /** \brief Maximum loss of precision at the last output of the derivative diff --git a/test/chemistry/cb05cl_ae5/test_cb05cl_ae5.F90 b/test/chemistry/cb05cl_ae5/test_cb05cl_ae5.F90 index 027c607d1..f96cd7199 100644 --- a/test/chemistry/cb05cl_ae5/test_cb05cl_ae5.F90 +++ b/test/chemistry/cb05cl_ae5/test_cb05cl_ae5.F90 @@ -692,13 +692,6 @@ logical function run_standard_cb05cl_ae5_test() result(passed) #ifdef DEBUG if (i_repeat.eq.1) then - ! TIMERS - timers and counters are available here for the last call - ! to solve() - write(*,*) "Calls to f()", solver_stats%RHS_evals_total - write(*,*) "Calls to Jac()", solver_stats%Jac_evals_total - write(*,*) "Compute time f()", solver_stats%RHS_time__s, "s" - write(*,*) "Compute time Jac()", solver_stats%Jac_time__s, "s" - call solver_stats%print() ! Check the Jacobian evaluations diff --git a/test/monarch/TestMonarch.py b/test/monarch/TestMonarch.py index 131354228..84fb69686 100644 --- a/test/monarch/TestMonarch.py +++ b/test/monarch/TestMonarch.py @@ -18,13 +18,10 @@ def all_timesteps(): # conf.profileCuda = "nvprof" # conf.profileCuda = "nsight" conf.is_import = True - conf.mpiProcessesCaseBase = 1 - conf.mpiProcessesCaseOptimList = [1] - conf.allocatedNodes = 1 - conf.allocatedTasksPerNode = 160 - conf.cells = [10] - # conf.cells = [100, 500, 1000, 5000, 10000] - conf.timeSteps = 5 + conf.mpiProcessesCaseBase = 40 + conf.mpiProcessesCaseOptimList = [40] + conf.cells = [100000] + conf.timeSteps = 720 conf.caseBase = "CPU One-cell" # conf.caseBase = "GPU BDF" conf.casesOptim = [] @@ -34,5 +31,6 @@ def all_timesteps(): run_main(conf) + if __name__ == "__main__": all_timesteps() diff --git a/test/monarch/TestMonarch1.py b/test/monarch/TestMonarch1.py index b183870a7..74b9b813d 100644 --- a/test/monarch/TestMonarch1.py +++ b/test/monarch/TestMonarch1.py @@ -19,11 +19,8 @@ def all_timesteps(): # conf.profileCuda = "nsight" conf.is_import = True conf.mpiProcessesCaseBase = 1 - conf.mpiProcessesCaseOptimList = [10] - conf.allocatedNodes = 1 - conf.allocatedTasksPerNode = 160 - conf.cells = [100000] - # conf.cells = [100, 500, 1000, 5000, 10000] + conf.mpiProcessesCaseOptimList = [1] + conf.cells = [10000] conf.timeSteps = 720 conf.caseBase = "CPU One-cell" # conf.caseBase = "GPU BDF" @@ -34,5 +31,6 @@ def all_timesteps(): run_main(conf) + if __name__ == "__main__": all_timesteps() diff --git a/test/monarch/TestMonarch2.py b/test/monarch/TestMonarch2.py index 199f2d5d1..ffac564d3 100644 --- a/test/monarch/TestMonarch2.py +++ b/test/monarch/TestMonarch2.py @@ -20,10 +20,7 @@ def all_timesteps(): conf.is_import = True conf.mpiProcessesCaseBase = 20 conf.mpiProcessesCaseOptimList = [20] - conf.allocatedNodes = 1 - conf.allocatedTasksPerNode = 160 - conf.cells = [100000] - # conf.cells = [100, 500, 1000, 5000, 10000] + conf.cells = [10000] conf.timeSteps = 720 conf.caseBase = "CPU One-cell" # conf.caseBase = "GPU BDF" diff --git a/test/monarch/TestMonarch3.py b/test/monarch/TestMonarch3.py index b0db80ee6..2107dc25e 100644 --- a/test/monarch/TestMonarch3.py +++ b/test/monarch/TestMonarch3.py @@ -20,10 +20,7 @@ def all_timesteps(): conf.is_import = True conf.mpiProcessesCaseBase = 40 conf.mpiProcessesCaseOptimList = [40] - conf.allocatedNodes = 1 - conf.allocatedTasksPerNode = 160 - conf.cells = [1000,5000,10000,50000,100000] - # conf.cells = [100, 500, 1000, 5000, 10000] + conf.cells = [1000,5000,10000] conf.timeSteps = 720 conf.caseBase = "CPU One-cell" # conf.caseBase = "GPU BDF" diff --git a/test/monarch/TestMonarch4.py b/test/monarch/TestMonarch4.py index 304e38b92..c0f8f3368 100644 --- a/test/monarch/TestMonarch4.py +++ b/test/monarch/TestMonarch4.py @@ -20,10 +20,7 @@ def all_timesteps(): conf.is_import = True conf.mpiProcessesCaseBase = 1 conf.mpiProcessesCaseOptimList = [10,20,30,40] - conf.allocatedNodes = 1 - conf.allocatedTasksPerNode = 160 - conf.cells = [100000] - # conf.cells = [100, 500, 1000, 5000, 10000] + conf.cells = [10000] conf.timeSteps = 720 conf.caseBase = "CPU One-cell" # conf.caseBase = "GPU BDF" diff --git a/test/monarch/TestMonarch5.py b/test/monarch/TestMonarch5.py new file mode 100644 index 000000000..0a5390783 --- /dev/null +++ b/test/monarch/TestMonarch5.py @@ -0,0 +1,36 @@ +# +# Copyright (C) 2022 Barcelona Supercomputing Center and University of +# Illinois at Urbana-Champaign +# SPDX-License-Identifier: MIT +# + +from mainMonarch import * + + +def all_timesteps(): + conf = TestMonarch() + conf.chemFile = "cb05_paperV2" + # conf.chemFile = "monarch_cb05" + conf.diffCellsL = [] + conf.diffCellsL.append("Realistic") + # conf.diffCellsL.append("Ideal") + conf.profileCuda = "" + # conf.profileCuda = "nvprof" + # conf.profileCuda = "nsight" + conf.is_import = True + conf.mpiProcessesCaseBase = 1 + conf.mpiProcessesCaseOptimList = [1] + conf.cells = [100000] + conf.timeSteps = 720 + conf.caseBase = "CPU One-cell" + # conf.caseBase = "GPU BDF" + conf.casesOptim = [] + # conf.casesOptim.append("CPU One-cell") + conf.casesOptim.append("GPU BDF") + conf.plotYKey = "Speedup timecvStep" + + run_main(conf) + + +if __name__ == "__main__": + all_timesteps() diff --git a/test/monarch/camp_monarch_interface.F90 b/test/monarch/camp_monarch_interface.F90 index 2f7073b98..d23094294 100644 --- a/test/monarch/camp_monarch_interface.F90 +++ b/test/monarch/camp_monarch_interface.F90 @@ -6,7 +6,7 @@ !> The camp_monarch_interface_t object and related functions !> Interface for the MONACH model and CAMP-camp -module camp_monarch_interface_2 +module camp_monarch_interface use camp_constants, only : i_kind use camp_mpi @@ -82,7 +82,7 @@ function constructor(camp_config_file, output_file_title, & integer, optional :: n_cells type(camp_solver_data_t), pointer :: camp_solver_data character, allocatable :: buffer(:) - integer(kind=i_kind) :: pos, pack_size + integer(kind=i_kind) :: pos, pack_size, size integer(kind=i_kind) :: i_spec, i_photo_rxn, rank, n_ranks, ierr type(string_t), allocatable :: unique_names(:) character(len=:), allocatable :: spec_name, settings_interface_file @@ -94,7 +94,7 @@ function constructor(camp_config_file, output_file_title, & type(aero_rep_update_data_modal_binned_mass_GSD_t) :: update_data_GSD real(kind=dp) :: comp_start, comp_end character(len=128) :: i_str - integer :: local_comm,use_cpu, nGPUs + integer :: local_comm,use_cpu if (present(mpi_comm)) then local_comm = mpi_comm @@ -225,15 +225,13 @@ function constructor(camp_config_file, output_file_title, & end if deallocate(buffer) use_cpu=1 - nGPUs=1 open(unit=32, file='settings/config_variables_c_solver.txt', status='old') read(32,'(A)') i_str if(trim(i_str) == "USE_CPU=OFF") then use_cpu = 0 end if - read(32, *) nGPUs close(32) - call this%camp_core%solver_initialize(use_cpu,nGPUs) + call this%camp_core%solver_initialize(use_cpu) this%camp_state => this%camp_core%new_state() if(this%output_file_title=="cb05_paperV2") then allocate(this%offset_photo_rates_cells(this%n_cells)) @@ -268,10 +266,7 @@ function constructor(camp_config_file, output_file_title, & call this%camp_core%update_data(update_data_GSD) end if end do - !unique_names=this%camp_core%unique_names() - !do i=1, size(unique_names) - ! print*,i,trim(unique_names(i)%string) - !end do + call this%camp_core%init_export_solver_state() if (MONARCH_PROCESS==0) then call cpu_time(comp_end) write(*,*) "Initialization time: ", comp_end-comp_start, " s" @@ -374,8 +369,6 @@ subroutine integrate(this, curr_time, time_step, I_W, I_E, I_S, & end do this%camp_state%state_var(this%map_camp_id(:)) = & MONARCH_conc(i,j,k,this%map_monarch_id(:)) - !print*,"MONARCH_conc381",MONARCH_conc(i,j,k,this%map_monarch_id(:)) - !print*,"state_var421",this%camp_state%state_var(:) if(this%output_file_title=="monarch_cb05") then this%camp_state%state_var(this%gas_phase_water_id) = & water_conc(1,1,1,water_vapor_index) @@ -384,14 +377,12 @@ subroutine integrate(this, curr_time, time_step, I_W, I_E, I_S, & water_conc(1,1,1,water_vapor_index) * & mwair / mwwat * 1.e6 end if - !print*,"state_var430",this%camp_state%state_var(:) if(this%output_file_title=="cb05_paperV2") then do r=1,size(this%specs_emi_id) this%camp_state%state_var(this%specs_emi_id(r))=& this%camp_state%state_var(this%specs_emi_id(r))& +this%specs_emi(r)*rate_emi(i_hour,z+1)*conv(i,j,k) end do - !print*,"state_var436",this%camp_state%state_var(1) end if call cpu_time(comp_start) call this%camp_core%solve(this%camp_state, real(time_step*60., kind=dp)) @@ -418,8 +409,6 @@ subroutine integrate(this, curr_time, time_step, I_W, I_E, I_S, & call this%camp_state%env_states(z+1)%set_pressure_Pa(real(pressure(i,j,k),kind=dp)) this%camp_state%state_var(this%map_camp_id(:) + (z*state_size_per_cell))& = MONARCH_conc(i,j,k,this%map_monarch_id(:)) - !print*,"MONARCH_conc381",MONARCH_conc(i,j,k,this%map_monarch_id(:)) - !print*,"state_var421",this%camp_state%state_var(:) if(this%output_file_title=="monarch_cb05") then this%camp_state%state_var(this%gas_phase_water_id+(z*state_size_per_cell)) = & water_conc(1,1,1,water_vapor_index) @@ -427,7 +416,6 @@ subroutine integrate(this, curr_time, time_step, I_W, I_E, I_S, & this%camp_state%state_var(this%gas_phase_water_id+(z*state_size_per_cell)) = & water_conc(1,1,1,water_vapor_index) * mwair / mwwat * 1.e6 end if - !print*,"state_var430",this%camp_state%state_var(:) if(this%output_file_title=="cb05_paperV2") then do r=1,size(this%specs_emi_id) this%camp_state%state_var(this%specs_emi_id(r)+z*state_size_per_cell)=& @@ -435,7 +423,6 @@ subroutine integrate(this, curr_time, time_step, I_W, I_E, I_S, & +this%specs_emi(r)*rate_emi(i_hour,z+1)*conv(i,j,k) end do endif - !print*,"state_var436",this%camp_state%state_var(1+z*state_size_per_cell) end do end do end do @@ -821,10 +808,28 @@ subroutine get_init_conc(this, MONARCH_conc, water_conc, & end if end subroutine get_init_conc - elemental subroutine finalize(this) type(camp_monarch_interface_t), intent(inout) :: this - if (associated(this%camp_core)) deallocate(this%camp_core) + if (associated(this%camp_core)) & + deallocate(this%camp_core) + if (associated(this%camp_state)) & + deallocate(this%camp_state) + if (allocated(this%monarch_species_names)) & + deallocate(this%monarch_species_names) + if (allocated(this%map_monarch_id)) & + deallocate(this%map_monarch_id) + if (allocated(this%map_camp_id)) & + deallocate(this%map_camp_id) + if (allocated(this%init_conc_camp_id)) & + deallocate(this%init_conc_camp_id) + if (allocated(this%init_conc)) & + deallocate(this%init_conc) + if (associated(this%species_map_data)) & + deallocate(this%species_map_data) + if (associated(this%init_conc_data)) & + deallocate(this%init_conc_data) + if (associated(this%property_set)) & + deallocate(this%property_set) end subroutine finalize diff --git a/test/monarch/checkGPU.py b/test/monarch/checkGPU.py index 25d8924af..e5122424b 100644 --- a/test/monarch/checkGPU.py +++ b/test/monarch/checkGPU.py @@ -12,12 +12,8 @@ def checkGPU(): conf.chemFile = "cb05_paperV2" conf.diffCellsL = [] conf.diffCellsL.append("Realistic") - conf.nGPUsCaseBase = 1 - conf.nGPUsCaseOptimList = [1] conf.mpiProcessesCaseBase = 1 conf.mpiProcessesCaseOptimList.append(1) - conf.allocatedNodes = 1 - conf.allocatedTasksPerNode = 160 conf.cells = [10] conf.timeSteps = 3 conf.timeStepsDt = 2 diff --git a/test/monarch/checkGPU.sh b/test/monarch/checkGPU.sh index 59ef7ffa4..cb3b05b4a 100644 --- a/test/monarch/checkGPU.sh +++ b/test/monarch/checkGPU.sh @@ -1,5 +1,3 @@ #!/usr/bin/env bash set -e -ln -rs -fL out ../../build/out -ln -rs -fL settings ../../build/settings python checkGPU.py \ No newline at end of file diff --git a/test/monarch/diff_TestMonarch.py b/test/monarch/diff_TestMonarch.py index 2c19f7330..a9fe143ed 100644 --- a/test/monarch/diff_TestMonarch.py +++ b/test/monarch/diff_TestMonarch.py @@ -15,12 +15,8 @@ def all_timesteps(): conf.diffCellsL.append("Realistic") #conf.diffCellsL.append("Ideal") conf.profileCuda = "" - conf.nGPUsCaseBase = 1 - conf.nGPUsCaseOptimList = [1] conf.mpiProcessesCaseBase = 1 conf.mpiProcessesCaseOptimList.append(1) - conf.allocatedNodes = 1 - conf.allocatedTasksPerNode = 160 conf.cells = [2] conf.timeSteps = 3 conf.caseBase = "CPU One-cell" diff --git a/test/monarch/mainMonarch.py b/test/monarch/mainMonarch.py index 1e5abc424..55c52f4cb 100644 --- a/test/monarch/mainMonarch.py +++ b/test/monarch/mainMonarch.py @@ -8,8 +8,6 @@ import json import subprocess from pandas import read_csv as pd_read_csv -import time -from math import ceil class TestMonarch: @@ -24,8 +22,6 @@ def __init__(self): self.caseGpuCpu = "" self.caseMulticellsOnecell = "" self.mpiProcesses = 1 - self.allocatedNodes = 1 - self.allocatedTasksPerNode = 160 # Cases configuration self.diffCellsL = "" self.mpiProcessesCaseBase = 1 @@ -45,33 +41,9 @@ def __init__(self): self.campConf = "settings/config_variables_c_solver.txt" -def write_camp_config_file(conf): - try: - file1 = open(conf.campConf, "w") - if conf.caseGpuCpu == "CPU": - file1.write("USE_CPU=ON\n") - else: - file1.write("USE_CPU=OFF\n") - file1.write(str(nGPUs) + "\n") - file1.close() - except Exception as e: - print("write_camp_config_file fails", e) - - # from line_profiler_pycharm import profile # @profile def run(conf): - if conf.caseGpuCpu == "GPU": - maxCoresPerNode = 40 - if (conf.mpiProcesses > maxCoresPerNode and - conf.mpiProcesses % maxCoresPerNode != 0): - print( - "ERROR: MORE THAN 40 MPI PROCESSES AND NOT " - "MULTIPLE OF 40, WHEN CTE-POWER ONLY HAS 40 CORES " - "PER NODE\n"); - raise - coresPerGPU = 10 - nGPUs = ceil(conf.mpiProcesses / coresPerGPU) exec_str = "" try: ddt_pid = subprocess.check_output( @@ -80,8 +52,13 @@ def run(conf): exec_str += 'ddt --connect ' except Exception: pass - exec_str += "mpirun -v -np " + str( - conf.mpiProcesses) + " --bind-to core " + maxCoresPerNode = 40 + if conf.mpiProcesses <= maxCoresPerNode: + exec_str += "mpirun -v -np " + str( + conf.mpiProcesses) + " --bind-to core " #for plogin (fails squeue) + else: + exec_str += "srun --cpu-bind=core -n " + str( + conf.mpiProcesses) + " " #foqueue (slow plogin) if (conf.profileCuda == "nvprof" and conf.caseGpuCpu == "GPU"): pathNvprof = ("../../compile/power9/" + @@ -111,14 +88,13 @@ def run(conf): file1.write("USE_CPU=ON\n") else: file1.write("USE_CPU=OFF\n") - file1.write(str(nGPUs) + "\n") file1.close() except Exception as e: print("write_camp_config_file fails", e) print("exec_str:", exec_str, conf.diffCells, conf.caseGpuCpu, conf.caseMulticellsOnecell, "ncellsPerMPIProcess:", - conf.nCells, "nGPUs:", nGPUs) + conf.nCells) conf_name = "settings/TestMonarch.json" with open(conf_name, 'w', encoding='utf-8') as jsonFile: json.dump(conf.__dict__, jsonFile, indent=4, @@ -126,10 +102,8 @@ def run(conf): nCellsStr = str(conf.nCells) if conf.nCells >= 1000: nCellsStr = str(int(conf.nCells / 1000)) + "k" - if conf.caseGpuCpu == "GPU": - caseGpuCpuName = str(nGPUs) + conf.caseGpuCpu - else: - caseGpuCpuName = str(conf.mpiProcesses) + "CPUcores" + caseGpuCpuName=conf.caseGpuCpu+str(conf.mpiProcesses) + "cores" + out = 0 is_import = False data_path = ("out/stats" + caseGpuCpuName + nCellsStr + "cells" + str(conf.timeSteps) + "tsteps.csv") @@ -137,30 +111,38 @@ def run(conf): data_path2 = ("out/state" + caseGpuCpuName + nCellsStr + "cells" + str(conf.timeSteps) + "tsteps.csv") if conf.is_import and os.path.exists(data_path): - is_import = True - if conf.is_out and not os.path.exists(data_path2): - is_import = False + nRows_csv = (conf.timeSteps * conf.nCells *conf.mpiProcesses) + df = pd_read_csv(data_path, nrows=nRows_csv) + data = df.to_dict('list') + y_key_words = conf.plotYKey.split() + y_key = y_key_words[-1] + data = data[y_key] + print("data stats",data) + if data: + is_import = True + if conf.is_out: + if os.path.exists(data_path2): + is_import = True + else: + is_import = False if not is_import: os.system(exec_str) - data_path = ("out/stats" + caseGpuCpuName + nCellsStr + - "cells" + str(conf.timeSteps) + "tsteps.csv") - if not is_import: os.rename("out/stats.csv", data_path) - nRows_csv = (conf.timeSteps * conf.nCells * - conf.mpiProcesses) - df = pd_read_csv(data_path, nrows=nRows_csv) - data = df.to_dict('list') - y_key_words = conf.plotYKey.split() - y_key = y_key_words[-1] - data = data[y_key][0] - out = 0 - if conf.is_out: - if not is_import: + if conf.is_out: os.rename("out/state.csv", data_path2) - df = pd_read_csv(data_path2, header=None, - names=["Column1"]) - out = df["Column1"].tolist() - return data, out + nRows_csv = (conf.timeSteps * conf.nCells *conf.mpiProcesses) + df = pd_read_csv(data_path, nrows=nRows_csv) + data = df.to_dict('list') + y_key_words = conf.plotYKey.split() + y_key = y_key_words[-1] + data = data[y_key] + print("data stats",data) + if conf.is_out: + if os.path.exists(data_path2): + df = pd_read_csv(data_path2, header=None, + names=["Column1"]) + out = df["Column1"].tolist() + return data[0], out # @profile @@ -324,7 +306,7 @@ def plot_cases(conf, datay): datax = list(range(1, conf.timeSteps + 1, 1)) plot_x_key = "Timesteps" namex = plot_x_key - print(namex, ":", datax) + print(namex, ":", datax[0],"to",datax[-1]) if legend: print("plotTitle: ", plotTitle, " legend:", legend) else: @@ -355,4 +337,4 @@ def run_main(conf): conf.mpiProcessesCaseOptimList[i] = cellsProcesses datay = run_diffCells(conf) - #plot_cases(conf, datay) + plot_cases(conf, datay) diff --git a/test/monarch/mock_monarch.F90 b/test/monarch/mock_monarch.F90 index a194c9f70..23cc6cf7b 100644 --- a/test/monarch/mock_monarch.F90 +++ b/test/monarch/mock_monarch.F90 @@ -7,7 +7,7 @@ program mock_monarch_t use camp_constants, only: const use camp_util, only : assert_msg, almost_equal, to_string - use camp_monarch_interface_2 + use camp_monarch_interface use camp_mpi use json_module @@ -182,8 +182,8 @@ program mock_monarch_t curr_time = curr_time + TIME_STEP end do call camp_mpi_barrier() - call camp_interface%camp_core%export_solver_stats() call camp_interface%camp_core%join_solver_state() + call camp_interface%camp_core%export_solver_stats() call camp_mpi_barrier() if (camp_mpi_rank()==0) then diff --git a/test/monarch/run.sh b/test/monarch/run.sh index e49fbac4a..93cd97a19 100644 --- a/test/monarch/run.sh +++ b/test/monarch/run.sh @@ -15,11 +15,9 @@ make_and_check() { } make_run() { - ln -rs -fL out ../../build/out - ln -rs -fL settings ../../build/settings curr_path=$(pwd) cd ../../build - make + make -j 4 cd $curr_path #python TestMonarch.py python checkGPU.py diff --git a/test/monarch/sbatch_run.sh b/test/monarch/sbatch_run.sh index e439f6060..cdc2f8ad4 100644 --- a/test/monarch/sbatch_run.sh +++ b/test/monarch/sbatch_run.sh @@ -1,10 +1,12 @@ #!/usr/bin/env bash ##SBATCH --qos=debug +##SBATCH -t 00:09:00 #SBATCH --job-name=camp_test_monarch #SBATCH --output=out_sbatch.txt #SBATCH --error=err_sbatch.txt #SBATCH --nodes=1 -#SBATCH --ntasks-per-node=160 +#SBATCH --ntasks-per-node=40 +#SBATCH --cpus-per-task=4 #SBATCH --gres=gpu:4 #SBATCH --exclusive @@ -12,7 +14,7 @@ set -e make_run(){ curr_path=$(pwd) cd ../../build - make + make -j 4 cd $curr_path python TestMonarch1.py python TestMonarch2.py diff --git a/test/monarch/settings/TestMonarch.json b/test/monarch/settings/TestMonarch.json index 7b5e3c4c0..624621fce 100644 --- a/test/monarch/settings/TestMonarch.json +++ b/test/monarch/settings/TestMonarch.json @@ -8,8 +8,6 @@ "caseGpuCpu": "GPU", "caseMulticellsOnecell": "BDF", "mpiProcesses": 20, - "allocatedNodes": 1, - "allocatedTasksPerNode": 160, "diffCellsL": [ "Realistic" ], @@ -32,9 +30,5 @@ "exportPath": "exports", "results_file": "_solver_stats.csv", "nCellsProcesses": 40, - "campConf": "settings/config_variables_c_solver.txt", - "nGPUsCaseBase": 1, - "nGPUsCaseOptimList": [ - 2 - ] + "campConf": "settings/config_variables_c_solver.txt" } \ No newline at end of file diff --git a/test/monarch_output/stats_monarch_netcdf.py b/test/monarch_output/stats_monarch_netcdf.py index 3d01023e1..fd51bf15f 100644 --- a/test/monarch_output/stats_monarch_netcdf.py +++ b/test/monarch_output/stats_monarch_netcdf.py @@ -54,8 +54,9 @@ def process_variable(dataset1, dataset2, var_name): quantile75, quantile95, max_error, relative_error -file1_path_header = "../../../../monarch_out/cpu_tstep479_O3/" -file2_path_header = "../../../../monarch_out/gpu_tstep479_O3/" +file1_path_header = "/gpfs/scratch/bsc32/bsc32815/monarch_out/cpu_tstep6_O3/" +#file2_path_header = "/gpfs/scratch/bsc32/bsc32815/monarch_out/gpu_tstep6_O3/" +file2_path_header = "/gpfs/scratch/bsc32/bsc32815/a591/nmmb-monarch/OUTPUT/regional/000/20160721/CURRENT_RUN/" # Calculate the speedup file1 = file1_path_header + "out/stats.csv" @@ -105,6 +106,6 @@ def process_variable(dataset1, dataset2, var_name): plt.ylabel("Relative Error [%]") plt.xticks(range(len(variable_names)), variable_names, rotation=90) plt.title("Box Plot of highest NRMSE for MONARCH-CAMP 2 GPUs 24h") -plt.show() +#plt.show() #worst_variables.to_csv("exports/summary_table.csv", index=False) diff --git a/test/monarch_output/tmp.py b/test/monarch_output/tmp.py deleted file mode 100644 index 085ff0168..000000000 --- a/test/monarch_output/tmp.py +++ /dev/null @@ -1,50 +0,0 @@ -import matplotlib as mpl - -mpl.use('TkAgg') -import pandas as pd -import seaborn as sns -import matplotlib.pyplot as plt -import numpy as np - - -# Sample data -#data = sns.load_dataset("tips") # Load a built-in dataset as an example - -data = np.array([1,3,5]) -# Create a box plot -sns.boxplot(data=data, showfliers=False) -print(data) - -# Add labels and title -plt.xlabel("Day of the week") -plt.ylabel("Total Bill Amount ($)") -plt.title("Box Plot of Total Bill Amount by Day") - -# Show the plot -plt.show() -raise - - -# Create a DataFrame from your CSV data -#data = pd.read_csv('exports/summary_table.csv') - -array1= [1,3,5] -array2=[2,7,4] -# Create a DataFrame from two arrays of variables (replace with your own data) -data = pd.DataFrame({'Variable1': array1, 'Variable2': array2}) - -# Calculate the difference between the two variables -data['Difference'] = data['Variable1'] - data['Variable2'] - -# Create a violin plot -sns.violinplot(x='Difference', data=data) - -# Print the standard deviation of the difference -std_deviation = data['Difference'].std() -print(f"Standard Deviation of Difference: {std_deviation}") - -# Customize the plot -plt.title("Violin Plot of Difference") -plt.xlabel("Difference") -plt.ylabel("Density") -plt.show() \ No newline at end of file diff --git a/test/unit_aero_rep_data/test_aero_rep_single_particle.F90 b/test/unit_aero_rep_data/test_aero_rep_single_particle.F90 index a0784b892..87e70f7c1 100644 --- a/test/unit_aero_rep_data/test_aero_rep_single_particle.F90 +++ b/test/unit_aero_rep_data/test_aero_rep_single_particle.F90 @@ -284,7 +284,6 @@ logical function build_aero_rep_data_set_test() deallocate(camp_state) deallocate(camp_core) - #endif end function build_aero_rep_data_set_test @@ -317,9 +316,7 @@ logical function eval_c_func(camp_core) result(passed) end select call camp_core%solver_initialize() - camp_state => camp_core%new_state() - camp_state%state_var(:) = 0.0 call camp_state%env_states(1)%set_temperature_K( 298.0d0 ) call camp_state%env_states(1)%set_pressure_Pa( 101325.0d0 ) diff --git a/test/unit_sub_model_data/test_sub_model_ZSR_aerosol_water.c b/test/unit_sub_model_data/test_sub_model_ZSR_aerosol_water.c index 60018c051..88431c1ae 100644 --- a/test/unit_sub_model_data/test_sub_model_ZSR_aerosol_water.c +++ b/test/unit_sub_model_data/test_sub_model_ZSR_aerosol_water.c @@ -77,8 +77,8 @@ int test_sub_model_zsr_jac_calc(void *solver_data, double *state, double *env, double ppm_to_RH = pressure_Pa / water_vp / 1.0e6; // (1/ppm) // Water activity and d_aw / d_[H2O_g] - long double a_w = ppm_to_RH * CONC_H2O_G; - long double d_aw_d_wg = ppm_to_RH; + double a_w = ppm_to_RH * CONC_H2O_G; + double d_aw_d_wg = ppm_to_RH; // Jacobson ion pair double Y0 = -1.918004e2; @@ -89,27 +89,27 @@ int test_sub_model_zsr_jac_calc(void *solver_data, double *state, double *env, double Y5 = 2.187103e4; double Y6 = -9.591577e3; double Y7 = 1.763672e3; - long double molality = Y0 + Y1*a_w + Y2*pow(a_w,2) + Y3*pow(a_w,3) + Y4*pow(a_w,4) + + double molality = Y0 + Y1*a_w + Y2*pow(a_w,2) + Y3*pow(a_w,3) + Y4*pow(a_w,4) + Y5*pow(a_w,5) + Y6*pow(a_w,6) + Y7*pow(a_w,7); - long double d_molal_d_wg = Y1 + 2.0*Y2*a_w + 3.0*Y3*pow(a_w,2) + 4.0*Y4*pow(a_w,3) + + double d_molal_d_wg = Y1 + 2.0*Y2*a_w + 3.0*Y3*pow(a_w,2) + 4.0*Y4*pow(a_w,3) + 5.0*Y5*pow(a_w,4) + 6.0*Y6*pow(a_w,5) + 7.0*Y7*pow(a_w,6); d_molal_d_wg *= d_aw_d_wg; - long double cation = CONC_CA / MW_CA / 1000.0; - long double d_cation_d_C = 1.0 / MW_CA / 1000.0; - long double anion = CONC_CL / 2.0 / MW_CL / 1000.0; - long double d_anion_d_A = 1.0 / 2.0 / MW_CL / 1000.0; + double cation = CONC_CA / MW_CA / 1000.0; + double d_cation_d_C = 1.0 / MW_CA / 1000.0; + double anion = CONC_CL / 2.0 / MW_CL / 1000.0; + double d_anion_d_A = 1.0 / 2.0 / MW_CL / 1000.0; - long double e_ac = exp(ALPHA_ * cation); - long double e_aa = exp(ALPHA_ * anion ); - long double conc = (cation * e_ac + anion * e_aa) / (e_ac + e_aa); - long double denom = (e_ac + e_aa) * (e_ac + e_aa); - long double d_conc_d_cation = + double e_ac = exp(ALPHA_ * cation); + double e_aa = exp(ALPHA_ * anion ); + double conc = (cation * e_ac + anion * e_aa) / (e_ac + e_aa); + double denom = (e_ac + e_aa) * (e_ac + e_aa); + double d_conc_d_cation = (e_ac * e_ac + e_ac * e_aa * (1.0 - ALPHA_ * anion + ALPHA_ * cation)) / denom; - long double d_conc_d_anion = + double d_conc_d_anion = (e_aa * e_aa + e_ac * e_aa * (1.0 - ALPHA_ * cation + ALPHA_ * anion)) / From 40f44b9748eb3c9d1d53b3a929f9010d15e55593 Mon Sep 17 00:00:00 2001 From: cguzman Date: Sat, 16 Dec 2023 00:52:23 +0100 Subject: [PATCH 3/3] merge gpu main --- src/camp_solver.c | 2 +- src/cuda/cvode_init.cu | 5 +++-- test/monarch/TestMonarch.py | 12 ++++++------ test/monarch/TestMonarch2.py | 2 +- test/monarch/TestMonarch4.py | 4 ++-- test/monarch/camp_monarch_interface.F90 | 23 ++++++++++++----------- test/monarch/mainMonarch.py | 4 ++-- test/monarch/mock_monarch.F90 | 1 + test/monarch/run.sh | 4 ++-- test/monarch/sbatch_run.sh | 2 -- 10 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/camp_solver.c b/src/camp_solver.c index ecc2a188c..b767b7197 100644 --- a/src/camp_solver.c +++ b/src/camp_solver.c @@ -96,8 +96,8 @@ void *solver_new(int n_state_var, int n_cells, int *var_type, int n_rxn, int n_sub_model, int n_sub_model_int_param, int n_sub_model_float_param, int n_sub_model_env_param, int use_cpu) { - // Create the SolverData object + // Create the SolverData object SolverData *sd = (SolverData *)malloc(sizeof(SolverData)); if (sd == NULL) { printf("\n\nERROR allocating space for SolverData\n\n"); diff --git a/src/cuda/cvode_init.cu b/src/cuda/cvode_init.cu index 16c996f88..15aff6d2c 100644 --- a/src/cuda/cvode_init.cu +++ b/src/cuda/cvode_init.cu @@ -43,8 +43,9 @@ void constructor_cvode_gpu(SolverData *sd){ MPI_INFO_NULL, &commNode); MPI_Comm_rank(commNode, &rankNode); MPI_Comm_size(commNode, &sizeNode); - int MPIsPerGPU = sizeNode / nGPUsMax; - cudaSetDevice(rankNode / MPIsPerGPU); + int MPIsPerGPU = (sizeNode + nGPUsMax - 1) / nGPUsMax; + int iDevice = rankNode / MPIsPerGPU; + cudaSetDevice(iDevice); mGPU->n_rxn=md->n_rxn; mGPU->n_rxn_env_data=md->n_rxn_env_data; HANDLE_ERROR(cudaMalloc((void **) &mGPU->state, state_size)); diff --git a/test/monarch/TestMonarch.py b/test/monarch/TestMonarch.py index 84fb69686..a50503e03 100644 --- a/test/monarch/TestMonarch.py +++ b/test/monarch/TestMonarch.py @@ -17,13 +17,13 @@ def all_timesteps(): conf.profileCuda = "" # conf.profileCuda = "nvprof" # conf.profileCuda = "nsight" - conf.is_import = True - conf.mpiProcessesCaseBase = 40 - conf.mpiProcessesCaseOptimList = [40] - conf.cells = [100000] - conf.timeSteps = 720 + #conf.is_import = True + conf.mpiProcessesCaseBase = 10 + conf.mpiProcessesCaseOptimList = [1,2,3,4] + conf.cells = [10000] + conf.timeSteps = 1 conf.caseBase = "CPU One-cell" - # conf.caseBase = "GPU BDF" + #conf.caseBase = "GPU BDF" conf.casesOptim = [] # conf.casesOptim.append("CPU One-cell") conf.casesOptim.append("GPU BDF") diff --git a/test/monarch/TestMonarch2.py b/test/monarch/TestMonarch2.py index ffac564d3..cc9a05697 100644 --- a/test/monarch/TestMonarch2.py +++ b/test/monarch/TestMonarch2.py @@ -20,7 +20,7 @@ def all_timesteps(): conf.is_import = True conf.mpiProcessesCaseBase = 20 conf.mpiProcessesCaseOptimList = [20] - conf.cells = [10000] + conf.cells = [100000] conf.timeSteps = 720 conf.caseBase = "CPU One-cell" # conf.caseBase = "GPU BDF" diff --git a/test/monarch/TestMonarch4.py b/test/monarch/TestMonarch4.py index c0f8f3368..a1a778b2c 100644 --- a/test/monarch/TestMonarch4.py +++ b/test/monarch/TestMonarch4.py @@ -19,8 +19,8 @@ def all_timesteps(): # conf.profileCuda = "nsight" conf.is_import = True conf.mpiProcessesCaseBase = 1 - conf.mpiProcessesCaseOptimList = [10,20,30,40] - conf.cells = [10000] + conf.mpiProcessesCaseOptimList = [1,2,3,4] + conf.cells = [100000] conf.timeSteps = 720 conf.caseBase = "CPU One-cell" # conf.caseBase = "GPU BDF" diff --git a/test/monarch/camp_monarch_interface.F90 b/test/monarch/camp_monarch_interface.F90 index d23094294..32cae898f 100644 --- a/test/monarch/camp_monarch_interface.F90 +++ b/test/monarch/camp_monarch_interface.F90 @@ -54,10 +54,10 @@ module camp_monarch_interface contains procedure :: integrate procedure :: get_init_conc + procedure :: finalize procedure, private :: load procedure, private :: create_map procedure, private :: load_init_conc - final :: finalize end type camp_monarch_interface_t interface camp_monarch_interface_t @@ -808,8 +808,8 @@ subroutine get_init_conc(this, MONARCH_conc, water_conc, & end if end subroutine get_init_conc - elemental subroutine finalize(this) - type(camp_monarch_interface_t), intent(inout) :: this + subroutine finalize(this) + class(camp_monarch_interface_t) :: this if (associated(this%camp_core)) & deallocate(this%camp_core) if (associated(this%camp_state)) & @@ -824,13 +824,14 @@ elemental subroutine finalize(this) deallocate(this%init_conc_camp_id) if (allocated(this%init_conc)) & deallocate(this%init_conc) - if (associated(this%species_map_data)) & - deallocate(this%species_map_data) - if (associated(this%init_conc_data)) & - deallocate(this%init_conc_data) - if (associated(this%property_set)) & - deallocate(this%property_set) - - end subroutine finalize + if(camp_mpi_rank()==0) then + if (associated(this%init_conc_data)) & + deallocate(this%init_conc_data) + if (associated(this%species_map_data)) & + deallocate(this%species_map_data) + if (associated(this%property_set)) & + deallocate(this%property_set) + end if + end subroutine end module diff --git a/test/monarch/mainMonarch.py b/test/monarch/mainMonarch.py index 55c52f4cb..a543a2e06 100644 --- a/test/monarch/mainMonarch.py +++ b/test/monarch/mainMonarch.py @@ -52,13 +52,13 @@ def run(conf): exec_str += 'ddt --connect ' except Exception: pass - maxCoresPerNode = 40 + maxCoresPerNode = 40 #CTE-POWER Architecture if conf.mpiProcesses <= maxCoresPerNode: exec_str += "mpirun -v -np " + str( conf.mpiProcesses) + " --bind-to core " #for plogin (fails squeue) else: exec_str += "srun --cpu-bind=core -n " + str( - conf.mpiProcesses) + " " #foqueue (slow plogin) + conf.mpiProcesses) + " " #for queue (slow plogin) if (conf.profileCuda == "nvprof" and conf.caseGpuCpu == "GPU"): pathNvprof = ("../../compile/power9/" + diff --git a/test/monarch/mock_monarch.F90 b/test/monarch/mock_monarch.F90 index 23cc6cf7b..1ef914412 100644 --- a/test/monarch/mock_monarch.F90 +++ b/test/monarch/mock_monarch.F90 @@ -192,6 +192,7 @@ program mock_monarch_t deallocate(camp_input_file) deallocate(output_path) deallocate(output_file_title) + call camp_interface%finalize() deallocate(camp_interface) call camp_mpi_finalize() diff --git a/test/monarch/run.sh b/test/monarch/run.sh index 93cd97a19..3a9b75404 100644 --- a/test/monarch/run.sh +++ b/test/monarch/run.sh @@ -19,8 +19,8 @@ make_run() { cd ../../build make -j 4 cd $curr_path - #python TestMonarch.py - python checkGPU.py + python TestMonarch4.py + #python checkGPU.py } make_run diff --git a/test/monarch/sbatch_run.sh b/test/monarch/sbatch_run.sh index cdc2f8ad4..1c80974fd 100644 --- a/test/monarch/sbatch_run.sh +++ b/test/monarch/sbatch_run.sh @@ -16,9 +16,7 @@ make_run(){ cd ../../build make -j 4 cd $curr_path - python TestMonarch1.py python TestMonarch2.py - python TestMonarch3.py python TestMonarch4.py } time make_run \ No newline at end of file