diff --git a/README.md b/README.md index f14619c2..8e7feb39 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ SeisFlows `Documentation` can be found on Read the Docs: https://seisflows.readthedocs.io (in development) -[![SCOPED](https://img.shields.io/endpoint?url=https://runkit.io/wangyinz/scoped/branches/master/Pyatoa)](https://github.com/SeisSCOPED/container/pkgs/container/pyatoa) +[![SCOPED](https://img.shields.io/endpoint?url=https://runkit.io/wangyinz/scoped/branches/master/adjTomo)](https://github.com/SeisSCOPED/container/pkgs/container/adjtomo) [![Documentation Status](https://readthedocs.org/projects/seisflows/badge/?version=latest)](https://seisflows.readthedocs.io/en/latest/?badge=latest) --- diff --git a/docs/2D_example_walkthrough.rst b/docs/2D_example_walkthrough.rst new file mode 100644 index 00000000..bc79170e --- /dev/null +++ b/docs/2D_example_walkthrough.rst @@ -0,0 +1,1349 @@ +2D Example Walkthrough +====================== + +The notebook below details a walkthrough of Example \#1 shown in the `SPECFEM2D example \#1 `__. This is meant for those who want to understand what is going on under the hood. You are welcome to follow along on your workstation. The following Table of Contents outlines the steps we will take in this tutorial: + +.. warning:: + Navigation links will not work outside of Jupyter. Please use the navigation bar to the left. + +1. `Setup SPECFEM2D <#1.-Setup-SPECFEM2D>`__ + + a. `Download and compile + codebase <#1a.-Download-and-compile-codebase*>`__ + b. `Create a separate SPECFEM2D working + directory <#1b.-Create-a-separate-SPECFEM2D-working-directory>`__ + c. `Generate initial and target + models <#1c.-Generate-initial-and-target-models>`__ + +2. `Initialize SeisFlows (SF) <#2.-Initialize-SeisFlows-(SF)>`__ + + a. `SeisFlows working directory and parameter + file <#2a.-SF-working-directory-and-parameter-file>`__ + +3. `Run SeisFlows <#2.-Run-SeisFlows>`__ + + a. `Forward simulations <#3a.-Forward-simulations>`__ + b. `Exploring the SeisFlows directory + structure <#3b.-Exploring-the-SF-directory-structure>`__ + c. `Adjoint simulations <#3c.-Adjoint-simulations>`__ + d. `Line search and model + update <#3d.-Line-search-and-model-update>`__ + +4. `Conclusions <#4.-Conclusions>`__ + +1. Setup SPECFEM2D +~~~~~~~~~~~~~~~~~~ + +1a. Download and compile codebase (optional) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + **NOTE**: If you have already downloaded and compiled SPECFEM2D, you + can skip most of this subsection (1a). However you will need to edit + the first two paths in the following cell (WORKDIR and + SPECFEM2D_ORIGINAL), and execute the path structure defined in the + cell. + +First we’ll download and compile SPECFEM2D to generate the binaries +necessary to run our simulations. We will then populate a new SPECFEM2D +working directory that will be used by SeisFlows. We’ll use to Python OS +module to do our filesystem processes just to keep everything in Python, +but this can easily be accomplished in bash. + +.. code:: ipython3 + + import os + import glob + import shutil + import numpy as np + +.. code:: ipython3 + + # vvv USER MUST EDIT THE FOLLOWING PATHS vvv + WORKDIR = "/home/bchow/Work/scratch" + SPECFEM2D = "/home/bchow/REPOSITORIES/specfem2d" + # where WORKDIR: points to your own working directory + # and SPECFEM2D: points to an existing specfem2D repository if available (if not set as '') + # ^^^ USER MUST EDIT THE FOLLOWING PATHS ^^^ + # ====================================================================================================== + + # Distribute the necessary file structure of the SPECFEM2D repository that we will downloaded/reference + SPECFEM2D_ORIGINAL = os.path.join(WORKDIR, "specfem2d") + SPECFEM2D_BIN_ORIGINAL = os.path.join(SPECFEM2D_ORIGINAL, "bin") + SPECFEM2D_DATA_ORIGINAL = os.path.join(SPECFEM2D_ORIGINAL, "DATA") + TAPE_2007_EXAMPLE = os.path.join(SPECFEM2D_ORIGINAL, "EXAMPLES", "Tape2007") + + # The SPECFEM2D working directory that we will create separate from the downloaded repo + SPECFEM2D_WORKDIR = os.path.join(WORKDIR, "specfem2d_workdir") + SPECFEM2D_BIN = os.path.join(SPECFEM2D_WORKDIR, "bin") + SPECFEM2D_DATA = os.path.join(SPECFEM2D_WORKDIR, "DATA") + SPECFEM2D_OUTPUT = os.path.join(SPECFEM2D_WORKDIR, "OUTPUT_FILES") + + # Pre-defined locations of velocity models we will generate using the solver + SPECFEM2D_MODEL_INIT = os.path.join(SPECFEM2D_WORKDIR, "OUTPUT_FILES_INIT") + SPECFEM2D_MODEL_TRUE = os.path.join(SPECFEM2D_WORKDIR, "OUTPUT_FILES_TRUE") + +.. code:: ipython3 + + # Download SPECFEM2D from GitHub, devel branch for latest codebase OR symlink from existing repo + if not os.path.exists(WORKDIR): + os.makedirs(WORKDIR) + os.chdir(WORKDIR) + + if os.path.exists("specfem2d"): + print("SPECFEM2D repository already found, you may skip this subsection") + pass + elif os.path.exists(SPECFEM2D): + print("Existing SPECMFE2D respository found, symlinking to working directory") + os.symlink(SPECFEM2D, "./specfem2d") + else: + print("Cloning respository from GitHub") + ! git clone --recursive --branch devel https://github.com/geodynamics/specfem2d.git + + +.. parsed-literal:: + + Existing SPECMFE2D respository found, symlinking to working directory + + +.. code:: ipython3 + + # Compile SPECFEM2D to generate the Makefile + os.chdir(SPECFEM2D_ORIGINAL) + if not os.path.exists("./config.log"): + os.system("./configure") + +.. code:: ipython3 + + # Run make to generate SPECFEM2D binaries + if not os.path.exists("bin"): + os.system("make all") + +.. code:: ipython3 + + # Check out the binary files that have been created + os.chdir(SPECFEM2D_ORIGINAL) + ! pwd + ! ls bin/ + + +.. parsed-literal:: + + /home/bchow/REPOSITORIES/specfem2d + xadj_seismogram xconvolve_source_timefunction xspecfem2D + xcheck_quality_external_mesh xmeshfem2D xsum_kernels + xcombine_sem xsmooth_sem + + +1b. Create a separate SPECFEM2D working directory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Next we’ll create a new SPECFEM2D working directory, separate from the +original repository. The intent here is to isolate the original +SPECFEM2D repository from our working state, to protect it from things +like accidental file deletions or manipulations. This is not a mandatory +step for using SeisFlows, but it helps keep file structure clean in the +long run, and is the SeisFlows3 dev team’s preferred method of using +SPECFEM. + +.. note:: + All SPECFEM2D/3D/3D_GLOBE need to run successfully are the bin/, DATA/, and OUTPUT_FILES/ directories. Everything else in the repository is not mandatory for running binaries. + +In this tutorial we will be using the `Tape2007 example +problem `__ +to define our **DATA/** directory (last tested 8/15/22, bdba4389). + +.. code:: ipython3 + + # Incase we've run this docs page before, delete the working directory before remaking + if os.path.exists(SPECFEM2D_WORKDIR): + shutil.rmtree(SPECFEM2D_WORKDIR) + + os.mkdir(SPECFEM2D_WORKDIR) + os.chdir(SPECFEM2D_WORKDIR) + + # Copy the binary files incase we update the source code. These can also be symlinked. + shutil.copytree(SPECFEM2D_BIN_ORIGINAL, "bin") + + # Copy the DATA/ directory because we will be making edits here frequently and it's useful to + # retain the original files for reference. We will be running one of the example problems: Tape2007 + shutil.copytree(os.path.join(TAPE_2007_EXAMPLE, "DATA"), "DATA") + + ! pwd + ! ls + + +.. parsed-literal:: + + /home/bchow/Work/scratch/specfem2d_workdir + bin DATA + + +.. code:: ipython3 + + # Run the Tape2007 example to make sure SPECFEM2D is working as expected + os.chdir(TAPE_2007_EXAMPLE) + ! ./run_this_example.sh > output_log.txt + + assert(os.path.exists("OUTPUT_FILES/forward_image000004800.jpg")), \ + (f"Example did not run, the remainder of this docs page will likely not work." + f"Please check the following directory: {TAPE_2007_EXAMPLE}") + + ! tail output_log.txt + + +.. parsed-literal:: + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + D a t e : 16 - 08 - 2022 T i m e : 14:26:37 + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + + see results in directory: OUTPUT_FILES/ + + done + Tue Aug 16 02:26:37 PM AKDT 2022 + + +-------------- + +Now we need to manually set up our SPECFEM2D working directory. As +mentioned in the previous cell, the only required elements of this +working directory are the following (these files will form the basis for +how SeisFlows3 operates within the SPECFEM2D framework): + +1. **bin/** directory containing SPECFEM2D binaries +2. **DATA/** directory containing SOURCE and STATION files, as well as a + SPECFEM2D Par_file +3. \__OUTPUT_FILES/proc??????_*.bin_\_ files which define the starting + (and target) models + +.. note:: + This file structure is the same for all versions of SPECFEM (2D/3D/3D_GLOBE) + +.. code:: ipython3 + + # First we will set the correct SOURCE and STATION files. + # This is the same task as shown in ./run_this_example.sh + os.chdir(SPECFEM2D_DATA) + + # Symlink source 001 as our main source + if os.path.exists("SOURCE"): + os.remove("SOURCE") + os.symlink("SOURCE_001", "SOURCE") + + # Copy the correct Par_file so that edits do not affect the original file + if os.path.exists("Par_file"): + os.remove("Par_file") + shutil.copy("Par_file_Tape2007_onerec", "Par_file") + + ! ls + + +.. parsed-literal:: + + interfaces_Tape2007.dat SOURCE_003 SOURCE_012 SOURCE_021 + model_velocity.dat_checker SOURCE_004 SOURCE_013 SOURCE_022 + Par_file SOURCE_005 SOURCE_014 SOURCE_023 + Par_file_Tape2007_132rec_checker SOURCE_006 SOURCE_015 SOURCE_024 + Par_file_Tape2007_onerec SOURCE_007 SOURCE_016 SOURCE_025 + proc000000_model_velocity.dat_input SOURCE_008 SOURCE_017 STATIONS + SOURCE SOURCE_009 SOURCE_018 STATIONS_checker + SOURCE_001 SOURCE_010 SOURCE_019 + SOURCE_002 SOURCE_011 SOURCE_020 + + +1c. Generate initial and target models +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Since we’re doing a synthetic-synthetic inversion, we need to manually +set up the velocity models with which we generate our synthetic +waveforms. The naming conventions for these models are: + +1. **MODEL_INIT:** The initial or starting model. Used to generate the + actual synthetic seismograms. This is considered M00. +2. **MODEL_TRUE:** The target or true model. Used to generate ‘data’ + (also synthetic). This is the reference model that our inversion is + trying to resolve. + +The starting model is defined as a homogeneous halfspace uin the +Tape2007 example problem. We will need to run both ``xmeshfem2D`` and +``xspecfem2D`` to generate the required velocity model database files. +We will generate our target model by slightly perturbing the parameters +of the initial model. + +.. note:: + We can use the SeisFlows3 command line option `seisflows sempar` to directly edit the SPECFEM2D Par_file in the command line. This will work for the SPECFEM3D Par_file as well. + +.. code:: ipython3 + + os.chdir(SPECFEM2D_DATA) + + # Ensure that SPECFEM2D outputs the velocity model in the expected binary format + ! seisflows sempar setup_with_binary_database 1 # allow creation of .bin files + ! seisflows sempar save_model binary # output model in .bin database format + ! seisflows sempar save_ascii_kernels .false. # output kernels in .bin format, not ASCII + + +.. parsed-literal:: + + setup_with_binary_database: 0 -> 1 + SAVE_MODEL: default -> binary + save_ASCII_kernels: .true. -> .false. + + +.. code:: ipython3 + + # SPECFEM requires that we create the OUTPUT_FILES directory before running + os.chdir(SPECFEM2D_WORKDIR) + + if os.path.exists(SPECFEM2D_OUTPUT): + shutil.rmtree(SPECFEM2D_OUTPUT) + + os.mkdir(SPECFEM2D_OUTPUT) + + ! ls + + +.. parsed-literal:: + + bin DATA OUTPUT_FILES + + +.. code:: ipython3 + + # GENERATE MODEL_INIT + os.chdir(SPECFEM2D_WORKDIR) + + # Run the mesher and solver to generate our initial model + ! ./bin/xmeshfem2D > OUTPUT_FILES/mesher_log.txt + ! ./bin/xspecfem2D > OUTPUT_FILES/solver_log.txt + + # Move the model files (*.bin) into the OUTPUT_FILES directory, where SeisFlows3 expects them + ! mv DATA/*bin OUTPUT_FILES + + # Make sure we don't overwrite this initial model when creating our target model in the next step + ! mv OUTPUT_FILES OUTPUT_FILES_INIT + + ! head OUTPUT_FILES_INIT/solver_log.txt + ! tail OUTPUT_FILES_INIT/solver_log.txt + + +.. parsed-literal:: + + + ********************************************** + **** Specfem 2-D Solver - serial version **** + ********************************************** + + Running Git version of the code corresponding to commit cf89366717d9435985ba852ef1d41a10cee97884 + dating From Date: Mon Nov 29 23:20:51 2021 -0800 + + + NDIM = 2 + ------------------------------------------------------------------------------- + Program SPECFEM2D: + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + Tape-Liu-Tromp (GJI 2007) + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + D a t e : 16 - 08 - 2022 T i m e : 14:26:52 + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + + +-------------- + +Now we want to perturb the initial model to create our target model +(**MODEL_TRUE**). The seisflows command line subargument +``seisflows sempar velocity_model`` will let us view and edit the +velocity model. You can also do this manually by editing the Par_file +directly. + +.. code:: ipython3 + + # GENERATE MODEL_TRUE + os.chdir(SPECFEM2D_DATA) + + # Edit the Par_file by increasing velocities by ~10% + ! seisflows sempar velocity_model '1 1 2600.d0 5900.d0 3550.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0' + + +.. parsed-literal:: + + VELOCITY_MODEL: + + 1 1 2600.d0 5800.d0 3500.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0 + -> + 1 1 2600.d0 5900.d0 3550.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0 + + +.. code:: ipython3 + + # Re-run the mesher and solver to generate our target velocity model + os.chdir(SPECFEM2D_WORKDIR) + + # Make sure the ./OUTPUT_FILES directory exists since we moved the old one + if os.path.exists(SPECFEM2D_OUTPUT): + shutil.rmtree(SPECFEM2D_OUTPUT) + os.mkdir(SPECFEM2D_OUTPUT) + + # Run the binaries to generate MODEL_TRUE + ! ./bin/xmeshfem2D > OUTPUT_FILES/mesher_log.txt + ! ./bin/xspecfem2D > OUTPUT_FILES/solver_log.txt + + # Move all the relevant files into OUTPUT_FILES + ! mv ./DATA/*bin OUTPUT_FILES + ! mv OUTPUT_FILES OUTPUT_FILES_TRUE + + ! head OUTPUT_FILES_INIT/solver_log.txt + ! tail OUTPUT_FILES_INIT/solver_log.txt + + +.. parsed-literal:: + + + ********************************************** + **** Specfem 2-D Solver - serial version **** + ********************************************** + + Running Git version of the code corresponding to commit cf89366717d9435985ba852ef1d41a10cee97884 + dating From Date: Mon Nov 29 23:20:51 2021 -0800 + + + NDIM = 2 + ------------------------------------------------------------------------------- + Program SPECFEM2D: + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + Tape-Liu-Tromp (GJI 2007) + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + D a t e : 16 - 08 - 2022 T i m e : 14:26:52 + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + + +.. code:: ipython3 + + # Great, we have all the necessary SPECFEM files to run our SeisFlows inversion! + ! ls + + +.. parsed-literal:: + + bin DATA OUTPUT_FILES_INIT OUTPUT_FILES_TRUE + + +2. Initialize SeisFlows (SF) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this Section we will look at a SeisFlows working directory, parameter +file, and working state. + +2a. SeisFlows working directory and parameter file +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As with SPECFEM, SeisFlows requires a parameter file +(**parameters.yaml**) that controls how an automated workflow will +proceed. Because SeisFlows is modular, there are a large number of +potential parameters which may be present in a SeisFlows parameter file, +as each sub-module may have its own set of unique parameters. + +In contrast to SPECFEM’s method of listing all available parameters and +leaving it up the User to determine which ones are relevant to them, +SeisFlows dynamically builds its parameter file based on User inputs. In +this subsection we will use the built-in SeisFlows command line tools to +generate and populate the parameter file. + +.. note:: + See the `parameter file documentation page `__ for a more in depth exploration of this central SeisFlows file. + +In the previous section we saw the ``sempar`` command in action. We can +use the ``-h`` or help flag to list all available SiesFlows3 command +line commands. + +.. code:: ipython3 + + ! seisflows -h + + +.. parsed-literal:: + + usage: seisflows [-h] [-w [WORKDIR]] [-p [PARAMETER_FILE]] + {setup,configure,swap,init,submit,resume,restart,clean,par,sempar,check,print,reset,debug,examples} + ... + + ================================================================================ + + SeisFlows: Waveform Inversion Package + + ================================================================================ + + optional arguments: + -h, --help show this help message and exit + -w [WORKDIR], --workdir [WORKDIR] + The SeisFlows working directory, default: cwd + -p [PARAMETER_FILE], --parameter_file [PARAMETER_FILE] + Parameters file, default: 'parameters.yaml' + + command: + Available SeisFlows arguments and their intended usages + + setup Setup working directory from scratch + configure Fill parameter file with defaults + swap Swap module parameters in an existing parameter file + init Initiate working environment + submit Submit initial workflow to system + resume Re-submit previous workflow to system + restart Remove current environment and submit new workflow + clean Remove files relating to an active working environment + par View and edit SeisFlows parameter file + sempar View and edit SPECFEM parameter file + check Check state of an active environment + print Print information related to an active environment + reset Reset modules within an active state + debug Start interactive debug environment + examples Look at and run pre-configured example problems + + 'seisflows [command] -h' for more detailed descriptions of each command. + + +.. code:: ipython3 + + # The command 'setup' creates the 'parameters.yaml' file that controls all of SeisFlows + # the '-f' flag removes any exist 'parameters.yaml' file that might be in the directory + os.chdir(WORKDIR) + ! seisflows setup -f + ! ls + + +.. parsed-literal:: + + creating parameter file: parameters.yaml + parameters.yaml sflog.txt specfem2d specfem2d_workdir + + +.. code:: ipython3 + + # Let's have a look at this file, which has not yet been populated + ! cat parameters.yaml + + +.. parsed-literal:: + + # ////////////////////////////////////////////////////////////////////////////// + # + # SeisFlows YAML Parameter File + # + # ////////////////////////////////////////////////////////////////////////////// + # + # Modules correspond to the structure of the source code, and determine + # SeisFlows' behavior at runtime. Each module requires its own sub-parameters. + # + # .. rubric:: + # - To determine available options for modules listed below, run: + # > seisflows print modules + # - To auto-fill with docstrings and default values (recommended), run: + # > seisflows configure + # - To set values as NoneType, use: null + # - To set values as infinity, use: inf + # + # MODULES + # /////// + # workflow (str): The types and order of functions for running SeisFlows + # system (str): Computer architecture of the system being used + # solver (str): External numerical solver to use for waveform simulations + # preprocess (str): Preprocessing schema for waveform data + # optimize (str): Optimization algorithm for the inverse problem + # ============================================================================== + workflow: forward + system: workstation + solver: specfem2d + preprocess: default + optimize: gradient + + +.. code:: ipython3 + + # We can use the `seisflows print modules` command to list out the available options + ! seisflows print modules + + +.. parsed-literal:: + + SEISFLOWS MODULES + ///////////////// + '-': module, '*': class + + - workflow + * forward + * inversion + * migration + - system + * chinook + * cluster + * frontera + * lsf + * maui + * slurm + * workstation + - solver + * specfem + * specfem2d + * specfem3d + * specfem3d_globe + - preprocess + * default + * pyaflowa + - optimize + * LBFGS + * NLCG + * gradient + + +.. code:: ipython3 + + # For this example, we can use most of the default modules, however we need to + # change the SOLVER module to let SeisFlows know we're using SPECFEM2D (as opposed to 3D) + ! seisflows par workflow inversion + ! cat parameters.yaml + + +.. parsed-literal:: + + workflow: forward -> inversion + # ////////////////////////////////////////////////////////////////////////////// + # + # SeisFlows YAML Parameter File + # + # ////////////////////////////////////////////////////////////////////////////// + # + # Modules correspond to the structure of the source code, and determine + # SeisFlows' behavior at runtime. Each module requires its own sub-parameters. + # + # .. rubric:: + # - To determine available options for modules listed below, run: + # > seisflows print modules + # - To auto-fill with docstrings and default values (recommended), run: + # > seisflows configure + # - To set values as NoneType, use: null + # - To set values as infinity, use: inf + # + # MODULES + # /////// + # workflow (str): The types and order of functions for running SeisFlows + # system (str): Computer architecture of the system being used + # solver (str): External numerical solver to use for waveform simulations + # preprocess (str): Preprocessing schema for waveform data + # optimize (str): Optimization algorithm for the inverse problem + # ============================================================================== + workflow: inversion + system: workstation + solver: specfem2d + preprocess: default + optimize: gradient + + +-------------- + +The ``seisflows configure`` command populates the parameter file based +on the chosen modules. SeisFlows will attempt to fill in all parameters +with reasonable default values. Docstrings above each module show +descriptions and available options for each of these parameters. + +In the follownig cell we will use the ``seisflows par`` command to edit +the parameters.yaml file directly, replacing some default parameters +with our own values. Comments next to each evaluation describe the +choice for each. + +.. code:: ipython3 + + ! seisflows configure + ! head --lines=50 parameters.yaml + + +.. parsed-literal:: + + # ////////////////////////////////////////////////////////////////////////////// + # + # SeisFlows YAML Parameter File + # + # ////////////////////////////////////////////////////////////////////////////// + # + # Modules correspond to the structure of the source code, and determine + # SeisFlows' behavior at runtime. Each module requires its own sub-parameters. + # + # .. rubric:: + # - To determine available options for modules listed below, run: + # > seisflows print modules + # - To auto-fill with docstrings and default values (recommended), run: + # > seisflows configure + # - To set values as NoneType, use: null + # - To set values as infinity, use: inf + # + # MODULES + # /////// + # workflow (str): The types and order of functions for running SeisFlows + # system (str): Computer architecture of the system being used + # solver (str): External numerical solver to use for waveform simulations + # preprocess (str): Preprocessing schema for waveform data + # optimize (str): Optimization algorithm for the inverse problem + # ============================================================================== + workflow: inversion + system: workstation + solver: specfem2d + preprocess: default + optimize: gradient + # ============================================================================= + # + # Forward Workflow + # ---------------- + # Run forward solver in parallel and (optionally) calculate + # data-synthetic misfit and adjoint sources. + # + # Parameters + # ---------- + # :type modules: list of module + # :param modules: instantiated SeisFlows modules which should have been + # generated by the function `seisflows.config.import_seisflows` with a + # parameter file generated by seisflows.configure + # :type data_case: str + # :param data_case: How to address 'data' in the workflow, available options: + # 'data': real data will be provided by the user in + # `path_data/{source_name}` in the same format that the solver will + # produce synthetics (controlled by `solver.format`) OR + # synthetic': 'data' will be generated as synthetic seismograms using + # a target model provided in `path_model_true`. If None, workflow will + + +.. code:: ipython3 + + # EDIT THE SEISFLOWS PARAMETER FILE + ! seisflows par ntask 3 # set the number of sources/events to use + ! seisflows par materials elastic # update Vp and Vs during inversion + ! seisflows par end 2 # final iteration -- we will only run 1 + ! seisflows par data_case synthetic # synthetic-synthetic means we need both INIT and TRUE models + ! seisflows par components Y # this default example creates Y-component seismograms + ! seisflows par step_count_max 5 # limit the number of steps in the line search + + # Use Python syntax here to access path constants + os.system(f"seisflows par path_specfem_bin {SPECFEM2D_BIN}") # set path to SPECFEM2D binaries + os.system(f"seisflows par path_specfem_data {SPECFEM2D_DATA}") # set path to SEPCFEM2D DATA/ + os.system(f"seisflows par path_model_init {SPECFEM2D_MODEL_INIT}") # set path to INIT model + os.system(f"seisflows par path_model_true {SPECFEM2D_MODEL_TRUE}") # set path to TRUE model + + +.. parsed-literal:: + + ntask: 1 -> 3 + materials: acoustic -> elastic + end: 1 -> 2 + data_case: data -> synthetic + components: ZNE -> Y + step_count_max: 10 -> 5 + path_specfem_bin: null -> /home/bchow/Work/scratch/specfem2d_workdir/bin + path_specfem_data: null -> /home/bchow/Work/scratch/specfem2d_workdir/DATA + path_model_init: null -> + /home/bchow/Work/scratch/specfem2d_workdir/OUTPUT_FILES_INIT + path_model_true: null -> + /home/bchow/Work/scratch/specfem2d_workdir/OUTPUT_FILES_TRUE + + + + +.. parsed-literal:: + + 0 + + + +-------------- + +One last thing, we will need to edit the SPECFEM2D Par_file parameter +``MODEL`` such that ``xmeshfem2d`` reads our pre-built velocity models +(*.bin files) rather than the meshing parameters defined in the +Par_file. + +.. code:: ipython3 + + os.chdir(SPECFEM2D_DATA) + ! seisflows sempar model gll + + +.. parsed-literal:: + + MODEL: default -> gll + + +3. Run SeisFlows +~~~~~~~~~~~~~~~~ + +In this Section we will run SeisFlows to generate synthetic seismograms, +kernels, a gradient, and an updated velocity model. + +3a. Forward simulations +^^^^^^^^^^^^^^^^^^^^^^^ + +SeisFlows is an automated workflow tool, such that once we run +``seisflows submit`` we should not need to intervene in the workflow. +However the package does allow the User flexibility in how they want the +workflow to behave. + +For example, we can run our workflow in stages by taking advantage of +the ``stop_after`` parameter. As its name suggests, ``stop_after`` +allows us to stop a workflow prematurely so that we may stop and look at +results, or debug a failing workflow. + +The ``seisflows print flow`` command tells us what functions we can use +for the ``stop_after`` parameter. + +.. code:: ipython3 + + os.chdir(WORKDIR) + ! seisflows print tasks + + +.. parsed-literal:: + + SEISFLOWS WORKFLOW TASK LIST + //////////////////////////// + Task list for + + 1: evaluate_initial_misfit + 2: run_adjoint_simulations + 3: postprocess_event_kernels + 4: evaluate_gradient_from_kernels + 5: initialize_line_search + 6: perform_line_search + 7: finalize_iteration + + +-------------- + +In the Inversion workflow, the tasks listed are described as follows: + +1. **evaluate_initial_misfit:** + + a. Prepare data for inversion by either copying data from disk or + generating ‘synthetic data’ with MODEL_TRUE + b. Call numerical solver to run forward simulations using MODEL_INIT, + generating synthetics + c. Evaluate the objective function by performing waveform comparisons + d. Prepare ``run_adjoint_simulations`` step by generating adjoint + sources and auxiliary files + +2. **run_adjoint_simulations:** Call numerical solver to run adjoint + simulation, generating kernels +3. **postprocess_event_kernels:** Combine all event kernels into a + misfit kernel. +4. **evaluate_gradient_from_kernels:** Smooth and mask the misfit kernel + to create the gradient +5. **initialize_line_search:** Call on the optimization library to scale + the gradient by a step length to compute the search direction. + Prepare file structure for line search. +6. **perform_line_search:** Perform a line search by algorithmically + scaling the gradient and evaluating the misfit function (forward + simulations and misfit quantification) until misfit is acceptably + reduced. +7. **finalize_iteration:** Run any finalization steps such as saving + traces, kernels, gradients and models to disk, setting up SeisFlows3 + for any subsequent iterations. Clean the scratch/ directory in + preparation for subsequent iterations + +Let’s set the ``stop_after`` argument to **evaluate_initial_misfit**, +this will halt the workflow after the intialization step. + +.. code:: ipython3 + + ! seisflows par stop_after evaluate_initial_misfit + + +.. parsed-literal:: + + stop_after: null -> evaluate_initial_misfit + + +-------------- + +Now let’s run SeisFlows. There are two ways to do this: ``submit`` and +``restart`` + +1. ``seisflows submit`` is used to run new workflows and resume stopped + or failed workflows. +2. The ``restart`` command is simply a convenience function that runs + ``clean`` (to remove an active working state) and ``submit`` (to + submit a fresh workflow). + +Since this is our first run, we’ll use ``seisflows submit``. + +.. code:: ipython3 + + ! seisflows submit + + +.. parsed-literal:: + + 2022-08-16 14:32:48 (I) | + ================================================================================ + SETTING UP INVERSION WORKFLOW + ================================================================================ + 2022-08-16 14:32:55 (D) | running setup for module 'system.Workstation' + 2022-08-16 14:32:57 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/sflog_001.txt + 2022-08-16 14:32:57 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/parameters_001.yaml + 2022-08-16 14:32:57 (D) | running setup for module 'solver.Specfem2D' + 2022-08-16 14:32:57 (I) | initializing 3 solver directories + 2022-08-16 14:32:57 (D) | initializing solver directory source: 001 + 2022-08-16 14:33:04 (D) | linking source '001' as 'mainsolver' + 2022-08-16 14:33:04 (D) | initializing solver directory source: 002 + 2022-08-16 14:33:09 (D) | initializing solver directory source: 003 + 2022-08-16 14:33:16 (D) | running setup for module 'preprocess.Default' + 2022-08-16 14:33:16 (D) | running setup for module 'optimize.Gradient' + 2022-08-16 14:33:17 (I) | no optimization checkpoint found, assuming first run + 2022-08-16 14:33:17 (I) | re-loading optimization module from checkpoint + 2022-08-16 14:33:17 (I) | + //////////////////////////////////////////////////////////////////////////////// + RUNNING ITERATION 01 + //////////////////////////////////////////////////////////////////////////////// + 2022-08-16 14:33:17 (I) | + ================================================================================ + RUNNING INVERSION WORKFLOW + ================================================================================ + 2022-08-16 14:33:17 (I) | + //////////////////////////////////////////////////////////////////////////////// + EVALUATING MISFIT FOR INITIAL MODEL + //////////////////////////////////////////////////////////////////////////////// + 2022-08-16 14:33:17 (I) | checking initial model parameters + 2022-08-16 14:33:17 (I) | 5800.00 <= vp <= 5800.00 + 2022-08-16 14:33:17 (I) | 2600.00 <= rho <= 2600.00 + 2022-08-16 14:33:17 (I) | 3500.00 <= vs <= 3500.00 + 2022-08-16 14:33:17 (I) | checking true/target model parameters + 2022-08-16 14:33:17 (I) | 5900.00 <= vp <= 5900.00 + 2022-08-16 14:33:17 (I) | 2600.00 <= rho <= 2600.00 + 2022-08-16 14:33:17 (I) | 3550.00 <= vs <= 3550.00 + 2022-08-16 14:33:17 (I) | preparing observation data for source 001 + 2022-08-16 14:33:17 (I) | running forward simulation w/ target model for 001 + 2022-08-16 14:33:21 (I) | evaluating objective function for source 001 + 2022-08-16 14:33:21 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:33:25 (D) | quantifying misfit with 'Default' + 2022-08-16 14:33:25 (I) | preparing observation data for source 002 + 2022-08-16 14:33:25 (I) | running forward simulation w/ target model for 002 + 2022-08-16 14:33:29 (I) | evaluating objective function for source 002 + 2022-08-16 14:33:29 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:33:33 (D) | quantifying misfit with 'Default' + 2022-08-16 14:33:33 (I) | preparing observation data for source 003 + 2022-08-16 14:33:33 (I) | running forward simulation w/ target model for 003 + 2022-08-16 14:33:36 (I) | evaluating objective function for source 003 + 2022-08-16 14:33:36 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:33:40 (D) | quantifying misfit with 'Default' + 2022-08-16 14:33:40 (I) | stop workflow at `stop_after`: evaluate_initial_misfit + + +.. note:: + For a detailed exploration of a SeisFlows working directory, see the `working directory `__ documentation page where we explain each of the files and directories that have been generated during this workflow. Below we just look at two files which are required for our adjoint simulation, the adjoint sources (.adj) and STATIONS_ADJOINT file + +.. code:: ipython3 + + # The adjoint source is created in the same format as the synthetics (two-column ASCII) + ! head scratch/solver/001/traces/adj/AA.S0001.BXY.adj + + +.. parsed-literal:: + + -48.0000000 0.0000000 + -47.9400000 0.0000000 + -47.8800000 0.0000000 + -47.8200000 0.0000000 + -47.7600000 0.0000000 + -47.7000000 0.0000000 + -47.6400000 0.0000000 + -47.5800000 0.0000000 + -47.5200000 0.0000000 + -47.4600000 0.0000000 + + +3b. Adjoint simulations +^^^^^^^^^^^^^^^^^^^^^^^ + +Now that we have all the required files for running an adjoint +simulation (*.adj waveforms and STATIONS_ADJOINT file), we can continue +with the SeisFlows3 Inversion workflow. No need to edit the Par_file or +anything like that, SeisFlows3 will take care of that under the hood. We +simply need to tell the workflow (via the parameters.yaml file) to +``resume_from`` the correct function. We can have a look at these +functions again: + +.. code:: ipython3 + + ! seisflows print tasks + + +.. parsed-literal:: + + SEISFLOWS WORKFLOW TASK LIST + //////////////////////////// + Task list for + + 1: evaluate_initial_misfit + 2: run_adjoint_simulations + 3: postprocess_event_kernels + 4: evaluate_gradient_from_kernels + 5: initialize_line_search + 6: perform_line_search + 7: finalize_iteration + + +.. code:: ipython3 + + # We'll stop just before the line search so that we can take a look at the files + # generated during the middle tasks + ! seisflows par stop_after evaluate_gradient_from_kernels + + +.. parsed-literal:: + + stop_after: evaluate_initial_misfit -> evaluate_gradient_from_kernels + + +.. code:: ipython3 + + # We can use the `seisflows submit` command to continue an active workflow + # The state file created during the first run will tell the workflow to resume from the stopped point in the workflow + ! seisflows submit + + +.. parsed-literal:: + + 2022-08-16 14:36:42 (D) | setting iteration==1 from state file + 2022-08-16 14:36:42 (I) | + ================================================================================ + SETTING UP INVERSION WORKFLOW + ================================================================================ + 2022-08-16 14:36:48 (D) | running setup for module 'system.Workstation' + 2022-08-16 14:36:51 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/sflog_002.txt + 2022-08-16 14:36:51 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/parameters_002.yaml + 2022-08-16 14:36:51 (D) | running setup for module 'solver.Specfem2D' + 2022-08-16 14:36:51 (I) | initializing 3 solver directories + 2022-08-16 14:36:51 (D) | running setup for module 'preprocess.Default' + 2022-08-16 14:36:52 (D) | running setup for module 'optimize.Gradient' + 2022-08-16 14:36:53 (I) | re-loading optimization module from checkpoint + 2022-08-16 14:36:54 (I) | re-loading optimization module from checkpoint + 2022-08-16 14:36:54 (I) | + //////////////////////////////////////////////////////////////////////////////// + RUNNING ITERATION 01 + //////////////////////////////////////////////////////////////////////////////// + 2022-08-16 14:36:54 (I) | + ================================================================================ + RUNNING INVERSION WORKFLOW + ================================================================================ + 2022-08-16 14:36:54 (I) | 'evaluate_initial_misfit' has already been run, skipping + 2022-08-16 14:36:54 (I) | + //////////////////////////////////////////////////////////////////////////////// + EVALUATING EVENT KERNELS W/ ADJOINT SIMULATIONS + //////////////////////////////////////////////////////////////////////////////// + 2022-08-16 14:36:54 (I) | running SPECFEM executable bin/xspecfem2D, log to 'adj_solver.log' + 2022-08-16 14:37:05 (D) | renaming output event kernels: 'alpha' -> 'vp' + 2022-08-16 14:37:05 (D) | renaming output event kernels: 'beta' -> 'vs' + 2022-08-16 14:37:05 (I) | running SPECFEM executable bin/xspecfem2D, log to 'adj_solver.log' + 2022-08-16 14:37:16 (D) | renaming output event kernels: 'alpha' -> 'vp' + 2022-08-16 14:37:16 (D) | renaming output event kernels: 'beta' -> 'vs' + 2022-08-16 14:37:18 (I) | running SPECFEM executable bin/xspecfem2D, log to 'adj_solver.log' + 2022-08-16 14:37:29 (D) | renaming output event kernels: 'alpha' -> 'vp' + 2022-08-16 14:37:29 (D) | renaming output event kernels: 'beta' -> 'vs' + 2022-08-16 14:37:30 (I) | + //////////////////////////////////////////////////////////////////////////////// + GENERATING/PROCESSING MISFIT KERNEL + //////////////////////////////////////////////////////////////////////////////// + 2022-08-16 14:37:30 (I) | combining event kernels into single misfit kernel + 2022-08-16 14:37:31 (I) | scaling gradient to absolute model perturbations + 2022-08-16 14:37:32 (I) | stop workflow at `stop_after`: evaluate_gradient_from_kernels + + +-------------- + +The function **run_adjoint_simulations()** has run adjoint simulations +to generate event kernels. The functions **postprocess_event_kernels** +and **evaluate_gradient_from_kernels** will have summed and (optionally) +smoothed the kernels to recover the gradient, which will be used to +update our starting model. + + **NOTE**: Since we did not specify any smoothing lenghts + (PAR.SMOOTH_H and PAR.SMOOTH_V), no smoothing of the gradient has + occurred. + +Using the gradient-descent optimization algorithm, SeisFlows will now +compute a search direction that will be used in the line search to +search for a best fitting model which optimally reduces the objective +function. We can take a look at where SeisFlows has stored the +information relating to kernel generation and the optimization +computation. + +.. code:: ipython3 + + # Gradient evaluation files are stored here, the kernels are stored separately from the gradient incase + # the user wants to manually manipulate them + ! ls scratch/eval_grad + + +.. parsed-literal:: + + gradient kernels misfit_kernel model residuals.txt + + +.. code:: ipython3 + + # SeisFlows3 stores all kernels and gradient information as SPECFEM binary (.bin) files + ! ls scratch/eval_grad/gradient + + +.. parsed-literal:: + + proc000000_vp_kernel.bin proc000000_vs_kernel.bin + + +.. code:: ipython3 + + # Kernels are stored on a per-event basis, and summed together (sum/). If smoothing was performed, + # we would see both smoothed and unsmoothed versions of the misfit kernel + ! ls scratch/eval_grad/kernels + + +.. parsed-literal:: + + 001 002 003 + + +.. code:: ipython3 + + # We can see that some new values have been stored in prepartion for the line search, + # including g_new (current gradient) and p_new (current search direction). These are also + # stored as vector NumPy arrays (.npy files) + ! ls scratch/optimize + + +.. parsed-literal:: + + checkpoint.npz f_new.txt g_new.npz m_new.npz + + +.. code:: ipython3 + + g_new = np.load("scratch/optimize/g_new.npz") + print(g_new["vs_kernel"]) + + +.. parsed-literal:: + + [[-1.18126331e-12 2.40273470e-12 3.97045036e-11 ... 9.62017688e-11 + 4.21140102e-11 3.96825021e-12]] + + +-------------- + +3c. Line search and model update +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Let’s finish off the inversion by running through the line search, which +will generate new models using the gradient, evaluate the objective +function by running forward simulations, and comparing the evaluated +objective function with the value obtained in +**evalaute_initial_misfit**. + +Satisfactory reduction in the objective function will result in a +termination of the line search. We are using a bracketing line search +here `(Modrak et +al. 2018) `__, +which requires finding models which both increase and decrease the +misfit with respect to the initial evaluation. Therefore it takes +atleast two trial steps to complete the line search. + +.. code:: ipython3 + + ! seisflows par stop_after perform_line_search # We don't want to run the finalize_iteration argument so that we can explore the dir + + +.. parsed-literal:: + + stop_after: evaluate_gradient_from_kernels -> perform_line_search + + +.. code:: ipython3 + + ! seisflows submit + + +.. parsed-literal:: + + 2022-08-16 14:41:12 (D) | setting iteration==1 from state file + 2022-08-16 14:41:12 (I) | + ================================================================================ + SETTING UP INVERSION WORKFLOW + ================================================================================ + 2022-08-16 14:41:18 (D) | running setup for module 'system.Workstation' + 2022-08-16 14:41:21 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/sflog_003.txt + 2022-08-16 14:41:21 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/parameters_003.yaml + 2022-08-16 14:41:21 (D) | running setup for module 'solver.Specfem2D' + 2022-08-16 14:41:21 (I) | initializing 3 solver directories + 2022-08-16 14:41:22 (D) | running setup for module 'preprocess.Default' + 2022-08-16 14:41:24 (D) | running setup for module 'optimize.Gradient' + 2022-08-16 14:41:26 (I) | re-loading optimization module from checkpoint + 2022-08-16 14:41:28 (I) | re-loading optimization module from checkpoint + 2022-08-16 14:41:28 (I) | + //////////////////////////////////////////////////////////////////////////////// + RUNNING ITERATION 01 + //////////////////////////////////////////////////////////////////////////////// + 2022-08-16 14:41:28 (I) | + ================================================================================ + RUNNING INVERSION WORKFLOW + ================================================================================ + 2022-08-16 14:41:28 (I) | 'evaluate_initial_misfit' has already been run, skipping + 2022-08-16 14:41:28 (I) | 'run_adjoint_simulations' has already been run, skipping + 2022-08-16 14:41:28 (I) | 'postprocess_event_kernels' has already been run, skipping + 2022-08-16 14:41:28 (I) | 'evaluate_gradient_from_kernels' has already been run, skipping + 2022-08-16 14:41:28 (I) | initializing 'bracket'ing line search + 2022-08-16 14:41:28 (I) | enforcing max step length safeguard + 2022-08-16 14:41:28 (D) | step length(s) = 0.00E+00 + 2022-08-16 14:41:28 (D) | misfit val(s) = 1.28E-03 + 2022-08-16 14:41:28 (I) | try: first evaluation, attempt guess step length, alpha=9.08E+11 + 2022-08-16 14:41:28 (I) | try: applying initial step length safegaurd as alpha has exceeded maximum step length, alpha_new=1.44E+10 + 2022-08-16 14:41:28 (D) | overwriting initial step length, alpha_new=2.32E+09 + 2022-08-16 14:41:28 (I) | trial model 'm_try' parameters: + 2022-08-16 14:41:28 (I) | 5800.00 <= vp <= 5800.00 + 2022-08-16 14:41:28 (I) | 3244.51 <= vs <= 3790.00 + 2022-08-16 14:41:29 (I) | + LINE SEARCH STEP COUNT 01 + -------------------------------------------------------------------------------- + 2022-08-16 14:41:29 (I) | evaluating objective function for source 001 + 2022-08-16 14:41:29 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:41:33 (D) | quantifying misfit with 'Default' + 2022-08-16 14:41:33 (I) | evaluating objective function for source 002 + 2022-08-16 14:41:33 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:41:36 (D) | quantifying misfit with 'Default' + 2022-08-16 14:41:36 (I) | evaluating objective function for source 003 + 2022-08-16 14:41:36 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:41:40 (D) | quantifying misfit with 'Default' + 2022-08-16 14:41:40 (D) | misfit for trial model (f_try) == 8.65E-04 + 2022-08-16 14:41:40 (D) | step length(s) = 0.00E+00, 2.32E+09 + 2022-08-16 14:41:40 (D) | misfit val(s) = 1.28E-03, 8.65E-04 + 2022-08-16 14:41:40 (I) | try: misfit not bracketed, increasing step length using golden ratio, alpha=3.76E+09 + 2022-08-16 14:41:40 (I) | line search model 'm_try' parameters: + 2022-08-16 14:41:40 (I) | 5800.00 <= vp <= 5800.00 + 2022-08-16 14:41:40 (I) | 3086.61 <= vs <= 3969.23 + 2022-08-16 14:41:40 (I) | trial step unsuccessful. re-attempting line search + 2022-08-16 14:41:40 (I) | + LINE SEARCH STEP COUNT 02 + -------------------------------------------------------------------------------- + 2022-08-16 14:41:40 (I) | evaluating objective function for source 001 + 2022-08-16 14:41:40 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:41:44 (D) | quantifying misfit with 'Default' + 2022-08-16 14:41:44 (I) | evaluating objective function for source 002 + 2022-08-16 14:41:44 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:41:48 (D) | quantifying misfit with 'Default' + 2022-08-16 14:41:48 (I) | evaluating objective function for source 003 + 2022-08-16 14:41:48 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:41:52 (D) | quantifying misfit with 'Default' + 2022-08-16 14:41:52 (D) | misfit for trial model (f_try) == 1.73E-03 + 2022-08-16 14:41:52 (D) | step length(s) = 0.00E+00, 2.32E+09, 3.76E+09 + 2022-08-16 14:41:52 (D) | misfit val(s) = 1.28E-03, 8.65E-04, 1.73E-03 + 2022-08-16 14:41:52 (I) | try: bracket acceptable but step length unreasonable attempting to re-adjust step length alpha=1.59E+09 + 2022-08-16 14:41:52 (I) | line search model 'm_try' parameters: + 2022-08-16 14:41:52 (I) | 5800.00 <= vp <= 5800.00 + 2022-08-16 14:41:52 (I) | 3325.01 <= vs <= 3698.63 + 2022-08-16 14:41:52 (I) | trial step unsuccessful. re-attempting line search + 2022-08-16 14:41:52 (I) | + LINE SEARCH STEP COUNT 03 + -------------------------------------------------------------------------------- + 2022-08-16 14:41:52 (I) | evaluating objective function for source 001 + 2022-08-16 14:41:52 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:41:56 (D) | quantifying misfit with 'Default' + 2022-08-16 14:41:56 (I) | evaluating objective function for source 002 + 2022-08-16 14:41:56 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:42:00 (D) | quantifying misfit with 'Default' + 2022-08-16 14:42:00 (I) | evaluating objective function for source 003 + 2022-08-16 14:42:00 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:42:03 (D) | quantifying misfit with 'Default' + 2022-08-16 14:42:03 (D) | misfit for trial model (f_try) == 2.59E-03 + 2022-08-16 14:42:03 (D) | step length(s) = 0.00E+00, 1.59E+09, 2.32E+09, 3.76E+09 + 2022-08-16 14:42:03 (D) | misfit val(s) = 1.28E-03, 2.59E-03, 8.65E-04, 1.73E-03 + 2022-08-16 14:42:03 (I) | try: bracket acceptable but step length unreasonable attempting to re-adjust step length alpha=2.82E+09 + 2022-08-16 14:42:03 (I) | line search model 'm_try' parameters: + 2022-08-16 14:42:03 (I) | 5800.00 <= vp <= 5800.00 + 2022-08-16 14:42:03 (I) | 3189.77 <= vs <= 3852.13 + 2022-08-16 14:42:03 (I) | trial step unsuccessful. re-attempting line search + 2022-08-16 14:42:03 (I) | + LINE SEARCH STEP COUNT 04 + -------------------------------------------------------------------------------- + 2022-08-16 14:42:03 (I) | evaluating objective function for source 001 + 2022-08-16 14:42:03 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:42:07 (D) | quantifying misfit with 'Default' + 2022-08-16 14:42:07 (I) | evaluating objective function for source 002 + 2022-08-16 14:42:07 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:42:11 (D) | quantifying misfit with 'Default' + 2022-08-16 14:42:11 (I) | evaluating objective function for source 003 + 2022-08-16 14:42:11 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:42:15 (D) | quantifying misfit with 'Default' + 2022-08-16 14:42:15 (D) | misfit for trial model (f_try) == 3.46E-03 + 2022-08-16 14:42:15 (D) | step length(s) = 0.00E+00, 1.59E+09, 2.32E+09, 2.82E+09, 3.76E+09 + 2022-08-16 14:42:15 (D) | misfit val(s) = 1.28E-03, 2.59E-03, 8.65E-04, 3.46E-03, 1.73E-03 + 2022-08-16 14:42:15 (I) | pass: bracket acceptable and step length reasonable. returning minimum line search misfit. + 2022-08-16 14:42:15 (I) | line search model 'm_try' parameters: + 2022-08-16 14:42:15 (I) | 5800.00 <= vp <= 5800.00 + 2022-08-16 14:42:15 (I) | 3244.51 <= vs <= 3790.00 + 2022-08-16 14:42:15 (I) | trial step successful. finalizing line search + 2022-08-16 14:42:15 (I) | + FINALIZING LINE SEARCH + -------------------------------------------------------------------------------- + 2022-08-16 14:42:15 (I) | writing optimization stats + 2022-08-16 14:42:15 (I) | renaming current (new) optimization vectors as previous model (old) + 2022-08-16 14:42:15 (I) | setting accepted trial model (try) as current model (new) + 2022-08-16 14:42:15 (I) | misfit of accepted trial model is f=8.645E-04 + 2022-08-16 14:42:15 (I) | resetting line search step count to 0 + 2022-08-16 14:42:15 (I) | stop workflow at `stop_after`: perform_line_search + + +From the log statements above, we can see that the SeisFlows line search +required 4 trial steps, where it modified values of Vs (shear-wave +velocity) until satisfactory reduction in the objective function was +met. This was the final step in the iteration, and so the finalization +of the line search made preparations for a subsequent iteration. + +.. code:: ipython3 + + # We can see that we have 'new' and 'old' values for each of the optimization values, + # representing the previous model (M00) and the current model (M01). + ! ls scratch/optimize + + +.. parsed-literal:: + + alpha.txt f_new.txt f_try.txt m_new.npz output_optim.txt + checkpoint.npz f_old.txt g_old.npz m_old.npz p_old.npz + + +.. code:: ipython3 + + # The stats/ directory contains text files describing the optimization/line search + ! cat scratch/optimize/output_optim.txt + + +.. parsed-literal:: + + step_count,step_length,gradient_norm_L1,gradient_norm_L2,misfit,if_restarted,slope,theta + 04,2.323E+09,9.243E-05,1.049E-06,1.279E-03,0,8.263E-13,0.000E+00 + + +4. Conclusions +~~~~~~~~~~~~~~ + +We’ve now seen how SeisFlows runs an **Inversion** workflow using the +**Specfem2D** solver on a **Workstation** system. More or less, this is +all you need to run SeisFlows with any combination of modules. The +specificities of a system or numerical solver are already handled +internally by SeisFlows, so if you want to use Specmfe3D_Cartesian as +your solver, you would only need to run +``seisflows par solver specfem3d`` at the beginning of your workflow +(you will also need to set up your Specfem3D models, similar to what we +did for Specfem2D here). To run on a slurm system like Chinook +(University of Alaska Fairbanks), you can run +``seisflows par system chinook``. diff --git a/docs/changelog.rst b/docs/changelog.rst index 6e07fee6..0bb80957 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,11 +1,24 @@ Change Log =============== -The following list documents changes made from ``SeisFlows Legacy`` -codebase (Last updated April 18, 2022). +The following list documents changes made since v2.0.0 +(Last updated Aug. 18, 2022). Major ------ +* Reworks the entire parameter system to take advantage of Python's native init + and internal attributes, rather than setting global parameters in sys.modules. +* Removes reliance on globally accessible sys.modules, which was used so that all + modules had access to one another, but also prevented standalone imports of modules + and efficient unit testing. This has been replaced with explicit I/O for modules to + talk to each other, and shared parameters that are instantiated by a single parameter + file. +* Sys.modules was also used to checkpoint workflows, as all class instances were saved + as pickle files that could be re-loaded. However this required a specific startup + procedure anytime a workflow had to be instantiated. This has been replaced by an + explicit checkpointing system which takes advantage of simpler text files which save + only relevant checkpoint information. +* Implemented a unit/integration test structure using Pytest, for all modules and utilities. * 'seisflows' command line tool which now acts as the main entry point into package. Replaces the old sf* scripts and adds functionality to inspect the package and an active workflow. @@ -24,6 +37,29 @@ Major Moderate -------- +* Support added for SLURM-based TACC Frontera system +* All modules now have their own setup() and check() functions which help + establish a workflow before anything needs to be submitted to the system. +* System run functions no longer require global pickling into sys modules, but + instead simply pickle the required functions and their keyword arguments. This + greatly simplifies the run capabilities on external systems, and removes the need + to define specific pickling functions (copyreg) within the package. +* Solver has been separated from all model manipulations. Replaced by a new + standalone Model class which completely characterizes a Specfem model and can + read/write models as numpy vectors or as Specfem-readable binary files. +* Postprocess module has been scrapped and its functionalities absorbed by the + Solver and Workflow modules. The reasoning behind this was that the postprocess + really had no agency of its own, and was just a wrapper for solver functionality. + It may be reintroduced in the future if we find need for very complex postprocessing + steps. +* Optimization test suite now runs Rosenbrock problem (from legacy code) for all + optimization schema and tests line search capabilities. +* Optimization also checkpoints itself and the line search during a workflow, allowing + Users to restart workflows from any point effortlessly and with minimal loss of compute time. + Pyatoa preprocessing renamed to 'Pyaflowa'. All of the old Pyaflowa class functions + (previously contained in the Pyatoa package) are now exposed in the SeisFlows Pyaflowa + preprocessing class. This is so that users do not necessarily have to look at the Pyatoa + source code to understand what's going on in SeisFlows * Renamed and restructured SeisFlows working directory structure. - output.logs -> logs - output.stats -> stats @@ -55,10 +91,31 @@ Moderate getting and setting values in the SPECFEM Par_file * Separated system mid-tier classes into "Cluster" and "Workstation" to differentiate working on HPC systems +* Added a TestFlow workflow which 'live' tests System abilities directly on + login/compute nodes of a cluster +* Reworked some of the internal system.Cluster architecture to take advantage + of inheritance - Systems now specify headers for their run and submit calls. + e.g., slurm-based systems specify their own SBATCH commands but all use the + same call structure after the SBATCH header Minor ------ +* Removed a lot of agency from individual modules (i.e., writing their own files, + manipulating other modules) and gave it mainly to the Workflow module. This is so + that when users need to look at where changes are disk are happening, they only have + to look at the Workflow module, rather than chasing through various other + modules/sub-modules. +* Rearranged directory structure to be more easily navigable, with less top-directory scripts. +* SeisFlows now relies more heavily on inheritance and super() functions throughout, + whereas previously it was used quite sparingly. +* Workflow module now relies more heavily on inheritance. Forward workflows build out most + of the functionality of the forward solver, and the Migration and Inversion workflows build + on top of this. +* Reworked docstring structure to aid in 'seisflows configure' command which now builds new + parameter files directly from init and class docstrings +* Gutted most of the old internal start up procedures such as loading parameters and modules. + The new start up procedure is now more Pythonic and efficient. * reST format docstrings for all classes and functions. * Comments added throughout codebase to explain naming, logic etc. * Replaced all string formatters with f-strings if possible, .format() otherwise @@ -79,5 +136,6 @@ Minor * Enforced package-wide constants at the top of seisflows.config * Added __init__() functions to most of the modules to define any instance-dependent variables, which previously were not explained. - +* New Docs page to describe how to transition from a 2D workstation example + to a 2D cluster example. diff --git a/docs/citeme.rst b/docs/citeme.rst index 2f19a8be..9ff3e25e 100644 --- a/docs/citeme.rst +++ b/docs/citeme.rst @@ -10,6 +10,6 @@ If you use SeisFlows for your work, please cite: SeisFlows — Flexible waveform inversion software. Computers & geosciences, 115, 88-95. -Publications which have used (and cited) SeisFlows (and SeisFlows3) can be +Publications which have used (and cited) SeisFlows can be found on `Google Scholar `__. diff --git a/docs/command_line_tool.rst b/docs/command_line_tool.rst index 171b7251..98b6a2f2 100644 --- a/docs/command_line_tool.rst +++ b/docs/command_line_tool.rst @@ -4,9 +4,9 @@ Commmand Line Tool ``SeisFlows`` is primarily interacted with via command line calls and a parameter file. In this page we explain how to use this command line tool to create a SeisFlows parameters file, edit and configure it, and -establish a SeisFlows working directory. We also provide explanation -for other command line options which act as helper utilities for -improved package control. +establish a SeisFlows working directory. We also provide explanation for +other command line options which act as helper utilities for improved +package control. After installing SeisFlows into a Conda environment, the ``seisflows`` command will be available directly from the command line. To access the @@ -20,12 +20,12 @@ help dialogue, you can type ``seisflows`` or ``seisflows -h`` .. parsed-literal:: usage: seisflows [-h] [-w [WORKDIR]] [-p [PARAMETER_FILE]] - {setup,configure,init,submit,resume,restart,clean,par,sempar,check,print,convert,reset,debug,edit,examples} + {setup,configure,swap,init,submit,resume,restart,clean,par,sempar,check,print,reset,debug,examples} ... ================================================================================ - SeisFlows: Waveform Inversion Package + SeisFlows: Waveform Inversion Package ================================================================================ @@ -41,6 +41,7 @@ help dialogue, you can type ``seisflows`` or ``seisflows -h`` setup Setup working directory from scratch configure Fill parameter file with defaults + swap Swap module parameters in an existing parameter file init Initiate working environment submit Submit initial workflow to system resume Re-submit previous workflow to system @@ -50,35 +51,33 @@ help dialogue, you can type ``seisflows`` or ``seisflows -h`` sempar View and edit SPECFEM parameter file check Check state of an active environment print Print information related to an active environment - convert Convert model file format reset Reset modules within an active state debug Start interactive debug environment - edit Open source code file in text editor examples Look at and run pre-configured example problems 'seisflows [command] -h' for more detailed descriptions of each command. -Setting up a parameter file -~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Setting up +~~~~~~~~~~ seisflows setup ^^^^^^^^^^^^^^^ -The first step of any SeisFlows workflow is to set up a working -directory, which begins by establishing a blank parameter file. The -``seisflows setup`` command copies in a template parameter file. Ideally -your working directory will be empty to avoid file conflicts. +The first step of any SeisFlows workflow is to setting up a parameter +file. The ``seisflows setup`` command copies in a template parameter +file. .. code:: ipython3 - %cd ~/Work/scratch + %cd ~/Scratch + ! rm * ! ls .. parsed-literal:: - /home/bchow/Work/scratch + /Users/Chow/Scratch .. code:: ipython3 @@ -88,7 +87,7 @@ your working directory will be empty to avoid file conflicts. .. parsed-literal:: - usage: seisflows setup [-h] [-s] [-f] + usage: seisflows setup [-h] [-f] In the specified working directory, copy template parameter file containing only module choices, and symlink source code for both the base and super @@ -97,14 +96,13 @@ your working directory will be empty to avoid file conflicts. they want to overwrite. optional arguments: - -h, --help show this help message and exit - -s, --symlink symlink source code into the working directory - -f, --force automatically overwrites existing parameter file + -h, --help show this help message and exit + -f, --force automatically overwrites existing parameter file .. code:: ipython3 - # The '-f' flag (force) will overwrite any existing parameter file + # The '-f' flag (overwrite) will overwrite any existing parameter file ! seisflows setup -f @@ -113,7 +111,7 @@ your working directory will be empty to avoid file conflicts. creating parameter file: parameters.yaml -Having a look at the template parameters.yaml file that was just +Having a look at the template ``parameters.yaml`` file that was just generated, we can see that it contains some pre-defined default values for the core SeisFlows modules. Each of these modules defines it’s own set of unique parameters which make up a workflow. @@ -126,8 +124,8 @@ set of unique parameters which make up a workflow. .. parsed-literal:: - parameters.yaml - 32 parameters.yaml + parameters.yaml sflog.txt + 30 parameters.yaml .. code:: ipython3 @@ -156,19 +154,17 @@ set of unique parameters which make up a workflow. # # MODULES # /////// - # WORKFLOW (str): The method for running SeisFlows; equivalent to main() - # SOLVER (str): External numerical solver to use for waveform simulations - # SYSTEM (str): Computer architecture of the system being used - # OPTIMIZE (str): Optimization algorithm for the inverse problem - # PREPROCESS (str): Preprocessing schema for waveform data - # POSTPROCESS (str): Postprocessing schema for kernels and gradients + # workflow (str): The types and order of functions for running SeisFlows + # system (str): Computer architecture of the system being used + # solver (str): External numerical solver to use for waveform simulations + # preprocess (str): Preprocessing schema for waveform data + # optimize (str): Optimization algorithm for the inverse problem # ============================================================================== - WORKFLOW: inversion - SOLVER: specfem2d - SYSTEM: workstation - OPTIMIZE: LBFGS - PREPROCESS: base - POSTPROCESS: base + workflow: forward + system: workstation + solver: specfem2d + preprocess: default + optimize: gradient seisflows configure @@ -185,7 +181,7 @@ file. .. parsed-literal:: - usage: seisflows configure [-h] [-r] + usage: seisflows configure [-h] [-a] SeisFlows parameter files will vary depending on chosen modules and their respective required parameters. This function will dynamically traverse the @@ -197,19 +193,13 @@ file. optional arguments: -h, --help show this help message and exit - -r, --relative_paths Set default paths relative to cwd + -a, --absolute_paths Set default paths relative to cwd .. code:: ipython3 ! seisflows configure - -.. parsed-literal:: - - filling parameters.yaml w/ default values - - .. code:: ipython3 ! head -200 parameters.yaml | tail -n 82 # have a look at the middle of the file @@ -219,114 +209,117 @@ file. .. parsed-literal:: + # :param smooth_v: Gaussian half-width for vertical smoothing in units + # of meters. + # :type components: str + # :param components: components to consider and tag data with. Should be + # string of letters such as 'RTZ' + # :type solver_io: str + # :param solver_io: format of model/kernel/gradient files expected by the + # numerical solver. Available: ['fortran_binary': default .bin files]. + # TODO: ['adios': ADIOS formatted files] + # :type source_prefix: str + # :param source_prefix: prefix of source/event/earthquake files. If None, + # will attempt to guess based on the specific solver chosen. + # :type mpiexec: str + # :param mpiexec: MPI executable used to run parallel processes. Should also + # be defined for the system module + # + # + # Solver SPECFEM2D + # ---------------- + # SPECFEM2D-specific alterations to the base SPECFEM module + # + # Parameters + # ---------- + # :type source_prefix: str + # :param source_prefix: Prefix of source files in path SPECFEM_DATA. Defaults + # to 'SOURCE' + # :type multiples: bool + # :param multiples: set an absorbing top-boundary condition + # + # # ============================================================================= - # SOLVER - # ////// - # MATERIALS (str): - # Material parameters used to define model. Available: ['ELASTIC': Vp, Vs, - # 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC'] - # DENSITY (str): - # How to treat density during inversion. Available: ['CONSTANT': Do not - # update density, 'VARIABLE': Update density] - # ATTENUATION (str): - # If True, turn on attenuation during forward simulations, otherwise set - # attenuation off. Attenuation is always off for adjoint simulations. - # COMPONENTS (str): - # Components used to generate data, formatted as a single string, e.g. ZNE - # or NZ or E - # SOLVERIO (int): - # The format external solver files. Available: ['fortran_binary', 'adios'] - # NT (float): - # Number of time steps set in the SPECFEM Par_file - # DT (float): - # Time step or delta set in the SPECFEM Par_file - # F0 (float): - # Dominant source frequency - # FORMAT (float): - # Format of synthetic waveforms used during workflow, available options: - # ['ascii', 'su'] - # SOURCE_PREFIX (str): - # Prefix of SOURCE files in path SPECFEM_DATA. By default, 'SOURCE' for - # SPECFEM2D - # ============================================================================= - MATERIALS: !!! REQUIRED PARAMETER !!! - DENSITY: !!! REQUIRED PARAMETER !!! - ATTENUATION: !!! REQUIRED PARAMETER !!! - COMPONENTS: ZNE - SOLVERIO: fortran_binary - NT: !!! REQUIRED PARAMETER !!! - DT: !!! REQUIRED PARAMETER !!! - F0: !!! REQUIRED PARAMETER !!! - FORMAT: !!! REQUIRED PARAMETER !!! - SOURCE_PREFIX: SOURCE - - # ============================================================================= - # POSTPROCESS - # /////////// - # SMOOTH_H (float): - # Gaussian half-width for horizontal smoothing in units of meters. If 0., - # no smoothing applied - # SMOOTH_V (float): - # Gaussian half-width for vertical smoothing in units of meters - # TASKTIME_SMOOTH (int): - # Large radii smoothing may take longer than normal tasks. Allocate - # additional smoothing task time as a multiple of TASKTIME - # ============================================================================= - SMOOTH_H: 0.0 - SMOOTH_V: 0.0 - TASKTIME_SMOOTH: 1 - - # ============================================================================= - # OPTIMIZE - # //////// - # LINESEARCH (str): - # Algorithm to use for line search, see seisflows.plugins.line_search for - # available choices - # PRECOND (str): - # Algorithm to use for preconditioning gradients, see - # seisflows.plugins.preconds for available choices - # STEPCOUNTMAX (int): - # Max number of trial steps in line search before a change in line search - # behavior - # STEPLENINIT (float): - # Initial line search step length, as a fraction of current model - # parameters - # STEPLENMAX (float): - # Max allowable step length, as a fraction of current model parameters - # LBFGSMEM (int): - # Max number of previous gradients to retain in local memory - # LBFGSMAX (int): - # LBFGS periodic restart interval, between 1 and 'inf' - # LBFGSTHRESH (float): - # LBFGS angle restart threshold + data_format: ascii + materials: acoustic + density: False + attenuation: False + smooth_h: 0.0 + smooth_v: 0.0 + components: ZNE + source_prefix: SOURCE + multiples: False # ============================================================================= - LINESEARCH: Backtrack + # + # Default Preprocess + # ------------------ + # Data processing for seismic traces, with options for data misfit, + # filtering, normalization and muting. + # + # Parameters + # ---------- + # :type data_format: str + # :param data_format: data format for reading traces into memory. For + # available see: seisflows.plugins.preprocess.readers + # :type misfit: str + # :param misfit: misfit function for waveform comparisons. For available + # see seisflows.plugins.preprocess.misfit + # :type backproject: str + # :param backproject: backprojection function for migration, or the + # objective function in FWI. For available see + # seisflows.plugins.preprocess.adjoint + # :type normalize: str + # :param normalize: Data normalization parameters used to normalize the + # amplitudes of waveforms. Choose from two sets: + # ENORML1: normalize per event by L1 of traces; OR + # ENORML2: normalize per event by L2 of traces; + # & + # TNORML1: normalize per trace by L1 of itself; OR + # TNORML2: normalize per trace by L2 of itself + # :type filter: str + # :param filter: Data filtering type, available options are: + # BANDPASS (req. MIN/MAX PERIOD/FREQ); + # LOWPASS (req. MAX_FREQ or MIN_PERIOD); + # HIGHPASS (req. MIN_FREQ or MAX_PERIOD) + # :type min_period: float + # :param min_period: Minimum filter period applied to time series. + # See also MIN_FREQ, MAX_FREQ, if User defines FREQ parameters, they + # will overwrite PERIOD parameters. + # :type max_period: float + # :param max_period: Maximum filter period applied to time series. See + # also MIN_FREQ, MAX_FREQ, if User defines FREQ parameters, they will + # overwrite PERIOD parameters. + # :type min_freq: float + # :param min_freq: Maximum filter frequency applied to time series, - 306 parameters.yaml + 337 parameters.yaml -We can see that our parameter file is over 300 lines now, too cumbersome -to print on the page. The length of the file mostly arises from the -header, as each parameter gets it’s own entry with the parameter’s type, -docstring, and any available options. +We can see that our parameter file is over 300 lines, a bit too +cumbersome to print on the page. The length of the file mostly arises +from the header, as each parameter gets it’s own entry with the +parameter’s type, docstring, and any available options. Each set of +parameters are separated by their relevant module, and their respective +docstrings should help users understand how and when they are used in a +SeisFlows workflow. -Parameters that are required by the workflow but do not come with -pre-set default values will be labelled with -``!!! REQUIRED PARAMETER !!!``. Similarly required path definitions, -which come at the end of the file, are labelled with the -``!!! REQUIRED PATH !!!`` value. + **NOTE**: Many parameters have sensible default values chosen, but it + is up to the user to decide which parameters are relevant to them, + and how they would like them set. Internal check functions throughout + the package will raise AssertionErrors for incorrectly or improperly + set parameters. -Filling out the parameter file -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Editing the parameter file +~~~~~~~~~~~~~~~~~~~~~~~~~~ seisflows par ^^^^^^^^^^^^^ -It’s easy enough to open your favorite text editor to make adjustments -to the parameter file, however the ``seisflows par`` command makes -things easier by allowing you to view and edit values from the command -line. This makes it convenient to change parameters, and also allows you -to script your workflow setup for improved reproducibility. +You can always open your favorite text editor to make changes to the +parameter file, however the ``seisflows par`` command makes things +easier by allowing you to view and edit values from the command line. +This makes it convenient to change parameters quickly and allows you to +script your parameter file setup for improved reproducibility. .. code:: ipython3 @@ -335,7 +328,7 @@ to script your workflow setup for improved reproducibility. .. parsed-literal:: - usage: seisflows par [-h] [-p] [-r] [parameter] [value] + usage: seisflows par [-h] [-p] [parameter] [value] Directly edit values in the parameter file by providing the parameter and corresponding value. If no value is provided, will simply print out the @@ -352,170 +345,396 @@ to script your workflow setup for improved reproducibility. -h, --help show this help message and exit -p, --skip_print Skip the print statement which is typically sent to stdout after changing parameters. - -r, --required Only list parameters which have not been set as a default - value, typically set with some attention catching - argument. 'parameter' and 'value' will be ignored. -The -r (–required) flag tells us which parameters need to be set by the -user +The call structure of the ``par`` command is provided in the help +message: + + seisflows par [parameter] [value (optional)] + +We can view parameters by providing a single ‘parameter’ argument to the +``par`` command .. code:: ipython3 - ! seisflows par -r + ! seisflows par ntask # ntask is the number of tasks/events to be run during a workflow .. parsed-literal:: - !!! REQUIRED PARAMETER !!! - ========================== - MATERIALS - DENSITY - ATTENUATION - NT - DT - F0 - FORMAT - CASE - END - !!! REQUIRED PATH !!! - ===================== - SPECFEM_BIN - SPECFEM_DATA - MODEL_INIT - - -We can view (but not modify) parameters by giving a single argument to -the par command + ntask: 1 + + +We can change a given parameter from it’s original value by providing a +second ‘value’ argument .. code:: ipython3 - ! seisflows par end + ! seisflows par ntask 3 .. parsed-literal:: - END: !!! REQUIRED PARAMETER !!! + ntask: 1 -> 3 -and we can edit the given parameter by providing a second argument to -the par command +seisflows sempar +^^^^^^^^^^^^^^^^ + +The ``seisflows sempar`` command behaves the same as the ``par`` +command, except is used to edit a SPECFEM2D/3D/3D_GLOBE Par_file. It has +the same call structure as ``par``. + +seisflows check +^^^^^^^^^^^^^^^ + +Each module contains it’s own internal set of parameter checks which +make sure that reasonable parameter values and types have been chosen. +This is especially important when submitting large jobs on clusters as +the ``check`` function will allow the User to catch errors without +having to wait on queue times or waste computational resources. .. code:: ipython3 - ! seisflows par end 1 + ! seisflows check .. parsed-literal:: - END: !!! REQUIRED PARAMETER !!! -> 1 + + ================================================================================ + PARAMETER ERRROR + //////////////// + `path_specfem_bin` must exist and must point to directory containing SPECFEM + executables + ================================================================================ + +Here we can see that a given path has not been set correctly in the +parameter file. -seisflows sempar +seisflows swap +^^^^^^^^^^^^^^ + +The ``seisflows swap`` command allows you to swap out a set of module +parameters without affecting other parts of the parameter file. Some +cases for when this might be useful include switching from a +‘workstation’ system to a ‘cluster’ system, or swapping solvers from +‘specfem2d’ to ‘specfem3d’. + +.. code:: ipython3 + + ! seisflows swap -h + + +.. parsed-literal:: + + usage: seisflows swap [-h] [module] [classname] + + During workflow development, it may be necessary to swap between different + sub-modules (e.g., system.workstation -> system.cluster). However this would + typically involving re-generating and re-filling a parameter file. The 'swap' + function makes it easier to swap parameters between modules. + + positional arguments: + module Module name to swap + classname Classname to swap to + + optional arguments: + -h, --help show this help message and exit + + +Running workflows +~~~~~~~~~~~~~~~~~ + +seisflows submit ^^^^^^^^^^^^^^^^ -The ``seisflows sempar`` command behaves the same as the ``par`` -command, except is used to edit a SPECFEM2D/3D/3D_GLOBE Par_file. It has -the same call structure as ``par``. +To run SeisFlows, we use the ``submit`` call. This will submit the +``workflow`` to the ``system`` and continue until a User-defined stop +criteria is met. + +Under the hood, the ``submit`` function will differ depending on the +chosen ``system``. For Users running on laptops and workstations, +``submit`` will simply launch a Python process and step through the +tasks in the ``workflow`` task list. On clusters, ``submit`` will launch +a master job on a compute node, which will itself step through tasks in +the task list, ensuring that no processing is run on login nodes. + +.. code:: ipython3 + + ! seisflows submit -h + + +.. parsed-literal:: + + usage: seisflows submit [-h] [-s STOP_AFTER] + + The main SeisFlows execution command. Submit a SeisFlows workflow to the + chosen system, equal to executing seisflows.workflow.main(). This function + will create and fill the working directory with required paths, perform path + and parameter error checking, and establish the active working environment + before executing the workflow. + + optional arguments: + -h, --help show this help message and exit + -s STOP_AFTER, --stop_after STOP_AFTER + Optional override of the 'STOP_AFTER' parameter + -Setting up an active working state -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +seisflows clean +^^^^^^^^^^^^^^^ -An active SeisFlows working state is simply a Python environment with -the SeisFlows library defined based on the given parameter file. In -order to establish a working state, we need to set all required paths -and parameters. We can look at the parameter file header to determine -valid options for each parameter. +The ``clean`` function is used to clear an existing working directory. +It deletes all SeisFlows created files and directories using paths in +the parameter file, but does not delete the parameter file itself. Use +the ``-f/--force`` flag to skip over the ‘are you sure?’ check +statement. .. code:: ipython3 - ! head -130 parameters.yaml | tail -n 10 + ! seisflows clean -h .. parsed-literal:: - # ////// - # MATERIALS (str): - # Material parameters used to define model. Available: ['ELASTIC': Vp, Vs, - # 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC'] - # DENSITY (str): - # How to treat density during inversion. Available: ['CONSTANT': Do not - # update density, 'VARIABLE': Update density] - # ATTENUATION (str): - # If True, turn on attenuation during forward simulations, otherwise set - # attenuation off. Attenuation is always off for adjoint simulations. + usage: seisflows clean [-h] [-f] + + Delete all SeisFlows related files in the working directory, except for the + parameter file. + + optional arguments: + -h, --help show this help message and exit + -f, --force Skip the warning check that precedes the clean function + + +seisflows restart +^^^^^^^^^^^^^^^^^ +The ``restart`` function is a convenience function which wraps ``clean`` +and ``submit``. It is used to restart workflows using the same parameter +file. It also takes the ``-f/--force`` flag that the clean function +defines. .. code:: ipython3 - # We use the `-p` flag to turn off stdout printing - ! seisflows par materials elastic -p - ! seisflows par density constant -p - ! seisflows par attenuation False -p - ! seisflows par nt 100 -p - ! seisflows par dt .01 -p - ! seisflows par f0 .5 -p - ! seisflows par format ascii -p - ! seisflows par case synthetic -p - - # Required paths can similarly be set the `par` command - ! seisflows par specfem_bin ./ -p - ! seisflows par specfem_data ./ -p - ! seisflows par model_init ./ -p - -seisflows init -^^^^^^^^^^^^^^ + ! seisflows restart -h + + +.. parsed-literal:: + + usage: seisflows restart [-h] [-f] + + Akin to running seisflows clean; seisflows submit. Restarts the workflow by + removing the current state and submitting a fresh workflow. + + optional arguments: + -h, --help show this help message and exit + -f, --force Skip the clean warning check statement + -To initiate a working state, we run ``seisflows init``. This registers -the parameter file into Python’s sys.modules. It runs parameter check -functions to ensure that parameters have been set correctly, and then -saves the active working state as a set of pickle (.p) files which can -be used to resume active workflows. +Plotting +~~~~~~~~ .. code:: ipython3 - ! seisflows init + from IPython.display import Image # Required for showing inline figures in notebook/docs + +seisflows plot2d +^^^^^^^^^^^^^^^^ + +``plot2d`` allows you to quickly plot SPECFEM2D models, kernels and +gradients which have been exported to disk during a SeisFlows workflow. +From a SeisFlows working directory the format for running ``plot2d`` is +provided in the help message. + +.. code:: ipython3 + + # a directory where we have run an example problem + %cd ~/sfexamples/example_2 + ! ls .. parsed-literal:: + /home/bchow/Work/work/seisflows_example/example_2 + logs parameters.yaml sflog.txt specfem2d + output scratch sfstate.txt specfem2d_workdir + + +.. code:: ipython3 + + ! seisflows plot2d -h + + +.. parsed-literal:: + + usage: seisflows plot2d [-h] [-c [CMAP]] [-s [SAVEFIG]] [name] [parameter] - ================================================================================ - MODULE CHECK ERROR - ////////////////// - seisflows.config module check failed with: + Plots model/kernels/gradient files located in the output/ + directory. ONLY available for SPECFEM2D models. - workflow: CASE == SYNTHETIC requires PATH.MODEL_TRUE - ================================================================================ + positional arguments: + name Name of directory in the output/ directory + parameter Name of parameter to plot from `name`. E.g., 'vs', + 'vp' etc. + + optional arguments: + -h, --help show this help message and exit + -c [CMAP], --cmap [CMAP] + colormap to be passed to PyPlot + -s [SAVEFIG], --savefig [SAVEFIG] + optional name and path to save figure + + +Running ``plot2d`` without any arguments will print out a list of +available directories you can plot + +.. code:: ipython3 + + ! seisflows plot2d + + +.. parsed-literal:: + + PLOT2D + ////// + Available models/gradients/kernels + + GRADIENT_01 + GRADIENT_02 + MODEL_01 + MODEL_02 + MODEL_INIT + MODEL_TRUE -Oops, as we can see the parameter check has caught that a given -parameter requires a certain path to be set which is currently blank. -Let’s amend and try again +Users will also have to choose which parameter they would like to plot, +which is defined by the available parameters in the underlying model. +Incorrect choices will throw an AssertionError which will tell you what +parameters are available to plot. .. code:: ipython3 - ! seisflows par model_true ./ -p - ! seisflows init + ! seisflows plot2d GRADIENT_01 .. parsed-literal:: - instantiating SeisFlows working state in directory: output + Traceback (most recent call last): + File "/home/bchow/miniconda3/envs/docs/bin/seisflows", line 33, in + sys.exit(load_entry_point('seisflows', 'console_scripts', 'seisflows')()) + File "/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py", line 1383, in main + sf() + File "/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py", line 438, in __call__ + getattr(self, self._args.command)(**vars(self._args)) + File "/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py", line 1106, in plot2d + save=savefig) + File "/home/bchow/REPOSITORIES/seisflows/seisflows/tools/specfem.py", line 428, in plot2d + f"chosen `parameter` must be in {self._parameters}" + AssertionError: chosen `parameter` must be in ['vp_kernel', 'vs_kernel'] .. code:: ipython3 + ! seisflows plot2d GRADIENT_01 vs_kernel --savefig gradient_01_vs_kernel.png + Image(filename='gradient_01_vs_kernel.png') + + +.. parsed-literal:: + + Figure(707.107x707.107) + + + + +.. image:: images/command_line_tool_files/command_line_tool_40_1.png + + + +seisflows plotst +^^^^^^^^^^^^^^^^ + +``plotst`` (i.e., *plot st*\ ream) is a wrapper for ObsPy’s +Stream.plot() which plots waveforms generated by the external numerical +solver. In this case we have generated waveforms in the ASCII format +during one of our example problems. Using the ``export_traces`` +parameter, our workflow has saved these waveforms to the ``output/`` +directory of our SeisFlows working directory. + +.. code:: ipython3 + + %cd ~/sfexamples/example_3/output/solver/001/syn ! ls - ! echo - ! ls output .. parsed-literal:: - output parameters.yaml + /home/bchow/Work/work/seisflows_example/example_3/output/solver/001/syn + AA.S000000.BXY.semd AA.S000009.BXY.semd AA.S000018.BXY.semd + AA.S000001.BXY.semd AA.S000010.BXY.semd AA.S000019.BXY.semd + AA.S000002.BXY.semd AA.S000011.BXY.semd AA.S000020.BXY.semd + AA.S000003.BXY.semd AA.S000012.BXY.semd AA.S000021.BXY.semd + AA.S000004.BXY.semd AA.S000013.BXY.semd AA.S000022.BXY.semd + AA.S000005.BXY.semd AA.S000014.BXY.semd AA.S000023.BXY.semd + AA.S000006.BXY.semd AA.S000015.BXY.semd AA.S000024.BXY.semd + AA.S000007.BXY.semd AA.S000016.BXY.semd + AA.S000008.BXY.semd AA.S000017.BXY.semd + + +.. code:: ipython3 + + # Run the help message + ! seisflows plotst -h + + +.. parsed-literal:: + + usage: seisflows plotst [-h] [--data_format [DATA_FORMAT]] [-s [SAVEFIG]] + [fids [fids ...]] + + Plots waveforms output by the solver. Uses ObsPy's + Stream.plot() function under the hood. Example call would be + `seisflows plotst scratch/solver/mainsolver/traces/syn/*` + + + positional arguments: + fids File IDs to be passed to plotting. Wildcards + acceptable - seisflows_optimize.p seisflows_postprocess.p seisflows_system.p - seisflows_parameters.json seisflows_preprocess.p seisflows_workflow.p - seisflows_paths.json seisflows_solver.p + optional arguments: + -h, --help show this help message and exit + --data_format [DATA_FORMAT] + Data format of the files. Must match file type that + SeisFlows can read. These include:['SU', 'ASCII']. + Defaults to 'ASCII'. See + SeisFlows.preprocess.default.read() for all options. + -s [SAVEFIG], --savefig [SAVEFIG] + optional name and path to save figure + + +.. code:: ipython3 + + # Plot a single synthetic seismogram + ! seisflows plotst AA.S000000.BXY.semd --savefig AA.S000000.BXY.semd.png + Image("AA.S000000.BXY.semd.png") + + + + +.. image:: images/command_line_tool_files/command_line_tool_44_0.png + + + +.. code:: ipython3 + + # Use wild cards to plot multiple stations at once + ! seisflows plotst AA.S00000?.BXY.semd --savefig AA.S00000X.BXY.semd.png + Image("AA.S00000X.BXY.semd.png") + + + + +.. image:: images/command_line_tool_files/command_line_tool_45_0.png + diff --git a/docs/conf.py b/docs/conf.py index 623839df..7fd4cb47 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -59,5 +59,5 @@ # AutoAPI variables autoapi_type = "python" -autoapi_dirs = ["../seisflows", "../seisflows-super"] +autoapi_dirs = ["../seisflows"] autoapi_add_toctree_entry = True diff --git a/docs/containers.rst b/docs/containers.rst new file mode 100644 index 00000000..b609d941 --- /dev/null +++ b/docs/containers.rst @@ -0,0 +1,198 @@ +SeisFlows in Containers +======================= + +As part of the `NSF-funded SCOPED project +`__ SeisFlows has +been containerized using `Docker `__, which removes the +oftentimes troubling task of installing and configuring software. These +containers can be used to run SeisFlows on workstations (using Docker) or +on high performance computers using +`Singularity/Apptainer `__. + +.. note:: + The SeisFlows Docker image can be found here: + https://github.com/SeisSCOPED/adjtomo + +.. note:: + The `adjTomo` container is shipped with the latest versions of + `SeisFlows `__, + `Pyatoa `__, and + `PySEP `__. + +The remainder of this documentation page assumes you are familiar with Docker +and containers. + +To learn more about Docker and containers, see: +https://www.docker.com/resources/what-container/ + +For instructions to install Docker on your workstation, visit: +https://docs.docker.com/get-docker/ + + +Workstation example with Docker +------------------------------- + +Here we will step through how to run the +`SeisFlows-SPECFEM2D `__ example using Docker. +First we need to get the latest version of the `Pyatoa` Docker image: + +.. code-block:: bash + + docker pull ghcr.io/seisscoped/adjtomo:latest + +.. note:: + These docs were run using Docker image ID ``c57883926aae`` (last accessed + Aug. 24, 2022). If you notice that the docs page is out of date with respect + to the latest Docker image, please raise a + `SeisFlows GitHub issue `__. + +Their are two methods for running the SeisFlows example using this Docker image, +either 1) through a `JupyterHub interface `__, or +2) via the command line. The former provides a graphical user interface that +mimics a virtual desktop for easier navigation, while the latter provides a +push-button approach. + +From JupyterHub +^^^^^^^^^^^^^^^ + +We can run SeisFlows through JupyterHub by opening the container through a port: + +.. code-block:: bash + + docker run -p 8888:8888 \ + --mount type=bind,source=$(pwd),target=/home/scoped/work + ghcr.io/seisscoped/pyatoa:latest + +.. warning:: + If you do **not** use the ``--mount`` command, all progres will be lost + once you close the container. See the + `Docker bind mounts `__ + documentation for more information. + +To access the JupyterHub instance, open the URL that was output to the display +in your favorite web browser. The URL will likely look something like +http://127.0.0.1:8888/lab?token=??? where '???' is a unique token + +Within the JupyterHub instance, you will be greeted with a graphical +user interface (see below). The Pyatoa, PySEP and SeisFlows repositories are +navigable in the file system on the left-hand side of the window. + +.. image:: images/container_1_jupyterhub.png + :align: center +| +From inside the JupyterHub instance, click the `Terminal` icon (highlighted red +above) to open up a terminal window. Using the terminal we will run our example +in an empty directory to avoid muddling up the home directory. + +.. code-block:: bash + + # From inside the JupyterHub terminal + mkdir sf_sem2d_example + cd sf_sem2d_example + seisflows examples run 2 + +.. image:: images/container_2_example.png + :align: center +| +This example will download, configure and compile SPECFEM2D, and then run a +SeisFlows-Pyatoa-SPECFEM2D inversion problem. See `the SPECFEM2D example docs +page `__ for a more thorough explanation of what's +going on under the hood. + +A successful inversion + + +From the command line +^^^^^^^^^^^^^^^^^^^^^ + +Running the container from the command line is much simpler. To print the +SeisFlows help message, we simply have to run the following: + +.. code-block:: bash + + docker run ghcr.io/seisscoped/adjtomo:latest seisflows -h + +The following code snippet will run a SeisFlows-Pyatoa-Specfem2D example. +The extra fluff in the command allows the container to save files to your +computer while it runs the example. + +.. code-block:: bash + + WORKDIR=/Users/Chow/Work/scratch # choose your own directory here + cd ${WORKDIR} + docker run \ + --workdir $(pwd) \ + --mount type=bind,source=$(pwd),target=$(pwd), + ghcr.io/seisscoped/adjtomo:nightly \ + seisflows examples run 2 + +In the above example, we set the working directory (-w/--workdir) to the +current working directory (on the local filesystem). We also mount the current +working directory inside the container (--mount), meaning the container has +access to our local filesystem for reading/writing. We then use the Docker +image to run a SeisFlows-Pyatoa-Specfem2D example. Outputs of the example will +be written into the working directory (WORKDIR). + +See `the SPECFEM2D example docs page `__ +for a more thorough explanation of what's going on under the hood. + + +HPC example with Apptainer/Singularity +-------------------------------------- + +.. note:: + Section Under Construction + +Apptainer/Singularity is a container system for high performance computers (HPC) +that allows Users to run container images on HPCs. You might want to use +Apptainer if you cannot download software using Conda on your HPC, or you simply +do not want to go through the trouble of downloading software on your system. + +Relevant Links: + +* Singularity on Chinook: + https://uaf-rcs.gitbook.io/uaf-rcs-hpc-docs/third-party-software/singularity +* Singularity at TACC: + https://containers-at-tacc.readthedocs.io/en/latest/singularity/01.singularity_basics.html +* Singularity on Maui: + https://support.nesi.org.nz/hc/en-gb/articles/360001107916-Singularity + +.. note:: + This section was written while working on TACC's Frontera, a SLURM system. + Instructions may differ depending on your Systems setup and workload + manager. Because Singularity cannot be run on the login nodes at TACC, the + following code blocks are run in the `idev `__ + interactive environment. + +To download the required image on your system, we first need to load the +singularity module, and then use a familiar ``pull`` command. + +.. code-block:: bash + + module load tacc-singularity # on TACC Frontera + # module load singularity # on UAF Chinook + singularity pull seisflows.sif docker://ghcr.io/seisscoped/adjtomo:nightly + +We have now downloaded our image as a `.sif` file. To use the image to run the +SeisFlows help message: + +.. code-block:: bash + + singularity run seisflows.sif seisflows -h + +To get SeisFlows to use your system's Singularity (if supported), you just need +to append '-singularity' to an existing system subclass in the SeisFlows +parameter file. For example, since we are running on Frontera, we set our +system to 'frontera-singularity'. + +.. code-block:: bash + + seisflows setup # create the 'parameters.yaml' file + seisflows par system frontera-singularity # set the system + # ... set any other main modules here + seisflows configure # fill out the parameter file + # ... edit your parameters here and then run SeisFlows + singularity run ghcr.io/seisscoped/adjtomo:nightly seisflows submit + + diff --git a/docs/design.rst b/docs/design.rst new file mode 100644 index 00000000..adac60d2 --- /dev/null +++ b/docs/design.rst @@ -0,0 +1,13 @@ +Design Philosophy +================================= + +.. note:: + Page Under Construction + +Although SeisFlows was written with 'Pythonic' style in mind, there are some +design choices within the internal structure of the package that may be unique +to SeisFlows. Throughout this documentation page we point out some of these +choices, and provide detail on why and how they were implemented. This page is +intended for developers and super users who want to explore the source code +deeply or edit/extend SeisFlows for other purposes. + diff --git a/docs/example_on_cluster.rst b/docs/example_on_cluster.rst new file mode 100644 index 00000000..482b8ca0 --- /dev/null +++ b/docs/example_on_cluster.rst @@ -0,0 +1,419 @@ +Running Examples on a Cluster +============================= + +Here we detail how a User might transition from developing a 2D example +problem on their workstation, to performing large-scale inversion on a +cluster. In this notebook we show an example running on the New Zealand +eScience Infrastructure HPC, named Maui, but is meant to provide a +generalizable approach for running SeisFlows on clusters. + +Example Setup +------------- + +We first set up our working directory using the example setup shown in the `SPECFEM2D example page `__. This ensures that we have our initial and final models, and a properly set parameter file that can be used for our inversion. + +.. code:: ipython3 + + # This is an empty working directory + %cd /home/bchow/Work/scratch + + +.. parsed-literal:: + + /home/bchow/Work/scratch + + +.. code:: bash + + ! ln -s /home/bchow/REPOSITORIES/specfem2d . # place SPECFEM2D repository in the working directory + ! seisflows examples setup 2 # run example setup but do not `submit` workflow + +.. code:: ipython3 + + ! ls + + +.. parsed-literal:: + + parameters.yaml specfem2d specfem2d_workdir + + +Module ‘swap’ +------------- + +As we saw in the example tutorial, the ``System`` module for this +example problem is set as ‘Workstation’, which is meant to run the +workflow in serial directly on the system that submits it. For clusters +this means we would run our entire inversion on the login node. + +.. code:: ipython3 + + ! seisflows par system + + +.. parsed-literal:: + + system: workstation + + +To ‘swap’ out the ``System`` module for a cluster-specific class, we can +use the ``seisflows swap`` command, which replaces one module for +another without affecting the other modules. This is very helpful if you +have a completed parameter file and do not want to copy-paste all the +edited parameter just to change out a module. The rubric for running +``seisflows swap`` can be found in the help message: + +.. code:: ipython3 + + ! seisflows swap -h + + +.. parsed-literal:: + + usage: seisflows swap [-h] [module] [classname] + + During workflow development, it may be necessary to swap between different + sub-modules (e.g., system.workstation -> system.cluster). However this would + typically involving re-generating and re-filling a parameter file. The 'swap' + function makes it easier to swap parameters between modules. + + positional arguments: + module Module name to swap + classname Classname to swap to + + optional arguments: + -h, --help show this help message and exit + + +You can check available names by running ``seisflows print modules``. +Here we want to swap out our ``System`` module from ‘Workstation’ to +‘Maui’, which defines how SeisFlows interacts with the SLURM-based +system, Maui. + +.. code:: ipython3 + + ! seisflows print modules + + +.. parsed-literal:: + + SEISFLOWS MODULES + ///////////////// + '-': module, '*': class + + - workflow + * forward + * inversion + * migration + * test_flow + - system + * chinook + * cluster + * frontera + * lsf + * maui + * slurm + * workstation + - solver + * specfem + * specfem2d + * specfem3d + * specfem3d_globe + - preprocess + * default + * pyaflowa + - optimize + * LBFGS + * NLCG + * gradient + + +.. code:: ipython3 + + ! seisflows swap system maui + + +.. parsed-literal:: + + L-BFGS optimization requires 'backtrack'ing line search. Overwriting 'bracket' + + +We can see now that the parameter file has swapped out the ‘Workstation’ +System module for the ‘Maui’ System module, which contains its own set +of parameters that must be filled out by the User. + +.. code:: ipython3 + + ! head -235 parameters.yaml | tail -n 110 + + +.. parsed-literal:: + + # ============================================================================= + # + # Workstation System + # ------------------ + # Defines foundational structure for System module. When used standalone, + # runs tasks in serial on a local machine. + # + # Parameters + # ---------- + # :type ntask: int + # :param ntask: number of individual tasks/events to run during workflow. + # Must be <= the number of source files in `path_specfem_data` + # :type nproc: int + # :param nproc: number of processors to use for each simulation + # :type log_level: str + # :param log_level: logger level to pass to logging module. + # Available: 'debug', 'info', 'warning', 'critical' + # :type verbose: bool + # :param verbose: if True, formats the log messages to include the file + # name, line number and message type. Useful for debugging but + # also very verbose. + # + # + # Cluster System + # ------------------ + # Generic or common HPC/cluster interfacing commands + # + # Parameters + # ---------- + # :type title: str + # :param title: The name used to submit jobs to the system, defaults + # to the name of the current working directory + # :type mpiexec: str + # :param mpiexec: Function used to invoke executables on the system. + # For example 'mpirun', 'mpiexec', 'srun', 'ibrun' + # :type ntask_max: int + # :param ntask_max: limit the number of concurrent tasks in a given array job + # :type walltime: float + # :param walltime: maximum job time in minutes for the master SeisFlows + # job submitted to cluster. Fractions of minutes acceptable. + # :type tasktime: float + # :param tasktime: maximum job time in minutes for each job spawned by + # the SeisFlows master job during a workflow. These include, e.g., + # running the forward solver, adjoint solver, smoother, kernel combiner. + # All spawned tasks receive the same task time. Fractions of minutes + # acceptable. + # :type environs: str + # :param environs: Optional environment variables to be provided in the + # following format VAR1=var1,VAR2=var2... Will be set using + # os.environs + # + # + # System Slurm + # ------------------ + # Interface for submitting and monitoring jobs on HPC systems running the + # Simple Linux Utility for Resource Management (SLURM) workload manager. + # + # Parameters + # ---------- + # :type slurm_args: str + # :param slurm_args: Any (optional) additional SLURM arguments that will + # be passed to the SBATCH scripts. Should be in the form: + # '--key1=value1 --key2=value2" + # + # + # System Maui + # ----------- + # New Zealand Maui-specfic modifications to base SLURM system + # + # Parameters + # ---------- + # :type account: str + # :param account: Maui account to submit jobs under, will be used for the + # '--account' sbatch argument + # :type cpus_per_task: int + # :param cpus_per_task: allow for multiple cpus per task, i.e,. + # multithreaded jobs + # :type cluster: str + # :param cluster: cluster to submit jobs to. Available are Maui and + # Mahuika + # :type partition: str + # :param partition: partition of the cluster to submit jobs to. + # :type ancil_cluster: str + # :param ancil_cluster: name of the ancilary cluster used for pre- + # post-processing tasks. + # :type ancil_partition: name of the partition of the ancilary cluster + # :type ancil_tasktime: int + # :param ancil_tasktime: Tasktime in minutes for pre and post-processing + # jobs submitted to Maui ancil. + # + # + # ============================================================================= + ntask: 1 + nproc: 1 + log_level: DEBUG + verbose: False + title: scratch + mpiexec: None + ntask_max: 100 + walltime: 10 + tasktime: 1 + environs: SLURM_MEM_PER_CPU + slurm_args: None + partition: nesi_research + account: None + cluster: maui + cpus_per_task: 1 + ancil_cluster: maui_ancil + ancil_partition: nesi_prepost + ancil_tasktime: 1 + + +’Check’ing parameter validity +----------------------------- + +Most of the default values should be okay for our purposes, but it’s up +the User to read the docstrings and determine if any of the default +values should be changed. If we run ``seisflows check`` we can check if +any of our parameters are incorrectly set. + +.. code:: ipython3 + + ! seisflows check + + +.. parsed-literal:: + + + ================================================================================ + PARAMETER ERRROR + //////////////// + System 'Maui' requires parameter 'account' + ================================================================================ + + +The ``Maui`` System check function has told us that it requires that the +parameter ``account`` be set. Note that these requirements will change +between different clusters, which dictate different SLURM parameters +when submitting jobs. We can specify the account parameter using the +``seisflows par`` command. + +.. code:: ipython3 + + ! seisflows par account gns03247 + + +.. parsed-literal:: + + account: null -> gns03247 + + +.. code:: ipython3 + + ! seisflows check + +The ``seisflows check`` function has passed and we have succesfully +swapped out our System module with the ``Maui`` child class. Under the +hood, this class should take care of all the required interactions +between SeisFlows and the compute node. Now all that is left to do is to +run ``seisflows submit``, which should submit the master job to the +system and run our inversion on compute nodes. + +TestFlow: Live testing SeisFlows on System +------------------------------------------ + +While developing, debugging or testing SeisFlows on System, it is not +ideal to submit simulation-based workflows, as these eat large amounts +of computational resources and may introduce problems of there own. + +Here we introduce ‘TestFlow’, a SeisFlows workflow that runs simple test +functions on a cluster. This allows Users to check if SeisFlows can +appropriately interact with the HPC system with tasks like submitting +jobs, monitoring the job queue and catching failing jobs. + +Below we show how to set up TestFlow for our test bed HPC, Maui. First +we generate a template parameter file and set the modules appropriately. + +.. code:: ipython3 + + # This is an empty working directory + %rm -r /home/bchow/Work/scratch + %mkdir /home/bchow/Work/scratch + %cd /home/bchow/Work/scratch + + +.. parsed-literal:: + + shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory + /home/bchow/Work/scratch + + +.. code:: ipython3 + + # Generate a template parameter file + ! seisflows setup -f + + +.. parsed-literal:: + + creating parameter file: parameters.yaml + + +.. code:: ipython3 + + # Set the modules appropriately + ! seisflows par workflow test_flow + ! seisflows par system maui # we want to test SeisFlows on Maui + ! seisflows par solver null # currently test_flow does not test solver + ! seisflows par preprocess null # currently test_flow does not test preprocess + ! seisflows par optimize null # currently test_flow does not test optimize + + +.. parsed-literal:: + + workflow: forward -> test_flow + system: workstation -> maui + solver: specfem2d -> null + preprocess: default -> null + optimize: gradient -> null + + +.. code:: ipython3 + + # Dynamically fill out the parameter file + ! seisflows configure + +.. code:: ipython3 + + ! head -48 parameters.yaml | tail -n 16 + + +.. parsed-literal:: + + # ============================================================================= + # + # TestFlow Workflow + # ------------- + # Test individual sub-modules in a 'live' testing environment in order to + # ensure SeisFlows works appropriately given an established system and solver. + # + # .. note:: + # You do not need to set System parameters `ntask`, `nproc`, `tasktime`, + # `walltime`. These will be overwritten by the setup task. + # + # Parameters + # ---------- + # + # + # ============================================================================= + + +As we can see above, the ``TestFlow`` workflow does not require any +input parameters, and will additionally automatically set some key +``System`` parameters to ensure that these tests are lightweight to +avoid long queue times. Under the hood the ``TestFlow`` workflow will: + +1) Submit an array job to the system to test job submission capabilities +2) Submit a single job to the system which is intended to fail, this + tests job queue monitoring as well as failed job catching. + +Developers who are implementing new ``System`` classes (e.g., for new +clusters), can use TestFlow as foundation for their development and +debugging sessions. To run the ``TestFlow`` workflow you just need to +run ``seisflows submit`` + +.. code:: ipython3 + + ! seisflows submit diff --git a/docs/extending.rst b/docs/extending.rst index 48ece5d8..286a2bfe 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -1,14 +1,120 @@ -Extending SeisFlows -================================== -The design philosophy of SeisFlows is such that being a user of the codebase -more-than-likely requires also becoming a developer, as custom-made subclasses -are often required to tailor the functionalities of SeisFlows to a specific -problem, compute system, dataset, etc. This page is intended to provide an -outline on how to successfully implement your own base- or subclasses within -the SeisFlows framework. - -Writing your own Base class ---------------------------- - -Writing your own subclass -------------------------- +Extending the Codebase +====================== + +.. note:: + Page Under Construction + +SeisFlows works on the object oriented programming principal of inheritance. +See the `inheritance `__ page for background. This allows +Users to extend the package to work with other systems and solvers, or modify +its behavior to suit the problem at hand. + +Overriding SeisFlows with your own subclass +------------------------------------------- + +If the existing modules of SeisFlows do not suit your needs, you may +need to override them with your own sub classes. A common example of +when you might need to do this is to override the system subclasses to +tailor SeisFlows to your specific cluster. + +In this example SeisFlows already contains a Slurm system module, and +has overriding sub-classes for Slurm-derived systems including Chinook +(University of Alaska Fairbanks), Maui (New Zealand eScience +Infrastucture) and Frontera (Texas Advanced Computing Center). Any new +Slurm systems will need write new subclasses to take advantage of the +existing structure. + +Below we provide some examples of editing existing SeisFlows modules for +modified performance. + + +Writing your own Base class from scratch +---------------------------------------- + +Less likely, but also still a possibility, is that you will have to +write your own Base class which defines foundational capabilities. One +example of this is extending SeisFlows to interact with other numerical +solvers. Currently SeisFlows is set up to work with +SPECFEM2D/3D/3D_GLOBE. To allow Seisflows to work with other solvers, +one would need to write a new Base class that defines SeisFlows’ +interaction behavior with this solver. + + +Setting up 'Cluster' System sub-classes +----------------------------------------- + +In this section, we outline how various Cluster-derived System sub-classes +are created. Although the tasks performed here will not translate one-to-one +for other systems, we hope they serve as a roadmap for setting up SeisFlows on +other HPC systems. + +Because many HPC systems have their own unique caveats, it is standard practice +to trial and error our way into a working sub-class. + +.. note:: + It is assumed that SeisFlows has been installed with the + ``pip install -e .`` command (develop mode). This ensures that any changes + to the codebase are immediately propagated into the SeisFlows executable. + +University of Alaska Fairbanks 'Chinook' +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Chinook is University of Alaska Fairbank's high performance computer. At the +time of writing (Aug. 24, 2022), it is running CentOS 6.10 and the SLURM +workload manager. + +Because Chinook is a SLURM-based system, we can derive our 'Chinook' class +based on the SLURM system class. In seisflows/system we create a new +Python file called 'chinook.py', which has a base template of: + +.. code:: python3 + + from seisflows.system.slurm import Slurm + + class Chinook(Slurm): + """ + Chinook System - UAF SLURM-based HPC + + Parameters + ========== + + Paths + ===== + + *** + """ + __doc__ == Slurm.__doc__ + __doc__ + + def __init__(self): + """Chinook intitiation""" + super().__init__() + + +The above code snippet is boilerplate code for any new SeisFlows class. We can +see that `Chinook` inherits base functionalities from `Slurm`, it defines some +boilerplate class docstring and appends it's docstring to the `Slurm` class +(required by ``seisflows configure``), and inherits the SLURM startup +procedure defined in __init__. + +.. note:: + Because of an outdated operating system, we cannot run the + SeisFlows directly from Chinook's Conda installation. We therefore have to + containerize the codebase and run SeisFlows through 'Singularity/Apptainer'. + +We can now set up a TestFlow workflow to see how the Chinook implementation +differs from the bog-standard SLURM impementation. + +.. code:: bash + + mkdir ${CENTER1}/scratch # CENTER1 is the Chinook work filesystem + cd ${CENTER1}/scratch + seisflows setup # create the parameters.yaml file + # Set the core SeisFlows modules + seisflows par workflow test_flow + seisflows par system chinook + seisflows par solver null + seisflows par preprocess null + seisflows par optimize null + + seisflows configure # set up the remainder of the parameter file + diff --git a/docs/images/command_line_tool_files/command_line_tool_40_1.png b/docs/images/command_line_tool_files/command_line_tool_40_1.png new file mode 100644 index 00000000..0363acc0 Binary files /dev/null and b/docs/images/command_line_tool_files/command_line_tool_40_1.png differ diff --git a/docs/images/command_line_tool_files/command_line_tool_44_0.png b/docs/images/command_line_tool_files/command_line_tool_44_0.png new file mode 100644 index 00000000..1f87da76 Binary files /dev/null and b/docs/images/command_line_tool_files/command_line_tool_44_0.png differ diff --git a/docs/images/command_line_tool_files/command_line_tool_45_0.png b/docs/images/command_line_tool_files/command_line_tool_45_0.png new file mode 100644 index 00000000..0db92ccb Binary files /dev/null and b/docs/images/command_line_tool_files/command_line_tool_45_0.png differ diff --git a/docs/images/container_1_jupyterhub.png b/docs/images/container_1_jupyterhub.png new file mode 100644 index 00000000..5e9236a1 Binary files /dev/null and b/docs/images/container_1_jupyterhub.png differ diff --git a/docs/images/container_2_example.png b/docs/images/container_2_example.png new file mode 100644 index 00000000..0bab5d34 Binary files /dev/null and b/docs/images/container_2_example.png differ diff --git a/docs/images/reference_figures/tape_etal_2007_fig9.jpeg b/docs/images/reference_figures/tape_etal_2007_fig9.jpeg new file mode 100644 index 00000000..4ff405b7 Binary files /dev/null and b/docs/images/reference_figures/tape_etal_2007_fig9.jpeg differ diff --git a/docs/images/specfem2d_example_files/specfem2d_example_19_1.png b/docs/images/specfem2d_example_files/specfem2d_example_19_1.png new file mode 100644 index 00000000..18fb8d86 Binary files /dev/null and b/docs/images/specfem2d_example_files/specfem2d_example_19_1.png differ diff --git a/docs/images/specfem2d_example_files/specfem2d_example_21_1.png b/docs/images/specfem2d_example_files/specfem2d_example_21_1.png new file mode 100644 index 00000000..7d14fa08 Binary files /dev/null and b/docs/images/specfem2d_example_files/specfem2d_example_21_1.png differ diff --git a/docs/images/specfem2d_example_files/specfem2d_example_23_1.png b/docs/images/specfem2d_example_files/specfem2d_example_23_1.png new file mode 100644 index 00000000..d61392e9 Binary files /dev/null and b/docs/images/specfem2d_example_files/specfem2d_example_23_1.png differ diff --git a/docs/images/specfem2d_example_files/specfem2d_example_40_1.png b/docs/images/specfem2d_example_files/specfem2d_example_40_1.png new file mode 100644 index 00000000..070f0e60 Binary files /dev/null and b/docs/images/specfem2d_example_files/specfem2d_example_40_1.png differ diff --git a/docs/images/specfem2d_example_files/specfem2d_example_42_1.png b/docs/images/specfem2d_example_files/specfem2d_example_42_1.png new file mode 100644 index 00000000..0363acc0 Binary files /dev/null and b/docs/images/specfem2d_example_files/specfem2d_example_42_1.png differ diff --git a/docs/images/specfem2d_example_files/specfem2d_example_44_1.png b/docs/images/specfem2d_example_files/specfem2d_example_44_1.png new file mode 100644 index 00000000..fa76f88d Binary files /dev/null and b/docs/images/specfem2d_example_files/specfem2d_example_44_1.png differ diff --git a/docs/images/specfem2d_example_files/specfem2d_example_54_1.png b/docs/images/specfem2d_example_files/specfem2d_example_54_1.png new file mode 100644 index 00000000..0ce15028 Binary files /dev/null and b/docs/images/specfem2d_example_files/specfem2d_example_54_1.png differ diff --git a/docs/images/specfem2d_example_files/specfem2d_example_66_0.png b/docs/images/specfem2d_example_files/specfem2d_example_66_0.png new file mode 100644 index 00000000..1f87da76 Binary files /dev/null and b/docs/images/specfem2d_example_files/specfem2d_example_66_0.png differ diff --git a/docs/images/specfem2d_example_files/specfem2d_example_67_0.png b/docs/images/specfem2d_example_files/specfem2d_example_67_0.png new file mode 100644 index 00000000..106caa8b Binary files /dev/null and b/docs/images/specfem2d_example_files/specfem2d_example_67_0.png differ diff --git a/docs/index.rst b/docs/index.rst index aec6e479..b6de57b4 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,13 +1,11 @@ -.. SeisFlows documentation master file, created by - sphinx-quickstart on Mon Oct 26 16:35:00 2020. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - .. image:: images/sf_globe_banner_alpha.png :align: center ------------------ +SeisFlows Documentation +======================= + `SeisFlows `__ is a Python-based waveform inversion package used to tackle the problems of full waveform inversion, seismic migration, and adjoint tomography. SeisFlows constitutes @@ -23,7 +21,8 @@ optimization problems. .. note:: Major backwards-incompatible changes from the legacy codebase include: - - > complete shift to Python3.7 source code, abandoning Python2 support + - > complete shift to Python>=3.7 source code, abandoning Python2 support + - > reworked internal architecture to be more 'Pythonic' - > richer source code emphasizing readability and standards - > a new command line tool for improved package control - > redesigned, dynamically-generated parameter file @@ -31,7 +30,12 @@ optimization problems. `Pyatoa `__ See the `change log `__ for point-by-point changes from the - original codebase. + original codebase. The `Legacy SeisFlows codebase + `__ can still be + accessed along with its `documentation `__, but is no longer + supported by the developers. + .. warning:: @@ -44,48 +48,57 @@ optimization problems. Installation ================= -Successful applications of SeisFlows will typically require direct editing of -source code. For this reason, SeisFlows should be installed directly via the -package library using Pip. The ``-e`` flag ensures that SeisFlows is -installed in development mode, allowing source code changes to be immediately -acccessible to Python. +``SeisFlows`` is installed using a combination of Pip and +`Conda `__. In the +future we aim to unify this into a single install command. -The `devel` branch houses the most up-to-date codebase. We recommend installing -SeisFlows within a virtual environment (e.g., Conda) to preserve your root -environment. +*Preamble: many packages will require the conda-forge channel.* .. code:: bash + + conda config --add channels conda-forge - $ conda create -n seisflows python=3.7 - $ conda activate seisflows - $ git clone --branch devel https://github.com/adjtomo/seisflows.git - $ cd seisflows - $ conda install --file requirements.txt - $ pip install -e . +To install ``SeisFlows`` and it's dependencies, we recommend installing within +a Conda environment to not affect your root environment. The `devel` branch +houses the most up-to-date codebase. --------------------------------- +.. code:: bash -Requirements -============= + conda create -n seisflows python=3.10 + conda activate seisflows + git clone --branch devel https://github.com/adjtomo/seisflows.git + cd seisflows + conda install --file requirements.txt + pip install -e . -In most production-scale workflows, SeisFlows must be run on a cluster, or -high performance computing system. However, serially run example problems -making use of 2D solvers like SPECFEM2D are available for small problems and -workflow tutorials. -SeisFlows + Pyatoa --------------------- -To include the waveform measurement capabilities of Pyatoa, you must install -separately. See the `Pyatoa documentation -`__ for the most up to date -install instructions. +SeisFlows requires the waveform measurement capabilities of +`Pyatoa `__, which currently must be +installed manually to the same Conda environment. .. code:: bash - $ cd .. - $ git clone --branch devel https://github.com/bch0w/pyatoa.git - $ cd pyatoa - $ pip install . + cd .. + git clone --branch devel https://github.com/adjtomo/pyatoa.git + cd pyatoa + conda install --file requirements.txt + pip install -e . + + +.. note:: + Successful applications of SeisFlows will typically require editing the + source code. For this reason, SeisFlows is installed using the Pip ``-e`` + which enables development mode, where source code changes are immediately + acccessible to Python. + + +.. note:: + In most production-scale workflows, SeisFlows must be run on high + performance computing systems running external numerical solvers like + SPECFEM3D. The User will need to install and compile these separately. + However, example problems in SeisFlows make use of, and can install, + SPECFEM2D. + .. toctree:: @@ -112,12 +125,15 @@ install instructions. :caption: Examples specfem2d_example + 2D_example_walkthrough .. toctree:: :maxdepth: 1 :hidden: - :caption: How To + :caption: How To's + example_on_cluster + containers extending .. toctree:: @@ -126,6 +142,7 @@ install instructions. :caption: Development background + design changelog code_dev_plan diff --git a/docs/notebooks/2D_example_walkthrough.ipynb b/docs/notebooks/2D_example_walkthrough.ipynb new file mode 100644 index 00000000..1e553768 --- /dev/null +++ b/docs/notebooks/2D_example_walkthrough.ipynb @@ -0,0 +1,1616 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2D Example Walkthrough" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "The notebook below details a walkthrough of Example \\#1 shown in the `SPECFEM2D example \\#1 `__. This is meant for those who want to understand what is going on under the hood. You are welcome to follow along on your workstation. The following Table of Contents outlines the steps we will take in this tutorial:\n", + "\n", + ".. warning:: \n", + " Navigation links will not work outside of Jupyter. Please use the navigation bar to the left." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. __[Setup SPECFEM2D](#1.-Setup-SPECFEM2D)__ \n", + " a. [Download and compile codebase](#1a.-Download-and-compile-codebase*) \n", + " b. [Create a separate SPECFEM2D working directory](#1b.-Create-a-separate-SPECFEM2D-working-directory) \n", + " c. [Generate initial and target models](#1c.-Generate-initial-and-target-models) \n", + "2. __[Initialize SeisFlows (SF)](#2.-Initialize-SeisFlows-(SF))__ \n", + " a. [SeisFlows working directory and parameter file](#2a.-SF-working-directory-and-parameter-file) \n", + "3. __[Run SeisFlows](#2.-Run-SeisFlows)__ \n", + " a. [Forward simulations](#3a.-Forward-simulations) \n", + " b. [Exploring the SeisFlows directory structure](#3b.-Exploring-the-SF-directory-structure) \n", + " c. [Adjoint simulations](#3c.-Adjoint-simulations) \n", + " d. [Line search and model update](#3d.-Line-search-and-model-update) \n", + "4. __[Conclusions](#4.-Conclusions)__ " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Setup SPECFEM2D \n", + "#### 1a. Download and compile codebase (optional)\n", + "\n", + "> **NOTE**: If you have already downloaded and compiled SPECFEM2D, you can skip most of this subsection (1a). However you will need to edit the first two paths in the following cell (WORKDIR and SPECFEM2D_ORIGINAL), and execute the path structure defined in the cell.\n", + "\n", + "First we'll download and compile SPECFEM2D to generate the binaries necessary to run our simulations. We will then populate a new SPECFEM2D working directory that will be used by SeisFlows. We'll use to Python OS module to do our filesystem processes just to keep everything in Python, but this can easily be accomplished in bash." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import glob\n", + "import shutil\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# vvv USER MUST EDIT THE FOLLOWING PATHS vvv\n", + "WORKDIR = \"/home/bchow/Work/scratch\" \n", + "SPECFEM2D = \"/home/bchow/REPOSITORIES/specfem2d\"\n", + "# where WORKDIR: points to your own working directory\n", + "# and SPECFEM2D: points to an existing specfem2D repository if available (if not set as '')\n", + "# ^^^ USER MUST EDIT THE FOLLOWING PATHS ^^^\n", + "# ======================================================================================================\n", + "\n", + "# Distribute the necessary file structure of the SPECFEM2D repository that we will downloaded/reference\n", + "SPECFEM2D_ORIGINAL = os.path.join(WORKDIR, \"specfem2d\")\n", + "SPECFEM2D_BIN_ORIGINAL = os.path.join(SPECFEM2D_ORIGINAL, \"bin\")\n", + "SPECFEM2D_DATA_ORIGINAL = os.path.join(SPECFEM2D_ORIGINAL, \"DATA\")\n", + "TAPE_2007_EXAMPLE = os.path.join(SPECFEM2D_ORIGINAL, \"EXAMPLES\", \"Tape2007\")\n", + "\n", + "# The SPECFEM2D working directory that we will create separate from the downloaded repo\n", + "SPECFEM2D_WORKDIR = os.path.join(WORKDIR, \"specfem2d_workdir\")\n", + "SPECFEM2D_BIN = os.path.join(SPECFEM2D_WORKDIR, \"bin\")\n", + "SPECFEM2D_DATA = os.path.join(SPECFEM2D_WORKDIR, \"DATA\")\n", + "SPECFEM2D_OUTPUT = os.path.join(SPECFEM2D_WORKDIR, \"OUTPUT_FILES\")\n", + "\n", + "# Pre-defined locations of velocity models we will generate using the solver\n", + "SPECFEM2D_MODEL_INIT = os.path.join(SPECFEM2D_WORKDIR, \"OUTPUT_FILES_INIT\")\n", + "SPECFEM2D_MODEL_TRUE = os.path.join(SPECFEM2D_WORKDIR, \"OUTPUT_FILES_TRUE\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Existing SPECMFE2D respository found, symlinking to working directory\n" + ] + } + ], + "source": [ + "# Download SPECFEM2D from GitHub, devel branch for latest codebase OR symlink from existing repo\n", + "if not os.path.exists(WORKDIR):\n", + " os.makedirs(WORKDIR)\n", + "os.chdir(WORKDIR)\n", + "\n", + "if os.path.exists(\"specfem2d\"):\n", + " print(\"SPECFEM2D repository already found, you may skip this subsection\")\n", + " pass\n", + "elif os.path.exists(SPECFEM2D):\n", + " print(\"Existing SPECMFE2D respository found, symlinking to working directory\")\n", + " os.symlink(SPECFEM2D, \"./specfem2d\")\n", + "else:\n", + " print(\"Cloning respository from GitHub\")\n", + " ! git clone --recursive --branch devel https://github.com/geodynamics/specfem2d.git" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Compile SPECFEM2D to generate the Makefile\n", + "os.chdir(SPECFEM2D_ORIGINAL)\n", + "if not os.path.exists(\"./config.log\"):\n", + " os.system(\"./configure\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Run make to generate SPECFEM2D binaries\n", + "if not os.path.exists(\"bin\"):\n", + " os.system(\"make all\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/bchow/REPOSITORIES/specfem2d\n", + "xadj_seismogram\t\t xconvolve_source_timefunction xspecfem2D\n", + "xcheck_quality_external_mesh xmeshfem2D\t\t xsum_kernels\n", + "xcombine_sem\t\t xsmooth_sem\n" + ] + } + ], + "source": [ + "# Check out the binary files that have been created\n", + "os.chdir(SPECFEM2D_ORIGINAL)\n", + "! pwd\n", + "! ls bin/" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1b. Create a separate SPECFEM2D working directory\n", + "\n", + "Next we'll create a new SPECFEM2D working directory, separate from the original repository. The intent here is to isolate the original SPECFEM2D repository from our working state, to protect it from things like accidental file deletions or manipulations. This is not a mandatory step for using SeisFlows, but it helps keep file structure clean in the long run, and is the SeisFlows3 dev team's preferred method of using SPECFEM. " + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + ".. note::\n", + " All SPECFEM2D/3D/3D_GLOBE need to run successfully are the bin/, DATA/, and OUTPUT_FILES/ directories. Everything else in the repository is not mandatory for running binaries." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this tutorial we will be using the [Tape2007 example problem](https://github.com/geodynamics/specfem2d/tree/devel/EXAMPLES/Tape2007) to define our __DATA/__ directory (last tested 8/15/22, bdba4389)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/bchow/Work/scratch/specfem2d_workdir\n", + "bin DATA\n" + ] + } + ], + "source": [ + "# Incase we've run this docs page before, delete the working directory before remaking\n", + "if os.path.exists(SPECFEM2D_WORKDIR):\n", + " shutil.rmtree(SPECFEM2D_WORKDIR)\n", + "\n", + "os.mkdir(SPECFEM2D_WORKDIR)\n", + "os.chdir(SPECFEM2D_WORKDIR)\n", + "\n", + "# Copy the binary files incase we update the source code. These can also be symlinked.\n", + "shutil.copytree(SPECFEM2D_BIN_ORIGINAL, \"bin\")\n", + "\n", + "# Copy the DATA/ directory because we will be making edits here frequently and it's useful to\n", + "# retain the original files for reference. We will be running one of the example problems: Tape2007\n", + "shutil.copytree(os.path.join(TAPE_2007_EXAMPLE, \"DATA\"), \"DATA\")\n", + "\n", + "! pwd\n", + "! ls" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " -------------------------------------------------------------------------------\r\n", + " -------------------------------------------------------------------------------\r\n", + " D a t e : 16 - 08 - 2022 T i m e : 14:26:37\r\n", + " -------------------------------------------------------------------------------\r\n", + " -------------------------------------------------------------------------------\r\n", + "\r\n", + "see results in directory: OUTPUT_FILES/\r\n", + "\r\n", + "done\r\n", + "Tue Aug 16 02:26:37 PM AKDT 2022\r\n" + ] + } + ], + "source": [ + "# Run the Tape2007 example to make sure SPECFEM2D is working as expected\n", + "os.chdir(TAPE_2007_EXAMPLE)\n", + "! ./run_this_example.sh > output_log.txt\n", + "\n", + "assert(os.path.exists(\"OUTPUT_FILES/forward_image000004800.jpg\")), \\\n", + " (f\"Example did not run, the remainder of this docs page will likely not work.\"\n", + " f\"Please check the following directory: {TAPE_2007_EXAMPLE}\")\n", + "\n", + "! tail output_log.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "------------------------------------\n", + "Now we need to manually set up our SPECFEM2D working directory. As mentioned in the previous cell, the only required elements of this working directory are the following (these files will form the basis for how SeisFlows3 operates within the SPECFEM2D framework):\n", + "\n", + "1. __bin/__ directory containing SPECFEM2D binaries\n", + "2. __DATA/__ directory containing SOURCE and STATION files, as well as a SPECFEM2D Par_file\n", + "3. __OUTPUT_FILES/proc??????_*.bin__ files which define the starting (and target) models" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + ".. note:: \n", + " This file structure is the same for all versions of SPECFEM (2D/3D/3D_GLOBE)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "interfaces_Tape2007.dat\t\t SOURCE_003 SOURCE_012 SOURCE_021\r\n", + "model_velocity.dat_checker\t SOURCE_004 SOURCE_013 SOURCE_022\r\n", + "Par_file\t\t\t SOURCE_005 SOURCE_014 SOURCE_023\r\n", + "Par_file_Tape2007_132rec_checker SOURCE_006 SOURCE_015 SOURCE_024\r\n", + "Par_file_Tape2007_onerec\t SOURCE_007 SOURCE_016 SOURCE_025\r\n", + "proc000000_model_velocity.dat_input SOURCE_008 SOURCE_017 STATIONS\r\n", + "SOURCE\t\t\t\t SOURCE_009 SOURCE_018 STATIONS_checker\r\n", + "SOURCE_001\t\t\t SOURCE_010 SOURCE_019\r\n", + "SOURCE_002\t\t\t SOURCE_011 SOURCE_020\r\n" + ] + } + ], + "source": [ + "# First we will set the correct SOURCE and STATION files.\n", + "# This is the same task as shown in ./run_this_example.sh\n", + "os.chdir(SPECFEM2D_DATA)\n", + "\n", + "# Symlink source 001 as our main source\n", + "if os.path.exists(\"SOURCE\"):\n", + " os.remove(\"SOURCE\")\n", + "os.symlink(\"SOURCE_001\", \"SOURCE\")\n", + "\n", + "# Copy the correct Par_file so that edits do not affect the original file\n", + "if os.path.exists(\"Par_file\"):\n", + " os.remove(\"Par_file\")\n", + "shutil.copy(\"Par_file_Tape2007_onerec\", \"Par_file\")\n", + "\n", + "! ls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1c. Generate initial and target models\n", + "\n", + "Since we're doing a synthetic-synthetic inversion, we need to manually set up the velocity models with which we generate our synthetic waveforms. The naming conventions for these models are:\n", + "\n", + "1. __MODEL_INIT:__ The initial or starting model. Used to generate the actual synthetic seismograms. This is considered M00.\n", + "2. __MODEL_TRUE:__ The target or true model. Used to generate 'data' (also synthetic). This is the reference model that our inversion is trying to resolve.\n", + "\n", + "The starting model is defined as a homogeneous halfspace uin the Tape2007 example problem. We will need to run both `xmeshfem2D` and `xspecfem2D` to generate the required velocity model database files. We will generate our target model by slightly perturbing the parameters of the initial model." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + ".. note::\n", + " We can use the SeisFlows3 command line option `seisflows sempar` to directly edit the SPECFEM2D Par_file in the command line. This will work for the SPECFEM3D Par_file as well." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "setup_with_binary_database: 0 -> 1\n", + "SAVE_MODEL: default -> binary\n", + "save_ASCII_kernels: .true. -> .false.\n" + ] + } + ], + "source": [ + "os.chdir(SPECFEM2D_DATA)\n", + "\n", + "# Ensure that SPECFEM2D outputs the velocity model in the expected binary format\n", + "! seisflows sempar setup_with_binary_database 1 # allow creation of .bin files\n", + "! seisflows sempar save_model binary # output model in .bin database format\n", + "! seisflows sempar save_ascii_kernels .false. # output kernels in .bin format, not ASCII" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bin DATA OUTPUT_FILES\r\n" + ] + } + ], + "source": [ + "# SPECFEM requires that we create the OUTPUT_FILES directory before running\n", + "os.chdir(SPECFEM2D_WORKDIR)\n", + "\n", + "if os.path.exists(SPECFEM2D_OUTPUT):\n", + " shutil.rmtree(SPECFEM2D_OUTPUT)\n", + " \n", + "os.mkdir(SPECFEM2D_OUTPUT)\n", + "\n", + "! ls" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " **********************************************\n", + " **** Specfem 2-D Solver - serial version ****\n", + " **********************************************\n", + "\n", + " Running Git version of the code corresponding to commit cf89366717d9435985ba852ef1d41a10cee97884\n", + " dating From Date: Mon Nov 29 23:20:51 2021 -0800\n", + "\n", + "\n", + " NDIM = 2\n", + " -------------------------------------------------------------------------------\n", + " Program SPECFEM2D: \n", + " -------------------------------------------------------------------------------\n", + " -------------------------------------------------------------------------------\n", + " Tape-Liu-Tromp (GJI 2007)\n", + " -------------------------------------------------------------------------------\n", + " -------------------------------------------------------------------------------\n", + " D a t e : 16 - 08 - 2022 T i m e : 14:26:52\n", + " -------------------------------------------------------------------------------\n", + " -------------------------------------------------------------------------------\n" + ] + } + ], + "source": [ + "# GENERATE MODEL_INIT\n", + "os.chdir(SPECFEM2D_WORKDIR)\n", + "\n", + "# Run the mesher and solver to generate our initial model\n", + "! ./bin/xmeshfem2D > OUTPUT_FILES/mesher_log.txt\n", + "! ./bin/xspecfem2D > OUTPUT_FILES/solver_log.txt\n", + "\n", + "# Move the model files (*.bin) into the OUTPUT_FILES directory, where SeisFlows3 expects them\n", + "! mv DATA/*bin OUTPUT_FILES\n", + "\n", + "# Make sure we don't overwrite this initial model when creating our target model in the next step\n", + "! mv OUTPUT_FILES OUTPUT_FILES_INIT\n", + "\n", + "! head OUTPUT_FILES_INIT/solver_log.txt\n", + "! tail OUTPUT_FILES_INIT/solver_log.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----------------------------\n", + "\n", + "Now we want to perturb the initial model to create our target model (__MODEL_TRUE__). The seisflows command line subargument `seisflows sempar velocity_model` will let us view and edit the velocity model. You can also do this manually by editing the Par_file directly. " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "VELOCITY_MODEL:\r\n", + "\r\n", + "1 1 2600.d0 5800.d0 3500.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0\r\n", + "->\r\n", + "1 1 2600.d0 5900.d0 3550.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0\r\n" + ] + } + ], + "source": [ + "# GENERATE MODEL_TRUE\n", + "os.chdir(SPECFEM2D_DATA)\n", + "\n", + "# Edit the Par_file by increasing velocities by ~10% \n", + "! seisflows sempar velocity_model '1 1 2600.d0 5900.d0 3550.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0'" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " **********************************************\n", + " **** Specfem 2-D Solver - serial version ****\n", + " **********************************************\n", + "\n", + " Running Git version of the code corresponding to commit cf89366717d9435985ba852ef1d41a10cee97884\n", + " dating From Date: Mon Nov 29 23:20:51 2021 -0800\n", + "\n", + "\n", + " NDIM = 2\n", + " -------------------------------------------------------------------------------\n", + " Program SPECFEM2D: \n", + " -------------------------------------------------------------------------------\n", + " -------------------------------------------------------------------------------\n", + " Tape-Liu-Tromp (GJI 2007)\n", + " -------------------------------------------------------------------------------\n", + " -------------------------------------------------------------------------------\n", + " D a t e : 16 - 08 - 2022 T i m e : 14:26:52\n", + " -------------------------------------------------------------------------------\n", + " -------------------------------------------------------------------------------\n" + ] + } + ], + "source": [ + "# Re-run the mesher and solver to generate our target velocity model\n", + "os.chdir(SPECFEM2D_WORKDIR)\n", + "\n", + "# Make sure the ./OUTPUT_FILES directory exists since we moved the old one\n", + "if os.path.exists(SPECFEM2D_OUTPUT):\n", + " shutil.rmtree(SPECFEM2D_OUTPUT)\n", + "os.mkdir(SPECFEM2D_OUTPUT)\n", + "\n", + "# Run the binaries to generate MODEL_TRUE\n", + "! ./bin/xmeshfem2D > OUTPUT_FILES/mesher_log.txt\n", + "! ./bin/xspecfem2D > OUTPUT_FILES/solver_log.txt\n", + "\n", + "# Move all the relevant files into OUTPUT_FILES \n", + "! mv ./DATA/*bin OUTPUT_FILES\n", + "! mv OUTPUT_FILES OUTPUT_FILES_TRUE\n", + "\n", + "! head OUTPUT_FILES_INIT/solver_log.txt\n", + "! tail OUTPUT_FILES_INIT/solver_log.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bin DATA OUTPUT_FILES_INIT OUTPUT_FILES_TRUE\r\n" + ] + } + ], + "source": [ + "# Great, we have all the necessary SPECFEM files to run our SeisFlows inversion!\n", + "! ls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Initialize SeisFlows (SF)\n", + "In this Section we will look at a SeisFlows working directory, parameter file, and working state.\n", + "\n", + "#### 2a. SeisFlows working directory and parameter file\n", + "\n", + "As with SPECFEM, SeisFlows requires a parameter file (__parameters.yaml__) that controls how an automated workflow will proceed. Because SeisFlows is modular, there are a large number of potential parameters which may be present in a SeisFlows parameter file, as each sub-module may have its own set of unique parameters.\n", + "\n", + "In contrast to SPECFEM's method of listing all available parameters and leaving it up the User to determine which ones are relevant to them, SeisFlows dynamically builds its parameter file based on User inputs. In this subsection we will use the built-in SeisFlows command line tools to generate and populate the parameter file. " + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + ".. note::\n", + " See the `parameter file documentation page `__ for a more in depth exploration of this central SeisFlows file." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the previous section we saw the `sempar` command in action. We can use the `-h` or help flag to list all available SiesFlows3 command line commands." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "usage: seisflows [-h] [-w [WORKDIR]] [-p [PARAMETER_FILE]]\r\n", + " {setup,configure,swap,init,submit,resume,restart,clean,par,sempar,check,print,reset,debug,examples}\r\n", + " ...\r\n", + "\r\n", + "================================================================================\r\n", + "\r\n", + " SeisFlows: Waveform Inversion Package \r\n", + "\r\n", + "================================================================================\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n", + " -w [WORKDIR], --workdir [WORKDIR]\r\n", + " The SeisFlows working directory, default: cwd\r\n", + " -p [PARAMETER_FILE], --parameter_file [PARAMETER_FILE]\r\n", + " Parameters file, default: 'parameters.yaml'\r\n", + "\r\n", + "command:\r\n", + " Available SeisFlows arguments and their intended usages\r\n", + "\r\n", + " setup Setup working directory from scratch\r\n", + " configure Fill parameter file with defaults\r\n", + " swap Swap module parameters in an existing parameter file\r\n", + " init Initiate working environment\r\n", + " submit Submit initial workflow to system\r\n", + " resume Re-submit previous workflow to system\r\n", + " restart Remove current environment and submit new workflow\r\n", + " clean Remove files relating to an active working environment\r\n", + " par View and edit SeisFlows parameter file\r\n", + " sempar View and edit SPECFEM parameter file\r\n", + " check Check state of an active environment\r\n", + " print Print information related to an active environment\r\n", + " reset Reset modules within an active state\r\n", + " debug Start interactive debug environment\r\n", + " examples Look at and run pre-configured example problems\r\n", + "\r\n", + "'seisflows [command] -h' for more detailed descriptions of each command.\r\n" + ] + } + ], + "source": [ + "! seisflows -h" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "creating parameter file: parameters.yaml\n", + "parameters.yaml sflog.txt specfem2d specfem2d_workdir\n" + ] + } + ], + "source": [ + "# The command 'setup' creates the 'parameters.yaml' file that controls all of SeisFlows\n", + "# the '-f' flag removes any exist 'parameters.yaml' file that might be in the directory\n", + "os.chdir(WORKDIR)\n", + "! seisflows setup -f\n", + "! ls" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# //////////////////////////////////////////////////////////////////////////////\r\n", + "#\r\n", + "# SeisFlows YAML Parameter File\r\n", + "#\r\n", + "# //////////////////////////////////////////////////////////////////////////////\r\n", + "#\r\n", + "# Modules correspond to the structure of the source code, and determine\r\n", + "# SeisFlows' behavior at runtime. Each module requires its own sub-parameters.\r\n", + "#\r\n", + "# .. rubric::\r\n", + "# - To determine available options for modules listed below, run:\r\n", + "# > seisflows print modules\r\n", + "# - To auto-fill with docstrings and default values (recommended), run:\r\n", + "# > seisflows configure\r\n", + "# - To set values as NoneType, use: null\r\n", + "# - To set values as infinity, use: inf\r\n", + "#\r\n", + "# MODULES\r\n", + "# ///////\r\n", + "# workflow (str): The types and order of functions for running SeisFlows\r\n", + "# system (str): Computer architecture of the system being used\r\n", + "# solver (str): External numerical solver to use for waveform simulations\r\n", + "# preprocess (str): Preprocessing schema for waveform data\r\n", + "# optimize (str): Optimization algorithm for the inverse problem\r\n", + "# ==============================================================================\r\n", + "workflow: forward\r\n", + "system: workstation\r\n", + "solver: specfem2d\r\n", + "preprocess: default\r\n", + "optimize: gradient\r\n" + ] + } + ], + "source": [ + "# Let's have a look at this file, which has not yet been populated\n", + "! cat parameters.yaml" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " SEISFLOWS MODULES \r\n", + " ///////////////// \r\n", + "'-': module, '*': class\r\n", + "\r\n", + "- workflow\r\n", + " * forward\r\n", + " * inversion\r\n", + " * migration\r\n", + "- system\r\n", + " * chinook\r\n", + " * cluster\r\n", + " * frontera\r\n", + " * lsf\r\n", + " * maui\r\n", + " * slurm\r\n", + " * workstation\r\n", + "- solver\r\n", + " * specfem\r\n", + " * specfem2d\r\n", + " * specfem3d\r\n", + " * specfem3d_globe\r\n", + "- preprocess\r\n", + " * default\r\n", + " * pyaflowa\r\n", + "- optimize\r\n", + " * LBFGS\r\n", + " * NLCG\r\n", + " * gradient\r\n" + ] + } + ], + "source": [ + "# We can use the `seisflows print modules` command to list out the available options \n", + "! seisflows print modules" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "workflow: forward -> inversion\n", + "# //////////////////////////////////////////////////////////////////////////////\n", + "#\n", + "# SeisFlows YAML Parameter File\n", + "#\n", + "# //////////////////////////////////////////////////////////////////////////////\n", + "#\n", + "# Modules correspond to the structure of the source code, and determine\n", + "# SeisFlows' behavior at runtime. Each module requires its own sub-parameters.\n", + "#\n", + "# .. rubric::\n", + "# - To determine available options for modules listed below, run:\n", + "# > seisflows print modules\n", + "# - To auto-fill with docstrings and default values (recommended), run:\n", + "# > seisflows configure\n", + "# - To set values as NoneType, use: null\n", + "# - To set values as infinity, use: inf\n", + "#\n", + "# MODULES\n", + "# ///////\n", + "# workflow (str): The types and order of functions for running SeisFlows\n", + "# system (str): Computer architecture of the system being used\n", + "# solver (str): External numerical solver to use for waveform simulations\n", + "# preprocess (str): Preprocessing schema for waveform data\n", + "# optimize (str): Optimization algorithm for the inverse problem\n", + "# ==============================================================================\n", + "workflow: inversion\n", + "system: workstation\n", + "solver: specfem2d\n", + "preprocess: default\n", + "optimize: gradient\n" + ] + } + ], + "source": [ + "# For this example, we can use most of the default modules, however we need to \n", + "# change the SOLVER module to let SeisFlows know we're using SPECFEM2D (as opposed to 3D)\n", + "! seisflows par workflow inversion\n", + "! cat parameters.yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-------------------------\n", + "The `seisflows configure` command populates the parameter file based on the chosen modules. SeisFlows will attempt to fill in all parameters with reasonable default values. Docstrings above each module show descriptions and available options for each of these parameters. \n", + "\n", + "In the follownig cell we will use the `seisflows par` command to edit the parameters.yaml file directly, replacing some default parameters with our own values. Comments next to each evaluation describe the choice for each." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# //////////////////////////////////////////////////////////////////////////////\r\n", + "#\r\n", + "# SeisFlows YAML Parameter File\r\n", + "#\r\n", + "# //////////////////////////////////////////////////////////////////////////////\r\n", + "#\r\n", + "# Modules correspond to the structure of the source code, and determine\r\n", + "# SeisFlows' behavior at runtime. Each module requires its own sub-parameters.\r\n", + "#\r\n", + "# .. rubric::\r\n", + "# - To determine available options for modules listed below, run:\r\n", + "# > seisflows print modules\r\n", + "# - To auto-fill with docstrings and default values (recommended), run:\r\n", + "# > seisflows configure\r\n", + "# - To set values as NoneType, use: null\r\n", + "# - To set values as infinity, use: inf\r\n", + "#\r\n", + "# MODULES\r\n", + "# ///////\r\n", + "# workflow (str): The types and order of functions for running SeisFlows\r\n", + "# system (str): Computer architecture of the system being used\r\n", + "# solver (str): External numerical solver to use for waveform simulations\r\n", + "# preprocess (str): Preprocessing schema for waveform data\r\n", + "# optimize (str): Optimization algorithm for the inverse problem\r\n", + "# ==============================================================================\r\n", + "workflow: inversion\r\n", + "system: workstation\r\n", + "solver: specfem2d\r\n", + "preprocess: default\r\n", + "optimize: gradient\r\n", + "# =============================================================================\r\n", + "#\r\n", + "# Forward Workflow\r\n", + "# ----------------\r\n", + "# Run forward solver in parallel and (optionally) calculate\r\n", + "# data-synthetic misfit and adjoint sources.\r\n", + "#\r\n", + "# Parameters\r\n", + "# ----------\r\n", + "# :type modules: list of module\r\n", + "# :param modules: instantiated SeisFlows modules which should have been\r\n", + "# generated by the function `seisflows.config.import_seisflows` with a\r\n", + "# parameter file generated by seisflows.configure\r\n", + "# :type data_case: str\r\n", + "# :param data_case: How to address 'data' in the workflow, available options:\r\n", + "# 'data': real data will be provided by the user in\r\n", + "# `path_data/{source_name}` in the same format that the solver will\r\n", + "# produce synthetics (controlled by `solver.format`) OR\r\n", + "# synthetic': 'data' will be generated as synthetic seismograms using\r\n", + "# a target model provided in `path_model_true`. If None, workflow will\r\n" + ] + } + ], + "source": [ + "! seisflows configure\n", + "! head --lines=50 parameters.yaml" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ntask: 1 -> 3\n", + "materials: acoustic -> elastic\n", + "end: 1 -> 2\n", + "data_case: data -> synthetic\n", + "components: ZNE -> Y\n", + "step_count_max: 10 -> 5\n", + "path_specfem_bin: null -> /home/bchow/Work/scratch/specfem2d_workdir/bin\n", + "path_specfem_data: null -> /home/bchow/Work/scratch/specfem2d_workdir/DATA\n", + "path_model_init: null ->\n", + "/home/bchow/Work/scratch/specfem2d_workdir/OUTPUT_FILES_INIT\n", + "path_model_true: null ->\n", + "/home/bchow/Work/scratch/specfem2d_workdir/OUTPUT_FILES_TRUE\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# EDIT THE SEISFLOWS PARAMETER FILE\n", + "! seisflows par ntask 3 # set the number of sources/events to use\n", + "! seisflows par materials elastic # update Vp and Vs during inversion\n", + "! seisflows par end 2 # final iteration -- we will only run 1\n", + "! seisflows par data_case synthetic # synthetic-synthetic means we need both INIT and TRUE models\n", + "! seisflows par components Y # this default example creates Y-component seismograms\n", + "! seisflows par step_count_max 5 # limit the number of steps in the line search\n", + "\n", + "# Use Python syntax here to access path constants\n", + "os.system(f\"seisflows par path_specfem_bin {SPECFEM2D_BIN}\") # set path to SPECFEM2D binaries\n", + "os.system(f\"seisflows par path_specfem_data {SPECFEM2D_DATA}\") # set path to SEPCFEM2D DATA/\n", + "os.system(f\"seisflows par path_model_init {SPECFEM2D_MODEL_INIT}\") # set path to INIT model\n", + "os.system(f\"seisflows par path_model_true {SPECFEM2D_MODEL_TRUE}\") # set path to TRUE model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "------------------------------\n", + "One last thing, we will need to edit the SPECFEM2D Par_file parameter `MODEL` such that `xmeshfem2d` reads our pre-built velocity models (\\*.bin files) rather than the meshing parameters defined in the Par_file." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MODEL: default -> gll\r\n" + ] + } + ], + "source": [ + "os.chdir(SPECFEM2D_DATA)\n", + "! seisflows sempar model gll" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Run SeisFlows\n", + "\n", + "In this Section we will run SeisFlows to generate synthetic seismograms, kernels, a gradient, and an updated velocity model.\n", + "\n", + "#### 3a. Forward simulations\n", + "\n", + "SeisFlows is an automated workflow tool, such that once we run `seisflows submit` we should not need to intervene in the workflow. However the package does allow the User flexibility in how they want the workflow to behave.\n", + "\n", + "For example, we can run our workflow in stages by taking advantage of the `stop_after` parameter. As its name suggests, `stop_after` allows us to stop a workflow prematurely so that we may stop and look at results, or debug a failing workflow.\n", + "\n", + "The `seisflows print flow` command tells us what functions we can use for the `stop_after` parameter. " + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " SEISFLOWS WORKFLOW TASK LIST \r\n", + " //////////////////////////// \r\n", + "Task list for \r\n", + "\r\n", + "1: evaluate_initial_misfit\r\n", + "2: run_adjoint_simulations\r\n", + "3: postprocess_event_kernels\r\n", + "4: evaluate_gradient_from_kernels\r\n", + "5: initialize_line_search\r\n", + "6: perform_line_search\r\n", + "7: finalize_iteration\r\n" + ] + } + ], + "source": [ + "os.chdir(WORKDIR)\n", + "! seisflows print tasks" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----------------------------\n", + "In the Inversion workflow, the tasks listed are described as follows:\n", + "\n", + "1. __evaluate_initial_misfit:__ \n", + " a. Prepare data for inversion by either copying data from disk or generating 'synthetic data' with MODEL_TRUE \n", + " b. Call numerical solver to run forward simulations using MODEL_INIT, generating synthetics \n", + " c. Evaluate the objective function by performing waveform comparisons \n", + " d. Prepare `run_adjoint_simulations` step by generating adjoint sources and auxiliary files\n", + "2. __run_adjoint_simulations:__ Call numerical solver to run adjoint simulation, generating kernels\n", + "3. __postprocess_event_kernels:__ Combine all event kernels into a misfit kernel. \n", + "4. __evaluate_gradient_from_kernels:__ Smooth and mask the misfit kernel to create the gradient\n", + "4. __initialize_line_search:__ Call on the optimization library to scale the gradient by a step length to compute the search direction. Prepare file structure for line search.\n", + "5. __perform_line_search:__ Perform a line search by algorithmically scaling the gradient and evaluating the misfit function (forward simulations and misfit quantification) until misfit is acceptably reduced.\n", + "6. __finalize_iteration:__ Run any finalization steps such as saving traces, kernels, gradients and models to disk, setting up SeisFlows3 for any subsequent iterations. Clean the scratch/ directory in preparation for subsequent iterations\n", + "\n", + "Let's set the `stop_after` argument to __evaluate_initial_misfit__, this will halt the workflow after the intialization step. " + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stop_after: null -> evaluate_initial_misfit\r\n" + ] + } + ], + "source": [ + "! seisflows par stop_after evaluate_initial_misfit" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----------------------\n", + "Now let's run SeisFlows. There are two ways to do this: `submit` and `restart`\n", + "\n", + "1. `seisflows submit` is used to run new workflows and resume stopped or failed workflows.\n", + "2. The `restart` command is simply a convenience function that runs `clean` (to remove an active working state) and `submit` (to submit a fresh workflow). \n", + "\n", + "Since this is our first run, we'll use `seisflows submit`." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2022-08-16 14:32:48 (I) | \n", + "================================================================================\n", + " SETTING UP INVERSION WORKFLOW \n", + "================================================================================\n", + "2022-08-16 14:32:55 (D) | running setup for module 'system.Workstation'\n", + "2022-08-16 14:32:57 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/sflog_001.txt\n", + "2022-08-16 14:32:57 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/parameters_001.yaml\n", + "2022-08-16 14:32:57 (D) | running setup for module 'solver.Specfem2D'\n", + "2022-08-16 14:32:57 (I) | initializing 3 solver directories\n", + "2022-08-16 14:32:57 (D) | initializing solver directory source: 001\n", + "2022-08-16 14:33:04 (D) | linking source '001' as 'mainsolver'\n", + "2022-08-16 14:33:04 (D) | initializing solver directory source: 002\n", + "2022-08-16 14:33:09 (D) | initializing solver directory source: 003\n", + "2022-08-16 14:33:16 (D) | running setup for module 'preprocess.Default'\n", + "2022-08-16 14:33:16 (D) | running setup for module 'optimize.Gradient'\n", + "2022-08-16 14:33:17 (I) | no optimization checkpoint found, assuming first run\n", + "2022-08-16 14:33:17 (I) | re-loading optimization module from checkpoint\n", + "2022-08-16 14:33:17 (I) | \n", + "////////////////////////////////////////////////////////////////////////////////\n", + " RUNNING ITERATION 01 \n", + "////////////////////////////////////////////////////////////////////////////////\n", + "2022-08-16 14:33:17 (I) | \n", + "================================================================================\n", + " RUNNING INVERSION WORKFLOW \n", + "================================================================================\n", + "2022-08-16 14:33:17 (I) | \n", + "////////////////////////////////////////////////////////////////////////////////\n", + " EVALUATING MISFIT FOR INITIAL MODEL \n", + "////////////////////////////////////////////////////////////////////////////////\n", + "2022-08-16 14:33:17 (I) | checking initial model parameters\n", + "2022-08-16 14:33:17 (I) | 5800.00 <= vp <= 5800.00\n", + "2022-08-16 14:33:17 (I) | 2600.00 <= rho <= 2600.00\n", + "2022-08-16 14:33:17 (I) | 3500.00 <= vs <= 3500.00\n", + "2022-08-16 14:33:17 (I) | checking true/target model parameters\n", + "2022-08-16 14:33:17 (I) | 5900.00 <= vp <= 5900.00\n", + "2022-08-16 14:33:17 (I) | 2600.00 <= rho <= 2600.00\n", + "2022-08-16 14:33:17 (I) | 3550.00 <= vs <= 3550.00\n", + "2022-08-16 14:33:17 (I) | preparing observation data for source 001\n", + "2022-08-16 14:33:17 (I) | running forward simulation w/ target model for 001\n", + "2022-08-16 14:33:21 (I) | evaluating objective function for source 001\n", + "2022-08-16 14:33:21 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:33:25 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:33:25 (I) | preparing observation data for source 002\n", + "2022-08-16 14:33:25 (I) | running forward simulation w/ target model for 002\n", + "2022-08-16 14:33:29 (I) | evaluating objective function for source 002\n", + "2022-08-16 14:33:29 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:33:33 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:33:33 (I) | preparing observation data for source 003\n", + "2022-08-16 14:33:33 (I) | running forward simulation w/ target model for 003\n", + "2022-08-16 14:33:36 (I) | evaluating objective function for source 003\n", + "2022-08-16 14:33:36 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:33:40 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:33:40 (I) | stop workflow at `stop_after`: evaluate_initial_misfit\n" + ] + } + ], + "source": [ + "! seisflows submit " + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + ".. note::\n", + " For a detailed exploration of a SeisFlows working directory, see the `working directory `__ documentation page where we explain each of the files and directories that have been generated during this workflow. Below we just look at two files which are required for our adjoint simulation, the adjoint sources (.adj) and STATIONS_ADJOINT file" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " -48.0000000 0.0000000\r\n", + " -47.9400000 0.0000000\r\n", + " -47.8800000 0.0000000\r\n", + " -47.8200000 0.0000000\r\n", + " -47.7600000 0.0000000\r\n", + " -47.7000000 0.0000000\r\n", + " -47.6400000 0.0000000\r\n", + " -47.5800000 0.0000000\r\n", + " -47.5200000 0.0000000\r\n", + " -47.4600000 0.0000000\r\n" + ] + } + ], + "source": [ + "# The adjoint source is created in the same format as the synthetics (two-column ASCII) \n", + "! head scratch/solver/001/traces/adj/AA.S0001.BXY.adj" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3b. Adjoint simulations\n", + "\n", + "Now that we have all the required files for running an adjoint simulation (\\*.adj waveforms and STATIONS_ADJOINT file), we can continue with the SeisFlows3 Inversion workflow. No need to edit the Par_file or anything like that, SeisFlows3 will take care of that under the hood. We simply need to tell the workflow (via the parameters.yaml file) to `resume_from` the correct function. We can have a look at these functions again:" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " SEISFLOWS WORKFLOW TASK LIST \r\n", + " //////////////////////////// \r\n", + "Task list for \r\n", + "\r\n", + "1: evaluate_initial_misfit\r\n", + "2: run_adjoint_simulations\r\n", + "3: postprocess_event_kernels\r\n", + "4: evaluate_gradient_from_kernels\r\n", + "5: initialize_line_search\r\n", + "6: perform_line_search\r\n", + "7: finalize_iteration\r\n" + ] + } + ], + "source": [ + "! seisflows print tasks" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stop_after: evaluate_initial_misfit -> evaluate_gradient_from_kernels\r\n" + ] + } + ], + "source": [ + "# We'll stop just before the line search so that we can take a look at the files \n", + "# generated during the middle tasks\n", + "! seisflows par stop_after evaluate_gradient_from_kernels" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2022-08-16 14:36:42 (D) | setting iteration==1 from state file\n", + "2022-08-16 14:36:42 (I) | \n", + "================================================================================\n", + " SETTING UP INVERSION WORKFLOW \n", + "================================================================================\n", + "2022-08-16 14:36:48 (D) | running setup for module 'system.Workstation'\n", + "2022-08-16 14:36:51 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/sflog_002.txt\n", + "2022-08-16 14:36:51 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/parameters_002.yaml\n", + "2022-08-16 14:36:51 (D) | running setup for module 'solver.Specfem2D'\n", + "2022-08-16 14:36:51 (I) | initializing 3 solver directories\n", + "2022-08-16 14:36:51 (D) | running setup for module 'preprocess.Default'\n", + "2022-08-16 14:36:52 (D) | running setup for module 'optimize.Gradient'\n", + "2022-08-16 14:36:53 (I) | re-loading optimization module from checkpoint\n", + "2022-08-16 14:36:54 (I) | re-loading optimization module from checkpoint\n", + "2022-08-16 14:36:54 (I) | \n", + "////////////////////////////////////////////////////////////////////////////////\n", + " RUNNING ITERATION 01 \n", + "////////////////////////////////////////////////////////////////////////////////\n", + "2022-08-16 14:36:54 (I) | \n", + "================================================================================\n", + " RUNNING INVERSION WORKFLOW \n", + "================================================================================\n", + "2022-08-16 14:36:54 (I) | 'evaluate_initial_misfit' has already been run, skipping\n", + "2022-08-16 14:36:54 (I) | \n", + "////////////////////////////////////////////////////////////////////////////////\n", + " EVALUATING EVENT KERNELS W/ ADJOINT SIMULATIONS \n", + "////////////////////////////////////////////////////////////////////////////////\n", + "2022-08-16 14:36:54 (I) | running SPECFEM executable bin/xspecfem2D, log to 'adj_solver.log'\n", + "2022-08-16 14:37:05 (D) | renaming output event kernels: 'alpha' -> 'vp'\n", + "2022-08-16 14:37:05 (D) | renaming output event kernels: 'beta' -> 'vs'\n", + "2022-08-16 14:37:05 (I) | running SPECFEM executable bin/xspecfem2D, log to 'adj_solver.log'\n", + "2022-08-16 14:37:16 (D) | renaming output event kernels: 'alpha' -> 'vp'\n", + "2022-08-16 14:37:16 (D) | renaming output event kernels: 'beta' -> 'vs'\n", + "2022-08-16 14:37:18 (I) | running SPECFEM executable bin/xspecfem2D, log to 'adj_solver.log'\n", + "2022-08-16 14:37:29 (D) | renaming output event kernels: 'alpha' -> 'vp'\n", + "2022-08-16 14:37:29 (D) | renaming output event kernels: 'beta' -> 'vs'\n", + "2022-08-16 14:37:30 (I) | \n", + "////////////////////////////////////////////////////////////////////////////////\n", + " GENERATING/PROCESSING MISFIT KERNEL \n", + "////////////////////////////////////////////////////////////////////////////////\n", + "2022-08-16 14:37:30 (I) | combining event kernels into single misfit kernel\n", + "2022-08-16 14:37:31 (I) | scaling gradient to absolute model perturbations\n", + "2022-08-16 14:37:32 (I) | stop workflow at `stop_after`: evaluate_gradient_from_kernels\n" + ] + } + ], + "source": [ + "# We can use the `seisflows submit` command to continue an active workflow\n", + "# The state file created during the first run will tell the workflow to resume from the stopped point in the workflow\n", + "! seisflows submit " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----------------\n", + "The function __run_adjoint_simulations()__ has run adjoint simulations to generate event kernels. The functions __postprocess_event_kernels__ and __evaluate_gradient_from_kernels__ will have summed and (optionally) smoothed the kernels to recover the gradient, which will be used to update our starting model.\n", + "\n", + "> **NOTE**: Since we did not specify any smoothing lenghts (PAR.SMOOTH_H and PAR.SMOOTH_V), no smoothing of the gradient has occurred. \n", + "\n", + "Using the gradient-descent optimization algorithm, SeisFlows will now compute a search direction that will be used in the line search to search for a best fitting model which optimally reduces the objective function. We can take a look at where SeisFlows has stored the information relating to kernel generation and the optimization computation." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "gradient kernels misfit_kernel model residuals.txt\r\n" + ] + } + ], + "source": [ + "# Gradient evaluation files are stored here, the kernels are stored separately from the gradient incase\n", + "# the user wants to manually manipulate them\n", + "! ls scratch/eval_grad" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "proc000000_vp_kernel.bin proc000000_vs_kernel.bin\r\n" + ] + } + ], + "source": [ + "# SeisFlows3 stores all kernels and gradient information as SPECFEM binary (.bin) files\n", + "! ls scratch/eval_grad/gradient" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "001 002 003\r\n" + ] + } + ], + "source": [ + "# Kernels are stored on a per-event basis, and summed together (sum/). If smoothing was performed, \n", + "# we would see both smoothed and unsmoothed versions of the misfit kernel\n", + "! ls scratch/eval_grad/kernels" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "checkpoint.npz\tf_new.txt g_new.npz m_new.npz\r\n" + ] + } + ], + "source": [ + "# We can see that some new values have been stored in prepartion for the line search,\n", + "# including g_new (current gradient) and p_new (current search direction). These are also\n", + "# stored as vector NumPy arrays (.npy files)\n", + "! ls scratch/optimize" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-1.18126331e-12 2.40273470e-12 3.97045036e-11 ... 9.62017688e-11\n", + " 4.21140102e-11 3.96825021e-12]]\n" + ] + } + ], + "source": [ + "g_new = np.load(\"scratch/optimize/g_new.npz\")\n", + "print(g_new[\"vs_kernel\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "--------------------\n", + "#### 3c. Line search and model update\n", + "\n", + "Let's finish off the inversion by running through the line search, which will generate new models using the\n", + "gradient, evaluate the objective function by running forward simulations, and comparing the evaluated objective function with the value obtained in __evalaute_initial_misfit__. \n", + "\n", + "Satisfactory reduction in the objective function will result in a termination of the line search. We are using a bracketing line search here [(Modrak et al. 2018)](https://academic.oup.com/gji/article/206/3/1864/2583505), which requires finding models which both increase and decrease the misfit with respect to the initial evaluation. Therefore it takes atleast two trial steps to complete the line search." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stop_after: evaluate_gradient_from_kernels -> perform_line_search\r\n" + ] + } + ], + "source": [ + "! seisflows par stop_after perform_line_search # We don't want to run the finalize_iteration argument so that we can explore the dir" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2022-08-16 14:41:12 (D) | setting iteration==1 from state file\n", + "2022-08-16 14:41:12 (I) | \n", + "================================================================================\n", + " SETTING UP INVERSION WORKFLOW \n", + "================================================================================\n", + "2022-08-16 14:41:18 (D) | running setup for module 'system.Workstation'\n", + "2022-08-16 14:41:21 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/sflog_003.txt\n", + "2022-08-16 14:41:21 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/parameters_003.yaml\n", + "2022-08-16 14:41:21 (D) | running setup for module 'solver.Specfem2D'\n", + "2022-08-16 14:41:21 (I) | initializing 3 solver directories\n", + "2022-08-16 14:41:22 (D) | running setup for module 'preprocess.Default'\n", + "2022-08-16 14:41:24 (D) | running setup for module 'optimize.Gradient'\n", + "2022-08-16 14:41:26 (I) | re-loading optimization module from checkpoint\n", + "2022-08-16 14:41:28 (I) | re-loading optimization module from checkpoint\n", + "2022-08-16 14:41:28 (I) | \n", + "////////////////////////////////////////////////////////////////////////////////\n", + " RUNNING ITERATION 01 \n", + "////////////////////////////////////////////////////////////////////////////////\n", + "2022-08-16 14:41:28 (I) | \n", + "================================================================================\n", + " RUNNING INVERSION WORKFLOW \n", + "================================================================================\n", + "2022-08-16 14:41:28 (I) | 'evaluate_initial_misfit' has already been run, skipping\n", + "2022-08-16 14:41:28 (I) | 'run_adjoint_simulations' has already been run, skipping\n", + "2022-08-16 14:41:28 (I) | 'postprocess_event_kernels' has already been run, skipping\n", + "2022-08-16 14:41:28 (I) | 'evaluate_gradient_from_kernels' has already been run, skipping\n", + "2022-08-16 14:41:28 (I) | initializing 'bracket'ing line search\n", + "2022-08-16 14:41:28 (I) | enforcing max step length safeguard\n", + "2022-08-16 14:41:28 (D) | step length(s) = 0.00E+00\n", + "2022-08-16 14:41:28 (D) | misfit val(s) = 1.28E-03\n", + "2022-08-16 14:41:28 (I) | try: first evaluation, attempt guess step length, alpha=9.08E+11\n", + "2022-08-16 14:41:28 (I) | try: applying initial step length safegaurd as alpha has exceeded maximum step length, alpha_new=1.44E+10\n", + "2022-08-16 14:41:28 (D) | overwriting initial step length, alpha_new=2.32E+09\n", + "2022-08-16 14:41:28 (I) | trial model 'm_try' parameters: \n", + "2022-08-16 14:41:28 (I) | 5800.00 <= vp <= 5800.00\n", + "2022-08-16 14:41:28 (I) | 3244.51 <= vs <= 3790.00\n", + "2022-08-16 14:41:29 (I) | \n", + "LINE SEARCH STEP COUNT 01\n", + "--------------------------------------------------------------------------------\n", + "2022-08-16 14:41:29 (I) | evaluating objective function for source 001\n", + "2022-08-16 14:41:29 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:41:33 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:41:33 (I) | evaluating objective function for source 002\n", + "2022-08-16 14:41:33 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:41:36 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:41:36 (I) | evaluating objective function for source 003\n", + "2022-08-16 14:41:36 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:41:40 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:41:40 (D) | misfit for trial model (f_try) == 8.65E-04\n", + "2022-08-16 14:41:40 (D) | step length(s) = 0.00E+00, 2.32E+09\n", + "2022-08-16 14:41:40 (D) | misfit val(s) = 1.28E-03, 8.65E-04\n", + "2022-08-16 14:41:40 (I) | try: misfit not bracketed, increasing step length using golden ratio, alpha=3.76E+09\n", + "2022-08-16 14:41:40 (I) | line search model 'm_try' parameters: \n", + "2022-08-16 14:41:40 (I) | 5800.00 <= vp <= 5800.00\n", + "2022-08-16 14:41:40 (I) | 3086.61 <= vs <= 3969.23\n", + "2022-08-16 14:41:40 (I) | trial step unsuccessful. re-attempting line search\n", + "2022-08-16 14:41:40 (I) | \n", + "LINE SEARCH STEP COUNT 02\n", + "--------------------------------------------------------------------------------\n", + "2022-08-16 14:41:40 (I) | evaluating objective function for source 001\n", + "2022-08-16 14:41:40 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:41:44 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:41:44 (I) | evaluating objective function for source 002\n", + "2022-08-16 14:41:44 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:41:48 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:41:48 (I) | evaluating objective function for source 003\n", + "2022-08-16 14:41:48 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:41:52 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:41:52 (D) | misfit for trial model (f_try) == 1.73E-03\n", + "2022-08-16 14:41:52 (D) | step length(s) = 0.00E+00, 2.32E+09, 3.76E+09\n", + "2022-08-16 14:41:52 (D) | misfit val(s) = 1.28E-03, 8.65E-04, 1.73E-03\n", + "2022-08-16 14:41:52 (I) | try: bracket acceptable but step length unreasonable attempting to re-adjust step length alpha=1.59E+09\n", + "2022-08-16 14:41:52 (I) | line search model 'm_try' parameters: \n", + "2022-08-16 14:41:52 (I) | 5800.00 <= vp <= 5800.00\n", + "2022-08-16 14:41:52 (I) | 3325.01 <= vs <= 3698.63\n", + "2022-08-16 14:41:52 (I) | trial step unsuccessful. re-attempting line search\n", + "2022-08-16 14:41:52 (I) | \n", + "LINE SEARCH STEP COUNT 03\n", + "--------------------------------------------------------------------------------\n", + "2022-08-16 14:41:52 (I) | evaluating objective function for source 001\n", + "2022-08-16 14:41:52 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:41:56 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:41:56 (I) | evaluating objective function for source 002\n", + "2022-08-16 14:41:56 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:42:00 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:42:00 (I) | evaluating objective function for source 003\n", + "2022-08-16 14:42:00 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:42:03 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:42:03 (D) | misfit for trial model (f_try) == 2.59E-03\n", + "2022-08-16 14:42:03 (D) | step length(s) = 0.00E+00, 1.59E+09, 2.32E+09, 3.76E+09\n", + "2022-08-16 14:42:03 (D) | misfit val(s) = 1.28E-03, 2.59E-03, 8.65E-04, 1.73E-03\n", + "2022-08-16 14:42:03 (I) | try: bracket acceptable but step length unreasonable attempting to re-adjust step length alpha=2.82E+09\n", + "2022-08-16 14:42:03 (I) | line search model 'm_try' parameters: \n", + "2022-08-16 14:42:03 (I) | 5800.00 <= vp <= 5800.00\n", + "2022-08-16 14:42:03 (I) | 3189.77 <= vs <= 3852.13\n", + "2022-08-16 14:42:03 (I) | trial step unsuccessful. re-attempting line search\n", + "2022-08-16 14:42:03 (I) | \n", + "LINE SEARCH STEP COUNT 04\n", + "--------------------------------------------------------------------------------\n", + "2022-08-16 14:42:03 (I) | evaluating objective function for source 001\n", + "2022-08-16 14:42:03 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:42:07 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:42:07 (I) | evaluating objective function for source 002\n", + "2022-08-16 14:42:07 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:42:11 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:42:11 (I) | evaluating objective function for source 003\n", + "2022-08-16 14:42:11 (D) | running forward simulation with 'Specfem2D'\n", + "2022-08-16 14:42:15 (D) | quantifying misfit with 'Default'\n", + "2022-08-16 14:42:15 (D) | misfit for trial model (f_try) == 3.46E-03\n", + "2022-08-16 14:42:15 (D) | step length(s) = 0.00E+00, 1.59E+09, 2.32E+09, 2.82E+09, 3.76E+09\n", + "2022-08-16 14:42:15 (D) | misfit val(s) = 1.28E-03, 2.59E-03, 8.65E-04, 3.46E-03, 1.73E-03\n", + "2022-08-16 14:42:15 (I) | pass: bracket acceptable and step length reasonable. returning minimum line search misfit.\n", + "2022-08-16 14:42:15 (I) | line search model 'm_try' parameters: \n", + "2022-08-16 14:42:15 (I) | 5800.00 <= vp <= 5800.00\n", + "2022-08-16 14:42:15 (I) | 3244.51 <= vs <= 3790.00\n", + "2022-08-16 14:42:15 (I) | trial step successful. finalizing line search\n", + "2022-08-16 14:42:15 (I) | \n", + "FINALIZING LINE SEARCH\n", + "--------------------------------------------------------------------------------\n", + "2022-08-16 14:42:15 (I) | writing optimization stats\n", + "2022-08-16 14:42:15 (I) | renaming current (new) optimization vectors as previous model (old)\n", + "2022-08-16 14:42:15 (I) | setting accepted trial model (try) as current model (new)\n", + "2022-08-16 14:42:15 (I) | misfit of accepted trial model is f=8.645E-04\n", + "2022-08-16 14:42:15 (I) | resetting line search step count to 0\n", + "2022-08-16 14:42:15 (I) | stop workflow at `stop_after`: perform_line_search\n" + ] + } + ], + "source": [ + "! seisflows submit" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the log statements above, we can see that the SeisFlows line search required 4 trial steps, where it modified values of Vs (shear-wave velocity) until satisfactory reduction in the objective function was met. This was the final step in the iteration, and so the finalization of the line search made preparations for a subsequent iteration. " + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "alpha.txt\tf_new.txt f_try.txt m_new.npz output_optim.txt\r\n", + "checkpoint.npz\tf_old.txt g_old.npz m_old.npz p_old.npz\r\n" + ] + } + ], + "source": [ + "# We can see that we have 'new' and 'old' values for each of the optimization values,\n", + "# representing the previous model (M00) and the current model (M01).\n", + "! ls scratch/optimize" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step_count,step_length,gradient_norm_L1,gradient_norm_L2,misfit,if_restarted,slope,theta\r\n", + "04,2.323E+09,9.243E-05,1.049E-06,1.279E-03,0,8.263E-13,0.000E+00\r\n" + ] + } + ], + "source": [ + "# The stats/ directory contains text files describing the optimization/line search\n", + "! cat scratch/optimize/output_optim.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Conclusions\n", + "\n", + "We've now seen how SeisFlows runs an __Inversion__ workflow using the __Specfem2D__ solver on a __Workstation__ system. More or less, this is all you need to run SeisFlows with any combination of modules. The specificities of a system or numerical solver are already handled internally by SeisFlows, so if you want to use Specmfe3D_Cartesian as your solver, you would only need to run `seisflows par solver specfem3d` at the beginning of your workflow (you will also need to set up your Specfem3D models, similar to what we did for Specfem2D here). To run on a slurm system like Chinook (University of Alaska Fairbanks), you can run `seisflows par system chinook`. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/notebooks/command_line_tool.ipynb b/docs/notebooks/command_line_tool.ipynb index 939de50c..aaa1715c 100644 --- a/docs/notebooks/command_line_tool.ipynb +++ b/docs/notebooks/command_line_tool.ipynb @@ -6,14 +6,14 @@ "source": [ "Commmand Line Tool\n", "==========================\n", - "`SeisFlows3` is primarily interacted with via command line calls and a parameter file. In this page we explain how to use this command line tool to create a SeisFlows3 parameters file, edit and configure it, and establish a SeisFlows3 working directory. We also provide explanation for other command line options which act as helper utilities for improved package control.\n", + "`SeisFlows` is primarily interacted with via command line calls and a parameter file. In this page we explain how to use this command line tool to create a SeisFlows parameters file, edit and configure it, and establish a SeisFlows working directory. We also provide explanation for other command line options which act as helper utilities for improved package control.\n", " \n", - "After installing SeisFlows3 into a Conda environment, the `seisflows` command will be available directly from the command line. To access the help dialogue, you can type `seisflows` or `seisflows -h`" + "After installing SeisFlows into a Conda environment, the `seisflows` command will be available directly from the command line. To access the help dialogue, you can type `seisflows` or `seisflows -h`" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -21,12 +21,12 @@ "output_type": "stream", "text": [ "usage: seisflows [-h] [-w [WORKDIR]] [-p [PARAMETER_FILE]]\r\n", - " {setup,configure,init,submit,resume,restart,clean,par,sempar,check,print,convert,reset,debug,edit,examples}\r\n", + " {setup,configure,swap,init,submit,resume,restart,clean,par,sempar,check,print,reset,debug,examples}\r\n", " ...\r\n", "\r\n", "================================================================================\r\n", "\r\n", - " SeisFlows3: Waveform Inversion Package \r\n", + " SeisFlows: Waveform Inversion Package \r\n", "\r\n", "================================================================================\r\n", "\r\n", @@ -42,19 +42,18 @@ "\r\n", " setup Setup working directory from scratch\r\n", " configure Fill parameter file with defaults\r\n", + " swap Swap module parameters in an existing parameter file\r\n", " init Initiate working environment\r\n", " submit Submit initial workflow to system\r\n", " resume Re-submit previous workflow to system\r\n", " restart Remove current environment and submit new workflow\r\n", " clean Remove files relating to an active working environment\r\n", - " par View and edit SeisFlows3 parameter file\r\n", + " par View and edit SeisFlows parameter file\r\n", " sempar View and edit SPECFEM parameter file\r\n", " check Check state of an active environment\r\n", " print Print information related to an active environment\r\n", - " convert Convert model file format\r\n", " reset Reset modules within an active state\r\n", " debug Start interactive debug environment\r\n", - " edit Open source code file in text editor\r\n", " examples Look at and run pre-configured example problems\r\n", "\r\n", "'seisflows [command] -h' for more detailed descriptions of each command.\r\n" @@ -69,40 +68,41 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Setting up a parameter file\n", + "### Setting up \n", "#### seisflows setup\n", "\n", - "The first step of any SeisFlows3 workflow is to set up a working directory, which begins by establishing a blank parameter file. The `seisflows setup` command copies in a template parameter file. Ideally your working directory will be empty to avoid file conflicts." + "The first step of any SeisFlows workflow is to setting up a parameter file. The `seisflows setup` command copies in a template parameter file." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "/home/bchow/Work/scratch\n" + "/Users/Chow/Scratch\n" ] } ], "source": [ - "%cd ~/Work/scratch\n", + "%cd ~/Scratch\n", + "! rm *\n", "! ls" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "usage: seisflows setup [-h] [-s] [-f]\r\n", + "usage: seisflows setup [-h] [-f]\r\n", "\r\n", "In the specified working directory, copy template parameter file containing\r\n", "only module choices, and symlink source code for both the base and super\r\n", @@ -111,9 +111,8 @@ "they want to overwrite.\r\n", "\r\n", "optional arguments:\r\n", - " -h, --help show this help message and exit\r\n", - " -s, --symlink symlink source code into the working directory\r\n", - " -f, --force automatically overwrites existing parameter file\r\n" + " -h, --help show this help message and exit\r\n", + " -f, --force automatically overwrites existing parameter file\r\n" ] } ], @@ -123,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -135,7 +134,7 @@ } ], "source": [ - "# The '-f' flag (force) will overwrite any existing parameter file\n", + "# The '-f' flag (overwrite) will overwrite any existing parameter file\n", "! seisflows setup -f" ] }, @@ -143,20 +142,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Having a look at the template parameters.yaml file that was just generated, we can see that it contains some pre-defined default values for the core SeisFlows3 modules. Each of these modules defines it's own set of unique parameters which make up a workflow." + "Having a look at the template `parameters.yaml` file that was just generated, we can see that it contains some pre-defined default values for the core SeisFlows modules. Each of these modules defines it's own set of unique parameters which make up a workflow." ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "parameters.yaml\n", - "32 parameters.yaml\n" + "parameters.yaml sflog.txt\n", + " 30 parameters.yaml\n" ] } ], @@ -167,7 +166,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -176,12 +175,12 @@ "text": [ "# //////////////////////////////////////////////////////////////////////////////\r\n", "#\r\n", - "# SeisFlows3 YAML Parameter File\r\n", + "# SeisFlows YAML Parameter File\r\n", "#\r\n", "# //////////////////////////////////////////////////////////////////////////////\r\n", "#\r\n", "# Modules correspond to the structure of the source code, and determine\r\n", - "# SeisFlows3' behavior at runtime. Each module requires its own sub-parameters.\r\n", + "# SeisFlows' behavior at runtime. Each module requires its own sub-parameters.\r\n", "#\r\n", "# .. rubric::\r\n", "# - To determine available options for modules listed below, run:\r\n", @@ -193,19 +192,17 @@ "#\r\n", "# MODULES\r\n", "# ///////\r\n", - "# WORKFLOW (str): The method for running SeisFlows3; equivalent to main()\r\n", - "# SOLVER (str): External numerical solver to use for waveform simulations\r\n", - "# SYSTEM (str): Computer architecture of the system being used\r\n", - "# OPTIMIZE (str): Optimization algorithm for the inverse problem\r\n", - "# PREPROCESS (str): Preprocessing schema for waveform data\r\n", - "# POSTPROCESS (str): Postprocessing schema for kernels and gradients\r\n", + "# workflow (str): The types and order of functions for running SeisFlows\r\n", + "# system (str): Computer architecture of the system being used\r\n", + "# solver (str): External numerical solver to use for waveform simulations\r\n", + "# preprocess (str): Preprocessing schema for waveform data\r\n", + "# optimize (str): Optimization algorithm for the inverse problem\r\n", "# ==============================================================================\r\n", - "WORKFLOW: inversion\r\n", - "SOLVER: specfem2d\r\n", - "SYSTEM: workstation\r\n", - "OPTIMIZE: LBFGS \r\n", - "PREPROCESS: base\r\n", - "POSTPROCESS: base\r\n" + "workflow: forward\r\n", + "system: workstation\r\n", + "solver: specfem2d\r\n", + "preprocess: default\r\n", + "optimize: gradient\r\n" ] } ], @@ -224,14 +221,14 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "usage: seisflows configure [-h] [-r]\r\n", + "usage: seisflows configure [-h] [-a]\r\n", "\r\n", "SeisFlows parameter files will vary depending on chosen modules and their\r\n", "respective required parameters. This function will dynamically traverse the\r\n", @@ -243,7 +240,7 @@ "\r\n", "optional arguments:\r\n", " -h, --help show this help message and exit\r\n", - " -r, --relative_paths Set default paths relative to cwd\r\n" + " -a, --absolute_paths Set default paths relative to cwd\r\n" ] } ], @@ -253,114 +250,106 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "filling parameters.yaml w/ default values\r\n" - ] - } - ], + "outputs": [], "source": [ "! seisflows configure" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ + "# :param smooth_v: Gaussian half-width for vertical smoothing in units\n", + "# of meters.\n", + "# :type components: str\n", + "# :param components: components to consider and tag data with. Should be\n", + "# string of letters such as 'RTZ'\n", + "# :type solver_io: str\n", + "# :param solver_io: format of model/kernel/gradient files expected by the\n", + "# numerical solver. Available: ['fortran_binary': default .bin files].\n", + "# TODO: ['adios': ADIOS formatted files]\n", + "# :type source_prefix: str\n", + "# :param source_prefix: prefix of source/event/earthquake files. If None,\n", + "# will attempt to guess based on the specific solver chosen.\n", + "# :type mpiexec: str\n", + "# :param mpiexec: MPI executable used to run parallel processes. Should also\n", + "# be defined for the system module\n", + "#\n", + "# \n", + "# Solver SPECFEM2D\n", + "# ----------------\n", + "# SPECFEM2D-specific alterations to the base SPECFEM module\n", + "#\n", + "# Parameters\n", + "# ----------\n", + "# :type source_prefix: str\n", + "# :param source_prefix: Prefix of source files in path SPECFEM_DATA. Defaults\n", + "# to 'SOURCE'\n", + "# :type multiples: bool\n", + "# :param multiples: set an absorbing top-boundary condition\n", + "#\n", + "# \n", "# =============================================================================\n", - "# SOLVER \n", - "# ////// \n", - "# MATERIALS (str):\n", - "# Material parameters used to define model. Available: ['ELASTIC': Vp, Vs,\n", - "# 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC']\n", - "# DENSITY (str):\n", - "# How to treat density during inversion. Available: ['CONSTANT': Do not\n", - "# update density, 'VARIABLE': Update density]\n", - "# ATTENUATION (str):\n", - "# If True, turn on attenuation during forward simulations, otherwise set\n", - "# attenuation off. Attenuation is always off for adjoint simulations.\n", - "# COMPONENTS (str):\n", - "# Components used to generate data, formatted as a single string, e.g. ZNE\n", - "# or NZ or E\n", - "# SOLVERIO (int):\n", - "# The format external solver files. Available: ['fortran_binary', 'adios']\n", - "# NT (float):\n", - "# Number of time steps set in the SPECFEM Par_file\n", - "# DT (float):\n", - "# Time step or delta set in the SPECFEM Par_file\n", - "# F0 (float):\n", - "# Dominant source frequency\n", - "# FORMAT (float):\n", - "# Format of synthetic waveforms used during workflow, available options:\n", - "# ['ascii', 'su']\n", - "# SOURCE_PREFIX (str):\n", - "# Prefix of SOURCE files in path SPECFEM_DATA. By default, 'SOURCE' for\n", - "# SPECFEM2D\n", + "data_format: ascii\n", + "materials: acoustic\n", + "density: False\n", + "attenuation: False\n", + "smooth_h: 0.0\n", + "smooth_v: 0.0\n", + "components: ZNE\n", + "source_prefix: SOURCE\n", + "multiples: False\n", "# =============================================================================\n", - "MATERIALS: !!! REQUIRED PARAMETER !!!\n", - "DENSITY: !!! REQUIRED PARAMETER !!!\n", - "ATTENUATION: !!! REQUIRED PARAMETER !!!\n", - "COMPONENTS: ZNE\n", - "SOLVERIO: fortran_binary\n", - "NT: !!! REQUIRED PARAMETER !!!\n", - "DT: !!! REQUIRED PARAMETER !!!\n", - "F0: !!! REQUIRED PARAMETER !!!\n", - "FORMAT: !!! REQUIRED PARAMETER !!!\n", - "SOURCE_PREFIX: SOURCE\n", + "#\n", + "# Default Preprocess\n", + "# ------------------\n", + "# Data processing for seismic traces, with options for data misfit,\n", + "# filtering, normalization and muting.\n", + "#\n", + "# Parameters\n", + "# ----------\n", + "# :type data_format: str\n", + "# :param data_format: data format for reading traces into memory. For\n", + "# available see: seisflows.plugins.preprocess.readers\n", + "# :type misfit: str\n", + "# :param misfit: misfit function for waveform comparisons. For available\n", + "# see seisflows.plugins.preprocess.misfit\n", + "# :type backproject: str\n", + "# :param backproject: backprojection function for migration, or the\n", + "# objective function in FWI. For available see\n", + "# seisflows.plugins.preprocess.adjoint\n", + "# :type normalize: str\n", + "# :param normalize: Data normalization parameters used to normalize the\n", + "# amplitudes of waveforms. Choose from two sets:\n", + "# ENORML1: normalize per event by L1 of traces; OR\n", + "# ENORML2: normalize per event by L2 of traces;\n", + "# &\n", + "# TNORML1: normalize per trace by L1 of itself; OR\n", + "# TNORML2: normalize per trace by L2 of itself\n", + "# :type filter: str\n", + "# :param filter: Data filtering type, available options are:\n", + "# BANDPASS (req. MIN/MAX PERIOD/FREQ);\n", + "# LOWPASS (req. MAX_FREQ or MIN_PERIOD);\n", + "# HIGHPASS (req. MIN_FREQ or MAX_PERIOD)\n", + "# :type min_period: float\n", + "# :param min_period: Minimum filter period applied to time series.\n", + "# See also MIN_FREQ, MAX_FREQ, if User defines FREQ parameters, they\n", + "# will overwrite PERIOD parameters.\n", + "# :type max_period: float\n", + "# :param max_period: Maximum filter period applied to time series. See\n", + "# also MIN_FREQ, MAX_FREQ, if User defines FREQ parameters, they will\n", + "# overwrite PERIOD parameters.\n", + "# :type min_freq: float\n", + "# :param min_freq: Maximum filter frequency applied to time series,\n", "\n", - "# =============================================================================\n", - "# POSTPROCESS \n", - "# /////////// \n", - "# SMOOTH_H (float):\n", - "# Gaussian half-width for horizontal smoothing in units of meters. If 0.,\n", - "# no smoothing applied\n", - "# SMOOTH_V (float):\n", - "# Gaussian half-width for vertical smoothing in units of meters\n", - "# TASKTIME_SMOOTH (int):\n", - "# Large radii smoothing may take longer than normal tasks. Allocate\n", - "# additional smoothing task time as a multiple of TASKTIME\n", - "# =============================================================================\n", - "SMOOTH_H: 0.0\n", - "SMOOTH_V: 0.0\n", - "TASKTIME_SMOOTH: 1\n", - "\n", - "# =============================================================================\n", - "# OPTIMIZE \n", - "# //////// \n", - "# LINESEARCH (str):\n", - "# Algorithm to use for line search, see seisflows.plugins.line_search for\n", - "# available choices\n", - "# PRECOND (str):\n", - "# Algorithm to use for preconditioning gradients, see\n", - "# seisflows.plugins.preconds for available choices\n", - "# STEPCOUNTMAX (int):\n", - "# Max number of trial steps in line search before a change in line search\n", - "# behavior\n", - "# STEPLENINIT (float):\n", - "# Initial line search step length, as a fraction of current model\n", - "# parameters\n", - "# STEPLENMAX (float):\n", - "# Max allowable step length, as a fraction of current model parameters\n", - "# LBFGSMEM (int):\n", - "# Max number of previous gradients to retain in local memory\n", - "# LBFGSMAX (int):\n", - "# LBFGS periodic restart interval, between 1 and 'inf'\n", - "# LBFGSTHRESH (float):\n", - "# LBFGS angle restart threshold\n", - "# =============================================================================\n", - "LINESEARCH: Backtrack\n", - "\n", - "306 parameters.yaml\n" + " 337 parameters.yaml\n" ] } ], @@ -374,31 +363,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can see that our parameter file is over 300 lines now, too cumbersome to print on the page. The length of the file mostly arises from the header, as each parameter gets it's own entry with the parameter's type, docstring, and any available options.\n", + "We can see that our parameter file is over 300 lines, a bit too cumbersome to print on the page. The length of the file mostly arises from the header, as each parameter gets it's own entry with the parameter's type, docstring, and any available options. Each set of parameters are separated by their relevant module, and their respective docstrings should help users understand how and when they are used in a SeisFlows workflow.\n", "\n", - "Parameters that are required by the workflow but do not come with pre-set default values will be labelled with `!!! REQUIRED PARAMETER !!!`. Similarly required path definitions, which come at the end of the file, are labelled with the `!!! REQUIRED PATH !!!` value." + ">__NOTE__: Many parameters have sensible default values chosen, but it is up to the user to decide which parameters are relevant to them, and how they would like them set. Internal check functions throughout the package will raise AssertionErrors for incorrectly or improperly set parameters." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Filling out the parameter file\n", + "### Editing the parameter file\n", "#### seisflows par\n", "\n", - "It's easy enough to open your favorite text editor to make adjustments to the parameter file, however the `seisflows par` command makes things easier by allowing you to view and edit values from the command line. This makes it convenient to change parameters, and also allows you to script your workflow setup for improved reproducibility. " + "You can always open your favorite text editor to make changes to the parameter file, however the `seisflows par` command makes things easier by allowing you to view and edit values from the command line. This makes it convenient to change parameters quickly and allows you to script your parameter file setup for improved reproducibility. " ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "usage: seisflows par [-h] [-p] [-r] [parameter] [value]\r\n", + "usage: seisflows par [-h] [-p] [parameter] [value]\r\n", "\r\n", "Directly edit values in the parameter file by providing the parameter and\r\n", "corresponding value. If no value is provided, will simply print out the\r\n", @@ -414,10 +403,7 @@ "optional arguments:\r\n", " -h, --help show this help message and exit\r\n", " -p, --skip_print Skip the print statement which is typically sent to stdout\r\n", - " after changing parameters.\r\n", - " -r, --required Only list parameters which have not been set as a default\r\n", - " value, typically set with some attention catching\r\n", - " argument. 'parameter' and 'value' will be ignored.\r\n" + " after changing parameters.\r\n" ] } ], @@ -429,229 +415,536 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The -r (--required) flag tells us which parameters need to be set by the user" + "The call structure of the `par` command is provided in the help message:\n", + "\n", + "> seisflows par [parameter] [value (optional)]\n", + "\n", + "We can view parameters by providing a single 'parameter' argument to the `par` command" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "!!! REQUIRED PARAMETER !!!\r\n", - "==========================\r\n", - "\tMATERIALS\r\n", - "\tDENSITY\r\n", - "\tATTENUATION\r\n", - "\tNT\r\n", - "\tDT\r\n", - "\tF0\r\n", - "\tFORMAT\r\n", - "\tCASE\r\n", - "\tEND\r\n", - "!!! REQUIRED PATH !!!\r\n", - "=====================\r\n", - "\tSPECFEM_BIN\r\n", - "\tSPECFEM_DATA\r\n", - "\tMODEL_INIT\r\n" + "ntask: 1\r\n" ] } ], "source": [ - "! seisflows par -r" + "! seisflows par ntask # ntask is the number of tasks/events to be run during a workflow" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We can view (but not modify) parameters by giving a single argument to the par command" + "We can change a given parameter from it's original value by providing a second 'value' argument" ] }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "END: !!! REQUIRED PARAMETER !!!\r\n" + "ntask: 1 -> 3\r\n" ] } ], "source": [ - "! seisflows par end" + "! seisflows par ntask 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "and we can edit the given parameter by providing a second argument to the par command" + "#### seisflows sempar\n", + "\n", + "The `seisflows sempar` command behaves the same as the `par` command, except is used to edit a SPECFEM2D/3D/3D_GLOBE Par_file. It has the same call structure as `par`.\n", + "\n", + "#### seisflows check\n", + "\n", + "Each module contains it's own internal set of parameter checks which make sure that reasonable parameter values and types have been chosen. This is especially important when submitting large jobs on clusters as the `check` function will allow the User to catch errors without having to wait on queue times or waste computational resources." ] }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "END: !!! REQUIRED PARAMETER !!! -> 1\r\n" + "\r\n", + "================================================================================\r\n", + " PARAMETER ERRROR \r\n", + " //////////////// \r\n", + "`path_specfem_bin` must exist and must point to directory containing SPECFEM\r\n", + "executables\r\n", + "================================================================================\r\n" ] } ], "source": [ - "! seisflows par end 1" + "! seisflows check" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### seisflows sempar\n", + "Here we can see that a given path has not been set correctly in the parameter file." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### seisflows swap\n", "\n", - "The `seisflows sempar` command behaves the same as the `par` command, except is used to edit a SPECFEM2D/3D/3D_GLOBE Par_file. It has the same call structure as `par`.\n", + "The `seisflows swap` command allows you to swap out a set of module parameters without affecting other parts of the parameter file. Some cases for when this might be useful include switching from a 'workstation' system to a 'cluster' system, or swapping solvers from 'specfem2d' to 'specfem3d'." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "usage: seisflows swap [-h] [module] [classname]\r\n", + "\r\n", + "During workflow development, it may be necessary to swap between different\r\n", + "sub-modules (e.g., system.workstation -> system.cluster). However this would\r\n", + "typically involving re-generating and re-filling a parameter file. The 'swap'\r\n", + "function makes it easier to swap parameters between modules.\r\n", + "\r\n", + "positional arguments:\r\n", + " module Module name to swap\r\n", + " classname Classname to swap to\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n" + ] + } + ], + "source": [ + "! seisflows swap -h" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Running workflows\n", + "#### seisflows submit\n", "\n", - "### Setting up an active working state\n", + "To run SeisFlows, we use the `submit` call. This will submit the `workflow` to the `system` and continue until a User-defined stop criteria is met. \n", "\n", - "An active SeisFlows3 working state is simply a Python environment with the SeisFlows3 library defined based on the given parameter file. In order to establish a working state, we need to set all required paths and parameters. We can look at the parameter file header to determine valid options for each parameter." + "Under the hood, the `submit` function will differ depending on the chosen `system`. For Users running on laptops and workstations, `submit` will simply launch a Python process and step through the tasks in the `workflow` task list. On clusters, `submit` will launch a master job on a compute node, which will itself step through tasks in the task list, ensuring that no processing is run on login nodes. " ] }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "# ////// \r\n", - "# MATERIALS (str):\r\n", - "# Material parameters used to define model. Available: ['ELASTIC': Vp, Vs,\r\n", - "# 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC']\r\n", - "# DENSITY (str):\r\n", - "# How to treat density during inversion. Available: ['CONSTANT': Do not\r\n", - "# update density, 'VARIABLE': Update density]\r\n", - "# ATTENUATION (str):\r\n", - "# If True, turn on attenuation during forward simulations, otherwise set\r\n", - "# attenuation off. Attenuation is always off for adjoint simulations.\r\n" + "usage: seisflows submit [-h] [-s STOP_AFTER]\r\n", + "\r\n", + "The main SeisFlows execution command. Submit a SeisFlows workflow to the\r\n", + "chosen system, equal to executing seisflows.workflow.main(). This function\r\n", + "will create and fill the working directory with required paths, perform path\r\n", + "and parameter error checking, and establish the active working environment\r\n", + "before executing the workflow.\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n", + " -s STOP_AFTER, --stop_after STOP_AFTER\r\n", + " Optional override of the 'STOP_AFTER' parameter\r\n" ] } ], "source": [ - "! head -130 parameters.yaml | tail -n 10 " + "! seisflows submit -h" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### seisflows clean\n", + "\n", + "The `clean` function is used to clear an existing working directory. It deletes all SeisFlows created files and directories using paths in the parameter file, but does not delete the parameter file itself. Use the ``-f/--force`` flag to skip over the 'are you sure?' check statement." ] }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "usage: seisflows clean [-h] [-f]\r\n", + "\r\n", + "Delete all SeisFlows related files in the working directory, except for the\r\n", + "parameter file.\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n", + " -f, --force Skip the warning check that precedes the clean function\r\n" + ] + } + ], "source": [ - "# We use the `-p` flag to turn off stdout printing\n", - "! seisflows par materials elastic -p\n", - "! seisflows par density constant -p\n", - "! seisflows par attenuation False -p\n", - "! seisflows par nt 100 -p\n", - "! seisflows par dt .01 -p\n", - "! seisflows par f0 .5 -p\n", - "! seisflows par format ascii -p\n", - "! seisflows par case synthetic -p\n", + "! seisflows clean -h " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### seisflows restart \n", "\n", - "# Required paths can similarly be set the `par` command\n", - "! seisflows par specfem_bin ./ -p\n", - "! seisflows par specfem_data ./ -p\n", - "! seisflows par model_init ./ -p" + "The `restart` function is a convenience function which wraps `clean` and `submit`. It is used to restart workflows using the same parameter file. It also takes the ``-f/--force`` flag that the clean function defines." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "usage: seisflows restart [-h] [-f]\r\n", + "\r\n", + "Akin to running seisflows clean; seisflows submit. Restarts the workflow by\r\n", + "removing the current state and submitting a fresh workflow.\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n", + " -f, --force Skip the clean warning check statement\r\n" + ] + } + ], + "source": [ + "! seisflows restart -h" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plotting" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image # Required for showing inline figures in notebook/docs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### seisflows init\n", + "#### seisflows plot2d\n", "\n", - "To initiate a working state, we run `seisflows init`. This registers the parameter file into Python's sys.modules. It runs parameter check functions to ensure that parameters have been set correctly, and then saves the active working state as a set of pickle (.p) files which can be used to resume active workflows." + "`plot2d` allows you to quickly plot SPECFEM2D models, kernels and gradients which have been exported to disk during a SeisFlows workflow. From a SeisFlows working directory the format for running `plot2d` is provided in the help message." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/bchow/Work/work/seisflows_example/example_2\n", + "logs\tparameters.yaml sflog.txt specfem2d\r\n", + "output\tscratch\t\t sfstate.txt specfem2d_workdir\r\n" + ] + } + ], + "source": [ + "# a directory where we have run an example problem\n", + "%cd ~/sfexamples/example_2\n", + "! ls" ] }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ + "usage: seisflows plot2d [-h] [-c [CMAP]] [-s [SAVEFIG]] [name] [parameter]\r\n", "\r\n", - "================================================================================\r\n", - " MODULE CHECK ERROR \r\n", - " ////////////////// \r\n", - "seisflows.config module check failed with:\r\n", + "Plots model/kernels/gradient files located in the output/\r\n", + " directory. ONLY available for SPECFEM2D models.\r\n", "\r\n", - "workflow: CASE == SYNTHETIC requires PATH.MODEL_TRUE\r\n", - "================================================================================\r\n" + "positional arguments:\r\n", + " name Name of directory in the output/ directory\r\n", + " parameter Name of parameter to plot from `name`. E.g., 'vs',\r\n", + " 'vp' etc.\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n", + " -c [CMAP], --cmap [CMAP]\r\n", + " colormap to be passed to PyPlot\r\n", + " -s [SAVEFIG], --savefig [SAVEFIG]\r\n", + " optional name and path to save figure\r\n" ] } ], "source": [ - "! seisflows init" + "! seisflows plot2d -h" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Oops, as we can see the parameter check has caught that a given parameter requires a certain path to be set which is currently blank. Let's amend and try again" + "Running `plot2d` without any arguments will print out a list of available directories you can plot" ] }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "instantiating SeisFlows3 working state in directory: output\r\n" + " PLOT2D \r\n", + " ////// \r\n", + "Available models/gradients/kernels\r\n", + "\r\n", + "GRADIENT_01\r\n", + "GRADIENT_02\r\n", + "MODEL_01\r\n", + "MODEL_02\r\n", + "MODEL_INIT\r\n", + "MODEL_TRUE\r\n" ] } ], "source": [ - "! seisflows par model_true ./ -p\n", - "! seisflows init" + "! seisflows plot2d " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Users will also have to choose which parameter they would like to plot, which is defined by the available parameters in the underlying model. Incorrect choices will throw an AssertionError which will tell you what parameters are available to plot." ] }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "output\tparameters.yaml\n", - "\n", - "seisflows_optimize.p\t seisflows_postprocess.p seisflows_system.p\n", - "seisflows_parameters.json seisflows_preprocess.p seisflows_workflow.p\n", - "seisflows_paths.json\t seisflows_solver.p\n" + "Traceback (most recent call last):\r\n", + " File \"/home/bchow/miniconda3/envs/docs/bin/seisflows\", line 33, in \r\n", + " sys.exit(load_entry_point('seisflows', 'console_scripts', 'seisflows')())\r\n", + " File \"/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py\", line 1383, in main\r\n", + " sf()\r\n", + " File \"/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py\", line 438, in __call__\r\n", + " getattr(self, self._args.command)(**vars(self._args))\r\n", + " File \"/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py\", line 1106, in plot2d\r\n", + " save=savefig)\r\n", + " File \"/home/bchow/REPOSITORIES/seisflows/seisflows/tools/specfem.py\", line 428, in plot2d\r\n", + " f\"chosen `parameter` must be in {self._parameters}\"\r\n", + "AssertionError: chosen `parameter` must be in ['vp_kernel', 'vs_kernel']\r\n" ] } ], "source": [ - "! ls\n", - "! echo\n", - "! ls output" + "! seisflows plot2d GRADIENT_01" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Figure(707.107x707.107)\r\n" + ] + }, + { + "data": { + "image/png": "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FRW4/fbbk/LoAlWm3m7duqGoqAgVFRU47bTTADR5jRctWoRp06YBAEpKStCyZUtUVFRg+PDhAIDt27dj3bp1mD59uuX2u0F2+DRN0wITw75dZk+dOhVnnnkm2rZti06dOuHyyy/Hhg0bkvKoGievuroaZWVliMViiMViKCsrw65du5LybN68GZdeeilat26NgoICTJgwAfWm9zOuXbsWffv2RV5eHg4//HA8+OCDoME3CClkn+LiPfFl8dSUaEximTSjIOI9p+T2+ShRF4giuaxvt/C62W2Zqsszf8zLWNPmtrCWsZZ7hUrh6vX4wCk//nAqwfqBuP3YZOLEiXj66afxzDPPYP369bj99tuxefNmjB07FgAwadIk/PznP0/kHzt2LL799ltMnDgR69evxzPPPIPZs2cnvWjitttuw8KFCzFt2jR89dVXmDZtGt577z2Ul5dL15uRkYHy8nJMmTIF8+bNw7p16zBq1Ci0atUKI0eOBADEYjGMHj0ad9xxB95//32sWrUK119/PU466SRceOGFTvaINCtXrpT6rFq1ytN2iPAtMrxo0SLceuutOPPMM7F//37ce++9GDRoEL788ku0bt0awKFx8ubMmYPjjz8ev//97zFw4EBs2LABbdu2BdA0Tt5bb72FuXPn4rDDDsMdd9yBoUOHYsWKFWjRogUAYOTIkdi6dSsWLFgAAPjlL3+JsrKyxBVaY2MjLrnkEnTs2BGffvopfvjhB9xwww3QNA2PPvoogCZT/cCBA9G/f38sX74c//nPfzBq1Ci0bt0ad9xxh6d9pcIqQVEPewTeX1bhWUZokBUlFj3gJbp9bq7CjF3rgx0hLFOmqtEd7PiIVUWA3ZRjJzLsZJ8byzbXyUNme9z+nvwWqI6sHmGCvM2+MGLECPzwww948MEHsX37dvTq1Qvz58/HUUcdBaAp0moc+7dbt26YP38+br/9djz22GMoLi7GX//6V1x11VWJPH369MHcuXPxm9/8Br/97W9xzDHH4JVXXkHv3r2l6wWAu+66C7W1tbjllltQXV2N3r17Y+HChQntBACPPPIIsrKyMHz4cNTW1mLAgAGYM2dOQjulM4GNM7xz50506tQJixYtwvnnn69snLz169ejZ8+eWLp0aeJgWrp0KUpLS/HVV1+he/fueOeddzB06FBs2bIFxcXFAIC5c+di1KhR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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "! seisflows plot2d GRADIENT_01 vs_kernel --savefig gradient_01_vs_kernel.png\n", + "Image(filename='gradient_01_vs_kernel.png') " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### seisflows plotst\n", + "\n", + "`plotst` (i.e., *plot st*ream) is a wrapper for ObsPy's Stream.plot() which plots waveforms generated by the external numerical solver. In this case we have generated waveforms in the ASCII format during one of our example problems. Using the `export_traces` parameter, our workflow has saved these waveforms to the `output/` directory of our SeisFlows working directory." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/bchow/Work/work/seisflows_example/example_3/output/solver/001/syn\n", + "AA.S000000.BXY.semd AA.S000009.BXY.semd AA.S000018.BXY.semd\r\n", + "AA.S000001.BXY.semd AA.S000010.BXY.semd AA.S000019.BXY.semd\r\n", + "AA.S000002.BXY.semd AA.S000011.BXY.semd AA.S000020.BXY.semd\r\n", + "AA.S000003.BXY.semd AA.S000012.BXY.semd AA.S000021.BXY.semd\r\n", + "AA.S000004.BXY.semd AA.S000013.BXY.semd AA.S000022.BXY.semd\r\n", + "AA.S000005.BXY.semd AA.S000014.BXY.semd AA.S000023.BXY.semd\r\n", + "AA.S000006.BXY.semd AA.S000015.BXY.semd AA.S000024.BXY.semd\r\n", + "AA.S000007.BXY.semd AA.S000016.BXY.semd\r\n", + "AA.S000008.BXY.semd AA.S000017.BXY.semd\r\n" + ] + } + ], + "source": [ + "%cd ~/sfexamples/example_3/output/solver/001/syn\n", + "! ls" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "usage: seisflows plotst [-h] [--data_format [DATA_FORMAT]] [-s [SAVEFIG]]\r\n", + " [fids [fids ...]]\r\n", + "\r\n", + "Plots waveforms output by the solver. Uses ObsPy's \r\n", + "Stream.plot() function under the hood. Example call would be \r\n", + "`seisflows plotst scratch/solver/mainsolver/traces/syn/*`\r\n", + " \r\n", + "\r\n", + "positional arguments:\r\n", + " fids File IDs to be passed to plotting. Wildcards\r\n", + " acceptable\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n", + " --data_format [DATA_FORMAT]\r\n", + " Data format of the files. Must match file type that\r\n", + " SeisFlows can read. These include:['SU', 'ASCII'].\r\n", + " Defaults to 'ASCII'. See\r\n", + " SeisFlows.preprocess.default.read() for all options.\r\n", + " -s [SAVEFIG], --savefig [SAVEFIG]\r\n", + " optional name and path to save figure\r\n" + ] + } + ], + "source": [ + "# Run the help message\n", + "! seisflows plotst -h" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAD6CAYAAABZPSO8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLSUlEQVR4nO3deVyU1eI/8A/rsAwzA4gsIgiIKIqokZpKWrnvejVLSTKtrOza9WZpG6aGdCuzbrmbpqJmN7fUTDOV0twyAcEVUQnEMGCGYWc4vz/88XwZGYZFGEb8vF+veck85zxnzvNwhPlwzvOMhRBCgIiIiIiIyAQsm7oDRERERET04GAAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAIXpARUVFITg4GJaWltiyZYteWUFBAV588UW0bNkS7u7u+Pjjj/XKNRoNpk6dChcXF6hUKkycOFEqu3btGgYNGgSlUomgoCAcOHCg2j6UlZXhH//4B1q1agULCwtkZmbqlc+aNQv+/v5wcnJCWFgY4uLiqm1Lq9WiT58+cHV1hbOzM5544glcuHBBKl+6dCm6dOkCa2trxMTESNujo6Mhl8shl8shk8lgY2MjPZ8+fTp+++03PPbYY3B2doanpydmzJiBkpISaf8XXngBnp6eUCgUCAkJwe7du6vt47p162BtbS21L5fLcePGDan8m2++QWBgIORyOUaOHIns7Oxq26rueABg9+7deOSRR6BUKuHt7Y3333+/2nbuxa1btzB8+HC4ubnBzs6uSvnZs2fRq1cvODk5oWvXrvjjjz+ksunTp+udBxsbG4wYMUIqP3XqFEJDQ+Hg4IC+ffvi+vXrRvsSExMDNzc3uLi44I033oAQAkDNY6yh2urYsaN0LJaWlrC3t5ee//LLLygvL8drr70GlUoFd3d3fPrpp3qv+cMPP6Bt27ZwdHTEqFGjkJOTU23/srKyMGzYMDg4OCAoKAgHDx6sUqesrAwhISFo3759te3UdG6MjbG73b59G08++SRcXFzg4+OD2NhYg/WmT59e6+8DETVjgogeSBs2bBD7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qthW3f8TInoANMml70TU5CIjIwUAvUfFnXt+/vln4e3tLezt7UXXrl1FXFyc3r7x8fEiLCxMODo6ii5duogjR45IZR999JFwcXERcrlcDB8+XNy4ccNoP3x9fav0owIAIZPJhKOjo/TYuHGjwXZOnTolunTpIuRyuXBxcRGDBg0S8fHxUnlUVFSV11m7dq1eG4bugjVv3jxhYWGh14fg4GAhxJ27Mz322GNCqVQKhUIhunXrJrZt2ybtGxcXJxwdHaXns2bNEm5ubsLR0VG0a9dOfP7553qv1b17d+Ho6Cg8PDzEvHnzRHl5uVT2wQcf6N0pydjxPPvss8LS0lKvz5X3bUh398HX11cqe+2116RzExERIXJycvT23b17t/D29hY6na5KuydPnhQhISHCzs5OhIeHV3sHrArR0dHC1dVVqFQqMXv2bL1zZ2yMNUZbhu6CpdPpxMyZM4VSqRRubm7ik08+0Svfs2eP8Pf3F/b29mLEiBF6t9V98cUXxYsvvig9/+uvv8SQIUOEvb29CAwMFAcOHDB4HIcOHapyF6zg4GC9/0PGjsfYGLt7bMfGxoqWLVsKBwcH8eijj4rExESDfRKidncjI6LmzUKISmsniIiIiIiIGhGXYBERERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkclYN3UH7mfl5eXIyMiAk5MTLCwsmro7RERERPSAE0IgLy8PXl5esLQ0z7kGBpB7kJGRgdatWzd1N4iIiIiI9KSlpcHb27upu2EQA8g9cHJyAnDnG6xQKJq4N0RERET0oNNoNGjdurX0PtUcMYDcg4plVwqFggGEiIiIiMyGOV8ewABiQomJifj5559x69YtlJeXN3V36C5WVlbw9fXFwIED0aZNm6buDhEREVGzxABiImvWrMGyZcvg6uoKf39/WFlZNXWX6C6lpaX49ddfsXr1asTExODxxx9v6i4RERERNTsMICZw7do1LFu2DFOnTsWLL75otnckIKCkpATvvvsu5s2bh969e0MmkzV1l4iIiIiaFb4TNoG4uDjY29tj6tSpDB9mztbWFtOnT0dBQQF+//33pu4ONWPr1q1Dz549kZyc3NRdISIiMim+GzaBrKwseHh4wNbWtqm7QrXg6+sLALh9+3YT94SaK61Wi5kzZ+LEiRN47733mro7REREJsUAYgJCCM583Ecqvle8UQA1lp9++gkajQbTp0/Hnj17UFxc3NRdIiIiMhm+KzYDAQEB6NGjh8Gy5557DnZ2dsjNza12fyEEFixYAF9fX8jlcvj6+uK1116TyrOysjBs2DA4ODggKCgIBw8e1Ns/JiYGbm5ucHFxwRtvvAEhhFR26tQphIaGwsHBAX379sX169elssLCQkRERMDJyQk+Pj7YvHmzXrvr1q2Dt7c3FAoFpkyZgpKSEqksJSUFvXv3hoODA7p164b4+PjanCpcu3YNFhYWkMvlkMvlaNWqFd5//32p/MSJE3Bzc0NWVpa0bdmyZXjooYeQnp4OV1dXnDlzRirT6XTo2rUrvvrqq1q9PlFDOHToEPz8/PD888+jqKgIp06dauouERERmQwDSBM7duwYsrKycObMGVy5ckWvrKioCN999x0cHBzwv//9r9o2vv76a2zbtg1xcXHQarX45Zdf8NBDD0nlr7zyCry8vHD79m18+OGHGD9+PHJycgAAe/fuxbJly3DixAkkJSVh9+7dWLt2LQCguLgYY8eOxcyZM5GdnY2ePXvimWeekdqNiopCdnY20tPTsWXLFrz00ku4dOkSgDu3HJ41axZ27NiBtLQ0XLt2DQsXLpT2ffrppzFw4EBkZ2fjueeew5gxY1BWVlarcyaTyaDVaqHVavHrr79i1apV2L9/PwCgR48eePLJJ/Gvf/0LAHDz5k288847WLlyJVq1aoUFCxbghRdegE6nAwB89tlnUCqVmDJlSq1em6ghHDt2DOHh4QgJCYGNjU2tAzgREVFzwADSxGJjYzF27Fg8/vjjiI2N1Sv7/vvv4eLigtdff71KWWWnTp3CsGHD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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Plot a single synthetic seismogram\n", + "! seisflows plotst AA.S000000.BXY.semd --savefig AA.S000000.BXY.semd.png\n", + "Image(\"AA.S000000.BXY.semd.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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xurVq88aQGq6PzX5HouMjDTS09Ndr++77z7jySefdL0uLy83Bg4caHz33XcEEAAGp2ABqJLx/592UvFxWlqaJOm7775Tt27dlJycrKioKF166aX66quvavTe83HgwAHl5uaqS5cuZ+130UUXKTg4WFOmTNEf//jH897umTZt2qTu3bu7rXvooYcUEhKiSy65RNdff72SkpIkSV9//bXCw8Pd+n7zzTeKiopSUlKSXn31Vbe2Mz9vJSUl2rt3r6RTpwXdeOON9VazN1T3vbB06VLdeOONslqtkqT09HT17NnT1R4aGqqEhASlp6dXOe6Z/Xv16lXn77n6HKum457ZlpCQoJYtW+rnn3+WdOr766GHHpIk7d27V1arVbGxsdXW+Mc//lFPPvmkQkNDK9Vx0UUX6Z133jnv/anK2X7u33rrLV1wwQXq27dvg2wbgG8hgACoZNiwYXrppZeUn5+vAwcOaPHixTp58qQk6ciRI/r00091zTXXKCsrS0888YRGjx6t3NxchYWFqX///po9e7aKi4v1xRdf6Msvv3S9t65KSko0adIkPf74466D1Or88MMPstvtevXVV3XhhRee13bP9Mknn+iTTz7RH/7wB7f18+fPl8Ph0KeffqohQ4a41g8aNEj5+fmu10OGDNHOnTuVk5OjRYsWafr06frwww8lSVdffbXWrVunrVu3yul0as6cOfLz83N97p544omzXl9Snddee03Hjh3TpEmT6rDHdZeYmKjg4GC9+uqrKikp0bvvvqt9+/ZV+b3wzjvv6I477nC9djgcslgsbn0sFoscDkeV2zqz/9n6nkt9jlXTcc+1v/Pnz9f8+fNr1Pfbb7/VTz/95Pb5PN0PP/zgds1WfRk2bJheeOEFFRYWaufOnVqxYoXra22z2TR79mzNnj273rcLwDcRQABU8vTTT6tjx4668MILNXz4cI0bN07t2rWTJIWEhKhTp0665557FBAQoLFjxyohIUHffvutpFN/zf7uu+/Utm1bzZw5UzfffLPrvadfqHv6xddnYxiG7rzzTrVu3VrPPfeca/3ZxgoJCdG9996ru++++6wX89bGtm3bdNddd+mjjz5SmzZtKrX7+/vrmmuu0YYNG7Ru3boqx+jUqZM6duyoFi1aqH///vr973/vCiBJSUlasGCBJk2apA4dOigmJkZhYWGuz11drF69WtOnT9fq1asVEhJyzv5fffWV63M6fPjwOm9XkgIDA/Xhhx9qyZIliomJ0UcffaRrrrmm0v5s2rRJeXl5uuGGG1zrzGaz7Ha7Wz+73e66oPvMGs/sX9H3XOpzrHM527hn299zjXN63/Lycv3+97/Xyy+/LD8/v/OuuTb++te/6uTJk4qPj9fdd9+t2267zfW1fu6551w3tQAASWrp7QIAND6hoaFauHCh6/XTTz+tfv36SZJ69OhRqf/pp1507tzZ7QB80KBBrr+41uVUlt/97nc6evSo1q5dqxYt/vc3k3ONZRiGHA6Hjh07poiIiFpv93S7d+/WqFGj9Oabb+qyyy47a9/y8nJlZGTUaNzT90eSbr/9dtfnat++ffrb3/6m9u3b16nmjRs36p577tGaNWvOedpahcGDB9fLX/sr9OnTR998840kqaysTAkJCZVOwVm6dKluvvlmBQUFudYlJSW5ff8VFBQoIyNDSUlJio+Pr1RjUlKSdu7c6QoxqampNTrlrKr9retY51IxbsXpeaePm5SUpI8++sjV9+eff1Zpaak6d+5caZyuXbvKZrMpKytLMTExrrHuvfde2e12bd++3XU3seLiYtntdsXExOjnn3+WyWQ67/2oTnR0tP71r3+5XicnJ+vyyy+XJH3++ec6cuSI5s2b52qvOBXsmmuuabCaADRezIAAzVRJSYmKiopUXl7u9rEkHT58WFlZWSorK9Onn36qRYsWuU47Gjp0qAzD0FtvvaWysjKtWrVK+/fvdx1s7N69WwUFBSosLNTLL7+sgoICt79un8npdKqoqKjSx9KpWwV/8803WrlypdsBalVSU1O1ceNGFRcXq6CgQE8++aTCw8PVtWtXSaduOVpUVKSysjK3j88lMzNT1113nebOnVtpPxwOh5YuXSqHw6HS0lJ98MEH+vzzzzV48OAqx1q7dq1ycnIkSdu3b9df//pXt+s6tm/frvLych05ckT333+/nnjiCfn7+1c51tn2Z8eOHbr55pu1dOnSBj/nvqioSE6ns9LHkrRz5045nU6dOHFCTzzxhC6++GK3AFtaWqrly5dXOl1o6NChcjgcWrx4sZxOp2bOnKl+/fopPj6+yhqSk5O1YMEC7d+/X1lZWXrxxReVnJzsaj/b91hDjnXmuPPmzVNOTo5++uknvfHGG679HjNmjDZv3qx169bp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fvy4PvnkE33wwQfeLuWc/AwfnD92OByKiorSgQMHFBsbK0m64oordO+992rixIlufWNjY/XRRx+pf//+kqSJEyeqS5cuevbZZzVt2jTl5+drwYIFkqTPPvtM9957r37++eca1WG3211/pazPUy8ANF7FxcX66quv9Kc//Ulr167V888/r2effbbet/PYY4/p448/1p49e+p97KaupKREhmEoMDDwvMdavny5kpOT1bt3b/3zn/9UYmJilf0Mw9CBAwf07bffatOmTdq0aZN++OEHlZWVSZJiYmIUHx+vdu3aKSoqSpGRkYqMjFRUVJTCw8NlMpkUEhLiWoKCglRSUqKioiIVFRXpl19+0ZEjR3TkyBHXgeHPP/+sX3/91VWDyWRShw4dVFhYqOzsbDmdTvn5+alPnz669tprdc0112jAgAEKCQk5788L6ldpaanS09P1888/Kzs7Wzk5OSoqKlJxcbFrKSws1MmTJ92Wij6lpaUqKSmRdOr6MYvFIqvV6vo+O/37LTIyUiEhIa4xsrOzdfDgQR08eFAHDhzQ/v37lZWV5aotICBAAQEBKi0tdZ0lEhgYqL59+2rw4MEaOnSoBg0a5Hp+ETzDMAxlZWVpx44d+vbbb7Vu3Tpt27ZNhmGoT58+2r59e6M+PvXJGZC9e/fKarW6wock9erVS2lpaW798vLylJWVpZ49e7r127p1qyQpPT1d1113nVvb/v37VVhYWOUvaKfTKafT6XpdcYHonXfeqYCAgGrrrUnGq68+bI/tsb2GGau8vFy//PKLDh06pOLiYiUmJuqjjz7Sb37zmxrVUVucglU7NptNL730kt5//32lp6ervLxccXFxGjVqlB555BElJCTUesx33nlHEyZM0G233aY333zzrIHGz89PnTp1UqdOnXT77bdLOvXHsu+//14ZGRmuA7ysrCxlZmbq119/VW5urvLz82tcT2BgoNq1a6f4+Hj17NlTv/nNb9SpUyd17txZnTt3VnR0tPz8/CRJZWVl2rdvn7799lt9+umnevPNNzV37lwFBgaqf//+uuKKK9S9e3clJiYqJiZGVqtVJpNJfn5+Ki8vV3l5ueug9vSluLi40rqSkhJX0Drzc3KudTXpU9f31aWPn5+fgoODFRwcrKCgINfHwcHBatmyfg6ZysrK9NNPP+m7777Td999p23btmnHjh0qLCyUJLVo0UJRUVEymUwKDAx0LRUh1WQyqXXr1jKZTAoODnYFhICAABmGIbvdLrvdrvz8fGVkZGjbtm3Kzc1Vbm6uK6Sczt/fX+3bt1d8fLy6dOmiYcOGqXPnzq7vrdjYWLVo0UKGYSgvL08ZGRnavHmzvvnmG/3zn//U//3f/8nf31/9+vXT0KFDNXjwYCUkJKh9+/YKCQlRixYt5HQ6ZbPZlJ+ff9bF6XSqpKTE9b1XWlqq0tJS1+/oiq9XTf+taZu32g3DcP28nblU1+ZwOJSdna3s7GydOHFCkhQZGalrrrlG999/v4YPH67Q0FBZrdZKX+vGxCcDiMPhqJToLBZLpV/kDodD/v7+MplMbv0cDkeV41R87HA4qgwgc+bM0fPPP19pfV5e3jl/MVX1i7Ch+jT17fn5+TXp/WN7jXd7l19+uTp27KhBgwapV69eNd5+XRBAaqasrExvvvmmnnrqKRUUFOjmm2/WlClTFBQUpNTUVC1dulSvvvqqHn/8cT3zzDM1/uv/kiVLdOedd2rChAn6xz/+IX9//1rXZjabNWTIEA0ZMuSs9dtsNp08eVKFhYWuxel0KjAw0HUgHB0draioqBp/z/n7+ysxMVGJiYm68847VV5errS0NH355Zf6/PPP9cYbbyg7O9vtPX5+flxUfxYtWrRwBYDTw0BV607/OCgoSHl5ecrOztaePXv0ww8/uMJGt27d1K9fP40bN079+vVTYmKioqKi6vT9di6GYaigoEC5ubkqLCx01RkeHl6j7fn5+blmUi655BL97ne/k2EY+umnn/TFF1/oiy++0FtvvaUXXnihxjX5+fkpPDxc4eHhslqtCgkJUcuWLRUQEOD619/fXy1atHDtQ3X/VtfmiXV1HaNFixaVFj8/v0rrWrZs6VofHR2tyy+/XG3atFFCQoIuvvhidezY0e13gy/cQdEnA0hVTwi22+0ym82V+pWVlenkyZOuEHJ6vzPHqfj4zHEqTJs2TY8++qhb/w4dOmjlypWNdooLgG+yWCyu0yvq41Sipmjjxo16+OGHtWPHDiUnJ2vu3Llq166dW5/Zs2frT3/6k2bOnKkPP/xQS5YsUb9+/c467uLFi3X33Xfr7rvv1sKFC10HPw3B39/fdVDXkFq0aKGePXuqZ8+emjJliiQpPz9fP/30k44fP678/Hw5HA7XAY+/v7/8/f3d/roeEBCgwMDASusqDhLP/Mvu6c71ui7vaYhtlJWVqbi4WEVFRXI6na5T4JxOpwoLC1VUVOQ6den0U6IqPs7OznZ9XPFvUVGRIiIi1Lp1a3Xr1k233HKLLr74YvXp00fh4eGVamwofn5+MpvN1R7j1HXMiqB7//33yzAMHTx4UIcOHdKRI0dUVFSk0tJSBQcHy2q1uoJGRESEwsPDZTabG/TnC42XTwaQrl27ymazKSsrSzExMZKk1NRU3XvvvW79IiIiFBMTo507d7quAUlNTVX37t0lSUlJSdq5c6erf2pqqjp16lTtX8iCgoIa7EJCADhdxfS53W5Xq1atvFzN+Tn99LXjx4/L4XDoxIkTKi0tdf2VOCYmRh07dlRsbOw5/xqbnp6up556Sh999JEuvfRSffvtt7rsssuq7BsSEqJnnnlGY8eO1cSJE3XZZZfp6aef1lNPPVXp1FnDMPTKK6/o97//vX77299qwYIFTfrgKDw8XJdeeqm3y0AT4ufnp44dO6pjx47eLgWNnE8GELPZrFGjRiklJUUvvfSSPv30U+3atUsjR46s1Dc5OVkzZszQu+++q7S0NK1atUpbtmyRJN1+++0aOnSofvvb3yohIUGzZs1ScnKyp3cHACqpCCA2m80nAohhGDp69Kh2797tWn788UcdOnRImZmZVd7ivKpTfgICAtS5c2d17drVtcTFxcnpdGrPnj1at26dvvzyS3Xs2FFLlizR7bffXqOQ0L17d23evFmzZs3SzJkztXr1ai1YsECXXHKJJOno0aOaOnWqli5dqkceeUR//vOfm3T4AABv8skAIknz58/XpEmTFBUVpfbt22v58uWKiIjQ0qVLNXv2bNcF6dOnT9e9996r2NhYRUREaP78+a67mPTs2VN//vOfNXLkSNntdt1000166qmnvLlbACDpf9ekNcZzeYuLi7Vr1y599913+v7775Wamqrdu3e7ag0MDFRiYqIuuOAC9evXT3Fxca4lOjpaYWFhCg0NVYsWLVRSUqKCggIdPXrUdQeeffv2ae/evVq9erX279+v0tJSSVJYWJgGDBigJUuWaNy4cbWekQ4ICNBzzz2nG2+8URMnTtSll16q+Ph4hYWFKT09XeHh4frnP/+pCRMm1PvnDADwPz55G97GgtvwAmgoe/fuVbdu3fT5559r6NChXq2lpKRE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+kp9+/Z1tZ/+1PgXXnhB48aNU15eniRpzZo1WrBggbZs2aK0tDStXr1aixYtknTq4vmxY8fq4YcfVm5uri677DJNmDDBNe7pT5lftmyZHnzwQf3000+STh2wPvroo/roo4+UmZmpAwcOaObMma73Vhz01+T5K2cKCgqSw+GQw+HQ119/rddff13r16+XJPXv31+33HKL/vCHP0iSjh07pqeffloLFy5Uu3btNGPGDN13330qKyuTJL388suyWq266667al1Hc5Keni5Jrq//7t27vVkOAADwYQQQL1u6dKnGjh2rq666qtKpYh9//LEiIyP12GOPnfU0sm3btmnEiBGKj4+XJMXFxbkOFB0Oh1auXKnp06fLZDJp9OjR6tGjhz7++GNJ0pIlS/TQQw+pc+fOio2N1WOPPaa3335b0qlTbcxms2sW5tlnn9V3333nmgVZsmSJUlJSZLFYNGDAAI0aNUrLli2TJL3zzjsaP368+vXrJ6vVqmeeecY1riQ98MADGjJkyHnfDaxTp04aMGCA2wHxnDlz9Pnnn+s///mPfve732nChAmuQPbggw8qKChIf//735WZmanZs2dr4cKFzHqcQ0ZGhlq1auV6qOfpM2EAAAC1QQDxopKSEi1fvlzjx4/X+PHjK4WMt99+W7fccotuvfVWbdy4UYcPH65ynP79+2vhwoV68cUXtX37drfnjJzrqfHp6emVnhRfXVtoaKgSEhKUnp5e7VPmzzbu/v37VVhYWOvP09lkZGRo06ZNuvTSS13rLBaLXnrpJd16663asmWLZsyY4Wrz8/PTwoULNX36dE2aNEkPP/ywunXrVq81NUU///yzOnfurLCwMEVGRurAgQPeLgkAAPgoAogXrVu3TuXl5brmmms0ZswYHThwQNu2bZMk5ebmau3atRo/frw6d+6sPn36VLrGosLEiRM1b948rVq1SgMHDlRsbKzrmobqnhpf8TT4M9vP1nZ6+7meMl/VuBXrz5fT6VR4eLgsFou6dOmiQYMGuQUQSbr00ktls9k0YsQIhYWFubV1795d99xzjzIzM/XHP/7xvOtpDjIyMpSQkCDp1A0bCCAAAKCuCCBe9Pbbb2vs2LEKCAhQRESEhg0b5poFWb58ueLi4tSnTx9JqnKG5HSTJk3SF198ofz8fKWkpOi3v/2t0tLSzvnU+DPbz9Z2evvpT5mv6bgV689XUFCQ8vPzZbfblZOTo+PHj2vq1KlufSZPnqyJEyfqvffec12/cLqkpCQlJCQoMDDwvOtpDk4PIPHx8ZyCBQAA6owA4iUnTpzQqlWr9N5777meRfLFF19o2bJlKisr09KlS5WZmelqmz17tlJTU12nOFUnKChIDz30kCIiIrR79263p8ZXOP1p8ElJSdq5c2eN2goKCpSRkaGkpCS3p8zXdNxOnTq5bnFbX1q1aqUxY8Zo3bp1rnXLly/Xnj179Morr+jJJ5/UAw884HZnL9ROWVmZsrKy1KFDB0lSmzZt9Msvv3i5KgAA4KsIIF6yYsUKtWrVSnv27NGOHTu0Y8cOpaenq6ioSP/4xz+0adMmffnll25tV199dZWzIG+99ZbWrl2rgoIClZWV6e2335bdblfv3r3dnhpfWFioVatWuT01Pjk5WQsWLND+/fuVlZWlF198UcnJyZKkoUOHyuFwaPHixXI6nZo5c6b69evnuti94inzJ06c0ObNm7Vq1SqNHz9eknT77bdr+fLl2r59u2w2m2bNmuUaVzr1jI2ioiIZhuH2cW3l5+dr5cqVuvDCCyVJNptNjzzyiBYsWKDg4GD94Q9/kM1mc93ZC7WXk5Oj8vJyxcTESDr1AM/Tb3MMAABQKwbqzGazGZIMm8121n7z5s0zbrnlFrd11157rfHcc89V6jtlyhQjICDAGDp0aKW2999/34iPjzfKy8uNpKQk4+233zYMwzA++OAD47LLLjOsVqthsViMPn36GB9++KHrfb/88osxfPhwIyQkxOjatavx6aefuo07e/ZsIyoqyggPDzcef/xxo7y83NW2detWo2fPnkZwcLAxePBg48CBA662kydPGrfffrsRGhpqtG/f3li6dKnbuIsWLTLatm1rmM1mY9KkSUZRUZGrbciQIYYkt2X//v2GYRjGrFmzjOuvv97V9/rrrzdmzZplGIZh7N+/35BkhIaGGqGhoUZkZKQxduxY4+jRo4ZhGMb9999vJCcnu9WxadMmIzo62sjJyXGr7brrrqv0Oa7Qt29ft89hc/bf//7XkGRs2bLFMAzD+Nvf/mYEBAS4fZ8AAIDGoabHp97kZxicm1JXdrtdVqtVNput0sXap/vTn/6kbdu26b333vNgdTgf/fr109NPP63Ro0d7uxSvW7t2rYYPH65Dhw6pQ4cOrju35eXlKTw83NvlAQCA09T0+NSbOAULwFlVXD/UunVrSVJ0dLQkcRoWAACoEwIIcAYmBd1lZWUpMjJSQUFBkv4XRLgQHQAA1AUBxAMCAwPdbleLxq3iYYncoveUY8eOuS5Al/4XQJgBAQAAdUEA8YAePXro2LFj+vnnn71dCmrg66+/lnTq64ZTMyCxsbGu15GRkfLz82MGBAAA1ElLbxfQHAwcOFBt27bVww8/rIkTJ6pLly7y9/f3dlk4Q2lpqVJTU7Vo0SL1799fcXFx3i6pUcjOzla7du1cr/39/WW1WpWfn++9ogAAgM8igHhAUFCQFi5cqFmzZmnevHkqLy/3dkmoRnBwsK666io98cQT3i6l0cjLy1PPnj3d1oWHhxNAAABAnRBAPCQmJkZ/+9vf5HA4dPz4cUJII9SyZUu1bt1awcHB3i6lUcnLy1NERITbuvDwcNlsNi9VBAAAfBkBxMPMZrPMZrO3ywBqrKrnfTADAgAA6oqL0AFUq6SkRA6Ho9IMCNeAAACAuiKAAKhWRcio6hQsAggAAKgLAgiAauXl5UkigAAAgPpDAAFQrbMFEC5CBwAAdUEAAVAtZkAAAEB9I4AAqNbZrgEpKChQSUmJF6oCAAC+jAACoFp5eXny9/dXaGio2/qK2/JyGhYAAKgtAgiAalU8hNDPz89tvdVqlSROwwIAALVGAAFQraqegi79bwaEAAIAAGrLZwNITk6ORowYIZPJpMTERG3YsKHKfoWFhUpOTlZYWJji4uL07rvvuto2b96siy66SOHh4WrdurUmTZokh8PhqV0AGr3qAojFYpEknThxwtMlAQAAH+ezAWTy5Mlq27atjh8/rhdeeEHjxo1z3bHndCkpKcrNzdWRI0e0bNkyPfjgg/rpp58kSV26dNEnn3yi/Px8HThwQOXl5ZoxY4andwVotKoLIGazWRIBBAAA1J5PBhCHw6GVK1dq+vTpMplMGj16tHr06KGPP/64Ut8lS5YoJSVFFotFAwYM0KhRo7Rs2TJJUqtWrdSuXTtJkmEY8vPz0/79+z26L0BjVl0ACQsLkyRmDAEAQK219HYBdbF3715ZrVbFxsa61vXq1UtpaWlu/fLy8pSVlaWePXu69du6davr9aFDh3TRRRfJZrPJbDbr3//+d7XbdTqdcjqdrtd2u70+dgdotPLz85WYmFhpfUhIiFq0aEEAAQAAteazMyAV56BXsFgslQ6GHA6H/P39ZTKZqu0XFxen/Px8ZWdna+rUqW6h5kxz5syR1Wp1LR06dKinPQIap+pmQPz8/GQ2mzkFCwAA1JpPBhCz2Vxp9sFut7vOSz+9X1lZmU6ePHnWfpLUunVrDR8+XBMnTqx2u9OmTZPNZnMtmZmZ57knQONWXQCRTv18MQMCAABqyycDSNeuXWWz2ZSVleVal5qaqu7du7v1i4iIUExMjHbu3HnWfhXKy8uVkZFR7XaDgoJksVjcFqCpKisrk81mO2sAYQYEAADUlk8GELPZrFGjRiklJUWFhYVatWqVdu3apZEjR1bqm5ycrBkzZujEiRPavHmzVq1apfHjx0uS1qxZoz179sgwDB07dkzPPPOMrrzySk/vDtAoVTzlvLoAEhYWxgwIAACoNZ8MIJI0f/58ZWZmKioqSo899piWL1+uiIgILV261G2GY/r06a4L1seNG6f58+e7LqrNzs7W8OHDZTab1bdvX7Vv314LFizw1i4BjUrFba2ZAQEAAPXJzzAMw9tF+Cq73S6r1SqbzcbpWGhyvvvuO11yySXavn27evfuXal95MiRatGihVauXOmF6gAAQFV84fjUZ2dAADSsihmQ8PDwKtuZAQEAAHVBAAFQpfz8fElcAwIAAOoXAQRAlfLy8uTn51ft9C0zIAAAoC4IIACqlJeXp/DwcLVoUfWvCWZAAABAXRBAAFTpbA8hlJgBAQAAdUMAAVClcwWQihkQbqQHAABqgwACoEo1mQEpKyuT0+n0YFUAAMDXEUAAVKniGpDqhIWFSRKnYQEAgFohgACoUn5+/jlnQCRxIToAAKgVAgiAKtXkFCyJGRAAAFA7BBAAVTpXAAkNDZUknTx50lMlAQCAJoAAAqCS8vLyc56CZTKZJBFAAABA7RBAAFRy4sQJlZeX12gGpKCgwFNlAQCAJoAAAqCSvLw8SWIGBAAA1DsCCIBKKgLI2W7DSwABAAB1QQABUElNZkD8/f0VFBTEKVgAAKBWCCAAKsnPz5d09gAinZoFYQYEAADUBgEEQCU1OQVLOnUhOjMgAACgNgggACrJy8uTxWKRv7//WfsxAwIAAGqLAAKgknM9hLCCyWRiBgQAANQKAQRAJTUNIKGhocyAAACAWiGAAKgkLy/vnNd/SJyCBQAAao8AAqCS2syAcAoWAACoDQIIgEry8/NrfA0IMyAAAKA2CCAAKmEGBAAANBQCCIBKanMXLGZAAABAbRBAALgxDIMAAgAAGozPBpCcnByNGDFCJpNJiYmJ2rBhQ5X9CgsLlZycrLCwMMXFxendd991ta1evVqXX365rFar2rdvr+eff95T5QONVkFBgUpLSzkFCwAANIiW3i6griZPnqy2bdvq+PHjWr9+vcaNG6eMjIxKB00pKSnKzc3VkSNHtGvXLt1www3q27evunXrphMnTmjmzJkaNGiQsrOzdd1116lz586aMGGCl/YK8L68vDxJ4ja8AACgQfjkDIjD4dDKlSs1ffp0mUwmjR49Wj169NDHH39cqe+SJUuUkpIii8WiAQMGaNSoUVq2bJkk6bbbbtPVV1+toKAgxcXFaezYsdq6daundwdoVCoCSG1mQAzDaOiyAABAE+GTAWTv3r2yWq2KjY11revVq5fS0tLc+uXl5SkrK0s9e/Y8a78KmzZtUvfu3avdrtPplN1ud1uApqY2AcRkMskwDDmdzoYuCwAANBE+GUAcDocsFovbOovFIofDUamfv7+/TCbTWftJ0muvvaZjx45p0qRJ1W53zpw5slqtrqVDhw7nuSdA45Ofny+p5gFEEqdhAQCAGvPJAGI2myvNPtjtdpnN5kr9ysrK3A6Oquq3evVqTZ8+XatXr1ZISEi12502bZpsNptryczMrIe9ARqX2p6CJYkL0QEAQI35ZADp2rWrbDabsrKyXOtSU1MrnT4VERGhmJgY7dy5s9p+Gzdu1D333KNVq1apS5cuZ91uUFCQLBaL2wI0NXl5eQoNDVVAQMA5+zIDAgAAassnA4jZbNaoUaOUkpKiwsJCrVq1Srt27dLIkSMr9U1OTtaMGTN04sQJbd68WatWrdL48eMlSTt27NDNN9+spUuXqm/fvp7eDaBRys3NVWRkZI36MgMCAABqyycDiCTNnz9fmZmZioqK0mOPPably5crIiJCS5cudZvhmD59uuuC9XHjxmn+/PlKTEyUJL388sv69ddfNXr0aJnNZpnNZg0fPtxbuwQ0CjV9CKHEDAgAAKg9P4P7Z9aZ3W6X1WqVzWbjdCw0GbfffruOHTumzz///Jx9Dx06pPj4eK1bt07Dhg3zQHUAAOBsfOH41GdnQAA0jNrMgHAKFgAAqC0CCAA3tbkGhFOwAABAbRFAALipzQxIcHCw/Pz8mAEBAAA1RgAB4KY2MyB+fn4ymUzMgAAAgBojgABwKS8vr9UMiHTqOhACCAAAqCkCCACXEydOqLy8vMYzINKp60A4BQsAANQUAQSAS15eniTVagaEU7AAAEBtEEAAuOTm5kpSrWdACCAAAKCmCCAAXJgBAQAADY0AAsClLjMgXIQOAABqgwACwCUvL09+fn6yWCw1fg8zIAAAoDYIIABccnNzFRERoRYtav6rgbtgAQCA2iCAAHCp7TNAJGZAAABA7RBAALjU5inoFQggAACgNgggAFyYAQEAAA2NAALAhRkQAADQ0AggAFx+/fVXAggAAGhQBBAALsePH1d0dHSt3lPxHBDDMBqoKgAA0JQQQABIkgzDUE5Ojlq1alWr95lMJhmGIafT2UCVAQCApoQAAkCSdOLECZWUlNR6BsRkMkkSp2EBAIAaIYAAkCTl5ORIUp1mQCTxMEIAAFAjBBAAkk5d/yGJGRAAANCgCCAAJP1vBoQAAgAAGhIBBICk/82AREVF1ep9BBAAAFAbBBAAkk7NgFitVgUGBtbqfQQQAABQGwQQAJJUp1vwSgQQAABQOwQQAJLq9hBC6dSDCCUCCAAAqBkCCABJp2ZA6hJAgoODJRFAAABAzfhsAMnJydGIESNkMpmUmJioDRs2VNmvsLBQycnJCgsLU1xcnN59911XW3p6uq699lpZrVZdcMEFniodaJSOHz9ep1OwWrRooZCQEAIIAACoEZ8NIJMnT1bbtm11/PhxvfDCCxo3bpzy8vIq9UtJSVFubq6OHDmiZcuW6cEHH9RPP/0kSQoICNDtt9+uP//5z54uH2h06noNiHTqOhAeRAgAAGrCJwOIw+HQypUrNX36dJlMJo0ePVo9evTQxx9/XKnvkiVLlJKSIovFogEDBmjUqFFatmyZJKlr166666671KVLF0/vAtDoZGVlKSYmpk7vNZlMzIAAAIAaaentAupi7969slqtio2Nda3r1auX0tLS3Prl5eUpKytLPXv2dOu3devWOm3X6XTK6XS6Xtvt9jqNAzQ2J06cUEFBgdvPVG0QQAAAQE357AyIxWJxW2exWORwOCr18/f3d90mtLp+NTVnzhxZrVbX0qFDhzqNAzQ2x44dkyQCCAAAaHA+GUDMZnOl2Qe73S6z2VypX1lZmduBUVX9amratGmy2WyuJTMzs07jAI0NAQQAAHiKTwaQrl27ymazKSsry7UuNTVV3bt3d+sXERGhmJgY7dy586z9aiooKEgWi8VtAZqCigDCNSAAAKCh+WQAMZvNGjVqlFJSUlRYWKhVq1Zp165dGjlyZKW+ycnJmjFjhk6cOKHNmzdr1apVGj9+vCTJMAwVFRWpuLjY7WOgucnKylJISEidQ3VoaCgBBAAA1IhPBhBJmj9/vjIzMxUVFaXHHntMy5cvV0REhJYuXeo2wzF9+nTXBevjxo3T/PnzlZiYKEk6ePCgQkJCdN111+mnn35SSEiIhg0b5q1dArzm2LFjio2NlZ+fX53ezwwIAACoKZ+8C5YkRUdHa82aNZXW33HHHbrjjjtcr0NCQrR06dIqx+jYsaMMw2iwGgFfURFA6ooAAgAAaspnZ0AA1J9jx47V+foPiQcRAgCAmiOAANDRo0eZAQEAAB5BAAGaOcMwdOjQIcXFxdV5DAIIAACoKQII0Mzl5+fL4XAoPj6+zmMQQAAAQE0RQIBm7uDBg5JEAAEAAB5BAAGauUOHDknSeZ+CVVpaqpKSkvoqCwAANFEEEKCZO3jwoAIDA9WmTZs6jxEaGipJzIIAAIBzIoAAzdyhQ4fUoUMHtWhR918HJpNJEgEEAACcGwEEaOYOHjx4Xtd/SAQQAABQcwQQoJk7cODAeV3/If0vgPAwQgAAcC4EEKAZMwxDP/30k7p163Ze4zADAgAAaooAAjRjOTk5stlsSkxMPK9xCCAAAKCmCCBAM7Znzx5JYgYEAAB4DAEEaMZ++ukn+fn5qUuXLuc1DgEEAADUFAEEaMb27Nmj+Ph4BQcHn9c4BBAAAFBTBBCgGdu5c6e6d+9+3uO0bNlSgYGBBBAAAHBOBBCgGfvvf/+r3r1718tYJpOJAAIAAM6JAAI0U1lZWcrOziaAAAAAjyKAAM3Uf//7X0mq1wDCgwgBAMC5EECAZmrLli2KjIxUx44d62U8ZkAAAEBNEECAZurLL7/U4MGD5efnVy/jEUAAAEBNEECAZsjpdGrz5s0aMmRIvY1JAAEAADVBAAGaoW+++UZFRUUaOnRovY1JAAEAADVBAAGaoRUrVqhDhw66+OKL621MAggAAKgJAgjQzJSVlWnFihW66aab6u36D0kKDQ0lgAAAgHMigADNzMqVK3Xs2DElJyfX67jMgAAAgJoggADNiGEYmjdvngYPHqy+ffvW69gEEAAAUBM+G0BycnI0YsQImUwmJSYmasOGDVX2KywsVHJyssLCwhQXF6d3333XrX3x4sVq3769LBaL7rrrLhUXF3uifMAr3nrrLW3evFkpKSn1PjYPImzcdu7cqenTp+umm27SNddco9/85jeaMmWK3njjDe3cuVNlZWUNXoPD4dDXX3+t9957T4sWLdL777+vXbt2qbS0tMG3DQBoPFp6u4C6mjx5stq2bavjx49r/fr1GjdunDIyMhQREeHWLyUlRbm5uTpy5Ih27dqlG264QX379lW3bt20c+dOPfroo1q/fr26du2q0aNHa+bMmZo+fbqX9gpoOF999ZUeeughTZw4UVdffXW9j88MSOOUnp6uP/zhD1q/fr3Cw8PVr18/RUVFyeFw6PPPP9eCBQtUXl6u0NBQ9e3bV5deeqlriYuLO6/rhLKzs7Vx40Zt3LhRmzZtUmpqapVBJzw8XL/5zW80fvx4XXvttWrZ0mf/awIA1ICfYRiGt4uoLYfDoaioKB04cECxsbGSpCuuuEL33nuvJk6c6NY3NjZWH330kfr37y9Jmjhxorp06aJnn31W06ZNU35+vhYsWCBJ+uyzz3Tvvffq559/rlEddrtdVqtVNptNFoulHvcQqB/l5eVKS0vTW2+9pb/+9a8aOHCg1qxZo5CQkHrf1t///nc99thjKioqqvexUTf//Oc/dd9996lDhw6aNWuWxowZo4CAALc+DodD27dv15YtW7Rt2zZt3bpVBw8elCSZzWZ17txZnTt3VocOHRQZGanIyEhFRETIZDLJ399f/v7+kiSbzaa8vDwdPXpUP/74o9LS0rR3715JUkJCggYPHqwBAwaof//+6tixo0wmk/Lz87Vr1y599tln+te//qUff/xRbdq00R133KEJEyaoV69e9XqjBAD1r7i4WHa7XXa7XTabzfWx0+mUyWRyW4KDgxUUFORaAgMDVVRUJIfDoYKCAuXn5ys3N1d5eXmVlsLCQrVu3Vpt27ZV9+7d1atXL3Xo0IHfEVXwheNTn/wz0969e2W1Wl3hQ5J69eqltLQ0t355eXnKyspSz5493fpt3bpV0qm/DF533XVubfv371dhYWGVB2hOp1NOp9P12m63S5LGjRvn9p96dZmO9az35PqTJ0/q4MGDcjqdslgseuqppzRt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TQMBBEC9aOwBxG6369NPP9W///1v/ec//1FmZqYkqWPHjrrssss0ZswY9e3bV71791Z4eLh3iwUAoAkjgACoF40xgBQXF+vf//63Fi9erE8++UQlJSVKSkrSuHHjNGjQIF1++eWuO+kBAADPIIAAqBeBgYFq0aJFowggBw8e1N/+9jctXrxYv/76q+vhdqNGjVKnTp28XR4AAM0aAQRAvfDz85PJZPJqAPn+++81b948vf/++woLC9M999yjO++8Uz169PBaTQAAwB0BBEC9CQ0N9UoA+fHHH/X000/rgw8+UEJCgl566SXdeeedPJEdAIBGiAACoN54egbEbrfr6aef1iuvvKL27dtr0aJFmjBhgvz9/T1WAwAAqB0CCIB648kA8vHHH+vBBx9Ufn6+XnjhBf3ud7+r8UNEAQCA99TvI3oBNGsmk0kFBQUNuo3i4mI9+uijGjVqlC6++GKlp6frscceI3wAAOAjmAEBUG8aOoDYbDb95je/0TfffKOXXnpJv//973kCOQAAPoYAAqDehIaGNlgAycnJ0bBhw3TgwAF9/vnnGjRoUINsBwAANCwCCIB6ExYWppycnHoft6CgQDfeeKOOHj2qjRs3qmfPnvW+DQAA4BlcAwKg3oSFhcnhcNTrmOXl5brtttuUnp6uTz75hPABAICPYwYEQL0JCwvTiRMn6nXMefPmafXq1fr3v/+tPn361OvYAADA85gBAVBv6juAbNmyRU899ZSeeOIJDR8+vN7GBQAA3kMAAVBvzGZzvQWQ0tJS3Xffferdu7eef/75ehkTAAB4H6dgAag3FTMghmGc9+1x//73v2vnzp3aunWrAgIC6qlCAADgbcyAAKg3YWFhKi8vV2Fh4XmNk5+fr+eff17333+/+vXrV0/VAQCAxoAAAqDehIWFSdJ5n4b117/+VUVFRXr22WfroywAANCIEEAA1Jv6CCA2m01/+ctfdP/99ys2Nra+SgMAAI0EAQRAvamPAPLWW2/J4XDo8ccfr6+yAABAI0IAAVBvzjeAGIahBQsWaMyYMWrXrl19lgYAABoJ7oIFoN6cbwD54osv9OOPP2rBggX1WRYAAGhEmAEBUG8qAojD4ajT+99++20lJCRoyJAh9VkWAABoRAggAOpNaGiopLrNgBQXF2vFihW69dZbz/sZIgAAoPEigACoNy1atFBoaGid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842OHj2q5cuXq3Pnzt4uB2fRp08ftWvXTk8++aQOHTqkuLg4b5cEAADQpHARugfs2rVLsbGxhA8fMWjQIEmnvm4AAACoXwQQDyguLuZ6Ah8SEhIi6dTXDQAAAPWLANIIJCQkqH///lW23X333QoODlZ+fn617zcMQzNmzFB8fLzMZrPi4+P1yCOPuNpzcnI0YsQImUwmJSYmasOGDW7vnzt3rqKjoxUZGampU6fKMAxX27Zt29SrVy+ZTCYNGTJEBw8edLUVFhYqOTlZYWFhiouL07vvvus27uLFi9W+fXtZLBbdddddrgP6X375RbfccovatGmjyMhIjRw5UocOHarR5+rAgQPy8/OT2WyW2WxWu3bt9Pzzz7vat2zZoujoaOXk5LjWLViwQH379tWRI0cUFRWl7du3u9rKysrUu3dvvfnmm651fn5+NaoFAAAAtUcA8bJNmzYpJydH27dv1759+9zaioqK9MEHH8hkMun999+vdoy33npLK1as0MaNG+VwOPTVV1+pb9++rvbJkyerbdu2On78uF544QWNGzdOeXl5kqQ1a9ZowYIF2rJli9LS0rR69WotWrRI0qmL58eOHauHH35Yubm5uuyyyzRhwgTXuCkpKcrNzdWRI0e0bNkyPfjgg/rpp58kSTt37tSjjz6qjz76SJmZmTpw4IBmzpwpSSooKNCgQYOUlpamrKwsdenSRXfddVeNP2dBQUFyOBxyOBz6+uuv9frrr2v9+vWSpP79++uWW27RH/7wB0nSsWPH9PTTT2vhwoVq166dZsyYofvuu09lZWWSpJdffllWq7VW2wcAAMB5MFBnNpvNkGTYbLaz9ps3b55xyy23VNn20EMPGZMmTTKGDRtmPPfcc25ty5cvNzp27GjMmjXLGDp0aLXjP/TQQ8ZTTz1VZduJEyeMwMBA4+jRo651gwcPNt566y3DMAzj1ltvNebOnetq+8c//mFceeWVhmEYxtq1a40LLrjA1eZwOIyQkBDjwIEDhmEYRkxMjLF582ZX+4QJE4znn3/eMAzDeOKJJ4wHHnjA1bZhwwajU6dOVdb4008/GWazudr9O93+/fuNoKAgt3Xjxo0zXnrpJddrm81mtG3b1vj000+Nm266yXj44YddbeXl5caAAQOMl156yTh06JARFRVl7Nmzp9J2+vbta3z44Yc1qgkAAKCxqOnxqTcxA+JFJSUlWr58ucaPH6/x48dr6dKlbu1vv/22brnlFt16663auHGjDh8+XOU4/fv318KFC/Xiiy9q+/btbs8Z2bt3r6xWq2JjY13revXqpbS0NElSenq6evbsWaO20NBQJSQkKD09XXl5ecrKyqrxe3v16qX9+/ersLCwUv2bNm1S9+7dz/0Jq0JGRoY2bdqkSy+91LXOYrHopZde0q233qotW7ZoxowZrjY/Pz8tXLhQ06dP16RJk/Twww+rW7duddo2AAAAao8A4kXr1q1TeXm5rrnmGo0ZM0YHDhzQtm3bJEm5ublau3atxo8fr86dO6tPnz6VrrGoMHHiRM2bN0+rVq3SwIEDFRsb67qmweFwyGKxuPW3WCxyOBxVtp+t7fR2h8Mhf39/t4vrzzVuxfrTZWZm6oknnnCdnlUTTqdT4eHhslgs6tKliwYNGuQWQCTp0ksvlc1m04gRIxQWFubW1r17d91zzz3KzMzUH//4xxpvFwAAAOePAOJFb7/9tsaOHauAgABFRERo2LBhrlmQ5cuXKy4uTn369JGkKmdITjdp0iR98cUXys/PV0pKin77298qLS1NZrNZdrvdra/dbpfZbJakSu1nazu93Ww2q6ysTCdPnqzxuBXrK+Tm5ur666/Xk08+qWuuuaaGn7VT14Dk5+fLbrcrJydHx48f19SpU936TP7/2Lv3uCjr/P//TwQExmFgwAMgYJ4iT1lqaXbQsjQzzSw1C22ttpO1ta0dbLfYPGT+Onxqt7Ds02arpLKtm2illuVamYcOkoqp4QkJEARmGE4qXL8//DKfJlA5zjDwuN9u1y25rvdc1+saTObJ631d14wZmjZtmlasWKG0tLRq++jdu7e6d++utm3b1vq4AAAAaDgCiIcUFRUpJSVFK1asUEREhCIiIrRx40YtX75cFRUVSkpKUkZGhnPb888/r9TUVOcUpzMJCAjQgw8+KKvVqj179qhnz56y2WzKzs52jklNTXVOeerdu7d27txZq23FxcVKT09X7969ZbVaFRERUevXpqamqmvXrs5b3DocDt1www266aab9PDDD9f3bVT79u118803a926dc51ycnJ2rt3r9544w09/fTTuv/++13u7AUAAADPIYB4yMqVK9W+fXvt3btXO3bs0I4dO5SWlqaysjK988472rx5s/773/+6bBsxYkSN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wR2QU6dOqaysrBErAwC0BgQQAGhl0tLSJEm9evWq9z6Cg4MliWlYAIA6I4AAQCuTlpam2NhYZ4ioD4vFIokAAgCoOwIIALQyO3bsUL9+/Rq0j6oAwsMIAQB1RQABgFbEMAxt375dl1xySYP2QwcEAFBfBBAAaEUOHjyo48ePE0AAAB5DAAGAVmT79u2SRAABAHgMAQQAWpEvv/xS3bt3V4cOHRq0n4CAAPn7+xNAAAB1RgABgFbks88+07XXXtvg/fj4+PA0dABAvRBAAKCVOHr0qPbu3asRI0Y0yv4IIACA+iCAAEArkZKSIj8/P11zzTWNsr/g4GACCACgzgggANBKLF++XNdee63Cw8MbZX90QAAA9UEAAYBW4MCBA/rqq6902223Ndo+LRYLDyIEANSZn6cLAAA0vVdffVXh4eGaOHFio+3TYrHo2LFjjba/luLTTz/VP/7xD/30009q166dLrroIo0bN04jRoyQr6+vp8sDAI+jAwIALVx6eroWLVqkhx9+WCaTqdH2yxQsV+Xl5Zo2bZpGjhypPXv2aMiQIeratavWrFmjUaNGqUePHnrhhReUk5Pj6VKdDMNQXl6eDhw4oOPHj8swDE+XBKAV8NoAkpubqzFjxshkMikuLk4bNmyocVxpaani4+MVHBys2NhYLVu2zGX74sWLFR0dLYvFounTp+vEiRPuKB8A3OLEiROaPn26IiMjNXPmzEbdNwHk/1RWVuq2227TihUr9N577+mHH37QwoULtWTJEh08eFDffPONhg0bpueee06dO3fW+PHjlZKSorKyMo/Ue+DAAT300EOKjo5Whw4d1L17d7Vv316hoaG66qqr9Oijj2rp0qX66aefVFlZ6dbaKisrVVZW5vbjAnV18uRJbdmyRS+//LL+8pe/6LnnntN7772nQ4cOebq0Zs9rp2DNmDFDUVFRysvL0/r16zVx4kSlp6fLarW6jEtISFB+fr4yMzO1a9cu3XDDDRo4cKDOP/987dy5U4899pjWr1+vnj17avz48Zo7d65mz57tobMCgMaTl5enqVOnauvWrfr8888btfshEUB+7bnnntOqVauUkpKiG2+80WWbj4+PhgwZoiFDhuiVV17R+++/r3/84x+66aabZDKZdPXVV+uaa67RoEGDdPHFFys4OLjJ6qyoqNBLL72kZ599ViEhIZo2bZqGDBkiq9WqwsJC7d+/Xz/88IM++ugjvfbaa5JO3+1swIABGjRokHr16qXzzjtPXbt2VUxMjPz9/etdS2lpqXbv3q0dO3boxx9/1J49e/TTTz/p6NGjkqS2bduqa9euuvrqqzVx4kRdffXV8vHxaZT3obKyUps2bdL69euVmpqqvLw8nThxQiEhIQoNDVX79u3VoUOHaovFYlG7du2ci5+f136MQj2cPHlS3333nTZu3KiNGzfqq6++UnFxsUwmkzp06KDy8nJlZ2dLkgYMGKAZM2ZoypQpCgoK8nDlzY+P4YX9VofDofDwcB06dEiRkZGSpKuuukr33HOPpk2b5jI2MjJSH374oQYPHixJmjZtmnr06KFnn31Ws2bNUmFhoRYuXChJ+vzzz3XPPffowIEDtarDbrcrJCRER44ckcViOevYurzNLXWsp4/vbWM9fXxvG+vp4zeHsYZhqKCgQAcOHNCXX36pZcuWyd/fXytWrNB1111X6+PV1muvvaann35axcXFjb5vb7Jjxw4NHDhQf/3rX/XMM8/U+nW7du3SJ598ok8++URbtmxRaWmpfHx8FBcXp0suuUSXXnqpLrnkEvXv31+BgYENrrOsrEx33HGHPvzwQ82cOVMJCQlnDaUFBQX6/vvv9e233zqXw4cPO/8++vj4yGq1Kjw83LkEBwcrICDAZTEMQ2VlZSovL5fD4VBmZqYyMjKUkZGhiooK+fj4qGfPnurTp48uuOACde3aVUFBQSosLNSePXu0bt06paenq2/fvnrhhRd0ww03NCiIrFmzRo8++qjS09MVERGhgQMHKiIiQv7+/rLb7SooKFBeXp5yc3OVm5t71r/fAQEBateunSwWi7p3765evXrpggsuUFxcnM4//3xFR0erTZv/m2xiGIaOHz/uPP+MjAwdPXrU5c9FRUXy8/OTr6+v/Pz8XN7LwMDAM379220BAQHO/fx2OdP62oyTTk83PHHihMt/y8rKVFhYqPz8/GpLcXGxSkpKVFJSopMnT7rUazKZ1K5duxr/W3UOZ1pCQ0MVGRmpiIgIRUZGymw21/vvxW+VlZXpwIED2r9/v7799ltt3rxZW7duVXFxscxms6644goNHz5cV199tQYMGOAMozabTZ999pneffddffzxx+rQoYP+8Ic/6MEHH6z2S/KmUvX51GaznfPzqad4ZQD54YcfNGrUKJeLH6vmNi9YsMC5rqCgQGFhYc50Kkkvv/yytm3bphUrVuimm27SqFGj9OCDD0qSjh8/rvbt26ukpKTGtFpeXq7y8nLn13a7XTExMU11mgBQb+eff75uvfVWPfroo+rQoUOTHOPdd9/VXXfdpZMnT7ba3wQbhqErr7xSBQUF2rFjR707AqdOndKePXucH/S3b9+uHTt2OD+sjRo1SrfccosmTpxYr9+mFhYW6qabbtK2bduUnJyssWPH1qvO8vJyZWRk6ODBgzp8+LByc3N1/Phx5+JwOJw/K6sWX19f5wdik8mkzp07KyYmRl27dtVFF12kvn37njUIGYahjRs3as6cOfriiy903XXX6bXXXlOvXr3qVPvRo0f1hz/8Qf/5z380cuRIPfvssxo6dOg5w0xpaakzjBQVFam4uLjaUtU92rNnj/bv36+TJ09KkoKCghQWFqbAwECVlJQoLy/PuU2S/P39ne9H1WKxWFRRUaFTp07p1KlTLu9lVZD79Z9rWlf154qKCpelqfn5+Sk8PFxhYWHOxWq1ymw2y2QyyWQyyc/PTydOnFBZWZnKyspUWlrqDCi//m9xcbFOnDjhfB9OnTrl8r6cPHmy2i9nzGazIiIiXJb27dsrICBAbdu2lb+/v06ePOny3pWUlKigoKDacuzYMef+O3TooKFDh+qyyy7T8OHDNWDAgFr9v75//369/PLLWrx4sfz9/XXvvffqj3/8o6Kjo2v9nubn5+unn37S3r17tXfvXuXk5DiDXWFhoUpLS6uFwfLyclVWVjbrAOKVPzEcDke1N9RisaiwsLDaOF9fX5d/2CwWixwOR437qfqzw+Go8R/4+fPn67nnnqu2fvHixbWa2lDb39jU5Tc77LP17bOlnQ/7bNx9WiwWnXfeeY36m8AzqZoqVFRU5Lbf7DU3S5cu1ddff63PP/+8QdOR/Pz81K9fP/Xr10/Tp0+XdPrD/o8//qhNmzbpP//5j373u9/pscce0/3336/HHntMYWFhtdr3L7/8olGjRikzM1MbNmzQ0KFD611nQECAevTooR49etR7H3Xl4+Ojq6++WsOHD1dKSooee+wxXXjhhfrjH/+oZ5555pxT1k6dOqXXX39dzzzzjMxms5YvX65JkybV+v+poKAgxcbGKjY2tlbjT506pUOHDmnfvn3at2+fCgsLVVZWJpPJpPDwcEVGRjrDRseOHV06JE2tsrKyWij59VL1If9siyTnB/qqYFn1Z5PJ1GjT5M7FMAzZbDZlZ2crKytLWVlZys7Odll++uknHT9+XCdPnnR+QG/btq2z+xIYGKigoCBZrVaFhYXpggsukNVqldVqVXR0tLp3767u3bsrMjKyXufVs2dPvfnmm/rrX/+qv/3tb0pMTNTf//533XrrrRo5cqT69eunjh07qqKiQjabTQcOHFB6erozbPz000/Kzc2VdPr/g9jYWEVFRSksLEznnXeerFargoKCqn0/Tp06pT/96U+N/ZY3LsMLff/990aHDh1c1j300EPGE0884bIuPz/fkGQUFxc717300kvGpEmTDMMwjHHjxhlvvPGGc1teXp4hySgpKanxuGVlZYbNZnMuGRkZhiTDZrM11qkBgNdYt26dIck4dOiQp0vxiMLCQqNTp07G5MmT3XK8n3/+2fjDH/5gtGvXzggNDTVefPFFo7S09Kyv+emnn4wuXboY0dHRxu7du91SZ1MrLS01Zs+ebQQGBhpRUVHGsmXLjMrKyhrHbtq0ybj44osNHx8f48EHHzQKCgrcWyzwKzabzXjxxReN/v37Gz4+Poakaku7du2MAQMGGFOmTDGee+45Y8WKFcaOHTtcPsvW5jjN/fOpV94Fq2fPns7UWyU1NVV9+vRxGWe1WhUREaGdO3fWOK53797VtlXNPa1JQECALBaLywIArVXVv4Gt9WGEf/3rX+VwOPTSSy+55Xjdu3fXa6+9pvT0dE2ZMkVPPfWUzj//fL355psu04Ol078dXrFihQYPHqx27dpp8+bN6t27t1vqbGqBgYF65plntGfPHl166aWaMmWKhg4dqjfffFPfffedfvzxRyUlJen666/XVVddJV9fX33zzTd64403FBoa6uny0YpZLBbNnDlTO3bsUH5+vr777jt98sknWr9+vbZs2aKcnBwVFRXpu+++0/vvv69nn31WkyZNUv/+/Rv9JiIe5+kEVF+33nqrce+99xolJSXGqlWrDKvVauTn51cbN3PmTGPMmDGG3W43vvnmGyMkJMT46aefDMMwjB9//NEICwszvvvuO6OwsNC45pprjGeeeabWNXhDwgSAprJ7925DkvH11197upRaOXXqlJGTk2NkZ2fX6beJNdm5c6fh6+trvPDCC41UXd399NNPxpQpUwwfHx8jKirK+MMf/mAsWrTIWLBggTF48GBDkjFp0qQW/1v/tWvXGtddd53Rpk0bl98kX3rppcbSpUuNiooKT5cIuJU3fD71yovQpdPPAbnzzju1ceNGRUdHKzExUddee62SkpL0/PPPa/fu3ZJOXzx2zz33aNWqVbJarVqwYIFuv/12534WL16sP//5z7Lb7brlllv01ltvKSAgoFY1eMNdBgCgqRw9elQxMTH65JNPdP3113u6HBd2u11ffvmltm/fru+//147duxQZmamy7Mlqm7xOnXqVA0bNqzWc7wNw9CwYcOUk5OjH3/8sdY/M5rKnj179Prrr+vjjz/W4cOHFRQUpCuvvFKPPvqoRo0a5bY5+Z5mt9u1d+9eVVRUqHv37k128wWgufOGz6deG0CaA2/4BgNAU6n6N3DFihWaNGmSR2sxDEPffvutVq9erc8++0zbtm1TRUWFOnTooAEDBujiiy9W165d1alTJ7Vp00b5+flKTU1VSkqK0tPTddVVV+nVV1/VxRdffM5jLV68WNOnT9dnn32mESNGuOHsaq+iokJt2rRpNaEDQHXe8PnUK++CBQDwvKo7bXnyYYS7du3Se++9pw8++ECHDh1SWFiYRowYod/97ncaMWKEunXrdtYP4y+//LI++ugjzZo1S5deeqn+/Oc/689//vMZ72iVkZGhP/3pT7r99tubXfiQ5HxOAwA0ZwQQAEC9tGnTRsHBwW4PIKdOndIHH3ygxMREffnll+rQoYPzGRlXXXVVnZ5J4uPjoxtvvFEjR47U888/r7lz52r16tX65z//We3GJiUlJZo8ebLatWunv/3tb419WgDQanjlXbAAAM2DOwNIRUWFkpKS1Lt3b02ZMkW+vr5KTk5WZmamFi5cqGuuuabeD0Rs27at/vrXvzqfSD5w4EDNnz/feYevo0ePavTo0frxxx/1r3/9S+Hh4Y15agDQqhBAAAD1VjXPuKl98803GjhwoOLj43XBBRfou+++0xdffKGJEyc26AGAvzVo0CB99913mjFjhp555hl16tRJvXr1UteuXbVv3z6tXbtWgwcPbrTjAUBrRAABANSb1WpVQUFBk+2/tLRUM2bM0NChQ+Xn56dvvvlGKSkpGjBgQJMdMygoSC+//LIOHjyouXPnatSoUfrb3/6mPXv26Iorrmiy4wJAa8E1IACAerNa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ZQCA5oQAAgBoFH5+frr88su1adMmSdKyZcsUFRWlK6+80sOVAQCaEwIIAKDRXHvttfriiy906NAhLVmyRHfccYfatOFHDQDg//gYhmF4ughv5Q2PugcAdzp27JhiYmIUFBSkEydOaP/+/ercubOnywKAVsMbPp/yaykAQKPp2LGj3nnnHZ1//vlKSkoifAAAqqED0gDekDABAADQenjD51M6IAAAAADchgACAAAAwG0IIAAAAADchgACAAAAwG0IIAAAAADchgACAAAAwG0IIAAAAADchgACAAAAwG0IIAAAAADchgACAAAAwG0IIAAAAADchgACAAAAwG0IIAAAAADchgACAAAAwG28MoBs375d/fv3l8lk0rBhw3T48OEzjk1PT9fll18uk8mkAQMGKDU11bltwYIFuuCCCxQcHKzevXtr5cqV7igfAAAAaLW8LoCUl5drwoQJeuSRR5Sfn68hQ4Zo6tSpZxw/ZcoUjRw5Uvn5+brrrrt0880369SpU5IkX19f/etf/5LNZtObb76p6dOnKz093V2nAgAAALQ6PoZhGJ4uoi7WrVunRx99VHv27JEkFRcXq0OHDtqzZ4+6dOniMnbv3r269NJLlZubq7Zt20qSunTpoiVLluiqq66qtu/LL79cjz32mG655ZZa1WK32xUSEiKbzSaLxdLAMwMAAAAaxhs+n3pdByQtLU39+vVzft2uXTt1795daWlpNY6Ni4tzhg9JuvDCC7V79+5qY4uKirR792717t37jMcuLy+X3W53WQAAAADUntcFEIfDUS3NWSwWORyOBo297777NG7cOPXq1euMx54/f75CQkKcS0xMTD3PAgAAAGidml0AGTlypAIDA2tc5s6dK7PZXK3zYLfbZTabq+2rtmOfeuopHTlyRG+99dZZa5s1a5ZsNptzycjIqOdZAgAAAK2Tn6cL+K3169efdfu6deu0aNEi59fFxcVKT0+vcepU7969tXfvXp08eVL+/v6SpB9//FGPP/64c8yLL76o1atX66uvvlJQUNBZjx0QEKCAgIC6nA4AAACAX2l2HZBzGT58uBwOhxYvXqzy8nLNnTtXgwYNqnYBuiTFxcUpLi5OL7zwgsrLy5WYmChfX18NHTpUkvSPf/xDr7/+utatWyer1eruUwEAAABaHa8LIAEBAVq5cqVeeeUVhYaG6uuvv9aSJUuc2++//37df//9zq/ff/99rV27VqGhoXr77be1cuVK+fmdbvzMmTNHWVlZuuCCC2Q2m2U2m/X888+7/ZwAAACA1sLrbsPbnHjDbc4AAADQenjD51Ov64AAAAAA8F4EEAAAAABuQwABAAAA4DYEEAAAAABuQwABAAAA4DYEEAAAAABuQwABAAAA4DYEEAAAAABuQwABAAAA4DYEEAAAAABuQwABAAAA4DYEEAAAAABuQwABAAAA4DYEEAAAAABu4+fpArxZRUWFJOno0aOyWCwergYAAACtnd1ul/R/n1ObIwJIA/z888+SpD59+ni4EgAAAOD//Pzzz7rkkks8XUaNfAzDMDxdhLcqKChQWFiYMjIy6IAAAADA4+x2u2JiYpSfny+r1erpcmpEB6QBfH19JUkWi4UAAgAAgGaj6nNqc8RF6AAAAADchgACAAAAwG0IIAAAAADchgACAAAAwG24CN3NHA6H8vLyVFlZ6elS8Bt+fn7q2LGjAgMDPV0KAABAi0UAcZPs7GzNmzdPW7duJXw0Y4GBgbrmmmv01FNPyWQyebocAACAFocA4gbl5eW69957ZRiGnnjiCXXv3r1Z3xqttTp16pRSU1P17rvv6vjx43rjjTc8XRIAAECLQwBxg6+//lq//PKLkpOT1a1bN0+Xg7MYMGCAOnfurKefflpHjhxRbGysp0sCAABoUbgI3Q127dqlyMhIwoeXuOKKKySd/r4BAACgcRFA3ODEiRNcT+BFgoKCJJ3+vgEAAKBxEUCage7du2vw4ME1brvrrrsUGBiowsLCM77eMAzNmTNHXbp0kdlsVpcuXfToo486t+fm5mrMmDEymUyKi4vThg0bXF7/wgsvqEOHDgoLC9MTTzwhwzCc27Zv367+/fvLZDJp2LBhOnz4sHNbaWmp4uPjFRwcrNjYWC1btsxlv4sXL1Z0dLQsFoumT5/u8oF+zJgx6tixo0JCQjR48GB98803tXmrdOjQIfn4+MhsNstsNqtz58567rnnnNu3bt2qDh06KDc317lu4cKFGjhwoDIzMxUeHq7vv//eua2iokIXX3yx/vGPfzjX+fj41KoWAAAA1B0BxMM2b96s3Nxcff/99/r5559dtpWVlenf//63TCaTPvjggzPu47333tPKlSu1adMmORwOffnllxo4cKBz+4wZMxQVFaW8vDwtWLBAEydOVEFBgSTp448/1sKFC7V161bt3r1ba9as0bvvvivp9MXzEyZM0COPPKL8/HwNGTJEU6dOde43ISFB+fn5yszM1PLly/XAAw9o3759kqSdO3fqscce04cffqiMjAwdOnRIc+fOdb72//v//j/98ssvstls+stf/qKbb77ZJficTUBAgBwOhxwOh7766iu9/fbbWr9+vSRp8ODBmjRpkv74xz9KkrKysvSXv/xFixYtUufOnTVnzhzde++9qqiokCS99tprCgkJ0fTp02t1bAAAADQMAcTDkpKSNGHCBF1zzTVKSkpy2bZ69WqFhYVp5syZ1bb92vbt2zVmzBh16dJFkhQbG+sMCg6HQ6tWrdLs2bNlMpk0fvx49e3bV6tXr5YkLVmyRA8++KC6deumyMhIzZw5U0uXLpUkbdy4UWaz2dmFefbZZ/Xtt986uyBLlixRQkKCLBaLhg4dqnHjxmn58uWSpPfff1+TJ0/WoEGDFBISomeeeca5X0nq06eP/Pz8ZBiG2rRpo5ycHJWUlNT5/evatauGDh2qPXv2ONfNnz9fX3zxhT777DM9/PDDmjp1qjOQPfDAAwoICNDrr7+ujIwMPf/881q0aBFdDwAAADchgHjQyZMnlZycrMmTJ2vy5MnVQsbSpUs1adIk3Xbbbdq0aZOOHj1a434GDx6sRYsW6ZVXXtH333/v8pyR/fv3KyQkRJGRkc51/fv31+7duyVJaWlp6tevX622tWvXTt27d1daWpoKCgqUnZ1d69f2799fBw8eVGlpqXPdjTfeqMDAQN144436wx/+oHbt2tX+zft/0tPTtXnzZl166aXOdRaLRa+++qpuu+02bd26VXPmzHFu8/Hx0aJFizR79mzdeeedeuSRR3T++efX+bgAAACoHwKIB61bt06VlZW69tprdfPNN+vQoUPavn27JCk/P19r167V5MmT1a1bNw0YMKDaNRZVpk2bphdffFEpKSm6/PLLFRkZ6bymweFwyGKxuIy3WCxyOBw1bj/btl9vdzgc8vX1dbm4/lz7rVpfZc2aNSoqKtIHH3ygAQMG1Pp9Ky8vV2hoqCwWi3r06KErrrjCJYBI0qWXXiqbzaYxY8YoODjYZVufPn109913KyMjQ08++WStjwsAAICGI4B40NKlSzVhwgT5+/vLarVq5MiRzi5IcnKyYmNjnR/Ma+qQ/Nqdd96pjRs3qrCwUAkJCfr973+v3bt3y2w2y263u4y12+0ym82SVG372bb9ervZbFZFRYXLtKlz7bdq/a+1bdtWt9xyi15++WWXaVRnExAQoMLCQtntduXm5iovL09PPPGEy5gZM2Zo2rRpWrFihdLS0qrto3fv3urevbvatm1bq2MCAACgcRBAPKSoqEgpKSlasWKFIiIiFBERoY0bN2r58uWqqKhQUlKSMjIynNuef/55paamOqc4nUlAQIAefPBBWa1W7dmzRz179pTNZlN2drZzTGpqqvr06SPp9AfxnTt31mpbcXGx0tPT1bt3b1mtVkVERNT6tampqeratavzFre/derUKR08eLC2b59T+/btdfPNN2vdunXOdcnJydq7d6/eeOMNPf3007r//vtrfYE7AAAAmhYBxENWrlyp9u3ba+/evdqxY4d27NihtLQ0lZWV6Z133tHmzZv13//+12XbiBEjauyCvPfee1q7dq2Ki4tVUVGhpUuXym636+KLL5bZbNa4ceOUkJCg0tJSpaSkaNeuXRo7dqwkKT4+XgsXLtTBgweVnZ2tV155RfHx8ZKk4cOHy+FwaPHixSovL9fcuXM1aNAg58Xu8fHxmjNnjoqKirRlyxalpKRo8uTJkqTbb79dycnJ+v7772Wz2TRv3jznfg8fPqw1a9aorKxM5eXlev3113X06FGXO3fVVmFhoVatWqVevXpJkmw2mx599FEtXLhQgYGB+uMf/yibzea8sxcAAAA8zEC92Ww2Q5Jhs9nOOu7FF180Jk2a5LLuuuuuM/76179WG/vQQw8Z/v7+xvDhw6tt++CDD4wuXboYlZWVRu/evY2lS5cahmEY//73v40hQ4YYISEhhsViMQYMGGD85z//cb7u2LFjxujRo42goCCjZ8+exqeffuqy3+eff94IDw83QkNDjccff9yorKx0btu2bZvRr18/IzAw0LjyyiuNQ4cOObeVlJQYt99+u9GuXTsjOjraSEpKctnvu+++a0RFRRlms9m48847jbKyMsMwDOPQoUPGkCFDjODgYCM0NNS44oorjI0bNzpfN2/ePOP66693fn399dcb8+bNMwzDMA4ePGhIMtq1a2e0a9fOCAsLMyZMmGD88ssvhmEYxn333WfEx8e71LF582ajQ4cORm5urktto0aNqvYeVxk4cKDLewgAAOANavv51JN8DIO5KfVlt9sVEhIim81W7WLtX3vppZe0fft2rVixwo3VoSEGDRqkv/zlLxo/frynSwEAAKi12n4+9SSmYAEAAABwGwII8Bs0BQEAAJoOAcQN2rZtW6+nfMMzqh6WyC16AQAAGp/XBpDc3FyNGTNGJpNJcXFx2rBhQ43jSktLFR8fr+DgYMXGxro8zG/Lli268MILFRoaqo4dO+rOO+90eVBeY+nbt6+ysrJ04MCBRt83Gt9XX30l6fT3DQAAAI3Lz9MF1NeMGTMUFRWlvLw8rV+/XhMnTlR6erqsVqvLuISEBOXn5yszM1O7du3SDTfcoIEDB+r8889Xjx499Mknn6hz584qKSnRfffdpzlz5mjBggWNWuvll1+uqKgoPfLII5o2bZp69OghX1/fRj0GGu7UqVNKTU3Vu+++q8GDBys2NtbTJQEAALQ4XnkXLIfDofDwcB06dEiRkZGSpKuuukr33HOPpk2b5jI2MjJSH374oQYPHixJzgDw7LPPuowrLi7WAw88oLKyMiUnJ9eqjrrcZSA7O1vz5s3T1q1bVVlZWdtThZsFBgbqmmuu0VNPPSWTyeTpcgAAAOrEG+6C5ZUdkP379yskJMQZPiSpf//+1Z4SXlBQoOzsbPXr189l3LZt25xfHzlyRBdeeKFsNpvMZrM++uijMx63vLxc5eXlzq/tdnuta46IiNDf//53ORwO5eXlEUKaIT8/P3Xs2FGBgYGeLgUAAKDF8soA4nA4qiU6i8WiwsLCauN8fX1dfpNtsVhcrvOIjY1VYWGhjh07prfeessl1PzW/Pnz9dxzzzWodrPZLLPZ3KB9AAAAAN7KKy9CN5vN1boPdru92gd7s9msiooKlztQ1TROkjp27KjRo0dXm8L1a7NmzZLNZnMuGRkZDTwTAAAAoHXxygDSs2dP2Ww2ZWdnO9elpqaqT58+LuOsVqsiIiK0c+fOs46rUllZqfT09DMeNyAgQBaLxWUBAAAAUHteGUDMZrPGjRunhIQElZaWKiUlRbt27dLYsWOrjY2Pj9ecOXNUVFSkLVu2KCUlRZMnT5Ykffzxx9q7d68Mw1BWVpaeeeYZXX311e4+HQAAAKDV8MoAIkmJiYnKyMhQeHi4Zs6cqeTkZFmtViUlJbl0OGbPnu28YH3ixIlKTExUXFycJCknJ0ejR4+W2WzWwIEDFR0drYULF3rqlAAAAIAWzytvw9tceMNtzgAAANB6eMPnU6/tgAAAAADwPgQQAAAAAG5DAAEAAADgNgQQAAAAAG5DAAEAoJ4yMjL0xhtvqLi42NOlAIDX8PN0AQAAeKtp06Zp48aNOnLkiBYsWODpcgDAK9ABAQCgHjIzM7Vx40ZZLBYlJyeLu9oDQO0QQAAAqIdPP/1UPj4++vvf/65Dhw7p8OHDni4JALwCAQQAgHr44Ycf1LNnT1199dWSpB9//NHDFQGAdyCAAABQDz/88IMuuugiRUdHKyQkRDt37vR0SQDgFQggAADUkWEYSk1N1cUXXywfHx/17dtXaWlpni4LALwCAQQAgDrKycmR3W5Xr169JEndu3fXoUOHPFsUAHgJAggAAHV04MABSaeDhySdd955BBAAqCUCCAAAdVQVQLp27SpJ6tKli3755ReVl5d7siwA8AoEEAAA6ujAgQPq1KmT2rVrJ+l0B0Q6/WR0AMDZEUAAAKijAwcOqFu3bs6vo6OjJUm//PKLp0oCAK9BAAEAoI5+G0AiIiIkSdnZ2Z4qCQC8BgEEAIA6ysjIUExMjPPr4OBgBQYGEkAAoBYIIAAA1IFhGMrOzlZkZKRznY+PjyIiIgggAFALBBAAAOrAbrerrKzMOe2qCgEEAGqHAAIAQB1UhYxfd0AkAggA1BYBBACAOqgKGXRAAKB+CCAAANTBmQJIx44dlZOT44mSAMCrEEAAAKiD7OxsmUwmmc1ml/Xh4eE6fvy4DMPwUGUA4B0IIAAA1EFWVpYiIiLk4+Pjsj48PFzl5eUqKSnxUGUA4B0IIAAA1EF2dna16VfS6QAiScePH3d3SQDgVQggAADUwZkCSFhYmCQpPz/f3SUBgFfx2gCSm5urMWPGyGQyKS4uThs2bKhxXGlpqeLj4xUcHKzY2FgtW7bMuW3NmjW67LLLFBISoujoaD333HPuKh8A4KXogABAw/h5uoD6mjFjhqKiopSXl6f169dr4sSJSk9Pl9VqdRmXkJCg/Px8ZWZmateuXbrhhhs0cOBAnX/++SoqKtLcuXN1xRVXKCcnR6NGjVK3bt00depUD50VAKC5I4AAQMN4ZQfE4XBo1apVmj17tkwmk8aPH6++fftq9erV1cYuWbJECQkJslgsGjp0qMaNG6fly5dLkqZMmaIRI0YoICBAsbGxmjBhgrZt2+bu0wEAeImKigrl5ubWGEBCQkLk6+tLAAGAc/DKALJ//36FhIS4PIW2f//+2r17t8u4goICZWdnq1+/fmcdV2Xz5s3q06fPGY9bXl4uu93usgAAWo/c3FxVVlbWGEB8fHwUFhZGAAGAc/DKAOJwOGSxWFzWWSwWORyOauN8fX1lMpnOOk6S3nrrLWVlZenOO+8843Hnz5+vkJAQ5xITE9PAMwEAeJMzPYSwStWzQAAAZ+aVAcRsNlfrPtjt9moPhTKbzaqoqHC5J3tN49asWaPZs2drzZo1CgoKOuNxZ82aJZvN5lwyMjIa4WwAAN6CAAIADeeVAaRnz56y2WzOHwSSlJqaWm36lNVqVUREhHbu3HnGcZs2bdLdd9+tlJQU9ejR46zHDQgIkMVicVkAAK1H1c+djh071rg9LCyM2/ACwDl4ZQAxm80aN26cEhISVFpaqpSUFO3atUtjx46tNjY+Pl5z5sxRUVGRtmzZopSUFE2ePFmStGPHDt16661KSkrSwIED3X0aAAAvk52drbCwMAUEBNS4PTQ0VDabzc1VAYB38coAIkmJiYnKyMhQeHi4Zs6cqeTkZFmtViUlJbl0OGbPnu28YH3ixIlKTExUXFycJOm1117T8ePHNX78eJnNZpnNZo0ePdpTpwQAaObOdAveKgQQADg3H8MwDE8X4a3sdrtCQkJks9mYjgUArcBtt92m3NzcMz789plnntF7772nI0eOuLkyADjNGz6fem0HBAAAd6MDAgANRwABAKCWzhVAQkJCZLfbVVFR4caqAMC7EEAAAKil2nRAJPGgWgA4CwIIAAC1UFpaKpvNds4OiCSmYQHAWRBAAACohZycHElnfgih9H8dkMLCQjdUBADeiQACAEAtnOsp6BIdEACoDQIIAAC1UJsAQgcEAM6NAAIAQC1kZ2fL19dX4eHhZxxDBwQAzo0AAgBALWRnZ6tTp05q0+bMPzoDAgIUGBhIBwQAzoIAAgBALWRlZZ11+lUVHkYIAGdHAAEAoBbO9QyQKiEhIXRAAOAsCCAAANRCdna2IiMjzzkuNDSUAAIAZ0EAAQCgFurSAWEKFgCcGQEEAIBzMAyj1gGEDggAnB0BBACAcygsLNSJEyfogABAIyCAAABwDrV5CGEVi8WioqKipi4JALwWAQQAgHOoSwAJDg6W3W5v6pIAwGsRQAAAOIeqANKpU6dzjqUDAgBnRwABAOAcsrKy1K5dOwUHB59zbHBwsBwOhyorK91QGQB4HwIIAADnkJWVVatngEinOyCS5HA4mrIkAPBaBBAAAM6hPgGE60AAoGYEEAAAzqEuAaRqmhYBBABqRgABAOAc6tMB4UJ0AKgZAQQAgHOgAwIAjYcAAgDAWZSWlqqwsLBWzwCR6IAAwLkQQAAAOIuqZ4DQAQGAxkEAAQDgLLKysiTVPoD4+/srMDCQAAIAZ+C1ASQ3N1djxoyRyWRSXFycNmzYUOO40tJSxcfHKzg4WLGxsVq2bJlzW1pamq677jqFhIToggsucFfpAAAvUtcAIvE0dAA4G68NIDNmzFBUVJTy8vK0YMECTZw4UQUFBdXGJSQkKD8/X5mZmVq+fLkeeOAB7du3T9Lp31Ldfvvtevnll91dPgDAS2RlZcnf31/h4eG1fk1wcDAdEAA4A68MIA6HQ6tWrdLs2bNlMpk0fvx49e3bV6tXr642dsmSJUpISJDFYtHQoUM1btw4LV++XJLUs2dPTZ8+XT169HD3KQAAvER2drYiIiLk4+NT69fQAQGAM/PzdAH1sX//foWEhLi0w/v376/du3e7jCsoKFB2drb69evnMm7btm31Om55ebnKy8udX/PbLQBo+epyC94qdEAA4My8tgNSdZvDKhaLRQ6Ho9o4X19fmUyms46rrfnz5yskJMS5xMTE1Gs/AADvUZ8AYrFYCCAAcAZeGUDMZnO1f9jtdrvMZnO1cRUVFSopKTnruNqaNWuWbDabc8nIyKjXfgAA3iMjI0PR0dF1eg1TsADgzLwygPTs2VM2m815b3ZJSk1NVZ8+fVzGWa1WRUREaOfOnWcdV1sBAQGyWCwuCwCgZcvIyKhzx5spWABwZl4ZQMxms8aNG6eEhASVlpYqJSVFu3bt0tixY6uNjY+P15w5c1RUVKQtW7YoJSVFkydPliQZhqGysjKdOHHC5c8AAEinu+Y2m02xsbF1eh0dEAA4M68MIJKUmJiojIwMhYeHa+bMmUpOTpbValVSUpJLh2P27NnOC9YnTpyoxMRExcXFSZIOHz6soKAgjRo1Svv27VNQUJBGjhzpqVMCADQzVVNt6YAAQOPxyrtgSVKHDh308ccfV1t/xx136I477nB+HRQUpKSkpBr3cd5558kwjCarEQDg3eobQOiAAMCZeW0HBACAppaRkSEfHx9FRUXV6XUWi0UlJSU6depUE1UGAN6LAAIAwBkcOXJEUVFR8vf3r9PrgoODJYkuCADUgAACAMAZ1OcOWJKcd0kkgABAdQQQAADOoL4BpKoDwoXoAFAdAQQAgDM4dOiQunTpUufX0QEBgDMjgAAAUIOTJ0/q8OHD6t69e51fWxVA6IAAQHUEEAAAanDkyBFVVFTUK4AwBQsAzowAAgBADdLT0yVJPXr0qPNruQsWAJwZAQQAgBqkp6fLz8+vXheh+/r6ymQy0QEBgBoQQAAAqMHPP/+s8847T35+fvV6PU9DB4CaEUAAAKhBenp6vaZfVQkODqYDAgA1IIAAAFCDvXv3qmfPnvV+vcViIYAAQA0IIAAA/EZ5ebn279+vvn371nsfTMECgJoRQAAA+I29e/eqoqKiQQGEKVgAUDMCCAAAv7Fr1y5JUu/eveu9DzogAFAzAggAAL+xe/duRUdHKzQ0tN77sFgsstlsjVcUALQQBBAAAH5j586d6tOnT4P2QQcEAGpGAAEA4FcMw9D27ds1cODABu2HDggA1IwAAgDAr2RkZCg7O1uDBw9u0H5CQkJkt9tlGEYjVQYALQMBBACAX9m6dask6dJLL23QfiwWi06ePKny8vLGKAsAWgwCCAAAv/LNN98oNjZWERERDdqPxWKRJKZhAcBvEEAAAPiVTz/9VNdcc02D9xMSEiJJPAsEAH6DAAIAwP+TlZWlXbt2aeTIkQ3eFx0Q71VWVqbc3FyVlpZ6uhSgRfLzdAEAADQXn3zyiXx8fDRixIgG74sOiHcpLCzUq6++quXLl2vv3r3O9REREerdu7cGDBigwYMHa8iQIYqOjvZgpYD3I4AAAPD/LFu2TMOGDVPHjh0bvC86IK7Ky8v11VdfycfHR1dccYXatm3r6ZKcPv74Y02bNk2lpaWaMmWKnnzySYWGhqqoqEg///yz0tLS9K9//UsvvfSSJCkqKkpDhw7VTTfdpLFjxzrDJoDaIYAAACApMzNTn3/+ud58881G2V9VAKEDIm3atEm33367MjMzJZ3uKixatEhjx471cGXSm2++qQceeEA33nijFi1apMjIyDOOzcrK0tatW7V161Z98cUXmjp1qgICAjRt2jTNnDlT559/vhsrB7wX14AAACDptddek9ls1qRJkxplf23btlVgYGCrDyDbtm3TyJEj1bNnT/3www/64YcfNGjQIN10001avHixR2tbsmSJHnjgAT388MNatWrVWcOHJEVGRmr8+PGaP3++tmzZooyMDCUkJGj16tXq1auXZsyYoePHj7upesB7EUAAAK1eZmamFi5cqAceeKBRp9O09qeh2+123XLLLbr44ou1du1aXXTRRbrooou0atUq3XPPPbrnnnv03//+1yO1rVy5Ur/73e90991369VXX1WbNnX/SBQdHa1Zs2bp0KFDevHFF7V06VL17NlTb7zxhk6dOtUEVQMtg9cGkNzcXI0ZM0Ymk0lxcXHasGFDjeNKS0sVHx+v4OBgxcbGatmyZS7bFy9erOjoaFksFk2fPl0nTpxwR/kAgGaioqJC9957r9q1a6cnn3yyUfdd9TT01mrOnDnKz8/X8uXLFRAQ4Fzfpk0bJSYmatiwYZo0aZJycnLcWtfatWt12223adKkSXrrrbfqFT5+LSAgQI899pj27dunCRMm6OGHH9bAgQO1adOmRqrYvYqLi/Xvf/9b99xzj6688kpdeOGFGjp0qO69916tXLmSh2uiwbw2gMyYMUNRUVHKy8vTggULNHHiRBUUFFQbl5CQoPz8fGVmZmr58uV64IEHtG/fPknSzp079dhjj+nDDz9URkaGDh06pLlz57r7VAAAHlJaWqrp06dr7dq1evfdd2W1Wht1/625A7J//369+uqrevrpp9WlS5dq2/38/LR8+XIZhqGHHnrIbXV99tlnGj9+vK6//nr985//lK+vb6Ptu1OnTvrf//1fbd26VUFBQc6A9e2339Z6H4Zh6MiRI/roo4/0wgsvKD4+Xtddd50GDx6syy+/XGPGjNHDDz+sN998U998841KSkoapfb8/Hz985//1M0336z27dvr1ltv1datW9WlSxcNHz5cPXr00ObNm3XLLbcoOjpa8+fPV1FRUaMcG62Pj2EYhqeLqCuHw6Hw8HAdOnTIOV/zqquu0j333KNp06a5jI2MjNSHH36owYMHS5KmTZumHj166Nlnn9WsWbNUWFiohQsXSpI+//xz3XPPPTpw4ECt6rDb7QoJCZHNZnNebAi0BA35Z6G+r+V1vM5drzt+/LgOHjyojRs36p133tHx48f1j3/8Q7fffnu99nk2I0aMUMeOHat131uDe++9V6tXr9bBgwcVGBh4xnHJycmaPHmy/vWvf+nW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a+bMmUpOTpbValVSUpKzwyFJs2fPVkhIiCIjIzVx4kQlJiYqLi5OktSvXz+9/PLLGjt2rKKjoxUTE6M///nPnjolAEALY7FYZLfbm9WNJEpKSrR69Wo99dRTGj58uDp16qS2bdsqICBAZrNZV1xxhV566aV6PdE7KSlJmZmZevzxx+tVW+/evTVr1iy98MILLjMUfu2ll17S6tWr9c9//lPdunWr13EAeJZX3gWrueA2vACAs1m2bJluv/12FRUVnfH6QncoLS3VypUr9cEHH2jdunUqLS1V586dddlll6lfv37q3Lmz/Pz8lJubq2+++UZr1qyRyWTSCy+8oHvvvbdWXZHKykr16dNHcXFx+vDDD+tda3l5uQYNGqSSkhJt3bpV7du3d27797//rUmTJunJJ5/U888/X+9jAC2ZN3w+9copWAAAeIOQkBBJp2+H6YkAsmfPHiUmJmrp0qUqLCzUkCFD9Ne//lU33XSTczZATY4dO6ann35a999/vzZu3Kh//OMf57xtbUpKin766Se98847Dao5ICBAq1ev1uDBg3XllVfq/fffV58+ffTWW2/pT3/6kyZOnHjG6VkAvAMdkAbwhoQJAPCcr776SldeeaXS0tLUq1cvtx33hx9+0Lx587Ry5Up17NhR06dP1913313n550kJydr+vTpuuSSS5SSknLGn3WnTp1S//791alTJ33++eeNcQrat2+fxo8frz179qhNmzaqrKzUgw8+qP/5n/9R27ZtG+UYQEvkDZ9P6YAAANBEqjog7roQPSsrS0888YSWLl2q7t276+2339bUqVPr/YF90qRJ6ty5s8aMGaMRI0bok08+cZkSVWXRokVKS0vTkiVLGnoKTueff75+/PFHffzxx/rll1901VVXqXfv3o22fwCeQwABAKCJVP32salvxWsYht544w3NmjVLgYGBWrRokaZPn94oD1q8/PLLtXHjRo0aNUpDhw7VJ598ou7duzu37927V48//rjuvfdeDRgwoMHH+zU/Pz/n8zwAtBxeexcsAACaO3d0QHJzc3XjjTfq4YcfVnx8vPbt26ff//73jfqU94suukjffPONJOmyyy7TsmXLdPLkSW3fvl3XXXedYmNj9corrzTa8QC0bAQQAACaSHBwsKSm64CkpaXpkksu0fbt27VmzRotXLhQVqu1SY7VrVs3bd68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gLojgHjY5s2blZubq++//14///yzy7aysjL9+9//lslk0gcffHDGfbz33ntauXKlNm3aJIfDoS+//FIDBw50bp8xY4aioqKUl5enBQsWaOLEiSooKJAkffzxx1q4cKG2bt2q3bt3a82aNXr33Xclnb54fsKECXrkkUeUn5+vIUOGaOrUqc79JiQkKD8/X5mZmVq+fLkeeOAB7du3T5K0c+dOPfbYY/rwww+VkZGhQ4cOae7cuS51FxcXa+7cuerTp0+d3rOAgAA5HA45HA599dVXevvtt7V+/XpJ0uDBgzVp0iT98Y9/lCRlZWXpL3/5ixYtWqTOnTtrzpw5uvfee1VRUSFJeu211xQSEqLp06fXqQYAAADUDwHEw5KSkjRhwgRdc801SkpKctm2evVqhYWFaebMmdW2/dr27ds1ZswYdenSRZIUGxvrDAoOh0OrVq3S7NmzZTKZNH78ePXt21erV6+WJC1ZskQPPvigunXrpsjISM2cOVNLly6VJG3cuFFms9nZhXn22Wf17bffOrsgS5YsUUJCgiwWi4YOHapx48Y5Oxnvv/++Jk+erEGDBikkJETPPPOMc79V5syZo7vvvlvt27ev9/vXtWtXDR06VHv27HGumz9/vr744gt99tlnevjhhzV16lRnIHvggQcUEBCg119/XRkZGXr++ee1aNEiuh4AAABuQgDxoJMnTyo5OVmTJ0/W5MmTq4WMpUuXatKkSbrtttu0adMmHT16tMb9DB48WIsWLdIrr7yi77//3uU5I/v371dISIgiIyOd6/r376/du3dLktLS0tSvX79abWvXrp26d++utLQ0FRQUKDs7u9av7d+/vw4ePKjS0lJJ0r59+/TJJ5/ooYceqtub9hvp6enavHmzLr30Uuc6i8WiV199Vbfddpu2bt2qOXPmOLf5+Pho0aJFmj17tu6880498sgjOv/88xtUAwAAAGqPAOJB69atU2Vlpa699lrdfPPNOnTokLZv3y5Jys/P19q1azV58mR169ZNAwYMqHaNRZVp06bpxRdfVEpKii6//HJFRkY6r2lwOByyWCwu4y0WixwOR43bz7bt19sdDod8fX1dLq4/136r1kvSI488ogULFsjf37+O79rpqWGhoaGyWCzq0aOHrrjiCpcAIkmXXnqpbDabxowZo+DgYJdtffr00d13362MjAw9+eSTdT4+AAAA6o8A4kFLly7VhAkT5O/vL6vVqpEjRzq7IMnJyYqNjdWAAQMkqcYOya/deeed2rhxowoLC5WQkKDf//732r17t8xms+x2u8tYu90us9ksSdW2n23br7ebzWZVVFSopKSk1vutWr9q1Sr5+fnp+uuvr9sb9v8EBASosLBQdrtdubm5ysvL0xNPPOEyZsaMGZo2bZpWrFihtLS0avvo3bu3unfvrrZt29arBgAAANQPAcRDioqKlJKSohUrVigiIkIRERHauHGjli9froqKCiUlJSkjI8O57fnnn1dqaqpzitOZBAQE6MEHH5TVatWePXvUs2dP2Ww2ZWdnO8ekpqY6L/zu3bu3du7cWattxcXFSk9PV+/evWW1WhUREVHr16ampqpr164KCgrSF198oU2bNjnPbfPmzbr//vs1e/bsOr+P7du3180336x169Y51yUnJ2vv3r1644039PTTT+v+++93ubMXAAAAPIcA4iErV65U+/bttXfvXu3YsUM7duxQWlqaysrK9M4772jz5s3673//67JtxIgRNXZB3nvvPa1du1bFxcWqqKjQ0qVLZbfbdfHFF8tsNmvcuHFKSEhQaWmpUlJStGvXLo0dO1aSFB8fr4ULF+rgwYPKzs7WK6+8ovj4eEnS8OHD5XA4tHjxYpWXl2vu3LkaNGiQ82L3+Ph4zZkzR0VFRdqyZYtSUlI0efJkSdLtt9+u5ORkff/997LZbJo3b55zv3PmzHE570GDBmnBggXOO1fVRWFhoVatWqVevXpJkmw2mx599FEtXLhQgYGB+uMf/yibzea8sxcAAAA8iwDiIUlJSbr77rsVGRnp7ARU3b3qoYce0lVXXaXBgwc7t0VEROiBBx7Q+++/L8Mw1KdPH2cYCQ4O1nPPPafOnTsrLCxM//M//6Pk5GR1795dkpSYmKiMjAyFh4dr5syZSk5OltVqlSSNGTNG9913ny655BL16tVLN9xwg/OWtAEBAVq5cqVeeeUVhYaG6uuvv9aSJUuc5zB79mznBe4TJ05UYmKi4uLiJEn9+vXTyy+/rLFjxyo6OloxMTH685//7Kz31+fVtm1bhYSEOK/VeP755zV69GjncUaPHq3nn3/e+XV5eblzGlj37t0VHBysv/3tb5KkJ598UiNGjNC1114rSfLz89Obb76pp556Snl5eY3/jQQAAECd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gTIyMpSenq758+e71f3ll1/K6XTK6XTqlVdeqff3zGQyuT737bff6tVXX9W6deskSYMGDdJtt92mP/zhD5Kk48eP6/HHH9eSJUvUsWNHzZs3T/fee68qKiokSS+++KJsNptmzJhR7/0DAACg8QggXrZ8+XJNmjRJI0eO1PLly922rV27VhEREXr44YerbTvTtm3bNHbsWMXFxUmSYmNjXUHB6XTqww8/1Ny5c2U2mzVhwgT16dNHa9eulSQtXbpUv/3tb3XxxRcrOjpaDz/8sJYtWyZJ2rhxoywWi2sU5sknn9T27dtdoyBLly5VUlKSrFarhgwZovHjx2vlypWSpLfffltTpkzRwIEDZbPZ9MQTT7j6bUpdu3bVkCFDtGfPHte6hQsXasOGDfriiy/0X//1X5o6daorkN13330ymUx6+eWXlZGRoaefflpLlixh1AMAAMBDCCBedPr0aa1atUpTpkzRlClTqoWMZcuW6bbbbtPtt9+ur7/+WkePHq2xn0GDBmnJkiV6/vnntWPHDrfnjOzfv182m03R0dGudf369VNqaqokaffu3erbt2+9toWEhKhbt27avXu38vPzlZWVVe/P9uvXT4cOHVJJSYlr3YQJE3TRRRdp4sSJblO7GiItLU2bNm3SlVde6VpntVr1wgsv6Pbbb9eWLVs0b9481zY/Pz8tWbJEc+fO1fTp03X//ferZ8+ejdo3AAAAGo4A4kWfffaZKisrdd1112nixIlKT0/Xtm3bJEl5eXn69NNPNWXKFF188cXq379/tWssqkybNk3PPfec1qxZo6FDhyo6Otp1TYPT6ZTVanVrb7Va5XQ6a9xe17YztzudTvn7+7tdXH+ufqvWS7+MkKSnp2v//v2KjY3VhAkT3K49qUtZWZnCwsJktVrVvXt3XX311W4BRJKuvPJK2e12jR07VqGhoW7bevfurXvuuUcZGRn67//+73rtEwAAAE2DAOJFy5Yt06RJkxQYGKjw8HCNHj3aNQqyatUqxcbGqn///pJU4wjJmaZPn66NGzeqoKBASUlJ+vWvf63U1FRZLBY5HA63tg6HQxaLRZKqba9r25nbLRaLKioqVFxcXO9+q9ZL0pAhQxQUFCSr1arnn39e+/fv16FDh+r1fTOZTCooKJDD4VB2drZycnL06KOPurWZPXu2pk2bpnfeeUe7d++u1kdCQoK6deumtm3b1mufAAAAaBoEEC8pLCzUmjVr9M477ygqKkpRUVHauHGjVq5cqYqKCi1fvlwZGRmubU8//bSSk5NdU5xqYzKZ9Nvf/lbh4eHas2ePevToIbvdrqysLFeb5ORk9e7dW9IvJ+IpKSn12lZUVKS0tDQlJCQoPDxcUVFR9f5scnKyunbt6rrF7Zn8/PwafQ1Gu3btNHHiRH322WeudatWrdLevXv197//XX/84x81a9aseo+uAAAAoHkRQLxk9erVateunfbu3audO3dq586d2r17t0pLS/Xaa69p06ZN+uqrr9y2jRo1qsZRkLfeekuffvqpioqKVFFRoWXLlsnhcOjyyy+XxWLR+PHjlZSUpJKSEq1Zs0a7du3SuHHjJEmJiYlavHixDh06pKysLD3//PNKTEyUJI0YMUJOp1NvvvmmysrKNH/+fA0cONB1sXtiYqLmzZunwsJCbd68WWvWrNGUKVMkSXfeeadWrVqlHTt2yG63a8GCBa5+jxw5ou+//16nT59WUVGRHnnkEcXFxalLly4N/j4WFBToww8/VK9evSRJdrtdDzzwgBYvXqygoCD94Q9/kN1ud93ZCwAAAF5moNHsdrshybDb7XW2e+6554zbbrvNbd31119v/PnPf67W9ne/+50RGBhojBgxotq29957z4iLizMqKyuNhIQEY9myZYZhGMb7779vDB482LDZbIbVajX69+9v/Pvf/3Z97uTJk8aNN95oBAcHGz169DA+//xzt36ffvppIzIy0ggLCzMeeeQRo7Ky0rVt69atRt++fY2goCDjmmuuMdLT013biouLjTvvvNMICQkxOnXqZCxfvtyt3zfeeMOIiYkxLBaLMX36dKO0tNQwDMPYtWuX0adPH8NsNhvt2rUzxo8fbxw4cMD1uQULFhg33HCD6/0NN9xgLFiwwDAMwzh06JAhyQgJCTFCQkKMiIgIY9KkScaxY8cMwzCM3/zmN0ZiYqJbHZs2bTLat29vZGdnu9U2ZsyYat/jKgMGDHD7HgIAAPiC+p6fepOfYTA3pbEcDodsNpvsdnu1i7XP9Je//EXbtm3TO++848HqcD4GDhyoxx9/XBMmTPB2KQAAAPVW3/NTb2IKFgAAAACPIYAAZ2FQEAAAoPkQQDygbdu2brerRctW9bBEbtELAADQ9AggHtCnTx8dP35cBw8e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CAhwfa36MzlTTb9QO3vdudrU9rq+7Zrq9bkCVkvgkwHEYrG4Rh+qOBwOVyI+s11FRYWKi4tdIeTMdmf3U/X67H6qzJkzRw8++KBb+86dO+v7779vsUNcwIWEAFI3wzD0+eef68knn9SWLVt0zTXX6JNPPtGYMWNqPSEICAhQ9+7d1b17d02YMEGSdPr0aX333XdasWKFFi9erGeffVa33nqrHnroIV155ZV17v+ll17SQw89pCFDhujdd99Vhw4dmuNQJf0SOmr7eX6+OnTooN///vf6/e9/r4KCAn3//ff6+eefdeTIEdntdlVUVKiyslIhISFu08FCQkJqPFmsOqE6+8SuphM96f9ONs7+Wtc2T7Wt6ySstnUNXd/Us8erpuhVVFScc6lvu7Pbl5eXV/taXl6u4OBg19+PM0NGRESE63VYWJgCAwOb9Jhbug4dOrgCvyTl5uZqz549OnLkiPLy8lRZWak2bdooIiKi2vfKZrOd17Vhvq5qClZL5pMBpEePHrLb7crKylJUVJQkKTk5udotPcPDwxUVFaWUlBTXb8mSk5PVu3dvSVJCQoJSUlJc7ZOTk9W1a9caRz8kuYYiAbRMBJCaHT58WB999JH+8Y9/KCUlRYMHD9bnn3+uUaNGNWo0IDAwUCNGjNCIESP0/PPP680339Tf/vY3DRo0SEOGDNEf/vAHTZgwwe2C0v379+vBBx/URx99pAceeED/8z//02pOqMLCwnTjjTfqxhtv9HYpQKsVGRmpq6++2ttloIn45EXokjR58mRFRETohRde0Oeff65f/epXNd4F65FHHtGePXu0YsUKpaam6oYbbtCWLVsUHx+vlJQUjRgxQp9//rm6deumSZMmaejQofW+C5YvXOQDXEheeuklPfLII3XOffYlhmEoJydHaWlpOnjwoE6ePKm8vDzl5ubK4XBU+y1r1VzsqnnZTqdT+/fv17Fjx+Tv76/x48frt7/9baODR10qKir00Ucf6W9/+5u++uorhYeHa+jQoYqIiNCBAwf0/fffq1OnTnrppZd08803N+m+AQD/xxfOT31yBESSFi1apOnTpysyMlKdOnXSqlWrFB4eruXLl+vpp592XZA+d+5czZw5U9HR0QoPD9eiRYtcd9/p27ev/vrXv2rcuHFyOBy65ZZb9Kc//cmbhwXgPFgsFpWVlen06dM+99v1oqIi/fTTT/rxxx/1448/aufOnfr555/dRnRCQkJc0w2sVqtrLnPV9QZnTtfx9/dXVFSUrr76al1++eUaNWqUwsLCmq1+f39/3Xzzzbr55pu1c+dOffDBB9qyZYv279+vTp066bXXXtPtt99e6wgzAODC4bMjIC2BLyRM4ELy7rvv6rbbblN+fn6znmyfr1OnTunHH3/Upk2btH37dv3444/au3evKisrFRAQoN69e+vyyy9XQkKCunXrpm7duuniiy9WaGiot0sHALRwvnB+6rMjIABwtqoLjp1OZ4sKIBUVFdq6das+/vhjbdy4Udu3b1dpaamCgoJ0+eWX69prr9VDDz2kyy+/XL179+ZaMwBAq0YAAdBqnBlAvK2iokIbN27UsmXL9NFHHyknJ0cREREaNWqUFi5cqCFDhuiyyy5T27ZtvV0qAAAeRQAB0Gq0hABy+PBhvfLKK1q6dKkyMzPVvXt33XvvvRo7dqwGDRpU6zODAAC4UBBAALQa3gwgmzZt0vPPP69///vfslqtuvPOOzV16lQNGjSoye84BQCALyOAAGg1vBFAduzYoccff1yffPKJ4uPj9fLLL2vatGkKCQnxWA0AAPgSAgiAVsOTASQvL0+PPvqoXnvtNcXHx+udd97RrbfeqjZt2jT7vgEA8GUEEACthtlslvTLMzWa09q1azVz5kyVlpZq0aJF+vWvf+321G8AAFA7flUHoNXw9/eX2WxWYWFhs/RfXl6uOXPmaPz48Ro0aJD27Nmj++67j/ABAEAD8L8mgFbFarXK4XA0eb+lpaW64447tHbtWj333HN66KGHuLgcAIBGIIAAaFVsNpsKCgqatM/S0lKNGzdO3377rT788EONHTu2SfsHAOBCQgAB0KrYbDbZ7fYm66+yslLTp0/Xt99+q08++UQjRoxosr4BALgQEUAAtCpNHUCSkpL07rvv6v333yd8AADQBLgIHUCrEhYW1mQBZOPGjVqwYIHmzZuniRMnNkmfAABc6AggAFqVphoBKSws1NSpUzVs2DA99thjTVAZAACQmIIFoJVpqovQ582bp9zcXH377bfy9/c//8IAAIAkRkAAtDJNMQKyb98+vfDCC5ozZ47i4uKaqDIAACARQAC0Mk0RQObOnauoqCg9/PDDTVQVAACoQgAB0KqEhYWprKxMZWVljfr8wYMHtWLFCj36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DUcA8aLPPvtMlZWVuu666zRx4kSlp6dr27ZtkqS8vDx9+umnmjJlii6++GL179+/2jUWVaZNm6bnnntOa9as0dChQxUdHe26psHpdFa7B7TVapXT6axxe13bztzudDrl7+/vdnH9ufqtWp+Zmaldu3YpPDxcmZmZeuWVVzRjxgzX9K1zKSsrU1hYmKxWq7p3766rr77aLYBI0pVXXim73a6xY8cqNDTUbVvv3r11zz33KCMjQ//93/9dr30CAACgaRBAvGjZsmWaNGmSAgMDFR4ertGjR7tGQVatWqXY2Fj1799fkmocITnT9OnTtXHjRhUUFCgpKUm//vWvlZqaKovFIofD4dbW4XDIYrFIUrXtdW07c7vFYlFFRYWKi4vr3W/V+uDgYAUGBurxxx+XyWTS0KFDNXr0aH3++ef1+r6ZTCYVFBTI4XAoOztbOTk5evTRR93azJ49W9OmTdM777yj3bt3V+sjISFB3bp1U9u2beu1TwAAADQNAoiXFBYWas2aNXrnnXcUFRWlqKgobdy4UStXrlRFRYWWL1+ujIwM17ann35aycnJrilOtTGZTPrtb3+r8PBw7dmzRz169JDdbldWVparTXJysnr37i3plxPxlJSUem0rKipSWlqaEhISFB4erqioqHp/Njk5WV27dlVwcLD69OlTre4z77zVEO3atdPEiRP12WefudatWrVKe/fu1d///nf98Y9/1KxZsxrdPwAAAJoWAcRLVq9erXbt2mnv3r3auXOndu7cqd27d6u0tFSvvfaaNm3apK+++spt26hRo2ocBXnrrbf06aefqqioSBUVFVq2bJkcDocuv/xyWSwWjR8/XklJSSopKdGaNWu0a9cujRs3TpKUmJioxYsX69ChQ8rKytLzzz+vxMRESdKIESPkdDr15ptvqqysTPPnz9fAgQNdF7snJiZq3rx5Kiws1ObNm7VmzRpNmTJFknTnnXdq1apV2rFjh+x2uxYsWODqt0ePHrriiiu0cOFClZeXa8uWLfr888913XXXNfj7WFBQoA8//FC9evWSJNntdj3wwANavHixgoKC9Ic//EF2u911Zy8AAAB4mYFGs9vthiTDbrfX2e65554zbrvtNrd1119/vfHnP/+5Wtvf/e53RmBgoDFixIhq29577z0jLi7OqKysNBISEoxly5YZhmEY77//vjF48GDD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8vJynTp1qomqAgAAvooAAqBOBw4caJIAIolpWAAAgAACoHaGYWjPnj3q1avXefVDAAEAAFUIIABqlZmZqcLCQiUkJJxXP1UBhDthAQAAAgiAWu3evVuSzjuAhISESGIEBAAAEEAA1GHPnj0KCgpSly5dzqsfpmABAIAqBBAAtUpJSdEll1wif3//8+qHAAIAAKoQQADUatu2bRo4cOB590MAAQAAVQggAGpUXFys1NRUXXHFFefdV3BwsPz8/AggAACAAAKgZjt37lRFRUWTBBA/Pz/X09ABAMCFjQACoEabNm1ScHCw+vTp0yT9hYSEMAICAAAIIABq9sUXX2jYsGEKDAxskv4sFgsBBAAAEEAAVFdaWqqvv/5a119/fZP1SQABAAASAQRADTZu3KiSkhICCAAAaHIEEADVvP3227rkkkvUt2/fJuuTAAIAACQCCICz2O12/fvf/9Ydd9whPz+/JuuXAAIAACQCCICzLF68WKdOndLMmTObtN+QkBBuwwsAAHw3gGRnZ2vs2LEym82Kj4/X+vXra2xXUlKixMREhYaGKjY2VitWrHDb/uabb6pTp06yWq2aMWOGTp065YnygRYpKytL//M//6MZM2YoJiamSftmBKT5GYahiooKb5cBAECdArxdQGPNnj1bMTExysnJ0bp16zR58mSlpaUpPDzcrV1SUpLy8vKUmZmpXbt26aabbtKAAQPUs2dPpaSk6MEHH9S6devUo0cPTZgwQfPnz9fcuXO9dFSA95SVlSkxMVGBgYFasGBBk/fvywHk6NGj+utf/6pvv/1WFRUV6tOnjyZMmKCxY8fKZDI1677tdrsOHDigvLw85efnKzc3123Jzs7WiRMndPLkSZ08eVKnT59WSEiIevbsqSuvvFITJkzQqFGjmux2ygAAnC8/wzAMbxfRUE6nU5GRkUpPT1d0dLQkadiwYZo5c6amTZvm1jY6OloffPCBBg0aJEmaNm2aunfvrieffFJz5sxRQUGBFi9eLEn68ssvNXPmTB08eLBedTgcDtlsNtntdlmt1iY8QsCzdu7cqdmzZ+uHH37Qp59+qhEjRjT5PubPn6+XX35ZWVlZTd53c/rkk0902223KSgoSP/f//f/KTAwUNu2bdPOnTsVGRmpe+65R7NmzVLXrl2bZH+GYWjdunV677339NlnnykjI8Ntu7+/vyIj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U3p6urp166apU6dq0qRJuvzyy5t8r/vu3bvr3nvv1b333ut+wnxNTY169+59xifvAgDgzwggAFq92gtxX9yKt6ioSC+88IL+/Oc/q6SkROPGjdOiRYt0ww03NPsDtqKionx+v3kAAFoaAQRAq2c2myV5twfkxIkT+r//+z/NmzdPJ06c0J133qnZs2f7fAgYAAD+jgACoNXz9hCsjz76SHfddZcOHDigmTNn6vHHH1fnzp29cmwAAAKd3z6IEEDbUdsD0tJDsCorK/Xggw/qmmuuUdeuXbVnzx698MILhA8AAJoRPSAAWj2TySSpZQPI0aNHNXHiRO3evVt//OMf9ctf/lLt2vE7GgAAmhsBBECr165dO5nNZpWWlrbI/vft26fRo0erpqZGn3zyiS699NIWOQ4AACCAAPATFotFDoej2fe7b98+XX311erYsaM2btyoLl26NPsxAADA/xBAAPiFlggghw8f1nXXXaeOHTvqww8/VMeOHZt1/wAAoC4GOAPwC80dQMrLy/WTn/xE7dq106ZNmwgfAAB4CT0gAPxCcweQOXPmKCsrS5999pni4+Obbb8AAODsCCAA/EJzBpD3339fL774ol544QVdcsklzbJPAADQMAzBAuAXmiuAVFRU6M4779R1112ne+65pxkqAwAAjUEPCAC/0FwB5I9//KOOHj2qDz74gOd8AADgA/zvC8AvNEcAOX78uBYvXqz77rtPiYmJzVQZAABoDAIIAL/QHAHk//7v/2QYhn772982U1UAAKCxCCAA/EJUVJQcDocMw2jS+8vKyrRkyRLdeeedio2NbebqAABAQxFAAPgFi8WimpoaVVRUNOn9L7/8sux2ux566KFmrgwAADQGAQSAX7BYLJLU5GFYf/vb3/STn/xEPXr0aM6yAABAIxFAAPiF8wkgu3fvVnp6umbMmNHcZQEAgEYigADwC+cTQJYvX67OnTvrhhtuaO6yAABAIxFAAPiFpgaQmpoavfbaa7r11lsVGhraEqUBAIBGIIAA8AtNDSBffPGF8vLyNHHixJYoCwAANBIBBIBfiIqKktT4ALJ+/XrFxMRoxIgRLVEWAABoJAIIAL8QFhamsLCwJgWQH//4xwoJCWmhygAAQGP4ZQDZuXOnkpOTZTKZdNVVV+m77747Y9ucnByNGDFCJpNJgwYNUnp6unvb66+/rqFD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L7m5ued5JgAAAEDb4pcBJDExUXa73aPXIj09Xf379/doZ7PZFBcXp4yMjHrbbdmyRbNmzVJcXJwuvfRSuVwuxcXFKTs7u97jhoWFuXs76PUAAAAAGs8vA4jZbNb48eOVmpqqiooKpaWlae/evRo3blydtikpKZo/f75KS0u1bds2paWlacqUKZKk7Oxs7d69W7t379a7776rsLAw7d69W7179/b2KQEAAABtgl8GEElasmSJcnNzFRsbq9mzZ2vt2rWy2WxatWqVR0/IvHnz3BPWJ0+erCVLligpKUnSqUnkcXFxiouLU8eOHSVJcXFxCgnxy6kxAAAAQKsXZBiG4esi/JXD4ZDVapXdbm/wcCyn06mCggLV1NS0cHVorJCQEHXq1IkHUgIAAL/VlOtTb+NX/V6Sl5enhQsXavv27YSPViw8PFzXXHONHn30UY+7pwEAAKB5EEC8wOVy6a677pJhGJozZ4569+7dqm+N1lZVVVUpPT1dL7/8sgoLC/Xiiy/6uiQAAICAQwDxgs8++0xHjhzR2rVr1atXL1+Xg7MYNGiQunbtqt/85jc6dOiQEhISfF0SAABAQPHbSej+ZO/evYqPjyd8+ImRI0dKOvVzAwAAQPMigHjBiRMnmE/gRyIiIiSd+rkBAACgeRFAWoHevXtr6NCh9W674447FB4erpKSkjO+3zAMzZ8/Xz169JDZbFaPHj304IMPurfn5+dr7NixMplMSkpK0ubNmz3e/9RTT6ljx46KiYnRnDlzdPqN0Xbu3Knk5GSZTCZdddVV+u6779zbKioqlJKSoqioKCUkJGj16tUe+12+fLm6desmi8WiGTNmeFzQf/DBB0pOTlZUVJT69eund955pyEflQ4ePKigoCCZzWaZzWZ17dpVTz75pHv79u3b1bFjR+Xn57vXLV26VIMHD9bhw4cVGxurXbt2ubdVV1frkksu0T/+8Q/3uqCgoAbVAgAAgMYjgPjY1q1blZ+fr127dumbb77x2FZZWak33nhDJpNJr7/++hn38corr2jdunX6+OOP5XQ69cknn2jw4MHu7bNmzVKXLl1UUFCgp59+WpMnT1ZxcbEk6d1339XSpUu1fft2ZWZm6u2339bLL78s6dTk+UmTJumBBx5QUVGRhg0bpttuu82939TUVBUVFenw4cNas2aN7rnnHn399deSpIyMDD388MN66623lJubq4MHD2rBggWSTk32/ulPf6pHHnlEDodDzz77rG699VY5HI4GfWZhYWFyOp1yOp369NNP9dJLL2nTpk2SpKFDh+qWW27RQw89JEk6evSoHnvsMS1btkxdu3bV/Pnzddddd6m6ulqS9Pzzz8tqtWrGjBkNOjYAAADODwHEx1atWqVJkybpmmuu0apVqzy2bdiwQTExMZo9e3adbafbuXOnxo4dqx49ekiSEhIS3EHB6XRq/fr1mjdvnkwmkyZMmKABAwZow4YNkqQVK1bo3nvvVa9evRQfH6/Zs2dr5cqVkqQtW7bIbDa7e2GeeOIJffHFF+5ekBUrVig1NVUWi0XDhw/X+PHjtWbNGknSq6++qilTpmjIkCGyWq16/PHH3fu12+1yOByaOnWqgoKCNGbMGEVERHj0rjRUz549NXz4cO3bt8+9bvHixfroo4/0wQcf6P7779dtt93mDmT33HOPwsLC9MILLyg3N1eLFi3SsmXL6PUAAADwEgKID508eVJr167VlClTNGXKlDohY+XKlbrlllt066236uOPP9b3339f736GDh2qZcuW6bnnntOuXbs8njOyf/9+95PgayUnJyszM1OSlJWVpYEDBzZoW2RkpHr37q2srCwVFxcrLy+vwe9NTk7WgQMHVFFRodjYWE2ZMkUrVqxQdXW1NmzYoMjISPXt27fRn2FOTo62bt2qyy67zL3OYrHoT3/6k2699VZt375d8+fPd28LCgrSsmXLNG/ePN1+++164IEHmnRcAAAANA0BxIc2btyompoaXXfddZo4caIOHjyonTt3SpKKior03nvvacqUKerVq5cGDRpUZ45FrenTp+uZZ55RWlqaRowYofj4ePecBqfTWecpmBaLRU6ns97tZ9t2+nan06ng4GCPyfXn2m/tekn66U9/ql/96lcKCwvTlClTtHTpUoWFhTXoc3O5XIqOjpbFYlGfPn00cuRIjwAiSZdddpnsdrvGjh2rqKgoj239+/fXz3/+c+Xm5urXv/51g44JAACA5kEA8aGVK1dq0qRJCg0Nlc1m0+jRo929IGvXrlVCQoIGDRokSfX2kJzu9ttv15YtW1RSUqLU1FT94he/UGZmpsxmc525FQ6HQ2azWZLqbD/bttO3m81mVVdXq7y8vMH7rV2/b98+zZgxQ+vXr9eJEye0ceNG3XbbbTp06FCDPrewsDCVlJTI4XAoPz9fBQUFmjNnjkebWbNmafr06XrttdeUlZVVZx/9+vVT79691b59+wYdEwAAAM2DAOIjpaWlSktL02uvvaa4uDjFxcVpy5YtWrNmjaqrq7Vq1Srl5ua6ty1atEjp6enuIU5nEhYWpnvvvVc2m0379u1TYmKi7Ha78vLy3G3S09PVv39/SacuxDMyMhq0raysTDk5OerXr59sNpvi4uIa/N709HT17NlTERER2rt3r5KTkzVy5Ei1a9dOV1xxhZKSkrR9+/ZGf44dOnTQxIkTtXHjRve6tWvXKjs7Wy+++KJ+85vfaObMmR539gIAAIDvEEB8ZN26derQoYOys7O1e/du7d69W1lZWaqsrNTf//53bd26Vf/5z388tl177bX19oK88soreu+991RWVqbq6mqtXLlSDodDl1xyicxms8aPH6/U1FRVVFQoLS1Ne/fu1bhx4yRJKSkpWrp0qQ4cOKC8vDw999xzSklJkSSNGjVKTqdTy5cvl8vl0oIFCzRkyBD3ZPeUlBTNnz9fpaWl2rZtm9LS0jRlyhRJ0rRp07R27Vrt2rVLdrtdCxcudO/3Rz/6kTIyMtyB4/PPP/cIL41RUlKi9evX66KLLpJ0aoL7gw8+qKVLlyo8PFwPPfSQ7Ha7+85eAAAA8DEDTWa32w1Jht1uP2u7Z555xrjllls81l1//fXG7373uzpt77vvPiM0NNQYNWpUnW2vv/660aNHD6Ompsbo16+fsXLlSsMwDOONN94whg0bZlitVsNisRiDBg0y3nzzTff7jh8/bowZM8aIiIgwEhMTjffff99jv4sWLTJiY2ON6Oho45FHHjFqamrc23bs2GEMHDjQCA8PN6644grj4MGD7m3l5eXGtGnTjMjISKNbt27GqlWrPPb78ssvG126dDHMZrNx++23G5WVle5tK1asMPr27WuYzWajT58+xt/+9jf3toULFxo33nij+/WNN95oLFy40DAMwzhw4IAhyYiMjDQiIyONmJgYY9KkScaRI0cMwzCMu+++20hJSfGoY+vWrUbHjh2N/Px8j9puuOGGOp9xrcGDB3t8hgAAAP6godenvhRkGIxNaSqHwyGr1Sq73V5nsvbp/vCHP2jnzp167bXXvFgdzseQIUP02GOPacKECb4uBQAAoMEaen3qSwzBAgAAAOA1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+uc//6nY2NjmOiUAAHzCbyehA2h7ase0etO3336r22+/XT169NAf//hH/fSnP9WuXbu0b98+paam6uKLL27SfeyDgoI0bdo0paenq1evXrr66qv129/+1v0gr1rZ2dmaPn26xo0bx136AAABgQACwG9YrVavDcEqKCjQPffco6SkJG3atElPP/20vv/+e73wwgu65JJLmu3hWd27d9fmzZu1YMEC/f73v9fIkSO1Z88eVVdX6+2339ZVV12l+Ph4/fOf/+ThegCAgMAQLAB+wxtDsAzD0MqVK/XQQw+purpaCxcu1H333SeTydRixwwODtZvfvMbXXfddZo2bZqSk5Pd26699lqtXr1a0dHRLXZ8AAC8iQACwG+09BAsu92uO+64Q+vWrdPUqVP1xz/+UZ07d26x4/3QZZddpoyMDH300UfKzc3VxRdfrGHDhtHzAQAIKAQQAH7DYrGotLRUNTU1ateueUeQ5uTkaMyYMTp27JjeeOMNTZo0qVn331ARERG66aabfHJsAAC8gQACwG9YrVZJUmlpqfv75pCRkaHRo0fLYrHoyy+/5DkbAAC0ICahA/AbtaGjOSei5+Tk6Nprr1V8fLw++eQTwgcAAC2MAALAb1gsFklqtnkghYWFuvHGG2Wz2fT++++rU6dOzbJfAABwZgzBAuA3antAmiOAGIahGTNmqLi4WDt37uQBfwAAeAkBBIDfaM4hWEuXLtWGDRuUlpamnj17nvf+AABAwzAEC4DfaK4hWEePHtWjjz6qu+++W+PGjWuO0gAAQAMRQAD4DbPZrKCgoPMOIHPmzFFYWJgWLVrUTJUBAICGYggWAL8RFBQki8VyXkOw9uzZo5UrV+qvf/2rYmJimrE6AADQEPSAAPAr5/s09AULFqhnz56aMWNGM1YFAAAaih4QAH7lfAJIdna2Xn/9dS1btkyhoaHNXBkAAGgIekAA+JXzGYL1l7/8RbGxsbrtttuauSoAANBQBBAAfqWpPSAVFRVavny57rjjDoWFhbVAZQAAoCEIIAD8SlMDyOuvv66SkhLdddddLVAVAABoKAIIAL9isViaFEDWrFmjK664Qr17926BqgAAQEMRQAD4FZvNppKSkka9p7i4WO+//74mT57cMkUBAIAGI4AA8CuxsbEqLCxs1HvWr1+vqqoq3XzzzS1UFQAAaCgCCAC/EhsbK4fD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MlK9e/dWVlaWiouLlZeX1+D3Jicn68CBA6qoqJAkj2FetWrf2xg5OTnaunWrLrvsMvc6i8WiP/3pT7r11lu1fft2zZ8/370tKChIy5Yt07x583T77bfrgQceUN++fRt9XAAAADQNAcSHNm7cqJqaGl133XWaOHGiDh48qJ07d0qSioqK9N5772nKlCnq1auXBg0aVGeORa3p06frmWeeUVpamkaMGKH4+Hj3nAan0ymLxeLR3mKxyOl01rv9bNtO3+50OhUcHOwxuf5c+61df/nll+vrr7/WO++8o5MnT+qZZ56Ry+VSeXl5gz43l8ul6OhoWSwW9enTRyNHjvQIIJJ02WWXyW63a+zYsYqKivLY1r9/f/385z9Xbm6ufv3rXzfomAAAAGgeBBAfWrlypSZNmqTQ0FDZbDaNHj3a3Quydu1aJSQkaNCgQZJUbw/J6W6//XZt2bJFJSUlSk1N1S9+8QtlZmbKbDbL4XB4tHU4HDKbzZJUZ/vZtp2+3Ww2q7q62iM0nGu/tes7dOigf/3rX3rssccUFxen77//Xv3791fXrl0b9LmFhYWppKREDodD+fn5Kigo0Jw5czzazJo1S9OnT9drr72mrKysOvvo16+fevfurfbt2zfomAAAAGgeBBAfKS0tVVpaml577TXFxcUpLi5OW7Zs0Zo1a1RdXa1Vq1YpNzfXvW3RokVKT08/5zClsLAw3XvvvbLZbNq3b58SExNlt9uVl5fnbpOenq7+/ftLOnUhnpGR0aBtZWVlysnJUb9+/WSz2RQXF9fg96anp6tnz57uW9xef/31+uqrr1RYWKgFCxbo6NGjGjBgQKM/xw4dOmjixInauHGje93atWuVnZ2tF198Ub/5zW80c+bMeod8AQAAwPsIID6ybt06dejQQdnZ2dq9e7d2796trKwsVVZW6u9//7u2bt2q//znPx7brr322np7QV555RW99957KisrU3V1tVauXCmHw6FLLrlEZrNZ48ePV2pqqioqKpSWlqa9e/dq3LhxkqSUlBQtXbpUBw4cUF5enp577jmlpKRIkkaNGiWn06nly5fL5XJpwYIFGjJkiHuye0pKiubPn6/S0lJt27ZNaWlpmjJliiRp2rRpWrt2rXbt2iW73a6FCxe69ytJu3fvVlVVlYqKinTPPfcoJSVFsbGxjf4cS0pKtH79el100UWSJLvdrgcffFBLly5VeHi4HnroIdntdvedvQAAAOBjBprMbrcbkgy73X7Wds8884xxyy23eKy7/vrrjd/97nd12t53331GaGioMWrUqDrbXn/9daNHjx5GTU2N0a9fP2PlypWGYRjGG2+8YQwbNsywWq2GxWIxBg0aZLz55pvu9x0/ftwYM2aMERERYSQmJhrvv/++x34XLVpkxMbGGtHR0cYjjzxi1NTUuLft2LHDGDhwoBEeHm5cccUVxsGDB93bysvLjWnTphmRkZFGt27djFWrVnns9+WXXza6dOlimM1m4/bbbzcqKyvd226++WYjKirKiImJMe6//36PbQsXLjRuvPFG9+sbb7zRWLhwoWEYhnHgwAFDkhEZGWlERkYaMTExxqRJk4wjR44YhmEYd999t5GSkuJRx9atW42OHTsa+fn5HrXdcMMNdT7jWoMHD/b4DAEAAPxBQ69PfSnIMBib0lQOh0NWq1V2u73OZO3T/eEPf9DOnTv12muvebE6nI8hQ4boscce04QJE3xdCgAAQIM19PrUlxiCBQAAAMBrCCDAD9ApCAAA0HIIIF7Qvn37Bj/jAr5X+7BEbtELAADQ/AggXjBgwAAdPXpU3377ra9LQQN8+umnktSk2wIDAADg7EJ8XUBbMGLECHXp0kUPPPCApk+frj59+ig4ONjXZeEHqqqqlJ6erpdffllDhw5VQkKCr0sCAAAIONwF6zw05i4DeXl5WrhwobZv366amhovVYjGCg8P1zXXXKNHH31UJpPJ1+UAAAA0ij/cBYsAch6a8gN2Op0qKCgghLRCISEh6tSpk8LDw31dCgAAQJP4QwDx2yFY+fn5+n//7//po48+Uvfu3bVkyRJde+21ddpVVFToF7/4hdavXy+bzaann35aU6dOlSRt27ZNd911lw4dOqT27dtrzJgxevHFF2U2m1usbrPZ3KL7BwAAAFozv52EPmvWLHXp0kUFBQV6+umnNXnyZBUXF9dpl5qaqqKiIh0+fFhr1qzRPffco6+//lqS1KdPH/373/9WSUmJDh48qJqaGs2fP9/bpwIAAAC0GX4ZQJxOp9avX6958+bJZDJpwoQJGjBggDZs2FCn7YoVK5SamiqLxaLhw4dr/PjxWrNmjSSpQ4cO6tq1q6RTz34ICgrSgQMHvHouAAAAQFvil0Ow9u/fL6vVqvj4ePe65ORkZWZmerQrLi5WXl6eBg4c6NFux44d7teHDh3SxRdfLLvdLrPZrHfeeeeMx3W5XHK5XO7XDoejOU4HAAAAaDP8tgfkh5NqLBaLnE5nnXbBwcEedzP6YbuEhASVlJTo2LFjmjNnjkeo+aHFixfLarW6l+7duzfTGQEAAABtg18GELPZXKf3weFw1JncbTabVV1d7fEU8vraSVKnTp00ZswYTZ8+/YzHnTt3rux2u3vJzc09zzMBAAAA2ha/DCCJiYmy2+3Ky8tzr0tPT1f//v092tlsNsXFxSkjI+Os7WrV1NQoJyfnjMcNCwuTxWLxWAAAAAA0nF8GELPZrPHjxys1NVUVFRVKS0vT3r17NW7cuDptU1JSNH/+fJWWlmrbtm1KS0vTlClTJEnvvvuusrOzZRiGjh49qscff1xXX321t08HQIDZsWOHjh496usyAABolfwygEjSkiVLlJubq9jYWM2ePVtr166VzWbTqlWrPHo45s2b556wPnnyZC1ZskRJSUmSpGPHjmnMmDEym80aPHiwunXrpqVLl/rqlAAEgK1bt2ro0KG67LLLVFVV5etyAABodXgS+nnwhydNAvCun//85/rHP/4hSfroo480atQo3xYEAGhT/OH61G97QACgNXr//ff14IMPymaz6T//+Y+vywEAoNXxy+eAAEBrVFhYqNzcXA0dOlRZWVn66quvfF0SAACtDj0gANBM0tPTJZ164OlFF12kffv2+bgiAABaHwIIADST9PR0RUREqG/fvrrooouUk5OjEydO+LosAABaFQIIADST7Oxs9e3bV8HBwUpKSlJ1dbUOHDjg67IAAGhVCCAA0EwOHDignj17SpISEhIkSbm5ub4sCQCAVocAAgDN5PQA0rVrV0nS999/78uSAABodQggANAMampq9N1337kDSFhYmDp16kQAAQDgBwggANAMjhw5ohMnTrgDiCR169aNIVgAAPwAAQQAmsHBgwclqU4AoQcEAABPBBAAaAaHDh2SJPXo0cO9rmvXrgQQAAB+gAACAM0gLy9PkZGRMpvN7nWdOnVSfn6+D6sCAKD1IYAAQDM4fvy4OnXq5LGuY8eOKigokGEYPqoKAIDWhwACAM3g2LFj6ty5s8e6jh076uTJk7Lb7T6qCgCA1ocAAgDN4Pjx4/UGEEkqKCjwRUkAALRKBBAAaAbHjh2rdwiWJOaBAABwGgIIADSDMw3BkgggAACcjgACAOfJMIx6J6HHxsZKIoAAAHA6AggAnCe73a4TJ07U6QEJCQlRTEwMAQQAgNMQQADgPB0/flyS6gQQ6dQwLAIIAAD/QwABgPN07NgxSaozBEuSOnTowF2wAAA4DQEEAM5TbQCprwfEZrOpuLjY2yUBANBqEUAA4DwdP35cISEhio6OrrPNZrOppKTE6zUBANBaEUAA4DzVPgOkXbu6/6RGR0fTAwIAwGkIIABwnup7CnotekAAAPBEAAGA81TfU9Br0QMCAIAnAggAnKf6noJey2azqaysTCdPnvRyVQAAtE4EEAA4T/U9Bb1W7cR0hmEBAHCK3waQ/Px8jR07ViaTSUlJSdq8eXO97SoqKpSSkqKoqCglJCRo9erV7m1vv/22Lr/8clmtVnXr1k1PPvmkt8oHEEDO1QMiEUAAAKgV4usCmmrWrFnq0qWLCgoKtGnTJk2ePFk5OTnu/+xrpaamqqioSIcPH9bevXt10003afDgwerbt69KS0u1YMECjRw5UseOHdMNN9ygXr166bbbbvPRWQHwNxUVFSotLT1jAKntAWEeCAAAp/hlD4jT6dT69es1b948mUwmTZgwQQMGDNCGDRvqtF2xYoVSU1P1/7V37/FRlXcex7+TC7lNZnLhvkkQAgQCSESUCoIgFVDKVVmRgoBixa3WLisWtApFBHSLL921eKtKRS7SXbVAMYAgYEEKWAmQICAREi4BQshMJvfL2T/YTAlJJheSmQz5vF+v8yIz55nnPOfwQOY7v3POWCwW9e/fX6NHj9aaNWskSQ899JCGDh2qgIAAxcTEaPz48dq7d6+7dweAF7tw4YKkqr8FXaICAgDAtbwygBw/flxWq1Xt2rVzPte7d28lJydXaHf58mVlZGSoV69eLtuV2717t3r06FHtdgsLC2W327O1D8oAAC5GSURBVCssAJq38gBCBQQAgNrxygDicDhksVgqPGexWORwOCq18/X1VXBwsMt2kvTOO+/o3Llzmjp1arXbXbx4saxWq3OJjo6+zj0B4O3Onz8vqfoKSGhoqHx8fKiAAADw/7wygJjN5krVB7vdLrPZXKldaWmp8vLyXLbbsGGDFixYoA0bNigoKKja7c6dO1c2m825pKenN8DeAPBm5QGkVatWVa43mUx8FwgAAFfxygDSpUsX2Ww2ZWRkOJ9LSkqqdPpUeHi42rZtq0OHDlXbbufOnXr00Ue1bt06de7c2eV2AwICZLFYKiwAmrcLFy4oMjJS/v7+1bbh29ABAPgnrwwgZrNZo0eP1rx585Sfn69169bp8OHDGjVqVKW2kydP1ksvvaScnBzt2bNH69at04MPPihJOnDggB544AGtXLlSt956q7t3A8ANwNW3oJezWq1UQAAA+H9eGUAkadmyZUpPT1dkZKSeeeYZrV27VuHh4Vq5cmWFCseCBQucF6xPmDBBy5YtU1xcnCTpjTfe0KVLlzR27FiZzWaZzWbde++9ntolAF7owoUL1V6AXs5isSgnJ8dNIwIAoGkzGYZheHoQ3sput8tqtcpms3E6FtBMDR06VC1bttQnn3xSbZsxY8aotLRUGzZscOPIAADNkTe8P/XaCggANAWuvgW9HBUQAAD+iQACANehtqdg8b1BAABcQQABgHoqKSlRZmZmjRehE0AAAPgnAggA1NOlS5dkGAYVEAAA6oAAAgD1VNO3oJcjgAAA8E8EEACop/IAUlMFJDQ0VEVFRSosLHTHsAAAaNIIIABQTxcuXJBUuwqIJKogAACIAAIA9Xb+/HmFhIQoJCTEZbvyAMKteAEAIIAAQL3V5ha8EhUQAACuRgABgHo6f/58jadfSQQQAACuRgABgHqiAgIAQN0RQACgns6fP08AAQCgjgggAFBPtT0FKygoSL6+vgQQAABEAAGAejEMo9anYJlMJoWGhhJAAAAQAQQA6sVms6moqKhWFRDpymlY3IYXAAACCADUS22/Bb2cxWKhAgIAgAggAFAv5QGkbdu2tWpPAAEA4AoCCADUQ0ZGhiQqIAAA1BUBBADqISMjQwEBAbJarbVqTwABAOAKAggA1MP58+fVtm1bmUymWrUngAAAcAUBBADqISMjo9bXf0jiNrwAAPw/AggA1ENGRkatr/+QuA0vAADlCCAAUA/lp2DVlsVikc1ma8QRAQDgHQggAFAPdT0Fy2KxyOFwqKysrBFHBQBA00cAAYA6Kisrq3MFJDQ0VJLkcDgaa1gAAHgFAggA1FFWVpZKSkrqfA2IJK4DAQA0ewQQAKijun4LuvTPCgh3wgIANHdeG0AuXryokSNHKjg4WHFxcdq6dWuV7fLz8zV58mSFhoYqJiZGq1evdq5LSUnRPffcI6vVqm7durlr6AC8XPm3oNf1GhCJCggAAF4bQH75y1+qffv2yszM1CuvvKIJEybo8uXLldrNmzdPWVlZOnPmjNasWaMnnnhCx44dkyT5+/tr0qRJWrp0qbuHD8CLlQeQupyCRQUEAIArvDKAOBwO/eUvf9GCBQsUHByssWPHqmfPnlq/fn2ltitWrNC8efNksVjUv39/jR49WmvWrJEkdenSRdOnT1fnzp3dvQsAvFhGRobMZrNCQkJq/RoqIAAAXOHn6QHUx/Hjx2W1WtWuXTvnc71791ZycnKFdpcvX1ZGRoZ69epVod3evXvrtd3CwkIVFhY6H/NJJtA8nTt3rk6nX0lUQAAAKOe1FZDyTxPLld9j/9p2vr6+Cg4OdtmuthYvXiyr1epcoqOj69UPAO92+vTpOv/7b9GihQICAqiAAACaPa8MIGazudKniHa7XWazuVK70tJS5eXluWxXW3PnzpXNZnMu6enp9eoHgHc7ffq0oqKi6vy60NBQKiAAgGbPKwNIly5dZLPZnBeCSlJSUpJ69OhRoV14eLjatm2rQ4cOuWxXWwEBAbJYLBUWAM1PfQOIxWKhAgIAaPa8MoCYzWaNHj1a8+bNU35+vtatW6fDhw9r1KhRldpOnjxZL730knJycrRnzx6tW7dODz74oCTJMAwVFBSoqKiows8AUJ2ysjKdOXOm3gGECggAoLnzygAiScuWLVN6eroiIyP1zDPPaO3atQoPD9fKlSsrVDgWLFjgvGB9woQJWrZsmeLi4iRJp06dUlBQkIYPH65jx44pKChIw4YN89QuAfACFy5cUElJCadgAQBQTybDMAxPD8Jb2e12Wa1W2Ww2TscCmon9+/frtttu07fffqs+ffrU6bU/+9nP5Ofnp88//7xxBgcAaPa84f2p11ZAAMATTp8+LUn1ugseFRAAAAggAFAnp0+fVosWLdSyZcs6v5aL0AEAIIAAQJ2kp6crKipKJpOpzq+lAgIAAAEEAOokLS2t3l9CSgUEAAACCADUSWpqqmJjY+v1WiogAAAQQACgTlJTU9WpU6d6vdZisSg3N1elpaUNPCoAALwHAQQAaslutyszM/O6AogkORyOhhwWAABehQACALX0448/SlK9A0hoaKgkcRoWAKBZI4AAQC2lpqZKqn8AKa+AcCE6AKA5I4AAQC2lpqbKbDbX6ztAJCogAABIBBAAqLXjx48rNja2Xt8BIlEBAQBAIoAAQK2lpKQoPj6+3q+nAgIAAAEEAGrFMAwlJyc3SAChAgIAaM4IIABQCxcuXFBWVtZ1BRB/f38FBgZSAQEANGsEEACohZSUFEm6rgAiXbkOhAoIAKA5I4AAQC2kpKTI399fsbGx19VPaGgoFRAAQLNGAAGAWvjuu+/UvXt3+fv7X1c/FouFAAIAaNYIIABQC/v27dPtt99+3f1wChYAoLkjgABADfLy8pScnKzbbrvtuvviFCwAQHNHAAGAGnz33XcqLS1tkABCBQQA0NwRQACgBjt27FBoaKh69ux53X1RAQEANHcEEACowdatWzV48ODrvgBdogICAAABBABcyM/P165duzR06NAG6Y8KCACguSOAAIALiYmJKiws1IgRIxqkPyogAIDmjgACAC6sWbNGCQkJiouLa5D+QkNDlZeXp5KSkgbpDwAAb0MAAYBqZGZmat26dXrooYcarE+LxSJJVEEAAM0WAQQAqvGHP/xBJpNJjzzySIP1GRoaKokAAgBovrw2gFy8eFEjR45UcHCw4uLitHXr1irb5efna/LkyQoNDVVMTIxWr15dYf3y5csVFRUli8Wi6dOnq6ioyB3DB9DEnTlzRkuXLtUvfvELtWzZssH6La+AcCF6zbKysvTVV19pw4YN2rVrl7Kysjw9pErKysqUkpKizZs3a+PGjfrHP/7B3y0A1MDP0wOor1/+8pdq3769MjMztXnzZk2YMEEnTpxQeHh4hXbz5s1TVlaWzpw5o8OHD+u+++7Trbfeqq5du+rQoUOaNWuWNm/erC5dumjs2LFauHChFixY4KG9AtAUFBUVacqUKQoODtb8+fMbtG9OwarZ0aNHNWfOHK1fv16lpaUV1vXs2VNDhw7V0KFDNXDgQIWFhXlkjFlZWVq6dKn++Mc/6sKFCxXWmUwmxcXFqW/fvs4lISFBISEhjTKWoqIiHTt2TMnJycrIyFBeXp4sFouio6PVr18/tWnTplG2CwD1ZTIMw/D0IOrK4XAoMjJSJ0+eVLt27SRJgwYN0owZM/Twww9XaNuuXTt9/vnn6tevnyTp4YcfVufOnfXiiy9q7ty5ys7O1ltvvSVJ2rZtm2bMmKHU1NRajcNut8tqtcpmsznfVADwbj/++KOmT5+ub775Rl9++aUGDhzYoP2npaWpQ4cOSkxM1PDhwxu07xvBRx99pMcee0xRUVGaNWuWhg4dqrCwMF24cEEHDx7UV199pa1bt+rUqVMymUy65ZZbNHjwYPXp00c9e/ZUXFycAgMDG3WMn332mR5//HHl5+dr+vTpGjNmjDp37ixfX19lZGTo8OHD2r9/v/bt26ekpCQVFhbKx8dH8fHx6tmzpzp27KhOnTqpY8eOatOmjVq1aqXIyEj5+bn+TLCsrEznzp1TamqqDhw4oG+//Vb/+Mc/dOTIEedNDYKCghQcHCy73a7i4mJJUnx8vB588EFNnDhRXbt2bdRjA7hSWFio06dP69SpU0pLS1NaWprz53PnzsnPz08hISHq2LGj4uLidMcdd+iOO+5otPB+o/KG96deGUC+++47DR8+vMKnTk899ZSCg4P1yiuvOJ+7fPmyIiIilJubq+DgYEnS0qVLtXfvXn3yyScaM2aMhg8frn/7t3+TJF26dEktW7ZUXl6egoKCKm23sLBQhYWFzsd2u13R0dH64osvqv3HUZvDSxva0Mazbex2u06dOqU9e/Zox44datWqldasWaNBgwbV+Nq6ys7OVnh4uP785z/rgQceaPD+vdnSpUv1zDPP6JFHHtGbb75Z5f/D0pW/05MnT+qrr77S9u3btXPnTp06dUqS5Ovrq06dOql79+7OJT4+Xt27d5fZbL6u8RmGoQULFmj+/PkaO3asli1b5vwQrDrFxcVKTk52BpKjR4/qxx9/VHp6eqW5GR4eLqvVqoCAAOdSUlKivLw85ebm6vz5885Q0aJFC918883q06ePEhIS1LNnT8XHxysyMlLSlbBy5swZ7dq1Sxs3btTnn3+unJwc3XLLLZo4caIefPBBdejQ4bqOR3Njs9l09OhRHTt2TGfPntWlS5eUlZUlu92ugoIC5efnu/yzqKhIgYGBCg4OltlsVvv27RUdHe1coqKinEvr1q3l43PlLHnDMFRQUKDs7GxlZWXp0qVLziUzM1OXLl1Sdna2ysrKKozXx8dHvr6+VS5+fn5VPl9WVqbS0tIG/dPhcOjs2bM6c+aMMjMzK4yxbdu2iomJUYcOHdSuXTuVlJQoJydHqampSklJ0eXLl+Xn56fbbrtNAwcO1KBBgzRgwIA6Vz7Lj6HdbpfD4VBpaWmFpXy85f8mTSaTTCZThZ+re66mx9c+V1+GYVQYa1XjL19ycnI0evToJh1AvPIULIfDUemAWiwWZWdnV2rn6+vrDB/l7RwOR5X9lP/scDiq/MW3ePFi/e53v6v0/L333lvvfQHgeT4+Pmrfvr169eql//qv/9LDDz/caJ+4lb8J5jqBipYvX65nnnlGc+fO1csvv+zyF7XJZFLHjh3VsWNH5w0CbDabUlJSdPjwYaWkpOjIkSNavXq10tLSJF0JJv3799d9992nyZMnKyoqqk7jy8vL0/Tp07V27VotXLhQzz33XK3eTPj7+yshIUEJCQmaMWOG8/mioiKlp6frwoULyszM1MWLF5WZmSmbzeb8sKuwsFB+fn4KDg5WcHCw2rRpo5tuukk33XSTunbtKn9//2q36+Pjo+joaE2cOFETJ05Ufn6+Nm7cqE8++UTz58/Xb37zG/Xu3Vv9+vVTz5491a5dO1mtVplMJhmGoaKiogrjuHopKCiodl35+qKiIpWVlTnf0FX1p6t19X2NyWRSYGCggoKCnIvFYlHr1q0rLK1atVLLli0VGRmpgICACsfObrcrLS1NycnJOnDggA4cOKCkpCSdO3fO2SYsLEwRERGKjIyUxWJRUFCQwsLCnNu+9s+goCD5+/ursLBQubm5ysnJ0ZkzZ5SWlqY9e/bo9OnTznBZvh/+/v7y9/dXUVFRhXVXtwkPD1dkZKTCw8Pl6+vrXFf+ZrUuS1lZmXx8fJzBpaH+DA4O1oABA9S+fXu1b9/eGTiioqJcVivLysp05MgR7dy5Uzt27NCKFSv06quvymQyqVOnToqNjVX79u0VFBSkFi1aKC8vTw6HQzk5ObLb7c7FZrNVqAiiaaAC0gAVkG+//bbGT9Zq84uqodqwPbbn7WNy9/YCAwNdvplraCEhIVq0aJGefvppt22zKdu0aZNGjhypRx99VG+//fZ1fUp4LYfDoe+//1779u1TYmKivvzySxUUFGjkyJF68skndc8999S4vfT0dI0dO1bff/+9Pv74Y40bN67BxucJDodD69at07Zt2/T3v/9dx44dq/EGLCaTyVmVCQwMrFClqW4pf0N89SfA1/7pal19XlNWVuasOpQvNptNFy9e1Pnz51VQUFBp30JDQ2U2m1VcXKyCggLnh5SSFBUVpYSEBPXu3Vs9evRQXFycunTp4rybXUMpKytTZmamTp8+rdOnTysjI0NFRUUqKSmRn5+fwsPDFRYW5gwcLVu2VFhYWIXQcaMzDEOpqanauXOnkpOTlZqaqoyMDOXn56uoqEghISEym80ym82yWCyyWCyyWq0V/rRYLAoJCamyAlQevq4Nulcv1z5X0+Oqnqvp/xtX668OdleP+9qf8/LylJCQQAWkoXXp0kU2m00ZGRlq27atJCkpKanCp0vSlXJ227ZtdejQIec1IElJSerRo4ekK+fFHjp0yNk+KSlJHTt2rLbsX/6f6rU6d+7cZP+CATQ9oaGhVED+X0pKiv71X/9VI0aM0LJlyxo0fEhXKk7lF4I/8cQTstvtWr16td566y0NHz5c3bt3169+9StNmTKlyqrXF198oenTpysgIEC7d+9W7969G3R8nmA2mzVp0iRNmjRJ0pU3R5cvX64wJ1u0aFEhTPj5+TX43427GYah3NxcZ9Xp6iUnJ8e5z+3atVN0dLS6devWoHfAc8XHx8dZnenTp49btultTCaTYmNjFRsb6+mhNHne8PvFKysgkjRhwgRFRETo9ddf15YtWzRt2rQq74I1e/ZsZyk+OTlZI0aM0N///nfFxcXp0KFDGjx4sLZs2aLY2FiNHz9eAwYMqPVdsLzhIh8ATU/Xrl01duxYvfrqq54eikdlZmaqX79+Cg4O1u7duxv8U2VXDMPQ119/rTfeeEOff/65rFarHnvsMY0YMULh4eE6duyY/vSnP2njxo0aNmyYVqxYodatW7ttfABQX97w/tQrKyCStGzZMk2dOlWRkZGKiorS2rVrFR4erpUrV2rRokVKTk6WJC1YsEAzZsxQu3btFB4ermXLlikuLk6S1KtXLy1dulSjRo2S3W7X/fffr+eff96TuwWgGfCmCkhJSYm+//57HThwQCdOnFBqaqrS0tKUm5urwsJCWSwWtW3bVgkJCbrzzjt155131uq0kJycHI0ZM0Y5OTnaunWrW8OHdOXT1EGDBmnQoEE6efKk3nzzTb3zzjsVQmHv3r21atUqTZw40es//QeApsRrKyBNgTckTABNz5AhQ9SuXTutWrXK00OpJDMzUzt27NDXX3+t/fv367vvvlNeXp6kK3es6dSpk2JiYmQ2m9WiRQvZ7XadOXNG3377rex2u9q0aaOJEydq2rRpSkhIqHIbly9f1pgxY5SUlKQtW7bo9ttvd+MeVq+kpEQ//PCDcnJyFBUVVeMdrgCgKfKG96deWwEBAG9lsViazBcRFhcXa/v27dq4caO2bdumgwcPSpI6deqkfv36afz48erbt69uueUWl1WKsrIy7du3T2vWrNHq1av1xhtvKCEhQdOnT9ekSZPUsmVLlZSUaMOGDZo1a5ays7OVmJjYZMKHJPn5+albt26eHgYA3PCogFwHb0iYAJqeyZMnKz09XTt27PDI9ktLS7Vp0yatXr1aGzZsUHZ2tqKjozV06FANGTJEQ4YMUXR0dL37Ly4uVmJioj788EOtX79eZWVlateunWw2mxwOh4YMGaL3339fHTt2bMC9AgBI3vH+lAoIALiZpyog58+f17Jly/TBBx/o9OnT6tGjh371q19p3Lhx6t27d4Nd5+Dv769Ro0Zp1KhRunjxotatW6eTJ0/KYrFoyJAhuvXWW7mmAgCaMQIIALiZuy9CP336tF599VW999578vPz06RJk/TYY4+5JQi0atVKjz76aKNuAwDgXQggAOBm7qqA5Ofn69VXX9WSJUsUFBSkuXPn6qmnnqp0u3IAANyJAAIAbuaOCsiOHTs0bdo0nTlzRrNmzdJzzz3XZM8FBgA0Lz6eHgAANDcWi0UFBQUqLi5u8L5LS0v1/PPPa8iQIYqJidHhw4e1ZMkSwgcAoMkggACAm5WHgYauguTm5mr8+PFasmSJFi5cqG3btqlr164Nug0AAK4Xp2ABgJuVX4Nx+fJlRUZGNkifOTk5GjZsmA4dOqT169frvvvua5B+AQBoaAQQAHCzqwNIQygoKNDo0aOVkpKi7du3q2/fvg3SLwAAjYEAAgBuVh5AsrKyrrsvwzD0xBNPaM+ePdqyZQvhAwDQ5BFAAMDNIiIiJDVMBeSDDz7Q8uXL9dFHH+nOO++87v4AAGhsXIQOAG5mNpvl6+t73QEkPT1dv/71r/Xoo49qypQpDTQ6AAAaFwEEANzMZDIpPDz8uk/BevLJJxUaGqqlS5c20MgAAGh8nIIFAB4QERFxXRWQbdu2ad26dVq7dq2sVmsDjgwAgMZFBQQAPCA8PLzeAcQwDL3wwgvq27evHnjggQYeGQAAjYsKCAB4QERERL1Pwdq8ebN2796txMREmUymBh4ZAACNiwoIAHjA9VRAXn/9dd16660aNmxYA48KAIDGRwABAA+o70XoP/zwgxITE/Xkk09S/QAAeCUCCAB4QH0vQn/rrbcUERGhBx98sBFGBQBA4yOAAIAH1OcUrJKSEn388ceaNm2agoKCGmlkAAA0LgIIAHhAeHi4cnNzVVRUVOvXbN++XRcuXNCkSZMacWQAADQuAggAeEBERIQk1akKsmbNGsXGxqpPnz6NNSwAABodAQQAPKA8gFy6dKlW7YuKivS///u/mjhxIhefAwC8GgEEADygVatWkqSLFy/Wqv3u3buVnZ2t+++/vzGHBQBAoyOAAIAHtG7dWpJ04cKFWrXfunWrIiMj1bt378YcFgAAjY4AAgAeEBYWJn9//1oHkG3btmnIkCHy8eG/bQCAd+M3GQB4gMlkUuvWrXX+/Pka2+bk5Gjv3r0aOnSoG0YGAEDj8soAsm/fPvXu3VvBwcG66667dOrUqWrbnjhxQgMGDFBwcLD69OmjpKQk57r/+Z//Ub9+/RQQEKCZM2e6Y+gA4NS6detaVUC+/vprlZSU6O6773bDqAAAaFxeF0AKCws1fvx4Pf3008rKytJPfvITTZkypdr2Dz30kIYNG6asrCw98sgjGjdunEpKSiRduQvNs88+qxkzZrhr+ADg1KZNm1oFkG3btikqKkpdunRxw6gAAGhcXhdAtm/fLrPZrEceeUSBgYF68cUXtX///iqrIEePHtXRo0c1d+5cBQYG6sknn1Rpaal2794tSbr77rt1//33O+9GAwDuVNsKyNatW3X33Xdz+10AwA3B6wJISkqKevXq5XwcEhKi2NhYpaSkVNk2Li5OLVq0cD538803Kzk5uV7bLiwslN1ur7AAQH3V5hqQS5cu6cCBA1z/AQC4YXhdAHE4HLJYLBWes1gscjgc19W2NhYvXiyr1epcoqOj69UPAEi1q4B89dVXkqQhQ4a4Y0gAADS6JhdAhg0bpsDAwCqXhQsXymw2V6o82O12mc3mSn3VpW1tzJ07Vzabzbmkp6fXqx8AkK5cA2K321VQUFBtm23btqlLly584AEAuGH4eXoA19q8ebPL9Zs2bdK7777rfJybm6sTJ04oPj6+Utv4+HgdPXpUxcXF8vf3lyQdPHhQs2fPrtfYAgICFBAQUK/XAsC12rRpI0k6f/68OnToUGWbrVu3cvoVAOCG0uQqIDUZPHiwHA6Hli9frsLCQi1cuFB9+/at8pd3XFyc4uLitGTJEhUWFmrZsmXy9fVV//79JUmlpaUqKChQSUlJhZ8BwB3KqxrVVVNPnz6tY8eOcftdAMANxesCSEBAgD799FO99tprCgsL065du7RixQrn+pkzZ1b4To9Vq1YpMTFRYWFheu+99/Tpp5/Kz+9K4WfFihUKCgrSyy+/rD/+8Y8KCgrSwoUL3b5PAJqn8gBS3XcZcf0HAOBGZDIMw/D0ILyV3W6X1WqVzWardLE7ANRGRESEZs+erblz51ZaN23aNB04cEAHDhxw/8AAAF7JG96fel0FBABuJB06dFBaWlql5w3D0LZt27j+AwBwwyGAAIAHxcTEVBlAfvjhB6Wnp3P9BwDghkMAAQAPqi6AbNu2Tb6+vho0aJAHRgUAQOMhgACAB91000368ccfVVZWVuH5rVu36vbbb1doaKiHRgYAQOMggACAB3Xv3l25ubkVbsVbWlqqL7/8Uj/96U89ODIAABoHAQQAPKhHjx6SpOTkZOdz+/fv1+XLlzV8+HBPDQsAgEZDAAEAD4qJiZHZbK4QQDZt2iSr1ap+/fp5cGQAADQOAggAeJDJZFKPHj2UlJTkfC4xMVFDhw51fmkqAAA3EgIIAHjYnXfeqZ07d8owDKWlpembb77RmDFjPD0sAAAaBQEEADzsrrvuUnp6uo4dO6aPP/5YgYGBGjdunKeHBQBAo6C+DwAe9tOf/lTh4eF66aWXtGXLFk2ePJnb7wIAblhUQADAw4KCgvTv//7vWrlypYqLi/XCCy94ekgAADQaKiAA0AT89re/1R133KGuXbsqJibG08MBAKDREEAAoAkwmUx88SAAoFngFCwAAAAAbkMAAQAAAOA2BBAAAAAAbkMAAQAAAOA2BBAAAAAAbkMAAQAAAOA2BBAAAAAAbkMAAQAAAOA2BBAAAAAAbkMAAQAAAOA2BBAAAAAAbkMAAQAAAOA2BBAAAAAAbuOVAWTfvn3q3bu3goODddddd+nUqVPVtj1x4oQGDBig4OBg9enTR0lJSc51r7zyirp166bQ0FDFx8fr008/dcfwAQAAgGbL6wJIYWGhxo8fr6efflpZWVn6yU9+oilTplTb/qGHHtKwYcOUlZWlRx55ROPGjVNJSYkkydfXV3/+859ls9n09ttva/r06Tpx4oS7dgUAAABodkyGYRieHkRdbNq0Sb/+9a915MgRSVJubq5atWqlI0eOqEOHDhXaHj16VLfffrsuXryoFi1aSJI6dOigFStWaNCgQZX6HjBggGbNmqX777+/VmOx2+2yWq2y2WyyWCzXuWcAAADA9fGG96deVwFJSUlRr169nI9DQkIUGxurlJSUKtvGxcU5w4ck3XzzzUpOTq7UNicnR8nJyYqPj69224WFhbLb7RUWAAAAALXndQHE4XBUSnMWi0UOh+O62j7++OMaPXq0unfvXu22Fy9eLKvV6lyio6PruRcAAABA89TkAsiwYcMUGBhY5bJw4UKZzeZKlQe73S6z2Vypr9q2nTNnjtLS0vTOO++4HNvcuXNls9mcS3p6ej33EgAAAGie/Dw9gGtt3rzZ5fpNmzbp3XffdT7Ozc3ViRMnqjx1Kj4+XkePHlVxcbH8/f0lSQcPHtTs2bOdbf7zP/9T69ev19/+9jcFBQW53HZAQIACAgLqsjsAAAAArtLkKiA1GTx4sBwOh5YvX67CwkItXLhQffv2rXQBuiTFxcUpLi5OS5YsUWFhoZYtWyZfX1/1799fkvTBBx/ozTff1KZNmxQeHu7uXQEAAACaHa8LIAEBAfr000/12muvKSwsTLt27dKKFSuc62fOnKmZM2c6H69atUqJiYkKCwvTe++9p08//VR+flcKPy+99JLOnTunbt26yWw2y2w2a9GiRW7fJwAAAKC58Lrb8DYl3nCbMwAAADQf3vD+1OsqIAAAAAC8FwEEAAAAgNsQQAAAAAC4DQEEAAAAgNsQQAAAAAC4DQEEAAAAgNsQQAAAAAC4DQEEAAAAgNsQQAAAAAC4DQEEAAAAgNsQQAAAAAC4DQEEAAAAgNv4eXoA3swwDEmS3W738EgAAACAf74vLX+f2hQRQK5DTk6OJCk6OtrDIwEAAAD+KScnR1ar1dPDqJLJaMrxqIkrKyvT2bNnFRoaKpPJ5OnhoBbsdruio6OVnp4ui8Xi6eGgiWF+wBXmB1xhfsAVd84PwzCUk5Oj9u3by8enaV5tQQXkOvj4+CgqKsrTw0A9WCwWfkGgWswPuML8gCvMD7jirvnRVCsf5ZpmLAIAAABwQyKAAAAAAHAbAgialYCAAM2bN08BAQGeHgqaIOYHXGF+wBXmB1xhflTERegAAAAA3IYKCAAAAAC3IYAAAAAAcBsCCAAAAAC3IYAAAAAAcBsCSDM2b948xcfHy8fHR2vWrHE+n5eXp8cff1ytW7dWmzZt9Pvf/9657uuvv5bZbHYuwcHB8vHx0cWLFyVJ+fn5mjx5skJDQxUTE6PVq1e7HMO+ffvUu3dvBQcH66677tKpU6ec65YtW6aEhAT5+flpyZIlNe5PffpatGiRc18CAgLk7+/vfDxz5kxJ0hdffKHOnTsrJCREY8aM0eXLl52vv3jxokaOHKng4GDFxcVp69atLse4ZMkStWrVShEREXr22Wd19T0gXI3/WjUd5+XLlysqKkoWi0XTp09XUVFRjcfPG7g63q6O7bUact65OtYnTpzQgAEDFBwcrD59+igpKamee47acsccmTVrljp16qTQ0FD17dtXO3fudDkm5kjT4Y75MW/ePEVHR8tisahLly768MMPXY6J+dF0uGN+lDt58qSCgoKc7zWqc8PODwPN1ooVK4zNmzcb/fr1M1avXu18/rnnnjPuuecew2azGWlpaUbnzp2NxMTEKvt44403jDvvvNP5ePbs2ca9995r2Gw2Y9euXYbVajWOHj1a5WsLCgqMqKgo4/333zfy8/ONZ5991hg4cKBz/WeffWasX7/eGDdunLF48WKX+9IQfS1evNiYOnVqhefOnz9vhIWFGRs3bjQcDofx85//3JgyZYpz/YQJE4wZM2YYubm5xmeffWaEh4cbWVlZVfb/17/+1YiJiTFOnDhhnD171ujevbvx/vvv12r813J1nA8ePGiEh4cb+/btM7Kzs43BgwcbL7zwgsvj5y2qO96uju21GnLe1XSsb7vtNmP+/PlGfn6+8d///d9Gx44djeLi4oY5GKiSO+bI/PnzjePHjxulpaXG2rVrjfDwcMNut1fZF3OkaXHH/Dh27JjhcDicP7dr1844fPhwlX0xP5oWd8yPcmPHjjX69+9vPP7449WO50aeHwQQGHfddVeFANKnTx9j48aNzseLFi0yJk2aVOVrb7/9duPtt992Pm7btq2xZ88e5+MpU6YYv/vd76p8bWJiotGtWzfnY4fDYQQFBRknT56s0G7q1Kk1vhFsiL6qCiBvv/22MWLECOfjH374wQgMDDQKCgqMnJwco0WLFsbZs2ed6wcOHGj86U9/qrL/iRMnGkuWLHE+fv/9940hQ4bUafzlXB3nOXPmGDNnznSu27p1q9GxY8cq+/Emro63q2N7rYacd66O9ffff29YLBajsLDQuT4mJsbYsWNHLfYW9eHuOVKuffv2xv79+6tcxxxpOjwxP44dO2a0adPG+Otf/1plX8yP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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Use wild cards to plot multiple stations at once\n", + "! seisflows plotst AA.S00000?.BXY.semd --savefig AA.S00000X.BXY.semd.png\n", + "Image(\"AA.S00000X.BXY.semd.png\")" ] } ], diff --git a/docs/notebooks/convert.py b/docs/notebooks/convert.py index 7b279e49..d6bc780d 100644 --- a/docs/notebooks/convert.py +++ b/docs/notebooks/convert.py @@ -1,16 +1,21 @@ #! /usr/bin/env python """ -Run an IPython notebook (execute all cells) and then convert the notebook to a \ +Run an IPython notebook (execute all cells) and then convert the notebook to a Sphinx .rst doc page in HTML +.. rubric:: + python convert.py # to convert all .ipynb files + OR + python convert.py {notebook}.ipynb # to convert a given notebook + .. note:: You will not need this if using the nbsphinx extension. Copied and edited from Pyflex documentation """ -import io import os import sys +import shutil import glob @@ -19,29 +24,61 @@ def convert_nb(nbname): Open up a Jupyter notebook, execute the code inside and save to a new notebook, and then convert the executed notebook to a .rst file for docs. """ - # Remove file extension nbname = os.path.splitext(nbname)[0] filename = f"{nbname}.ipynb" rst_filename = filename.replace("ipynb", "rst") - # Run nbconvert to execute a notebook, allowing errors through and saving - # the new, executed notebook in place - - # !!! For SeisFlows documentation, we don't want to be running notebooks - # os.system(f"jupyter nbconvert --to notebook " - # f"--execute {filename} --inplace") - # os.system("rm -rf ./index_files") - # Run nbconvert to convert executed notebook to RST format for docs page os.system(f"jupyter nbconvert --to rst {filename}") - os.system(f"rm ../{rst_filename}") - os.system(f"mv {rst_filename} ..") + + # Overwrite any existing .rst file with newly created one + rst_path = f"../{rst_filename}" + if os.path.exists(rst_path): + os.remove(rst_path) + os.rename(rst_filename, rst_path) + + +def adjust_nb(nbname): + """ + Since the notebooks are not stored in the same directory, their images + will point at the wrong directory. Just make sure that we adjust the + path and then move the created images to the correct location. Probably + an easier way to do this but for this scale this should work. + """ + nbname = os.path.splitext(nbname)[0] + filename = f"{nbname}.ipynb" + rst_filename = filename.replace("ipynb", "rst") + rst_path = f"../{rst_filename}" + + # Move the created images files to a new directory + nb_files_path_old = f"{nbname}_files" + nb_files_path_new = f"../images/{nb_files_path_old}" + + if os.path.exists(nb_files_path_old): + if os.path.exists(nb_files_path_new): + shutil.rmtree(nb_files_path_new) + os.rename(nb_files_path_old, nb_files_path_new) + + with open(rst_path, "r") as f: + rst_file = f.readlines() + + # Check if any images in the converted notebook + for i, line in enumerate(rst_file[:]): + if ".. image::" in line: + # If so, replace with correct image location + new_line = line.replace(".. image:: ", ".. image:: images/") + rst_file[i] = new_line + + with open(rst_path, "w") as f: + f.writelines(rst_file) if __name__ == "__main__": if sys.argv[1:]: for nbname in sys.argv[1:]: convert_nb(nbname) + adjust_nb(nbname) else: for nbname in glob.glob("*ipynb"): convert_nb(nbname) + adjust_nb(nbname) diff --git a/docs/notebooks/example_on_cluster.ipynb b/docs/notebooks/example_on_cluster.ipynb new file mode 100644 index 00000000..a36fffd7 --- /dev/null +++ b/docs/notebooks/example_on_cluster.ipynb @@ -0,0 +1,564 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Running Examples on a Cluster\n", + "\n", + "Here we detail how a User might transition from developing a 2D example problem on their workstation, to performing large-scale inversion on a cluster. In this notebook we show an example running on the New Zealand eScience Infrastructure HPC, named Maui, but is meant to provide a generalizable approach for running SeisFlows on clusters. \n", + "\n", + "## Example Setup" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "We first set up our working directory using the example setup shown in the `SPECFEM2D example page `__. This ensures that we have our initial and final models, and a properly set parameter file that can be used for our inversion." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/bchow/Work/scratch\n" + ] + } + ], + "source": [ + "# This is an empty working directory\n", + "%cd /home/bchow/Work/scratch " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! ln -s /home/bchow/REPOSITORIES/specfem2d . # place SPECFEM2D repository in the working directory\n", + "! seisflows examples setup 2 # run example setup but do not `submit` workflow" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "parameters.yaml specfem2d specfem2d_workdir\r\n" + ] + } + ], + "source": [ + "! ls " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Module 'swap'\n", + "\n", + "As we saw in the example tutorial, the `System` module for this example problem is set as 'Workstation', which is meant to run the workflow in serial directly on the system that submits it. For clusters this means we would run our entire inversion on the login node. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "system: workstation\r\n" + ] + } + ], + "source": [ + "! seisflows par system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To 'swap' out the `System` module for a cluster-specific class, we can use the `seisflows swap` command, which replaces one module for another without affecting the other modules. This is very helpful if you have a completed parameter file and do not want to copy-paste all the edited parameter just to change out a module. The rubric for running `seisflows swap` can be found in the help message: " + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "usage: seisflows swap [-h] [module] [classname]\r\n", + "\r\n", + "During workflow development, it may be necessary to swap between different\r\n", + "sub-modules (e.g., system.workstation -> system.cluster). However this would\r\n", + "typically involving re-generating and re-filling a parameter file. The 'swap'\r\n", + "function makes it easier to swap parameters between modules.\r\n", + "\r\n", + "positional arguments:\r\n", + " module Module name to swap\r\n", + " classname Classname to swap to\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n" + ] + } + ], + "source": [ + "! seisflows swap -h" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can check available names by running `seisflows print modules`. Here we want to swap out our `System` module from 'Workstation' to 'Maui', which defines how SeisFlows interacts with the SLURM-based system, Maui." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " SEISFLOWS MODULES \r\n", + " ///////////////// \r\n", + "'-': module, '*': class\r\n", + "\r\n", + "- workflow\r\n", + " * forward\r\n", + " * inversion\r\n", + " * migration\r\n", + " * test_flow\r\n", + "- system\r\n", + " * chinook\r\n", + " * cluster\r\n", + " * frontera\r\n", + " * lsf\r\n", + " * maui\r\n", + " * slurm\r\n", + " * workstation\r\n", + "- solver\r\n", + " * specfem\r\n", + " * specfem2d\r\n", + " * specfem3d\r\n", + " * specfem3d_globe\r\n", + "- preprocess\r\n", + " * default\r\n", + " * pyaflowa\r\n", + "- optimize\r\n", + " * LBFGS\r\n", + " * NLCG\r\n", + " * gradient\r\n" + ] + } + ], + "source": [ + "! seisflows print modules" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "L-BFGS optimization requires 'backtrack'ing line search. Overwriting 'bracket'\r\n" + ] + } + ], + "source": [ + "! seisflows swap system maui" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see now that the parameter file has swapped out the 'Workstation' System module for the 'Maui' System module, which contains its own set of parameters that must be filled out by the User." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# =============================================================================\r\n", + "#\r\n", + "# Workstation System\r\n", + "# ------------------\r\n", + "# Defines foundational structure for System module. When used standalone, \r\n", + "# runs tasks in serial on a local machine.\r\n", + "#\r\n", + "# Parameters\r\n", + "# ----------\r\n", + "# :type ntask: int\r\n", + "# :param ntask: number of individual tasks/events to run during workflow.\r\n", + "# Must be <= the number of source files in `path_specfem_data`\r\n", + "# :type nproc: int\r\n", + "# :param nproc: number of processors to use for each simulation\r\n", + "# :type log_level: str\r\n", + "# :param log_level: logger level to pass to logging module.\r\n", + "# Available: 'debug', 'info', 'warning', 'critical'\r\n", + "# :type verbose: bool\r\n", + "# :param verbose: if True, formats the log messages to include the file\r\n", + "# name, line number and message type. Useful for debugging but\r\n", + "# also very verbose.\r\n", + "#\r\n", + "# \r\n", + "# Cluster System\r\n", + "# ------------------\r\n", + "# Generic or common HPC/cluster interfacing commands\r\n", + "#\r\n", + "# Parameters\r\n", + "# ----------\r\n", + "# :type title: str\r\n", + "# :param title: The name used to submit jobs to the system, defaults\r\n", + "# to the name of the current working directory\r\n", + "# :type mpiexec: str\r\n", + "# :param mpiexec: Function used to invoke executables on the system.\r\n", + "# For example 'mpirun', 'mpiexec', 'srun', 'ibrun'\r\n", + "# :type ntask_max: int\r\n", + "# :param ntask_max: limit the number of concurrent tasks in a given array job\r\n", + "# :type walltime: float\r\n", + "# :param walltime: maximum job time in minutes for the master SeisFlows\r\n", + "# job submitted to cluster. Fractions of minutes acceptable.\r\n", + "# :type tasktime: float\r\n", + "# :param tasktime: maximum job time in minutes for each job spawned by\r\n", + "# the SeisFlows master job during a workflow. These include, e.g.,\r\n", + "# running the forward solver, adjoint solver, smoother, kernel combiner.\r\n", + "# All spawned tasks receive the same task time. Fractions of minutes\r\n", + "# acceptable.\r\n", + "# :type environs: str\r\n", + "# :param environs: Optional environment variables to be provided in the\r\n", + "# following format VAR1=var1,VAR2=var2... Will be set using\r\n", + "# os.environs\r\n", + "#\r\n", + "# \r\n", + "# System Slurm\r\n", + "# ------------------\r\n", + "# Interface for submitting and monitoring jobs on HPC systems running the \r\n", + "# Simple Linux Utility for Resource Management (SLURM) workload manager.\r\n", + "#\r\n", + "# Parameters\r\n", + "# ----------\r\n", + "# :type slurm_args: str\r\n", + "# :param slurm_args: Any (optional) additional SLURM arguments that will\r\n", + "# be passed to the SBATCH scripts. Should be in the form:\r\n", + "# '--key1=value1 --key2=value2\"\r\n", + "#\r\n", + "# \r\n", + "# System Maui\r\n", + "# -----------\r\n", + "# New Zealand Maui-specfic modifications to base SLURM system\r\n", + "#\r\n", + "# Parameters\r\n", + "# ----------\r\n", + "# :type account: str\r\n", + "# :param account: Maui account to submit jobs under, will be used for the\r\n", + "# '--account' sbatch argument\r\n", + "# :type cpus_per_task: int\r\n", + "# :param cpus_per_task: allow for multiple cpus per task, i.e,.\r\n", + "# multithreaded jobs\r\n", + "# :type cluster: str\r\n", + "# :param cluster: cluster to submit jobs to. Available are Maui and\r\n", + "# Mahuika\r\n", + "# :type partition: str\r\n", + "# :param partition: partition of the cluster to submit jobs to.\r\n", + "# :type ancil_cluster: str\r\n", + "# :param ancil_cluster: name of the ancilary cluster used for pre-\r\n", + "# post-processing tasks.\r\n", + "# :type ancil_partition: name of the partition of the ancilary cluster\r\n", + "# :type ancil_tasktime: int\r\n", + "# :param ancil_tasktime: Tasktime in minutes for pre and post-processing\r\n", + "# jobs submitted to Maui ancil.\r\n", + "#\r\n", + "# \r\n", + "# =============================================================================\r\n", + "ntask: 1\r\n", + "nproc: 1\r\n", + "log_level: DEBUG\r\n", + "verbose: False\r\n", + "title: scratch\r\n", + "mpiexec: None\r\n", + "ntask_max: 100\r\n", + "walltime: 10\r\n", + "tasktime: 1\r\n", + "environs: SLURM_MEM_PER_CPU\r\n", + "slurm_args: None\r\n", + "partition: nesi_research\r\n", + "account: None\r\n", + "cluster: maui\r\n", + "cpus_per_task: 1\r\n", + "ancil_cluster: maui_ancil\r\n", + "ancil_partition: nesi_prepost\r\n", + "ancil_tasktime: 1\r\n" + ] + } + ], + "source": [ + "! head -235 parameters.yaml | tail -n 110 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 'Check'ing parameter validity\n", + "\n", + "Most of the default values should be okay for our purposes, but it's up the User to read the docstrings and determine if any of the default values should be changed. If we run `seisflows check` we can check if any of our parameters are incorrectly set." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r\n", + "================================================================================\r\n", + " PARAMETER ERRROR \r\n", + " //////////////// \r\n", + "System 'Maui' requires parameter 'account'\r\n", + "================================================================================\r\n" + ] + } + ], + "source": [ + "! seisflows check" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `Maui` System check function has told us that it requires that the parameter `account` be set. Note that these requirements will change between different clusters, which dictate different SLURM parameters when submitting jobs. We can specify the account parameter using the `seisflows par` command." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "account: null -> gns03247\r\n" + ] + } + ], + "source": [ + "! seisflows par account gns03247" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "! seisflows check" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `seisflows check` function has passed and we have succesfully swapped out our System module with the `Maui` child class. Under the hood, this class should take care of all the required interactions between SeisFlows and the compute node. Now all that is left to do is to run `seisflows submit`, which should submit the master job to the system and run our inversion on compute nodes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## TestFlow: Live testing SeisFlows on System\n", + "\n", + "While developing, debugging or testing SeisFlows on System, it is not ideal to submit simulation-based workflows, as these eat large amounts of computational resources and may introduce problems of there own. \n", + "\n", + "Here we introduce 'TestFlow', a SeisFlows workflow that runs simple test functions on a cluster. This allows Users to check if SeisFlows can appropriately interact with the HPC system with tasks like submitting jobs, monitoring the job queue and catching failing jobs. \n", + "\n", + "Below we show how to set up TestFlow for our test bed HPC, Maui. First we generate a template parameter file and set the modules appropriately." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory\n", + "/home/bchow/Work/scratch\n" + ] + } + ], + "source": [ + "# This is an empty working directory\n", + "%rm -r /home/bchow/Work/scratch \n", + "%mkdir /home/bchow/Work/scratch \n", + "%cd /home/bchow/Work/scratch " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "creating parameter file: parameters.yaml\r\n" + ] + } + ], + "source": [ + "# Generate a template parameter file\n", + "! seisflows setup -f" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "workflow: forward -> test_flow\n", + "system: workstation -> maui\n", + "solver: specfem2d -> null\n", + "preprocess: default -> null\n", + "optimize: gradient -> null\n" + ] + } + ], + "source": [ + "# Set the modules appropriately\n", + "! seisflows par workflow test_flow\n", + "! seisflows par system maui # we want to test SeisFlows on Maui\n", + "! seisflows par solver null # currently test_flow does not test solver\n", + "! seisflows par preprocess null # currently test_flow does not test preprocess\n", + "! seisflows par optimize null # currently test_flow does not test optimize" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "# Dynamically fill out the parameter file\n", + "! seisflows configure" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# =============================================================================\r\n", + "#\r\n", + "# TestFlow Workflow\r\n", + "# -------------\r\n", + "# Test individual sub-modules in a 'live' testing environment in order to\r\n", + "# ensure SeisFlows works appropriately given an established system and solver.\r\n", + "#\r\n", + "# .. note::\r\n", + "# You do not need to set System parameters `ntask`, `nproc`, `tasktime`,\r\n", + "# `walltime`. These will be overwritten by the setup task.\r\n", + "#\r\n", + "# Parameters\r\n", + "# ----------\r\n", + "#\r\n", + "# \r\n", + "# =============================================================================\r\n" + ] + } + ], + "source": [ + "! head -48 parameters.yaml | tail -n 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see above, the `TestFlow` workflow does not require any input parameters, and will additionally automatically set some key `System` parameters to ensure that these tests are lightweight to avoid long queue times. Under the hood the `TestFlow` workflow will:\n", + "\n", + "1) Submit an array job to the system to test job submission capabilities \n", + "2) Submit a single job to the system which is intended to fail, this tests job queue monitoring as well as failed job catching.\n", + "\n", + "Developers who are implementing new `System` classes (e.g., for new clusters), can use TestFlow as foundation for their development and debugging sessions. To run the `TestFlow` workflow you just need to run `seisflows submit`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! seisflows submit" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/notebooks/extending.ipynb b/docs/notebooks/extending.ipynb new file mode 100644 index 00000000..7f5ec958 --- /dev/null +++ b/docs/notebooks/extending.ipynb @@ -0,0 +1,111 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "25c5246a", + "metadata": {}, + "source": [ + "# Extending SeisFlows" + ] + }, + { + "cell_type": "raw", + "id": "e38c3935", + "metadata": {}, + "source": [ + ".. note::\n", + " Page Under Construction\n", + " \n", + "SeisFlows works on the object oriented programming principal of inheritance.\n", + "See the `inheritance `__ page for background. This allows\n", + "Users to extend the package to work with other systems and solvers, or modify\n", + "its behavior to suit the problem at hand." + ] + }, + { + "cell_type": "markdown", + "id": "5f871efa", + "metadata": {}, + "source": [ + "## Overriding SeisFlows with your own subclass\n", + "\n", + "If the existing modules of SeisFlows do not suit your needs, you may need to override them with your own sub classes. A common example of when you might need to do this is to override the system subclasses to tailor SeisFlows to your specific cluster. \n", + "\n", + "In this example SeisFlows already contains a Slurm system module, and has overriding sub-classes for Slurm-derived systems including Chinook (University of Alaska Fairbanks), Maui (New Zealand eScience\n", + "Infrastucture) and Frontera (Texas Advanced Computing Center). Any new Slurm systems will need write new subclasses to take advantage of the existing structure.\n", + "\n", + "Below we provide some examples of editing existing SeisFlows modules for modified performance. We'll first start off with a modified Slurm system which defines SeisFlows interaction with Maui, a New Zealand cluster." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f9ef90e2", + "metadata": {}, + "outputs": [], + "source": [ + "from seisflows.system.slurm import Slurm\n", + "\n", + "\n", + "class Maui(Slurm):\n", + " \"\"\"\n", + " System Maui\n", + " Slurm-based interaction with New Zealand HPC, Maui\n", + " \n", + " Parameters\n", + " ----------\n", + " \n", + " Paths\n", + " -----\n", + " \n", + " ***\n", + " \"\"\"\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "23c9d7c5", + "metadata": {}, + "source": [ + "## Writing your own Base class from scratch\n", + "\n", + "Less likely, but also still a possibility, is that you will have to write your\n", + "own Base class which defines foundational capabilities. One example of this is\n", + "extending SeisFlows to interact with other numerical solvers. Currently\n", + "SeisFlows is set up to work with SPECFEM2D/3D/3D_GLOBE. To allow Seisflows\n", + "to work with other solvers, one would need to write a new Base class that\n", + "defines SeisFlows' interaction behavior with this solver." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1e0e7716", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/notebooks/inheritance.ipynb b/docs/notebooks/inheritance.ipynb index 6827b765..a68e64ff 100644 --- a/docs/notebooks/inheritance.ipynb +++ b/docs/notebooks/inheritance.ipynb @@ -362,7 +362,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/docs/notebooks/parameter_file.ipynb b/docs/notebooks/parameter_file.ipynb index bad3a0bb..bc1567b5 100644 --- a/docs/notebooks/parameter_file.ipynb +++ b/docs/notebooks/parameter_file.ipynb @@ -6,16 +6,43 @@ "source": [ "# Parameter File\n", "\n", - "The parameter file is the central control object for a SeisFlows3 workflow. Here we take a look at the anatomy of a parameter file. Parameter files in SeisFlows3 are formatted in the [YAML format (YAML Ain't Markup Language)](https://pyyaml.org/wiki/PyYAMLDocumentation).\n", + "The parameter file is the central control object for a SeisFlows workflow. Here we take a look at the anatomy of a parameter file. Parameter files in SeisFlows are formatted in the [YAML format (YAML Ain't Markup Language)](https://pyyaml.org/wiki/PyYAMLDocumentation).\n", "\n", "## Template\n", "\n", - "Each workflow starts with the module-only template parameter file which defines the core modules which make up the package. Running `seisflows setup` from the command line will create this file. " + "Each workflow starts with the module-only template parameter file which defines the core modules of the package. Your choices for each of these modules will determine which paths and parameters are included in the full parameter file. Running `seisflows setup` from the command line will create the template file. " ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "usage: seisflows setup [-h] [-f]\r\n", + "\r\n", + "In the specified working directory, copy template parameter file containing\r\n", + "only module choices, and symlink source code for both the base and super\r\n", + "repositories for easy edit access. If a parameter file matching the provided\r\n", + "name exists in the working directory, a prompt will appear asking the user if\r\n", + "they want to overwrite.\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n", + " -f, --force automatically overwrites existing parameter file\r\n" + ] + } + ], + "source": [ + "! seisflows setup -h" + ] + }, + { + "cell_type": "code", + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -32,7 +59,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -41,12 +68,12 @@ "text": [ "# //////////////////////////////////////////////////////////////////////////////\r\n", "#\r\n", - "# SeisFlows3 YAML Parameter File\r\n", + "# SeisFlows YAML Parameter File\r\n", "#\r\n", "# //////////////////////////////////////////////////////////////////////////////\r\n", "#\r\n", "# Modules correspond to the structure of the source code, and determine\r\n", - "# SeisFlows3' behavior at runtime. Each module requires its own sub-parameters.\r\n", + "# SeisFlows' behavior at runtime. Each module requires its own sub-parameters.\r\n", "#\r\n", "# .. rubric::\r\n", "# - To determine available options for modules listed below, run:\r\n", @@ -58,19 +85,17 @@ "#\r\n", "# MODULES\r\n", "# ///////\r\n", - "# WORKFLOW (str): The method for running SeisFlows3; equivalent to main()\r\n", - "# SOLVER (str): External numerical solver to use for waveform simulations\r\n", - "# SYSTEM (str): Computer architecture of the system being used\r\n", - "# OPTIMIZE (str): Optimization algorithm for the inverse problem\r\n", - "# PREPROCESS (str): Preprocessing schema for waveform data\r\n", - "# POSTPROCESS (str): Postprocessing schema for kernels and gradients\r\n", + "# workflow (str): The types and order of functions for running SeisFlows\r\n", + "# system (str): Computer architecture of the system being used\r\n", + "# solver (str): External numerical solver to use for waveform simulations\r\n", + "# preprocess (str): Preprocessing schema for waveform data\r\n", + "# optimize (str): Optimization algorithm for the inverse problem\r\n", "# ==============================================================================\r\n", - "WORKFLOW: inversion\r\n", - "SOLVER: specfem2d\r\n", - "SYSTEM: workstation\r\n", - "OPTIMIZE: LBFGS \r\n", - "PREPROCESS: base\r\n", - "POSTPROCESS: base\r\n" + "workflow: forward\r\n", + "system: workstation\r\n", + "solver: specfem2d\r\n", + "preprocess: default\r\n", + "optimize: gradient\r\n" ] } ], @@ -82,67 +107,62 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### How do I choose my modules?\n", + "### How do I choose modules?\n", "\n", - "As seen above, each of the modules comes with a default value. But you may want to run a migration, not an inversion. Or run with SPECFEM3D not 2D. As stated in the comments at the top of the file, the `seisflows print modules` command lists out all available options. Don't see an option that works for you? Learn to extend the SeisFlows3 package here: **!!! docs page link here !!!**" + "As seen above, each of the modules comes with a default value which represents the base class* for this module. " + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "* For an explanation of base classes and Python inheritance, see the `inheritance page `__ " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These default values are likely not suitable for all, e.g., if you want to run an inversion and not a forward workflow, or use SPECFEM3D not SPECFEM2D. To see all available module options, use the `seisflows print modules` command." ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " SEISFLOWS3 MODULES \r\n", - " ////////////////// \r\n", - "'+': package, '-': module, '*': class\r\n", + " SEISFLOWS MODULES \r\n", + " ///////////////// \r\n", + "'-': module, '*': class\r\n", "\r\n", - "+ SYSTEM\r\n", - " - seisflows\r\n", - " * base\r\n", - " * cluster\r\n", - " * lsf\r\n", - " * slurm\r\n", - " * workstation\r\n", - " - seisflows-super\r\n", - " * chinook\r\n", - " * maui\r\n", - "+ PREPROCESS\r\n", - " - seisflows\r\n", - " * base\r\n", - " * pyatoa\r\n", - " - seisflows-super\r\n", - " * pyatoa_nz\r\n", - "+ SOLVER\r\n", - " - seisflows\r\n", - " * base\r\n", - " * specfem2d\r\n", - " * specfem3d\r\n", - " * specfem3d_globe\r\n", - " - seisflows-super\r\n", - " * specfem3d_maui\r\n", - "+ POSTPROCESS\r\n", - " - seisflows\r\n", - " * base\r\n", - " - seisflows-super\r\n", - "+ OPTIMIZE\r\n", - " - seisflows\r\n", - " * LBFGS\r\n", - " * NLCG\r\n", - " * base\r\n", - " - seisflows-super\r\n", - "+ WORKFLOW\r\n", - " - seisflows\r\n", - " * base\r\n", - " * inversion\r\n", - " * migration\r\n", - " * test\r\n", - " - seisflows-super\r\n", - " * thrifty_inversion\r\n", - " * thrifty_maui\r\n" + "- workflow\r\n", + " * forward\r\n", + " * inversion\r\n", + " * migration\r\n", + "- system\r\n", + " * chinook\r\n", + " * cluster\r\n", + " * frontera\r\n", + " * lsf\r\n", + " * maui\r\n", + " * slurm\r\n", + " * workstation\r\n", + "- solver\r\n", + " * specfem\r\n", + " * specfem2d\r\n", + " * specfem3d\r\n", + " * specfem3d_globe\r\n", + "- preprocess\r\n", + " * default\r\n", + " * pyaflowa\r\n", + "- optimize\r\n", + " * LBFGS\r\n", + " * NLCG\r\n", + " * gradient\r\n" ] } ], @@ -156,7 +176,14 @@ "source": [ "### How do I change modules?\n", "\n", - "Feel free to use any old text editor to edit the YAML file, or you can use the `seisflows par` command to make changes directly from the command line. For example, say we want to use SPECFEM3D" + "Feel free to use any text editor, or use the `seisflows par` command to make changes directly from the command line. For example, say we want to use SPECFEM3D as our solver module. " + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "This is also covered in the `command line tool page `__" ] }, { @@ -168,7 +195,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "SOLVER: specfem2d -> specfem3d\r\n" + "solver: specfem2d -> specfem3d\r\n" ] } ], @@ -186,7 +213,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "SOLVER: specfem3d\r\n" + "solver: specfem3d\r\n" ] } ], @@ -199,9 +226,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### How do I get to a full parameter file?\n", + "### How do I create a full parameter file?\n", "\n", - "The module-only parameter file serves as as a template for dynamically generating a full parameter file. Since each module requires it's own unique set of parameters and paths, each parameter file will look different. We can use the `seisflows configure` command to complete our parmater file, based on the chosen modules." + "The module-only parameter file serves as as a template for dynamically generating the full parameter file. Since each module requires it's own unique set of parameters and paths, each parameter file will look different. We use the `seisflows configure` command to complete the file." ] }, { @@ -213,10 +240,31 @@ "name": "stdout", "output_type": "stream", "text": [ - "filling parameters.yaml w/ default values\r\n" + "usage: seisflows configure [-h] [-a]\r\n", + "\r\n", + "SeisFlows parameter files will vary depending on chosen modules and their\r\n", + "respective required parameters. This function will dynamically traverse the\r\n", + "source code and generate a template parameter file based on module choices.\r\n", + "The resulting file incldues docstrings and type hints for each parameter.\r\n", + "Optional parameters will be set with default values and required parameters\r\n", + "and paths will be marked appropriately. Required parameters must be set before\r\n", + "a workflow can be submitted.\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n", + " -a, --absolute_paths Set default paths relative to cwd\r\n" ] } ], + "source": [ + "! seisflows configure -h" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], "source": [ "! seisflows configure" ] @@ -225,9 +273,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Anatomy of the parameter file\n", + "Below we will take a look at the parameter file we just created" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Anatomy of a parameter file\n", "\n", - "As we will see below, the parameter file has now been generated. Each module will define its own section, separated by a header of comments. Within each header, parameter names, types and descriptions are listed. At the bottom of the parameter file, there is a section defining paths required by the workflow. Section headers will look something: " + "Each of SeisFlows' modules will define its own section in the parameter file, separated by a header of comments representing the docstring. Within each header, parameter names, types and descriptions are listed. At the bottom of the parameter file, there is a section defining paths required by SeisFlows. Section headers will look something: " ] }, { @@ -237,18 +292,22 @@ "outputs": [], "source": [ "# =============================================================================\n", - "# MODULE\n", - "# ////// \n", - "# PARAMETER_NAME (type):\n", - "# Description\n", + "# MODULE\n", + "# ------\n", + "# Module description \n", + "#\n", + "# Parameters\n", + "# ----------\n", + "# :type parameter: type\n", + "# :param paramter: description\n", "# ...\n", "# =============================================================================\n", - "PARAMETER_NAME: parameter_value" + "parameter: value" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -257,12 +316,12 @@ "text": [ "# //////////////////////////////////////////////////////////////////////////////\r\n", "#\r\n", - "# SeisFlows3 YAML Parameter File\r\n", + "# SeisFlows YAML Parameter File\r\n", "#\r\n", "# //////////////////////////////////////////////////////////////////////////////\r\n", "#\r\n", "# Modules correspond to the structure of the source code, and determine\r\n", - "# SeisFlows3' behavior at runtime. Each module requires its own sub-parameters.\r\n", + "# SeisFlows' behavior at runtime. Each module requires its own sub-parameters.\r\n", "#\r\n", "# .. rubric::\r\n", "# - To determine available options for modules listed below, run:\r\n", @@ -274,67 +333,67 @@ "#\r\n", "# MODULES\r\n", "# ///////\r\n", - "# WORKFLOW (str): The method for running SeisFlows3; equivalent to main()\r\n", - "# SOLVER (str): External numerical solver to use for waveform simulations\r\n", - "# SYSTEM (str): Computer architecture of the system being used\r\n", - "# OPTIMIZE (str): Optimization algorithm for the inverse problem\r\n", - "# PREPROCESS (str): Preprocessing schema for waveform data\r\n", - "# POSTPROCESS (str): Postprocessing schema for kernels and gradients\r\n", + "# workflow (str): The types and order of functions for running SeisFlows\r\n", + "# system (str): Computer architecture of the system being used\r\n", + "# solver (str): External numerical solver to use for waveform simulations\r\n", + "# preprocess (str): Preprocessing schema for waveform data\r\n", + "# optimize (str): Optimization algorithm for the inverse problem\r\n", "# ==============================================================================\r\n", - "WORKFLOW: inversion\r\n", - "SOLVER: specfem3d\r\n", - "SYSTEM: workstation\r\n", - "OPTIMIZE: LBFGS \r\n", - "PREPROCESS: base\r\n", - "POSTPROCESS: base\r\n", - "\r\n", + "workflow: forward\r\n", + "system: workstation\r\n", + "solver: specfem3d\r\n", + "preprocess: default\r\n", + "optimize: gradient\r\n", "# =============================================================================\r\n", - "# SYSTEM \r\n", - "# ////// \r\n", - "# TITLE (str):\r\n", - "# The name used to submit jobs to the system, defaults to the name of the\r\n", - "# working directory\r\n", - "# PRECHECK (list):\r\n", - "# A list of parameters that will be displayed to stdout before 'submit' or\r\n", - "# 'resume' is run. Useful for manually reviewing important parameters prior\r\n", - "# to system submission\r\n", - "# LOG_LEVEL (str):\r\n", - "# Verbosity output of SF3 logger. Available from least to most verbosity:\r\n", - "# 'CRITICAL', 'WARNING', 'INFO', 'DEBUG'; defaults to 'DEBUG'\r\n", - "# VERBOSE (bool):\r\n", - "# Level of verbosity provided to the output log. If True, log statements\r\n", - "# will declare what module/class/function they are being called from.\r\n", - "# Useful for debugging but also very noisy.\r\n", - "# MPIEXEC (str):\r\n", - "# Function used to invoke executables on the system. For example 'srun' on\r\n", - "# SLURM systems, or './' on a workstation. If left blank, will guess based\r\n", - "# on the system.\r\n", - "# NTASK (int):\r\n", - "# Number of separate, individual tasks. Also equal to the number of desired\r\n", - "# sources in workflow\r\n", - "# NPROC (int):\r\n", - "# Number of processor to use for each simulation\r\n", + "#\r\n", + "# Forward Workflow\r\n", + "# ----------------\r\n", + "# Run forward solver in parallel and (optionally) calculate\r\n", + "# data-synthetic misfit and adjoint sources.\r\n", + "#\r\n", + "# Parameters\r\n", + "# ----------\r\n", + "# :type modules: list of module\r\n", + "# :param modules: instantiated SeisFlows modules which should have been\r\n", + "# generated by the function `seisflows.config.import_seisflows` with a\r\n", + "# parameter file generated by seisflows.configure\r\n", + "# :type data_case: str\r\n", + "# :param data_case: How to address 'data' in the workflow, available options:\r\n", + "# 'data': real data will be provided by the user in\r\n", + "# `path_data/{source_name}` in the same format that the solver will\r\n", + "# produce synthetics (controlled by `solver.format`) OR\r\n", + "# synthetic': 'data' will be generated as synthetic seismograms using\r\n", + "# a target model provided in `path_model_true`. If None, workflow will\r\n", + "# not attempt to generate data.\r\n", + "# :type export_traces: bool\r\n", + "# :param export_traces: export all waveforms that are generated by the\r\n", + "# external solver to `path_output`. If False, solver traces stored in\r\n", + "# scratch may be discarded at any time in the workflow\r\n", + "# :type export_residuals: bool\r\n", + "# :param export_residuals: export all residuals (data-synthetic misfit) that\r\n", + "# are generated by the external solver to `path_output`. If False,\r\n", + "# residuals stored in scratch may be discarded at any time in the workflow\r\n", + "#\r\n", + "# \r\n", "# =============================================================================\r\n", - "TITLE: docs\r\n", - "PRECHECK:\r\n", - " - TITLE\r\n", - "LOG_LEVEL: DEBUG\r\n", - "VERBOSE: False\r\n", - "MPIEXEC:\r\n", - "NTASK: 1\r\n", - "NPROC: 1\r\n", - "\r\n", + "data_case: data\r\n", + "export_traces: False\r\n", + "export_residuals: False\r\n", "# =============================================================================\r\n", - "# PREPROCESS \r\n", - "# ////////// \r\n", - "# MISFIT (str):\r\n", - "# Misfit function for waveform comparisons, for available see\r\n", - "# seisflows.plugins.misfit\r\n", - "# BACKPROJECT (str):\r\n", - "# Backprojection function for migration, for available see\r\n", - "# seisflows.plugins.adjoint\r\n", - "# NORMALIZE (list):\r\n", - "# Data normalization parameters used to normalize the amplitudes of\r\n" + "#\r\n", + "# Workstation System\r\n", + "# ------------------\r\n", + "# Runs tasks in serial on a local machine.\r\n", + "#\r\n", + "# Parameters\r\n", + "# ----------\r\n", + "# :type ntask: int\r\n", + "# :param ntask: number of individual tasks/events to run during workflow.\r\n", + "# Must be <= the number of source files in `path_specfem_data`\r\n", + "# :type nproc: int\r\n", + "# :param nproc: number of processors to use for each simulation\r\n", + "# :type log_level: str\r\n", + "# :param log_level: logger level to pass to logging module.\r\n" ] } ], @@ -344,310 +403,65 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "# =============================================================================\r\n", - "# PATHS \r\n", - "# ///// \r\n", - "# SCRATCH:\r\n", - "# scratch path to hold temporary data during workflow\r\n", - "# OUTPUT:\r\n", - "# directory to save workflow outputs to disk\r\n", - "# SYSTEM:\r\n", - "# scratch path to hold any system related data\r\n", - "# LOCAL:\r\n", - "# path to local data to be used during workflow\r\n", - "# LOGFILE:\r\n", - "# the main output log file where all processes will track their status\r\n", - "# SOLVER:\r\n", - "# scratch path to hold solver working directories\r\n", - "# SPECFEM_BIN:\r\n", - "# path to the SPECFEM binary executables\r\n", - "# SPECFEM_DATA:\r\n", - "# path to the SPECFEM DATA/ directory containing the 'Par_file', 'STATIONS'\r\n", - "# file and 'CMTSOLUTION' files\r\n", - "# DATA:\r\n", - "# path to data available to workflow\r\n", - "# MASK:\r\n", - "# Directory to mask files for gradient masking\r\n", - "# OPTIMIZE:\r\n", - "# scratch path to store data related to nonlinear optimization\r\n", - "# MODEL_INIT:\r\n", - "# location of the initial model to be used for workflow\r\n", - "# MODEL_TRUE:\r\n", - "# Target model to be used for PAR.CASE == 'synthetic'\r\n", - "# FUNC:\r\n", - "# scratch path to store data related to function evaluations\r\n", - "# GRAD:\r\n", - "# scratch path to store data related to gradient evaluations\r\n", - "# HESS:\r\n", - "# scratch path to store data related to Hessian evaluations\r\n", - "# =============================================================================\r\n", - "PATHS:\r\n", - " SCRATCH: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch\r\n", - " OUTPUT: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/output\r\n", - " SYSTEM: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/system\r\n", - " LOCAL:\r\n", - " LOGFILE: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/output_sf3.txt\r\n", - " SOLVER: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/solver\r\n", - " SPECFEM_BIN: !!! REQUIRED PATH !!!\r\n", - " SPECFEM_DATA: !!! REQUIRED PATH !!!\r\n", - " DATA:\r\n", - " MASK:\r\n", - " OPTIMIZE: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/optimize\r\n", - " MODEL_INIT: !!! REQUIRED PATH !!!\r\n", - " MODEL_TRUE:\r\n", - " FUNC: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/scratch\r\n", - " GRAD: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/evalgrad\r\n", - " HESS: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/evalhess\r\n" + "path_model_true: null\r\n", + "path_state_file: /Users/Chow/Repositories/seisflows/docs/notebooks/sfstate.txt\r\n", + "path_data: null\r\n", + "path_par_file: /Users/Chow/Repositories/seisflows/docs/notebooks/parameters.yaml\r\n", + "path_log_files: /Users/Chow/Repositories/seisflows/docs/notebooks/logs\r\n", + "path_output_log: /Users/Chow/Repositories/seisflows/docs/notebooks/sflog.txt\r\n", + "path_specfem_bin: null\r\n", + "path_specfem_data: null\r\n", + "path_solver: /Users/Chow/Repositories/seisflows/docs/notebooks/scratch/solver\r\n", + "path_preconditioner: null\r\n" ] } ], "source": [ - "! tail --lines=54 parameters.yaml" + "! tail parameters.yaml" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### How do I know what parameters need to be set?\n", - "\n", - "> **NOTE**: Required parameters that can not be set to default values will be listed as `!!! REQUIRED PARAMETER !!!`\n", + "### How do I know how parameters need to be set?\n", "\n", - "We can check the required paths and parameters manually by scrolling through the parameter file, or we can use the `seisflows par --required` command to list them out all at once." + "Most SeisFlows parameters come with reasonable default values. The docstrings headers will also list the expected type and available options (if any). You may also run the `seisflows check` command which verifies that parameters are set correctly." ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "!!! REQUIRED PARAMETER !!!\r\n", - "==========================\r\n", - "\tMATERIALS\r\n", - "\tDENSITY\r\n", - "\tATTENUATION\r\n", - "\tNT\r\n", - "\tDT\r\n", - "\tFORMAT\r\n", - "\tCASE\r\n", - "\tEND\r\n", - "!!! REQUIRED PATH !!!\r\n", - "=====================\r\n", - "\tSPECFEM_BIN\r\n", - "\tSPECFEM_DATA\r\n", - "\tMODEL_INIT\r\n" - ] - } - ], - "source": [ - "! seisflows par --required" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Checking parameter validity\n", - "\n", - "You might be asking, how do I know if my parameters are set correctly? SeisFlows3 modules feature check() functions which dictate correct parameter values. You can run `seisflows init` to run these check() functions. Because we have required parameters still left unset in our parameter file, we expect the `seisflows init` function to throw an error." - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "================================================================================\r\n", - " PARAMETER FILE READ ERROR \r\n", - " ///////////////////////// \r\n", - "Please check that your parameter file is properly formatted in the YAML format.\r\n", - "If you have just run 'seisflows configure', you may have some required\r\n", - "parameters that will need to be filled out before you can proceed. The error\r\n", - "message is:\r\n", "\r\n", - "could not determine a constructor for the tag 'tag:yaml.org,2002:!'\r\n", - " in \"parameters.yaml\", line 147, column 12\r\n", + "================================================================================\r\n", + " PARAMETER ERRROR \r\n", + " //////////////// \r\n", + "`path_specfem_bin` must exist and must point to directory containing SPECFEM\r\n", + "executables\r\n", "================================================================================\r\n" ] } ], "source": [ - "! seisflows init" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's set some random variables for the required parameters with the `seisflows par` command and try again." - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "MATERIALS: !!! REQUIRED PARAMETER !!! -> elastic\n", - "DENSITY: !!! REQUIRED PARAMETER !!! -> constant\n", - "ATTENUATION: !!! REQUIRED PARAMETER !!! -> False\n", - "NT: !!! REQUIRED PARAMETER !!! -> 100\n", - "DT: !!! REQUIRED PARAMETER !!! -> .05\n", - "FORMAT: !!! REQUIRED PARAMETER !!! -> ascii\n", - "CASE: !!! REQUIRED PARAMETER !!! -> data\n", - "END: !!! REQUIRED PARAMETER !!! -> 1\n", - "SPECFEM_BIN: !!! REQUIRED PATH !!! -> ./\n", - "SPECFEM_DATA: !!! REQUIRED PATH !!! -> ./\n", - "MODEL_INIT: !!! REQUIRED PATH !!! -> ./\n" - ] - } - ], - "source": [ - "! seisflows par materials elastic\n", - "! seisflows par density constant\n", - "! seisflows par attenuation False\n", - "! seisflows par nt 100\n", - "! seisflows par dt .05\n", - "! seisflows par format ascii\n", - "! seisflows par case data\n", - "! seisflows par end 1\n", - "! seisflows par specfem_bin ./\n", - "! seisflows par specfem_data ./\n", - "! seisflows par model_init ./" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "instantiating SeisFlows3 working state in directory: output\r\n" - ] - } - ], - "source": [ - "! seisflows init" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Of course we knew that the above parameters were acceptable. But what if we input an unacceptable parameter into the parameter file and try again?" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "MATERIALS: elastic -> visibily_incorrect_value\n", - "================================================================================\n", - " MODULE CHECK ERROR \n", - " ////////////////// \n", - "seisflows.config module check failed with:\n", - "\n", - "solver: MATERIALS must be in ['ELASTIC', 'ACOUSTIC', 'ISOTROPIC', 'ANISOTROPIC']\n", - "================================================================================\n" - ] - } - ], - "source": [ - "! rm -r output/\n", - "! seisflows par materials visibily_incorrect_value\n", - "! seisflows init" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And voila, the module check has thrown an error, and told us (the User) how to properly set the value of the materials parameter. Hopefully a combination of thorough explanations in the parameter file section headers, and error catching with `seisflows init` makes crafting your own parameter file a smooth process." - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\r\n", - "# =============================================================================\r\n", - "# SOLVER \r\n", - "# ////// \r\n", - "# MATERIALS (str):\r\n", - "# Material parameters used to define model. Available: ['ELASTIC': Vp, Vs,\r\n", - "# 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC']\r\n", - "# DENSITY (str):\r\n", - "# How to treat density during inversion. Available: ['CONSTANT': Do not\r\n", - "# update density, 'VARIABLE': Update density]\r\n", - "# ATTENUATION (str):\r\n", - "# If True, turn on attenuation during forward simulations, otherwise set\r\n", - "# attenuation off. Attenuation is always off for adjoint simulations.\r\n", - "# COMPONENTS (str):\r\n", - "# Components used to generate data, formatted as a single string, e.g. ZNE\r\n", - "# or NZ or E\r\n", - "# SOLVERIO (int):\r\n", - "# The format external solver files. Available: ['fortran_binary', 'adios']\r\n", - "# NT (float):\r\n", - "# Number of time steps set in the SPECFEM Par_file\r\n", - "# DT (float):\r\n", - "# Time step or delta set in the SPECFEM Par_file\r\n", - "# FORMAT (float):\r\n", - "# Format of synthetic waveforms used during workflow, available options:\r\n", - "# ['ascii', 'su']\r\n", - "# SOURCE_PREFIX (str):\r\n", - "# Prefix of SOURCE files in path SPECFEM_DATA. Available ['CMTSOLUTION',\r\n", - "# FORCESOLUTION']\r\n", - "# =============================================================================\r\n", - "MATERIALS: visibily_incorrect_value\r\n", - "DENSITY: constant\r\n", - "ATTENUATION: False\r\n", - "COMPONENTS: ZNE\r\n", - "SOLVERIO: fortran_binary\r\n", - "NT: 100\r\n", - "DT: .05\r\n", - "FORMAT: ascii\r\n", - "SOURCE_PREFIX: CMTSOLUTION\r\n" - ] - } - ], - "source": [ - "! head -155 parameters.yaml | tail --lines=38" + "! seisflows check" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -657,9 +471,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python (docs)", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "docs" + "name": "python3" }, "language_info": { "codemirror_mode": { diff --git a/docs/notebooks/specfem2d_example.ipynb b/docs/notebooks/specfem2d_example.ipynb index 9c7482af..aaeebce0 100644 --- a/docs/notebooks/specfem2d_example.ipynb +++ b/docs/notebooks/specfem2d_example.ipynb @@ -4,644 +4,412 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Specfem2D workstation example\n", + "# Specfem2D Workstation Examples\n", "\n", - "To demonstrate the inversion capabilities of SeisFlows3, we will run a __Specfem2D synthetic-synthetic example__ on a __local machine__ (Linux workstation running CentOS 7). Many of the setup steps here will likely be unique to our OS and workstation, but hopefully they may serve as templates for new Users wanting to explore SeisFlows3. \n", + "SeisFlows comes with some __Specfem2D synthetic examples__ to showcase the software in action. These examples are meant to be run on a __local machine__ (tested on a Linux workstation running CentOS 7, and an Apple Laptop running macOS 10.14.6).\n", "\n", - "The numerical solver we will use is: [SPECFEM2D](https://geodynamics.org/cig/software/specfem2d/). We'll also be working in our `seisflows` [Conda](https://docs.conda.io/en/latest/) environment, see the installation documentation page for instructions on how to install and activate the required Conda environment.\n", + "The numerical solver we will use is: [SPECFEM2D](https://geodynamics.org/cig/software/specfem2d/). We'll also be working in our `seisflows` [Conda](https://docs.conda.io/en/latest/) environment, see the installation section on the home page for instructions on how to install and activate the required Conda environment. \n", "\n", "-----------------------------------" ] }, { - "cell_type": "markdown", + "cell_type": "raw", "metadata": {}, "source": [ - "## Option 1: Automated run\n", - "\n", - "We have set up this example to run using a single command line argument. The following command will run an example script which will (1) download and compile SPECFEM2D, (2) setup a SPECFEM2D working directory to generate initial and target models, and (3) Run a SeisFlows3 inversion. " + ".. warning:: \n", + " If you do not have a compiled version of SPECFEM2D, then each example will attempt to automatically download and compile SPECFEM2D. This step may fail if you do not have software required by SPECFEM2D, if there are issues with the SPECFEM2D repository itself, or if the configuration and compiling steps fail. If you run any issues, it is recommended that you manually install and compile SPECFEM2D, and directly provide its path to this example problem using the -r or --specfem2d_repo flags (shown below)." ] }, { - "cell_type": "raw", + "cell_type": "code", + "execution_count": 1, "metadata": {}, + "outputs": [], "source": [ - ".. warning:: \n", - " This example attempts to automatically download and compile SPECFEM2D. This step may fail if you are software required by SPECFEM2D, there are issues with the SPECFEM2D repository itself, or the configuration and compiling steps fail. If you run any issues, it is recommended that you manually install and compile SPECFEM2D, and directly provide its path to this example problem when prompted." + "from IPython.display import Image # Used to display .png files in the notebook/docs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example \\#1: Homogenous Halfspace Inversion\n", + "Example \\#1 runs a 1-iteration synthetic inversion with 1 event and 1 station, used to illustrate misfit kernels and updated models in adjoint tomography.\n", + "\n", + "The starting/initial model (*MODEL_INIT*) and target/true model (*MODEL_TRUE*) are used to generate synthetics and (synthetic) data, respectively. Both models are homogeneous halfspace models defined by velocity (Vp, Vs) and density ($\\rho$) with slightly varying P- and S-wave velocity values (**INIT**: $V_p$=5.8km/s, $V_s$=3.5km/s; **TRUE**: $V_p$=5.9km/s, $V_s$=3.55km/s). Only Vp and Vs are updated during the example.\n", + "\n", + "Misfit during Example \\#1 is defined by a 'traveltime' misfit using the `Default` preprocessing module. It also uses a `gradient-descent` optimization algorithm paired with a bracketing line search. No smoothing/regularization is applied to the gradient." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Run example: ex1_specfem2d_workstation_inversion\n", - "\n", - " @@@@@@@@@@ \n", - " .@@@@. .%&( %@. \n", - " @@@@ @@@@ &@@@@@@ ,%@ \n", - " @@@@ @@@, /@@ @ \n", - " @@@ @@@@ @@@ @ \n", - " @@@@ @@@@ @@@ @ @ \n", - " @@@ @@@@ ,@@@ @ @ \n", - " @@@@ @@@@ @@@@ @@ @ @\n", - " @@@@ @@@@@ @@@@@ @@@ @@ @\n", - " @@@@ @@@@@ @@@@@@@@@@@@@@ @@ @\n", - " @@@@ @@@@@@ @@@& @@@ @ \n", - " @@@@@ @@@@@@@@ %@@@@# @@ \n", - " @@@@# @@@@@@@@@@@@@@@@@ @@ \n", - " &@@@@@ @@@@( @@& \n", - " @@@@@@@ /@@@@ \n", - " @@@@@@@@@@@@@@@@@\n", - " @@@@@@@@@@ \n", - "\n", - "================================================================================\n", - " SEISFLOWS3 EXAMPLE 1 \n", - " //////////////////// \n", - "This is a [SPECFEM2D] [WORKSTATION] example, which will run 2 iterations of an\n", - "inversion to assess misfit between two homogeneous halfspace models with\n", - "slightly different velocities, 3 sources and 1 receiver. The tasks involved\n", - "include:\n", - "\n", - "1. (optional) Download, configure, compile SPECFEM2D\n", - "2. Set up a SPECFEM2D working directory\n", - "3. Generate starting model from Tape2007 example\n", - "4. Generate target model w/ perturbed starting model\n", - "5. Set up a SeisFlows3 working directory\n", - "6. Run 2 iterations of an inversion workflow\n", - "================================================================================\n", - "If you have already downloaded SPECMFE2D, please input its path here. If blank,\n", - "this example will pull the latest version from GitHub and attempt to configure\n", - "and make the binaries: >" + "No existing SPECFEM2D repo given, default to: /home/bchow/REPOSITORIES/seisflows/docs/notebooks/specfem2d\r\n", + "\r\n", + " @@@@@@@@@@ \r\n", + " .@@@@. .%&( %@. \r\n", + " @@@@ @@@@ &@@@@@@ ,%@ \r\n", + " @@@@ @@@, /@@ @ \r\n", + " @@@ @@@@ @@@ @ \r\n", + " @@@@ @@@@ @@@ @ @ \r\n", + " @@@ @@@@ ,@@@ @ @ \r\n", + " @@@@ @@@@ @@@@ @@ @ @\r\n", + " @@@@ @@@@@ @@@@@ @@@ @@ @\r\n", + " @@@@ @@@@@ @@@@@@@@@@@@@@ @@ @\r\n", + " @@@@ @@@@@@ @@@& @@@ @ \r\n", + " @@@@@ @@@@@@@@ %@@@@# @@ \r\n", + " @@@@# @@@@@@@@@@@@@@@@@ @@ \r\n", + " &@@@@@ @@@@( @@& \r\n", + " @@@@@@@ /@@@@ \r\n", + " @@@@@@@@@@@@@@@@@\r\n", + " @@@@@@@@@@ \r\n", + "\r\n", + "\r\n", + "================================================================================\r\n", + " SEISFLOWS EXAMPLE 1 \r\n", + " /////////////////// \r\n", + "This is a [SPECFEM2D] [WORKSTATION] example, which will run an inversion to\r\n", + "assess misfit between two homogeneous halfspace models with slightly different\r\n", + "velocities. [1 events, 1 station, 1 iterations]. The tasks involved include:\r\n", + "\r\n", + "1. (optional) Download, configure, compile SPECFEM2D\r\n", + "2. [Setup] a SPECFEM2D working directory\r\n", + "3. [Setup] starting model from 'Tape2007' example\r\n", + "4. [Setup] target model w/ perturbed starting model\r\n", + "5. [Setup] a SeisFlows working directory\r\n", + "6. [Run] the inversion workflow\r\n", + "================================================================================\r\n" ] } ], "source": [ - "seisflows examples run 1" + "! seisflows examples 1 # print example help dialogue" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "--------------\n", - "## Option 2: Manual run\n", + "### Running the example\n", "\n", - "The notebook below details a walkthrough of the automated run shown above. This is meant for those who want to understand what is going on under the hood. You are welcome to follow along on your workstation. The following Table of Contents outlines the steps we will take in this tutorial:\n", - "\n" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - ".. warning:: \n", - " Navigation links will not work outside of Jupyter. Please use the navigation bar to the left." + "You can either setup and run the example in separate tasks using the `seisflows examples setup` and `seisflows submit` commands, or by directly running the example after setup using the `examples run` command (illustrated below). \n", + "\n", + "Use the `-r` or `--specfem2d_repo` flag to point SeisFlows at an existing SPECFEM2D/ repository (with compiled binaries) if available. If not given, SeisFlows will automatically download, configure and compile SPECFEM2D in your current working directory." ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "metadata": {}, + "outputs": [], "source": [ - "1. __[Setup SPECFEM2D](#1.-Setup-SPECFEM2D)__ \n", - " a. [Download and compile codebase](#1a.-Download-and-compile-codebase*) \n", - " b. [Create a separate SPECFEM2D working directory](#1b.-Create-a-separate-SPECFEM2D-working-directory) \n", - " c. [Generate initial and target models](#1c.-Generate-initial-and-target-models) \n", - "\n", - "2. __[Initialize SeisFlows3 (SF3)](#2.-Initialize-SeisFlows3-(SF3))__ \n", - " a. [SF3 working directory and parameter file](#2a.-SF3-working-directory-and-parameter-file) \n", - " b. [Initialize SF3 working state](#2b.-Initialize-SF3-working-state) \n", - "\n", - "3. __[Run SeisFlows3](#2.-Run-SeisFlows3)__ \n", - " a. [Forward simulations](#3a.-Forward-simulations) \n", - " b. [Exploring the SF3 directory structure](#3b.-Exploring-the-SF3-directory-structure) \n", - " c. [Adjoint simulations](#3c.-Adjoint-simulations) \n", - " d. [Line search and model update](#3d.-Line-search-and-model-update) \n", + "# Run command with open variable to set SPECFEM2D path\n", + "! seisflows examples setup 1 -r ${PATH_TO_SPECFEM2D}\n", + "! seisflows submit\n", "\n", - "4. __[Conclusions](#4.-Conclusions)__ " + "# The following command is the same as above\n", + "! seisflows examples run 1 --specfem2d_repo ${PATH_TO_SPECFEM2D}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 1. Setup SPECFEM2D \n", - "#### 1a. Download and compile codebase (optional)\n", + "#### Running with MPI\n", "\n", - "> **NOTE**: If you have already downloaded and compiled SPECFEM2D, you can skip most of this subsection (1a). However you will need to edit the first two paths in the following cell (WORKDIR and SPECFEM2D_ORIGINAL), and execute the path structure defined in the cell.\n", - "\n", - "First we'll download and compile SPECFEM2D to generate the binaries necessary to run our simulations. We will then populate a new SPECFEM2D working directory that will be used by SeisFlows3. We'll use to Python OS module to do our filesystem processes just to keep everything in Python, but this can easily be accomplished in bash." + "If you have compiled SPECFEM2D with MPI, and have MPI installed and loaded on your system, you can run this example with MPI. To do so, you only need use the `--with_mpi` flag. By default SeisFlows will use only 1 core, but you can choose the number of processors/tasks with the `--nproc ${NPROC}` flag. The example call runs example 1 with 4 cores." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "import os\n", - "import glob\n", - "import shutil\n", - "import numpy as np" + "# Run Solver tasks with MPI on 4 cores\n", + "! seisflows examples run 1 -r ${PATH_TO_SPECFEM2D} --with_mpi --nproc 4" ] }, { - "cell_type": "code", - "execution_count": 3, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "# vvv USER MUST EDIT THE FOLLOWING PATHS vvv\n", - "WORKDIR = \"/home/bchow/Work/work/sf3_specfem2d_example\" \n", - "SPECFEM2D = \"/home/bchow/REPOSITORIES/specfem2d\"\n", - "# where WORKDIR: points to your own working directory\n", - "# and SPECFEM2D: points to an existing specfem2D repository if available (if not set as '')\n", - "# ^^^ USER MUST EDIT THE FOLLOWING PATHS ^^^\n", - "# ======================================================================================================\n", - "\n", - "# Distribute the necessary file structure of the SPECFEM2D repository that we will downloaded/reference\n", - "SPECFEM2D_ORIGINAL = os.path.join(WORKDIR, \"specfem2d\")\n", - "SPECFEM2D_BIN_ORIGINAL = os.path.join(SPECFEM2D_ORIGINAL, \"bin\")\n", - "SPECFEM2D_DATA_ORIGINAL = os.path.join(SPECFEM2D_ORIGINAL, \"DATA\")\n", - "TAPE_2007_EXAMPLE = os.path.join(SPECFEM2D_ORIGINAL, \"EXAMPLES\", \"Tape2007\")\n", - "\n", - "# The SPECFEM2D working directory that we will create separate from the downloaded repo\n", - "SPECFEM2D_WORKDIR = os.path.join(WORKDIR, \"specfem2d_workdir\")\n", - "SPECFEM2D_BIN = os.path.join(SPECFEM2D_WORKDIR, \"bin\")\n", - "SPECFEM2D_DATA = os.path.join(SPECFEM2D_WORKDIR, \"DATA\")\n", - "SPECFEM2D_OUTPUT = os.path.join(SPECFEM2D_WORKDIR, \"OUTPUT_FILES\")\n", - "\n", - "# Pre-defined locations of velocity models we will generate using the solver\n", - "SPECFEM2D_MODEL_INIT = os.path.join(SPECFEM2D_WORKDIR, \"OUTPUT_FILES_INIT\")\n", - "SPECFEM2D_MODEL_TRUE = os.path.join(SPECFEM2D_WORKDIR, \"OUTPUT_FILES_TRUE\")" + "By default the example problems assume that your MPI executable is `mpirun`. If for any reason `mpirun` is not what your system uses to call MPI, you can use the `--mpiexec ${MPIEXEC}` flag to change that." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Existing SPECMFE2D respository found, symlinking to working directory\n" - ] - } - ], + "outputs": [], "source": [ - "# Download SPECFEM2D from GitHub, devel branch for latest codebase OR symlink from existing repo\n", - "os.chdir(WORKDIR)\n", - "\n", - "if os.path.exists(\"specfem2d\"):\n", - " print(\"SPECFEM2D repository already found, you may skip this subsection\")\n", - " pass\n", - "elif os.path.exists(SPECFEM2D):\n", - " print(\"Existing SPECMFE2D respository found, symlinking to working directory\")\n", - " os.symlink(SPECFEM2D, \"./specfem2d\")\n", - "else:\n", - " print(\"Cloning respository from GitHub\")\n", - " ! git clone --recursive --branch devel https://github.com/geodynamics/specfem2d.git" + "! seisflows examples run 1 -r ${PATH_TO_SPECFEM2D} --with_mpi --nproc 4 --mpiexec srun" ] }, { - "cell_type": "code", - "execution_count": 8, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "# Compile SPECFEM2D to generate the Makefile\n", - "os.chdir(SPECFEM2D_ORIGINAL)\n", - "if not os.path.exists(\"./config.log\"):\n", - " os.system(\"./configure\")" + "We will not run the example in this notebook, however at this stage the User should run one of the following commands above to execute the example problem. A successfully completed example problem will end with the following log messages:" ] }, { - "cell_type": "code", - "execution_count": 9, + "cell_type": "raw", "metadata": {}, - "outputs": [], "source": [ - "# Run make to generate SPECFEM2D binaries\n", - "if not os.path.exists(\"bin\"):\n", - " os.system(\"make all\")" + ".. code:: bash\n", + "\n", + " CLEANING WORKDIR FOR NEXT ITERATION\n", + " --------------------------------------------------------------------------------\n", + " 2022-08-29 15:51:05 (I) | thrifty inversion encountering first iteration, defaulting to standard inversion workflow\n", + " 2022-08-29 15:51:06 (I) | \n", + " ////////////////////////////////////////////////////////////////////////////////\n", + " COMPLETE ITERATION 01 \n", + " ////////////////////////////////////////////////////////////////////////////////\n", + " 2022-08-29 15:51:06 (I) | setting current iteration to: 2\n", + " \n", + " ================================================================================\n", + " EXAMPLE COMPLETED SUCCESFULLY\n", + " ================================================================================\n", + "\n", + " \n", + "Using the `working directory documentation page `__ you can figure out how to navigate around and look at the results of this small inversion problem. \n", + "\n", + "We will have a look at a few of the files and directories here. I've run the example problem in a scratch directory but your output directory should look the same." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "/home/bchow/REPOSITORIES/specfem2d\n", - "xadj_seismogram\t\t xconvolve_source_timefunction xspecfem2D\n", - "xcheck_quality_external_mesh xmeshfem2D\t\t xsum_kernels\n", - "xcombine_sem\t\t xsmooth_sem\n" + "/home/bchow/Work/work/seisflows_example/example_1\n", + "logs\tparameters.yaml sflog.txt specfem2d\r\n", + "output\tscratch\t\t sfstate.txt specfem2d_workdir\r\n" ] } ], "source": [ - "# Check out the binary files that have been created\n", - "os.chdir(SPECFEM2D_ORIGINAL)\n", - "! pwd\n", - "! ls bin/" + "%cd ~/sfexamples/example_1\n", + "! ls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### 1b. Create a separate SPECFEM2D working directory\n", + "### Understanding example outputs\n", "\n", - "Next we'll create a new SPECFEM2D working directory, separate from the original repository. The intent here is to isolate the original SPECFEM2D repository from our working state, to protect it from things like accidental file deletions or manipulations. This is not a mandatory step for using SeisFlows3, but it helps keep file structure clean in the long run, and is the SeisFlows3 dev team's preferred method of using SPECFEM. " - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - ".. note::\n", - " All SPECFEM2D/3D/3D_GLOBE need to run successfully are the bin/, DATA/, and OUTPUT_FILES/ directories. Everything else in the repository is not mandatory for running binaries." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this tutorial we will be using the [Tape2007 example problem](https://github.com/geodynamics/specfem2d/tree/devel/EXAMPLES/Tape2007) to define our __DATA/__ directory (last tested 3/9/22, cf893667)." + "In the `output/` directory, we can see our starting/initial model (*MODEL_INIT*), our true/target model (*MODEL_TRUE*) and the updated model from the first iteration (*MODEL_01*). In addition, we have saved the gradient generated during the first iteration (*GRADIENT_01*) because we set the parameter `export_gradient` to True." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "/home/bchow/Work/work/sf3_specfem2d_example/specfem2d_workdir\n", - "bin DATA\n" + "GRADIENT_01 MODEL_01 MODEL_INIT MODEL_TRUE\r\n" ] } ], "source": [ - "# Incase we've run this docs page before, delete the working directory before remaking\n", - "if os.path.exists(SPECFEM2D_WORKDIR):\n", - " shutil.rmtree(SPECFEM2D_WORKDIR)\n", - "\n", - "os.mkdir(SPECFEM2D_WORKDIR)\n", - "os.chdir(SPECFEM2D_WORKDIR)\n", - "\n", - "# Copy the binary files incase we update the source code. These can also be symlinked.\n", - "shutil.copytree(SPECFEM2D_BIN_ORIGINAL, \"bin\")\n", - "\n", - "# Copy the DATA/ directory because we will be making edits here frequently and it's useful to\n", - "# retain the original files for reference. We will be running one of the example problems: Tape2007\n", - "shutil.copytree(os.path.join(TAPE_2007_EXAMPLE, \"DATA\"), \"DATA\")\n", - "\n", - "! pwd\n", - "! ls" + "# The output directory contains important files exported during a workflow\n", + "! ls output" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " -------------------------------------------------------------------------------\r\n", - " -------------------------------------------------------------------------------\r\n", - " D a t e : 29 - 04 - 2022 T i m e : 12:24:51\r\n", - " -------------------------------------------------------------------------------\r\n", - " -------------------------------------------------------------------------------\r\n", - "\r\n", - "see results in directory: OUTPUT_FILES/\r\n", - "\r\n", - "done\r\n", - "Fri Apr 29 12:24:51 AKDT 2022\r\n" + "proc000000_vp.bin proc000000_vs.bin\r\n" ] } ], "source": [ - "# Run the Tape2007 example to make sure SPECFEM2D is working as expected\n", - "os.chdir(TAPE_2007_EXAMPLE)\n", - "! ./run_this_example.sh > output_log.txt\n", - "\n", - "assert(os.path.exists(\"OUTPUT_FILES/forward_image000004800.jpg\")), \\\n", - " (f\"Example did not run, the remainder of this docs page will likely not work.\"\n", - " f\"Please check the following directory: {TAPE_2007_EXAMPLE}\")\n", - "\n", - "! tail output_log.txt" + "# A MODEL output directory contains model files in the chosen solver format. \n", + "# In this case, Fortran Binary from SPECFEM2D\n", + "! ls output/MODEL_01" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "------------------------------------\n", - "Now we need to manually set up our SPECFEM2D working directory. As mentioned in the previous cell, the only required elements of this working directory are the following (these files will form the basis for how SeisFlows3 operates within the SPECFEM2D framework):\n", + "### Plotting results\n", "\n", - "1. __bin/__ directory containing SPECFEM2D binaries\n", - "2. __DATA/__ directory containing SOURCE and STATION files, as well as a SPECFEM2D Par_file\n", - "3. __OUTPUT_FILES/proc??????_*.bin__ files which define the starting (and target) models" + "We can plot the model and gradient files created during our workflow using the `seisflows plot2d` command. The `--savefig` flag allows us to save output .png files to disk. The following figure shows the starting/initial homogeneous halfspace model in Vs." ] }, { "cell_type": "raw", "metadata": {}, "source": [ - ".. note:: \n", - " This file structure is the same for all versions of SPECFEM (2D/3D/3D_GLOBE)" + ".. note::\n", + " Models and gradients can only be plotted when using `SPECFEM2D` as the chosen solver. Other solvers (e.g., SPECFEM3D and 3D_GLOBE) require external software (e.g., ParaView) to visualize volumetric quantities like models and gradients.\n", + "\n", + ".. note::\n", + " Because this docs page was made in a Jupyter Notebook, we need to use the IPython Image class to open the resulting .png file from inside the notebook. Users following along will need to open the figure using the GUI or command line tool." ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "interfaces_Tape2007.dat\t\t SOURCE_003 SOURCE_012 SOURCE_021\r\n", - "model_velocity.dat_checker\t SOURCE_004 SOURCE_013 SOURCE_022\r\n", - "Par_file\t\t\t SOURCE_005 SOURCE_014 SOURCE_023\r\n", - "Par_file_Tape2007_132rec_checker SOURCE_006 SOURCE_015 SOURCE_024\r\n", - "Par_file_Tape2007_onerec\t SOURCE_007 SOURCE_016 SOURCE_025\r\n", - "proc000000_model_velocity.dat_input SOURCE_008 SOURCE_017 STATIONS\r\n", - "SOURCE\t\t\t\t SOURCE_009 SOURCE_018 STATIONS_checker\r\n", - "SOURCE_001\t\t\t SOURCE_010 SOURCE_019\r\n", - "SOURCE_002\t\t\t SOURCE_011 SOURCE_020\r\n" + "Figure(707.107x707.107)\r\n" ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAALDCAYAAADwjA1CAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACEsklEQVR4nOzdeXhM1/8H8PdkH5EMEVmGIC2CxppYYmkogoq91jaE0Ko1aNVSa0sURUupPfa03xK0NE20lqqEiKYEjWqRkEQsMVmQZJLz+8Mvt8ZEFp0sct+v57nPY8793HPPvdLm48znnqsQQggQEREREcmQUVkPgIiIiIiorDAZJiIiIiLZYjJMRERERLLFZJiIiIiIZIvJMBERERHJFpNhIiIiIpItJsNEREREJFtMhomIiIhItpgMExEREZFsMRkmIiIiItliMkxEREREssVkmIiIiIhki8kwEREREckWk2EiIiIiki0mw0REREQkW0yGiYiIiEi2mAwTERERkWwxGSYiIiIi2WIyTERERESyxWSYiIiIiGSLyTARERERyRaTYSIiIiKSLSbDRERERCRbTIaJiIiISLaYDBMRERGRbDEZJiIiIiLZYjJMRERERLLFZJiIiIiIZIvJMBERERHJFpNhIiIiIpItJsNEREREJFtMhomIiIhItpgMExEREZFsMRkmIiIiItliMkxEREREssVkmIiIiIhki8kwEREREckWk2EiIiIiki0mw0REREQkW0yGiYiIiEi2mAwTERERkWwxGSYiIiIi2WIyTERERESyxWSYiIiIiGSLyTARERERyRaTYSIiIiKSLSbDRERERCRbTIaJiIiISLaYDBMRERGRbDEZJiIiIiLZYjJMRERERLLFZJiIiIiIZIvJMBERERHJFpNhIiIiIpItJsNEREREJFtMhomIiIhItpgMExEREZFsMRkmIiIiItliMkxEREREssVkmIiIiIhki8kwEREREckWk2EiIiIiki0mw0REREQkW0yGiYiIiEi2mAwTERERkWwxGSYiIiIi2WIyTERERESyxWSYiIiIiGSLyTARERERyRaTYSIiIiKSLSbDRERERCRbTIaJiIiISLaYDBMRERGRbDEZJnqJ9evXD0qlEg8ePHhuzNtvvw1TU1Pcvn279AZWCF9fX9SpU6esh/Fco0ePhqurK6pUqQKlUon69evj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K4XGCiF0lldr3LgxAOg9OKjVavHnn3/C1dVVJ/by5ct6s+55xz4dm5/GjRvn+zBmUY8nIqqoODNMVM75+fnh66+/xrJly3D48GH4+vqiUqVKz423tLREjx49kJWVhb59++LixYuoXbt2iY+zXbt2qFKlCi5duoQJEyYUGKtQKKTZ3TyHDh3CrVu3ULduXYONqSTKJJ519OhRACh03BEREfjrr78wadIkqa1169ZwdHREYGAgBg8eLLV/9913SE9PR//+/aW2fv36YePGjdi7d69O7LZt26BWq9G6desCz9+vXz+MGzcOp0+flmLzym5at279wtdPRPSyYzJMVM65u7ujSZMmWLVqFYQQ8PPz04sZM2YMlEol2rVrB0dHRyQlJSEgIAAqlQotW7YslXFWrlwZq1evxogRI3D//n289dZbsLOzw507d/DHH3/gzp07WLduHQDA29sbgYGBaNCgAZo0aYKoqCgsW7YMNWvWNOiYrKys4O7ubpC+5s2bh9u3b+P1119HjRo18ODBA4SEhGDjxo0YOHAg3NzcpNimTZvinXfeQcOGDWFhYYEzZ85g2bJlcHBwwPTp06U4Y2NjLF26FD4+PnjvvfcwdOhQ/PXXX5g+fTq6du2K7t27S7E9evRA165d8f777yM1NRV169bFnj17EBISgp07d+os7ebn54dt27bh77//lv4hNGrUKHz11VcYOHAglixZAjs7O6xduxaxsbE4cuSIzrXOnz8fCxYswNGjR9GxY0eD3D8iovKKyTDRS8DPzw+TJ09Go0aN8p0B7NChAwIDA/Htt98iJSUFtra2aN++PbZv347q1auX2jjfeecd1KpVC0uXLsV7772HtLQ02NnZoVmzZvD19ZXivvjiC5iamiIgIADp6elo0aIF9u3bh48//rjUxlpc7u7u+PLLL7F//37cu3cPFhYWaNSoEVauXIn3339fJ7ZRo0bYsGEDEhMTkZWVBbVajSFDhmDu3LlwdHTUiX3nnXdgbGyMJUuWIDAwEDY2Nhg+fDgWLVqkN4Z9+/Zh9uzZmDt3Lu7fv48GDRpgz549GDJkiE5cTk4OcnJydJa9Mzc3x88//4zp06dj4sSJePjwIZo1a4Yff/xR7+1z6enpUCgUUm00EVFFphBP/9+SiIhkr1WrVqhduzb+97//lfVQiIhKHJNhIiKSpKamonr16oiO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UCgwf/58zJ8//7kxFhYWWL16tTSDmx8bGxvs3LmzwHPVqlULP/zwQ4ExjRs3xokTJwqMISIiopfXs0ugmpub6yyrmufu3bvIyckpcNWrZ7Vt2xa7du3C4MGD8fjxY2i1WvTu3Vsnh3ne6lV5fb7Iean4yrRmmIiIiKgwJkYCpgbc8mqGnZycdJZELazsoDirXl26dAmTJk3C3LlzERUVhZCQEFy7dg1jx44tdp8vstoWFV2pzQwTERERlSfx8fE6NcP5zQoDgK2tLYyNjQtc9epZAQEBaNeuHT788EMAQJMmTWBpaYkOHTrg008/haOj43NXr8rr80XOS8XHmWEiIiKSpWeXQ31eMmxmZgY3NzedFa0AICwsTFqt6lkPHz6EkZFumpX3jFPe2gUeHh56fYaGhkp9vsh5qfg4M0xERETlWl55gyH7K66pU6fCx8cH7u7u8PDwwIYNGxAXFyeVPcycORO3bt3C9u3bAQC9evXCmDFjsG7dOnTr1g2JiYnw9/dHq1atoFarAQCTJ0/G66+/js8++wx9+vTBgQMHcOTIEZw8ebLI56X/jskwERERUSEGDx6Me/fuYeHChUhMTISrqysOHz6M2rVrA3jy7oOn1/719fVFWloa1qxZg2nTpqFKlSp444038Nlnn0kxbdu2RVBQED7++GPMmTMHr776Kr755hu0bt26yOel/67U1hmWI64zTERE9N/XGb6csBJWBlxnOC31ERqqpxR7PFQxsWaYiIiIiGSLZRJERERUrhkrjGCsMNz8nSH7opcffxqIiIiISLaYDBMRERGRbDEZJiIiIiLZYs0wERERlWvGRiYwNjJcymLIvujlx5lhIiIiIpItJsNEREREJFtMhomIiIhItlg0Q0REROWaEYxhBGOD9keUhzPDRERERCRbTIaJiIiISLZYJkFERETlmkJhBCOF4UobFHwdMz2FPw1EREREJFtMhomIiIhItpgMExEREZFssWaYiIiIyjUjhbFBa4YN2Re9/DgzTERERESyxWSYiIiIiGSLyTARERERyRZrhomIiKhcY80wlSTODBMRERGRbDEZJiIiIiLZYjJMRERERLLFmmEiIiIq14wVpjBWmBq0P6I8nBkmIiIiItnKd2b4/Pnzxe6oUaNGMDHhRDMRERERvTzyzV6bNWsGhUIBIUSROjEyMsKVK1fwyiuvGHRw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v4+4uDjk5OQgOjoaAFC3bl1Urly5RK65ImAyTERERGQAoaGhuHr1Kq5evYqaNWvq7BNCSH+OjY2FRqORPgcFBWHmzJl4++23cf/+fdSuXRuLFi3SefBu5cqVMDExwaBBg/Do0SN07twZgYGBMDY2lmLmzp2Lbdu2SZ+bN28OADh69Ki0bBvpU4in/3bIoFJTU6FSqaDRfA9ra8uyHg4REVGZSE3NgErVCxqNpkg1uv8e9+T36HG37qhsbGqw8aTnZMMzKqTY46GKiUurEREREZFssUyCiIiIyjVttoA213BfZGtz+KU4/Yszw0REREQkW0yGiYiIiEi2WCZBRERE5VqOgcskclgmQU/hzDARERERyRaTYSIiIiKSLSbDRERERCRbrBkmIiKico1Lq1FJ4swwEREREckWk2EiIiIiki0mw0REREQkW6wZJiIionItWyuQbcCaYUP2RS8/zgwTERERkWwxGSYiIiIi2WKZBBEREZVr2ZlAlpEhyyQM1hVVAJwZJiIiIiLZYjJMRERERLLFZJiIiIiIZIs1w0RERFSuZWsFsg1aM8yl1ehfnBkmIiIiItliMkxEREREssVkmIiIiIhkizXDREREVK5ptQJaheHqfLWCNcP0L84MExEREZFsMRkmIiIiItliMkxEREREssWaYSIiIirXtNmsGaaSw5lhIiIiIpItJsNEREREJFsskyAiIqJyLTtbINuAZRLZLJOgp3BmmIiIiIhki8kwEREREckWk2EiIiIiA+nduzdq1aoFCwsLODo6wsfHBwkJCQUe4+vrC4VCobO1adNG2n///n1MnDgRLi4uqFSpEmrVqoVJkyZBo9Ho9JOSkgIfHx+oVCqoVCr4+PjgwYMHJXGZFQprhomIiKhcy87MRZYi13D9CcP19axOnTph1qxZcHR0xK1bt/DBBx/grbfewqlTpwo8rnv37ti6dav02czMTPpzQkICEhISsHz5cjRq1Ag3btzA2LFjkZCQgO+++06KGzZsGG7evImQkBAAwLvvvgsfHx98//33Br7KioXJMBEREZGBTJkyRfpz7dq1MWPGDPTt2xfZ2dkwNTV97nHm5uZwcHDId5+rqyv27t0rfX711VexaNEivPPOO9BqtTAxMcHly5cREhKCiIgItG7dGgCwceNGeHh4IDY2Fi4uLga6woqHZRJEREREJeD+/fvY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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# First we will set the correct SOURCE and STATION files.\n", - "# This is the same task as shown in ./run_this_example.sh\n", - "os.chdir(SPECFEM2D_DATA)\n", - "\n", - "# Symlink source 001 as our main source\n", - "if os.path.exists(\"SOURCE\"):\n", - " os.remove(\"SOURCE\")\n", - "os.symlink(\"SOURCE_001\", \"SOURCE\")\n", - "\n", - "# Copy the correct Par_file so that edits do not affect the original file\n", - "if os.path.exists(\"Par_file\"):\n", - " os.remove(\"Par_file\")\n", - "shutil.copy(\"Par_file_Tape2007_onerec\", \"Par_file\")\n", - "\n", - "! ls" + "# Plot and open the initial homogeneous halfspace model\n", + "! seisflows plot2d MODEL_INIT vs --savefig m_init_vs.png\n", + "Image(filename='m_init_vs.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### 1c. Generate initial and target models\n", - "\n", - "Since we're doing a synthetic-synthetic inversion, we need to manually set up the velocity models with which we generate our synthetic waveforms. The naming conventions for these models are:\n", - "\n", - "1. __MODEL_INIT:__ The initial or starting model. Used to generate the actual synthetic seismograms. This is considered M00.\n", - "2. __MODEL_TRUE:__ The target or true model. Used to generate 'data' (also synthetic). This is the reference model that our inversion is trying to resolve.\n", - "\n", - "The starting model is defined as a homogeneous halfspace uin the Tape2007 example problem. We will need to run both `xmeshfem2D` and `xspecfem2D` to generate the required velocity model database files. We will generate our target model by slightly perturbing the parameters of the initial model." - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - ".. note::\n", - " We can use the SeisFlows3 command line option `seisflows sempar` to directly edit the SPECFEM2D Par_file in the command line. This will work for the SPECFEM3D Par_file as well." + "We can also plot the gradient that was created during the adjoint simulation. In this example we only have one source and one receiver, so the gradient shows a \"banana-doughnut\" style kernel, representing volumetric sensitivity of the measurement (waveform misfit) to changes in model values." ] }, { "cell_type": "code", - "execution_count": 21, - "metadata": {}, + "execution_count": 9, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "setup_with_binary_database: 0 -> 1\n", - "SAVE_MODEL: default -> binary\n", - "save_ASCII_kernels: .true. -> .false.\n" + "Figure(707.107x707.107)\r\n" ] + }, + { + "data": { + "image/png": "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X2+deuqpypJHF1xwgbV582brxRdftI499tiUkketra3WqFGjrM9//vPWli1brCeffNIqLy+PXMmj//f//p+VSCSsV155xdq9e3fy8c9//jPZhv0ePEuXLrVeffVV67333rP++Mc/Wl/96letwsJCa/Xq1ZZlsc9ziVhNwrLY94SQXiiGs8j3v/996/jjj7eKi4utM888M1nCiljWyy+/bAHo97jqqqssy+ote3THHXdYVVVVVklJiXXuuedaW7ZsSdnGgQMHrIULF1rDhw+3Bg0aZM2ePdvavn17Spt//OMf1he+8AVr6NCh1tChQ60vfOELVktLS0qb999/35o1a5Y1aNAga/jw4dbChQtTyhtZlmX98Y9/tP7lX/7FKikpsaqqqqxly5ZFrtyRqr8BWD/72c+SbdjvwfOlL30peR0YMWKEdcEFFySFsGWxz3OJLIbZ94QQy7KsAsvi9DaEEEIIISSeMGeYEEIIIYTEFophQgghhBASWyiGCSGEEEJIbKEYJoQQQgghsYVimBBCCCGExBaKYUIIIYQQElsohgkhhBBCSGyhGCaEEEIIIbGFYpgQknfU1NSgoKAABQUFaG1tzWhb5513XnJbDQ0NgcRHCCHEHCiGCSFGcvjwYUydOhWf+9znUpa3tbVh9OjR+PrXv+74/jvvvBO7d+9GIpHIKI4nn3wSGzduzGgbhBBCzIVimBBiJAMGDMCjjz6KF154AY8//nhy+aJFizB8+HB885vfdHz/0KFDUVVVhYKCgoziGD58OEaMGJHRNgghhJgLxTAhxFhOOukk1NXVYdGiRdi1axeefvpprFixAo8++iiKi4t9beuRRx7BsGHD8Lvf/Q5jx47F4MGDcdlll2H//v149NFHUVNTg4qKCixatAiHDx/O0hERQggxjaKwAyCEECcWLVqEVatW4corr8SWLVvwzW9+ExMnTkxrW//85z/xve99DytWrMC+fftw6aWX4tJLL8WwYcPw3HPP4e9//zs+97nP4ZxzzsG8efOCPRBCCCFGQjFMCDGagoICPPTQQxg3bhxOPfVU3H777Wlv69ChQ3jooYdwwgknAAAuu+wyPPbYY9izZw/Kysowfvx4nH/++Xj55ZcphgkhJCYwTYIQYjw//elPMXjwYLz33nvYuXNn2tsZPHhwUggDwKhRo1BTU4OysrKUZc3NzRnFSwghJDpQDBNCjGb9+vW4//778fTTT2PKlCm45pprYFlWWtsaOHBgyuuCggLlsp6enrTjJYQQEi0ohgkhxnLgwAFcddVVuPbaa3HhhRfi4Ycfxptvvokf/ehHYYdGCCEkT6AYJoQYy+23346enh7cfffdAIDjjjsO//3f/41bbrkF27ZtCzc4QggheQHFMCHESNauXYvvf//7eOSRRzBkyJDk8gULFmDq1KkZpUsQQgghNgUW7yaEkDyjpqYGixcvxuLFiwPZ3rZt2zBmzBjU19enXdaNEEKImdAZJoTkJbfddhvKysrQ1taW0XY+85nP4JRTTgkoKkIIIaZBZ5gQkne8//77OHToEADgYx/7GAoL0//d/8EHH+DAgQMAenOW/c58RwghxGwohgkhhBBCSGxhmgQhhBBCCIktFMOEEEIIISS2UAwTQgghhJDYQjFMCCGEEEJiC8UwIYQQQgiJLRTDhBBCCCEktlAME0IIIYSQ2EIxTAghhBBCYgvFMCGEEEIIiS0Uw4QQQgghJLZQDBNCCCGEkNhCMUwIIYQQQmILxTAhhBBCCIktFMOEEEIIISS2UAwTQgghhJDYQjFMCCGEEEJiC8UwIYQQQgiJLRTDhBBCCCEktlAME0IIIYSQ2EIxTAghhBBCYgvFMCGEEEIIiS0Uw4QQQgghJLZQDBNCCCGEkNhCMUwIIYQQQmILxTAhhBBCCIktFMOEEEIIISS2UAwTQgghhJDYQjFMCCGEEEJiC8UwIYQQQgiJLRTDhBBCCCEktlAME0IIIYSQ2EIxTAghhBBCYgvFMCGEEEIIiS0Uw4QQQgghJLZQDBNCCCGEkNhCMUwIIYQQQmILxTAhhBBCCIktFMOEEEIIISS2UAwTQgghhJDYQjFMCCGEEEJiC8UwIYQQQgiJLRTDhBBCCCEktlAME0IIIYSQ2EIxTAghhBBCYgvFMCGEEEIIiS0Uw4QQQgghJLZQDBNCCCGEkNhCMUwIIYQQQmILxTAhhBBCCIktFMOEEEIIISS2UAwTQgghhJDYQjFMCCGEEEJiC8UwIYQQQgiJLRTDhBBCCCEktlAME0IIIYSQ2EIxTAghhBBCYgvFMCGEEEIIiS0Uw4QQQgghJLZQDBNCCCGEkNhCMUwIIYQQQmILxTAhhBBCCIktFMOEEEIIISS2UAwTQgghhJDYQjFMCCGEEEJiC8UwIYQQQgiJLRTDhBBCCCEktlAME0IIIYSQ2EIxTAghhBBCYgvFMCGEEEIIiS0Uw4QQQgghJLZQDBNCCCGEkNhCMUwIIYQQQmILxTAhhBBCCIktFMOEEEIIISS2UAwTQgghhJDYQjFMCCGEEEJiC8UwIYQQQgiJLRTDhBBCCCEktlAME0IIIYSQ2PL/AfxHFBDdtuuZAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "os.chdir(SPECFEM2D_DATA)\n", - "\n", - "# Ensure that SPECFEM2D outputs the velocity model in the expected binary format\n", - "! seisflows sempar setup_with_binary_database 1 # allow creation of .bin files\n", - "! seisflows sempar save_model binary # output model in .bin database format\n", - "! seisflows sempar save_ascii_kernels .false. # output kernels in .bin format, not ASCII" + "! seisflows plot2d GRADIENT_01 vs_kernel --savefig g_01_vs.png\n", + "Image(filename='g_01_vs.png') " ] }, { - "cell_type": "code", - "execution_count": 22, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "bin DATA OUTPUT_FILES\r\n" - ] - } - ], "source": [ - "# SPECFEM requires that we create the OUTPUT_FILES directory before running\n", - "os.chdir(SPECFEM2D_WORKDIR)\n", - "\n", - "if os.path.exists(SPECFEM2D_OUTPUT):\n", - " shutil.rmtree(SPECFEM2D_OUTPUT)\n", - " \n", - "os.mkdir(SPECFEM2D_OUTPUT)\n", - "\n", - "! ls" + "Finally we can plot the updated model (*MODEL_01*), which is the sum of the initial model and a scaled gradient. The gradient was scaled during the line search, where we used a steepest-descent algorithm to reduce the misfit between data and synthetics. Since we only have one source-receiver pair in this workflow, the updated model shown below almost exactly mimics the Vs kernel shown above." ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\n", - " **********************************************\n", - " **** Specfem 2-D Solver - serial version ****\n", - " **********************************************\n", - "\n", - " Running Git version of the code corresponding to commit cf89366717d9435985ba852ef1d41a10cee97884\n", - " dating From Date: Mon Nov 29 23:20:51 2021 -0800\n", - "\n", - "\n", - " NDIM = 2\n", - " -------------------------------------------------------------------------------\n", - " Program SPECFEM2D: \n", - " -------------------------------------------------------------------------------\n", - " -------------------------------------------------------------------------------\n", - " Tape-Liu-Tromp (GJI 2007)\n", - " -------------------------------------------------------------------------------\n", - " -------------------------------------------------------------------------------\n", - " D a t e : 29 - 04 - 2022 T i m e : 12:25:24\n", - " -------------------------------------------------------------------------------\n", - " -------------------------------------------------------------------------------\n" + "Figure(707.107x707.107)\r\n" ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAALDCAYAAADwjA1CAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAADlQUlEQVR4nOzdd3RU1doG8GdqekIgkhC6BulNakAFRJp0uYCAESQiioAoXlS4F7BQrmBBUFRqBCEWBFEgAgpYqCIoTVAEgQ9CDWmkzcz+/pick3OmJ0zqPL+1ZknO7DlzZhLhyZ53v1sjhBAgIiIiIvJB2tK+ACIiIiKi0sIwTEREREQ+i2GYiIiIiHwWwzARERER+SyGYSIiIiLyWQzDREREROSzGIaJiIiIyGcxDBMRERGRz2IYJiIiIiKfxTBMRERERD6LYZiIiIiIfBbDMBERERH5LIZhIiIiIvJZDMNERERE5LMYhomIiIjIZzEMExEREZHPYhgmIiIiIp/FMExEREREPothmIiIiIh8FsMwEREREfkshmEiIiIi8lkMw0RERETksxiGiYiIiMhnMQwTERERkc9iGCYiIiIin8UwTEREREQ+i2GYiIiIiHwWwzARERER+SyGYSIiIiLyWQzDREREROSzGIaJiIiIyGcxDBMRERGRz2IYJiIiIiKfxTBMRERERD6LYZiIiIiIfBbDMBERERH5LIZhIiIiIvJZDMNERERE5LMYhomIiIjIZzEMExEREZHPYhgmIiIiIp/FMExEREREPothmIiIiIh8FsMwEREREfkshmEiIiIi8lkMw0RERETksxiGiYiIiMhnMQwTERERkc9iGCYiIiIin8UwTEREREQ+i2GYiIiIiHwWwzARERER+SyGYSIiIiLyWQzDREREROSzGIaJiIiIyGcxDBMRERGRz2IYJiIiIiKfxTBMRERERD6LYZiIiIiIfBbDMBERERH5LIZhIiIiIvJZDMNERERE5LMYhomIiIjIZzEMExEREZHPYhgmIiIiIp/FMExEREREPothmIiIiIh8FsMwEREREfkshmEiIiIi8lkMw0RERETksxiGiYiIiMhnMQwTERERkc9iGCYiIiIin8UwTD5j4MCBCAgIwM2bN52OGTFiBAwGAy5fvlxyF+bGqFGjUKdOndK+DKeeeOIJNGnSBJUqVUJAQADuvvtu/Pvf/8a1a9dcPm7p0qXQaDQIDg62u+/dd99F+/btERERAT8/P9SqVQuPPPIIjh07Zjf2nXfewcMPP4y6detCo9Ggc+fOHl/72bNnodFoHN4SExPtrnfAgAGoU6cOAgICEBMTg6effhqXLl2yO29aWhqmTZuGu+++G4GBgahevToGDx7s8PoPHTqEAQMGIDo6GoGBgWjQoAFeffVV3Lp1y27sr7/+igcffBDBwcGoVKkSHn74Yfz9999245KTkzF+/HjceeedCAgIQO3atREfH49z586pxq1cudLp609OTlaNzc3NxfTp01G3bl0YjUbUrl0bL7/8MrKyslTjzp8/j4EDB+LOO+9EUFAQwsLC0LJlSyxatAgmk0k1tk6dOk6f39/f36OxTz31lN3rJyIqDH1pXwBRSYmPj8eGDRuwZs0ajBs3zu7+1NRUrF+/Hn369EFkZGQpXKFj//3vf/Hss8+W9mU4lZmZiSeffBIxMTHw9/fHL7/8glmzZmHz5s04dOgQjEaj3WP+7//+Dy+88AKio6ORmppqd//169fRq1cvNG/eHOHh4fj7778xd+5ctGvXDgcPHkT9+vXlsR988AGCgoLwwAMP4Ouvvy7Sa5gwYQKGDx+uOlavXj3V1zNmzECXLl0we/ZsVK9eHSdPnsRrr72Gr776CocOHVL9zPTt2xe//PILZs6cidatW+PChQt49dVXERsbiyNHjqB27doAgOPHj6NDhw6oX78+3nnnHUREROCHH37Aq6++ioMHD+Krr76Sz/nHH3+gc+fOaNGiBT777DNkZ2dj+vTpuO+++3D48GHccccdAICcnBzcf//9SElJwSuvvIJGjRrh5MmTmDFjBr799lucOHECISEhqte2YsUKNGjQQHWsSpUqqq+HDRuGzZs3Y/r06WjTpg327NmD119/HceOHcPGjRvlcZmZmQgNDcV///tf1KpVC7m5udi8eTMmTJiAw4cPY+nSpfLY9evXIycnR/U8586dw9ChQzFw4EC771PHjh0xf/581bGy9P8qEZVTgshHmEwmER0dLVq1auXw/sWLFwsA4uuvvy7hK6t43n//fQFAfPfddw7v79Onj+jbt68YOXKkCAoK8uicx48fFwDEf//7X9Vxs9ks/7lx48aiU6dOHl/nmTNnBAAxb948t2MvX75sd+zAgQMCgHjttdfkY3/++acAIP7z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16DX61GvXj1MnToVzz//vMM+w8uXL0edOnXw4IMPOj1vdnY2Xn31VVy4cAEBAQFo3749du7cifvuu89u7Pvvv4/q1atj4cKFSE5ORp06dbBgwQJMmDBBNc5iscBsNtu1i/vyyy8xbdo0TJ8+HTdu3ECDBg2wdu1aPPLII6pxGRkZAOC2WwcRUUWjEZ422iQiogpryJAhOHPmjMedOIiIKgrODBMR+TghBHbu3InVq1eX9qUQEZU4zgwTkV23AVtarZabMRARUYXEf92IyG0LMuVudkRERBUJyySIyG2daFF3qyMiIirrWCZBRERERD6LZRJERERE5LMYhqncGDhwIAICAnDz5k2nY0aMGAGDwYDLly+X3IX5sPPnz2PgwIG48847ERQUhLCwMLRs2RKLFi2yW5Q3c+ZMaDQau5u/v7/DcycmJqJFixbw9/dHdHQ0Jk2aJPfCVcrIyMCkSZMQHR0Nf39/tGjRAomJiR5d//bt29GtWzdER0fDz88PVatWxQMPPIDNmzfbjf3mm2/w2GOPoWnTpjAYDPKOeracvU7pZntt69atQ8eOHVG5cmVUqlQJbdu2xapVq1xe9+XLl1GlShVoNBp88cUXLscuXboUGo0GwcHBdve9++67aN++PSIiIuDn54datWrhkUcecbgr4aVLlzBq1ChUrVoV/v7+aNasGZYtW+bwOa9cuYJRo0YhIiICgYGBiI2NxXfffWc3LicnB/PmzUOTJk0QFBSEyMhI9OrVC7t373Z43qNHj2Lw4MG444474Ofnhzp16mDcuHF24z755BO0bNkS/v7+iIiIwPDhw3H+/HmX7xMR+TBBVE58/fXXAoB47733HN5/8+ZNERAQIAYMGFDCV+a7Tpw4IR577DGxfPlysX37drF582Yxfvx4AUDEx8erxs6YMUMAEElJSWLPnj3ybd++fXbnXb16tQAgnnjiCfH999+LDz74QISFhYlu3brZje3WrZuoVKmS+OCDD8T3338vnnjiCQFAfPLJJ26vPzExUTz77LMiMTFR7Ny5U3z55Zeie/fuAoBYtWqVauzo0aNFvXr1xJAhQ0SrVq2Es78+z58/r3p90q1JkyYiICBApKSkyGOXLVsmAIhBgwaJzZs3iy1btohHHnlEABBvvfWW0+seNGiQiI6OFgDE559/7nTchQsXRFhYmIiOjhZBQUF290+fPl3MnDlTrF+/XuzcuVMsX75c3H333SIoKEj88ccf8ribN2+KO++8U9SoUUOsWLFCJCUliZEjRwoA4s0331SdMzs7WzRp0kTUqFFDrF69WmzdulX0799f6PV6sXPnTtXYuLg4odVqxbRp08R3330nPv/8c9GqVSuh1+vtfi6+//57ERAQILp37y6++OILsXPnTvHxxx+L5557TjXu3XfflX92kpKSxNKlS0W1atVE7dq1xY0bN5y+V0TkuxiGqdwwmUwiOjpatGrVyuH9ixcvFgDE119/XcJXRraGDBki9Hq9yM7Olo9JYfjq1asuH2symUS1atVE9+7dVcc/+eQTAUBs3rxZPrZp0yYBQKxZs0Y1tlu3biI6OlqYTKZCX3tubq6oXr26uO+++1THzWaz/OdnnnnGaRh25MyZM0Kj0YhHH31Udbxjx46idu3aqnNbLBbRoEED0axZM4fn+uKLL0RwcLBISEhwG4b79Okj+vbtK0aOHOkwDDty/PhxAUD897//lY/NmTNHABC//PKLamz37t1FUFCQKuC/9957AoDYvXu3fCwvL080atRItG3bVj6WnZ0tdDqd3Xty8eJFAUBMnDhRPpaZmSmqVasmevfuLSwWi9Nrz87OFmFhYaJv376q47t37xYAxNSpUz16D4jIt7BMgsoNnU6HkSNH4uDBgzhy5Ijd/StWrEC1atXQq1cv+djixYvRvHlzBAcHIyQkBA0aNMDUqVML9bwajQbjx4/HihUrUL9+fQQEBKB169bYu3cvhBCYN28e6tati+DgYDzwwAP466+/7M6xfft2dO3aFaGhoQgMDETHjh3tPjb+66+/8Pjjj6NevXoIDAxE9erV0bdvX7vXunPnTmg0GqxduxbTpk1DdHQ0QkND8eCDD+LkyZOFem3F5Y477oBWq4VOpyv0Y/fu3YtLly7h8ccfVx0fPHgwgoODsX79evnY+vXrERwcjMGDB6vGPv7447h48SL27dtX6Oc3GAyoVKmS3VbLt9Nnefny5RBC4IknnrB7ruDgYNW5NRoNQkNDHZaP3LhxA8888wxmzZql2sLakdWrV2PXrl14//33C3Wt0vbcytf/888/IzIyEq1atVKN7dOnDzIzM5GUlCQfW79+PerXr4/Y2Fj5mF6vx6OPPor9+/fj//7v/wAU9K4OCwtTnTM0NBRarVb1+j///HNc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O3bswE9/+lP4fL6UVVeee6LSwzCcB4FAALNmzcLWrVstt2/duhVz5swZomdVPCZPnoza2lrL+YtEItixY4dx/mbNmgW/3285pq2tDQcOHDCOaWhoQEdHB1577TXjmFdffRUdHR2WYw4cOIC2tjbjmC1btiAYDGLWrFnGMS+//LJlDNKWLVtQV1eHSZMm5f4E5IkQAsuWLcNTTz2Fbdu2YfLkyZb7ed4HjxAC4XCY5zyPLrzwQrS2tqKlpcX4mD17Nq699lq0tLTg9NNP57knIt3gXatXWuRotUceeUS89dZb4uabbxYjRowQhw4dGuqnVhC6urrE/v37xf79+wUAcc8994j9+/cbo+fWrVsnQqGQeOqpp0Rra6v46le/6jjyaMKECeI3v/mN2Ldvn5g/f77jyKOZM2eKXbt2iV27dolzzjnHceTRhRdeKPbt2yd+85vfiAkTJlhGHrW3t4uamhrx1a9+VbS2toqnnnpKVFdXF93Io3/8x38UoVBIbN++XbS1tRkfPT09xjE877l32223iZdfflkcPHhQvPHGG2LVqlXC4/GILVu2CCF4zgeTeZqEEDz3RKRjGM6jBx54QEycOFEEAgHxF3/xF8YIKxLipZdeEgCSPpYsWSKE0McerV69WtTW1opgMCj++q//WrS2tloeo7e3VyxbtkyMHj1alJeXi8suu0wcPnzYcswnn3wirr32WlFVVSWqqqrEtddeK06cOGE55r333hOLFi0S5eXlYvTo0WLZsmWW8UZCCPHGG2+IL37xiyIYDIra2lqxZs2aoht35HS+AYjHHnvMOIbnPff+/u//3vj/wCmnnCIuvPBCIwgLwXM+mOxhmOeeiIQQQhGC622IiIiIqDSxZ5iIiIiIShbDMBERERGVLIZhIiIiIipZDMNEREREVLIYhomIiIioZDEMExEREVHJYhgmIiIiopLFMExEREREJYthmIiGnUmTJkFRFCiKgvb29gE91gUXXGA8VktLS06eHxERFQ6GYSIqSLFYDHPmzMFVV11lub2jowP19fX4/ve/n/br77jjDrS1tSEUCg3oeTz11FN47bXXBvQYRERUuBiGiaggeb1ebNy4Ec3NzXjyySeN25cvX47Ro0fjBz/4Qdqvr6qqQm1tLRRFGdDzGD16NE455ZQBPQYRERUuhmEiKlhnnXUW1q5di+XLl+PDDz/Er3/9azQ1NWHjxo0IBAJZPdbjjz+OkSNH4tlnn8WUKVNQUVGBL3/5yzh58iQ2btyISZMmYdSoUVi+fDlisVieXhERERUa31A/ASKidJYvX47Nmzfj61//OlpbW/GDH/wAn/3sZ/v1WD09PfjpT3+KpqYmdHV14corr8SVV16JkSNH4vnnn8e7776Lq666Cl/4whdw9dVX5/aFEBFRQWIYJqKCpigKNmzYgKlTp+Kcc87Brbfe2u/HUlUVGzZswBlnnAEA+PKXv4yf//znOHbsGCorKzFt2jTMmzcPL730EsMwEVGJYJsEERW8Rx99FBUVFTh48CDef//9fj9ORUWFEYQBoKamBpMmTUJlZaXltuPHjw/o+RIRUfFgGCaigrZr1y785Cc/wa9//Ws0NDTg+uuvhxCiX4/l9/stnyuK4nibpmn9fr5ERFRcGIaJqGD19vZiyZIlWLp0KS666CI8/PDD2LNnDx566KGhfmpERDRMMAwTUcG69dZboWkafvSjHwEATjvtNPz4xz/GLbfcgkOHDg3tkyMiomGBYZiICtKOHTvwwAMP4PHHH8eIESOM22+44QbMmTNnQO0SREREkiL4rwkRDTOTJk3CzTffjJtvvjknj3fo0CFMnjwZ+/fv7/dYNyIiKkysDBPRsPTP//zPqKysREdHx4AeZ+HChZg+fXqOnhURERUaVoaJaNh57733oKoqAOD000+Hx9P/9/0ffPABent7Aeg9y9luviMiosLGMExEREREJYttEkRERERUshiGiYiIiKhkMQwTERERUcliGCYiIiKiksUwTEREREQli2GYiIiIiEoWwzARERERlSyGYSIiIiIqWQzDRERERFSyGIaJiIiIqGQxDBMRERFRyWIYJiIiIqKSxTBMRERERCWLYZiIiIiIShbDMBERERGVLIZhIiIiIipZDMNEREREVLIYhomIiIioZDEMExEREVHJYhgmIiIiopLFMExEREREJYthmIiIiIhKFsMwEREREZUshmEiIiIiKlkMw0RERERUshiGiYiIiKhkMQwTERERUcliGCYiIiKiksUwTEREREQli2GYiIiIiEoWwzARERERlSyGYSIiIiIqWQzDRERERFSyGIaJiIiIqGQxDBMRERFRyWIYJiIiIqKSxTBMRERERCWLYZiIiIiIShbDMBERERGVLIZhIiIiIipZDMNEREREVLIYhomIiIioZDEMExEREVHJYhgmIiIiopLFMExEREREJYthmIiIiIhKFsMwEREREZUshmEiIiIiKlkMw0RERERUshiGiYiIiKhkMQwTERERUcliGCYiIiKiksUwTEREREQli2GYiIiIiEoWwzARERERlSyGYSIiIiIqWQzDRERERFSyGIaJiIiIqGQxDBMRERFRyWIYJiIiIqKSxTBMRERERCWLYZiIiIiIShbDMBERERGVLIZhIiIiIipZDMNEREREVLIYhomIiIioZDEMExEREVHJYhgmIiIiopLFMExEREREJYthmIiIiIhKFsMwEREREZUshmEiIiIiKlkMw0RERERUshiGiYiIiKhkMQwTERERUcliGCYiIiKiksUwTEREREQli2GYiIiIiEoWwzARERERlaz/H3hmXjX1FgJ3AAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# GENERATE MODEL_INIT\n", - "os.chdir(SPECFEM2D_WORKDIR)\n", - "\n", - "# Run the mesher and solver to generate our initial model\n", - "! ./bin/xmeshfem2D > OUTPUT_FILES/mesher_log.txt\n", - "! ./bin/xspecfem2D > OUTPUT_FILES/solver_log.txt\n", - "\n", - "# Move the model files (*.bin) into the OUTPUT_FILES directory, where SeisFlows3 expects them\n", - "! mv DATA/*bin OUTPUT_FILES\n", - "\n", - "# Make sure we don't overwrite this initial model when creating our target model in the next step\n", - "! mv OUTPUT_FILES OUTPUT_FILES_INIT\n", - "\n", - "! head OUTPUT_FILES_INIT/solver_log.txt\n", - "! tail OUTPUT_FILES_INIT/solver_log.txt" + "! seisflows plot2d MODEL_01 vs --savefig m_01_vs.png\n", + "Image(filename='m_01_vs.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "-----------------------------\n", - "\n", - "Now we want to perturb the initial model to create our target model (__MODEL_TRUE__). The seisflows command line subargument `seisflows sempar velocity_model` will let us view and edit the velocity model. You can also do this manually by editing the Par_file directly. " + "### Closing thoughts" ] }, { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "VELOCITY_MODEL:\r\n", - "\r\n", - "1 1 2600.d0 5800.d0 3500.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0\r\n", - "->\r\n", - "1 1 2600.d0 5900.d0 3550.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0\r\n" - ] - } - ], - "source": [ - "# GENERATE MODEL_TRUE\n", - "os.chdir(SPECFEM2D_DATA)\n", - "\n", - "# Edit the Par_file by increasing velocities by ~10% \n", - "! seisflows sempar velocity_model '1 1 2600.d0 5900.d0 3550.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0'" - ] - }, - { - "cell_type": "code", - "execution_count": 25, + "cell_type": "raw", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - " **********************************************\n", - " **** Specfem 2-D Solver - serial version ****\n", - " **********************************************\n", - "\n", - " Running Git version of the code corresponding to commit cf89366717d9435985ba852ef1d41a10cee97884\n", - " dating From Date: Mon Nov 29 23:20:51 2021 -0800\n", - "\n", - "\n", - " NDIM = 2\n", - " -------------------------------------------------------------------------------\n", - " Program SPECFEM2D: \n", - " -------------------------------------------------------------------------------\n", - " -------------------------------------------------------------------------------\n", - " Tape-Liu-Tromp (GJI 2007)\n", - " -------------------------------------------------------------------------------\n", - " -------------------------------------------------------------------------------\n", - " D a t e : 29 - 04 - 2022 T i m e : 12:25:24\n", - " -------------------------------------------------------------------------------\n", - " -------------------------------------------------------------------------------\n" - ] - } - ], "source": [ - "# Re-run the mesher and solver to generate our target velocity model\n", - "os.chdir(SPECFEM2D_WORKDIR)\n", + "Have a look at the `working directory documentation page `__ for more detailed explanations of how to navigate the SeisFlows working directory that was created during this example.\n", "\n", - "# Make sure the ./OUTPUT_FILES directory exists since we moved the old one\n", - "if os.path.exists(SPECFEM2D_OUTPUT):\n", - " shutil.rmtree(SPECFEM2D_OUTPUT)\n", - "os.mkdir(SPECFEM2D_OUTPUT)\n", - "\n", - "# Run the binaries to generate MODEL_TRUE\n", - "! ./bin/xmeshfem2D > OUTPUT_FILES/mesher_log.txt\n", - "! ./bin/xspecfem2D > OUTPUT_FILES/solver_log.txt\n", - "\n", - "# Move all the relevant files into OUTPUT_FILES \n", - "! mv ./DATA/*bin OUTPUT_FILES\n", - "! mv OUTPUT_FILES OUTPUT_FILES_TRUE\n", - "\n", - "! head OUTPUT_FILES_INIT/solver_log.txt\n", - "! tail OUTPUT_FILES_INIT/solver_log.txt" + "You can also run Example \\#1 with more stations (up to 131), tasks/events (up to 25) and iterations (as many as you want!). Note that because this is a serial inversion, the compute time will scale with all of these values." ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "bin DATA OUTPUT_FILES_INIT OUTPUT_FILES_TRUE\r\n" - ] - } - ], + "outputs": [], "source": [ - "# Great, we have all the necessary SPECFEM files to run our SeisFlows3 inversion!\n", - "! ls" + "# An example call for running Example 1 with variable number of stations, events and iterations\n", + "! seisflows examples run 1 --nsta 10 --ntask 5 --niter 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 2. Initialize SeisFlows3 (SF3)\n", - "In this Section we will look at a SeisFlows3 working directory, parameter file, and working state.\n", - "\n", - "#### 2a. SF3 working directory and parameter file\n", + "## Example \\#2: Checkerboard Inversion (w/ Pyaflowa \\& L-BFGS)\n", "\n", - "As with SPECFEM, SeisFlows3 requires a parameter file (__parameters.yaml__) that controls how an automated workflow will proceed. Because SeisFlows3 is modular, there are a large number of potential parameters which may be present in SF3 parameter file, as each sub-module may have its own set of unique parameters.\n", + "Building on the foundation of the previous example, Example \\#2 runs a 2 iteration inversion with misfit quantification taken care of by the `Pyaflowa` preprocessing module, which uses the misfit quantification package [Pyatoa](https://github.com/adjtomo/pyatoa) under the hood. \n", "\n", - "In contrast to SPECFEM's method of listing all available parameters and leaving it up the User to determine which ones are relevant to them, SeisFlows3 dynamically builds its parameter file based on User inputs. In this subsection we will use the built-in SeisFlows3 command line tools to generate and populate the parameter file. " + "Model updates are performed using an [L-BFGS nonlinear optimization algorithm](https://en.wikipedia.org/wiki/Limited-memory_BFGS). Example \\#2 also includes smoothing/regularization of the gradient. This example more closely mimics a research-grade inversion problem." ] }, { @@ -649,1016 +417,359 @@ "metadata": {}, "source": [ ".. note::\n", - " See the `parameter file documentation page `__ for a more in depth exploration of this central SeisFlows3 file." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the previous section we saw the `sempar` command in action. We can use the `-h` or help flag to list all available SiesFlows3 command line commands." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "usage: seisflows [-h] [-w [WORKDIR]] [-p [PARAMETER_FILE]]\r\n", - " {setup,configure,init,submit,resume,restart,clean,par,sempar,check,print,convert,reset,debug,edit,examples}\r\n", - " ...\r\n", - "\r\n", - "================================================================================\r\n", - "\r\n", - " SeisFlows3: Waveform Inversion Package \r\n", - "\r\n", - "================================================================================\r\n", - "\r\n", - "optional arguments:\r\n", - " -h, --help show this help message and exit\r\n", - " -w [WORKDIR], --workdir [WORKDIR]\r\n", - " The SeisFlows working directory, default: cwd\r\n", - " -p [PARAMETER_FILE], --parameter_file [PARAMETER_FILE]\r\n", - " Parameters file, default: 'parameters.yaml'\r\n", - "\r\n", - "command:\r\n", - " Available SeisFlows arguments and their intended usages\r\n", - "\r\n", - " setup Setup working directory from scratch\r\n", - " configure Fill parameter file with defaults\r\n", - " init Initiate working environment\r\n", - " submit Submit initial workflow to system\r\n", - " resume Re-submit previous workflow to system\r\n", - " restart Remove current environment and submit new workflow\r\n", - " clean Remove files relating to an active working environment\r\n", - " par View and edit SeisFlows3 parameter file\r\n", - " sempar View and edit SPECFEM parameter file\r\n", - " check Check state of an active environment\r\n", - " print Print information related to an active environment\r\n", - " convert Convert model file format\r\n", - " reset Reset modules within an active state\r\n", - " debug Start interactive debug environment\r\n", - " edit Open source code file in text editor\r\n", - " examples Look at and run pre-configured example problems\r\n", - "\r\n", - "'seisflows [command] -h' for more detailed descriptions of each command.\r\n" - ] - } - ], - "source": [ - "! seisflows -h" + " This example is computationally more intense than the default version of Example \\#1 as it uses multiple events and stations, and runs multiple iterations. " ] }, { "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "creating parameter file: parameters.yaml\n", - "parameters.yaml specfem2d specfem2d_workdir\n" - ] - } - ], - "source": [ - "# The command 'setup' creates the 'parameters.yaml' file that controls all of SeisFlows3\n", - "# the '-f' flag removes any exist 'parameters.yaml' file that might be in the directory\n", - "os.chdir(WORKDIR)\n", - "! seisflows setup -f\n", - "! ls" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, + "execution_count": 10, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "# //////////////////////////////////////////////////////////////////////////////\r\n", - "#\r\n", - "# SeisFlows3 YAML Parameter File\r\n", - "#\r\n", - "# //////////////////////////////////////////////////////////////////////////////\r\n", - "#\r\n", - "# Modules correspond to the structure of the source code, and determine\r\n", - "# SeisFlows3' behavior at runtime. Each module requires its own sub-parameters.\r\n", - "#\r\n", - "# .. rubric::\r\n", - "# - To determine available options for modules listed below, run:\r\n", - "# > seisflows print module\r\n", - "# - To auto-fill with docstrings and default values (recommended), run:\r\n", - "# > seisflows configure\r\n", - "# - To set values as NoneType, use: null\r\n", - "# - To set values as infinity, use: inf\r\n", - "#\r\n", - "# MODULES\r\n", - "# ///////\r\n", - "# WORKFLOW (str): The method for running SeisFlows3; equivalent to main()\r\n", - "# SOLVER (str): External numerical solver to use for waveform simulations\r\n", - "# SYSTEM (str): Computer architecture of the system being used\r\n", - "# OPTIMIZE (str): Optimization algorithm for the inverse problem\r\n", - "# PREPROCESS (str): Preprocessing schema for waveform data\r\n", - "# POSTPROCESS (str): Postprocessing schema for kernels and gradients\r\n", - "# ==============================================================================\r\n", - "WORKFLOW: inversion\r\n", - "SOLVER: specfem2d\r\n", - "SYSTEM: workstation\r\n", - "OPTIMIZE: LBFGS \r\n", - "PREPROCESS: base\r\n", - "POSTPROCESS: base\r\n" + "No existing SPECFEM2D repo given, default to: /home/bchow/Work/work/seisflows_example/example_1/specfem2d\n", + "\n", + " @@@@@@@@@@ \n", + " .@@@@. .%&( %@. \n", + " @@@@ @@@@ &@@@@@@ ,%@ \n", + " @@@@ @@@, /@@ @ \n", + " @@@ @@@@ @@@ @ \n", + " @@@@ @@@@ @@@ @ @ \n", + " @@@ @@@@ ,@@@ @ @ \n", + " @@@@ @@@@ @@@@ @@ @ @\n", + " @@@@ @@@@@ @@@@@ @@@ @@ @\n", + " @@@@ @@@@@ @@@@@@@@@@@@@@ @@ @\n", + " @@@@ @@@@@@ @@@& @@@ @ \n", + " @@@@@ @@@@@@@@ %@@@@# @@ \n", + " @@@@# @@@@@@@@@@@@@@@@@ @@ \n", + " &@@@@@ @@@@( @@& \n", + " @@@@@@@ /@@@@ \n", + " @@@@@@@@@@@@@@@@@\n", + " @@@@@@@@@@ \n", + "\n", + "\n", + "================================================================================\n", + " SEISFLOWS EXAMPLE 2 \n", + " /////////////////// \n", + "This is a [SPECFEM2D] [WORKSTATION] example, which will run an inversion to\n", + "assess misfit between a starting homogeneous halfspace model and a target\n", + "checkerboard model. This example problem uses the [PYAFLOWA] preprocessing\n", + "module and the [LBFGS] optimization algorithm. [4 events, 32 stations, 2\n", + "iterations]. The tasks involved include:\n", + "\n", + "1. (optional) Download, configure, compile SPECFEM2D\n", + "2. [Setup] a SPECFEM2D working directory\n", + "3. [Setup] starting model from 'Tape2007' example\n", + "4. [Setup] target model w/ perturbed starting model\n", + "5. [Setup] a SeisFlows working directory\n", + "6. [Run] the inversion workflow\n", + "================================================================================\n" ] } ], "source": [ - "# Let's have a look at this file, which has not yet been populated\n", - "! cat parameters.yaml" + "# Run the help message dialogue to see what Example 2 will do\n", + "! seisflows examples 2" ] }, { - "cell_type": "code", - "execution_count": 37, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " SEISFLOWS3 MODULES \r\n", - " ////////////////// \r\n", - "'+': package, '-': module, '*': class\r\n", - "\r\n", - "+ SYSTEM\r\n", - " - seisflows\r\n", - " * base\r\n", - " * cluster\r\n", - " * lsf\r\n", - " * slurm\r\n", - " * workstation\r\n", - " - seisflows-super\r\n", - " * chinook\r\n", - " * maui\r\n", - "+ PREPROCESS\r\n", - " - seisflows\r\n", - " * base\r\n", - " * pyatoa\r\n", - " - seisflows-super\r\n", - " * pyatoa_nz\r\n", - "+ SOLVER\r\n", - " - seisflows\r\n", - " * base\r\n", - " * specfem2d\r\n", - " * specfem3d\r\n", - " * specfem3d_globe\r\n", - " - seisflows-super\r\n", - " * specfem3d_maui\r\n", - "+ POSTPROCESS\r\n", - " - seisflows\r\n", - " * base\r\n", - " - seisflows-super\r\n", - "+ OPTIMIZE\r\n", - " - seisflows\r\n", - " * LBFGS\r\n", - " * NLCG\r\n", - " * base\r\n", - " - seisflows-super\r\n", - "+ WORKFLOW\r\n", - " - seisflows\r\n", - " * base\r\n", - " * inversion\r\n", - " * migration\r\n", - " * test\r\n", - " - seisflows-super\r\n", - " * thrifty_inversion\r\n", - " * thrifty_maui\r\n" - ] - } - ], "source": [ - "# We can use the `seisflows print modules` command to list out the available options \n", - "! seisflows print modules" + "### Run the example \n", + "\n", + "You can run the example with the same command as shown for Example 1. Users following along will need to provide a path to their own installation of SPECFEM2D using the `-r` flag." ] }, { "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "SOLVER: specfem2d -> specfem2d\n", - "# //////////////////////////////////////////////////////////////////////////////\n", - "#\n", - "# SeisFlows3 YAML Parameter File\n", - "#\n", - "# //////////////////////////////////////////////////////////////////////////////\n", - "#\n", - "# Modules correspond to the structure of the source code, and determine\n", - "# SeisFlows3' behavior at runtime. Each module requires its own sub-parameters.\n", - "#\n", - "# .. rubric::\n", - "# - To determine available options for modules listed below, run:\n", - "# > seisflows print module\n", - "# - To auto-fill with docstrings and default values (recommended), run:\n", - "# > seisflows configure\n", - "# - To set values as NoneType, use: null\n", - "# - To set values as infinity, use: inf\n", - "#\n", - "# MODULES\n", - "# ///////\n", - "# WORKFLOW (str): The method for running SeisFlows3; equivalent to main()\n", - "# SOLVER (str): External numerical solver to use for waveform simulations\n", - "# SYSTEM (str): Computer architecture of the system being used\n", - "# OPTIMIZE (str): Optimization algorithm for the inverse problem\n", - "# PREPROCESS (str): Preprocessing schema for waveform data\n", - "# POSTPROCESS (str): Postprocessing schema for kernels and gradients\n", - "# ==============================================================================\n", - "WORKFLOW: inversion\n", - "SOLVER: specfem2d\n", - "SYSTEM: workstation\n", - "OPTIMIZE: LBFGS \n", - "PREPROCESS: base\n", - "POSTPROCESS: base\n" - ] - } - ], - "source": [ - "# For this example, we can use most of the default modules, however we need to \n", - "# change the SOLVER module to let SeisFlows3 know we're using SPECFEM2D (as opposed to 3D)\n", - "! seisflows par solver specfem2d\n", - "! cat parameters.yaml" - ] - }, - { - "cell_type": "markdown", + "execution_count": null, "metadata": {}, + "outputs": [], "source": [ - "-------------------------\n", - "The `seisflows configure` command populates the parameter file based on the chosen modules. SeisFlows3 will attempt to fill in all parameters with default values when possible, but values that the User __MUST__ set will be denoted by the value:\n", - "\n", - ">__!!! REQUIRED PARAMETER !!!__\n", - "\n", - "SeisFlows3 will not work until all of these required parameters are set by the User. Docstrings above each module show descriptions and available options for each of these parameters. In the follownig cell we will use the `seisflows par` command to edit the parameters.yaml file directly, replacing each of the required parameters with a chosen value. Comments next to each evaluation describe the choice for each." + "! seisflows examples run 2 -r ${PATH_TO_SPECFEM2D}" ] }, { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "filling parameters.yaml w/ default values\n", - "# //////////////////////////////////////////////////////////////////////////////\n", - "#\n", - "# SeisFlows3 YAML Parameter File\n", - "#\n", - "# //////////////////////////////////////////////////////////////////////////////\n", - "#\n", - "# Modules correspond to the structure of the source code, and determine\n", - "# SeisFlows3' behavior at runtime. Each module requires its own sub-parameters.\n", - "#\n", - "# .. rubric::\n", - "# - To determine available options for modules listed below, run:\n", - "# > seisflows print module\n", - "# - To auto-fill with docstrings and default values (recommended), run:\n", - "# > seisflows configure\n", - "# - To set values as NoneType, use: null\n", - "# - To set values as infinity, use: inf\n", - "#\n", - "# MODULES\n", - "# ///////\n", - "# WORKFLOW (str): The method for running SeisFlows3; equivalent to main()\n", - "# SOLVER (str): External numerical solver to use for waveform simulations\n", - "# SYSTEM (str): Computer architecture of the system being used\n", - "# OPTIMIZE (str): Optimization algorithm for the inverse problem\n", - "# PREPROCESS (str): Preprocessing schema for waveform data\n", - "# POSTPROCESS (str): Postprocessing schema for kernels and gradients\n", - "# ==============================================================================\n", - "WORKFLOW: inversion\n", - "SOLVER: specfem2d\n", - "SYSTEM: workstation\n", - "OPTIMIZE: LBFGS \n", - "PREPROCESS: base\n", - "POSTPROCESS: base\n", - "\n", - "# =============================================================================\n", - "# SYSTEM \n", - "# ////// \n", - "# TITLE (str):\n", - "# The name used to submit jobs to the system, defaults to the name of the\n", - "# working directory\n", - "# PRECHECK (list):\n", - "# A list of parameters that will be displayed to stdout before 'submit' or\n", - "# 'resume' is run. Useful for manually reviewing important parameters prior\n", - "# to system submission\n", - "# LOG_LEVEL (str):\n", - "# Verbosity output of SF3 logger. Available from least to most verbosity:\n", - "# 'CRITICAL', 'WARNING', 'INFO', 'DEBUG'; defaults to 'DEBUG'\n", - "# VERBOSE (bool):\n", - "# Level of verbosity provided to the output log. If True, log statements\n", - "# will declare what module/class/function they are being called from.\n", - "# Useful for debugging but also very noisy.\n", - "# MPIEXEC (str):\n", - "# Function used to invoke executables on the system. For example 'srun' on\n", - "# SLURM systems, or './' on a workstation. If left blank, will guess based\n", - "# on the system.\n", - "# NTASK (int):\n", - "# Number of separate, individual tasks. Also equal to the number of desired\n", - "# sources in workflow\n", - "# NPROC (int):\n", - "# Number of processor to use for each simulation\n", - "# =============================================================================\n", - "TITLE: sf3_specfem2d_example\n", - "PRECHECK:\n", - " - TITLE\n", - "LOG_LEVEL: DEBUG\n", - "VERBOSE: False\n", - "MPIEXEC:\n", - "NTASK: 1\n", - "NPROC: 1\n", - "\n", - "# =============================================================================\n", - "# PREPROCESS \n", - "# ////////// \n", - "# MISFIT (str):\n", - "# Misfit function for waveform comparisons, for available see\n", - "# seisflows.plugins.misfit\n", - "# BACKPROJECT (str):\n", - "# Backprojection function for migration, for available see\n", - "# seisflows.plugins.adjoint\n", - "# NORMALIZE (list):\n", - "# Data normalization parameters used to normalize the amplitudes of\n", - "# waveforms. Choose from two sets: ENORML1: normalize per event by L1 of\n", - "# traces; OR ENORML2: normalize per event by L2 of traces; AND TNORML1:\n", - "# normalize per trace by L1 of itself; OR TNORML2: normalize per trace by\n", - "# L2 of itself\n", - "# FILTER (str):\n", - "# Data filtering type, available options are:BANDPASS (req. MIN/MAX\n", - "# PERIOD/FREQ);LOWPASS (req. MAX_FREQ or MIN_PERIOD); HIGHPASS (req.\n", - "# MIN_FREQ or MAX_PERIOD)\n", - "# MIN_PERIOD (float):\n", - "# Minimum filter period applied to time series.See also MIN_FREQ, MAX_FREQ,\n", - "# if User defines FREQ parameters, they will overwrite PERIOD parameters.\n", - "# MAX_PERIOD (float):\n", - "# Maximum filter period applied to time series.See also MIN_FREQ, MAX_FREQ,\n", - "# if User defines FREQ parameters, they will overwrite PERIOD parameters.\n", - "# MIN_FREQ (float):\n", - "# Maximum filter frequency applied to time series.See also MIN_PERIOD,\n", - "# MAX_PERIOD, if User defines FREQ parameters, they will overwrite PERIOD\n", - "# parameters.\n", - "# MAX_FREQ (float):\n", - "# Maximum filter frequency applied to time series,See also MIN_PERIOD,\n", - "# MAX_PERIOD, if User defines FREQ parameters, they will overwrite PERIOD\n", - "# parameters.\n", - "# MUTE (list):\n", - "# Data mute parameters used to zero out early / late arrivals or offsets.\n", - "# Choose any number of: EARLY: mute early arrivals; LATE: mute late\n", - "# arrivals; SHORT: mute short source-receiver distances; LONG: mute long\n", - "# source-receiver distances\n", - "# =============================================================================\n", - "MISFIT: waveform\n", - "BACKPROJECT: null\n", - "NORMALIZE: []\n", - "FILTER: null\n", - "MIN_PERIOD:\n", - "MAX_PERIOD:\n", - "MIN_FREQ:\n", - "MAX_FREQ:\n", - "MUTE: []\n", - "\n", - "# =============================================================================\n", - "# SOLVER \n", - "# ////// \n", - "# MATERIALS (str):\n", - "# Material parameters used to define model. Available: ['ELASTIC': Vp, Vs,\n", - "# 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC']\n", - "# DENSITY (str):\n", - "# How to treat density during inversion. Available: ['CONSTANT': Do not\n", - "# update density, 'VARIABLE': Update density]\n", - "# ATTENUATION (str):\n", - "# If True, turn on attenuation during forward simulations, otherwise set\n", - "# attenuation off. Attenuation is always off for adjoint simulations.\n", - "# COMPONENTS (str):\n", - "# Components used to generate data, formatted as a single string, e.g. ZNE\n", - "# or NZ or E\n", - "# SOLVERIO (int):\n", - "# The format external solver files. Available: ['fortran_binary', 'adios']\n", - "# NT (float):\n", - "# Number of time steps set in the SPECFEM Par_file\n", - "# DT (float):\n", - "# Time step or delta set in the SPECFEM Par_file\n", - "# F0 (float):\n", - "# Dominant source frequency\n", - "# FORMAT (float):\n", - "# Format of synthetic waveforms used during workflow, available options:\n", - "# ['ascii', 'su']\n", - "# SOURCE_PREFIX (str):\n", - "# Prefix of SOURCE files in path SPECFEM_DATA. By default, 'SOURCE' for\n", - "# SPECFEM2D\n", - "# =============================================================================\n", - "MATERIALS: !!! REQUIRED PARAMETER !!!\n", - "DENSITY: !!! REQUIRED PARAMETER !!!\n", - "ATTENUATION: !!! REQUIRED PARAMETER !!!\n", - "COMPONENTS: ZNE\n", - "SOLVERIO: fortran_binary\n", - "NT: !!! REQUIRED PARAMETER !!!\n", - "DT: !!! REQUIRED PARAMETER !!!\n", - "F0: !!! REQUIRED PARAMETER !!!\n", - "FORMAT: !!! REQUIRED PARAMETER !!!\n", - "SOURCE_PREFIX: SOURCE\n", - "\n", - "# =============================================================================\n", - "# POSTPROCESS \n", - "# /////////// \n", - "# SMOOTH_H (float):\n", - "# Gaussian half-width for horizontal smoothing in units of meters. If 0.,\n", - "# no smoothing applied\n", - "# SMOOTH_V (float):\n", - "# Gaussian half-width for vertical smoothing in units of meters\n", - "# TASKTIME_SMOOTH (int):\n", - "# Large radii smoothing may take longer than normal tasks. Allocate\n", - "# additional smoothing task time as a multiple of TASKTIME\n", - "# =============================================================================\n", - "SMOOTH_H: 0.0\n", - "SMOOTH_V: 0.0\n", - "TASKTIME_SMOOTH: 1\n", - "\n", - "# =============================================================================\n", - "# OPTIMIZE \n", - "# //////// \n", - "# LINESEARCH (str):\n", - "# Algorithm to use for line search, see seisflows.plugins.line_search for\n", - "# available choices\n", - "# PRECOND (str):\n", - "# Algorithm to use for preconditioning gradients, see\n", - "# seisflows.plugins.preconds for available choices\n", - "# STEPCOUNTMAX (int):\n", - "# Max number of trial steps in line search before a change in line search\n", - "# behavior\n", - "# STEPLENINIT (float):\n", - "# Initial line search step length, as a fraction of current model\n", - "# parameters\n", - "# STEPLENMAX (float):\n", - "# Max allowable step length, as a fraction of current model parameters\n", - "# LBFGSMEM (int):\n", - "# Max number of previous gradients to retain in local memory\n", - "# LBFGSMAX (int):\n", - "# LBFGS periodic restart interval, between 1 and 'inf'\n", - "# LBFGSTHRESH (float):\n", - "# LBFGS angle restart threshold\n", - "# =============================================================================\n", - "LINESEARCH: Backtrack\n", - "PRECOND:\n", - "STEPCOUNTMAX: 10\n", - "STEPLENINIT: 0.05\n", - "STEPLENMAX: 0.5\n", - "LBFGSMEM: 3\n", - "LBFGSMAX: inf\n", - "LBFGSTHRESH: 0.0\n", - "\n", - "# =============================================================================\n", - "# WORKFLOW \n", - "# //////// \n", - "# CASE (str):\n", - "# Type of inversion, available: ['data': real data inversion, 'synthetic':\n", - "# synthetic-synthetic inversion]\n", - "# RESUME_FROM (str):\n", - "# Name of task to resume inversion from\n", - "# STOP_AFTER (str):\n", - "# Name of task to stop inversion after finishing\n", - "# SAVEMODEL (bool):\n", - "# Save final model files after each iteration\n", - "# SAVEGRADIENT (bool):\n", - "# Save gradient files after each iteration\n", - "# SAVEKERNELS (bool):\n", - "# Save event kernel files after each iteration\n", - "# SAVETRACES (bool):\n", - "# Save waveform traces after each iteration\n", - "# SAVERESIDUALS (bool):\n", - "# Save waveform residuals after each iteration\n", - "# SAVEAS (str):\n", - "# Format to save models, gradients, kernels. Available: ['binary': save\n", - "# files in native SPECFEM .bin format, 'vector': save files as NumPy .npy\n", - "# files, 'both': save as both binary and vectors]\n", - "# BEGIN (int):\n", - "# First iteration of workflow, 1 <= BEGIN <= inf\n", - "# END (int):\n", - "# Last iteration of workflow, BEGIN <= END <= inf\n", - "# =============================================================================\n", - "CASE: !!! REQUIRED PARAMETER !!!\n", - "RESUME_FROM:\n", - "STOP_AFTER:\n", - "SAVEMODEL: True\n", - "SAVEGRADIENT: True\n", - "SAVEKERNELS: False\n", - "SAVETRACES: False\n", - "SAVERESIDUALS: False\n", - "SAVEAS: binary\n", - "BEGIN: 1\n", - "END: !!! REQUIRED PARAMETER !!!\n", - "\n", - "# =============================================================================\n", - "# PATHS \n", - "# ///// \n", - "# SCRATCH:\n", - "# scratch path to hold temporary data during workflow\n", - "# OUTPUT:\n", - "# directory to save workflow outputs to disk\n", - "# SYSTEM:\n", - "# scratch path to hold any system related data\n", - "# LOCAL:\n", - "# path to local data to be used during workflow\n", - "# LOGFILE:\n", - "# the main output log file where all processes will track their status\n", - "# SOLVER:\n", - "# scratch path to hold solver working directories\n", - "# SPECFEM_BIN:\n", - "# path to the SPECFEM binary executables\n", - "# SPECFEM_DATA:\n", - "# path to the SPECFEM DATA/ directory containing the 'Par_file', 'STATIONS'\n", - "# file and 'CMTSOLUTION' files\n", - "# DATA:\n", - "# path to data available to workflow\n", - "# MASK:\n", - "# Directory to mask files for gradient masking\n", - "# OPTIMIZE:\n", - "# scratch path to store data related to nonlinear optimization\n", - "# MODEL_INIT:\n", - "# location of the initial model to be used for workflow\n", - "# MODEL_TRUE:\n", - "# Target model to be used for PAR.CASE == 'synthetic'\n", - "# FUNC:\n", - "# scratch path to store data related to function evaluations\n", - "# GRAD:\n", - "# scratch path to store data related to gradient evaluations\n", - "# HESS:\n", - "# scratch path to store data related to Hessian evaluations\n", - "# =============================================================================\n", - "PATHS:\n", - " SCRATCH: /home/bchow/Work/work/sf3_specfem2d_example/scratch\n", - " OUTPUT: /home/bchow/Work/work/sf3_specfem2d_example/output\n", - " SYSTEM: /home/bchow/Work/work/sf3_specfem2d_example/scratch/system\n", - " LOCAL:\n", - " LOGFILE: /home/bchow/Work/work/sf3_specfem2d_example/output_sf3.txt\n", - " SOLVER: /home/bchow/Work/work/sf3_specfem2d_example/scratch/solver\n", - " SPECFEM_BIN: !!! REQUIRED PATH !!!\n", - " SPECFEM_DATA: !!! REQUIRED PATH !!!\n", - " DATA:\n", - " MASK:\n", - " OPTIMIZE: /home/bchow/Work/work/sf3_specfem2d_example/scratch/optimize\n", - " MODEL_INIT: !!! REQUIRED PATH !!!\n", - " MODEL_TRUE:\n", - " FUNC: /home/bchow/Work/work/sf3_specfem2d_example/scratch/scratch\n", - " GRAD: /home/bchow/Work/work/sf3_specfem2d_example/scratch/evalgrad\n", - " HESS: /home/bchow/Work/work/sf3_specfem2d_example/scratch/evalhess\n" - ] - } - ], + "cell_type": "raw", + "metadata": {}, "source": [ - "! seisflows configure\n", - "! cat parameters.yaml" + "Succesful completion of the example problem will end with a log message that looks similar to the following\n", + "\n", + ".. code:: bash\n", + "\n", + " 2022-08-29 18:08:13 (I) | \n", + " CLEANING WORKDIR FOR NEXT ITERATION\n", + " --------------------------------------------------------------------------------\n", + " 2022-08-29 18:08:15 (I) | thrifty inversion encountering final iteration, defaulting to inversion workflow\n", + " 2022-08-29 18:08:21 (I) | \n", + " ////////////////////////////////////////////////////////////////////////////////\n", + " COMPLETE ITERATION 02 \n", + " ////////////////////////////////////////////////////////////////////////////////\n", + " 2022-08-29 18:08:21 (I) | setting current iteration to: 3\n", + "\n", + " ================================================================================\n", + " EXAMPLE COMPLETED SUCCESFULLY\n", + " ================================================================================" ] }, { - "cell_type": "code", - "execution_count": 40, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "!!! REQUIRED PARAMETER !!!\r\n", - "==========================\r\n", - "\tMATERIALS\r\n", - "\tDENSITY\r\n", - "\tATTENUATION\r\n", - "\tNT\r\n", - "\tDT\r\n", - "\tF0\r\n", - "\tFORMAT\r\n", - "\tCASE\r\n", - "\tEND\r\n", - "!!! REQUIRED PATH !!!\r\n", - "=====================\r\n", - "\tSPECFEM_BIN\r\n", - "\tSPECFEM_DATA\r\n", - "\tMODEL_INIT\r\n" - ] - } - ], "source": [ - "# We can check which parameters we will NEED to fill out before running the workflow with the --required flag\n", - "! seisflows par --required" + "### Understanding example outputs\n", + "\n", + "As with Example \\#1, we can look at the output gradients and models to visualize what just happenend under the hood. Be sure to read through the output log messages as well, to get a better idea of what steps and tasks were performed to generate these outputs." ] }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "MATERIALS: !!! REQUIRED PARAMETER !!! -> elastic\n", - "DENSITY: !!! REQUIRED PARAMETER !!! -> constant\n", - "ATTENUATION: !!! REQUIRED PARAMETER !!! -> False\n", - "NT: !!! REQUIRED PARAMETER !!! -> 5000\n", - "DT: !!! REQUIRED PARAMETER !!! -> .06\n", - "F0: !!! REQUIRED PARAMETER !!! -> 0.084\n", - "FORMAT: !!! REQUIRED PARAMETER !!! -> ascii\n", - "BEGIN: 1 -> 1\n", - "END: !!! REQUIRED PARAMETER !!! -> 1\n", - "CASE: !!! REQUIRED PARAMETER !!! -> synthetic\n" + "/home/bchow/Work/work/seisflows_example/example_2\n", + "logs\tparameters.yaml sflog.txt specfem2d\r\n", + "output\tscratch\t\t sfstate.txt specfem2d_workdir\r\n" ] - }, - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ - "# EDIT THE SEISFLOWS3 PARAMETER FILE\n", - "! seisflows par materials elastic # how the velocity model is parameterized\n", - "! seisflows par density constant # update density or keep constant\n", - "! seisflows par attenuation False\n", - "! seisflows par nt 5000 # set by SPECFEM2D Par_file\n", - "! seisflows par dt .06 # set by SPECFEM2D Par_file\n", - "! seisflows par f0 0.084 # set by SOURCE file\n", - "! seisflows par format ascii # how to output synthetic seismograms\n", - "! seisflows par begin 1 # first iteration\n", - "! seisflows par end 1 # final iteration -- we will only run 1\n", - "! seisflows par case synthetic # synthetic-synthetic means we need both INIT and TRUE models\n", - "\n", - "# Use Python syntax here to access path constants\n", - "os.system(f\"seisflows par specfem_bin {SPECFEM2D_BIN}\") # set path to SPECFEM2D binaries\n", - "os.system(f\"seisflows par specfem_data {SPECFEM2D_DATA}\") # set path to SEPCFEM2D DATA/\n", - "os.system(f\"seisflows par model_init {SPECFEM2D_MODEL_INIT}\") # set path to INIT model\n", - "os.system(f\"seisflows par model_true {SPECFEM2D_MODEL_TRUE}\") # set path to TRUE model" + "%cd ~/sfexamples/example_2\n", + "! ls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "------------------------------\n", - "One last thing, we will need to edit the SPECFEM2D Par_file parameter `MODEL` such that `xmeshfem2d` reads our pre-built velocity models (\\*.bin files) rather than the meshing parameters defined in the Par_file." + "Running the `plot2d` command without any arguments is a useful way to determine what model/gradient files are available for plotting. " ] }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "MODEL: default -> gll\r\n" + " PLOT2D \r\n", + " ////// \r\n", + "Available models/gradients/kernels\r\n", + "\r\n", + "GRADIENT_01\r\n", + "GRADIENT_02\r\n", + "MODEL_01\r\n", + "MODEL_02\r\n", + "MODEL_INIT\r\n", + "MODEL_TRUE\r\n" ] } ], "source": [ - "os.chdir(SPECFEM2D_DATA)\n", - "! seisflows sempar model gll" + "! seisflows plot2d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### 2b. Initialize SF3 working state\n", - "\n", - "The SeisFlows3 command `seisflows init` will generate the a SeisFlows3 working state without submitting any jobs to the system. This is useful for testing to see if the user has set an acceptable parameter file, and if SeisFlows3 is working as expected. \n", - "\n", - "The result of running `seisflows init` is a collection of pickle (\\*.p) and JSON files which define the active Python environment. SeisFlows3 relies directly on these files to determine where it is in a workflow. Throughout an active workflow, SeisFlows3 will checkpoint itself to these pickle and JSON files such that if a workflow finishes or crashes, the User can resume a workflow from the last checkpointed state rather than needing to restart the workflow.\n", - "\n", - ">__DEBUG MODE:__ After running `seisflows init` you can explore the SeisFlows3 working state in an interactive iPython environment by running `seisflows debug`. This will open up an iPython environment in which the active working state is loaded and accessible The debug mode is invaluable for exploring the SeisFlows3 working state, debugging errors, and performing manual manipulations to an otherwise automated tool. You can try for yourself by running debug mode and typing 'preprocess' to access the active preprocess module." + "Similarly, running `plot2d` with 1 argument will help determine what quantities are available to plot" ] }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "instantiating SeisFlows3 working state in directory: output\n", - "seisflows_optimize.p\t seisflows_postprocess.p seisflows_system.p\n", - "seisflows_parameters.json seisflows_preprocess.p seisflows_workflow.p\n", - "seisflows_paths.json\t seisflows_solver.p\n" + "Traceback (most recent call last):\r\n", + " File \"/home/bchow/miniconda3/envs/docs/bin/seisflows\", line 33, in \r\n", + " sys.exit(load_entry_point('seisflows', 'console_scripts', 'seisflows')())\r\n", + " File \"/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py\", line 1383, in main\r\n", + " sf()\r\n", + " File \"/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py\", line 438, in __call__\r\n", + " getattr(self, self._args.command)(**vars(self._args))\r\n", + " File \"/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py\", line 1106, in plot2d\r\n", + " save=savefig)\r\n", + " File \"/home/bchow/REPOSITORIES/seisflows/seisflows/tools/specfem.py\", line 428, in plot2d\r\n", + " f\"chosen `parameter` must be in {self._parameters}\"\r\n", + "AssertionError: chosen `parameter` must be in ['vp', 'vs']\r\n" ] } ], "source": [ - "os.chdir(WORKDIR)\n", - "! seisflows init\n", - "! ls output" + "! seisflows plot2d MODEL_TRUE" ] }, { - "cell_type": "code", - "execution_count": 52, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\r\n", - " \"ATTENUATION\": false,\r\n", - " \"BACKPROJECT\": null,\r\n", - " \"BEGIN\": 1,\r\n", - " \"CASE\": \"synthetic\",\r\n", - " \"COMPONENTS\": \"ZNE\",\r\n", - " \"DENSITY\": \"constant\",\r\n", - " \"DT\": 0.06,\r\n", - " \"END\": 1,\r\n", - " \"F0\": 0.084,\r\n" - ] - } - ], "source": [ - "# All of the parameters defined in parameters.yaml are saved in this \n", - "# internally-used JSON file\n", - "! head output/seisflows_parameters.json" + "### Visualizing Initial and Target models\n", + "\n", + "The starting model for this example is the same homogeneous halfspace model shown in Example \\#1, with $V_p$=5.8km/s and $V_s$=3.5km/s. \n", + "\n", + "For this example, however, the target model is a checkerboard model with fast and slow perturbations roughly equal to $\\pm10\\%$ of the initial model. We can plot the model below to get a visual representation of these perturbations, where **red==slow** and **blue==fast**." ] }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{\r\n", - " \"DATA\": null,\r\n", - " \"FUNC\": \"/home/bchow/Work/work/sf3_specfem2d_example/scratch/scratch\",\r\n", - " \"GRAD\": \"/home/bchow/Work/work/sf3_specfem2d_example/scratch/evalgrad\",\r\n", - " \"HESS\": \"/home/bchow/Work/work/sf3_specfem2d_example/scratch/evalhess\",\r\n", - " \"LOCAL\": null,\r\n", - " \"LOGFILE\": \"/home/bchow/Work/work/sf3_specfem2d_example/output_sf3.txt\",\r\n", - " \"MASK\": null,\r\n", - " \"MODEL_INIT\": \"/home/bchow/Work/work/sf3_specfem2d_example/specfem2d_workdir/OUTPUT_FILES_INIT\",\r\n", - " \"MODEL_TRUE\": \"/home/bchow/Work/work/sf3_specfem2d_example/specfem2d_workdir/OUTPUT_FILES_TRUE\",\r\n" + "Figure(707.107x707.107)\r\n" ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAALDCAYAAADwjA1CAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydeXwURfr/P3MnBBJAICGCoIvcgkIEs6h4ASIgoKuLB4IiK6LigaurqKCuylcURf0unhzigT/kCx5gxAPxRAFlF0TBZcVjOUQEwiFJZlK/Pybd6aOqurqnJ5mQ5/16zSsz1VXVPUeqP/30p54KMMYYCIIgCIIgCKIeEqztAyAIgiAIgiCI2oLEMEEQBEEQBFFvITFMEARBEARB1FtIDBMEQRAEQRD1FhLDBEEQBEEQRL2FxDBBEARBEARRbyExTBAEQRAEQdRbSAwTBEEQBEEQ9RYSwwRBEARBEES9hcQwQRAEQRAEUW8hMUwQBEEQBEHUW0gMEwRBEARBEPUWEsMEQRAEQRBEvYXEMEEQBEEQBFFvITFMEARBEARB1FtIDBMEQRAEQRD1FhLDBEEQBEEQRL2FxDBBEARBEARRbyExTBAEQRAEQdRbSAwTBEEQBEEQ9RYSwwRBEARBEES9hcQwQRAEQRAEUW8hMUwQBEEQBEHUW0gMEwRBEARBEPUWEsMEQRAEQRBEvYXEMEEQBEEQBFFvITFMEARBEARB1FtIDBMEQRAEQRD1FhLDBEEQBEEQRL2FxDBBEARBEARRbyExTBAEQRAEQdRbSAwTBEEQBEEQ9RYSwwRBEARBEES9hcQwQRAEQRAEUW8hMUwQBEEQBEHUW0gMEwRBEARBEPUWEsMEQRAEQRBEvYXEMEEQBEEQBFFvITFMEARBEARB1FtIDBMEQRAEQRD1FhLDBEEQBEEQRL2FxDBBEARBEARRbyExTBAEQRAEQdRbSAwTBEEQBEEQ9RYSwwRBEARBEES9hcQwQRAEQRAEUW8hMUwQBEEQBEHUW0gMEwRBEARBEPUWEsMEQRAEQRBEvYXEMEEQBEEQBFFvITFMEARBEARB1FtIDBMEQRAEQRD1FhLDBEEQBEEQRL2FxDBBEARBEARRbyExTBAEQRAEQdRbSAwTBEEQBEEQ9RYSwwRBEARBEES9hcQwQRAEQRAEUW8hMUwQBEEQBEHUW0gMEwRBEARBEPUWEsMEQRAEQRBEvYXEMEEQBEEQBFFvITFMEARBEARB1FtIDBMEQRAEQRD1FhLDBEEQBEEQRL2FxDBBEARBEARRbyExTBAEQRAEQdRbSAwTBEEQBEEQ9RYSwwRBEARBEES9hcQwQRAEQRAEUW8hMUwQBEEQBEHUW0gMEwRBEARBEPUWEsMEQRAEQRBEvYXEMFGvGT58OLKzs7Fnzx5hnUsuuQSRSAQ7duyouQNzYPTo0Wjbtm1tH4aQK6+8El27dkXjxo2RnZ2N9u3b469//St+/fVXU719+/bhlltuQf/+/dG8eXMEAgFMmTKF2+fo0aMRCARsj44dO3LrP/744+jYsSNisRiOPvpo3H333aioqFA6/oqKCtx9991o27YtYrEYOnbsiMcff5xblzGG2bNno1evXsjJyUFubi569OiB1157Ta/zwQcfcI9de4wbN06vu3btWgwaNAhHHXUUsrOz0bRpUxQXF+OFF17g7vuZZ55Bz549kZubiyOOOAJ9+/bFkiVLTPU2bdqEm2++GT179kTjxo3RtGlT9OnTB6+++ir3PS1fvhz9+vVDixYt0LBhQ3Tr1g2PPfYYEomEqd6bb76Jyy67DMcddxwikQgCgQC3vzVr1uCaa67Bcccdh0aNGiE/Px9nnXUW3n//fVvdKVOmcD+jrKwsbt8EQRCpEq7tAyCI2mTMmDFYvHgxXnrpJYwfP962fe/evVi0aBEGDx6M/Pz8WjhCPnfeeSeuv/762j4MIQcOHMBf/vIXtGvXDllZWVi9ejXuu+8+LF26FF999RWi0SgAYNeuXXj66afRvXt3DBs2DM8++6y03+zsbJuAys7OttW77777cOedd+Jvf/sb+vfvj1WrVuGOO+7Af//7Xzz99NOOxz9+/HjMmzcP9957L0488US8/fbbuP7667Fv3z7cfvvtprpXX3015syZgxtvvBEPPPAA4vE41q1bh4MHD+p1evTogc8++8y2n5kzZ+L555/H8OHD9bI9e/agdevWuOiii3DkkUfiwIEDePHFFzFy5Ehs2bIFd9xxh1538uTJuPfeezFu3DhMnToVhw4dwuOPP47Bgwdj4cKFOO+88wAAy5Ytw5IlSzBy5EiceOKJiMfjeOWVV3DBBRfg7rvvxl133aX3+e6772LAgAE49dRT8cwzzyAnJwevv/46rr/+emzevBkzZszQ6y5atAgrV67ECSecgFgshjVr1nA/z5dffhlffPEFrrjiCnTv3h0HDhzAk08+iTPPPBNz587FZZddZmtTUlKCvLw8/XUwSLEbgiDSBCOIekw8HmeFhYWsZ8+e3O0zZ85kANgbb7xRw0d2+PGPf/yDAWDvvfeeXlZZWckqKysZY4zt3LmTAWCTJ0/mth81ahTLyclx3M+vv/7KsrKy2F/+8hdT+X333ccCgQD7+uuvpe3Xr1/PAoEAu//++03lY8eOZdnZ2WzXrl162aJFixgA9sorrzgel5XKykp2zDHHsDZt2rBEIuFYv3fv3qx169amsiOPPJKdfPLJprLff/+d5eXlsXPPPVcv27lzp/45Gxk0aBBr0KABO3TokF52ySWXsFgsxvbv32+q279/f5abm2sqMx73Nddcw0SnlB07dtjK4vE469atG/vDH/5gKp88eTIDwHbu3MntiyAIwm/oUpuo14RCIYwaNQpr1qzBunXrbNtnz56Nli1bYuDAgXrZzJkz0b17dzRs2BCNGjVCx44dbdFCJwKBAK699lrMnj0bHTp0QHZ2NoqKirBy5UowxjBt2jQcffTRaNiwIc444wz8+9//NrXn2SS0PufNm4dOnTqhQYMG6N69O958801Xx5YumjdvDgAIh6tvSGm3wP2kpKQEhw4dwuWXX24qv/zyy8EYw+LFi6XtFy9eDMYYt/3vv/+OkpISvWzGjBlo27YtLrzwQtfHuXz5cvznP//B5ZdfrhT1bNasmemzA4BIJGKKngJAVlaW/jC25X3OvXr1wsGDB/Hbb7+Z+oxGo7aIe+PGjW1WBdVobYsWLWxloVAIPXv2xE8//aTUB0EQRLogMUzUe6644goEAgHMmjXLVL5hwwZ88cUXGDVqFEKhEABg/vz5GD9+PPr27YtFixZh8eLFuPHGG3HgwAHX+33zzTfx7LPPYurUqXj55Zexb98+DBo0CBMnTsQnn3yCJ554Ak8//TQ2bNiA888/H4wxxz6XLFmCJ554Avfccw8WLlyIpk2bYvjw4fjPf/7j2DYejys9VI7D2OeBAwfwySef4M4778TJJ5+MPn36KLe38vvvv6OgoAChUAitWrXCtddeaxJyALB+/XoAwHHHHWcqb9myJZo1a6ZvF7F+/Xo0b94cBQUFpvJu3bqZ+o/H4/jss89wwgknYPr06WjTpg1CoRCOOeYYPPTQQ46f03PPPYdgMGgT3RqVlZWIx+PYuXMn/vGPf+Dtt9/Grbfeaqpz/fXXo6SkBM899xx2796Nbdu24aabbsLevXsxYcIE6f6BpCBv3ry5SayOGzcO5eXlmDBhArZu3Yo9e/Zg3rx5WLRoEW655RbHPlWJx+P46KOP0KVLF+724447DqFQCPn5+bjsssvw448/2upoPvItW7b4dlwEQdRDajMsTRCZQt++fVmzZs1YeXm5XjZx4kQGgG3atEkvu/baa1njxo1T3h8AVlBQYLoVvXjxYgaAHX/88aZb2o8++igDwP71r3/pZaNGjWJt2rSx9Zmfn89KS0v1su3bt7NgMMgeeOABpWNSecyePVvpPX722Wemduecc47p2Kw42SSmT5/Opk+fzpYtW8aWLVvGJk2axBo0aMA6duzI9u3bp9cbO3Ysi8Vi3D7at2/P+vfvLz3ufv36sQ4dOnC3RaNR3X6xbds2BoDl5uayVq1asblz57L33nuPjRs3jgFgt99+u3Afu3fvZllZWWzAgAHCOldddZX+2UWjUfaPf/yDW+/JJ59ksVhMr9u0aVP2zjvvSN8jY4w988wzDACbMWOGbdsnn3zCCgsL9T5DoRB78MEHpf3JbBI8Jk2axACwxYsXm8qff/55dt9997GlS5ey999/n02dOpU1bdqU5efns59//tlU94orrmChUIht2bJFeb8EQRBWSAwTBEuegAGwV199lTHGWEVFBcvPz2ennHIKt96IESPY4sWLPfsaAbCLLrrIVLZx40YGgN12222m8rffftvmWxaJ4REjRtj2VVBQwMaNG+d4TKtWrVJ6/Prrr0rvcf/+/WzVqlVsxYoVbMaMGaxly5asd+/e7MCBA9z6TmKYx6uvvsoAsOnTp+tlY8eOZVlZWdz67du3lwpQxpJiuGPHjtxt0WiUXXXVVYwxxv773//qYvGzzz4z1Rs2bBjLysoyiXQjTzzxBAPAFixYIDyOH374ga1atYotWbKEjRs3jgWDQTZt2jRTnVmzZrFYLMYmTpzI3n33XbZ06VI2YsQI1qBBA1ZSUiLse+nSpSwajbI//elPNi/x6tWrWYsWLdiQIUPYG2+8wd5//312xx13sGg0yu655x5hn27EsCbEJ06cqFT/888/Z8FgkE2YMEGpPkEQhBtIDBMEY+zgwYMsLy+PDRo0iDHG2GuvvcYAsDlz5tjqzpo1ixUXF7NQKMQCgQDr1asXW7Zsmav9AWDXXHONqez7779nAGyCZ/ny5TbhJBLD1j4ZY6xNmzZs1KhRjsdUUVGh9OBNxFJh5cqVNuFqxIsYTiQSLCcnh1144YV62d/+9jcGgCu6mzVrZrsIsTJixAjWvHlzW/n+/ftNFysHDx5kgUDANqmMMcaeeuopBoB9/vnn3H2ccMIJrHnz5qY7EU6MGzeOhcNh9ssvvzDGGPvtt99YdnY29zvv27cva9u2LbefkpISlpWVxQYNGsTKysps23v37s2OO+44Fo/HTeV33XUXCwaDbPPmzdx+VcXwrFmzWDAYZH/5y19c/ZY6duzIevXqpVyfIAhCFfIMEwSS6bkuuugilJSUYNu2bZg1axYaNWqECy64wFb38ssvx6effoq9e/diyZIlYIxh8ODB+OGHH2rhyP0jEokoPebOneup/6KiIgSDQWzatMnX42aMmSZyaV5h64TI7du349dff0XXrl2l/R133HHYuXMntm/fbirX+tPaZ2dn49hjjxUeE8CfYPbVV1/hq6++wmWXXYZIJCI9FiO9evVCPB7X/d8bN27E77//jhNPPNFWt6ioCFu2bMH+/ftN5W+//TaGDRuGvn37YuHChXqKOyNr165Fz549dZ+8xoknnojKykp88803ysdsZfbs2bjyyisxatQoPPnkk64mT1q/Z4IgCL+gkYUgqhgzZgwSiQSmTZuGpUuXYsSIEWjQoIGwfk5ODgYOHIhJkyahvLwcX3/9dQ0erf+sWrVK6TFkyBBP/a9YsQKVlZVo166db8f86quv4uDBgzjppJP0srPPPhtZWVmYM2eOqe6cOXMQCAQwbNgwaZ9Dhw5FIBCwif45c+YgOzsbZ599tl52/vnno7S0FJ9++qmp7tKlS9GwYUPu5LDnnnsOQPL35obly5cjGAzimGOOAQAUFhYCAFauXGmqxxjDypUr0aRJE+Tk5Ojly5Ytw7Bhw3DyySdj8eLFiMVi3P0UFhZi9erVtgU2tDzJrVq1cnXcGnPmzMGVV16JSy+9FM8++6wrIbxy5Up89913pu+ZIAjCL2jRDYKooqioCN26dcOjjz4KxhhXrIwdOxbZ2dno06cPWrZsie3bt+OBBx5AXl4eN0JXlygqKvKlnzfffBPPPPMMzj33XLRp0wYVFRVYvXo1Hn30UbRr1w5XXnmlqf5bb72FAwcOYN++fQCSWTy0ldHOOeccNGjQAD/88AMuvvhijBgxAu3atUMgEMCKFSvw6KOPokuXLqY+mzZtijvuuAN33nknmjZtqi+6MWXKFFx55ZXo3LmzXvf555/HFVdcgVmzZukLP3Tp0gVjxozB5MmTEQqFcOKJJ2LZsmV4+umn8fe//x1NmzbV299888148cUXccEFF+Dee+9Fq1at8Oqrr+L111/HQw89ZEtPdujQIbz00kv44x//iE6dOnE/v7/85S/Izc1Fr169kJ+fj19//RULFizAK6+8gr/+9a96irqjjjoK5513Hp5++mnEYjGcc845KCsrw9y5c/HJJ5/g3nvv1QXnxx9/jGHDhqGgoAC333471q5da9pn586dkZubCwC48cYbMWHCBAwZMgRXXXUVGjRogPfeew8PP/wwzjrrLHTv3l1v98MPP2DVqlUAgM2bNwOA/t21bdtW/00tWLAAY8aMwfHHH4+rrroKX3zxhWn/2qIdANC9e3dceuml6NSpE7KysvDFF19g2rRpKCgosGWzGD16NObOnYvvv/8+o1dkJAgiw6lNjwZBZBozZsxgAFjnzp252+fOnctOP/10lp+fz6LRKCssLGQXXnihKdODCshAz7BffPPNN+xPf/oTa9OmDcvKymJZWVmsY8eO7K9//atpwQrj8UGQueL7779njCX9scOHD2dt27Zl2dnZLBqNsmOPPZbdcsstbM+ePdzjmDFjBmvfvj2LRqPsqKOOYpMnT7Z5dGfPns3NkFFeXs4mT57MjjrqKBaNRln79u3ZY489xt3Pjz/+yEaMGMGaNGnCotEo69atG5s1axa37osvvsgACLczlvTUnnLKKaxZs2YsHA6zxo0bs759+7J58+bZ6v7+++9s2rRprFu3bqxRo0asadOm7KSTTmIvvPCCyY+rLWQheixfvtzU78KFC9nJJ5/MmjVrxnJycliXLl3Yvffea1uIQ/v8eA/jb27UqFHS/WvfM2NJz3a7du1YTk4Oi0QirE2bNmzcuHFs69attvd//vnns+zsbLZ7927h50kQBOFEgDEXSUMJgiAIIkMoKCjAyJEjMW3atNo+FIIg6jAkhgmCIIg6x9dff43i4mL85z//QbNmzWr7cAiCqMOQGCYIH4nH49LtwWCQZsQTBEEQRAZBZ2WC8BGn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lI+zoqJC6cGbCKbC/PnzGQD2f//3f3pZ79692XHHHcfi8biprhbV1ibbTZs2jeXl5bHvvvuO7d69m+3evZv985//ZADYvffey3bv3m3qY86cOeyII47QLxo6d+7M7r//fgaAzZs3z/FYp06dyho2bKi3Ly4uZrfeeisDwD766CNp29LSUtaiRQt27rnncreXlJSwrKwsNmjQIFZWVmbbXlBQwACw3377zVSuXSi98sor3H5VxfDOnTtZNBplQ4cOdawrE8NadFn7rWrs3r2b5eXlsdGjR3P71L6366+/3nH/GolEguXk5LALL7xQuQ1BEIQM8gwT9Zrs7GxcdNFFKCkpwbZt2zBr1iw0atQIF1xwga3u5Zdfjk8//RR79+7FkiVLwBjD4MGD8cMPP9TIsa5fvx7//Oc/MW3aNFx33XU47bTTcOKJJ+KII47g1j9w4ABGjhyJ9u3bIzs72zY5SsSWLVscl5XWHitWrPD0Xnr16gUgmXNXY+3atejZs6fNz3ziiSeisrIS33zzDYDk57B3714ce+yxaNKkCZo0aYLu3bsDSKbtatKkicnLO2rUKGzfvh0bNmzAd999p+e9DQQCOOWUUxyP9dZbb8Wvv/6KdevWYcuWLfj000+xe/du5OTkoGfPntK22kRL4/vUePvttzFs2DD07dsXCxcuRDQatdXp1q0bt19W5dVOZdIcAMybNw/l5eXKvw0Ra9euBQBbWrTGjRujXbt2WL9+Pbfdc889BwCu988YS/m9EwRBaFCeYaLeM2bMGDz55JOYNm0ali5ditGjR5uyB1jJycnBwIEDUV5ejmHDhuHrr7/Wc6imE21ykHVC11NPPcWtP27cOPz444/44osv8O233+JPf/oTHnnkEdx4443S/RQWFjouK62h5c51y/LlywEA7dq1M+139erVSCQSJkH82WefAQBatWoFAPjb3/6G0aNHm/rbvn07LrroIowbNw5//vOfTf0CyWwOnTp1ApCcsPX0009j6NChyt9bLBZD165dAQA//vgjXnnlFYwdO9Yx360movv06WMqX7ZsGYYNG4aTTz4Zixcv5k7SA4Dzzz8fy5Ytw1tvvYWLL75YL1+6dCmCwaBNfLrlueeeQ2FhoSlrihcKCwsBACtXrjR9prt27cKmTZtw5pln2tqUlZXhhRdeQK9evfTPVoVXX30VBw8exEknnZTSMRMEQWiQGCbqPUVFRejWrRseffRRMMYwZswYWx1N+PTp0wctW7bE9u3b8cADDyAvLy9lQaJKx44d8Yc//AF/+9vfwBhD06ZN8cYbb+Cdd96x1X322WfxwgsvYPbs2ejSpQu6dOmCa6+9Frfeeiv69OmjR2Z5RKNRYaoytzz11FP46KOP0L9/f7Ru3RoHDhzARx99hMcffxx//OMfMXToUL3ujTfeiAkTJmDIkCG46qqr0KBBA7z33nt4+OGHcdZZZ+nR344dO9pWINuyZQsA4A9/+ANOO+00vfyXX37Bww8/jD59+qBRo0b49ttv8eCDDyIYDOJ///d/TX3cc889uOeee/Dee+/pWRXWr1+PhQsXoqioCLFYDP/85z8xdepUHHvssaYsFnv37kW/fv1w8cUX49hjj0V2djY2bdqEGTNmoKysDJMnT9brfvzxxxg2bBgKCgpw++2361FVjc6dOyM3NxdA8m7EU089hfHjx+PXX39F586d8e677+J///d/MX78eJPw/OGHH/SLmM2bNwOAvqpd27Ztbd/p559/jq+//hq33367MLvIwYMHsXTpUgDQV4ZbsWIFfv31V/2iEADOO+883HXXXbj66qvx888/o0ePHti2bRumTZuGgwcP4vrrr7f1vXjxYvz222/CqPAPP/yAiy++GCNGjEC7du0QCASwYsUKPProo+jSpYut3WmnnYYVK1YoZzghCILQqU2PBkFkCjNmzND9pDzmzp3LTj/9dJafn8+i0SgrLCxkF154oTDTgwik4BlmLLmIQ79+/fQMAxdccAH78ccfTZ7hf/3rXyw7O5uNGjXK1N+hQ4dYz549Wdu2bdnu3btdHbdXPvnkEzZ48GBWWFjIotEoa9CgAevevTu79957TQtZaCxcuJCdfPLJrFmzZiwnJ4d16dKF3XvvvbaFOKyIPsNdu3ax/v37s+bNm7NIJMKOOuoodt1113EnQE6ePNnmid24cSM79dRTWdOmTVk0GmXt2rVjd9xxh+14Dh06xK688krWqVMn1rBhQxYOh1mrVq3YpZdeyr7++mvufkQPqyd3165d7KqrrmL5+fksEomw9u3bs2nTptkWDJk9e7awT+tvgTHGxo4dywKBgGnhE9Hnynu0adPGVHfbtm3s2muvZe3atWNZWVmssLCQDRo0iH322Wfcvvv168dycnKEkzB/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h73++uvszTffZKeffjoLBAKspKREb9+vXz/WoUMH7j6j0Sj7y1/+Yivv0KGD/vm1bNmSffzxx7Y65eXlbOzYsabvp1u3bkrf0SWXXMLC4TBbvXq1sI7MJsEYY6WlpWzIkCGm/Z922mlC28eAAQP0erm5uVwrRWVlJbvrrrtYMBjU6x511FHsq6++4vap8juz8uc//5mFQiHTb4zH7t27WVZWFvf3xBhjoVCInXHGGY77Iwji8IDEMJHRPP/88wwAe/XVVxljjFVUVLD8/HyTH9FYb8SIEWzx4sWOXlURANhFF11kKtu4cSMDwG677TZT+dtvv23yLWtey1dffZVVVFSYHrfeeisLBAK6yK6oqGD33Xcf69SpE4tEIibRcfbZZ+v70MTsk08+adr3t99+ywCw+fPnS99PaWkpW7VqldKjrKxM6TPatm0bW7VqFXv77bfZrbfeyqLRKLv22msd233++ecsGAya/KGaGN6+fbutfv/+/U1C89hjjzV9NhqaGH7ggQek+7/zzjsZAHbPPfewHTt2sO+++44NGjSIhUIhBoCtXLmSMVbtV27WrBkrLS3V2x84cIAVFhayPn366GX9+vVjHTt25O4vGo2yq666yla+fv169vnnn7MFCxawM888kzVq1IgtX77cVGfMmDGsadOm7JFHHmErVqxgr7zyCisqKmJHH30027Jli/A93nHHHQwAe/zxx6WfhUwMl5eXs4EDB7LWrVuzZ555hn344Yds7ty57Nhjj2U9evRge/bssbXZtGkT++KLL9hrr73GLrjgAhaJRGze7nvvvZc1aNCA3XPPPWz58uXstddeY/369WPNmjVjX375pa1Pt7+zXbt2sVgsxgYNGiR974wx9sQTTzAAbMGCBY51CYI4/CExTGQ0Bw8eZHl5efoJ7rXXXmMA2Jw5c2x1Z82axYqLi1koFGKBQID16tWLLVu2zNX+ALBrrrnGVPb9998zAGzatGmmck2oaifUF154wTH6+uOPPzLGGLvuuutYMBhkt912GyspKWGff/45W7VqFevevTvr27evcB/WY5o9e7b0/VRWVtqEuejhlalTpzIAXEFjpWPHjqYI+ZNPPskAsK+//tpWt6ioiBUXF+uvTzrpJHbiiSfa6q1fv54BYE899ZR03xUVFezGG29k0WhU/z4GDRrErrzySgaA/fTTT4wxxkpK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+7jJ80iK89gqT2zBpBoNeH84/YZGCZoda2jk8eb5vEP+L7nfDbNPX5u6ExoP4PTle9wd+Hg9qvYF/QTvb3v8yfEZ5v3/CvouUPtwERLnyAn3epLnfFDUtWI4s9tuu+Gyyy7D73//e/z+97/HEUccgRNPPDEV5fzf//1fPPjggwl9oTj44INx/fXX409/+hN++ctfIooizJkzB9Xq0Gd57LHHolKp4J577sEjjzyCAw88EMcddxzWrl1b9/c4kmnKALooinD++efjbW97G2bOnAkA8X/05MmTE20nT56MZ555Jm7T2dmJ8ePHp9qo7deuXYtJkyal9jlp0qREG3M/48ePR2dnZ6LN9OnTU/tR6/bcc8/UPvr6+tDXN3SS3rhxY6oN58SVZR3gv6P3bc89WQU/XitALLWKY2y6nFmPK7Qfsz31f0U5yma/lEurf2980QprZCOyRyJc6wDwhIWLvNtz+thGkJubR+i06gC5vJiOachnZLiorv8L0mGm9kU5s9zog+rP5e4OVnINvMt1PfCYJVm3BbJdK1rlHJ6V448/PvH60ksvxcKFC7Fs2TLst99+AIAXXngBZ599Nn75y1/i2GOPTfXx4Q9/OP59+vTp+OIXv4gDDjgAq1atwl577YW///3veOqpp/C9730P+++/P4DaE+lrrrkGf/zjHzFlypQ6vsORTVPE8Nlnn40//OEP+O1vf5taZ8YPoijyRhLMNlT7ItqoRInteBYsWIDPf/7zzmN1Yb1zz3hSc23HOZmxHqkFnOCKOhk2YyCGEol534MShZx+dAFpa6+34Qhknzj2CeNcojcLLlGYRwR7tmWL3qLjHXn20aroYjH0c9CFpOtzYArllEg2+/SJY0rY+kRxTkFMdplBJGe9VgD+60XR14pGYppWXV1diSfCFNVqFT/5yU+wefNm9PT0AAAGBwcxb948fOpTn4rFsYvNmzfj+uuvx5577olp06YBAHbeeWfss88++P73v4+DDjoIXV1duPbaazF58mQcfPDBGd+hwKHhYvicc87Bbbfdhl//+tfYbbfd4uXqjmft2rXYdddd4+Xr1q2LHdkpU6agv78f69evT7jD69atw2GHHRa3efHFF1P7femllxL9PPjgg4n169evx8DAQKKN+Vhi3bp1ANLuteLCCy/E+eefH7/euHFj/CX3ESqEXY+zbLhOaHlchpA2cduCBG21Tg5au3HxynO8uqgMcYA5Aphq4xLILnFsE8amKHa5xDZBnEkoZxGzGQWwV/xyKylwaOZAvkai/oZC3y9XPHOEskckO8WxSxiHiuIMgjj4mlCgCM4jfusmeisDQKXAm+1K7T2a1+iLL74Yl1xyCbnJypUr0dPTg61bt2Ls2LG49dZbse+++wIALr/8cpTLZZx77rnO3V5zzTX49Kc/jc2bN+P1r389lixZgs7OTgA1o23JkiU48cQTseOOO6KtrQ2TJ0/G4sWLsdNOO+V7v4KThonhKIpwzjnn4NZbb8V9992XihnsueeemDJlCpYsWYI3vvGNAID+/n4sXboUl19+OYBa3qajowNLlizBySefDABYs2YNHnvsMXz5y18GAPT09KC3txcPPfQQ3vzmNwMAHnzwQfT29saCuaenB5deeinWrFkTC++77roLXV1d8d1XT08PLrroIvT398df1LvuugtTp05NxScUvjvKkJNYUSLYdlLLejJjieIA4Vi0mK1mLOzeXkrG54s4LiWoOZ+Hz3kOEcAu91f/PtiEcYgorttMdK4cbxHt4RHALgFXZBY06/es0u9v0wzKnUO/Z634wHWAbf27+nKI4yBh7BPFIYI4oKqEjZDrRRYBnOWppbk+atFJN5577rnEADrXNXzGjBlYsWIFNmzYgJtvvhmnn346li5dii1btuCqq67C8uXLvU+y3//+9+Ooo47CmjVrcMUVV+Dkk0/G7373O4waNQpRFOFjH/sYJk2ahN/85jcYPXo0vvvd7+K4447Dww8/nDAKhWJpWDWJj33sY/jRj36En/3sZ5gxY0a8vLu7G6NH10aIXn755ViwYAGuv/56vO51r8OXvvQl3HfffYnSah/96Edx++2344YbbsCECRPwb//2b3j55ZcTpdXmzp2L1atX49prrwVQy+nsscceidJqBx54ICZPnoyvfOUr+Mc//oH58+fjpJNOikur9fb2YsaMGTjiiCNw0UUX4S9/+Qvmz5+Pz33uc+zSamY1Ca7ordeJLVMMI0fuDOCLyqwittUwRbWzLcMpclV+sAnR0OW26hVUe+p4yHbMZUHitoC2VgGcVfwW5RjnEbetEKPIKuZ08ezC97fi2r9rW8t21qoWtv1Q+6Da2o6FaJvnelGECC7KmVb0bnwFe03+ePZqEo9dinE7jmJv5+1301bsNPOzwcej8853vhN77bUX9tlnH5x//vloaxs6/1erVbS1tWHatGnWQff9/f0YP348vvvd7+LUU0/Fr371K8yZMwfr169PHNPrXvc6nHHGGbjgggsyHafgp2HO8MKFCwEAhx9+eGL59ddfj/nz5wMAPv3pT2PLli342Mc+hvXr1+PQQw/FXXfdFQthALjyyitRLpdx8sknY8uWLTjyyCNxww03xEIYAG666Sace+65cdWJE044Ad/85jfj9e3t7bjjjjvwsY99DG9961sxevRonHbaabjiiiviNt3d3ViyZAk+/vGP45BDDsH48eNx/vnnJ2IQ9SDPia0IAZzlUZtP8IYI3YFBf8m6VqSjrXZPyXmvSjDbPjddJJufuytyYcsjU8spt5hyiimXmOMQc5eRcMVtvURwVvHrE71cwZtV3FYanMksa/+XWaMQrs/E5zJzHWDXgDiL+6u+L1a3mHKKqcGBnHZMihbCea8XeY2S7YEoitDX14d58+bhne98Z2Ld0UcfjXnz5uFDH/oQqw8AePXVVwEgIarV68HB7cMwalWaVmd4JOBzhjknGM6JjXtSKyKO4RK+PiEYInSHiyhWIriIti5X2eYi25zjPG4t5RSb7TgOMWt/HDGaQwhbS3BR5HWjFT7RyxGOeYVtvYRxmXEzk3d7n8vscpMDnFdre6It6RRznV+zHaMN69rAEMJ5RHDR14tNG7fgn3b9RHZn+P8+X7wzfMDF7OO56KKLMHfuXEybNg2bNm3CokWLcNlll2Hx4sU46qijUu2nT5+O8847L64z/Le//Q0//vGPMWfOHOyyyy544YUXcPnll+M3v/kN/vSnP2HSpEn4+9//jte//vWYNWsWPve5z2H06NH4zne+g6uuugoPP/wwDjjggMLev5CkKdUkBBqfEOac2Ip+tGYTvy7h6xOyIUK30qKiuLxN2HLeS4enrctVtrnItjwylT12OcNUTphyik1Xl+MQFz5oztXGEJhsEVyEALaJX5/o5QjWIkRtJWeMoqxdJrIejxLBru1VG99gOOrzVgLZVvnBlv+lsr+E+0s6xVmd3wIH0yXaeK4XWUVwiAB2XS+GexTuxRdfxLx587BmzRp0d3dj//33twphilGjRuE3v/kNvv71r2P9+vWYPHkyVDTSmwAAiuhJREFU3vGOd+D++++Py8FOnDgRixcvxmc/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kELEsIOJEyeivb095QKvW7eOLIBtm8axu7tbTpRNYty4cfLZNwH53JuDfO7NQT53HmIKCa1KW7MPoJXp7OzEwQcfHM8brliyZIkUwBYEQRAEQdgOEGfYw/nnn4958+bhkEMOQU9PD7797W/j2WefxVlnndXsQxMEQRAEQRByImLYwymnnIKXX34ZX/jCF7BmzRrMnDkTv/jFL7DHHnt4t+3q6sLFF1/snOtcqA/y2TcH+dybg3zuzUE+d0HYPpA6w4IgCIIgCMKIRTLDgiAIgiAIwohFxLAgCIIgCIIwYhExLAiCIAiCIIxYRAwLgiAIgiAIIxYRw3XkmmuuwZ577olRo0bh4IMPxm9+85tmH1LL8Otf/xrHH388pk6dilKphP/93/9NrI+iCJdccgmmTp2K0aNH4/DDD8cf//jHRJu+vj6cc845mDhxIsaMGYMTTjgBzz//fKLN+vXrMW/ePHR3d6O7uxvz5s3Dhg0bEm2effZZHH/88RgzZgwmTpyIc889F/39/Yk2K1euxKxZszB69Gi85jWvwRe+8AUMt7GnCxYswJve9CbsuOOOmDRpEk466SQ88cQTiTbyuRfPwoULsf/++8cTM/T09ODOO++M18tn3hgWLFiAUqmE8847L14mn70gCACASKgLixYtijo6OqLvfOc70eOPPx594hOfiMaMGRM988wzzT60luAXv/hF9NnPfja6+eabIwDRrbfemlh/2WWXRTvuuGN08803RytXroxOOeWUaNddd402btwYtznrrLOi17zmNdGSJUui5cuXR7Nnz44OOOCAqFKpxG2OOeaYaObMmdH9998f3X///dHMmTOj4447Ll5fqVSimTNnRrNnz46WL18eLVmyJJo6dWp09tlnx216e3ujyZMnR+973/uilStXRjfffHO04447RldccUX9PqA6cPTRR0fXX3999Nhjj0UrVqyIjj322Gj33XePXnnllbiNfO7Fc9ttt0V33HFH9MQTT0RPPPFEdNFFF0UdHR3RY489FkWRfOaN4KGHHoqmT58e7b///tEnPvGJeLl89oIgRFEUiRiuE29+85ujs846K7Hs9a9/fXTBBRc06YhaF1MMDw4ORlOmTIkuu+yyeNnWrVuj7u7u6Fvf+lYURVG0YcOGqKOjI1q0aFHc5oUXXoja2tqixYsXR1EURY8//ngEIFq2bFnc5oEHHogARH/+85+jKKqJ8ra2tuiFF16I2/z3f/931NXVFfX29kZRFEXXXHNN1N3dHW3dujVus2DBgmjq1KnR4OBggZ9EY1m3bl0EIFq6dGkURfK5N5Lx48dH3/3ud+UzbwCbNm2KXve610VLliyJZs2aFYth+ewFQVBITKIO9Pf345FHHsGcOXMSy+fMmYP777+/SUc1fHj66aexdu3axOfX1dWFWbNmxZ/fI488goGBgUSbqVOnYubMmXGbBx54AN3d3Tj00EPjNm95y1vQ3d2daDNz5kxMnTo1bnP00Uejr68PjzzySNxm1qxZicL6Rx99NFavXo1Vq1YV/wE0iN7eXgDAhAkTAMjn3giq1SoWLVqEzZs3o6enRz7zBvDxj38cxx57LN75zncmlstnLwiCQsRwHfj73/+OarWKyZMnJ5ZPnjwZa9eubdJRDR/UZ+T6/NauXYvOzk6MHz/e2WbSpEmp/idNmpRoY+5n/Pjx6OzsdLZRr4fr/2cURTj//PPxtre9DTNnzgQgn3s9WblyJcaOHYuuri6cddZZuPXWW7HvvvvKZ15nFi1ahOXLl2PBggWpdfLZC4KgkOmY60ipVEq8jqIotUywk+XzM9tQ7YtoE20b1DJc/z/PPvts/OEPf8Bvf/vb1Dr53ItnxowZWLFiBTZs2ICbb74Zp59+OpYuXRqvl8+8eJ577jl84hOfwF133YVRo0ZZ28lnLwiCOMN1YOLEiWhvb0/dza9bty515y+kmTJlCoC0G6J/flOmTEF/fz/Wr1/vbPPiiy+m+n/ppZcSbcz9rF+/HgMDA84269atA5B2lYYD55xzDm677Tbce++92G233eLl8rnXj87OTuy999445JBDsGDBAhxwwAG46qqr5DOvI4888gjWrVuHgw8+GOVyGeVyGUuXLsU3vvENlMtlq+sqn70gjDxEDNeBzs5OHHzwwViyZEli+ZIlS3DYYYc16aiGD3vuuSemTJmS+Pz6+/uxdOnS+PM7+OCD0dHRkWizZs0aPPbYY3Gbnp4e9Pb24qGHHorbPPjgg+jt7U20eeyxx7BmzZq4zV133YWuri4cfPDBcZtf//rXiTJId911F6ZOnYrp06cX/wHUiSiKcPbZZ+OWW27BPffcgz333DOxXj73xhFFEfr6+uQzryNHHnkkVq5ciRUrVsQ/hxxyCN7//vdjxYoVeO1rXyufvSAINRo3Vm9koUqrXXfdddHjjz8enXfeedGYMWOiVatWNfvQWoJNmzZFjz76aPToo49GAKKvfe1r0aOPPhqXnrvsssui7u7u6JZbbolWrlwZnXrqqWTJo9122y26++67o+XLl0dHHHEEWfJo//33jx544IHogQceiN7whjeQJY+OPPLIaPny5dHdd98d7bbbbomSRxs2bIgmT54cnXrqqdHKlSujW265JRo3btywK3n00Y9+NOru7o7uu+++aM2aNfHPq6++GreRz714LrzwwujXv/519PTTT0d/+MMfoosuuihqa2uL7rrrriiK5DNvJHo1iSiSz14QhBoihuvIf/3Xf0V77LFH1NnZGR100EFxCSshiu69994IQOrn9NNPj6KoVvbo4osvjqZMmRJ1dXVF73jHO6KVK1cm+tiyZUt09tlnRxMmTIhGjx4dHXfccdGzzz6baPPyyy9H73//+6Mdd9wx2nHHHaP3v//90fr16xNtnnnmmejYY4+NRo8eHU2YMCE6++yzE+WNoiiK/vCHP0Rvf/vbo66urmjKlCnRJZdcMuzKHVGfN4Do+uuvj9vI5148/+///b/4PLDLLrtERx55ZCyEo0g+80ZiimH57AVBiKIoKkWRTG8jCIIgCIIgjEwkMywIgiAIgiCMWEQMC4IgCIIgCCMWEcOCIAiCIAjCiEXEsCAIgiAIgjBiETEsCIIgCIIgjFhEDAuCIAiCIAgjFhHDgiAIgiAIwohFxLAgCIIgCIIwYhExLAjCdsf06dNRKpVQKpWwYcOGXH0dfvjhcV8rVqwo5PgEQRCE1kHEsCAILUm1WsVhhx2Gd7/73Ynlvb29mDZtGv793//duf0XvvAFrFmzBt3d3bmO45ZbbsFDDz2Uqw9BEAShdRExLAhCS9Le3o4bb7wRixcvxk033RQvP+ecczBhwgR87nOfc26/4447YsqUKSiVSrmOY8KECdhll11y9SEIgiC0LiKGBUFoWV73utdhwYIFOOecc7B69Wr87Gc/w6JFi3DjjTeis7MzqK8bbrgBO+20E26//XbMmDEDO+ywA97znvdg8+bNuPHGGzF9+nSMHz8e55xzDqrVap3ekSAIgtBqlJt9AIIgCC7OOecc3HrrrfjgBz+IlStX4nOf+xwOPPDATH29+uqr+MY3voFFixZh06ZNeNe73oV3vetd2GmnnfCLX/wCf/vb3/Dud78bb3vb23DKKacU+0YEQRCElkTEsCAILU2pVMLChQuxzz774A1veAMuuOCCzH0NDAxg4cKF2GuvvQAA73nPe/CDH/wAL774IsaOHYt9990Xs2fPxr333itiWBAEYYQgMQlBEFqe733ve9hhhx3w9NNP4/nnn8/czw477BALYQCYPHkypk+fjrFjxyaWrVu3LtfxCoIgCMMHEcOCILQ0DzzwAK688kr87Gc/Q09PD8444wxEUZSpr46OjsTrUqlELhscHMx8vIIgCMLwQsSwIAgty5YtW3D66afjIx/5CN75znfiu9/9Lh5++GFce+21zT40QRAEYTtBxLAgCC3LBRdcgMHBQVx++eUAgN133x1f/epX8alPfQqrVq1q7sEJgiAI2wUihgVBaEmWLl2K//qv/8INN9yAMWPGxMvPPPNMHHbYYbniEoIgCIKgKEVyNREEYTtj+vTpOO+883DeeecV0t+qVauw55574tFHH81c1k0QBEFoTcQZFgRhu+Qzn/kMxo4di97e3lz9zJ07F/vtt19BRyUIgiC0GuIMC4Kw3fHMM89gYGAAAPDa174WbW3Z7/tfeOEFbNmyBUAtsxw6850gCILQ2ogYFgRBEARBEEYsEpMQBEEQBEEQRiwihgVBEARBEIQRi4hhQRAEQRAEYcQiYlgQBEEQBEEYsYgYFgRBEARBEEYsIoYFQRAEQRCEEYuIYUEQBEEQBGHEImJYEARBEARBGLGIGBYEQRAEQRBGLCKGBUEQBEEQhBGLiGFBEARBEARhxCJiWBAEQRAEQRixiBgWBEEQBEEQRiwihgVBEARBEIQRi4hhQRAEQRAEYcQiYlgQBEEQBEEYsYgYFgRBEARBEEYsIoYFQRAEQRCEEYuIYUEQBEEQBGHEImJYEARBEARBGLGIGBYEQRAEQRBGLCKGBUEQBEEQhBGLiGFBEARBEARhxCJiWBAEQRAEQRixiBgWBEEQBEEQRiwihgVBEARBEIQRi4hhQRAEQRAEYcQiYlgQBEEQBEEYsYgYFgRBEARBEEYsIoYFQRAEQRCEEYuIYUEQBEEQBGHEImJYEARBEARBGLGIGBYEQRAEQRBGLCKGBUEQBEEQhBGLiGFBEARBEARhxCJiWBAEQRAEQRixiBgWBEEQBEEQRiwihgVBEARBEIQRi4hhQRAEQRAEYcQiYlgQBEEQBEEYsYgYFgRBEARBEEYsIoYFQRAEQRCEEYuIYUEQBEEQBGHEImJYEARBEARBGLGIGBYEQRAEQRBGLCKGBUEQBEEQhBGLiGFBEARBEARhxCJiWBAEQRAEQRixiBgWBEEQBEEQRiwihgVBEARBEIQRi4hhQRAEQRAEYcQiYlgQBEEQBEEYsYgYFgRBEARBEEYsIoYFQRAEQRCEEYuIYUEQBEEQBGHEImJYEARBEARBGLGIGBYEQRAEQRBGLCKGBUEQBEEQhBGLiGFBEARBEARhxCJiWBAEQRAEQRixiBgWBEEQBEEQRiwihgVBEARBEIQRi4hhQRAEQRAEYcQiYlgQBEEQBEEYsYgYFgRBEARBEEYsIoYFQRAEQRCEEYuIYUEQBEEQBGHEImJYEARBEARBGLGIGBYEQRAEQRBGLCKGBUEQBEEQhBGLiGFBEARBEARhxCJiWBAEQRAEQRixiBgWBEEQBEEQRiwihgVBEARBEIQRi4hhQRAEQRAEYcQiYlgQBEEQBEEYsYgYFgRBEARBEEYsIoYFQRAEQRCEEYuIYUEQBEEQBGHE8v8D4d1fBLHaaTMAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# Similarly, paths that SeisFlows3 uses to navigate the system are stored\n", - "# in the seisflows_paths.json file\n", - "! head output/seisflows_paths.json" + "! seisflows plot2d MODEL_TRUE vs --savefig m_true_vs.png\n", + "Image(filename='m_true_vs.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 3. Run SeisFlows3\n", + "### Visualizing the Gradient\n", "\n", - "In this Section we will run SeisFlows3 to generate synthetic seismograms, kernels, a gradient, and an updated velocity model.\n", + "We can look at the gradients created during the adjoint simulations to get an idea of how our inversion wanted to update the model. Gradients tell us how to perturb our starting model (the homogeneous halfspace) to best fit the data that was generated by our target model (the checkerboard).\n", "\n", - "#### 3a. Forward simulations\n", - "\n", - "SeisFlows3 is an automated workflow tool, such that once we run `seisflows submit` we should not need to intervene in the workflow. However the package does allow the User flexibility in how they want the workflow to behave.\n", - "\n", - "For example, we can run our workflow in stages by taking advantage of the `stop_after` and `resume_from` parameters. As their names suggest, these parameters allow us to stop and resume the workflow at certain stages (i.e., functions in workflow.main()). \n", - "\n", - "The available arguments for `stop_after` and `resume_from` are discovered by running the command: `seisflows print flow`, which tells us what functions will be run from main(). " + "We can see that our gradient (Vs kernel) is characterized by large red and blue blobs. The blue colors in the kernel tell us that the initial model is too fast, while red colors tell us that the initial model is too slow (that is, **red==too slow** and **blue==too fast**). This makes sense if we look at the checkerboard target model above, where the perturbation is slow (red color) the corresponding kernel tells us the initial (homogeneous halfspace) model is too fast (blue color)." ] }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " SEISFLOWS3 WORKFLOW MAIN \r\n", - " //////////////////////// \r\n", - "Flow arguments for \r\n", - "\r\n", - "1: setup\r\n", - "2: initialize\r\n", - "3: evaluate_gradient\r\n", - "4: write_gradient\r\n", - "5: compute_direction\r\n", - "6: line_search\r\n", - "7: finalize\r\n", - "8: clean\r\n" + "Figure(707.107x707.107)\r\n" ] + }, + { + "data": { + "image/png": "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FRW4/fbbk/LoAlWm3m7duqGoqAgVFRU47bTTADR5jRctWoRp06YBAEpKStCyZUtUVFRg+PDhAIDt27dj3bp1mD59uuX2u0F2+DRN0wITw75dZk+dOhVnnnkm2rZti06dOuHyyy/Hhg0bkvKoGievuroaZWVliMViiMViKCsrw65du5LybN68GZdeeilat26NgoICTJgwAfWm9zOuXbsWffv2RV5eHg4//HA8+OCDoME3CClkn+LiPfFl8dSUaEximTSjIOI9p+T2+ShRF4giuaxvt/C62W2Zqsszf8zLWNPmtrCWsZZ7hUrh6vX4wCk//nAqwfqBuP3YZOLEiXj66afxzDPPYP369bj99tuxefNmjB07FgAwadIk/PznP0/kHzt2LL799ltMnDgR69evxzPPPIPZs2cnvWjitttuw8KFCzFt2jR89dVXmDZtGt577z2Ul5dL15uRkYHy8nJMmTIF8+bNw7p16zBq1Ci0atUKI0eOBADEYjGMHj0ad9xxB95//32sWrUK119/PU466SRceOGFTvaINCtXrpT6rFq1ytN2iPAtMrxo0SLceuutOPPMM7F//37ce++9GDRoEL788ku0bt0awKFx8ubMmYPjjz8ev//97zFw4EBs2LABbdu2BdA0Tt5bb72FuXPn4rDDDsMdd9yBoUOHYsWKFWjRogUAYOTIkdi6dSsWLFgAAPjlL3+JsrKyxBVaY2MjLrnkEnTs2BGffvopfvjhB9xwww3QNA2PPvoogCZT/cCBA9G/f38sX74c//nPfzBq1Ci0bt0ad9xxh6d9pcIqQVEPewTeX1bhWUZokBUlFj3gJbp9bq7CjF3rgx0hLFOmqtEd7PiIVUWA3ZRjJzLsZJ8byzbXyUNme9z+nvwWqI6sHmGCvM2+MGLECPzwww948MEHsX37dvTq1Qvz58/HUUcdBaAp0moc+7dbt26YP38+br/9djz22GMoLi7GX//6V1x11VWJPH369MHcuXPxm9/8Br/97W9xzDHH4JVXXkHv3r2l6wWAu+66C7W1tbjllltQXV2N3r17Y+HChQntBACPPPIIsrKyMHz4cNTW1mLAgAGYM2dOQjulM4GNM7xz50506tQJixYtwvnnn69snLz169ejZ8+eWLp0aeJgWrp0KUpLS/HVV1+he/fueOeddzB06FBs2bIFxcXFAIC5c+di1KhR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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "! seisflows print flow" + "! seisflows plot2d GRADIENT_01 vs_kernel --savefig g_01_vs.png\n", + "Image(filename='g_01_vs.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "-----------------------------\n", - "In an inversion (the workflow we have selected) the flow arguments are described as:\n", + "### Visualizing the updated model\n", "\n", - "0. __setup:__ Not technically listed in the flow arguments, runs setup() for all SeisFlows3 modules. If running a synthetic-synthetic workflow, solver.setup() will generate \"data\" by running the forward solver using MODEL_TRUE\n", - "1. __initialize:__ \n", - " a. Call numerical solver to run forward simulations using MODEL_INIT, generating synthetics \n", - " b. Evaluate the objective function by performing waveform comparisons \n", - " c. Prepare `evaluate gradient` step by generating adjoint sources and auxiliary files\n", - "2. __evaluate_gradient:__ Call numerical solver to run adjoint simulation, generating kernels\n", - "3. __write_gradient:__ Combine all event kernels into a misfit kernel. Optionally smooth and mask the misfit kernel\n", - "4. __compute_direction:__ Call on the optimization library to scale the misfit kernel into the gradient and compute a search direction\n", - "5. __line_search:__ Perform a line search by algorithmically scaling the gradient and evaluating the misfit function (forward simulations and misfit quantification) until misfit is acceptably reduced\n", - "6. __finalize:__ Run any finalization steps such as saving traces, kernels, gradients and models to disk, setting up SeisFlows3 for any subsequent iterations.\n", - "7. __clean:__ Clean the scratch/ directory in preparation for subsequent i\n", + "After two iterations, the updated model starts to take form. We can clearly see that the lack of data coverage on the outer edges of the model mean we do not see any appreciable update here, whereas the center of the domain shows the strongest model updates which are starting to resemble the checkerboard pattern shown in the target model.\n", "\n", - "Let's set the `stop_after` argument to __initialize__, this will halt the workflow after the intialization step. We'll also set the `verbose` parameter to 'False', to keep the logging format relatively simple. We will explore the `verbose`==True option in a later cell." + "With only 4 events and 2 iterations, we do not have quite enough constraint to recover the sharp contrasts between checkers shown in the Target model. We can see that data coverage, smearing and regularization leads to more prominent slow (red) regions. \n", + "\n", + "If we were to increase the number of events and iterations, will it help our recovery of the target model? This task is left up to the reader!" ] }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "STOP_AFTER: -> initialize\n", - "VERBOSE: False -> False\n" + "Figure(707.107x707.107)\r\n" ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAALDCAYAAADwjA1CAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydeXgUVdaHf71nDyERQliCyg4iq8KgBhREBBRcGBARFOMCLiCOiowDoiyKIox8gyPIooI4iuACRlAjjko0siiIgxsIyKYCCSQkvd3vj05Vqqpr7a5ekj7v8/RDUnWr6nYldL99cu45FsYYA0EQBEEQBEEkINZYT4AgCIIgCIIgYgXJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMEEQBEEQBJGwkAwTBEEQBEEQCQvJMJEwDB8+HMnJyTh16pTimNGjR8PhcODYsWPRm5gG48aNQ8uWLWM9DVmOHDmCv//97+jduzdycnKQkZGB7t2748UXX4TP5wsav2PHDgwbNgx5eXlISUlBu3btMHPmTFRWVorGffbZZ7j99tvRvXt3uFwuWCwW7N+/X3YOCxYswHXXXYdzzz0XFosFffv2NfQcfvrpJ4wZMwYtWrRAcnIyzj//fDzwwAP4888/ReNmzJgBi8US9EhKSgrrnpw5cwaTJk1CXl4ekpKS0KVLF6xZsyZo3Lhx42Sv365dO9nn9fzzz6Ndu3ZwuVw499xz8fjjj8Pj8YjG9O3bV/ac3OPo0aP82OrqasybNw+dOnVCamoqGjdujEGDBuGLL74Iuvbf//53DBkyBE2bNoXFYsG4ceNk57h06VIMGzYMLVu2RHJyMlq1aoW7774bR44cCRrbsmVL2TneddddsucmCILQiz3WEyCIaDF+/HisX78eq1evxoQJE4L2l5WVYd26dRgyZAgaN24cgxnK89hjj+H++++P9TRk2bZtG15++WXccssteOyxx+BwOPD+++/j7rvvRklJCZYtW8aP3bNnD/7yl7+gbdu2WLBgAXJycvDpp59i5syZ2LZtG95++21+7EcffYQPP/wQXbt2RUZGBj755BPFObzwwgtITU3F5ZdfjnfffdfQ/H///Xf06tULGRkZeOKJJ9CiRQvs2LED06dPR3FxMbZt2warVRwzKCoqQmZmJv+9dL+RewIA1113HUpLSzF37ly0adMGq1evxqhRo+D3+3HTTTeJxiYnJ+Pjjz8O2iZl1qxZeOyxx/DII4/gyiuvRGlpKf7+97/jt99+w4svvsiP+9e//oXy8nLRsZWVlbjqqqvQvXt35Obm8tsLCwuxatUqTJ06FZdffjlOnDiBuXPnoqCgAJ9//jkuuugifuxzzz2Hzp0745prrgl6vkKmT5+Ofv36Yfbs2WjatCn27t2LJ554Am+//TZ27NgR9P+wT58+eOaZZ0Tb4un/KkEQdRRGEAmC1+tleXl5rHv37rL7Fy9ezACwd999N8ozq7ucOHGCud3uoO0TJ05kANiBAwf4bdOmTWMA2E8//SQae8cddzAA7MSJE/w2n8/Hfz1v3jwGgO3bt092DsKxHTt2ZAUFBbrnv2TJEgaAffjhh6Lts2fPZgDY9u3b+W3Tp09nANjvv/+uek4j92TDhg0MAFu9erVo7IABA1heXh7zer38trFjx7LU1FTN5/THH3+wpKQkdscdd4i2z5o1i1ksFvbdd9+pHr9ixQoGgC1dupTfVlVVxWw2G7v55ptFYw8fPswAsPvuu0+0XfgzSU1NZWPHjpW91rFjx4K2lZaWMgDsiSeeEG3Pz89ngwcPVp07QRBEKFCaBJEw2Gw2jB07Ftu2bcOuXbuC9i9fvhxNmjTBoEGD+G2LFy/GhRdeiLS0NKSnp6Ndu3Z49NFHDV3XYrHgnnvuwfLly9G2bVskJyejR48eKCkpAWMM8+bNw7nnnou0tDRcfvnl+Omnn0THy6VJcOd85ZVX0L59e6SkpODCCy/Ee++9Z2hu4ZKVlQWHwxG0nYsSHjp0iN/GjRNGVQGgQYMGsFqtcDqd/DZptFUNI2OlqM0JQFAKhB6M3JN169YhLS0NN954o2jsrbfeisOHD+PLL780fP2ioiJUVVXh1ltvDTonYwzr169XPf6ll15CWloa/vrXv/LbrFYrrFZr0H3KyMiA1WoNuk96fyaNGjUK2ta9e3fYbDYcPHhQ1zkIgiDChWSYSChuu+02WCyWoD/d7tmzB1999RXGjh0Lm80GAFizZg0mTJiAgoICrFu3DuvXr8fkyZNRUVFh+Lrvvfceli5dirlz5+K1117D6dOnMXjwYEyZMgWff/45Fi1ahBdffBF79uzB9ddfD8aY5jk3bNiARYsWYebMmVi7di0aNmyI4cOH45dfftE81uv16nromYccH3/8Mex2O9q0acNvGzt2LBo0aIC7774bv/zyC06fPo333nsP//73vzFx4kSkpqaGdK1wGDZsGFq0aIEpU6bgu+++w5kzZ/Dpp59i7ty5GDp0KNq3bx90zAUXXACbzYbGjRvjlltuwYEDB3RdS+6e7N69G+3bt4fdLs5Y69y5M79fyNmzZ5GbmwubzYZmzZrhnnvuwYkTJ0RjuGMuuOAC0fYmTZogJycn6JxCfvzxR/z3v//FyJEjkZaWxm93OByYMGECVq5cifXr16O8vBz79+9HYWEhMjMzUVhYqOse6GHLli3w+Xzo2LFj0L5PP/0U6enpcDgc6NChA5599lnZPOxQcscJgkhgYhuYJojoU1BQwHJyckR/yp4yZQoDwH744Qd+2z333MMaNGgQ9vUAsNzcXHbmzBl+2/r16xkA1qVLF+b3+/ntCxYsYADYt99+y28bO3Ysy8/PDzpn48aNWXl5Ob/t6NGjzGq1sjlz5uiak57H8uXLDT/fDz74gFmtVjZ58uSgfd9//z1r166d6Br33Xef6B5I0UqTEGI0TYKxwJ/6e/fuLZrTjTfeyKqqqkTjXn75ZTZr1iy2ceNG9vHHH7O5c+eyhg0bssaNG7NDhw6pXkPpnrRu3ZoNHDhQdk4A2OzZs/lt8+fPZ/Pnz2ebNm1imzZtYtOmTWMpKSmsXbt27PTp0/y4wsJC5nK5ZOfRpk0bduWVVyrO8+GHH2YA2NatW4P2+f1+9o9//INZrVb+PrVo0YLt2LFD9bmrpUlIKS8vZ+3bt2fNmzcXPSfGGJswYQJbtmwZ27JlC1u/fj0bPXo0AxCUusEYYzabjV1++eW6rkkQBEEL6IiEY/z48bjlllvwzjvv4Prrr4fX68Wrr76KSy+9FK1bt+bHXXTRRVi0aBFGjRqFkSNHok+fPsjJyQnpmv369RNFPrmI46BBg2CxWIK2//rrr0GRPblzpqen8983btwYjRo1wq+//qo5n9LSUl3zPvfcc3WN49i+fTtGjBiBXr16Yc6cOaJ9+/fvx9ChQ9G4cWO8+eabOOecc/Dll1/iySefxJkzZ/DSSy8ZupYZnDx5Etdeey0qKyuxatUqNG/eHLt378YTTzyBa665Bhs2bOCjtmPGjBEd269fP/Tr1w+9e/fG008/jYULF8peQ+2eABD9/NX2TZ48WbRvwIAB6Nq1K2644QYsWbJEtF/vOYV4vV6sXLkSHTt2RK9evYL2z5o1C8888wxmzJiBSy+9FOXl5Vi0aBEGDBiATZs2oWvXrorX1ENVVRWuu+46/Prrr/j4449FkWkA+L//+z/R99deey2ysrKwaNEiPPDAA6Lre73esOZCEERiQTJMJBw33HAD7r33XixfvhzXX389Nm7ciGPHjuGpp54SjRszZgy8Xi+WLFmC66+/Hn6/Hz179sSTTz6JAQMGGLpmw4YNRd9z+bFK26uqqjTPmZ2dHbTN5XLh7Nmzmsd26dJFcwwAPmVEDzt27MCAAQPQunVrbNy4ES6XS7T/kUceQXl5OXbu3Ml/MLjsssuQk5OD2267DbfccgsKCgp0X88MnnrqKezcuRO//vormjRpAgC49NJL0a5dO1x++eVYtWoVxo4dq3j8RRddhDZt2qCkpER2v9Y9yc7ODirhBoBPfZD+fkgZPnw4UlNTRdfPzs5GVVUVKisrkZKSEnTe7t27y55r48aNOHr0KB5++OGgfd9//z3+8Y9/4Omnn8aDDz7Ibx80aBA6dOiABx54AMXFxapzVaO6uhrDhw/HZ599hvfeew8XX3yxruNuvvlmLFq0CCUlJWHLOEEQiQvlDBMJR3JyMkaNGoWioiIcOXIEy5YtQ3p6etAiJiCw6OiLL75AWVkZNmzYAMYYhgwZoiv6Gs84HA5dj5UrV+o6344dO9C/f3/k5+dj06ZNQQutAGDnzp3o0KFDUG5wz549AQTnx0aDnTt3omnTprwIhzInxpjsgjE99+SCCy7A999/HxTJ5BZ4durUyfD1ub8oSBeJHj16FH/88YfiOV966SU4nc6gCDgAfPPNN2CM8feFw+Fw4MILLwzrZ1ddXY1hw4ahuLgY69evxxVXXKH7WFaT0x7OIkqCIAh6BSESkvHjx8Pn82HevHnYuHEjRo4cGRRFE5KamopBgwZh2rRpcLvd+O6776I4W/MpLS3V9Rg6dKjmuXbu3In+/fujWbNm2Lx5M7KysmTH5eXl8YvUhGzduhUA0KxZs/CfmEHy8vJw6NAh/PbbbyHNqaSkBD/++GNQWoHeezJ8+HCcOXMGa9euFW1fuXIl8vLyNCOkb775JiorK0XXv+qqq5CUlIQVK1aIxq5YsQIWiwXDhg0LOs/Ro0exceNGDBs2TPYvDnl5efzzFVJdXY3t27eH/LPjIsIff/wx1q5di4EDBxo6/uWXXwYA2bQOgiAIvVCaBJGQ9OjRA507d8aCBQvAGMP48eODxhQWFiI5ORl9+vRBkyZNcPToUcyZMweZmZlBEbK6Ro8ePUw5z969e9G/f38AgZzSH3/8ET/++CO///zzz8c555wDAJg0aRKGDRuGAQMGYPLkycjJyUFJSQnmzJmDDh06iEra/f7779iyZQuA2gjn+++/j3POOQfnnHOOKJ3i66+/5rvTlZeXgzGGN998E0Agwpufnw8gIE633XYbli1bhltuuQUAMHHiRKxatQoDBgzAI488wucMP/nkk2jcuDFGjx7NX+fCCy/EzTffjPbt2yMpKQlfffUV5s2bh9zcXDz00EMh3ZNBgwZhwIABuPvuu1FeXo5WrVrhtddeQ1FREV599VU+TeXXX3/FTTfdhJEjR6JVq1awWCzYsmULFixYgI4dO+L222/nz9+wYUP8/e9/x2OPPYaGDRvyTTdmzJiB22+/HR06dAj6Oa5cuRJer1d0HiGXXHIJevbsiRkzZqCyshKXXXYZysrK8Pzzz2Pfvn145ZVXROO3bNmC33//HQDg8/nw66+/8j+TgoIC/vnfcMMNeP/99zFt2jRkZ2eLZDsjI4Of6+rVq/HWW29h8ODByM/Px6lTp/DGG29gzZo1GDduHC688ELR9S0WCwoKClSbtRAEQfDEcPEeQcSUhQsXMgCsQ4cOsvtXrlzJ+vXrxxo3bsycTifLy8tjI0aMEFV60AMANnHiRNG2ffv2MQBs3rx5ou3FxcUMAHvjjTf4bUrVJKTnZCzQmEDvyn0zWL58uaFqFB9//DG78sorWW5uLktOTmZt2rRhU6ZMYX/88YdoHHcf5B7SahFjx47VdX1urtI5bd++nQ0fPpw1a9aMuVwudt5557Hbb79d1ByDMcZGjhzJWrVqxVJTU5nD4WD5+fnsrrvuYocPHw7rnpw+fZrdd999LDc3lzmdTta5c2f22muvicacOHGCDR8+nLVs2ZIlJyczp9PJWrduzR566CF26tQp2Z/NwoULWZs2bZjT6WQtWrRg06dPl20GwligykTLli1Vq3qcOnWKTZs2jbVv356lpKSwRo0asb59+7KNGzcGjS0oKFB8/sXFxfw4tfsk/Dlv3bqVXXHFFSw3N5c5HA6WkpLCevbsyf71r3+JGnxw9xMAGzlypOJzIQiCEGJhLMRCogRBEAQRZ2zcuBFDhgzBN998o1mRhSAIAqCcYYIgCKIeUVxcjJEjR5IIEwShG4oME0SIaNUy5VrYEgRBEAQRv9A7NUGEiFZZsttuuy3WUyQIgiAIQgOqJkEQIaLVxS3UbnUEQRAEQUQPSpMgCIIgCIIgEhZKkyAIDYYPH47k5GScOnVKcczo0aPhcDhw7Nix6E2snrNnzx64XC5YLBZ8/fXXon1vvfUWRo0ahVatWiE5ORktW7bE6NGjRfV85Th79izatGkDi8WCZ555RrRv//79sFgsso81a9bonvdnn32Gq6++GllZWUhOTkbr1q3xxBNP8Pt9Ph/mz5+Pq666Cs2aNUNKSgrat2+PRx55RPZ37OjRo7jnnntw3nnnITk5Gfn5+Rg/fjwOHDgQNPaDDz5Anz59kJycjMzMTAwdOlSxQcyHH36I3r17IyUlBTk5ORg3bhyOHz8uO3b37t248cYbcc4558DlcqFly5aYMGGCaMzSpUsxbNgwtGzZEsnJyWjVqhXuvvtuHDlyJOh8LVu2lL3Pd911l9qtJQiCiAiUJkEQGowfPx7r16/H6tWrgwQAAMrKyrBu3ToMGTIEjRs3jsEM6x8+nw+33XYbcnJycPjw4aD9Tz31FHJzczFt2jScd955OHjwIGbPno1u3bqhpKQEHTt2lD3vY489hoqKCtVr33vvvbjppptE21q3bq1r3qtXr8aYMWMwYsQIvPzyy0hLS8PPP/8seg5nz57FjBkzMGrUKNx+++3IycnB9u3b8eSTT+Ldd9/F119/jeTkZACBDm2XXXYZTp48iccffxwdOnTA3r17MX36dHzwwQf4/vvvkZ6eDgB4++23MXz4cFx77bVYu3YtysrK8Pjjj+PSSy9FaWkpzj//fH4OW7ZswaBBgzB48GC8/fbbOH78OB5++GFcccUV+Prrr+FyufixxcXFGDx4MC699FK88MILyMnJwYEDB7Bjxw7Rc58+fTr69euH2bNno2nTpti7dy+eeOIJvP3229ixY0fQ/40+ffoEfSCh/z8EQcSEWBY5Joi6gNfrZXl5eax79+6y+xcvXswAsHfffTfKM6u/zJs3jzVt2pRvjFJaWiraf+zYsaBjfvvtN+ZwONj48eNlz/nll18yp9PJ3njjDdmGJ0qNUPRy6NAhlpqayu6++27VcV6vN6jJCGOMn9crr7zCb9u8eTMDwJYuXSoau3r1agaAvfXWW/y2tm3bss6dO4saZ+zfv585nU520003iY7v2bMn69ChA/N4PPy2zz//nAFg//rXv/htFRUVrEmTJmzw4MGqDTkYk/+ZlJaWMgDsiSeeEG3Pz89ngwcPVj0fQRBEtKA0CYLQwGazYezYsdi2bRvfGljI8uXL0aRJE1E74cWLF+PCCy9EWloa0tPT0a5dOzz66KOGrmuxWHDPPfdg+fLlaNu2LZKTk9GjRw+UlJSAMYZ58+bh3HPPRVpaGi6//HL89NNPouM3b96Ma6+9Fs2aNUNSUhJatWqFO++8E3/88Qc/pqqqCl27dkWrVq1QVlbGbz969Chyc3PRt29f+Hw+Q/MOlx9//BH/+Mc/8K9//QsZGRmyYxo1ahS0LS8vD82aNcPBgweD9rndbtx2222YOHGiaa2opSxduhQVFRV4+OGHVcfZbDZkZ2cHbb/ooosAQDR/h8MBAMjMzBSNbdCgAQAgKSkJAPDnn39i7969GDRoECwWCz8uPz8fnTp1wvr16/mf42+//YbS0lKMGTMGdnvtHwf/8pe/oE2bNli3bh2/7Y033sCRI0fwt7/9TXReOeR+Jt27d4fNZpP9mRAEQcQLJMMEoYPbbrsNFosFy5YtE23fs2cPvvrqK4wdOxY2mw0AsGbNGkyYMAEFBQVYt24d1q9fj8mTJ2v+eV6O9957D0uXLsXcuXPx2muv4fTp0xg8eDCmTJmCzz//HIsWLcKLL76IPXv24PrrrwcTrIf9+eef0bt3byxevBibNm3CP/7xD3z55Ze45JJL4PF4AARk6j//+Q+OHz/Ol4Lz+/0YPXo0GGN47bXX+OelhNfr1fVgOtbqMsZw++23Y8iQIbjmmmsM3atffvkFv/76q2yKxMyZM1FRUSHK3VVi7ty5cDqdSElJwSWXXIJ33nlH1/U//fRTNGzYEP/73//QpUsX2O12NGrUCHfddRfKy8s1j//4448BQDT/Pn36oHv37pgxYwZKS0tx5swZbN++HY8++ii6deuG/v37AwjIPgBRegOHy+VCZWUlfv75ZwCB/F8A6Ny5c9DYzp078/u55wQE0lYuueQSOJ1OZGVlYdSoUbLpK1K2bNkCn88n+zP59NNPkZ6eDofDgQ4dOuDZZ5+V/eBlsVjQt29fzWsRBEGETEzj0gRRhygoKGA5OTnM7Xbz26ZMmcIAsB9++IHfds8997AGDRqEfT0ALDc3l505c4bftn79egaAdenSRfRn6wULFjAA7Ntvv5U9l9/vZx6Ph/36668MAHv77bdF+19//XUGgC1YsID94x//YFarlW3atElzjlxqgZ5HcXGx5vmef/55lpWVxY4ePcoYY2z58uWyaRJSPB4P69u3L8vIyGAHDhwQ7duxYwdzOBysqKhINGdpOsThw4dZYWEh+89//sP++9//slWrVrFevXoxAGzJkiWac2/bti1LSkpi6enpbPbs2ay4uJg9/fTTLDk5mfXp00c1zeDQoUOscePGrEePHszn84n2lZeXs6FDh4ruZd++fdmff/7Jj/H5fKxhw4bsiiuuEB178uRJlp6ezgCwL774gjHG2KpVqxgAtnXr1qB53HHHHczpdPLfDxw4kAFgDRo0YA899BD7+OOP2QsvvMCys7NZq1atWEVFheJzKi8vZ+3bt2fNmzdnp0+fFu2bMGECW7ZsGduyZQtbv349Gz16NAPAbr755qDz2Gw2dvnllytehyAIIlxIhglCJy+//DIDwN58803GWEDAGjduzC699FLZcSNHjmTr169nv//+e0jXA8BGjRol2rZ3714GgE2dOlW0/YMPPgjKWz527Bi78847WbNmzZjVahXJ1Ny5c4Oud/fddzOHw8GsViv7+9//rmuO1dXVrLS0VNejvLxc9Vz79+9naWlpovxYPTLs9/vZLbfcwmw2G1u/fr1on8fjYV27dhVJlpHcYLfbzbp27cqys7NF+bVytG7dmgFgc+bMEW3nPqhs3rxZ9rg///yTde7cmTVq1Ij9/PPPQdcfNGgQa968OVuyZAn79NNP2cqVK1nr1q1Zt27d2KlTp/ixjz32GAPAZs6cyY4dO8Z+/PFHNnjwYGaz2RgAVlJSwhirlWHueyF33HEHc7lc/PcDBgxgANidd94pGsd9KFP6kHD27FnWv39/lpKSInsdOe655x4GgG3fvl3XeIIgCLMgGSYInVRWVrLMzEx+4c/bb7/NALAVK1YEjV22bBnr3bs3s9lszGKxsIsuukhXpFUIADZx4kTRNiWRKy4uZgDYG2+8wRgLRAovvPBCds4557B//vOfrLi4mH311VespKSEAWDTp08Puh632MnpdLLjx4/rnqfH49H10FqANXjwYNarVy928uRJ/vF///d/fFRZKH4cfr+f3XbbbcxqtYoWnnHMmzePZWZmsh9//JE/5zfffMMv6jp58iTzer2q85o7dy4DwPbs2aM6josiS2WO+wDz1FNPBR1z4sQJ1q1bN5adnc2++eaboP3c4kzph4Gff/6ZAWAzZszgt3k8HjZ58mTmdDr5Dz2DBw9mt99+OwPADh48yBhjrKioiAFgGzZsCLreDTfcwJo0acJ/P3LkyKCFeowFZNdiscguFqyqqmJXXXUVS0pKYh9++KHcrZKF+90ULuAjCIKIBpQzTBA6SU5OxqhRo1BUVIQjR45g2bJlSE9Px4033hg09tZbb8UXX3yBsrIybNiwAYwxDBkyBL/++mtU5rp792588803mDdvHu6991707dsXPXv2lF24BQAVFRUYM2YM2rRpg+TkZNx+++26rrN//37NttTcY8uWLZpzLikpQVZWFv+YOHEiAKBfv37Iz88XjWc1+cXLly/H0qVLcfPNN8ues6ysDK1bt+bPeeGFFwIIlFnLysqSXRQpvQ4AWK3qL5dyObhqx588eRL9+/fHvn37sHnzZtnjd+7cCZvNhm7duom2n3feecjOzhbl99rtdsyfPx9//vknvv32Wxw+fBjvvfceDhw4gHPPPRfNmjUDAHTq1AkAZJ/3rl27+P1qz4lD+pyqq6sxbNgwFBcXY/369bjiiitUjxei9z4TBEGYDdUZJggDjB8/Hi+88ALmzZuHjRs3Yty4cUhJSVEcn5qaikGDBsHtdmPYsGH47rvvgqQuEnAr/6ULqv7973/Ljr/rrrtw4MABfPXVV/jf//6HG264Ac899xwmT56sep28vDzNttQcbdu2Vd2/Zs0aVFVVibYVFRXhqaeewgsvvCBahMUYQ2FhIZYvX45///vfuPXWW2XP+cgjj2DcuHGibUePHsWoUaNw11134a9//StatWqlOCePx4PXX38dOTk5quMA4Prrr8eLL76I999/H127duW3b9y4EQDQq1cvfhsnwr/88gs2b94sGi8kLy8PPp8PpaWluPjii/ntP/zwA/78809ecIWkpaXhggsuAABs374dH330EZ599ll+f9OmTXHRRRfh1VdfxYMPPsgvkCwpKcHevXsxadIkfuzw4cMxbdo0vP/++xg+fDi//f333wdjTPScqqurMXz4cHz88cd46623MHDgQNX7JeXll18GIL5PBEEQUSGGUWmCqJN07tyZWSwWxbzL22+/nd17771szZo1bMuWLez1119nXbp0YZmZmYbSDxBGmoTb7Wbnn38+y8/PZ6tXr2ZFRUVs4sSJrE2bNkFpEkuWLGEA2PLly/lt99xzD3M4HOzLL7/UPd9IoJQzzOWX3nbbbWzr1q2ih1bOqdI9nDx5MrvnnnvYa6+9xoqLi9nLL7/MevbsGXRvGGPs8ccfZzabjX3yySei7UOHDmUul4s98cQTbPPmzWzOnDks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ANgrr7zCb/P7/axLly6sS5cusj9TIUodAqVUVVUxm83Gbr75ZtH2w4cPMwDsvvvu47dVVFSwJk2asMGDBzO/3696zszMTDZ06FDR9i+++IIBYI8++qjqnBhj7F//+hcDwD766CPNsQRB1F8oTYKIS2w2G8aOHYtt27Zh165dQfuXL1+OJk2aYNCgQfy2xYsX48ILL0RaWhrS09PRrl27oMicFhaLBffccw+WL1+Otm3bIjk5GT169EBJSQkYY5g3bx7OPfdcpKWl4fLLL8dPP/0UdI4PP/wQV1xxBTIyMpCSkoI+ffrgo48+Eo356aefcOutt6J169ZISUlB06ZNMXTo0KDn+sknn8BiseC1117DtGnTkJeXh4yMDPTv3x979+419NwixTnnnAOr1QqbzRa0b8qUKWjSpAnuu+8+2WM///xzWCwW0c8RAIYMGQK/349169bx25YuXYqKigo8/PDDIc0z3NrN55xzDgDAbq/9g9r69evBGMOtt94qGnvrrbfi7NmzKCoq4rctXLgQLVu2xIgRI0ybq957YrPZgiK1APhorDCt4NNPP8XOnTsxadIkuFwuXfPQgqudnZmZKdqekZEBq9WKpKQkftsbb7yBI0eO4G9/+xssFoviOXfv3o2ysjJcffXVou29e/dGw4YNsXbtWs15yf1MCYJIPEiGibjltttug8ViwbJly0Tb9+zZg6+++gpjx47lBWzNmjWYMGECCgoKsG7dOqxfvx6TJ09GRUWF4eu+9957WLp0KebOnYvXXnsNp0+fxuDBgzFlyhR8/vnnWLRoEV588UXs2bMH119/PZigIMurr76KK6+8EhkZGVi5ciX+85//oGHDhhg4cKBIiA8fPozs7GzMnTsXRUVF+L//+z/Y7XZcfPHFspL76KOP4tdff8XSpUvx4osv4scff8TQoUMV82o5GGPwer26Hnrhznny5Em8/vrrWLFiBaZMmRIkFB9++CFefvllLF26VFaUAcDtdsNqtcLhcIi2cxL27bff8ts+/fRTNGzYEP/73//QpUsX2O12NGrUCHfddRfKy8t1z98IXq8XZ8+exY4dOzBp0iS0adMG1113Hb9/9+7dOOecc5Cbmys6rnPnzvx+7jxbt25F165dMX/+fOTn58Nms/FpCCzEoj7h3pOPP/4YANCxY0fROQEgPT0dV199NZKSkpCWloYh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3v/RRx/hxIkTAHI9y253viMiourGMExEREREDYttEkRERETUsBiGiYiIiKhhMQwTERERUcNiGCYiIiKihsUwTEREREQNi2GYiIiIiBoWwzARERERNSyGYSIiIiJqWAzDRERERNSwGIaJiIiIqGExDBMRERFRw2IYJiIiIqKGxTBMRERERA2LYZiIiIiIGhbDMBERERE1LIZhIiIiImpYDMNERERE1LAYhomIiIioYTEMExEREVHDYhgmIiIioobFMExEREREDYthmIiIiIgaFsMwERERETUshmEiIiIialgMw0RERETUsBiGiYiIiKhhMQwTERERUcNiGCYiIiKihsUwTEREREQNi2GYiIiIiBoWwzARERERNSyGYSIiIiJqWAzDRERERNSwGIaJiIiIqGExDBMRERFRw2IYJiIiIqKGxTBMRERERA2LYZiIiIiIGhbDMBERERE1LIZhIiIiImpYDMNERERE1LAYhomIiIioYTEMExEREVHDYhgmIiIioobFMExEREREDYthmIiIiIgaFsMwERERETUshmEiIiIialgMw0RERETUsBiGiYiIiKhhMQwTERERUcNiGCYiIiKihsUwTEREREQNi2GYiIiIiBoWwzARERERNSyGYSIiIiJqWAzDRERERNSwGIaJiIiIqGExDBMRERFRw2IYJiIiIqKGxTBMRERERA2LYZiIiIiIGhbDMBERERE1LIZhIiIiImpYDMNERERE1LAYhomIiIioYTEMExEREVHDYhgmIiIioobFMExEREREDYthmIiIiIgaFsMwERERETUshmEiIiIialgMw0RERETUsBiGiYiIiKhhMQwTERERUcNiGCYiIiKihsUwTEREREQNi2GYiIiIiBoWwzARERERNaz/H5oEsk6unMJVAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "! seisflows par stop_after initialize\n", - "! seisflows par verbose False" + "! seisflows plot2d MODEL_02 vs --savefig m_02_vs.png\n", + "Image(filename='m_02_vs.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "-----------------------\n", - "Now let's run SeisFlows3. There are a few ways to do this: `submit`, `resume`, and `restart`\n", + "### Re-creating kernels from Tape et al. 2007\n", "\n", - "1. Since we already ran `seisflows init`, the `seisflows submit` option will not work, as SeisFlows3 considers this an active working state and `submit` can only be run on uninitialized working states.\n", - "2. To run a workflow in an active working state `resume` will load the current working state from the output/ directory and submit a workflow given the current parameter file.\n", - "3. The `restart` command is simply a convenience function that runs `clean` (to remove an active working state) and `submit` (to submit a fresh working state). \n", + "The 2D checkerboard model and source-receiver configuration that runs in this example come from the published work of [Tape et al. (2007)](https://academic.oup.com/gji/article/168/3/1105/929373). Here, Tape et al. generate event kernels for a number of individual events ([Figure 9](https://academic.oup.com/view-large/figure/31726687/168-3-1105-fig009.jpeg), shown below). This exercise illustrates how kernel features change for a simple target model (the checkerboard) depending on the chosen source-receiver geometry. \n", "\n", - "Since we haven't done anything in this working state, we will go with a modified version of Option 3 by running `clean` and then `submit`. We'll use the `-f` flag (stands for __'force'__) to skip over the standard input prompt that asks the User if they are sure they want to clean and submit.\n", - "\n", - "But first we'll try to run `seisflows submit` to show why Option 1 **will not work**." + "An attentive reader will notice that the misfit kernel we generated above looks very similar to Panel (h) in the figure below." ] }, { - "cell_type": "code", - "execution_count": 56, + "cell_type": "raw", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-04-29 12:32:17 | initializing SeisFlows3 in sys.modules\r\n", - "================================================================================\r\n", - " WARNING \r\n", - " /////// \r\n", - "Data from previous workflow found in working directory.\r\n", - "\r\n", - "> seisflows restart: delete data and start new workflow\r\n", - "> seisflows resume: resume existing workflow\r\n", - "================================================================================\r\n" - ] - } - ], "source": [ - "! seisflows submit -f" + ".. image:: reference_figures/tape_etal_2007_fig9.jpeg" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "----------------------------\n", - "__Okay, let's go!__ In the following cell we will run the SeisFlows3 Inversion workflow. In the output cell we will see the logging statements outputted by SeisFlows3, both to stdout and to the output log file (defaults to ./output_seisflows.txt) which details the progress of our inversion" + "Caption from publication: *Construction of a misfit kernel. (a)–(g) Individual event kernels, each constructed via the method shown in Fig. 8 (which shows Event 5). The colour scale for each event kernel is shown beneath (g). (h) The misfit kernel is simply the sum of the 25 event kernels. (i) The source–receiver geometry and target phase‐speed model. There are a total of N= 25 × 132 = 3300 measurements that are used in constructing the misfit kernel (see Section 5).*" ] }, { - "cell_type": "code", - "execution_count": 58, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "================================================================================\n", - " CLEAN \n", - " ///// \n", - "+ skipping over: /home/bchow/Work/work/sf3_specfem2d_example/parameters.yaml\n", - "- deleting file/folder: /home/bchow/Work/work/sf3_specfem2d_example/scratch\n", - "- deleting file/folder: /home/bchow/Work/work/sf3_specfem2d_example/stats\n", - "- deleting file/folder: /home/bchow/Work/work/sf3_specfem2d_example/output\n", - "- deleting file/folder: /home/bchow/Work/work/sf3_specfem2d_example/output_sf3.txt\n", - "- deleting file/folder: /home/bchow/Work/work/sf3_specfem2d_example/logs\n", - "================================================================================\n", - "2022-04-29 12:38:37 | initializing SeisFlows3 in sys.modules\n", - "2022-04-29 12:38:42 | copying par/log file to: /home/bchow/Work/work/sf3_specfem2d_example/logs/output_sf3_001.txt\n", - "2022-04-29 12:38:42 | copying par/log file to: /home/bchow/Work/work/sf3_specfem2d_example/logs/parameters_001.yaml\n", - "2022-04-29 12:38:42 | exporting current working environment to disk\n", - "2022-04-29 12:38:42 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " WORKFLOW WILL STOP AFTER FUNC: 'initialize' \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:38:42 | \n", - "================================================================================\n", - " STARTING INVERSION WORKFLOW \n", - "================================================================================\n", - "2022-04-29 12:38:42 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " ITERATION 1 / 1 \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:38:42 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " PERFORMING MODULE SETUP \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:38:42 | misfit function is: 'waveform'\n", - "2022-04-29 12:38:43 | writing line search history file:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/stats/line_search.txt\n", - "2022-04-29 12:38:44 | checking poissons ratio for: 'm_new.npy'\n", - "2022-04-29 12:38:44 | model parameters (m_new.npy i01s00):\n", - "2022-04-29 12:38:44 | 5800.00 <= vp <= 5800.00\n", - "2022-04-29 12:38:44 | 3500.00 <= vs <= 3500.00\n", - "2022-04-29 12:38:44 | 0.21 <= pr <= 0.21\n", - "2022-04-29 12:38:46 | setting up solver on system...\n", - "2022-04-29 12:38:46 | checkpointing working environment to disk\n", - "2022-04-29 12:38:47 | exporting current working environment to disk\n", - "2022-04-29 12:38:48 | running task solver.setup 1 times\n", - "2022-04-29 12:38:48 | initializing 1 solver directories\n", - "2022-04-29 12:38:53 | source 001 symlinked as mainsolver\n", - "2022-04-29 12:38:53 | generating 'data' with MODEL_TRUE synthetics\n", - "2022-04-29 12:39:00 | running mesh generation for MODEL_INIT\n", - "2022-04-29 12:39:02 | \n", - "================================================================================\n", - " INITIALIZING INVERSION \n", - "================================================================================\n", - "2022-04-29 12:39:02 | \n", - "EVALUATE OBJECTIVE FUNCTION\n", - "--------------------------------------------------------------------------------\n", - "2022-04-29 12:39:02 | saving model 'm_new.npy' to:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/scratch/evalgrad/model\n", - "2022-04-29 12:39:03 | evaluating objective function 1 times on system...\n", - "2022-04-29 12:39:03 | checkpointing working environment to disk\n", - "2022-04-29 12:39:05 | exporting current working environment to disk\n", - "2022-04-29 12:39:05 | running task solver.eval_func 1 times\n", - "2022-04-29 12:39:05 | running forward simulations\n", - "2022-04-29 12:39:11 | calling preprocess.prepare_eval_grad()\n", - "2022-04-29 12:39:11 | preparing files for gradient evaluation\n", - "2022-04-29 12:39:11 | exporting residuals to:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/scratch/evalgrad\n", - "2022-04-29 12:39:12 | summing residuals with preprocess module\n", - "2022-04-29 12:39:12 | saving misfit 1.748E-03 to tag 'f_new.txt'\n", - "2022-04-29 12:39:12 | \n", - "================================================================================\n", - " FINISHED FLOW EXECUTION \n", - "================================================================================\n", - "2022-04-29 12:39:12 | \n", - "================================================================================\n", - " FINISHED INVERSION WORKFLOW \n", - "================================================================================\n" - ] - } - ], "source": [ - "! seisflows clean -f\n", - "! seisflows submit -f" + "#### Choosing an event\n", + "\n", + "The Event ID that generated each kernel is specified in the title of each sub plot (e.g., Panel. (a) corresponds to Event \\#1). We can attempt to re-create these kernels by choosing specific event IDs to run Example 2 with. \n", + "\n", + "To specify the specific event ID, we can use the `--event_id` flag when running Example 2. For this docs page we'll choose Event \\#7, which is represented by Panel (g) in the figure above. " ] }, { @@ -1666,553 +777,393 @@ "metadata": {}, "source": [ ".. note::\n", - " For a detailed exploration of a SeisFlows3 working directory, see the `working directory `__ documentation page where we explain each of the files and directories that have been generated during this workflow. Below we just look at two files which are required for our adjoint simulation, the adjoint sources (.adj) and STATIONS_ADJOINT file" + " Our choice of preprocessing module, misfit function, gradient smoothing length, nonlinear optimization algorithm, etc. will affect how each event kernel is produced, and consequently how much they differ from the published kernels shown above. We do not expect to perfectly match the event kernels above, but rather to see that first order structure is the same." ] }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " -48.0000000 0.0000000\r\n", - " -47.9400000 0.0000000\r\n", - " -47.8800000 0.0000000\r\n", - " -47.8200000 0.0000000\r\n", - " -47.7600000 0.0000000\r\n", - " -47.7000000 0.0000000\r\n", - " -47.6400000 0.0000000\r\n", - " -47.5800000 0.0000000\r\n", - " -47.5200000 0.0000000\r\n", - " -47.4600000 0.0000000\r\n" + "usage: seisflows examples [-h] [-r [SPECFEM2D_REPO]] [--nsta [NSTA]]\r\n", + " [--ntask [NTASK]] [--niter [NITER]]\r\n", + " [--event_id [EVENT_ID]]\r\n", + " [method] [choice]\r\n", + "\r\n", + "Lists out available example problems and allows the user to run example\r\n", + "problems directly from the command line. Some example problems may have pre-\r\n", + "run prompts mainly involving the numerical solver\r\n", + "\r\n", + "positional arguments:\r\n", + " method Method for running the example problem. If\r\n", + " notprovided, simply prints out the list of available\r\n", + " example problems. If given as an integer value, will\r\n", + " print out the help message for the given example. If\r\n", + " 'run', will run the example. If 'setup' will simply\r\n", + " setup the example working directory but will not\r\n", + " execute `seisflows submit`\r\n", + " choice If `method` in ['setup', 'run'], integervalue\r\n", + " corresponding to the given example problem which can\r\n", + " listed using `seisflows examples`\r\n", + "\r\n", + "optional arguments:\r\n", + " -h, --help show this help message and exit\r\n", + " -r [SPECFEM2D_REPO], --specfem2d_repo [SPECFEM2D_REPO]\r\n", + " path to the SPECFEM2D directory which should contain\r\n", + " binary executables. If not given, assumes directory is\r\n", + " called 'specfem2d/' in the current working directory.\r\n", + " If that dir is not found, SPECFEM2D will be\r\n", + " downloaded, configured and compiled automatically in\r\n", + " the current working directory.\r\n", + " --nsta [NSTA] User-defined number of stations to use for the example\r\n", + " problem (1 <= NSTA <= 131). If not given, each example\r\n", + " has its own default.\r\n", + " --ntask [NTASK] User-defined number of events to use for the example\r\n", + " problem (1 <= NTASK <= 25). If not given, each example\r\n", + " has its own default.\r\n", + " --niter [NITER] User-defined number of iterations to run for the\r\n", + " example problem (1 <= NITER <= inf). If not given,\r\n", + " each example has its own default.\r\n", + " --event_id [EVENT_ID]\r\n", + " Allow User to choose a specific event ID from the Tape\r\n", + " 2007 example (1 <= EVENT_ID <= 25). If not used,\r\n", + " example will default to choosing sequential from 1 to\r\n", + " NTASK\r\n" ] } ], "source": [ - "# The adjoint source is created in the same format as the synthetics (two-column ASCII) \n", - "! head scratch/solver/001/traces/adj/AA.S0001.BXY.adj" + "# Run the help message to view the description of the optional arguemnt --event_id\n", + "! seisflows examples -h" ] }, { "cell_type": "code", - "execution_count": 86, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "S0001 AA 180081.4100000 388768.7100000 0.0 0.0\r\n" - ] - } - ], + "outputs": [], "source": [ - "# We can also see that we have generated a STATIONS_ADJOINT file, which is required for \n", - "# running the adjoint simulations (i.e., evaluate the gradient)\n", - "! head scratch/solver/001/DATA/STATIONS_ADJOINT" + "# Run command with open variable to set SPECFEM2D path. Choose event_id==7 and only run 1 iteration\n", + "! seisflows examples run 2 -r ${PATH_TO_SPECFEM2D} --event_id 7 --niter 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### 3b. Adjoint simulations\n", + "#### Comparing kernels\n", "\n", - "Now that we have all the required files for running an adjoint simulation (\\*.adj waveforms and STATIONS_ADJOINT file), we can continue with the SeisFlows3 Inversion workflow. No need to edit the Par_file or anything like that, SeisFlows3 will take care of that under the hood. We simply need to tell the workflow (via the parameters.yaml file) to `resume_from` the correct function. We can have a look at these functions again:" + "This workflow should run faster than Example \\#2 proper, because we are only using 1 event and 1 iteration. In the same vein as above, we can visualize the output gradient to see how well it matches with those published in Tape et al." ] }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " SEISFLOWS3 WORKFLOW MAIN \r\n", - " //////////////////////// \r\n", - "Flow arguments for \r\n", - "\r\n", - "1: setup\r\n", - "2: initialize\r\n", - "3: evaluate_gradient\r\n", - "4: write_gradient\r\n", - "5: compute_direction\r\n", - "6: line_search\r\n", - "7: finalize\r\n", - "8: clean\r\n" + "/home/bchow/Work/work/seisflows_example/example_2a\n", + "logs\tparameters.yaml sflog.txt specfem2d\r\n", + "output\tscratch\t\t sfstate.txt specfem2d_workdir\r\n" ] } ], "source": [ - "! seisflows print flow" + "%cd ~/sfexamples/example_2a\n", + "! ls" ] }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "RESUME_FROM: -> evaluate_gradient\n", - "STOP_AFTER: initialize -> compute_direction\n" + "Figure(707.107x707.107)\r\n" ] + }, + { + "data": { + "image/png": "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mzdP+DyeeuopHDhwIPv3unXrcOmll+Kf//wnvvrVrwI4Evesz1DxzDPPYO7cuVi1ahWOOuoo4bbiBMVwwghSXAblSYybIAaS4VXVk5TzieNYIiQI+D2IhhEjRuCss87CtGnT8OCDDwIALr/8ckyePBnDhg3Llhs+fDjq6urwgx/8AAUFBaitrcWcOXMwdOhQDB06FHPmzEGPHj1QXV0NAEilUrjssstw3XXX4Utf+hL69euH66+/HiNHjsS4ceOy9e7YsQMff/wxduzYgfb2djQ0NAAAvva1r6FXr15ZwZvho48+ytqdySU8YsSInDJvvPEGOnXqhIqKCql9pRLxf/qFwP33348hQ4age/fuGDVqFP75z39GbZItQYqaoG6wcRRiSXvYJOV8VJuNT0iYMPND9CxevBgjR47EhAkTMGHCBBx33HF47LHHcsps3boV6XQ6+/cNN9yA2tpaXHXVVTjppJPwwQcfYPny5ejdu3e2zD333INzzjkH559/Pk499VT06NEDzz33HDp37pwtc9ttt+GEE07A7bffjv379+OEE07ACSecgDfeeCP4E48xBVomYISY8uc//xk1NTW4//77ceqpp+LBBx/Eww8/jLfeegtHH3207bEtLS1IpVJobk5HMiMzjsI1rjfxJMX8JUlIxnU8kfxCxndO9bHe0tKCVHEx0ulonoeE2EEx7MDo0aNx4okn4oEHHshuGzFiBM455xzU1dXZHptUMQxQEJsRpojMlxRPMojreCL5g5/vW1zGN8UwURnGDNvQ1taG9evX46abbsrZPmHCBNMk162trWht/SIbYuYViDGPYZjE0TsMxOcGbyQsERlG/1AQExIebr9vcRvTmecg/W9ERSiGbfjoo4/Q3t5umgjbLMl1XV2daR7CY44Z1GEbIYQQkm/s27cPqVQqajMIyYFiWADRRNg333wzZs6cmf177969OOaYY7Bjxw5++UOmpaUFgwYNwvvvv89XciHCfo8G9ns0sN/F0TQN+/btQ3l5edSmENIBimEbSkpK0Llz5w5eYH0ibD1WyzimUineKCOiT58+7PsIYL9HA/s9GtjvYtApRFQlOUGBAdCtWzeMGjUK9fX1Odvr6+tdrfhCCCGEEELUhJ5hB2bOnImamhqcdNJJqKysxO9+9zvs2LEDV155ZdSmEUIIIYQQn1AMO3DBBRfg3//+N2bPno1du3ahoqICL7zwAo455hjHYwsLC3H77bdbrnVOgoN9Hw3s92hgv0cD+52QZMA8w4QQQgghJG9hzDAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AMB8j999+PIUOGoHv37hg1ahT++c9/Rm2SMrz66qs4++yzUV5ejoKCAvz1r3/N2a9pGmbNmoXy8nIUFRVh7Nix2LJlS06Z1tZWzJgxAyUlJejZsyemTJmCnTt35pRpbm5GTU0NUqkUUqkUampqsHfv3pwyO3bswNlnn42ePXuipKQE11xzDdra2nLKbNq0CVVVVSgqKsJRRx2F2bNnI25zT+vq6vCtb30LvXv3xoABA3DOOedg69atOWXY7/J54IEHcNxxx2UXZqisrMTf//737H72eTjU1dWhoKAAtbW12W3se0IIAEAjgbBkyRKta9eu2kMPPaS99dZb2rXXXqv17NlTe++996I2TQleeOEF7dZbb9WeeuopDYC2dOnSnP133XWX1rt3b+2pp57SNm3apF1wwQXawIEDtZaWlmyZK6+8UjvqqKO0+vp67c0339S+853vaN/85je1Q4cOZcucddZZWkVFhbZq1Spt1apVWkVFhTZ58uTs/kOHDmkVFRXad77zHe3NN9/U6uvrtfLycm369OnZMul0WistLdUuvPBCbdOmTdpTTz2l9e7dW5s/f35wHRQAEydO1P7whz9omzdv1hoaGrRJkyZpRx99tLZ///5sGfa7fJ599lnt+eef17Zu3apt3bpVu+WWW7SuXbtqmzdv1jSNfR4Gr7/+ujZ48GDtuOOO06699trsdvY9IUTTNI1iOCBOPvlk7corr8zZNnz4cO2mm26KyCJ1MYrhw4cPa2VlZdpdd92V3fbZZ59pqVRK++1vf6tpmqbt3btX69q1q7ZkyZJsmQ8++EDr1KmTtmzZMk3TNO2tt97SAGhr1qzJllm9erUGQHvnnXc0TTsiyjt16qR98MEH2TJ/+tOftMLCQi2dTmuapmn333+/lkqltM8++yxbpq6uTisvL9cOHz4ssSfCpampSQOgrVy5UtM09nuYFBcXaw8//DD7PAT27dunDR06VKuvr9eqqqqyYph9TwjJwDCJAGhra8P69esxYcKEnO0TJkzAqlWrIrIqPmzbtg2NjY05/VdYWIiqqqps/61fvx4HDx7MKVNeXo6KiopsmdWrVyOVSmH06NHZMqeccgpSqVROmYqKCpSXl2fLTJw4Ea2trVi/fn22TFVVVU5i/YkTJ+LDDz/E9u3b5XdASKTTaQBAv379ALDfw6C9vR1LlizBJ598gsrKSvZ5CFx99dWYNGkSxo0bl7OdfU8IyUAxHAAfffQR2tvbUVpamrO9tLQUjY2NEVkVHzJ9ZNd/jY2N6NatG4qLi23LDBgwoEP9AwYMyCljbKe4uBjdunWzLZP5O67XU9M0zJw5E6eddhoqKioAsN+DZNOmTejVqxcKCwtx5ZVXYunSpTj22GPZ5wGzZMkSvPnmm6irq+uwj31PCMnA5ZgDpKCgIOdvTdM6bCPWeOk/Yxmz8jLKaJ9Paonr9Zw+fTo2btyI1157rcM+9rt8hg0bhoaGBuzduxdPPfUULrnkEqxcuTK7n30un/fffx/XXnstli9fju7du1uWY98TQugZDoCSkhJ07ty5w6/5pqamDr/8SUfKysoAdPSG6PuvrKwMbW1taG5uti2ze/fuDvXv2bMnp4yxnebmZhw8eNC2TFNTE4COXqU4MGPGDDz77LNYsWIFvvzlL2e3s9+Do1u3bvja176Gk046CXV1dfjmN7+Je++9l30eIOvXr0dTUxNGjRqFLl26oEuXLli5ciV+/etfo0uXLpZeV/Y9IfkHxXAAdOvWDaNGjUJ9fX3O9vr6eowZMyYiq+LDkCFDUFZWltN/bW1tWLlyZbb/Ro0aha5du+aU2bVrFzZv3pwtU1lZiXQ6jddffz1bZu3atUin0zllNm/ejF27dmXLLF++HIWFhRg1alS2zKuvvpqTBmn58uUoLy/H4MGD5XdAQGiahunTp+Ppp5/GK6+8giFDhuTsZ7+Hh6ZpaG1tZZ8HyJlnnolNmzahoaEh+znppJPw4x//GA0NDfjKV77CvieEHCG8uXr5RSa12iOPPKK99dZbWm1trdazZ09t+/btUZumBPv27dM2bNigbdiwQQOgLViwQNuwYUM29dxdd92lpVIp7emnn9Y2bdqkXXTRRaYpj7785S9rL730kvbmm29qZ5xxhmnKo+OOO05bvXq1tnr1am3kyJGmKY/OPPNM7c0339Reeukl7ctf/nJOyqO9e/dqpaWl2kUXXaRt2rRJe/rpp7U+ffrELuXRT3/6Uy2VSmn/+Mc/tF27dmU/n376abYM+10+N998s/bqq69q27Zt0zZu3KjdcsstWqdOnbTly5drmsY+DxN9NglNY98TQo5AMRwgv/nNb7RjjjlG69atm3biiSdmU1gRTVuxYoUGoMPnkksu0TTtSNqj22+/XSsrK9MKCwu1008/Xdu0aVNOHQcOHNCmT5+u9evXTysqKtImT56s7dixI6fMv//9b+3HP/6x1rt3b613797aj3/8Y625uTmnzHvvvadNmjRJKyoq0vr166dNnz49J72Rpmnaxo0btW9/+9taYWGhVlZWps2aNSt26Y7M+huA9oc//CFbhv0un0svvTR7H+jfv7925plnZoWwprHPw8Qohtn3hBBN07QCTePyNoQQQgghJD9hzDAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AME0IIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhJHEMHjwYBQUFKCgowN69e33VNXbs2GxdDQ0NUuwjhBCiDhTDhBAlaW9vx5gxY/DDH/4wZ3s6ncagQYPw85//3Pb42bNnY9euXUilUr7sePrpp/H666/7qoMQQoi6UAwTQpSkc+fOePTRR7Fs2TIsXrw4u33GjBno168fbrvtNtvje/fujbKyMhQUFPiyo1+/fujfv7+vOgghhKgLxTAhRFmGDh2Kuro6zJgxAx9++CGeeeYZLFmyBI8++ii6devmqq5Fixahb9+++Nvf/oZhw4ahR48eOO+88/DJJ5/g0UcfxeDBg1FcXIwZM2agvb09oDMihBCiGl2iNoAQQuyYMWMGli5dip/85CfYtGkTbrvtNhx//PGe6vr000/x61//GkuWLMG+fftw7rnn4txzz0Xfvn3xwgsv4N1338UPf/hDnHbaabjgggvkngghhBAloRgmhChNQUEBHnjgAYwYMQIjR47ETTfd5LmugwcP4oEHHsBXv/pVAMB5552Hxx57DLt370avXr1w7LHH4jvf+Q5WrFhBMUwIIXkCwyQIIcrz+9//Hj169MC2bduwc+dOz/X06NEjK4QBoLS0FIMHD0avXr1ytjU1NfmylxBCSHygGCaEKM3q1atxzz334JlnnkFlZSUuu+wyaJrmqa6uXbvm/F1QUGC67fDhw57tJYQQEi8ohgkhynLgwAFccskluOKKKzBu3Dg8/PDDWLduHR588MGoTSOEEJIQKIYJIcpy00034fDhw5g7dy4A4Oijj8bdd9+N//W//he2b98erXGEEEISAcUwIURJVq5cid/85jdYtGgRevbsmd0+bdo0jBkzxle4BCGEEJKhQOPThBCSMAYPHoza2lrU1tZKqW/79u0YMmQINmzY4DmtGyGEEDWhZ5gQkkhuvPFG9OrVC+l02lc93/3ud/GNb3xDklWEEEJUg55hQkjieO+993Dw4EEAwFe+8hV06uT9d/8HH3yAAwcOADgSs+x25TtCCCFqQzFMCCGEEELyFoZJEEIIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AME0IIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AME0IIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AME0IIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AME0IIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AME0IIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AME0IIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AME0IIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AME0IIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELyFophQgghhBCSt1AME0IIIYSQvIVimBBCCCGE5C0Uw4QQQgghJG+hGCaEEEIIIXkLxTAhhBBCCMlbKIYJIYQQQkjeQjFMCCGEEELylv8Pg5RX3XM4SvcAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# We'll stop just before the line search so that we can take a look at the files \n", - "# generated during the middle tasks\n", - "! seisflows par resume_from evaluate_gradient\n", - "! seisflows par stop_after compute_direction" + "! seisflows plot2d GRADIENT_01 vs_kernel --save g_01_vs.png\n", + "Image(\"g_01_vs.png\")" ] }, { - "cell_type": "code", - "execution_count": 89, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-04-29 12:41:21 | copying par/log file to: /home/bchow/Work/work/sf3_specfem2d_example/logs/output_sf3_002.txt\n", - "2022-04-29 12:41:21 | copying par/log file to: /home/bchow/Work/work/sf3_specfem2d_example/logs/parameters_002.yaml\n", - "2022-04-29 12:41:21 | exporting current working environment to disk\n", - "2022-04-29 12:41:21 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " WORKFLOW WILL RESUME FROM FUNC: 'evaluate_gradient' \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:41:21 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " WORKFLOW WILL STOP AFTER FUNC: 'compute_direction' \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:41:21 | \n", - "================================================================================\n", - " STARTING INVERSION WORKFLOW \n", - "================================================================================\n", - "2022-04-29 12:41:21 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " ITERATION 1 / 1 \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:41:21 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " EVALUATING GRADIENT \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:41:21 | evaluating gradient 1 times on system...\n", - "2022-04-29 12:41:21 | checkpointing working environment to disk\n", - "2022-04-29 12:41:22 | exporting current working environment to disk\n", - "2022-04-29 12:41:23 | running task solver.eval_grad 1 times\n", - "2022-04-29 12:41:23 | running adjoint simulations\n", - "2022-04-29 12:41:38 | exporting kernels to:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/scratch/evalgrad\n", - "2022-04-29 12:41:38 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " POSTPROCESSING KERNELS \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:41:38 | processing kernels into gradient on system...\n", - "2022-04-29 12:41:38 | checkpointing working environment to disk\n", - "2022-04-29 12:41:39 | exporting current working environment to disk\n", - "2022-04-29 12:41:39 | running task postprocess.process_kernels 1 times\n", - "2022-04-29 12:41:39 | saving summed kernels to:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/scratch/evalgrad/kernels/sum\n", - "2022-04-29 12:41:41 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " COMPUTING SEARCH DIRECTION \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:41:41 | computing search direction with L-BFGS\n", - "2022-04-29 12:41:41 | first L-BFGS iteration, setting search direction as inverse gradient\n", - "2022-04-29 12:41:41 | \n", - "================================================================================\n", - " FINISHED FLOW EXECUTION \n", - "================================================================================\n", - "2022-04-29 12:41:41 | \n", - "================================================================================\n", - " FINISHED INVERSION WORKFLOW \n", - "================================================================================\n" - ] - } - ], "source": [ - "# We can use the `seisflows resume` command to continue an active workflow\n", - "# again we use the '-f' flag to skip past the user-input stage.\n", - "! seisflows resume -f" + "From the above figure we can see that the first order structure of our Vs event kernel is very similar to Panel (g) from Figure 9 of Tape et al. (2007). As mentioned, any differences between the kernel will be due to the differences in the parameters available to us during the inversion. \n", + "\n", + "Creating all the other kernels shown in Figure 9 of Tape et al. is an exercise left to the reader." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "----------------\n", - "The functions __evaluate_gradient()__ through __compute_direction()__ have run adjoint simulations to generate event kernels and sum the kernels into the misfit kernel. \n", + "## Example \\#3: En-masse Forward Simulations\n", + "\n", + "SeisFlows is not just an inversion tool, it can also be used to simplify workflows to run forward simulations using external numerical solvers. In Example \\#3 we use SeisFlows to run en-masse forward simulations. \n", + "\n", + "### Motivation\n", "\n", - "> **NOTE**: Because we only have one event, our misfit kernel is just exactly our event kernel. And since we did not specify any smoothing lenghts (PAR.SMOOTH_H and PAR.SMOOTH_V), no smoothing of the gradient has occurred. \n", + "Imagine a User who has a velocity model of a specific region (at any scale). This User would like to run a number of forward simulations for **N** events and **S** stations to generate **N** $\\times$ **S** synthetic seismograms. These synthetics may be used directly, or compared to observed seismograms to understand how well the regional velocity model characterizes actual Earth structure. \n", "\n", - "Using the L-BFGS optimization algorithm, SeisFlows3 has computed a search direction that will be used in the line search to search for a best fitting model which optimally reduces the objective function. We can take a look at where SeisFlows3 has stored the information relating to kernel generation and the optimization computation." + "If **N** is large this effort may require a large number of manual tasks, including the creation of working directories, editing submit calls (if working on a cluster), and book keeping for files generated by the external solver. SeisFlows is here to automate all of these tasks.\n", + "\n", + "### Running the example" ] }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "gradient kernels model residuals\r\n" + "No existing SPECFEM2D repo given, default to: /home/bchow/Work/work/seisflows_example/example_2/specfem2d\r\n", + "\r\n", + " @@@@@@@@@@ \r\n", + " .@@@@. .%&( %@. \r\n", + " @@@@ @@@@ &@@@@@@ ,%@ \r\n", + " @@@@ @@@, /@@ @ \r\n", + " @@@ @@@@ @@@ @ \r\n", + " @@@@ @@@@ @@@ @ @ \r\n", + " @@@ @@@@ ,@@@ @ @ \r\n", + " @@@@ @@@@ @@@@ @@ @ @\r\n", + " @@@@ @@@@@ @@@@@ @@@ @@ @\r\n", + " @@@@ @@@@@ @@@@@@@@@@@@@@ @@ @\r\n", + " @@@@ @@@@@@ @@@& @@@ @ \r\n", + " @@@@@ @@@@@@@@ %@@@@# @@ \r\n", + " @@@@# @@@@@@@@@@@@@@@@@ @@ \r\n", + " &@@@@@ @@@@( @@& \r\n", + " @@@@@@@ /@@@@ \r\n", + " @@@@@@@@@@@@@@@@@\r\n", + " @@@@@@@@@@ \r\n", + "\r\n", + "\r\n", + "================================================================================\r\n", + " SEISFLOWS EXAMPLE 3 \r\n", + " /////////////////// \r\n", + "This is a [SPECFEM2D] [WORKSTATION] example, which will run forward simulations\r\n", + "to generate synthetic seismograms through a homogeneous halfspace starting\r\n", + "model. This example uses no preprocessing or optimization modules. [10 events,\r\n", + "25 stations] The tasks involved include:\r\n", + "\r\n", + "1. (optional) Download, configure, compile SPECFEM2D\r\n", + "2. [Setup] a SPECFEM2D working directory\r\n", + "3. [Setup] starting model from 'Tape2007' example\r\n", + "4. [Setup] a SeisFlows working directory\r\n", + "5. [Run] the forward simulation workflow\r\n", + "================================================================================\r\n" ] } ], "source": [ - "# Gradient evaluation files are stored here, the kernels are stored separately from the gradient incase\n", - "# the user wants to manually manipulate them\n", - "! ls scratch/evalgrad" + "# Run the help dialogue to see what occurs in Example 3\n", + "! seisflows examples 3" ] }, { "cell_type": "code", - "execution_count": 91, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "proc000000_vp_kernel.bin proc000000_vs_kernel.bin\r\n" - ] - } - ], + "outputs": [], "source": [ - "# SeisFlows3 stores all kernels and gradient information as SPECFEM binary (.bin) files\n", - "! ls scratch/evalgrad/gradient" + "# Run command with open variable to set SPECFEM2D path\n", + "! seisflows examples run 3 -r ${PATH_TO_SPECFEM2D}" ] }, { - "cell_type": "code", - "execution_count": 92, + "cell_type": "raw", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "001 sum\r\n" - ] - } - ], "source": [ - "# Kernels are stored on a per-event basis, and summed together (sum/). If smoothing was performed, \n", - "# we would see both smoothed and unsmoothed versions of the misfit kernel\n", - "! ls scratch/evalgrad/kernels" + "You will be met with the following log message after succesful completion of the example problem\n", + "\n", + ".. code:: bash\n", + "\n", + " ================================================================================\n", + " EXAMPLE COMPLETED SUCCESFULLY\n", + " ================================================================================" ] }, { - "cell_type": "code", - "execution_count": 93, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "f_new.txt g_new.npy LBFGS m_new.npy\tp_new.npy\r\n" - ] - } - ], "source": [ - "# We can see that some new values have been stored in prepartion for the line search,\n", - "# including g_new (current gradient) and p_new (current search direction). These are also\n", - "# stored as vector NumPy arrays (.npy files)\n", - "! ls scratch/optimize" + "### Understanding example outputs\n", + "\n", + "This example does not produce gradients or updated models, only synthetic seismograms. We can view these seismograms using the `seisflows plotst` command, which is used to quickly plot synthetic seismograms (using ObsPy under the hood). " ] }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[-0.00000000e+00 -0.00000000e+00 -0.00000000e+00 ... -3.96447909e-11\n", - " -2.00156454e-11 -2.61676726e-12]\n" + "/home/bchow/Work/work/seisflows_example/example_3\n", + "logs\tparameters.yaml sflog.txt specfem2d\r\n", + "output\tscratch\t\t sfstate.txt specfem2d_workdir\r\n" ] } ], "source": [ - "p_new = np.load(\"scratch/optimize/p_new.npy\")\n", - "print(p_new)" + "%cd ~/sfexamples/example_3\n", + "! ls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "--------------------\n", - "#### 3c. Line search and model update\n", - "\n", - "Let's finish off the inversion by running through the line search, which will generate new models using the\n", - "gradient, evaluate the objective function by running forward simulations, and comparing the evaluated objective function with the value obtained in __initialize__. Satisfactory reduction in the objective function will result in a termination of the line search. We are using a bracketing line search here (CITE RYANS PAPER), which requires finding models which both increase and decrease the misfit with respect to the initial evaluation. Therefore it will likely take more than two trial steps to complete the line search" + "In this example, we have set the `export_traces` parameter to **True**, which tells SeisFlows to store synthetic waveforms generated during the workflow in the `output/` directory. Under the hood, SeisFlows is copying all synthetic seismograms from the Solver's `scratch/` directory, to a more permanent location." ] }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "RESUME_FROM: evaluate_gradient -> line_search\n", - "STOP_AFTER: compute_direction -> finalize\n" + "export_traces: True\r\n" ] } ], "source": [ - "! seisflows par resume_from line_search # resume from the line search \n", - "! seisflows par stop_after finalize # We don't want to run the clean() argument so that we can explore the dir" + "# The `export_traces` parameter tells SeisFlows to save synthetics after each round of forward simulations\n", + "! seisflows par export_traces " ] }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "2022-04-29 12:42:40 | copying par/log file to: /home/bchow/Work/work/sf3_specfem2d_example/logs/output_sf3_003.txt\n", - "2022-04-29 12:42:40 | copying par/log file to: /home/bchow/Work/work/sf3_specfem2d_example/logs/parameters_003.yaml\n", - "2022-04-29 12:42:40 | exporting current working environment to disk\n", - "2022-04-29 12:42:42 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " WORKFLOW WILL RESUME FROM FUNC: 'line_search' \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:42:42 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " WORKFLOW WILL STOP AFTER FUNC: 'finalize' \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:42:42 | \n", - "================================================================================\n", - " STARTING INVERSION WORKFLOW \n", - "================================================================================\n", - "2022-04-29 12:42:42 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " ITERATION 1 / 1 \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:42:42 | \n", - "================================================================================\n", - " CONDUCTING LINE SEARCH (i01s00) \n", - "================================================================================\n", - "2022-04-29 12:42:42 | max step length safeguard is: 5.26E+10\n", - "2022-04-29 12:42:42 | \n", - "EVALUATE BRACKETING LINE SEARCH\n", - "--------------------------------------------------------------------------------\n", - "2022-04-29 12:42:42 | step length(s) = 0.00E+00\n", - "2022-04-29 12:42:42 | misfit val(s) = 1.75E-03\n", - "2022-04-29 12:42:42 | first iteration, guessing trial step\n", - "2022-04-29 12:42:42 | initial step length safegaurd, setting manual step length\n", - "2022-04-29 12:42:42 | manually set initial step length: 5.26E+09\n", - "2022-04-29 12:42:42 | checking poissons ratio for: 'm_try.npy'\n", - "2022-04-29 12:42:42 | model parameters (m_try.npy i01s00):\n", - "2022-04-29 12:42:42 | 5800.00 <= vp <= 5800.00\n", - "2022-04-29 12:42:42 | 3278.69 <= vs <= 3790.00\n", - "2022-04-29 12:42:42 | 0.13 <= pr <= 0.27\n", - "2022-04-29 12:42:42 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " TRIAL STEP COUNT: i01s01 \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:42:42 | \n", - "EVALUATE OBJECTIVE FUNCTION\n", - "--------------------------------------------------------------------------------\n", - "2022-04-29 12:42:42 | saving model 'm_try.npy' to:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/scratch/scratch/model\n", - "2022-04-29 12:42:42 | evaluating objective function 1 times on system...\n", - "2022-04-29 12:42:42 | checkpointing working environment to disk\n", - "2022-04-29 12:42:44 | exporting current working environment to disk\n", - "2022-04-29 12:42:44 | running task solver.eval_func 1 times\n", - "2022-04-29 12:42:44 | running forward simulations\n", - "2022-04-29 12:42:49 | calling preprocess.prepare_eval_grad()\n", - "2022-04-29 12:42:49 | preparing files for gradient evaluation\n", - "2022-04-29 12:42:50 | exporting residuals to:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/scratch/scratch\n", - "2022-04-29 12:42:50 | summing residuals with preprocess module\n", - "2022-04-29 12:42:50 | saving misfit 9.850E-04 to tag 'f_try.txt'\n", - "2022-04-29 12:42:50 | \n", - "EVALUATE BRACKETING LINE SEARCH\n", - "--------------------------------------------------------------------------------\n", - "2022-04-29 12:42:50 | step length(s) = 0.00E+00, 5.26E+09\n", - "2022-04-29 12:42:50 | misfit val(s) = 1.75E-03, 9.85E-04\n", - "2022-04-29 12:42:50 | misfit not bracketed, increasing step length\n", - "2022-04-29 12:42:50 | checking poissons ratio for: 'm_try.npy'\n", - "2022-04-29 12:42:50 | model parameters (m_try.npy i01s01):\n", - "2022-04-29 12:42:50 | 5800.00 <= vp <= 5800.00\n", - "2022-04-29 12:42:50 | 3141.92 <= vs <= 3969.23\n", - "2022-04-29 12:42:50 | 0.06 <= pr <= 0.29\n", - "2022-04-29 12:42:50 | retrying with new trial step\n", - "2022-04-29 12:42:50 | \n", - "////////////////////////////////////////////////////////////////////////////////\n", - " TRIAL STEP COUNT: i01s02 \n", - "////////////////////////////////////////////////////////////////////////////////\n", - "2022-04-29 12:42:50 | \n", - "EVALUATE OBJECTIVE FUNCTION\n", - "--------------------------------------------------------------------------------\n", - "2022-04-29 12:42:50 | saving model 'm_try.npy' to:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/scratch/scratch/model\n", - "2022-04-29 12:42:51 | evaluating objective function 1 times on system...\n", - "2022-04-29 12:42:51 | checkpointing working environment to disk\n", - "2022-04-29 12:42:52 | exporting current working environment to disk\n", - "2022-04-29 12:42:53 | running task solver.eval_func 1 times\n", - "2022-04-29 12:42:53 | running forward simulations\n", - "2022-04-29 12:42:59 | calling preprocess.prepare_eval_grad()\n", - "2022-04-29 12:42:59 | preparing files for gradient evaluation\n", - "2022-04-29 12:42:59 | exporting residuals to:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/scratch/scratch\n", - "2022-04-29 12:43:00 | summing residuals with preprocess module\n", - "2022-04-29 12:43:00 | saving misfit 1.227E-03 to tag 'f_try.txt'\n", - "2022-04-29 12:43:00 | \n", - "EVALUATE BRACKETING LINE SEARCH\n", - "--------------------------------------------------------------------------------\n", - "2022-04-29 12:43:00 | step length(s) = 0.00E+00, 5.26E+09, 8.51E+09\n", - "2022-04-29 12:43:00 | misfit val(s) = 1.75E-03, 9.85E-04, 1.23E-03\n", - "2022-04-29 12:43:00 | bracket okay, step length reasonable, pass\n", - "2022-04-29 12:43:00 | checking poissons ratio for: 'm_try.npy'\n", - "2022-04-29 12:43:00 | model parameters (m_try.npy i01s02):\n", - "2022-04-29 12:43:00 | 5800.00 <= vp <= 5800.00\n", - "2022-04-29 12:43:00 | 3278.69 <= vs <= 3790.00\n", - "2022-04-29 12:43:00 | 0.13 <= pr <= 0.27\n", - "2022-04-29 12:43:00 | trial step successful\n", - "2022-04-29 12:43:00 | \n", - "FINALIZING LINE SEARCH\n", - "--------------------------------------------------------------------------------\n", - "2022-04-29 12:43:00 | shifting current model (new) to previous model (old)\n", - "2022-04-29 12:43:00 | setting accepted line search model as current model\n", - "2022-04-29 12:43:00 | current misfit is f_new.txt=9.850E-04\n", - "2022-04-29 12:43:00 | writing optimization stats to: stats\n", - "2022-04-29 12:43:00 | resetting line search step count to 0\n", - "2022-04-29 12:43:00 | \n", - "================================================================================\n", - " FINALIZING ITERATION 1 \n", - "================================================================================\n", - "2022-04-29 12:43:00 | exporting current working environment to disk\n", - "2022-04-29 12:43:01 | saving model 'm_new.npy' to path:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/output/model_0001\n", - "2022-04-29 12:43:02 | saving gradient to path:\n", - "/home/bchow/Work/work/sf3_specfem2d_example/output/gradient_0001\n", - "2022-04-29 12:43:02 | \n", - "================================================================================\n", - " FINISHED FLOW EXECUTION \n", - "================================================================================\n", - "2022-04-29 12:43:02 | \n", - "================================================================================\n", - " FINISHED INVERSION WORKFLOW \n", - "================================================================================\n" + "MODEL_INIT solver\r\n" ] } ], "source": [ - "! seisflows resume -f" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "From the log statements above, we can see that the SeisFlows3 line search required 2 trial steps, where it modified values of Vs until satisfactory reduction in the objective function was met. This was the final step in the iteration, and so the finalization step made last-minute preparations for a subsequent iteration. " + "# Exported traces will be stored in the `output` directory\n", + "! ls output" ] }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "alpha.npy f_old.txt g_old.npy m_new.npy p_old.npy\r\n", - "f_new.txt f_try.txt LBFGS\t m_old.npy\r\n" + "001 002 003 004 005 006 007 008\t009 010\n", + "\n", + "AA.S000000.BXY.semd AA.S000009.BXY.semd AA.S000018.BXY.semd\n", + "AA.S000001.BXY.semd AA.S000010.BXY.semd AA.S000019.BXY.semd\n", + "AA.S000002.BXY.semd AA.S000011.BXY.semd AA.S000020.BXY.semd\n", + "AA.S000003.BXY.semd AA.S000012.BXY.semd AA.S000021.BXY.semd\n", + "AA.S000004.BXY.semd AA.S000013.BXY.semd AA.S000022.BXY.semd\n", + "AA.S000005.BXY.semd AA.S000014.BXY.semd AA.S000023.BXY.semd\n", + "AA.S000006.BXY.semd AA.S000015.BXY.semd AA.S000024.BXY.semd\n", + "AA.S000007.BXY.semd AA.S000016.BXY.semd\n", + "AA.S000008.BXY.semd AA.S000017.BXY.semd\n" ] } ], "source": [ - "# We can see that we have 'new' and 'old' values for each of the optimization values,\n", - "# representing the previous model (M00) and the current model (M01).\n", - "! ls scratch/optimize" + "# Synthetics will be stored on a per-event basis, and in the format that the external solver created them\n", + "! ls output/solver/\n", + "! echo\n", + "! ls output/solver/001/syn" ] }, { "cell_type": "code", - "execution_count": 99, - "metadata": {}, + "execution_count": 24, + "metadata": { + "scrolled": true + }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "factor.txt\t line_search.txt slope.txt\ttheta.txt\r\n", - "gradient_norm_L1.txt misfit.txt step_count.txt\r\n", - "gradient_norm_L2.txt restarted.txt step_length.txt\r\n" - ] + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAD6CAYAAABZPSO8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLSUlEQVR4nO3deVyU1eI/8A/rsAwzA4gsIgiIKIqokZpKWrnvejVLSTKtrOza9WZpG6aGdCuzbrmbpqJmN7fUTDOV0twyAcEVUQnEMGCGYWc4vz/88XwZGYZFGEb8vF+veck85zxnzvNwhPlwzvOMhRBCgIiIiIiIyAQsm7oDRERERET04GAAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAISIiIiIik2EAIXpARUVFITg4GJaWltiyZYteWUFBAV588UW0bNkS7u7u+Pjjj/XKNRoNpk6dChcXF6hUKkycOFEqu3btGgYNGgSlUomgoCAcOHCg2j6UlZXhH//4B1q1agULCwtkZmbqlc+aNQv+/v5wcnJCWFgY4uLiqm1Lq9WiT58+cHV1hbOzM5544glcuHBBKl+6dCm6dOkCa2trxMTESNujo6Mhl8shl8shk8lgY2MjPZ8+fTp+++03PPbYY3B2doanpydmzJiBkpISaf8XXngBnp6eUCgUCAkJwe7du6vt47p162BtbS21L5fLcePGDan8m2++QWBgIORyOUaOHIns7Oxq26rueABg9+7deOSRR6BUKuHt7Y3333+/2nbuxa1btzB8+HC4ubnBzs6uSvnZs2fRq1cvODk5oWvXrvjjjz+ksunTp+udBxsbG4wYMUIqP3XqFEJDQ+Hg4IC+ffvi+vXrRvsSExMDNzc3uLi44I033oAQAkDNY6yh2urYsaN0LJaWlrC3t5ee//LLLygvL8drr70GlUoFd3d3fPrpp3qv+cMPP6Bt27ZwdHTEqFGjkJOTU23/srKyMGzYMDg4OCAoKAgHDx6sUqesrAwhISFo3759te3UdG6MjbG73b59G08++SRcXFzg4+OD2NhYg/WmT59e6+8DETVjgogeSBs2bBD7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qthW3f8TInoANMml70TU5CIjIwUAvUfFnXt+/vln4e3tLezt7UXXrl1FXFyc3r7x8fEiLCxMODo6ii5duogjR45IZR999JFwcXERcrlcDB8+XNy4ccNoP3x9fav0owIAIZPJhKOjo/TYuHGjwXZOnTolunTpIuRyuXBxcRGDBg0S8fHxUnlUVFSV11m7dq1eG4bugjVv3jxhYWGh14fg4GAhxJ27Mz322GNCqVQKhUIhunXrJrZt2ybtGxcXJxwdHaXns2bNEm5ubsLR0VG0a9dOfP7553qv1b17d+Ho6Cg8PDzEvHnzRHl5uVT2wQcf6N0pydjxPPvss8LS0lKvz5X3bUh398HX11cqe+2116RzExERIXJycvT23b17t/D29hY6na5KuydPnhQhISHCzs5OhIeHV3sHrArR0dHC1dVVqFQqMXv2bL1zZ2yMNUZbhu6CpdPpxMyZM4VSqRRubm7ik08+0Svfs2eP8Pf3F/b29mLEiBF6t9V98cUXxYsvvig9/+uvv8SQIUOEvb29CAwMFAcOHDB4HIcOHapyF6zg4GC9/0PGjsfYGLt7bMfGxoqWLVsKBwcH8eijj4rExESDfRKidncjI6LmzUKISmsniIiIiIiIGhGXYBERERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkckwgBARERERkclYN3UH7mfl5eXIyMiAk5MTLCwsmro7RERERPSAE0IgLy8PXl5esLQ0z7kGBpB7kJGRgdatWzd1N4iIiIiI9KSlpcHb27upu2EQA8g9cHJyAnDnG6xQKJq4N0RERET0oNNoNGjdurX0PtUcMYDcg4plVwqFggGEiIiIiMyGOV8ewABiQomJifj5559x69YtlJeXN3V36C5WVlbw9fXFwIED0aZNm6buDhEREVGzxABiImvWrMGyZcvg6uoKf39/WFlZNXWX6C6lpaX49ddfsXr1asTExODxxx9v6i4RERERNTsMICZw7do1LFu2DFOnTsWLL75otnckIKCkpATvvvsu5s2bh969e0MmkzV1l4iIiIiaFb4TNoG4uDjY29tj6tSpDB9mztbWFtOnT0dBQQF+//33pu4ONWPr1q1Dz549kZyc3NRdISIiMim+GzaBrKwseHh4wNbWtqm7QrXg6+sLALh9+3YT94SaK61Wi5kzZ+LEiRN47733mro7REREJsUAYgJCCM583Ecqvle8UQA1lp9++gkajQbTp0/Hnj17UFxc3NRdIiIiMhm+KzYDAQEB6NGjh8Gy5557DnZ2dsjNza12fyEEFixYAF9fX8jlcvj6+uK1116TyrOysjBs2DA4ODggKCgIBw8e1Ns/JiYGbm5ucHFxwRtvvAEhhFR26tQphIaGwsHBAX379sX169elssLCQkRERMDJyQk+Pj7YvHmzXrvr1q2Dt7c3FAoFpkyZgpKSEqksJSUFvXv3hoODA7p164b4+PjanCpcu3YNFhYWkMvlkMvlaNWqFd5//32p/MSJE3Bzc0NWVpa0bdmyZXjooYeQnp4OV1dXnDlzRirT6XTo2rUrvvrqq1q9PlFDOHToEPz8/PD888+jqKgIp06dauouERERmQwDSBM7duwYsrKycObMGVy5ckWvrKioCN999x0cHBzwv//9r9o2vv76a2zbtg1xcXHQarX45Zdf8NBDD0nlr7zyCry8vHD79m18+OGHGD9+PHJycgAAe/fuxbJly3DixAkkJSVh9+7dWLt2LQCguLgYY8eOxcyZM5GdnY2ePXvimWeekdqNiopCdnY20tPTsWXLFrz00ku4dOkSgDu3HJ41axZ27NiBtLQ0XLt2DQsXLpT2ffrppzFw4EBkZ2fjueeew5gxY1BWVlarcyaTyaDVaqHVavHrr79i1apV2L9/PwCgR48eePLJJ/Gvf/0LAHDz5k288847WLlyJVq1aoUFCxbghRdegE6nAwB89tlnUCqVmDJlSq1em6ghHDt2DOHh4QgJCYGNjU2tAzgREVFzwADSxGJjYzF27Fg8/vjjiI2N1Sv7/vvv4eLigtdff71KWWWnTp3CsGHD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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# The stats/ directory contains text files describing the optimization/line search\n", - "! ls stats" + "# The `plotst` function allows us to quickly visualize output seismograms\n", + "! seisflows plotst output/solver/001/syn/AA.S000000.BXY.semd --save AA.S000000.BXY.semd.png\n", + "Image(filename=\"AA.S000000.BXY.semd.png\")" ] }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 25, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " ITER STEPLEN MISFIT\r\n", - "========== ========== ==========\r\n", - " 1 0.000e+00 1.748e-03\r\n", - " 5.261e+09 9.850e-04\r\n", - " 8.512e+09 1.227e-03\r\n" - ] + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAALuCAYAAABW5XIYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC4x0lEQVR4nOzdeVxUZf8//tewMwwzDIiCIoiIKIiYeKtpZpZLZppaahnqrVlatpp1Z3dFqbnclnf1KSzb7KvkkpmimUummZqKmchiLgiKCAoMzDAsAwzX7w9/nNtpAIfFGUZez8fjPGTOdc113mdEOS+us8iEEAJERERERERW4GDrAoiIiIiIqPVgACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACEiIiIiIqthACFqpWJjYxEeHg4HBwesX7/epK20tBSzZs1C27Zt0a5dO7z33nsm7TqdDk888QS8vb3h5eWFyZMnS22ZmZkYMWIEVCoVwsLCsGfPnjprqKqqwsMPP4wOHTpAJpMhNzfXpH3u3Lno3LkzPD090adPHxw4cKDOsfR6Pe666y74+PhArVbjvvvuw19//SW1x8XFoVevXnBycsLSpUul9YsXL4ZCoYBCoYCrqyucnZ2l17Nnz8bvv/+OIUOGQK1Ww9/fH88++ywqKiqk9z/11FPw9/eHUqlEZGQktm/fXmeNq1evhpOTkzS+QqHApUuXpPYNGzYgNDQUCoUCY8aMgUajqXOsuvYHALZv344777wTKpUKAQEBeOedd+ocpymuXr2KBx98EL6+vnBzczNrP3nyJAYMGABPT0/ccccd+PPPP6W22bNnm3wOzs7OGD16tNSemJiIqKgoyOVyDB48GBcvXqy3lqVLl8LX1xfe3t549dVXIYQAcPPvseYaKyIiQtoXBwcHuLu7S69/++03VFdX48UXX4SXlxfatWuH//73vybb/Omnn9ClSxd4eHjgoYceQmFhYZ315eXlYdSoUZDL5QgLC8PevXvN+lRVVSEyMhLdunWrc5ybfTb1fY/9XX5+PiZOnAhvb28EBgYiPj6+1n6zZ8+2+O+BiG5jgohapTVr1ojdu3eLfv36iXXr1pm0vf7662LYsGFCq9WKS5cuiS5duoidO3dK7ePHjxfPP/+8KCoqEhUVFeLEiRNS24ABA8S///1vUVlZKX799Vfh7e0t8vLyaq2hsrJSfPDBB+L3338XAEROTo5J+9tvvy3OnTsnjEaj2Lhxo1Cr1UKn09U6VkVFhUhLSxNGo1EYjUbx8ccfi759+0rtP/zwg9i2bZsYN26cWLJkSa1jLFmyREybNs1k3U8//SR++OEHodfrRX5+vhg0aJBYsGCB1H769GlRXl4uhBDi2LFjQqVSCY1GU+v4X3/9tRgxYkStbWlpaUKlUonExERRUVEhnn32WfHoo4/W2vdm+/Ptt9+Kn3/+WZSXl4uLFy+Kbt26if/3//5fnWM11rVr18TKlStFQkKCcHV1NWmrqKgQnTp1Ep999pmoqqoS69evF0FBQcJgMNQ61h133CG++OILIYQQ5eXlIiAgQHz55ZeirKxMvPrqq2LQoEF11vHjjz+KwMBAkZ6eLq5cuSK6d+8uvvzySyHEzb/HbsVYYWFhYt++fSbrPvnkE3HHHXeIq1evir/++kv4+fmJvXv3CiGEuHr1qvDy8hI7duwQer1ePP7442LKlCl11jhhwgQxc+ZMUVJSIn744QehVqvNvuf++9//ioEDB4qwsLA6x7nZ/ljyb6bG5MmTxdSpU0V5eblISUkRbdu2FampqSZ9/vjjDzFo0CCL/h6I6PbGAELUyg0ePNgsgPTu3Vvs2LFDer148WIxefJkIYQQKSkpIigoSFRVVZmNpdPphEwmEyUlJdK64cOHi1WrVt20DksOStq3by+OHz9+07GqqqpEXFyc8PX1NWubNm1agwLI361atUo8+OCDtbYlJiYKV1dXswOvGvUFkI8++khMnDhRen3lyhXh7Ows9Hp9vfXUtz81Xn/9dfHss8/W26cpMjIyzALIqVOnRNu2bU3Wde3aVezevdvs/WlpacLV1VUUFRUJIYTYuXOn6Natm9Su1+uFu7u7yMzMrHX7jz76qFi6dKn0+ssvvxRDhgwx62fJ91hzjFVbAOnfv79Yv3699PrNN98U06dPF0II8emnn4r7779fajt//rxwc3OTgu2NiouLhYuLi7hy5Yq0btCgQeKbb76RXufm5oru3buL7du31xtALN0fS77HvL29RVpamvT6qaeeEq+//rr0urq6WgwcOFAcP36cAYSIBE/BIqJaif//tJOar1NTUwEAx48fR9euXRETEwMfHx/07dsXv/32m0XvbYrMzExoNBp06dKl3n49e/aEm5sbnn32WfzrX/9q8nb/7vDhw4iIiDBZ98wzz8Dd3R3/+Mc/cP/99yM8PBwAcPDgQXh5eZn0PXToEHx8fBAeHo5PP/3UpO3vn1tlZSXOnTsH4PppQQ8++GCz1WwLdX0vxMfH48EHH4RKpQIApKWlITIyUmr38PBASEgI0tLSah337/2joqIa/T3XnGNZOu7f20JCQuDk5IQLFy4AuP799cwzzwAAzp07B5VKBX9//zpr/Ne//oXXX38dHh4eZnX07NkT3377bZP3pzb1/bv/5ptv0K1bN0RHR9+SbRORfWEAISIzw4cPxwcffICioiJkZmZi9erVKC0tBQBkZ2djz549GDp0KHJzc/Haa69h7Nix0Gg08PT0RL9+/bB48WJUVFRg//79+PXXX6X3NlZlZSWmTZuGV155RTpIrcupU6eg0+nw6aefonv37k3a7t/99NNP+Omnn/DSSy+ZrI+Li4Ner8eePXswePBgaf1dd92FoqIi6fXgwYORnJyMvLw8fP3111iwYAF++OEHAMB9992HXbt24dixYzAYDFiyZAlkMpn02b322mv1Xl9Sl88++ww5OTmYNm1aI/a48cLCwuDm5oZPP/0UlZWVWLduHc6fP1/r98K3336Lxx9/XHqt1+uhVCpN+iiVSuj1+lq39ff+9fW9meYcy9Jxb7a/cXFxiIuLs6jv77//jrNnz5p8njc6deqUyTVbzWX48OFYtmwZysrKkJycjM2bN0t/11qtFosXL8bixYubfbtEZJ8YQIjIzBtvvIFOnTqhe/fuGDlyJCZMmIAOHToAANzd3REcHIwnnngCzs7OGD9+PEJCQvD7778DuP7b7OPHj6N9+/ZYtGgRHnnkEem9N16oe+PF1/URQuCf//wn2rZti7fffltaX99Y7u7umDlzJmbMmFHvxbwNkZiYiOnTp2PLli1o166dWbujoyOGDh2KvXv3YteuXbWOERwcjE6dOsHBwQH9+vXD888/LwWQ8PBwrFy5EtOmTUPHjh3h5+cHT09P6bNrjO3bt2PBggXYvn073N3db9r/t99+kz7TkSNHNnq7AODi4oIffvgBa9asgZ+fH7Zs2YKhQ4ea7c/hw4dRWFiIBx54QFqnUCig0+lM+ul0OumC7r/X+Pf+NX1vpjnHupn6xq1vf282zo19q6ur8fzzz+PDDz+ETCZrcs0N8dFHH6G0tBRBQUGYMWMGHnvsMenv+u2335ZuakFEBABOti6AiFoeDw8PrFq1Snr9xhtvoE+fPgCAHj16mPW/8dSLzp07mxyA33XXXdJvXBtzKstzzz2HK1euYOfOnXBw+N/vTG42lhACer0eOTk5UKvVDd7ujU6fPo0xY8bgq6++Qv/+/evtW11djfT0dIvGvXF/AGDy5MnSZ3X+/Hn83//9HwICAhpV84EDB/DEE09gx44dNz1trcagQYOa5bf9NXr37o1Dhw4BAIxGI0JCQsxOwYmPj8cjjzwCV1dXaV14eLjJ919JSQnS09MRHh6OoKAgsxrDw8ORnJwshZikpCSLTjmrbX8bO9bN1Ixbc3rejeOGh4djy5YtUt8LFy6gqqoKnTt3NhsnNDQUWq0Wubm58PPzk8aaOXMmdDodTpw4Id1NrKKiAjqdDn5+frhw4QLkcnmT96Muvr6++O6776TXMTExuPPOOwEA+/btQ3Z2NpYvXy6115wKNnTo0FtWExG1XJwBIWqlKisrUV5ejurqapOvAeDy5cvIzc2F0WjEnj178PXXX0unHd1zzz0QQuCbb76B0WhEQkICMjIypION06dPo6SkBGVlZfjwww9RUlJi8tvtvzMYDCgvLzf7Grh+q+BDhw5h69atJgeotUlKSsKBAwdQUVGBkpISvP766/Dy8kJoaCiA67ccLS8vh9FoNPn6ZrKysjBixAgsXbrUbD/0ej3i4+Oh1+tRVVWF77//Hvv27cOgQYNqHWvnzp3Iy8sDAJw4cQIfffSRyXUdJ06cQHV1NbKzszFr1iy89tprcHR0rHWs+vbn5MmTeOSRRxAfH3/Lz7kvLy+HwWAw+xoAkpOTYTAYUFxcjNdeew29evUyCbBVVVXYuHGj2elC99xzD/R6PVavXg2DwYBFixahT58+CAoKqrWGmJgYrFy5EhkZGcjNzcWKFSsQExMjtdf3PXYrx/r7uMuXL0deXh7Onj2LL774QtrvcePG4ciRI9i1axdKS0sRGxuLCRMm1Po9X3OL5tjYWJSVlSEhIQEpKSkYPXo0VCoVsrOzcfLkSZw8eRJffPEFgoODcfLkyTpnwOrbn4b8m0lPT0dhYSEqKyuxfv16/Pbbb5g+fToAYO/evUhOTpbqqllX178TImoFbHLpOxHZ3LRp0wQAk6Xmzj2//PKLCAgIEO7u7uKOO+4QBw4cMHlvUlKS6NOnj/Dw8BC9evUSv/76q9S2fPly4e3tLRQKhXjwwQfFpUuX6q0jKCjIrI4aAISrq6vw8PCQlrVr19Y6TmJioujVq5dQKBTC29tbjBgxQiQlJUntsbGxZtv5+uuvTcao7S5Yb7/9tpDJZCY1hIeHCyGu351pyJAhQqVSCaVSKXr37i02b94svffAgQPCw8NDej137lzh6+srPDw8RNeuXcVHH31ksq2+ffsKDw8P4efnJ95++21RXV0ttb377rsmd0qqb3/++c9/CgcHB5Oab3xvc/p7DUFBQVLbiy++KH02MTExorCw0OS927dvFwEBAcJoNJqNe+zYMREZGSnc3NzEoEGD6rwDVo3FixcLHx8f4eXlJV555RWTz66+77FbMVZtd8EyGo3ihRdeECqVSvj6+or333/fpP3HH38UnTt3Fu7u7mL06NEmt9WdNWuWmDVrlvT62rVrYuTIkcLd3V2EhoaKPXv21Lof+/btM7sLVnh4uMm/ofr2p77vsb9/b8fHx4u2bdsKuVwu7r77bpGcnFxrTUJYdjcyIrq9yYS44dwJIiIiIiKiW4inYBERERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdUwgBARERERkdU42boAe1ZdXY0rV67A09MTMpnM1uUQERERUSsnhEBxcTHat28PB4eWOdfAANIEV65cQceOHW1dBhERERGRiaysLAQEBNi6jFoxgDSBp6cngOt/wUql0sbVEBER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qMWoOU5tiXgROhERERERWQ0DCBERERERWQ0DCBERERERWQ2vAbGi5ORk/PLLL7h69Sqqq6ttXQ79jaOjI4KCgjB8+HB06tTJ1uUQERER3ZYYQKzkyy+/xMqVK+Hj44POnTu36AuDWqvKykocPHgQX3zxBZYuXYp7773X1iURERER3XYYQKwgMzMTK1euxBNPPIFZs2bBwYFnvrVUFRUVePPNN/H2229j4MCBcHV1tXVJRERERLcVHglbwYEDB+Du7o4nnniC4aOFc3FxwezZs1FaWoo//vjD1uUQERER3XZ4NGwFeXl58PPzg4uLi61LIQsEBQUBAPLz821cCREREdHthwHECoQQnPmwIzV/V7xRABEREVHz41FxCxASEoJ+/frV2jZjxgy4ubmhqKiozvcLIbBw4UIEBQVBoVAgKCgIL774otSel5eHUaNGQS6XIywsDHv37jV5/9KlS+Hr6wtvb2+8+uqrEEJIbYmJiYiKioJcLsfgwYNx8eJFqa2srAwxMTHw9PREYGAg1q1bZzLu6tWrERAQAKVSienTp6OiogIAcO3aNUycOBHt2rWDt7c3Ro8ejUuXLln0WWVmZkImk0GhUEChUKBDhw545513pPajR4/C19cXeXl50rqVK1ciOjoa2dnZ8PHxwYkTJ6Q2o9GIO+64A1999ZVF2yciIiKipmEAsbHDhw8jLy8PJ06cwPnz503aysvL8f3330Mul2PTpk11jvHNN99g8+bNOHDgAPR6PX777TdER0dL7XPmzEH79u2Rn5+PZcuWYcKECSgsLAQA7NixAytXrsTRo0eRmpqK7du34+uvvwYAGAwGjB8/Hi+88AI0Gg369++PKVOmSOPGxsZCo9EgOzsb69evx9NPP42zZ88CuH7L4blz52LLli3IyspCZmYmFi1aBAAoKSnBXXfdhdTUVOTm5qJLly6YPn26xZ+Zq6sr9Ho99Ho9Dh48iM8//xy7d+8GAPTr1w8TJ07ESy+9BADIycnBG2+8gVWrVqFDhw5YuHAhnnrqKRiNRgDAhx9+CJVK1aDtExEREVETCGo0rVYrAAitVltvv+XLl4uJEyfW2vbMM8+IadOmieHDh4u3337bpG3jxo2iU6dO4t133xX33HNPneM/88wz4t///netbcXFxcLFxUVcuXJFWjdo0CDxzTffCCGEePTRR8XSpUulti+/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k5566in17dtX4eHhCgoKkt1u1+WXX65HHnlEW7ZsadAacPYLMH4Ya10ul6KiorRv3z61adNGknTVVVdp/PjxGjt2rEfbNm3a6IMPPnCfZzp27Fh16tRJf/3rXzVlyhTl5eXppZdekiR98cUXGj9+vPbu3VujOpxOp/u3WzabrR73EADQ0IwxWrNmjSZNmqTs7Gx98803SkxMrNdtXHHFFUpMTNSCBQvqtV9/sHv3bnXp0kWzZ8/Www8/XGGb48ePq3fv3iosLNR///tfWSyWBq2ptLRUU6ZM0f/+7//qT3/6k55++ukGuYA8NzdXc+fO1XPPPafAwEBNmjRJt9xyi7p161bp9kpLS3XgwAH99NNP5V6ZmZnudiEhIWrTpo0SExPVvXt39ejRQxdffLE6deqkwMC6/V45LS1NX3zxhVavXq01a9bo6NGjstlsuvbaa93PxHE4HNqyZYvWrl2rw4cPq2fPnrrvvvt00003qWnTpnXaLhqGP3w/9csA8sMPP2jgwIE6fPiw+7N7771XFotFc+bMcX+Wm5uryMhIHT9+3P2X2ty5c7Vp0ya9/fbbuuGGGzRw4ED98Y9/lCQdPXpULVq00IkTJxQaGlpuu4WFhSosLHS/dzqdateunZ577rkK21elroed9VjPG+v5Ypusx3reWE/6dcZj//792rhxozIzM3XFFVdo8eLF6tSpU537rMzAgQPVvHlzvfvuu/Xed2N366236uuvv9bu3bur/Ddy586duuSSS/SHP/xBf//732u9HWOMVqxYoYULFyo1NVURERHq27evfvOb3+jKK690b3vXrl269957tXbtWs2dO1cPPPBAg9+9Kjs7W3PmzNH8+fPldDrVsmVLde3aVW3atJHFYtGJEyeUm5urtLQ0paamqqCgQNKvISM+Pl7x8fG68MIL1b59e1ksFhljdPToUR04cEDbt2/X1q1b3decWK1WXXTRRbr44ot10UUXKTY2Vi1btpTdbldgYKACAgLkcrl09OhRZWdna9euXdqxY4c2btyo1NRUBQQE6NJLL9XAgQM1aNAg9erVS02aNCm3T0VFRfrkk080b948rVmzRtHR0br77rs1YcIEtW7dut6OXXFxsbKyspSTkyOXy+WeATpx4oSMMQoICHD/+QUEBCgwMNC9nxX9t+wVFBTk8QoODnb/fGqAO3VsGGNUUlKi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GGM0ceJEFRUVadasWWe6G24tW7bUe++9p0OHDunw4cPq3LnzOXELXeBcQAABAKCBhIeHS1KD34r3yy+/1F133aW9e/dq/PjxeuKJJxQTE1Mvfbdq1Upr167Vfffdp9///vfasmWL5syZo2bNmqm0tFSPP/64li9frrfffrvetnmq1q1b1+sTtgH4HgEEAIAGUhZA6nJHqZooKirSo48+qmeffVa9e/fW+++/r4SEhHrfTtOmTfXyyy+rR48euu+++7RixQoNGDBA27dv16ZNm/T000/rpptuqvftAjg7EUAAAGggzZs3V3BwsI4ePVrvfR8+fFijRo3St99+q7lz5+qBBx5QYGDD3l3/7rvv1jXXXKNnn31W33//vWJiYrR27Vpde+21DbpdAGcXAggAAA0kICBAUVFRysnJqdd+09PT9Zvf/EZOp1Pr16+v9OLwhhAfH69XXnnFa9sDcPYhgAAA0ICioqLqdQYkIyNDV111lSTpm2++UceOHeutbwDwBgIIAAANqD4DiMvl0vXXX6/i4mJt2LBB7dq1q5d+AcCbCCAAADSgyMjIegkgxhiNHz9ee/bs0TfffEP4AOC3GvZqNQAAznH1NQPy+uuv6+2339Zrr72m7t2710NlAOAbBBAAABpQfVyEfujQId1///0aN24ct7sF4PcIIAAANKD6mAGZMmWKgoODNXfu3HqqCgB8h2tAAABoQFFRUcrLy1NJSYmCgoJqvf5///tfLVy4UC+99JKioqIaoEIA8C5mQAAAaEBRUVEyxtT5aegzZsxQp06dNH78+HquDAB8gwACAEADKpu1qMtpWDt27NCKFSv06KOPKjiYkxYAnB0IIAAANKDIyEhJdQsgc+fOVWxsrMaMGVPfZQGAzxBAAABoQGUzILW9E5bT6dSyZcs0YcIENW3atCFKAwCfIIAAANCA6noK1tKlS1VQUKA77rijIcoCAJ8hgAAA0ICaNm0qq9Va6wDy2muvaejQoWrbtm0DVQYAvsEVbQAANLDaPgtkz549+u677/Tuu+82YFUA4BvMgAAA0MBat26tw4cP17j9e++9J4vFosGDBzdgVQDgGwQQAAAaWHR0tLKysmrc/t1339WQIUNksVgasCoA8A0CCAAADaw2AWTfvn367rvvNGrUqAauCgB8wy8DyObNm9WjRw9ZLBb169dP+/fvr7Rtamqq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KmtijDQe3hgfycnJateunWw2mzp37qyFCxdWWRPjo/Hwxvgos2/fPoWGhrq/a1TmrB0fBuesxYsXm88//9z06tXLLF261P35X/7yF3PdddcZh8Nh0tLSTKdOncyqVasq7OP55583ffv2db+fPHmyGTx4sHE4HObf//63sdvtZteuXRWuW1BQYGJjY82CBQtMfn6+eeSRR8yVV17pXv7++++bjz76yIwcOdLMmjWryn2pj75mzZplxo0b5/HZoUOHTHh4uPn000+Ny+Uyt99+uxkzZox7+ejRo8348ePN8ePHzfvvv28iIiJMTk5Ohf1/8sknJi4uzqSmppqMjAzTpUsXs2DBghrVf7qqjvPWrVtNRESE2bx5s8nLyzP9+/c3TzzxRJXHz19UdryrOranq89xV92x7tmzp5k6darJz883L7zwgunQoYMpKiqqn4OBCnljjEydOtXs3r3blJSUmOXLl5uIiAjjdDor7Isx0rh4Y3z8/PPPxuVyuX9u06aN2b59e4V9MT4aF2+MjzIjRowwvXv3NhMmTKi0nrN5fBBAYPr16+cRQC655BLz6aefut/PnDnT3HbbbRWue/nll5uXX37Z/T46Otps3LjR/X7MmDHmySefrHDdVatWmQsvvND93uVymdDQULNv3z6PduPGjav2i2B99FVRAHn55ZfNoEGD3O/37NljmjVrZgoKCsyxY8dM06ZNTUZGhnv5lVdeaV5//fUK+7/lllvM7Nmz3e8XLFhgrr766lrVX6aq4/zoo4+aiRMnupetW7fOdOjQocJ+/ElVx7uqY3u6+hx3VR3rn376ydhsNlNYWOheHhcXZ7788ssa7C3qwttjpExMTIz57rvvKlzGGGk8fDE+fv75Z9O6dWvzySefVNgX46Px8Ob4WLVqlbnhhhtMcnJylQHkbB4fnIKFCplTphaNMUpJSSnXZs+ePfrxxx81evRoSVJubq6ysrLUrVs3d5sePXpUuK4k7dixw6NtWFiYOnbsqB07dtS63vrsq6p+O3bsqODgYO3du1e7d++W3W5XmzZt3MtP3d9vvvlG4eHhlfZ1atvq6p89e7auv/56SdUf54q288svvyg/P/+MjoWvVXW8qzq2ktS9e3e99dZbks5srKSlpSk8PFxpaWkV9nXqsd6xY4fi4+PVtGlTjzoq+/8BZ84XY2Tfvn3KyclRp06d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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# For example we can look at the step length chosen for the accepted trial step in the line search\n", - "! cat stats/line_search.txt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4. Conclusions\n", - "\n", - "We've now seen how SeisFlows3 runs an __Inversion__ workflow using the __Specfem2D__ solver on a __serial__ system (local workstation). More or less, this is all you need to run SeisFlows3 with any combination of modules. The specificities of a system or numerical solver are already handled internally by SeisFlows3, so if you want to use Specmfe3D_Cartesian as your solver, you would only need to run `seisflows par solver specfem3d` at the beginning of your workflow (you will also need to setup your Specfem3D models, similar to what we did for Specfem2D here). To run on a slurm system like Chinook, you can run `seisflows par system chinook`. " + "# `plotst` also takes wildcards to plot multiple synthetics in a single figure\n", + "! seisflows plotst output/solver/001/syn/AA.S00000[123].BXY.semd --save AA.S000001-3.BXY.semd.png\n", + "Image(filename=\"AA.S000001-3.BXY.semd.png\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -2226,7 +1177,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.7.12" } }, "nbformat": 4, diff --git a/docs/notebooks/working_directory.ipynb b/docs/notebooks/working_directory.ipynb index 57aa577e..521d84e8 100644 --- a/docs/notebooks/working_directory.ipynb +++ b/docs/notebooks/working_directory.ipynb @@ -4,28 +4,40 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Working Directory Structure\n", - "\n", - "SeisFlows3 hardcodes it's own working directory when executing a workflow. Below we explore the working directory set up by the SPECFEM2D-workstation example. Working directories may change slightly depending on the chosen workflow, but will more or less follow the following structure. The two specfem2d directories listed below are not part of the SeisFlows3 working directory." + "# Working Directory" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "SeisFlows sets it's own working directory when executing a workflow. Below we explore the working directory set up by the `SPECFEM2D-workstation example `__. Working directories may change slightly depending on the chosen workflow, but will more or less follow the same structure." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + ">__NOTE__: The two SPECFEM2D directories listed below (specfem2d/ & specfem2d_workdir/) are not part of a standard SeisFlows working directory." ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "/home/bchow/Work/official/workshop_pyatoa_sf3/ex1_specfem2d_workstation\n", - "logs\toutput_sf3.txt\t scratch\t stats\r\n", - "output\tparameters.yaml specfem2d_workdir\r\n" + "/home/bchow/Work/scratch\n", + "logs\tparameters.yaml sflog.txt specfem2d\r\n", + "output\tscratch\t\t sfstate.txt specfem2d_workdir\r\n" ] } ], "source": [ - "%cd ~/Work/official/workshop_pyatoa_sf3/ex1_specfem2d_workstation\n", + "%cd /home/bchow/Work/scratch\n", "! ls" ] }, @@ -35,19 +47,19 @@ "source": [ "----------------------\n", "## scratch/\n", - "The active working directory of SeisFlows3 where all of the heavy lifting takes place. Each module in the SeisFlows3 package may have it's own sub-directory where it stores temporary work data. Additionally, we have two eval*/ directories where objective function evaluation (evalfunc) and gradient evaluation (evalgrad) files are stored." + "The active working directory of SeisFlows where all of the heavy lifting takes place. Each module in the SeisFlows package may have it's own sub-directory where it stores temporary work data. Additionally, we have two eval*/ directories where objective function evaluation (eval_func) and gradient evaluation (eval_grad) files are stored." ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "evalfunc evalgrad optimize preprocess solver system\r\n" + "eval_func eval_grad optimize\tpreprocess solver system\r\n" ] } ], @@ -82,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -99,14 +111,16 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "bin DATA kernel_paths mesher.log OUTPUT_FILES SEM\tsolver.log traces\r\n" + "adj_solver.log\tcombine_vs.log\tfwd_solver.log\tSEM\r\n", + "bin\t\tDATA\t\tkernel_paths\ttraces\r\n", + "combine_vp.log\tfwd_mesher.log\tOUTPUT_FILES\r\n" ] } ], @@ -131,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -148,7 +162,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -165,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -219,15 +233,15 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "alpha.npy f_old.txt g_old.npy m_new.npy p_old.npy\r\n", - "f_new.txt f_try.txt LBFGS\t m_old.npy\r\n" + "alpha.txt\tf_new.txt f_try.txt m_new.npz output_optim.txt\r\n", + "checkpoint.npz\tf_old.txt g_old.npz m_old.npz p_old.npz\r\n" ] } ], @@ -237,34 +251,34 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[5800. 5800. 5800. ... 3499.77655379 3499.9021825\n", - " 3499.99078301]\n" + "[[3500.0027437 3499.99441921 3499.90777902 ... 3499.77655378\n", + " 3499.9021825 3499.99078301]]\n" ] } ], "source": [ "import numpy as np\n", - "m_new = np.load(\"scratch/optimize/m_new.npy\")\n", - "print(m_new)" + "m_new = np.load(\"scratch/optimize/m_new.npz\")\n", + "print(m_new[\"vs\"])" ] }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "2.591424e-03\r\n" + "8.645199999999999153e-04\r\n" ] } ], @@ -276,100 +290,121 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### evalfunc/ & evalgrad/\n", - "\n", - "Scratch directories containing objective function evaluation and gradient evaluation files. These include (1) the current **model** being used for misfit evaluation, and (2) **residuals** which define the misfit for each event. **evalgrad/** also contains **kernels** which define per-event kernels which are summed and manipulated with the postprocess module." + "The 'checkpoint.npz' file contains information about the state of the line search (controlled by the Optimization module). It is used to resume failed or stopped line searches with minimal redundant use of computational resources." ] }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "model residuals\n", - "\n", - "kernels model\tresiduals\n" + "['restarted', 'func_vals', 'step_lens', 'gtg', 'gtp', 'step_count']\n", + "step count: 0\n", + "step lengths: [0.00000000e+00 2.32268310e+09 3.75818023e+09 1.59087505e+09\n", + " 2.82031810e+09]\n", + "misfit: [0.00127902 0.00086452 0.00172904 0.00259356 0.00345808]\n" ] } ], "source": [ - "! ls scratch/evalfunc\n", - "! echo\n", - "! ls scratch/evalgrad" + "line_search = np.load(\"scratch/optimize/checkpoint.npz\")\n", + "\n", + "print(vars(line_search)[\"files\"])\n", + "\n", + "print(\"step count: \", line_search[\"step_count\"])\n", + "print(\"step lengths: \", line_search[\"step_lens\"])\n", + "print(\"misfit: \", line_search[\"func_vals\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### eval_func/ & eval_grad/\n", + "\n", + "Scratch directories containing objective function evaluation and gradient evaluation files. These include (1) the current **model** being used for misfit evaluation, and (2) a **residual** file which defines the misfit for each event. **eval_grad/** also contains **kernels** which define per-event kernels which are summed and manipulated with the postprocess module." ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "001 002 003\r\n" + "model residuals.txt\n", + "\n", + "gradient kernels misfit_kernel model residuals.txt\n" ] } ], "source": [ - "! ls scratch/evalgrad/residuals" + "! ls scratch/eval_func\n", + "! echo\n", + "! ls scratch/eval_grad" ] }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "2.413801941841247842e-02\r\n", - "2.413801941841247842e-02\r\n", - "2.413801941841247842e-02\r\n" + "2.41E-02\r\n", + "2.14E-02\r\n", + "1.55E-02\r\n" ] } ], "source": [ - "! cat scratch/evalgrad/residuals/001" + "! cat scratch/eval_grad/residuals.txt" ] }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "001 002 003 sum\r\n" + "001 002 003\r\n" ] } ], "source": [ - "! ls scratch/evalgrad/kernels" + "! ls scratch/eval_grad/kernels" ] }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "proc000000_vp_kernel.bin proc000000_vs_kernel.bin\r\n" + "proc000000_bulk_beta_kernel.bin proc000000_rhop_kernel.bin\r\n", + "proc000000_bulk_c_kernel.bin\t proc000000_vp_kernel.bin\r\n", + "proc000000_kappa_kernel.bin\t proc000000_vs_kernel.bin\r\n", + "proc000000_mu_kernel.bin\t proc000000_weights_kernel.bin\r\n", + "proc000000_rho_kernel.bin\r\n" ] } ], "source": [ - "! ls scratch/evalgrad/kernels/sum" + "! ls scratch/eval_grad/kernels/001" ] }, { @@ -378,17 +413,9 @@ "source": [ "### system & preprocess\n", "\n", - "These two directories are empty in our example problem, but are catch-all directories where module-specific files can be output. If you are extending SeisFlows3 with other base or subclasses, it is preferable to adhere to this structure where each module only interacts with it's own directory" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [], - "source": [ - "! ls scratch/system\n", - "! ls scratch/preprocess" + "These two directories are empty in our example problem, but are catch-all directories where module-specific files can be output. If you are extending SeisFlows with other base or subclasses, it is preferable to adhere to this structure where each module only interacts with it's own directory.\n", + "\n", + "When `Pyaflowa` is chosen as the preprocess module, it stores figures, log files, and data (in ASDFDataSets) within its scratch directory. It also specifies parameters for exporting these scratch files to disk for more permanent storage." ] }, { @@ -397,23 +424,19 @@ "source": [ "---------------------\n", "## output/\n", - "The current active state of SeisFlows3, containing pickle (.p) and JSON files which describe a Python environment of a current workflow. Additionally files to be permanently saved (e.g., models, graidents, traces) can be located here. These are tagged in ascending order, e.g., model_0001 refers to the updated model derived during the first iteration." + "Output files to be permanently saved (e.g., models, graidents, traces) can be located in this directory. These are tagged in ascending order. Because we did not run the finalization task in our SPECFEM2D problem, the output directory only contains our initial model." ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "gradient_0001 seisflows_optimize.p\t seisflows_solver.p\r\n", - "kwargs\t seisflows_parameters.json seisflows_system.p\r\n", - "model_0001 seisflows_paths.json\t seisflows_workflow.p\r\n", - "model_init seisflows_postprocess.p\r\n", - "model_true seisflows_preprocess.p\r\n" + "MODEL_INIT\r\n" ] } ], @@ -423,7 +446,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -435,24 +458,7 @@ } ], "source": [ - "! ls output/model_0001" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "proc000000_vp_kernel.bin proc000000_vs_kernel.bin\r\n" - ] - } - ], - "source": [ - "! ls output/gradient_0001" + "! ls output/MODEL_INIT" ] }, { @@ -466,14 +472,18 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "output_sf3_001.txt parameters_001.yaml\r\n" + "0001_00.log 0002_02.log 0004_01.log 0006_00.log\t parameters_002.yaml\r\n", + "0001_01.log 0003_00.log 0004_02.log 0006_01.log\t parameters_003.yaml\r\n", + "0001_02.log 0003_01.log 0005_00.log 0006_02.log\t sflog_001.txt\r\n", + "0002_00.log 0003_02.log 0005_01.log 0007_00.log\t sflog_002.txt\r\n", + "0002_01.log 0004_00.log 0005_02.log parameters_001.yaml sflog_003.txt\r\n" ] } ], @@ -485,49 +495,76 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "------------------------------\n", - "## stats/\n", + "----------------------------\n", + "## sflog.txt\n", "\n", - "Text files describing the optimization statistics of the current workflow. This directory is only relevant if you are running an inversion workflow. " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "factor.txt\t line_search.txt slope.txt\ttheta.txt\r\n", - "gradient_norm_L1.txt misfit.txt step_count.txt\r\n", - "gradient_norm_L2.txt restarted.txt step_length.txt\r\n" - ] - } - ], - "source": [ - "! ls stats" + "The main log file for SeisFlows, where all log statements written to stdout are recorded during a workflow. Allows a user to come back to a workflow and understand the tasks completed and any important information collected during the workflow" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "ITER STEP_COUNT\r\n", - "==== ==================\r\n", - " 1 0.000000E+00\r\n", - " 1 2.000000E+00\r\n" + "2022-08-16 14:32:48 (I) | \r\n", + "================================================================================\r\n", + " SETTING UP INVERSION WORKFLOW \r\n", + "================================================================================\r\n", + "2022-08-16 14:32:55 (D) | running setup for module 'system.Workstation'\r\n", + "2022-08-16 14:32:57 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/sflog_001.txt\r\n", + "2022-08-16 14:32:57 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/parameters_001.yaml\r\n", + "2022-08-16 14:32:57 (D) | running setup for module 'solver.Specfem2D'\r\n", + "2022-08-16 14:32:57 (I) | initializing 3 solver directories\r\n", + "2022-08-16 14:32:57 (D) | initializing solver directory source: 001\r\n", + "2022-08-16 14:33:04 (D) | linking source '001' as 'mainsolver'\r\n", + "2022-08-16 14:33:04 (D) | initializing solver directory source: 002\r\n", + "2022-08-16 14:33:09 (D) | initializing solver directory source: 003\r\n", + "2022-08-16 14:33:16 (D) | running setup for module 'preprocess.Default'\r\n", + "2022-08-16 14:33:16 (D) | running setup for module 'optimize.Gradient'\r\n", + "2022-08-16 14:33:17 (I) | no optimization checkpoint found, assuming first run\r\n", + "2022-08-16 14:33:17 (I) | re-loading optimization module from checkpoint\r\n", + "2022-08-16 14:33:17 (I) | \r\n", + "////////////////////////////////////////////////////////////////////////////////\r\n", + " RUNNING ITERATION 01 \r\n", + "////////////////////////////////////////////////////////////////////////////////\r\n", + "2022-08-16 14:33:17 (I) | \r\n", + "================================================================================\r\n", + " RUNNING INVERSION WORKFLOW \r\n", + "================================================================================\r\n", + "2022-08-16 14:33:17 (I) | \r\n", + "////////////////////////////////////////////////////////////////////////////////\r\n", + " EVALUATING MISFIT FOR INITIAL MODEL \r\n", + "////////////////////////////////////////////////////////////////////////////////\r\n", + "2022-08-16 14:33:17 (I) | checking initial model parameters\r\n", + "2022-08-16 14:33:17 (I) | 5800.00 <= vp <= 5800.00\r\n", + "2022-08-16 14:33:17 (I) | 2600.00 <= rho <= 2600.00\r\n", + "2022-08-16 14:33:17 (I) | 3500.00 <= vs <= 3500.00\r\n", + "2022-08-16 14:33:17 (I) | checking true/target model parameters\r\n", + "2022-08-16 14:33:17 (I) | 5900.00 <= vp <= 5900.00\r\n", + "2022-08-16 14:33:17 (I) | 2600.00 <= rho <= 2600.00\r\n", + "2022-08-16 14:33:17 (I) | 3550.00 <= vs <= 3550.00\r\n", + "2022-08-16 14:33:17 (I) | preparing observation data for source 001\r\n", + "2022-08-16 14:33:17 (I) | running forward simulation w/ target model for 001\r\n", + "2022-08-16 14:33:21 (I) | evaluating objective function for source 001\r\n", + "2022-08-16 14:33:21 (D) | running forward simulation with 'Specfem2D'\r\n", + "2022-08-16 14:33:25 (D) | quantifying misfit with 'Default'\r\n", + "2022-08-16 14:33:25 (I) | preparing observation data for source 002\r\n", + "2022-08-16 14:33:25 (I) | running forward simulation w/ target model for 002\r\n", + "2022-08-16 14:33:29 (I) | evaluating objective function for source 002\r\n", + "2022-08-16 14:33:29 (D) | running forward simulation with 'Specfem2D'\r\n", + "2022-08-16 14:33:33 (D) | quantifying misfit with 'Default'\r\n", + "2022-08-16 14:33:33 (I) | preparing observation data for source 003\r\n", + "2022-08-16 14:33:33 (I) | running forward simulation w/ target model for 003\r\n", + "2022-08-16 14:33:36 (I) | evaluating objective function for source 003\r\n" ] } ], "source": [ - "! cat stats/step_count.txt" + "! head -50 sflog.txt" ] }, { @@ -535,83 +572,53 @@ "metadata": {}, "source": [ "----------------------------\n", - "## output_sf3.txt\n", + "## sfstate.txt\n", "\n", - "The main log file for SeisFlows3, where all log statements written to stdout are recorded during a workflow." + "A state file which tracks the progress of a workflow, allowing the User to quickly resumed stopped or failed workflows without wasting computational resources. The State file simply contains the names of functions contained in the Workflow task list, as well as their respective status, which can be 'completed', 'failed', or not available." ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "2022-04-29 16:45:35 | initializing SeisFlows3 in sys.modules\r\n", - "2022-04-29 16:45:39 | copying par/log file to: /home/bchow/Work/official/workshop_pyatoa_sf3/ex1_specfem2d_workstation/logs/output_sf3_001.txt\r\n", - "2022-04-29 16:45:39 | copying par/log file to: /home/bchow/Work/official/workshop_pyatoa_sf3/ex1_specfem2d_workstation/logs/parameters_001.yaml\r\n", - "2022-04-29 16:45:39 | exporting current working environment to disk\r\n", - "2022-04-29 16:45:39 | \r\n", - "////////////////////////////////////////////////////////////////////////////////\r\n", - " WORKFLOW WILL STOP AFTER FUNC: 'finalize' \r\n", - "////////////////////////////////////////////////////////////////////////////////\r\n", - "2022-04-29 16:45:39 | \r\n", - "================================================================================\r\n", - " STARTING INVERSION WORKFLOW \r\n", - "================================================================================\r\n", - "2022-04-29 16:45:39 | \r\n", - "////////////////////////////////////////////////////////////////////////////////\r\n", - " ITERATION 1 / 1 \r\n", - "////////////////////////////////////////////////////////////////////////////////\r\n", - "2022-04-29 16:45:39 | \r\n", - "////////////////////////////////////////////////////////////////////////////////\r\n", - " PERFORMING MODULE SETUP \r\n", - "////////////////////////////////////////////////////////////////////////////////\r\n", - "2022-04-29 16:45:39 | misfit function is: 'waveform'\r\n", - "2022-04-29 16:45:40 | writing line search history file:\r\n", - "/home/bchow/Work/official/workshop_pyatoa_sf3/ex1_specfem2d_workstation/stats/line_search.txt\r\n", - "2022-04-29 16:45:40 | checking poissons ratio for: 'm_new.npy'\r\n", - "2022-04-29 16:45:40 | model parameters (m_new.npy i01s00):\r\n", - "2022-04-29 16:45:40 | 5800.00 <= vp <= 5800.00\r\n", - "2022-04-29 16:45:40 | 3500.00 <= vs <= 3500.00\r\n", - "2022-04-29 16:45:40 | 0.21 <= pr <= 0.21\r\n", - "2022-04-29 16:45:41 | setting up solver on system...\r\n", - "2022-04-29 16:45:41 | checkpointing working environment to disk\r\n", - "2022-04-29 16:45:42 | exporting current working environment to disk\r\n", - "2022-04-29 16:45:43 | running task solver.setup 3 times\r\n", - "2022-04-29 16:45:43 | initializing 3 solver directories\r\n", - "2022-04-29 16:45:50 | source 001 symlinked as mainsolver\r\n", - "2022-04-29 16:45:50 | generating 'data' with MODEL_TRUE synthetics\r\n", - "2022-04-29 16:45:57 | running mesh generation for MODEL_INIT\r\n", - "2022-04-29 16:46:27 | \r\n", - "================================================================================\r\n", - " INITIALIZING INVERSION \r\n", - "================================================================================\r\n", - "2022-04-29 16:46:27 | \r\n", - "EVALUATE OBJECTIVE FUNCTION\r\n", - "--------------------------------------------------------------------------------\r\n", - "2022-04-29 16:46:27 | saving model 'm_new.npy' to:\r\n", - "/home/bchow/Work/official/workshop_pyatoa_sf3/ex1_specfem2d_workstation/scratch/evalgrad/model\r\n", - "2022-04-29 16:46:28 | evaluating objective function 3 times on system...\r\n", - "2022-04-29 16:46:28 | checkpointing working environment to disk\r\n", - "2022-04-29 16:46:29 | exporting current working environment to disk\r\n", - "2022-04-29 16:46:30 | running task solver.eval_func 3 times\r\n", - "2022-04-29 16:46:30 | running forward simulations\r\n" + "# SeisFlows State File\r\n", + "# Tue Aug 16 14:33:17 2022\r\n", + "# Acceptable states: 'completed', 'failed'\r\n", + "# =======================================\r\n", + "evaluate_initial_misfit: completed\r\n", + "run_adjoint_simulations: completed\r\n", + "postprocess_event_kernels: completed\r\n", + "evaluate_gradient_from_kernels: completed\r\n", + "initialize_line_search: completed\r\n", + "perform_line_search: completed\r\n", + "iteration: 1" ] } ], "source": [ - "! head -50 output_sf3.txt" + "! cat sfstate.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When submitting a workflow with an existing state file, the workflow will check the status of each function. 'Completed' functions will be skipped over. 'Failed' functions will be re-run. Users can delete lines from the state file or change status' manually to re-run tasks within the list, taking care about the current configuration of the working directory, which is intrinsically tied to the task list.\n", + "\n", + "For 'Inversion' workflows, the current 'Iteration' is also saved, meaning re-submitted workflows will start at the previously checkpointed iteration. " ] } ], "metadata": { "kernelspec": { - "display_name": "Python (docs)", + "display_name": "Python 3", "language": "python", - "name": "docs" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -623,7 +630,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.12" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/docs/overview.rst b/docs/overview.rst index 25c2cc87..652679df 100644 --- a/docs/overview.rst +++ b/docs/overview.rst @@ -37,12 +37,10 @@ SeisFlows Modules: internal structure makes it relatively seamless to switch between workstation problems, and HPC jobs (Examples: workstation, Slurm) * **Solver**: External numerical solver used to generate models, synthetics, - and kernels (Examples: SPECFEM2D, SPECFEM3D Cartesian, SPECFEM3D Globe) + and kernels (Examples: SPECFEM2D, SPECFEM3D Cartesian, SPECFEM3D Globe), and + to smooth and manipulate kernels and gradients. * **Preprocessing**: Signal processing operations performed on time series, including downsampling, detrending, filtering, etc. - * **Postprocessing**: Regularization and image processing operations - carried out on the gradient computations. Typical tasks involve - smoothing, preconditioning and masking * **Optimization**: Nonlinear optimization algorithms used to find the minimum of a waveform-based objective function (Examples: L-BFGS, NLCG, steepest descent) diff --git a/docs/parameter_file.rst b/docs/parameter_file.rst index 920b7ce6..d49e6ff2 100644 --- a/docs/parameter_file.rst +++ b/docs/parameter_file.rst @@ -1,538 +1,363 @@ -Parameter File -============== - -The parameter file is the central control object for a SeisFlows -workflow. Here we take a look at the anatomy of a parameter file. -Parameter files in SeisFlows are formatted in the `YAML format (YAML -Ain’t Markup Language) `__. - -Template --------- - -Each workflow starts with the module-only template parameter file which -defines the core modules which make up the package. Running -``seisflows setup`` from the command line will create this file. - -.. code:: ipython3 - - ! seisflows setup - - -.. parsed-literal:: - - creating parameter file: parameters.yaml - - -.. code:: ipython3 - - ! cat parameters.yaml - - -.. parsed-literal:: - - # ////////////////////////////////////////////////////////////////////////////// - # - # SeisFlows YAML Parameter File - # - # ////////////////////////////////////////////////////////////////////////////// - # - # Modules correspond to the structure of the source code, and determine - # SeisFlows' behavior at runtime. Each module requires its own sub-parameters. - # - # .. rubric:: - # - To determine available options for modules listed below, run: - # > seisflows print modules - # - To auto-fill with docstrings and default values (recommended), run: - # > seisflows configure - # - To set values as NoneType, use: null - # - To set values as infinity, use: inf - # - # MODULES - # /////// - # WORKFLOW (str): The method for running SeisFlows; equivalent to main() - # SOLVER (str): External numerical solver to use for waveform simulations - # SYSTEM (str): Computer architecture of the system being used - # OPTIMIZE (str): Optimization algorithm for the inverse problem - # PREPROCESS (str): Preprocessing schema for waveform data - # POSTPROCESS (str): Postprocessing schema for kernels and gradients - # ============================================================================== - WORKFLOW: inversion - SOLVER: specfem2d - SYSTEM: workstation - OPTIMIZE: LBFGS - PREPROCESS: base - POSTPROCESS: base - - -How do I choose my modules? -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -As seen above, each of the modules comes with a default value. But you -may want to run a migration, not an inversion. Or run with SPECFEM3D not -2D. As stated in the comments at the top of the file, the -``seisflows print modules`` command lists out all available options. -Don’t see an option that works for you? Learn to extend the SeisFlows -package here: **!!! docs page link here !!!** - -.. code:: ipython3 - - ! seisflows print modules - - -.. parsed-literal:: - - SEISFLOWS3 MODULES - ////////////////// - '+': package, '-': module, '*': class - - + SYSTEM - - seisflows - * base - * cluster - * lsf - * slurm - * workstation - - seisflows-super - * chinook - * maui - + PREPROCESS - - seisflows - * base - * pyatoa - - seisflows-super - * pyatoa_nz - + SOLVER - - seisflows - * base - * specfem2d - * specfem3d - * specfem3d_globe - - seisflows-super - * specfem3d_maui - + POSTPROCESS - - seisflows - * base - - seisflows-super - + OPTIMIZE - - seisflows - * LBFGS - * NLCG - * base - - seisflows-super - + WORKFLOW - - seisflows - * base - * inversion - * migration - * test - - seisflows-super - * thrifty_inversion - * thrifty_maui - - -How do I change modules? -~~~~~~~~~~~~~~~~~~~~~~~~ - -Feel free to use any old text editor to edit the YAML file, or you can -use the ``seisflows par`` command to make changes directly from the -command line. For example, say we want to use SPECFEM3D - -.. code:: ipython3 - - # Changes the current parameter to the given value - ! seisflows par solver specfem3d - - -.. parsed-literal:: - - SOLVER: specfem2d -> specfem3d - - -.. code:: ipython3 - - # Prints out the current parameter value - ! seisflows par solver - - -.. parsed-literal:: - - SOLVER: specfem3d - - -How do I get to a full parameter file? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The module-only parameter file serves as as a template for dynamically -generating a full parameter file. Since each module requires it’s own -unique set of parameters and paths, each parameter file will look -different. We can use the ``seisflows configure`` command to complete -our parmater file, based on the chosen modules. - -.. code:: ipython3 - - ! seisflows configure - - -.. parsed-literal:: - - filling parameters.yaml w/ default values - - -Anatomy of the parameter file ------------------------------ - -As we will see below, the parameter file has now been generated. Each -module will define its own section, separated by a header of comments. -Within each header, parameter names, types and descriptions are listed. -At the bottom of the parameter file, there is a section defining paths -required by the workflow. Section headers will look something: - -.. code:: ipython3 - - # ============================================================================= - # MODULE - # ////// - # PARAMETER_NAME (type): - # Description - # ... - # ============================================================================= - PARAMETER_NAME: parameter_value - -.. code:: ipython3 - - ! head -80 parameters.yaml - - -.. parsed-literal:: - - # ////////////////////////////////////////////////////////////////////////////// - # - # SeisFlows YAML Parameter File - # - # ////////////////////////////////////////////////////////////////////////////// - # - # Modules correspond to the structure of the source code, and determine - # SeisFlows' behavior at runtime. Each module requires its own sub-parameters. - # - # .. rubric:: - # - To determine available options for modules listed below, run: - # > seisflows print modules - # - To auto-fill with docstrings and default values (recommended), run: - # > seisflows configure - # - To set values as NoneType, use: null - # - To set values as infinity, use: inf - # - # MODULES - # /////// - # WORKFLOW (str): The method for running SeisFlows; equivalent to main() - # SOLVER (str): External numerical solver to use for waveform simulations - # SYSTEM (str): Computer architecture of the system being used - # OPTIMIZE (str): Optimization algorithm for the inverse problem - # PREPROCESS (str): Preprocessing schema for waveform data - # POSTPROCESS (str): Postprocessing schema for kernels and gradients - # ============================================================================== - WORKFLOW: inversion - SOLVER: specfem3d - SYSTEM: workstation - OPTIMIZE: LBFGS - PREPROCESS: base - POSTPROCESS: base - - # ============================================================================= - # SYSTEM - # ////// - # TITLE (str): - # The name used to submit jobs to the system, defaults to the name of the - # working directory - # PRECHECK (list): - # A list of parameters that will be displayed to stdout before 'submit' or - # 'resume' is run. Useful for manually reviewing important parameters prior - # to system submission - # LOG_LEVEL (str): - # Verbosity output of SF3 logger. Available from least to most verbosity: - # 'CRITICAL', 'WARNING', 'INFO', 'DEBUG'; defaults to 'DEBUG' - # VERBOSE (bool): - # Level of verbosity provided to the output log. If True, log statements - # will declare what module/class/function they are being called from. - # Useful for debugging but also very noisy. - # MPIEXEC (str): - # Function used to invoke executables on the system. For example 'srun' on - # SLURM systems, or './' on a workstation. If left blank, will guess based - # on the system. - # NTASK (int): - # Number of separate, individual tasks. Also equal to the number of desired - # sources in workflow - # NPROC (int): - # Number of processor to use for each simulation - # ============================================================================= - TITLE: docs - PRECHECK: - - TITLE - LOG_LEVEL: DEBUG - VERBOSE: False - MPIEXEC: - NTASK: 1 - NPROC: 1 - - # ============================================================================= - # PREPROCESS - # ////////// - # MISFIT (str): - # Misfit function for waveform comparisons, for available see - # seisflows.plugins.misfit - # BACKPROJECT (str): - # Backprojection function for migration, for available see - # seisflows.plugins.adjoint - # NORMALIZE (list): - # Data normalization parameters used to normalize the amplitudes of - - -.. code:: ipython3 - - ! tail --lines=54 parameters.yaml - - -.. parsed-literal:: - - # ============================================================================= - # PATHS - # ///// - # SCRATCH: - # scratch path to hold temporary data during workflow - # OUTPUT: - # directory to save workflow outputs to disk - # SYSTEM: - # scratch path to hold any system related data - # LOCAL: - # path to local data to be used during workflow - # LOGFILE: - # the main output log file where all processes will track their status - # SOLVER: - # scratch path to hold solver working directories - # SPECFEM_BIN: - # path to the SPECFEM binary executables - # SPECFEM_DATA: - # path to the SPECFEM DATA/ directory containing the 'Par_file', 'STATIONS' - # file and 'CMTSOLUTION' files - # DATA: - # path to data available to workflow - # MASK: - # Directory to mask files for gradient masking - # OPTIMIZE: - # scratch path to store data related to nonlinear optimization - # MODEL_INIT: - # location of the initial model to be used for workflow - # MODEL_TRUE: - # Target model to be used for PAR.CASE == 'synthetic' - # FUNC: - # scratch path to store data related to function evaluations - # GRAD: - # scratch path to store data related to gradient evaluations - # HESS: - # scratch path to store data related to Hessian evaluations - # ============================================================================= - PATHS: - SCRATCH: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch - OUTPUT: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/output - SYSTEM: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/system - LOCAL: - LOGFILE: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/output_sf3.txt - SOLVER: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/solver - SPECFEM_BIN: !!! REQUIRED PATH !!! - SPECFEM_DATA: !!! REQUIRED PATH !!! - DATA: - MASK: - OPTIMIZE: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/optimize - MODEL_INIT: !!! REQUIRED PATH !!! - MODEL_TRUE: - FUNC: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/scratch - GRAD: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/evalgrad - HESS: /home/bchow/REPOSITORIES/seisflows/seisflows/docs/scratch/evalhess - - -How do I know what parameters need to be set? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - **NOTE**: Required parameters that can not be set to default values - will be listed as ``!!! REQUIRED PARAMETER !!!`` - -We can check the required paths and parameters manually by scrolling -through the parameter file, or we can use the -``seisflows par --required`` command to list them out all at once. - -.. code:: ipython3 - - ! seisflows par --required - - -.. parsed-literal:: - - !!! REQUIRED PARAMETER !!! - ========================== - MATERIALS - DENSITY - ATTENUATION - NT - DT - FORMAT - CASE - END - !!! REQUIRED PATH !!! - ===================== - SPECFEM_BIN - SPECFEM_DATA - MODEL_INIT - - -Checking parameter validity ---------------------------- - -You might be asking, how do I know if my parameters are set correctly? -SeisFlows modules feature check() functions which dictate correct -parameter values. You can run ``seisflows init`` to run these check() -functions. Because we have required parameters still left unset in our -parameter file, we expect the ``seisflows init`` function to throw an -error. - -.. code:: ipython3 - - ! seisflows init - - -.. parsed-literal:: - - ================================================================================ - PARAMETER FILE READ ERROR - ///////////////////////// - Please check that your parameter file is properly formatted in the YAML format. - If you have just run 'seisflows configure', you may have some required - parameters that will need to be filled out before you can proceed. The error - message is: - - could not determine a constructor for the tag 'tag:yaml.org,2002:!' - in "parameters.yaml", line 147, column 12 - ================================================================================ - - -Let’s set some random variables for the required parameters with the -``seisflows par`` command and try again. - -.. code:: ipython3 - - ! seisflows par materials elastic - ! seisflows par density constant - ! seisflows par attenuation False - ! seisflows par nt 100 - ! seisflows par dt .05 - ! seisflows par format ascii - ! seisflows par case data - ! seisflows par end 1 - ! seisflows par specfem_bin ./ - ! seisflows par specfem_data ./ - ! seisflows par model_init ./ - - -.. parsed-literal:: - - MATERIALS: !!! REQUIRED PARAMETER !!! -> elastic - DENSITY: !!! REQUIRED PARAMETER !!! -> constant - ATTENUATION: !!! REQUIRED PARAMETER !!! -> False - NT: !!! REQUIRED PARAMETER !!! -> 100 - DT: !!! REQUIRED PARAMETER !!! -> .05 - FORMAT: !!! REQUIRED PARAMETER !!! -> ascii - CASE: !!! REQUIRED PARAMETER !!! -> data - END: !!! REQUIRED PARAMETER !!! -> 1 - SPECFEM_BIN: !!! REQUIRED PATH !!! -> ./ - SPECFEM_DATA: !!! REQUIRED PATH !!! -> ./ - MODEL_INIT: !!! REQUIRED PATH !!! -> ./ - - -.. code:: ipython3 - - ! seisflows init - - -.. parsed-literal:: - - instantiating SeisFlows working state in directory: output - - -Of course we knew that the above parameters were acceptable. But what if -we input an unacceptable parameter into the parameter file and try -again? - -.. code:: ipython3 - - ! rm -r output/ - ! seisflows par materials visibily_incorrect_value - ! seisflows init - - -.. parsed-literal:: - - MATERIALS: elastic -> visibily_incorrect_value - ================================================================================ - MODULE CHECK ERROR - ////////////////// - seisflows.config module check failed with: - - solver: MATERIALS must be in ['ELASTIC', 'ACOUSTIC', 'ISOTROPIC', 'ANISOTROPIC'] - ================================================================================ - - -And voila, the module check has thrown an error, and told us (the User) -how to properly set the value of the materials parameter. Hopefully a -combination of thorough explanations in the parameter file section -headers, and error catching with ``seisflows init`` makes crafting your -own parameter file a smooth process. - -.. code:: ipython3 - - ! head -155 parameters.yaml | tail --lines=38 - - -.. parsed-literal:: - - - # ============================================================================= - # SOLVER - # ////// - # MATERIALS (str): - # Material parameters used to define model. Available: ['ELASTIC': Vp, Vs, - # 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC'] - # DENSITY (str): - # How to treat density during inversion. Available: ['CONSTANT': Do not - # update density, 'VARIABLE': Update density] - # ATTENUATION (str): - # If True, turn on attenuation during forward simulations, otherwise set - # attenuation off. Attenuation is always off for adjoint simulations. - # COMPONENTS (str): - # Components used to generate data, formatted as a single string, e.g. ZNE - # or NZ or E - # SOLVERIO (int): - # The format external solver files. Available: ['fortran_binary', 'adios'] - # NT (float): - # Number of time steps set in the SPECFEM Par_file - # DT (float): - # Time step or delta set in the SPECFEM Par_file - # FORMAT (float): - # Format of synthetic waveforms used during workflow, available options: - # ['ascii', 'su'] - # SOURCE_PREFIX (str): - # Prefix of SOURCE files in path SPECFEM_DATA. Available ['CMTSOLUTION', - # FORCESOLUTION'] - # ============================================================================= - MATERIALS: visibily_incorrect_value - DENSITY: constant - ATTENUATION: False - COMPONENTS: ZNE - SOLVERIO: fortran_binary - NT: 100 - DT: .05 - FORMAT: ascii - SOURCE_PREFIX: CMTSOLUTION - - -.. code:: ipython3 - - ! rm parameters.yaml # to delete the created file from this working directory +Parameter File +============== + +The parameter file is the central control object for a SeisFlows +workflow. Here we take a look at the anatomy of a parameter file. +Parameter files in SeisFlows are formatted in the `YAML format (YAML +Ain’t Markup Language) `__. + +Template +-------- + +Each workflow starts with the module-only template parameter file which +defines the core modules of the package. Your choices for each of these +modules will determine which paths and parameters are included in the +full parameter file. Running ``seisflows setup`` from the command line +will create the template file. + +.. code:: ipython3 + + ! seisflows setup -h + + +.. parsed-literal:: + + usage: seisflows setup [-h] [-f] + + In the specified working directory, copy template parameter file containing + only module choices, and symlink source code for both the base and super + repositories for easy edit access. If a parameter file matching the provided + name exists in the working directory, a prompt will appear asking the user if + they want to overwrite. + + optional arguments: + -h, --help show this help message and exit + -f, --force automatically overwrites existing parameter file + + +.. code:: ipython3 + + ! seisflows setup + + +.. parsed-literal:: + + creating parameter file: parameters.yaml + + +.. code:: ipython3 + + ! cat parameters.yaml + + +.. parsed-literal:: + + # ////////////////////////////////////////////////////////////////////////////// + # + # SeisFlows YAML Parameter File + # + # ////////////////////////////////////////////////////////////////////////////// + # + # Modules correspond to the structure of the source code, and determine + # SeisFlows' behavior at runtime. Each module requires its own sub-parameters. + # + # .. rubric:: + # - To determine available options for modules listed below, run: + # > seisflows print modules + # - To auto-fill with docstrings and default values (recommended), run: + # > seisflows configure + # - To set values as NoneType, use: null + # - To set values as infinity, use: inf + # + # MODULES + # /////// + # workflow (str): The types and order of functions for running SeisFlows + # system (str): Computer architecture of the system being used + # solver (str): External numerical solver to use for waveform simulations + # preprocess (str): Preprocessing schema for waveform data + # optimize (str): Optimization algorithm for the inverse problem + # ============================================================================== + workflow: forward + system: workstation + solver: specfem2d + preprocess: default + optimize: gradient + + +How do I choose modules? +~~~~~~~~~~~~~~~~~~~~~~~~ + +As seen above, each of the modules comes with a default value which +represents the base class\* for this module. + +* For an explanation of base classes and Python inheritance, see the `inheritance page `__ + +These default values are likely not suitable for all, e.g., if you want +to run an inversion and not a forward workflow, or use SPECFEM3D not +SPECFEM2D. To see all available module options, use the +``seisflows print modules`` command. + +.. code:: ipython3 + + ! seisflows print modules + + +.. parsed-literal:: + + SEISFLOWS MODULES + ///////////////// + '-': module, '*': class + + - workflow + * forward + * inversion + * migration + - system + * chinook + * cluster + * frontera + * lsf + * maui + * slurm + * workstation + - solver + * specfem + * specfem2d + * specfem3d + * specfem3d_globe + - preprocess + * default + * pyaflowa + - optimize + * LBFGS + * NLCG + * gradient + + +How do I change modules? +~~~~~~~~~~~~~~~~~~~~~~~~ + +Feel free to use any text editor, or use the ``seisflows par`` command +to make changes directly from the command line. For example, say we want +to use SPECFEM3D as our solver module. + +This is also covered in the `command line tool page `__ + +.. code:: ipython3 + + # Changes the current parameter to the given value + ! seisflows par solver specfem3d + + +.. parsed-literal:: + + solver: specfem2d -> specfem3d + + +.. code:: ipython3 + + # Prints out the current parameter value + ! seisflows par solver + + +.. parsed-literal:: + + solver: specfem3d + + +How do I create a full parameter file? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The module-only parameter file serves as as a template for dynamically +generating the full parameter file. Since each module requires it’s own +unique set of parameters and paths, each parameter file will look +different. We use the ``seisflows configure`` command to complete the +file. + +.. code:: ipython3 + + ! seisflows configure -h + + +.. parsed-literal:: + + usage: seisflows configure [-h] [-a] + + SeisFlows parameter files will vary depending on chosen modules and their + respective required parameters. This function will dynamically traverse the + source code and generate a template parameter file based on module choices. + The resulting file incldues docstrings and type hints for each parameter. + Optional parameters will be set with default values and required parameters + and paths will be marked appropriately. Required parameters must be set before + a workflow can be submitted. + + optional arguments: + -h, --help show this help message and exit + -a, --absolute_paths Set default paths relative to cwd + + +.. code:: ipython3 + + ! seisflows configure + +Below we will take a look at the parameter file we just created + +Anatomy of a parameter file +--------------------------- + +Each of SeisFlows’ modules will define its own section in the parameter +file, separated by a header of comments representing the docstring. +Within each header, parameter names, types and descriptions are listed. +At the bottom of the parameter file, there is a section defining paths +required by SeisFlows. Section headers will look something: + +.. code:: ipython3 + + # ============================================================================= + # MODULE + # ------ + # Module description + # + # Parameters + # ---------- + # :type parameter: type + # :param paramter: description + # ... + # ============================================================================= + parameter: value + +.. code:: ipython3 + + ! head -80 parameters.yaml + + +.. parsed-literal:: + + # ////////////////////////////////////////////////////////////////////////////// + # + # SeisFlows YAML Parameter File + # + # ////////////////////////////////////////////////////////////////////////////// + # + # Modules correspond to the structure of the source code, and determine + # SeisFlows' behavior at runtime. Each module requires its own sub-parameters. + # + # .. rubric:: + # - To determine available options for modules listed below, run: + # > seisflows print modules + # - To auto-fill with docstrings and default values (recommended), run: + # > seisflows configure + # - To set values as NoneType, use: null + # - To set values as infinity, use: inf + # + # MODULES + # /////// + # workflow (str): The types and order of functions for running SeisFlows + # system (str): Computer architecture of the system being used + # solver (str): External numerical solver to use for waveform simulations + # preprocess (str): Preprocessing schema for waveform data + # optimize (str): Optimization algorithm for the inverse problem + # ============================================================================== + workflow: forward + system: workstation + solver: specfem3d + preprocess: default + optimize: gradient + # ============================================================================= + # + # Forward Workflow + # ---------------- + # Run forward solver in parallel and (optionally) calculate + # data-synthetic misfit and adjoint sources. + # + # Parameters + # ---------- + # :type modules: list of module + # :param modules: instantiated SeisFlows modules which should have been + # generated by the function `seisflows.config.import_seisflows` with a + # parameter file generated by seisflows.configure + # :type data_case: str + # :param data_case: How to address 'data' in the workflow, available options: + # 'data': real data will be provided by the user in + # `path_data/{source_name}` in the same format that the solver will + # produce synthetics (controlled by `solver.format`) OR + # synthetic': 'data' will be generated as synthetic seismograms using + # a target model provided in `path_model_true`. If None, workflow will + # not attempt to generate data. + # :type export_traces: bool + # :param export_traces: export all waveforms that are generated by the + # external solver to `path_output`. If False, solver traces stored in + # scratch may be discarded at any time in the workflow + # :type export_residuals: bool + # :param export_residuals: export all residuals (data-synthetic misfit) that + # are generated by the external solver to `path_output`. If False, + # residuals stored in scratch may be discarded at any time in the workflow + # + # + # ============================================================================= + data_case: data + export_traces: False + export_residuals: False + # ============================================================================= + # + # Workstation System + # ------------------ + # Runs tasks in serial on a local machine. + # + # Parameters + # ---------- + # :type ntask: int + # :param ntask: number of individual tasks/events to run during workflow. + # Must be <= the number of source files in `path_specfem_data` + # :type nproc: int + # :param nproc: number of processors to use for each simulation + # :type log_level: str + # :param log_level: logger level to pass to logging module. + + +.. code:: ipython3 + + ! tail parameters.yaml + + +.. parsed-literal:: + + path_model_true: null + path_state_file: /Users/Chow/Repositories/seisflows/docs/notebooks/sfstate.txt + path_data: null + path_par_file: /Users/Chow/Repositories/seisflows/docs/notebooks/parameters.yaml + path_log_files: /Users/Chow/Repositories/seisflows/docs/notebooks/logs + path_output_log: /Users/Chow/Repositories/seisflows/docs/notebooks/sflog.txt + path_specfem_bin: null + path_specfem_data: null + path_solver: /Users/Chow/Repositories/seisflows/docs/notebooks/scratch/solver + path_preconditioner: null + + +How do I know how parameters need to be set? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Most SeisFlows parameters come with reasonable default values. The +docstrings headers will also list the expected type and available +options (if any). You may also run the ``seisflows check`` command which +verifies that parameters are set correctly. + +.. code:: ipython3 + + ! seisflows check + + +.. parsed-literal:: + + + ================================================================================ + PARAMETER ERRROR + //////////////// + `path_specfem_bin` must exist and must point to directory containing SPECFEM + executables + ================================================================================ + + +.. code:: ipython3 + + ! rm parameters.yaml # to delete the created file from this working directory diff --git a/docs/specfem2d_example.rst b/docs/specfem2d_example.rst index 3f0ced56..8206e0f1 100644 --- a/docs/specfem2d_example.rst +++ b/docs/specfem2d_example.rst @@ -1,40 +1,55 @@ -Specfem2D workstation example -============================= +Specfem2D Workstation Examples +============================== -To demonstrate the inversion capabilities of SeisFlows, we will run a -**Specfem2D synthetic-synthetic example** on a **local machine** (Linux -workstation running CentOS 7). Many of the setup steps here will likely -be unique to our OS and workstation, but hopefully they may serve as -templates for new Users wanting to explore SeisFlows. +SeisFlows comes with some **Specfem2D synthetic examples** to showcase +the software in action. These examples are meant to be run on a **local +machine** (tested on a Linux workstation running CentOS 7, and an Apple +Laptop running macOS 10.14.6). The numerical solver we will use is: `SPECFEM2D `__. We’ll also be working in our ``seisflows`` `Conda `__ environment, see the -installation documentation page for instructions on how to install and -activate the required Conda environment. +installation section on the home page for instructions on how to install +and activate the required Conda environment. -------------- -Option 1: Automated run ------------------------ +.. warning:: + If you do not have a compiled version of SPECFEM2D, then each example will attempt to automatically download and compile SPECFEM2D. This step may fail if you do not have software required by SPECFEM2D, if there are issues with the SPECFEM2D repository itself, or if the configuration and compiling steps fail. If you run any issues, it is recommended that you manually install and compile SPECFEM2D, and directly provide its path to this example problem using the -r or --specfem2d_repo flags (shown below). -We have set up this example to run using a single command line argument. -The following command will run an example script which will (1) download -and compile SPECFEM2D, (2) setup a SPECFEM2D working directory to -generate initial and target models, and (3) Run a SeisFlows inversion. +.. code:: ipython3 -.. warning:: - This example attempts to automatically download and compile SPECFEM2D. This step may fail if you are software required by SPECFEM2D, there are issues with the SPECFEM2D repository itself, or the configuration and compiling steps fail. If you run any issues, it is recommended that you manually install and compile SPECFEM2D, and directly provide its path to this example problem when prompted. + from IPython.display import Image # Used to display .png files in the notebook/docs + +Example #1: Homogenous Halfspace Inversion +------------------------------------------ + +Example #1 runs a 1-iteration synthetic inversion with 1 event and 1 +station, used to illustrate misfit kernels and updated models in adjoint +tomography. + +The starting/initial model (*MODEL_INIT*) and target/true model +(*MODEL_TRUE*) are used to generate synthetics and (synthetic) data, +respectively. Both models are homogeneous halfspace models defined by +velocity (Vp, Vs) and density (:math:`\rho`) with slightly varying P- +and S-wave velocity values (**INIT**: :math:`V_p`\ =5.8km/s, +:math:`V_s`\ =3.5km/s; **TRUE**: :math:`V_p`\ =5.9km/s, +:math:`V_s`\ =3.55km/s). Only Vp and Vs are updated during the example. + +Misfit during Example #1 is defined by a ‘traveltime’ misfit using the +``Default`` preprocessing module. It also uses a ``gradient-descent`` +optimization algorithm paired with a bracketing line search. No +smoothing/regularization is applied to the gradient. .. code:: ipython3 - seisflows examples run 1 + ! seisflows examples 1 # print example help dialogue .. parsed-literal:: - Run example: ex1_specfem2d_workstation_inversion + No existing SPECFEM2D repo given, default to: /home/bchow/REPOSITORIES/seisflows/docs/notebooks/specfem2d @@@@@@@@@@ .@@@@. .%&( %@. @@ -54,1873 +69,809 @@ generate initial and target models, and (3) Run a SeisFlows inversion. @@@@@@@@@@@@@@@@@ @@@@@@@@@@ + ================================================================================ - SEISFLOWS EXAMPLE 1 - //////////////////// - This is a [SPECFEM2D] [WORKSTATION] example, which will run 2 iterations of an - inversion to assess misfit between two homogeneous halfspace models with - slightly different velocities, 3 sources and 1 receiver. The tasks involved - include: + SEISFLOWS EXAMPLE 1 + /////////////////// + This is a [SPECFEM2D] [WORKSTATION] example, which will run an inversion to + assess misfit between two homogeneous halfspace models with slightly different + velocities. [1 events, 1 station, 1 iterations]. The tasks involved include: 1. (optional) Download, configure, compile SPECFEM2D - 2. Set up a SPECFEM2D working directory - 3. Generate starting model from Tape2007 example - 4. Generate target model w/ perturbed starting model - 5. Set up a SeisFlows working directory - 6. Run 2 iterations of an inversion workflow + 2. [Setup] a SPECFEM2D working directory + 3. [Setup] starting model from 'Tape2007' example + 4. [Setup] target model w/ perturbed starting model + 5. [Setup] a SeisFlows working directory + 6. [Run] the inversion workflow ================================================================================ - If you have already downloaded SPECMFE2D, please input its path here. If blank, - this example will pull the latest version from GitHub and attempt to configure - and make the binaries: > - --------------- - -Option 2: Manual run --------------------- - -The notebook below details a walkthrough of the automated run shown -above. This is meant for those who want to understand what is going on -under the hood. You are welcome to follow along on your workstation. The -following Table of Contents outlines the steps we will take in this -tutorial: - -.. warning:: - Navigation links will not work outside of Jupyter. Please use the navigation bar to the left. - -1. `Setup SPECFEM2D <#1.-Setup-SPECFEM2D>`__ - - a. `Download and compile - codebase <#1a.-Download-and-compile-codebase*>`__ - b. `Create a separate SPECFEM2D working - directory <#1b.-Create-a-separate-SPECFEM2D-working-directory>`__ - c. `Generate initial and target - models <#1c.-Generate-initial-and-target-models>`__ - -2. `Initialize SeisFlows (SF) <#2.-Initialize-SeisFlows-(SF)>`__ - - a. `SF working directory and parameter - file <#2a.-SF-working-directory-and-parameter-file>`__ - b. `Initialize SF working - state <#2b.-Initialize-SF-working-state>`__ - -3. `Run SeisFlows <#2.-Run-SeisFlows>`__ - - a. `Forward simulations <#3a.-Forward-simulations>`__ - b. `Exploring the SF directory - structure <#3b.-Exploring-the-SF-directory-structure>`__ - c. `Adjoint simulations <#3c.-Adjoint-simulations>`__ - d. `Line search and model - update <#3d.-Line-search-and-model-update>`__ - -4. `Conclusions <#4.-Conclusions>`__ -1. Setup SPECFEM2D -~~~~~~~~~~~~~~~~~~ -1a. Download and compile codebase (optional) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Running the example +~~~~~~~~~~~~~~~~~~~ - **NOTE**: If you have already downloaded and compiled SPECFEM2D, you - can skip most of this subsection (1a). However you will need to edit - the first two paths in the following cell (WORKDIR and - SPECFEM2D_ORIGINAL), and execute the path structure defined in the - cell. +You can either setup and run the example in separate tasks using the +``seisflows examples setup`` and ``seisflows submit`` commands, or by +directly running the example after setup using the ``examples run`` +command (illustrated below). -First we’ll download and compile SPECFEM2D to generate the binaries -necessary to run our simulations. We will then populate a new SPECFEM2D -working directory that will be used by SeisFlows. We’ll use to Python -OS module to do our filesystem processes just to keep everything in -Python, but this can easily be accomplished in bash. +Use the ``-r`` or ``--specfem2d_repo`` flag to point SeisFlows at an +existing SPECFEM2D/ repository (with compiled binaries) if available. If +not given, SeisFlows will automatically download, configure and compile +SPECFEM2D in your current working directory. .. code:: ipython3 - import os - import glob - import shutil - import numpy as np - -.. code:: ipython3 - - # vvv USER MUST EDIT THE FOLLOWING PATHS vvv - WORKDIR = "/home/bchow/Work/work/sf_specfem2d_example" - SPECFEM2D = "/home/bchow/REPOSITORIES/specfem2d" - # where WORKDIR: points to your own working directory - # and SPECFEM2D: points to an existing specfem2D repository if available (if not set as '') - # ^^^ USER MUST EDIT THE FOLLOWING PATHS ^^^ - # ====================================================================================================== + # Run command with open variable to set SPECFEM2D path + ! seisflows examples setup 1 -r ${PATH_TO_SPECFEM2D} + ! seisflows submit - # Distribute the necessary file structure of the SPECFEM2D repository that we will downloaded/reference - SPECFEM2D_ORIGINAL = os.path.join(WORKDIR, "specfem2d") - SPECFEM2D_BIN_ORIGINAL = os.path.join(SPECFEM2D_ORIGINAL, "bin") - SPECFEM2D_DATA_ORIGINAL = os.path.join(SPECFEM2D_ORIGINAL, "DATA") - TAPE_2007_EXAMPLE = os.path.join(SPECFEM2D_ORIGINAL, "EXAMPLES", "Tape2007") - - # The SPECFEM2D working directory that we will create separate from the downloaded repo - SPECFEM2D_WORKDIR = os.path.join(WORKDIR, "specfem2d_workdir") - SPECFEM2D_BIN = os.path.join(SPECFEM2D_WORKDIR, "bin") - SPECFEM2D_DATA = os.path.join(SPECFEM2D_WORKDIR, "DATA") - SPECFEM2D_OUTPUT = os.path.join(SPECFEM2D_WORKDIR, "OUTPUT_FILES") - - # Pre-defined locations of velocity models we will generate using the solver - SPECFEM2D_MODEL_INIT = os.path.join(SPECFEM2D_WORKDIR, "OUTPUT_FILES_INIT") - SPECFEM2D_MODEL_TRUE = os.path.join(SPECFEM2D_WORKDIR, "OUTPUT_FILES_TRUE") + # The following command is the same as above + ! seisflows examples run 1 --specfem2d_repo ${PATH_TO_SPECFEM2D} -.. code:: ipython3 - - # Download SPECFEM2D from GitHub, devel branch for latest codebase OR symlink from existing repo - os.chdir(WORKDIR) - - if os.path.exists("specfem2d"): - print("SPECFEM2D repository already found, you may skip this subsection") - pass - elif os.path.exists(SPECFEM2D): - print("Existing SPECMFE2D respository found, symlinking to working directory") - os.symlink(SPECFEM2D, "./specfem2d") - else: - print("Cloning respository from GitHub") - ! git clone --recursive --branch devel https://github.com/geodynamics/specfem2d.git - - -.. parsed-literal:: - - Existing SPECMFE2D respository found, symlinking to working directory +Running with MPI +^^^^^^^^^^^^^^^^ +If you have compiled SPECFEM2D with MPI, and have MPI installed and +loaded on your system, you can run this example with MPI. To do so, you +only need use the ``--with_mpi`` flag. By default SeisFlows will use +only 1 core, but you can choose the number of processors/tasks with the +``--nproc ${NPROC}`` flag. The example call runs example 1 with 4 cores. .. code:: ipython3 - # Compile SPECFEM2D to generate the Makefile - os.chdir(SPECFEM2D_ORIGINAL) - if not os.path.exists("./config.log"): - os.system("./configure") - -.. code:: ipython3 + # Run Solver tasks with MPI on 4 cores + ! seisflows examples run 1 -r ${PATH_TO_SPECFEM2D} --with_mpi --nproc 4 - # Run make to generate SPECFEM2D binaries - if not os.path.exists("bin"): - os.system("make all") +By default the example problems assume that your MPI executable is +``mpirun``. If for any reason ``mpirun`` is not what your system uses to +call MPI, you can use the ``--mpiexec ${MPIEXEC}`` flag to change that. .. code:: ipython3 - # Check out the binary files that have been created - os.chdir(SPECFEM2D_ORIGINAL) - ! pwd - ! ls bin/ - - -.. parsed-literal:: - - /home/bchow/REPOSITORIES/specfem2d - xadj_seismogram xconvolve_source_timefunction xspecfem2D - xcheck_quality_external_mesh xmeshfem2D xsum_kernels - xcombine_sem xsmooth_sem + ! seisflows examples run 1 -r ${PATH_TO_SPECFEM2D} --with_mpi --nproc 4 --mpiexec srun +We will not run the example in this notebook, however at this stage the +User should run one of the following commands above to execute the +example problem. A successfully completed example problem will end with +the following log messages: -1b. Create a separate SPECFEM2D working directory -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. code:: bash -Next we’ll create a new SPECFEM2D working directory, separate from the -original repository. The intent here is to isolate the original -SPECFEM2D repository from our working state, to protect it from things -like accidental file deletions or manipulations. This is not a mandatory -step for using SeisFlows, but it helps keep file structure clean in the -long run, and is the SeisFlows dev team’s preferred method of using -SPECFEM. + CLEANING WORKDIR FOR NEXT ITERATION + -------------------------------------------------------------------------------- + 2022-08-29 15:51:05 (I) | thrifty inversion encountering first iteration, defaulting to standard inversion workflow + 2022-08-29 15:51:06 (I) | + //////////////////////////////////////////////////////////////////////////////// + COMPLETE ITERATION 01 + //////////////////////////////////////////////////////////////////////////////// + 2022-08-29 15:51:06 (I) | setting current iteration to: 2 + + ================================================================================ + EXAMPLE COMPLETED SUCCESFULLY + ================================================================================ -.. note:: - All SPECFEM2D/3D/3D_GLOBE need to run successfully are the bin/, DATA/, and OUTPUT_FILES/ directories. Everything else in the repository is not mandatory for running binaries. + +Using the `working directory documentation page `__ you can figure out how to navigate around and look at the results of this small inversion problem. -In this tutorial we will be using the `Tape2007 example -problem `__ -to define our **DATA/** directory (last tested 3/9/22, cf893667). +We will have a look at a few of the files and directories here. I've run the example problem in a scratch directory but your output directory should look the same. .. code:: ipython3 - # Incase we've run this docs page before, delete the working directory before remaking - if os.path.exists(SPECFEM2D_WORKDIR): - shutil.rmtree(SPECFEM2D_WORKDIR) - - os.mkdir(SPECFEM2D_WORKDIR) - os.chdir(SPECFEM2D_WORKDIR) - - # Copy the binary files incase we update the source code. These can also be symlinked. - shutil.copytree(SPECFEM2D_BIN_ORIGINAL, "bin") - - # Copy the DATA/ directory because we will be making edits here frequently and it's useful to - # retain the original files for reference. We will be running one of the example problems: Tape2007 - shutil.copytree(os.path.join(TAPE_2007_EXAMPLE, "DATA"), "DATA") - - ! pwd + %cd ~/sfexamples/example_1 ! ls .. parsed-literal:: - /home/bchow/Work/work/sf_specfem2d_example/specfem2d_workdir - bin DATA + /home/bchow/Work/work/seisflows_example/example_1 + logs parameters.yaml sflog.txt specfem2d + output scratch sfstate.txt specfem2d_workdir -.. code:: ipython3 - - # Run the Tape2007 example to make sure SPECFEM2D is working as expected - os.chdir(TAPE_2007_EXAMPLE) - ! ./run_this_example.sh > output_log.txt - - assert(os.path.exists("OUTPUT_FILES/forward_image000004800.jpg")), \ - (f"Example did not run, the remainder of this docs page will likely not work." - f"Please check the following directory: {TAPE_2007_EXAMPLE}") - - ! tail output_log.txt +Understanding example outputs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In the ``output/`` directory, we can see our starting/initial model +(*MODEL_INIT*), our true/target model (*MODEL_TRUE*) and the updated +model from the first iteration (*MODEL_01*). In addition, we have saved +the gradient generated during the first iteration (*GRADIENT_01*) +because we set the parameter ``export_gradient`` to True. -.. parsed-literal:: - - ------------------------------------------------------------------------------- - ------------------------------------------------------------------------------- - D a t e : 29 - 04 - 2022 T i m e : 12:24:51 - ------------------------------------------------------------------------------- - ------------------------------------------------------------------------------- - - see results in directory: OUTPUT_FILES/ - - done - Fri Apr 29 12:24:51 AKDT 2022 +.. code:: ipython3 + # The output directory contains important files exported during a workflow + ! ls output --------------- -Now we need to manually set up our SPECFEM2D working directory. As -mentioned in the previous cell, the only required elements of this -working directory are the following (these files will form the basis for -how SeisFlows operates within the SPECFEM2D framework): +.. parsed-literal:: -1. **bin/** directory containing SPECFEM2D binaries -2. **DATA/** directory containing SOURCE and STATION files, as well as a - SPECFEM2D Par_file -3. \__OUTPUT_FILES/proc??????_*.bin_\_ files which define the starting - (and target) models + GRADIENT_01 MODEL_01 MODEL_INIT MODEL_TRUE -.. note:: - This file structure is the same for all versions of SPECFEM (2D/3D/3D_GLOBE) .. code:: ipython3 - # First we will set the correct SOURCE and STATION files. - # This is the same task as shown in ./run_this_example.sh - os.chdir(SPECFEM2D_DATA) - - # Symlink source 001 as our main source - if os.path.exists("SOURCE"): - os.remove("SOURCE") - os.symlink("SOURCE_001", "SOURCE") - - # Copy the correct Par_file so that edits do not affect the original file - if os.path.exists("Par_file"): - os.remove("Par_file") - shutil.copy("Par_file_Tape2007_onerec", "Par_file") - - ! ls + # A MODEL output directory contains model files in the chosen solver format. + # In this case, Fortran Binary from SPECFEM2D + ! ls output/MODEL_01 .. parsed-literal:: - interfaces_Tape2007.dat SOURCE_003 SOURCE_012 SOURCE_021 - model_velocity.dat_checker SOURCE_004 SOURCE_013 SOURCE_022 - Par_file SOURCE_005 SOURCE_014 SOURCE_023 - Par_file_Tape2007_132rec_checker SOURCE_006 SOURCE_015 SOURCE_024 - Par_file_Tape2007_onerec SOURCE_007 SOURCE_016 SOURCE_025 - proc000000_model_velocity.dat_input SOURCE_008 SOURCE_017 STATIONS - SOURCE SOURCE_009 SOURCE_018 STATIONS_checker - SOURCE_001 SOURCE_010 SOURCE_019 - SOURCE_002 SOURCE_011 SOURCE_020 - + proc000000_vp.bin proc000000_vs.bin -1c. Generate initial and target models -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Since we’re doing a synthetic-synthetic inversion, we need to manually -set up the velocity models with which we generate our synthetic -waveforms. The naming conventions for these models are: +Plotting results +~~~~~~~~~~~~~~~~ -1. **MODEL_INIT:** The initial or starting model. Used to generate the - actual synthetic seismograms. This is considered M00. -2. **MODEL_TRUE:** The target or true model. Used to generate ‘data’ - (also synthetic). This is the reference model that our inversion is - trying to resolve. +We can plot the model and gradient files created during our workflow +using the ``seisflows plot2d`` command. The ``--savefig`` flag allows us +to save output .png files to disk. The following figure shows the +starting/initial homogeneous halfspace model in Vs. -The starting model is defined as a homogeneous halfspace uin the -Tape2007 example problem. We will need to run both ``xmeshfem2D`` and -``xspecfem2D`` to generate the required velocity model database files. -We will generate our target model by slightly perturbing the parameters -of the initial model. +.. note:: + Models and gradients can only be plotted when using `SPECFEM2D` as the chosen solver. Other solvers (e.g., SPECFEM3D and 3D_GLOBE) require external software (e.g., ParaView) to visualize volumetric quantities like models and gradients. .. note:: - We can use the SeisFlows command line option `seisflows sempar` to directly edit the SPECFEM2D Par_file in the command line. This will work for the SPECFEM3D Par_file as well. + Because this docs page was made in a Jupyter Notebook, we need to use the IPython Image class to open the resulting .png file from inside the notebook. Users following along will need to open the figure using the GUI or command line tool. .. code:: ipython3 - os.chdir(SPECFEM2D_DATA) - - # Ensure that SPECFEM2D outputs the velocity model in the expected binary format - ! seisflows sempar setup_with_binary_database 1 # allow creation of .bin files - ! seisflows sempar save_model binary # output model in .bin database format - ! seisflows sempar save_ascii_kernels .false. # output kernels in .bin format, not ASCII + # Plot and open the initial homogeneous halfspace model + ! seisflows plot2d MODEL_INIT vs --savefig m_init_vs.png + Image(filename='m_init_vs.png') .. parsed-literal:: - setup_with_binary_database: 0 -> 1 - SAVE_MODEL: default -> binary - save_ASCII_kernels: .true. -> .false. + Figure(707.107x707.107) -.. code:: ipython3 - # SPECFEM requires that we create the OUTPUT_FILES directory before running - os.chdir(SPECFEM2D_WORKDIR) - - if os.path.exists(SPECFEM2D_OUTPUT): - shutil.rmtree(SPECFEM2D_OUTPUT) - - os.mkdir(SPECFEM2D_OUTPUT) - - ! ls +.. image:: images/specfem2d_example_files/specfem2d_example_19_1.png -.. parsed-literal:: - bin DATA OUTPUT_FILES +We can also plot the gradient that was created during the adjoint +simulation. In this example we only have one source and one receiver, so +the gradient shows a “banana-doughnut” style kernel, representing +volumetric sensitivity of the measurement (waveform misfit) to changes +in model values. .. code:: ipython3 - # GENERATE MODEL_INIT - os.chdir(SPECFEM2D_WORKDIR) - - # Run the mesher and solver to generate our initial model - ! ./bin/xmeshfem2D > OUTPUT_FILES/mesher_log.txt - ! ./bin/xspecfem2D > OUTPUT_FILES/solver_log.txt - - # Move the model files (*.bin) into the OUTPUT_FILES directory, where SeisFlows expects them - ! mv DATA/*bin OUTPUT_FILES - - # Make sure we don't overwrite this initial model when creating our target model in the next step - ! mv OUTPUT_FILES OUTPUT_FILES_INIT - - ! head OUTPUT_FILES_INIT/solver_log.txt - ! tail OUTPUT_FILES_INIT/solver_log.txt + ! seisflows plot2d GRADIENT_01 vs_kernel --savefig g_01_vs.png + Image(filename='g_01_vs.png') .. parsed-literal:: - - ********************************************** - **** Specfem 2-D Solver - serial version **** - ********************************************** - - Running Git version of the code corresponding to commit cf89366717d9435985ba852ef1d41a10cee97884 - dating From Date: Mon Nov 29 23:20:51 2021 -0800 - - - NDIM = 2 - ------------------------------------------------------------------------------- - Program SPECFEM2D: - ------------------------------------------------------------------------------- - ------------------------------------------------------------------------------- - Tape-Liu-Tromp (GJI 2007) - ------------------------------------------------------------------------------- - ------------------------------------------------------------------------------- - D a t e : 29 - 04 - 2022 T i m e : 12:25:24 - ------------------------------------------------------------------------------- - ------------------------------------------------------------------------------- + Figure(707.107x707.107) --------------- -Now we want to perturb the initial model to create our target model -(**MODEL_TRUE**). The seisflows command line subargument -``seisflows sempar velocity_model`` will let us view and edit the -velocity model. You can also do this manually by editing the Par_file -directly. -.. code:: ipython3 - - # GENERATE MODEL_TRUE - os.chdir(SPECFEM2D_DATA) - - # Edit the Par_file by increasing velocities by ~10% - ! seisflows sempar velocity_model '1 1 2600.d0 5900.d0 3550.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0' +.. image:: images/specfem2d_example_files/specfem2d_example_21_1.png -.. parsed-literal:: - - VELOCITY_MODEL: - - 1 1 2600.d0 5800.d0 3500.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0 - -> - 1 1 2600.d0 5900.d0 3550.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0 +Finally we can plot the updated model (*MODEL_01*), which is the sum of +the initial model and a scaled gradient. The gradient was scaled during +the line search, where we used a steepest-descent algorithm to reduce +the misfit between data and synthetics. Since we only have one +source-receiver pair in this workflow, the updated model shown below +almost exactly mimics the Vs kernel shown above. .. code:: ipython3 - # Re-run the mesher and solver to generate our target velocity model - os.chdir(SPECFEM2D_WORKDIR) - - # Make sure the ./OUTPUT_FILES directory exists since we moved the old one - if os.path.exists(SPECFEM2D_OUTPUT): - shutil.rmtree(SPECFEM2D_OUTPUT) - os.mkdir(SPECFEM2D_OUTPUT) - - # Run the binaries to generate MODEL_TRUE - ! ./bin/xmeshfem2D > OUTPUT_FILES/mesher_log.txt - ! ./bin/xspecfem2D > OUTPUT_FILES/solver_log.txt - - # Move all the relevant files into OUTPUT_FILES - ! mv ./DATA/*bin OUTPUT_FILES - ! mv OUTPUT_FILES OUTPUT_FILES_TRUE - - ! head OUTPUT_FILES_INIT/solver_log.txt - ! tail OUTPUT_FILES_INIT/solver_log.txt + ! seisflows plot2d MODEL_01 vs --savefig m_01_vs.png + Image(filename='m_01_vs.png') .. parsed-literal:: - - ********************************************** - **** Specfem 2-D Solver - serial version **** - ********************************************** - - Running Git version of the code corresponding to commit cf89366717d9435985ba852ef1d41a10cee97884 - dating From Date: Mon Nov 29 23:20:51 2021 -0800 - - - NDIM = 2 - ------------------------------------------------------------------------------- - Program SPECFEM2D: - ------------------------------------------------------------------------------- - ------------------------------------------------------------------------------- - Tape-Liu-Tromp (GJI 2007) - ------------------------------------------------------------------------------- - ------------------------------------------------------------------------------- - D a t e : 29 - 04 - 2022 T i m e : 12:25:24 - ------------------------------------------------------------------------------- - ------------------------------------------------------------------------------- + Figure(707.107x707.107) -.. code:: ipython3 - # Great, we have all the necessary SPECFEM files to run our SeisFlows inversion! - ! ls +.. image:: images/specfem2d_example_files/specfem2d_example_23_1.png -.. parsed-literal:: - bin DATA OUTPUT_FILES_INIT OUTPUT_FILES_TRUE +Closing thoughts +~~~~~~~~~~~~~~~~ -2. Initialize SeisFlows (SF) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Have a look at the `working directory documentation page `__ for more detailed explanations of how to navigate the SeisFlows working directory that was created during this example. -In this Section we will look at a SeisFlows working directory, -parameter file, and working state. +You can also run Example \#1 with more stations (up to 131), tasks/events (up to 25) and iterations (as many as you want!). Note that because this is a serial inversion, the compute time will scale with all of these values. -2a. SF working directory and parameter file -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. code:: ipython3 -As with SPECFEM, SeisFlows requires a parameter file -(**parameters.yaml**) that controls how an automated workflow will -proceed. Because SeisFlows is modular, there are a large number of -potential parameters which may be present in SF parameter file, as each -sub-module may have its own set of unique parameters. + # An example call for running Example 1 with variable number of stations, events and iterations + ! seisflows examples run 1 --nsta 10 --ntask 5 --niter 2 -In contrast to SPECFEM’s method of listing all available parameters and -leaving it up the User to determine which ones are relevant to them, -SeisFlows dynamically builds its parameter file based on User inputs. -In this subsection we will use the built-in SeisFlows command line -tools to generate and populate the parameter file. +Example #2: Checkerboard Inversion (w/ Pyaflowa & L-BFGS) +--------------------------------------------------------- -.. note:: - See the `parameter file documentation page `__ for a more in depth exploration of this central SeisFlows file. +Building on the foundation of the previous example, Example #2 runs a 2 +iteration inversion with misfit quantification taken care of by the +``Pyaflowa`` preprocessing module, which uses the misfit quantification +package `Pyatoa `__ under the hood. -In the previous section we saw the ``sempar`` command in action. We can -use the ``-h`` or help flag to list all available SiesFlows3 command -line commands. +Model updates are performed using an `L-BFGS nonlinear optimization +algorithm `__. +Example #2 also includes smoothing/regularization of the gradient. This +example more closely mimics a research-grade inversion problem. + +.. note:: + This example is computationally more intense than the default version of Example \#1 as it uses multiple events and stations, and runs multiple iterations. .. code:: ipython3 - ! seisflows -h + # Run the help message dialogue to see what Example 2 will do + ! seisflows examples 2 .. parsed-literal:: - usage: seisflows [-h] [-w [WORKDIR]] [-p [PARAMETER_FILE]] - {setup,configure,init,submit,resume,restart,clean,par,sempar,check,print,convert,reset,debug,edit,examples} - ... + No existing SPECFEM2D repo given, default to: /home/bchow/Work/work/seisflows_example/example_1/specfem2d - ================================================================================ + @@@@@@@@@@ + .@@@@. .%&( %@. + @@@@ @@@@ &@@@@@@ ,%@ + @@@@ @@@, /@@ @ + @@@ @@@@ @@@ @ + @@@@ @@@@ @@@ @ @ + @@@ @@@@ ,@@@ @ @ + @@@@ @@@@ @@@@ @@ @ @ + @@@@ @@@@@ @@@@@ @@@ @@ @ + @@@@ @@@@@ @@@@@@@@@@@@@@ @@ @ + @@@@ @@@@@@ @@@& @@@ @ + @@@@@ @@@@@@@@ %@@@@# @@ + @@@@# @@@@@@@@@@@@@@@@@ @@ + &@@@@@ @@@@( @@& + @@@@@@@ /@@@@ + @@@@@@@@@@@@@@@@@ + @@@@@@@@@@ - SeisFlows: Waveform Inversion Package ================================================================================ + SEISFLOWS EXAMPLE 2 + /////////////////// + This is a [SPECFEM2D] [WORKSTATION] example, which will run an inversion to + assess misfit between a starting homogeneous halfspace model and a target + checkerboard model. This example problem uses the [PYAFLOWA] preprocessing + module and the [LBFGS] optimization algorithm. [4 events, 32 stations, 2 + iterations]. The tasks involved include: - optional arguments: - -h, --help show this help message and exit - -w [WORKDIR], --workdir [WORKDIR] - The SeisFlows working directory, default: cwd - -p [PARAMETER_FILE], --parameter_file [PARAMETER_FILE] - Parameters file, default: 'parameters.yaml' - - command: - Available SeisFlows arguments and their intended usages - - setup Setup working directory from scratch - configure Fill parameter file with defaults - init Initiate working environment - submit Submit initial workflow to system - resume Re-submit previous workflow to system - restart Remove current environment and submit new workflow - clean Remove files relating to an active working environment - par View and edit SeisFlows parameter file - sempar View and edit SPECFEM parameter file - check Check state of an active environment - print Print information related to an active environment - convert Convert model file format - reset Reset modules within an active state - debug Start interactive debug environment - edit Open source code file in text editor - examples Look at and run pre-configured example problems - - 'seisflows [command] -h' for more detailed descriptions of each command. - - -.. code:: ipython3 - - # The command 'setup' creates the 'parameters.yaml' file that controls all of SeisFlows - # the '-f' flag removes any exist 'parameters.yaml' file that might be in the directory - os.chdir(WORKDIR) - ! seisflows setup -f - ! ls - + 1. (optional) Download, configure, compile SPECFEM2D + 2. [Setup] a SPECFEM2D working directory + 3. [Setup] starting model from 'Tape2007' example + 4. [Setup] target model w/ perturbed starting model + 5. [Setup] a SeisFlows working directory + 6. [Run] the inversion workflow + ================================================================================ -.. parsed-literal:: - creating parameter file: parameters.yaml - parameters.yaml specfem2d specfem2d_workdir +Run the example +~~~~~~~~~~~~~~~ +You can run the example with the same command as shown for Example 1. +Users following along will need to provide a path to their own +installation of SPECFEM2D using the ``-r`` flag. .. code:: ipython3 - # Let's have a look at this file, which has not yet been populated - ! cat parameters.yaml + ! seisflows examples run 2 -r ${PATH_TO_SPECFEM2D} +Succesful completion of the example problem will end with a log message that looks similar to the following -.. parsed-literal:: - - # ////////////////////////////////////////////////////////////////////////////// - # - # SeisFlows YAML Parameter File - # - # ////////////////////////////////////////////////////////////////////////////// - # - # Modules correspond to the structure of the source code, and determine - # SeisFlows' behavior at runtime. Each module requires its own sub-parameters. - # - # .. rubric:: - # - To determine available options for modules listed below, run: - # > seisflows print module - # - To auto-fill with docstrings and default values (recommended), run: - # > seisflows configure - # - To set values as NoneType, use: null - # - To set values as infinity, use: inf - # - # MODULES - # /////// - # WORKFLOW (str): The method for running SeisFlows; equivalent to main() - # SOLVER (str): External numerical solver to use for waveform simulations - # SYSTEM (str): Computer architecture of the system being used - # OPTIMIZE (str): Optimization algorithm for the inverse problem - # PREPROCESS (str): Preprocessing schema for waveform data - # POSTPROCESS (str): Postprocessing schema for kernels and gradients - # ============================================================================== - WORKFLOW: inversion - SOLVER: specfem2d - SYSTEM: workstation - OPTIMIZE: LBFGS - PREPROCESS: base - POSTPROCESS: base - - -.. code:: ipython3 - - # We can use the `seisflows print modules` command to list out the available options - ! seisflows print modules +.. code:: bash + 2022-08-29 18:08:13 (I) | + CLEANING WORKDIR FOR NEXT ITERATION + -------------------------------------------------------------------------------- + 2022-08-29 18:08:15 (I) | thrifty inversion encountering final iteration, defaulting to inversion workflow + 2022-08-29 18:08:21 (I) | + //////////////////////////////////////////////////////////////////////////////// + COMPLETE ITERATION 02 + //////////////////////////////////////////////////////////////////////////////// + 2022-08-29 18:08:21 (I) | setting current iteration to: 3 -.. parsed-literal:: + ================================================================================ + EXAMPLE COMPLETED SUCCESFULLY + ================================================================================ - SEISFLOWS MODULES - ////////////////// - '+': package, '-': module, '*': class - - + SYSTEM - - seisflows - * base - * cluster - * lsf - * slurm - * workstation - - seisflows-super - * chinook - * maui - + PREPROCESS - - seisflows - * base - * pyatoa - - seisflows-super - * pyatoa_nz - + SOLVER - - seisflows - * base - * specfem2d - * specfem3d - * specfem3d_globe - - seisflows-super - * specfem3d_maui - + POSTPROCESS - - seisflows - * base - - seisflows-super - + OPTIMIZE - - seisflows - * LBFGS - * NLCG - * base - - seisflows-super - + WORKFLOW - - seisflows - * base - * inversion - * migration - * test - - seisflows-super - * thrifty_inversion - * thrifty_maui +Understanding example outputs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +As with Example #1, we can look at the output gradients and models to +visualize what just happenend under the hood. Be sure to read through +the output log messages as well, to get a better idea of what steps and +tasks were performed to generate these outputs. .. code:: ipython3 - # For this example, we can use most of the default modules, however we need to - # change the SOLVER module to let SeisFlows know we're using SPECFEM2D (as opposed to 3D) - ! seisflows par solver specfem2d - ! cat parameters.yaml + %cd ~/sfexamples/example_2 + ! ls .. parsed-literal:: - SOLVER: specfem2d -> specfem2d - # ////////////////////////////////////////////////////////////////////////////// - # - # SeisFlows YAML Parameter File - # - # ////////////////////////////////////////////////////////////////////////////// - # - # Modules correspond to the structure of the source code, and determine - # SeisFlows' behavior at runtime. Each module requires its own sub-parameters. - # - # .. rubric:: - # - To determine available options for modules listed below, run: - # > seisflows print module - # - To auto-fill with docstrings and default values (recommended), run: - # > seisflows configure - # - To set values as NoneType, use: null - # - To set values as infinity, use: inf - # - # MODULES - # /////// - # WORKFLOW (str): The method for running SeisFlows; equivalent to main() - # SOLVER (str): External numerical solver to use for waveform simulations - # SYSTEM (str): Computer architecture of the system being used - # OPTIMIZE (str): Optimization algorithm for the inverse problem - # PREPROCESS (str): Preprocessing schema for waveform data - # POSTPROCESS (str): Postprocessing schema for kernels and gradients - # ============================================================================== - WORKFLOW: inversion - SOLVER: specfem2d - SYSTEM: workstation - OPTIMIZE: LBFGS - PREPROCESS: base - POSTPROCESS: base - + /home/bchow/Work/work/seisflows_example/example_2 + logs parameters.yaml sflog.txt specfem2d + output scratch sfstate.txt specfem2d_workdir --------------- - -The ``seisflows configure`` command populates the parameter file based -on the chosen modules. SeisFlows will attempt to fill in all parameters -with default values when possible, but values that the User **MUST** set -will be denoted by the value: - - **!!! REQUIRED PARAMETER !!!** -SeisFlows will not work until all of these required parameters are set -by the User. Docstrings above each module show descriptions and -available options for each of these parameters. In the follownig cell we -will use the ``seisflows par`` command to edit the parameters.yaml file -directly, replacing each of the required parameters with a chosen value. -Comments next to each evaluation describe the choice for each. +Running the ``plot2d`` command without any arguments is a useful way to +determine what model/gradient files are available for plotting. .. code:: ipython3 - ! seisflows configure - ! cat parameters.yaml + ! seisflows plot2d .. parsed-literal:: - filling parameters.yaml w/ default values - # ////////////////////////////////////////////////////////////////////////////// - # - # SeisFlows YAML Parameter File - # - # ////////////////////////////////////////////////////////////////////////////// - # - # Modules correspond to the structure of the source code, and determine - # SeisFlows' behavior at runtime. Each module requires its own sub-parameters. - # - # .. rubric:: - # - To determine available options for modules listed below, run: - # > seisflows print module - # - To auto-fill with docstrings and default values (recommended), run: - # > seisflows configure - # - To set values as NoneType, use: null - # - To set values as infinity, use: inf - # - # MODULES - # /////// - # WORKFLOW (str): The method for running SeisFlows; equivalent to main() - # SOLVER (str): External numerical solver to use for waveform simulations - # SYSTEM (str): Computer architecture of the system being used - # OPTIMIZE (str): Optimization algorithm for the inverse problem - # PREPROCESS (str): Preprocessing schema for waveform data - # POSTPROCESS (str): Postprocessing schema for kernels and gradients - # ============================================================================== - WORKFLOW: inversion - SOLVER: specfem2d - SYSTEM: workstation - OPTIMIZE: LBFGS - PREPROCESS: base - POSTPROCESS: base - - # ============================================================================= - # SYSTEM - # ////// - # TITLE (str): - # The name used to submit jobs to the system, defaults to the name of the - # working directory - # PRECHECK (list): - # A list of parameters that will be displayed to stdout before 'submit' or - # 'resume' is run. Useful for manually reviewing important parameters prior - # to system submission - # LOG_LEVEL (str): - # Verbosity output of SF logger. Available from least to most verbosity: - # 'CRITICAL', 'WARNING', 'INFO', 'DEBUG'; defaults to 'DEBUG' - # VERBOSE (bool): - # Level of verbosity provided to the output log. If True, log statements - # will declare what module/class/function they are being called from. - # Useful for debugging but also very noisy. - # MPIEXEC (str): - # Function used to invoke executables on the system. For example 'srun' on - # SLURM systems, or './' on a workstation. If left blank, will guess based - # on the system. - # NTASK (int): - # Number of separate, individual tasks. Also equal to the number of desired - # sources in workflow - # NPROC (int): - # Number of processor to use for each simulation - # ============================================================================= - TITLE: sf_specfem2d_example - PRECHECK: - - TITLE - LOG_LEVEL: DEBUG - VERBOSE: False - MPIEXEC: - NTASK: 1 - NPROC: 1 - - # ============================================================================= - # PREPROCESS - # ////////// - # MISFIT (str): - # Misfit function for waveform comparisons, for available see - # seisflows.plugins.misfit - # BACKPROJECT (str): - # Backprojection function for migration, for available see - # seisflows.plugins.adjoint - # NORMALIZE (list): - # Data normalization parameters used to normalize the amplitudes of - # waveforms. Choose from two sets: ENORML1: normalize per event by L1 of - # traces; OR ENORML2: normalize per event by L2 of traces; AND TNORML1: - # normalize per trace by L1 of itself; OR TNORML2: normalize per trace by - # L2 of itself - # FILTER (str): - # Data filtering type, available options are:BANDPASS (req. MIN/MAX - # PERIOD/FREQ);LOWPASS (req. MAX_FREQ or MIN_PERIOD); HIGHPASS (req. - # MIN_FREQ or MAX_PERIOD) - # MIN_PERIOD (float): - # Minimum filter period applied to time series.See also MIN_FREQ, MAX_FREQ, - # if User defines FREQ parameters, they will overwrite PERIOD parameters. - # MAX_PERIOD (float): - # Maximum filter period applied to time series.See also MIN_FREQ, MAX_FREQ, - # if User defines FREQ parameters, they will overwrite PERIOD parameters. - # MIN_FREQ (float): - # Maximum filter frequency applied to time series.See also MIN_PERIOD, - # MAX_PERIOD, if User defines FREQ parameters, they will overwrite PERIOD - # parameters. - # MAX_FREQ (float): - # Maximum filter frequency applied to time series,See also MIN_PERIOD, - # MAX_PERIOD, if User defines FREQ parameters, they will overwrite PERIOD - # parameters. - # MUTE (list): - # Data mute parameters used to zero out early / late arrivals or offsets. - # Choose any number of: EARLY: mute early arrivals; LATE: mute late - # arrivals; SHORT: mute short source-receiver distances; LONG: mute long - # source-receiver distances - # ============================================================================= - MISFIT: waveform - BACKPROJECT: null - NORMALIZE: [] - FILTER: null - MIN_PERIOD: - MAX_PERIOD: - MIN_FREQ: - MAX_FREQ: - MUTE: [] + PLOT2D + ////// + Available models/gradients/kernels - # ============================================================================= - # SOLVER - # ////// - # MATERIALS (str): - # Material parameters used to define model. Available: ['ELASTIC': Vp, Vs, - # 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC'] - # DENSITY (str): - # How to treat density during inversion. Available: ['CONSTANT': Do not - # update density, 'VARIABLE': Update density] - # ATTENUATION (str): - # If True, turn on attenuation during forward simulations, otherwise set - # attenuation off. Attenuation is always off for adjoint simulations. - # COMPONENTS (str): - # Components used to generate data, formatted as a single string, e.g. ZNE - # or NZ or E - # SOLVERIO (int): - # The format external solver files. Available: ['fortran_binary', 'adios'] - # NT (float): - # Number of time steps set in the SPECFEM Par_file - # DT (float): - # Time step or delta set in the SPECFEM Par_file - # F0 (float): - # Dominant source frequency - # FORMAT (float): - # Format of synthetic waveforms used during workflow, available options: - # ['ascii', 'su'] - # SOURCE_PREFIX (str): - # Prefix of SOURCE files in path SPECFEM_DATA. By default, 'SOURCE' for - # SPECFEM2D - # ============================================================================= - MATERIALS: !!! REQUIRED PARAMETER !!! - DENSITY: !!! REQUIRED PARAMETER !!! - ATTENUATION: !!! REQUIRED PARAMETER !!! - COMPONENTS: ZNE - SOLVERIO: fortran_binary - NT: !!! REQUIRED PARAMETER !!! - DT: !!! REQUIRED PARAMETER !!! - F0: !!! REQUIRED PARAMETER !!! - FORMAT: !!! REQUIRED PARAMETER !!! - SOURCE_PREFIX: SOURCE - - # ============================================================================= - # POSTPROCESS - # /////////// - # SMOOTH_H (float): - # Gaussian half-width for horizontal smoothing in units of meters. If 0., - # no smoothing applied - # SMOOTH_V (float): - # Gaussian half-width for vertical smoothing in units of meters - # TASKTIME_SMOOTH (int): - # Large radii smoothing may take longer than normal tasks. Allocate - # additional smoothing task time as a multiple of TASKTIME - # ============================================================================= - SMOOTH_H: 0.0 - SMOOTH_V: 0.0 - TASKTIME_SMOOTH: 1 - - # ============================================================================= - # OPTIMIZE - # //////// - # LINESEARCH (str): - # Algorithm to use for line search, see seisflows.plugins.line_search for - # available choices - # PRECOND (str): - # Algorithm to use for preconditioning gradients, see - # seisflows.plugins.preconds for available choices - # STEPCOUNTMAX (int): - # Max number of trial steps in line search before a change in line search - # behavior - # STEPLENINIT (float): - # Initial line search step length, as a fraction of current model - # parameters - # STEPLENMAX (float): - # Max allowable step length, as a fraction of current model parameters - # LBFGSMEM (int): - # Max number of previous gradients to retain in local memory - # LBFGSMAX (int): - # LBFGS periodic restart interval, between 1 and 'inf' - # LBFGSTHRESH (float): - # LBFGS angle restart threshold - # ============================================================================= - LINESEARCH: Backtrack - PRECOND: - STEPCOUNTMAX: 10 - STEPLENINIT: 0.05 - STEPLENMAX: 0.5 - LBFGSMEM: 3 - LBFGSMAX: inf - LBFGSTHRESH: 0.0 - - # ============================================================================= - # WORKFLOW - # //////// - # CASE (str): - # Type of inversion, available: ['data': real data inversion, 'synthetic': - # synthetic-synthetic inversion] - # RESUME_FROM (str): - # Name of task to resume inversion from - # STOP_AFTER (str): - # Name of task to stop inversion after finishing - # SAVEMODEL (bool): - # Save final model files after each iteration - # SAVEGRADIENT (bool): - # Save gradient files after each iteration - # SAVEKERNELS (bool): - # Save event kernel files after each iteration - # SAVETRACES (bool): - # Save waveform traces after each iteration - # SAVERESIDUALS (bool): - # Save waveform residuals after each iteration - # SAVEAS (str): - # Format to save models, gradients, kernels. Available: ['binary': save - # files in native SPECFEM .bin format, 'vector': save files as NumPy .npy - # files, 'both': save as both binary and vectors] - # BEGIN (int): - # First iteration of workflow, 1 <= BEGIN <= inf - # END (int): - # Last iteration of workflow, BEGIN <= END <= inf - # ============================================================================= - CASE: !!! REQUIRED PARAMETER !!! - RESUME_FROM: - STOP_AFTER: - SAVEMODEL: True - SAVEGRADIENT: True - SAVEKERNELS: False - SAVETRACES: False - SAVERESIDUALS: False - SAVEAS: binary - BEGIN: 1 - END: !!! REQUIRED PARAMETER !!! - - # ============================================================================= - # PATHS - # ///// - # SCRATCH: - # scratch path to hold temporary data during workflow - # OUTPUT: - # directory to save workflow outputs to disk - # SYSTEM: - # scratch path to hold any system related data - # LOCAL: - # path to local data to be used during workflow - # LOGFILE: - # the main output log file where all processes will track their status - # SOLVER: - # scratch path to hold solver working directories - # SPECFEM_BIN: - # path to the SPECFEM binary executables - # SPECFEM_DATA: - # path to the SPECFEM DATA/ directory containing the 'Par_file', 'STATIONS' - # file and 'CMTSOLUTION' files - # DATA: - # path to data available to workflow - # MASK: - # Directory to mask files for gradient masking - # OPTIMIZE: - # scratch path to store data related to nonlinear optimization - # MODEL_INIT: - # location of the initial model to be used for workflow - # MODEL_TRUE: - # Target model to be used for PAR.CASE == 'synthetic' - # FUNC: - # scratch path to store data related to function evaluations - # GRAD: - # scratch path to store data related to gradient evaluations - # HESS: - # scratch path to store data related to Hessian evaluations - # ============================================================================= - PATHS: - SCRATCH: /home/bchow/Work/work/sf_specfem2d_example/scratch - OUTPUT: /home/bchow/Work/work/sf_specfem2d_example/output - SYSTEM: /home/bchow/Work/work/sf_specfem2d_example/scratch/system - LOCAL: - LOGFILE: /home/bchow/Work/work/sf_specfem2d_example/output_sf.txt - SOLVER: /home/bchow/Work/work/sf_specfem2d_example/scratch/solver - SPECFEM_BIN: !!! REQUIRED PATH !!! - SPECFEM_DATA: !!! REQUIRED PATH !!! - DATA: - MASK: - OPTIMIZE: /home/bchow/Work/work/sf_specfem2d_example/scratch/optimize - MODEL_INIT: !!! REQUIRED PATH !!! - MODEL_TRUE: - FUNC: /home/bchow/Work/work/sf_specfem2d_example/scratch/scratch - GRAD: /home/bchow/Work/work/sf_specfem2d_example/scratch/evalgrad - HESS: /home/bchow/Work/work/sf_specfem2d_example/scratch/evalhess - + GRADIENT_01 + GRADIENT_02 + MODEL_01 + MODEL_02 + MODEL_INIT + MODEL_TRUE -.. code:: ipython3 - - # We can check which parameters we will NEED to fill out before running the workflow with the --required flag - ! seisflows par --required - - -.. parsed-literal:: - - !!! REQUIRED PARAMETER !!! - ========================== - MATERIALS - DENSITY - ATTENUATION - NT - DT - F0 - FORMAT - CASE - END - !!! REQUIRED PATH !!! - ===================== - SPECFEM_BIN - SPECFEM_DATA - MODEL_INIT +Similarly, running ``plot2d`` with 1 argument will help determine what +quantities are available to plot .. code:: ipython3 - # EDIT THE SEISFLOWS PARAMETER FILE - ! seisflows par materials elastic # how the velocity model is parameterized - ! seisflows par density constant # update density or keep constant - ! seisflows par attenuation False - ! seisflows par nt 5000 # set by SPECFEM2D Par_file - ! seisflows par dt .06 # set by SPECFEM2D Par_file - ! seisflows par f0 0.084 # set by SOURCE file - ! seisflows par format ascii # how to output synthetic seismograms - ! seisflows par begin 1 # first iteration - ! seisflows par end 1 # final iteration -- we will only run 1 - ! seisflows par case synthetic # synthetic-synthetic means we need both INIT and TRUE models - - # Use Python syntax here to access path constants - os.system(f"seisflows par specfem_bin {SPECFEM2D_BIN}") # set path to SPECFEM2D binaries - os.system(f"seisflows par specfem_data {SPECFEM2D_DATA}") # set path to SEPCFEM2D DATA/ - os.system(f"seisflows par model_init {SPECFEM2D_MODEL_INIT}") # set path to INIT model - os.system(f"seisflows par model_true {SPECFEM2D_MODEL_TRUE}") # set path to TRUE model + ! seisflows plot2d MODEL_TRUE .. parsed-literal:: - MATERIALS: !!! REQUIRED PARAMETER !!! -> elastic - DENSITY: !!! REQUIRED PARAMETER !!! -> constant - ATTENUATION: !!! REQUIRED PARAMETER !!! -> False - NT: !!! REQUIRED PARAMETER !!! -> 5000 - DT: !!! REQUIRED PARAMETER !!! -> .06 - F0: !!! REQUIRED PARAMETER !!! -> 0.084 - FORMAT: !!! REQUIRED PARAMETER !!! -> ascii - BEGIN: 1 -> 1 - END: !!! REQUIRED PARAMETER !!! -> 1 - CASE: !!! REQUIRED PARAMETER !!! -> synthetic - + Traceback (most recent call last): + File "/home/bchow/miniconda3/envs/docs/bin/seisflows", line 33, in + sys.exit(load_entry_point('seisflows', 'console_scripts', 'seisflows')()) + File "/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py", line 1383, in main + sf() + File "/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py", line 438, in __call__ + getattr(self, self._args.command)(**vars(self._args)) + File "/home/bchow/REPOSITORIES/seisflows/seisflows/seisflows.py", line 1106, in plot2d + save=savefig) + File "/home/bchow/REPOSITORIES/seisflows/seisflows/tools/specfem.py", line 428, in plot2d + f"chosen `parameter` must be in {self._parameters}" + AssertionError: chosen `parameter` must be in ['vp', 'vs'] +Visualizing Initial and Target models +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. parsed-literal:: - - 0 - +The starting model for this example is the same homogeneous halfspace +model shown in Example #1, with :math:`V_p`\ =5.8km/s and +:math:`V_s`\ =3.5km/s. - --------------- - -One last thing, we will need to edit the SPECFEM2D Par_file parameter -``MODEL`` such that ``xmeshfem2d`` reads our pre-built velocity models -(*.bin files) rather than the meshing parameters defined in the -Par_file. +For this example, however, the target model is a checkerboard model with +fast and slow perturbations roughly equal to :math:`\pm10\%` of the +initial model. We can plot the model below to get a visual +representation of these perturbations, where **red==slow** and +**blue==fast**. .. code:: ipython3 - os.chdir(SPECFEM2D_DATA) - ! seisflows sempar model gll + ! seisflows plot2d MODEL_TRUE vs --savefig m_true_vs.png + Image(filename='m_true_vs.png') .. parsed-literal:: - MODEL: default -> gll + Figure(707.107x707.107) -2b. Initialize SF working state -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The SeisFlows command ``seisflows init`` will generate the a SeisFlows -working state without submitting any jobs to the system. This is useful -for testing to see if the user has set an acceptable parameter file, and -if SeisFlows is working as expected. -The result of running ``seisflows init`` is a collection of pickle (*.p) -and JSON files which define the active Python environment. SeisFlows -relies directly on these files to determine where it is in a workflow. -Throughout an active workflow, SeisFlows will checkpoint itself to -these pickle and JSON files such that if a workflow finishes or crashes, -the User can resume a workflow from the last checkpointed state rather -than needing to restart the workflow. +.. image:: images/specfem2d_example_files/specfem2d_example_40_1.png - **DEBUG MODE:** After running ``seisflows init`` you can explore the - SeisFlows working state in an interactive iPython environment by - running ``seisflows debug``. This will open up an iPython environment - in which the active working state is loaded and accessible The debug - mode is invaluable for exploring the SeisFlows working state, - debugging errors, and performing manual manipulations to an otherwise - automated tool. You can try for yourself by running debug mode and - typing ‘preprocess’ to access the active preprocess module. -.. code:: ipython3 - os.chdir(WORKDIR) - ! seisflows init - ! ls output +Visualizing the Gradient +~~~~~~~~~~~~~~~~~~~~~~~~ +We can look at the gradients created during the adjoint simulations to +get an idea of how our inversion wanted to update the model. Gradients +tell us how to perturb our starting model (the homogeneous halfspace) to +best fit the data that was generated by our target model (the +checkerboard). -.. parsed-literal:: - - instantiating SeisFlows working state in directory: output - seisflows_optimize.p seisflows_postprocess.p seisflows_system.p - seisflows_parameters.json seisflows_preprocess.p seisflows_workflow.p - seisflows_paths.json seisflows_solver.p - +We can see that our gradient (Vs kernel) is characterized by large red +and blue blobs. The blue colors in the kernel tell us that the initial +model is too fast, while red colors tell us that the initial model is +too slow (that is, **red==too slow** and **blue==too fast**). This makes +sense if we look at the checkerboard target model above, where the +perturbation is slow (red color) the corresponding kernel tells us the +initial (homogeneous halfspace) model is too fast (blue color). .. code:: ipython3 - # All of the parameters defined in parameters.yaml are saved in this - # internally-used JSON file - ! head output/seisflows_parameters.json + ! seisflows plot2d GRADIENT_01 vs_kernel --savefig g_01_vs.png + Image(filename='g_01_vs.png') .. parsed-literal:: - { - "ATTENUATION": false, - "BACKPROJECT": null, - "BEGIN": 1, - "CASE": "synthetic", - "COMPONENTS": "ZNE", - "DENSITY": "constant", - "DT": 0.06, - "END": 1, - "F0": 0.084, - - -.. code:: ipython3 - - # Similarly, paths that SeisFlows uses to navigate the system are stored - # in the seisflows_paths.json file - ! head output/seisflows_paths.json + Figure(707.107x707.107) -.. parsed-literal:: - { - "DATA": null, - "FUNC": "/home/bchow/Work/work/sf_specfem2d_example/scratch/scratch", - "GRAD": "/home/bchow/Work/work/sf_specfem2d_example/scratch/evalgrad", - "HESS": "/home/bchow/Work/work/sf_specfem2d_example/scratch/evalhess", - "LOCAL": null, - "LOGFILE": "/home/bchow/Work/work/sf_specfem2d_example/output_sf.txt", - "MASK": null, - "MODEL_INIT": "/home/bchow/Work/work/sf_specfem2d_example/specfem2d_workdir/OUTPUT_FILES_INIT", - "MODEL_TRUE": "/home/bchow/Work/work/sf_specfem2d_example/specfem2d_workdir/OUTPUT_FILES_TRUE", +.. image:: images/specfem2d_example_files/specfem2d_example_42_1.png -3. Run SeisFlows -~~~~~~~~~~~~~~~~~ -In this Section we will run SeisFlows to generate synthetic -seismograms, kernels, a gradient, and an updated velocity model. -3a. Forward simulations -^^^^^^^^^^^^^^^^^^^^^^^ +Visualizing the updated model +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -SeisFlows is an automated workflow tool, such that once we run -``seisflows submit`` we should not need to intervene in the workflow. -However the package does allow the User flexibility in how they want the -workflow to behave. +After two iterations, the updated model starts to take form. We can +clearly see that the lack of data coverage on the outer edges of the +model mean we do not see any appreciable update here, whereas the center +of the domain shows the strongest model updates which are starting to +resemble the checkerboard pattern shown in the target model. -For example, we can run our workflow in stages by taking advantage of -the ``stop_after`` and ``resume_from`` parameters. As their names -suggest, these parameters allow us to stop and resume the workflow at -certain stages (i.e., functions in workflow.main()). +With only 4 events and 2 iterations, we do not have quite enough +constraint to recover the sharp contrasts between checkers shown in the +Target model. We can see that data coverage, smearing and regularization +leads to more prominent slow (red) regions. -The available arguments for ``stop_after`` and ``resume_from`` are -discovered by running the command: ``seisflows print flow``, which tells -us what functions will be run from main(). +If we were to increase the number of events and iterations, will it help +our recovery of the target model? This task is left up to the reader! .. code:: ipython3 - ! seisflows print flow + ! seisflows plot2d MODEL_02 vs --savefig m_02_vs.png + Image(filename='m_02_vs.png') .. parsed-literal:: - SEISFLOWS WORKFLOW MAIN - //////////////////////// - Flow arguments for - - 1: setup - 2: initialize - 3: evaluate_gradient - 4: write_gradient - 5: compute_direction - 6: line_search - 7: finalize - 8: clean + Figure(707.107x707.107) --------------- -In an inversion (the workflow we have selected) the flow arguments are -described as: - -0. **setup:** Not technically listed in the flow arguments, runs setup() - for all SeisFlows modules. If running a synthetic-synthetic - workflow, solver.setup() will generate “data” by running the forward - solver using MODEL_TRUE -1. **initialize:** - - a. Call numerical solver to run forward simulations using MODEL_INIT, - generating synthetics - b. Evaluate the objective function by performing waveform comparisons - c. Prepare ``evaluate gradient`` step by generating adjoint sources - and auxiliary files - -2. **evaluate_gradient:** Call numerical solver to run adjoint - simulation, generating kernels -3. **write_gradient:** Combine all event kernels into a misfit kernel. - Optionally smooth and mask the misfit kernel -4. **compute_direction:** Call on the optimization library to scale the - misfit kernel into the gradient and compute a search direction -5. **line_search:** Perform a line search by algorithmically scaling the - gradient and evaluating the misfit function (forward simulations and - misfit quantification) until misfit is acceptably reduced -6. **finalize:** Run any finalization steps such as saving traces, - kernels, gradients and models to disk, setting up SeisFlows for any - subsequent iterations. -7. **clean:** Clean the scratch/ directory in preparation for subsequent - i - -Let’s set the ``stop_after`` argument to **initialize**, this will halt -the workflow after the intialization step. We’ll also set the -``verbose`` parameter to ‘False’, to keep the logging format relatively -simple. We will explore the ``verbose``\ ==True option in a later cell. -.. code:: ipython3 +.. image:: images/specfem2d_example_files/specfem2d_example_44_1.png - ! seisflows par stop_after initialize - ! seisflows par verbose False -.. parsed-literal:: +Re-creating kernels from Tape et al. 2007 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - STOP_AFTER: -> initialize - VERBOSE: False -> False +The 2D checkerboard model and source-receiver configuration that runs in +this example come from the published work of `Tape et +al. (2007) `__. +Here, Tape et al. generate event kernels for a number of individual +events (`Figure +9 `__, +shown below). This exercise illustrates how kernel features change for a +simple target model (the checkerboard) depending on the chosen +source-receiver geometry. +An attentive reader will notice that the misfit kernel we generated +above looks very similar to Panel (h) in the figure below. --------------- +.. image:: images/reference_figures/tape_etal_2007_fig9.jpeg -Now let’s run SeisFlows. There are a few ways to do this: ``submit``, -``resume``, and ``restart`` +Caption from publication: *Construction of a misfit kernel. (a)–(g) +Individual event kernels, each constructed via the method shown in Fig. +8 (which shows Event 5). The colour scale for each event kernel is shown +beneath (g). (h) The misfit kernel is simply the sum of the 25 event +kernels. (i) The source–receiver geometry and target phase‐speed model. +There are a total of N= 25 × 132 = 3300 measurements that are used in +constructing the misfit kernel (see Section 5).* -1. Since we already ran ``seisflows init``, the ``seisflows submit`` - option will not work, as SeisFlows considers this an active working - state and ``submit`` can only be run on uninitialized working states. -2. To run a workflow in an active working state ``resume`` will load the - current working state from the output/ directory and submit a - workflow given the current parameter file. -3. The ``restart`` command is simply a convenience function that runs - ``clean`` (to remove an active working state) and ``submit`` (to - submit a fresh working state). +Choosing an event +^^^^^^^^^^^^^^^^^ -Since we haven’t done anything in this working state, we will go with a -modified version of Option 3 by running ``clean`` and then ``submit``. -We’ll use the ``-f`` flag (stands for **‘force’**) to skip over the -standard input prompt that asks the User if they are sure they want to -clean and submit. +The Event ID that generated each kernel is specified in the title of +each sub plot (e.g., Panel. (a) corresponds to Event #1). We can attempt +to re-create these kernels by choosing specific event IDs to run Example +2 with. -But first we’ll try to run ``seisflows submit`` to show why Option 1 -**will not work**. +To specify the specific event ID, we can use the ``--event_id`` flag +when running Example 2. For this docs page we’ll choose Event #7, which +is represented by Panel (g) in the figure above. + +.. note:: + Our choice of preprocessing module, misfit function, gradient smoothing length, nonlinear optimization algorithm, etc. will affect how each event kernel is produced, and consequently how much they differ from the published kernels shown above. We do not expect to perfectly match the event kernels above, but rather to see that first order structure is the same. .. code:: ipython3 - ! seisflows submit -f + # Run the help message to view the description of the optional arguemnt --event_id + ! seisflows examples -h .. parsed-literal:: - 2022-04-29 12:32:17 | initializing SeisFlows in sys.modules - ================================================================================ - WARNING - /////// - Data from previous workflow found in working directory. + usage: seisflows examples [-h] [-r [SPECFEM2D_REPO]] [--nsta [NSTA]] + [--ntask [NTASK]] [--niter [NITER]] + [--event_id [EVENT_ID]] + [method] [choice] - > seisflows restart: delete data and start new workflow - > seisflows resume: resume existing workflow - ================================================================================ - - --------------- + Lists out available example problems and allows the user to run example + problems directly from the command line. Some example problems may have pre- + run prompts mainly involving the numerical solver + + positional arguments: + method Method for running the example problem. If + notprovided, simply prints out the list of available + example problems. If given as an integer value, will + print out the help message for the given example. If + 'run', will run the example. If 'setup' will simply + setup the example working directory but will not + execute `seisflows submit` + choice If `method` in ['setup', 'run'], integervalue + corresponding to the given example problem which can + listed using `seisflows examples` + + optional arguments: + -h, --help show this help message and exit + -r [SPECFEM2D_REPO], --specfem2d_repo [SPECFEM2D_REPO] + path to the SPECFEM2D directory which should contain + binary executables. If not given, assumes directory is + called 'specfem2d/' in the current working directory. + If that dir is not found, SPECFEM2D will be + downloaded, configured and compiled automatically in + the current working directory. + --nsta [NSTA] User-defined number of stations to use for the example + problem (1 <= NSTA <= 131). If not given, each example + has its own default. + --ntask [NTASK] User-defined number of events to use for the example + problem (1 <= NTASK <= 25). If not given, each example + has its own default. + --niter [NITER] User-defined number of iterations to run for the + example problem (1 <= NITER <= inf). If not given, + each example has its own default. + --event_id [EVENT_ID] + Allow User to choose a specific event ID from the Tape + 2007 example (1 <= EVENT_ID <= 25). If not used, + example will default to choosing sequential from 1 to + NTASK -**Okay, let’s go!** In the following cell we will run the SeisFlows -Inversion workflow. In the output cell we will see the logging -statements outputted by SeisFlows, both to stdout and to the output log -file (defaults to ./output_seisflows.txt) which details the progress of -our inversion .. code:: ipython3 - ! seisflows clean -f - ! seisflows submit -f + # Run command with open variable to set SPECFEM2D path. Choose event_id==7 and only run 1 iteration + ! seisflows examples run 2 -r ${PATH_TO_SPECFEM2D} --event_id 7 --niter 1 +Comparing kernels +^^^^^^^^^^^^^^^^^ -.. parsed-literal:: - - ================================================================================ - CLEAN - ///// - + skipping over: /home/bchow/Work/work/sf_specfem2d_example/parameters.yaml - - deleting file/folder: /home/bchow/Work/work/sf_specfem2d_example/scratch - - deleting file/folder: /home/bchow/Work/work/sf_specfem2d_example/stats - - deleting file/folder: /home/bchow/Work/work/sf_specfem2d_example/output - - deleting file/folder: /home/bchow/Work/work/sf_specfem2d_example/output_sf.txt - - deleting file/folder: /home/bchow/Work/work/sf_specfem2d_example/logs - ================================================================================ - 2022-04-29 12:38:37 | initializing SeisFlows in sys.modules - 2022-04-29 12:38:42 | copying par/log file to: /home/bchow/Work/work/sf_specfem2d_example/logs/output_sf_001.txt - 2022-04-29 12:38:42 | copying par/log file to: /home/bchow/Work/work/sf_specfem2d_example/logs/parameters_001.yaml - 2022-04-29 12:38:42 | exporting current working environment to disk - 2022-04-29 12:38:42 | - //////////////////////////////////////////////////////////////////////////////// - WORKFLOW WILL STOP AFTER FUNC: 'initialize' - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:38:42 | - ================================================================================ - STARTING INVERSION WORKFLOW - ================================================================================ - 2022-04-29 12:38:42 | - //////////////////////////////////////////////////////////////////////////////// - ITERATION 1 / 1 - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:38:42 | - //////////////////////////////////////////////////////////////////////////////// - PERFORMING MODULE SETUP - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:38:42 | misfit function is: 'waveform' - 2022-04-29 12:38:43 | writing line search history file: - /home/bchow/Work/work/sf_specfem2d_example/stats/line_search.txt - 2022-04-29 12:38:44 | checking poissons ratio for: 'm_new.npy' - 2022-04-29 12:38:44 | model parameters (m_new.npy i01s00): - 2022-04-29 12:38:44 | 5800.00 <= vp <= 5800.00 - 2022-04-29 12:38:44 | 3500.00 <= vs <= 3500.00 - 2022-04-29 12:38:44 | 0.21 <= pr <= 0.21 - 2022-04-29 12:38:46 | setting up solver on system... - 2022-04-29 12:38:46 | checkpointing working environment to disk - 2022-04-29 12:38:47 | exporting current working environment to disk - 2022-04-29 12:38:48 | running task solver.setup 1 times - 2022-04-29 12:38:48 | initializing 1 solver directories - 2022-04-29 12:38:53 | source 001 symlinked as mainsolver - 2022-04-29 12:38:53 | generating 'data' with MODEL_TRUE synthetics - 2022-04-29 12:39:00 | running mesh generation for MODEL_INIT - 2022-04-29 12:39:02 | - ================================================================================ - INITIALIZING INVERSION - ================================================================================ - 2022-04-29 12:39:02 | - EVALUATE OBJECTIVE FUNCTION - -------------------------------------------------------------------------------- - 2022-04-29 12:39:02 | saving model 'm_new.npy' to: - /home/bchow/Work/work/sf_specfem2d_example/scratch/evalgrad/model - 2022-04-29 12:39:03 | evaluating objective function 1 times on system... - 2022-04-29 12:39:03 | checkpointing working environment to disk - 2022-04-29 12:39:05 | exporting current working environment to disk - 2022-04-29 12:39:05 | running task solver.eval_func 1 times - 2022-04-29 12:39:05 | running forward simulations - 2022-04-29 12:39:11 | calling preprocess.prepare_eval_grad() - 2022-04-29 12:39:11 | preparing files for gradient evaluation - 2022-04-29 12:39:11 | exporting residuals to: - /home/bchow/Work/work/sf_specfem2d_example/scratch/evalgrad - 2022-04-29 12:39:12 | summing residuals with preprocess module - 2022-04-29 12:39:12 | saving misfit 1.748E-03 to tag 'f_new.txt' - 2022-04-29 12:39:12 | - ================================================================================ - FINISHED FLOW EXECUTION - ================================================================================ - 2022-04-29 12:39:12 | - ================================================================================ - FINISHED INVERSION WORKFLOW - ================================================================================ - - -.. note:: - For a detailed exploration of a SeisFlows working directory, see the `working directory `__ documentation page where we explain each of the files and directories that have been generated during this workflow. Below we just look at two files which are required for our adjoint simulation, the adjoint sources (.adj) and STATIONS_ADJOINT file +This workflow should run faster than Example #2 proper, because we are +only using 1 event and 1 iteration. In the same vein as above, we can +visualize the output gradient to see how well it matches with those +published in Tape et al. .. code:: ipython3 - # The adjoint source is created in the same format as the synthetics (two-column ASCII) - ! head scratch/solver/001/traces/adj/AA.S0001.BXY.adj + %cd ~/sfexamples/example_2a + ! ls .. parsed-literal:: - -48.0000000 0.0000000 - -47.9400000 0.0000000 - -47.8800000 0.0000000 - -47.8200000 0.0000000 - -47.7600000 0.0000000 - -47.7000000 0.0000000 - -47.6400000 0.0000000 - -47.5800000 0.0000000 - -47.5200000 0.0000000 - -47.4600000 0.0000000 + /home/bchow/Work/work/seisflows_example/example_2a + logs parameters.yaml sflog.txt specfem2d + output scratch sfstate.txt specfem2d_workdir .. code:: ipython3 - # We can also see that we have generated a STATIONS_ADJOINT file, which is required for - # running the adjoint simulations (i.e., evaluate the gradient) - ! head scratch/solver/001/DATA/STATIONS_ADJOINT + ! seisflows plot2d GRADIENT_01 vs_kernel --save g_01_vs.png + Image("g_01_vs.png") .. parsed-literal:: - S0001 AA 180081.4100000 388768.7100000 0.0 0.0 + Figure(707.107x707.107) -3b. Adjoint simulations -^^^^^^^^^^^^^^^^^^^^^^^ -Now that we have all the required files for running an adjoint -simulation (*.adj waveforms and STATIONS_ADJOINT file), we can continue -with the SeisFlows Inversion workflow. No need to edit the Par_file or -anything like that, SeisFlows will take care of that under the hood. We -simply need to tell the workflow (via the parameters.yaml file) to -``resume_from`` the correct function. We can have a look at these -functions again: -.. code:: ipython3 +.. image:: images/specfem2d_example_files/specfem2d_example_54_1.png - ! seisflows print flow -.. parsed-literal:: +From the above figure we can see that the first order structure of our +Vs event kernel is very similar to Panel (g) from Figure 9 of Tape et +al. (2007). As mentioned, any differences between the kernel will be due +to the differences in the parameters available to us during the +inversion. - SEISFLOWS WORKFLOW MAIN - //////////////////////// - Flow arguments for - - 1: setup - 2: initialize - 3: evaluate_gradient - 4: write_gradient - 5: compute_direction - 6: line_search - 7: finalize - 8: clean +Creating all the other kernels shown in Figure 9 of Tape et al. is an +exercise left to the reader. +Example #3: En-masse Forward Simulations +---------------------------------------- -.. code:: ipython3 +SeisFlows is not just an inversion tool, it can also be used to simplify +workflows to run forward simulations using external numerical solvers. +In Example #3 we use SeisFlows to run en-masse forward simulations. - # We'll stop just before the line search so that we can take a look at the files - # generated during the middle tasks - ! seisflows par resume_from evaluate_gradient - ! seisflows par stop_after compute_direction +Motivation +~~~~~~~~~~ +Imagine a User who has a velocity model of a specific region (at any +scale). This User would like to run a number of forward simulations for +**N** events and **S** stations to generate **N** :math:`\times` **S** +synthetic seismograms. These synthetics may be used directly, or +compared to observed seismograms to understand how well the regional +velocity model characterizes actual Earth structure. -.. parsed-literal:: - - RESUME_FROM: -> evaluate_gradient - STOP_AFTER: initialize -> compute_direction +If **N** is large this effort may require a large number of manual +tasks, including the creation of working directories, editing submit +calls (if working on a cluster), and book keeping for files generated by +the external solver. SeisFlows is here to automate all of these tasks. +Running the example +~~~~~~~~~~~~~~~~~~~ .. code:: ipython3 - # We can use the `seisflows resume` command to continue an active workflow - # again we use the '-f' flag to skip past the user-input stage. - ! seisflows resume -f + # Run the help dialogue to see what occurs in Example 3 + ! seisflows examples 3 .. parsed-literal:: - 2022-04-29 12:41:21 | copying par/log file to: /home/bchow/Work/work/sf_specfem2d_example/logs/output_sf_002.txt - 2022-04-29 12:41:21 | copying par/log file to: /home/bchow/Work/work/sf_specfem2d_example/logs/parameters_002.yaml - 2022-04-29 12:41:21 | exporting current working environment to disk - 2022-04-29 12:41:21 | - //////////////////////////////////////////////////////////////////////////////// - WORKFLOW WILL RESUME FROM FUNC: 'evaluate_gradient' - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:41:21 | - //////////////////////////////////////////////////////////////////////////////// - WORKFLOW WILL STOP AFTER FUNC: 'compute_direction' - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:41:21 | - ================================================================================ - STARTING INVERSION WORKFLOW - ================================================================================ - 2022-04-29 12:41:21 | - //////////////////////////////////////////////////////////////////////////////// - ITERATION 1 / 1 - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:41:21 | - //////////////////////////////////////////////////////////////////////////////// - EVALUATING GRADIENT - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:41:21 | evaluating gradient 1 times on system... - 2022-04-29 12:41:21 | checkpointing working environment to disk - 2022-04-29 12:41:22 | exporting current working environment to disk - 2022-04-29 12:41:23 | running task solver.eval_grad 1 times - 2022-04-29 12:41:23 | running adjoint simulations - 2022-04-29 12:41:38 | exporting kernels to: - /home/bchow/Work/work/sf_specfem2d_example/scratch/evalgrad - 2022-04-29 12:41:38 | - //////////////////////////////////////////////////////////////////////////////// - POSTPROCESSING KERNELS - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:41:38 | processing kernels into gradient on system... - 2022-04-29 12:41:38 | checkpointing working environment to disk - 2022-04-29 12:41:39 | exporting current working environment to disk - 2022-04-29 12:41:39 | running task postprocess.process_kernels 1 times - 2022-04-29 12:41:39 | saving summed kernels to: - /home/bchow/Work/work/sf_specfem2d_example/scratch/evalgrad/kernels/sum - 2022-04-29 12:41:41 | - //////////////////////////////////////////////////////////////////////////////// - COMPUTING SEARCH DIRECTION - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:41:41 | computing search direction with L-BFGS - 2022-04-29 12:41:41 | first L-BFGS iteration, setting search direction as inverse gradient - 2022-04-29 12:41:41 | - ================================================================================ - FINISHED FLOW EXECUTION - ================================================================================ - 2022-04-29 12:41:41 | + No existing SPECFEM2D repo given, default to: /home/bchow/Work/work/seisflows_example/example_2/specfem2d + + @@@@@@@@@@ + .@@@@. .%&( %@. + @@@@ @@@@ &@@@@@@ ,%@ + @@@@ @@@, /@@ @ + @@@ @@@@ @@@ @ + @@@@ @@@@ @@@ @ @ + @@@ @@@@ ,@@@ @ @ + @@@@ @@@@ @@@@ @@ @ @ + @@@@ @@@@@ @@@@@ @@@ @@ @ + @@@@ @@@@@ @@@@@@@@@@@@@@ @@ @ + @@@@ @@@@@@ @@@& @@@ @ + @@@@@ @@@@@@@@ %@@@@# @@ + @@@@# @@@@@@@@@@@@@@@@@ @@ + &@@@@@ @@@@( @@& + @@@@@@@ /@@@@ + @@@@@@@@@@@@@@@@@ + @@@@@@@@@@ + + ================================================================================ - FINISHED INVERSION WORKFLOW + SEISFLOWS EXAMPLE 3 + /////////////////// + This is a [SPECFEM2D] [WORKSTATION] example, which will run forward simulations + to generate synthetic seismograms through a homogeneous halfspace starting + model. This example uses no preprocessing or optimization modules. [10 events, + 25 stations] The tasks involved include: + + 1. (optional) Download, configure, compile SPECFEM2D + 2. [Setup] a SPECFEM2D working directory + 3. [Setup] starting model from 'Tape2007' example + 4. [Setup] a SeisFlows working directory + 5. [Run] the forward simulation workflow ================================================================================ --------------- - -The functions **evaluate_gradient()** through **compute_direction()** -have run adjoint simulations to generate event kernels and sum the -kernels into the misfit kernel. - - **NOTE**: Because we only have one event, our misfit kernel is just - exactly our event kernel. And since we did not specify any smoothing - lenghts (PAR.SMOOTH_H and PAR.SMOOTH_V), no smoothing of the gradient - has occurred. - -Using the L-BFGS optimization algorithm, SeisFlows has computed a -search direction that will be used in the line search to search for a -best fitting model which optimally reduces the objective function. We -can take a look at where SeisFlows has stored the information relating -to kernel generation and the optimization computation. - .. code:: ipython3 - # Gradient evaluation files are stored here, the kernels are stored separately from the gradient incase - # the user wants to manually manipulate them - ! ls scratch/evalgrad - - -.. parsed-literal:: + # Run command with open variable to set SPECFEM2D path + ! seisflows examples run 3 -r ${PATH_TO_SPECFEM2D} - gradient kernels model residuals +You will be met with the following log message after succesful completion of the example problem +.. code:: bash -.. code:: ipython3 - - # SeisFlows stores all kernels and gradient information as SPECFEM binary (.bin) files - ! ls scratch/evalgrad/gradient - - -.. parsed-literal:: + ================================================================================ + EXAMPLE COMPLETED SUCCESFULLY + ================================================================================ - proc000000_vp_kernel.bin proc000000_vs_kernel.bin +Understanding example outputs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This example does not produce gradients or updated models, only +synthetic seismograms. We can view these seismograms using the +``seisflows plotst`` command, which is used to quickly plot synthetic +seismograms (using ObsPy under the hood). .. code:: ipython3 - # Kernels are stored on a per-event basis, and summed together (sum/). If smoothing was performed, - # we would see both smoothed and unsmoothed versions of the misfit kernel - ! ls scratch/evalgrad/kernels + %cd ~/sfexamples/example_3 + ! ls .. parsed-literal:: - 001 sum - - -.. code:: ipython3 - - # We can see that some new values have been stored in prepartion for the line search, - # including g_new (current gradient) and p_new (current search direction). These are also - # stored as vector NumPy arrays (.npy files) - ! ls scratch/optimize - - -.. parsed-literal:: + /home/bchow/Work/work/seisflows_example/example_3 + logs parameters.yaml sflog.txt specfem2d + output scratch sfstate.txt specfem2d_workdir - f_new.txt g_new.npy LBFGS m_new.npy p_new.npy +In this example, we have set the ``export_traces`` parameter to +**True**, which tells SeisFlows to store synthetic waveforms generated +during the workflow in the ``output/`` directory. Under the hood, +SeisFlows is copying all synthetic seismograms from the Solver’s +``scratch/`` directory, to a more permanent location. .. code:: ipython3 - p_new = np.load("scratch/optimize/p_new.npy") - print(p_new) + # The `export_traces` parameter tells SeisFlows to save synthetics after each round of forward simulations + ! seisflows par export_traces .. parsed-literal:: - [-0.00000000e+00 -0.00000000e+00 -0.00000000e+00 ... -3.96447909e-11 - -2.00156454e-11 -2.61676726e-12] + export_traces: True --------------- - -3c. Line search and model update -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Let’s finish off the inversion by running through the line search, which -will generate new models using the gradient, evaluate the objective -function by running forward simulations, and comparing the evaluated -objective function with the value obtained in **initialize**. -Satisfactory reduction in the objective function will result in a -termination of the line search. We are using a bracketing line search -here (CITE RYANS PAPER), which requires finding models which both -increase and decrease the misfit with respect to the initial evaluation. -Therefore it will likely take more than two trial steps to complete the -line search - .. code:: ipython3 - ! seisflows par resume_from line_search # resume from the line search - ! seisflows par stop_after finalize # We don't want to run the clean() argument so that we can explore the dir + # Exported traces will be stored in the `output` directory + ! ls output .. parsed-literal:: - RESUME_FROM: evaluate_gradient -> line_search - STOP_AFTER: compute_direction -> finalize + MODEL_INIT solver .. code:: ipython3 - ! seisflows resume -f + # Synthetics will be stored on a per-event basis, and in the format that the external solver created them + ! ls output/solver/ + ! echo + ! ls output/solver/001/syn .. parsed-literal:: - 2022-04-29 12:42:40 | copying par/log file to: /home/bchow/Work/work/sf_specfem2d_example/logs/output_sf_003.txt - 2022-04-29 12:42:40 | copying par/log file to: /home/bchow/Work/work/sf_specfem2d_example/logs/parameters_003.yaml - 2022-04-29 12:42:40 | exporting current working environment to disk - 2022-04-29 12:42:42 | - //////////////////////////////////////////////////////////////////////////////// - WORKFLOW WILL RESUME FROM FUNC: 'line_search' - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:42:42 | - //////////////////////////////////////////////////////////////////////////////// - WORKFLOW WILL STOP AFTER FUNC: 'finalize' - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:42:42 | - ================================================================================ - STARTING INVERSION WORKFLOW - ================================================================================ - 2022-04-29 12:42:42 | - //////////////////////////////////////////////////////////////////////////////// - ITERATION 1 / 1 - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:42:42 | - ================================================================================ - CONDUCTING LINE SEARCH (i01s00) - ================================================================================ - 2022-04-29 12:42:42 | max step length safeguard is: 5.26E+10 - 2022-04-29 12:42:42 | - EVALUATE BRACKETING LINE SEARCH - -------------------------------------------------------------------------------- - 2022-04-29 12:42:42 | step length(s) = 0.00E+00 - 2022-04-29 12:42:42 | misfit val(s) = 1.75E-03 - 2022-04-29 12:42:42 | first iteration, guessing trial step - 2022-04-29 12:42:42 | initial step length safegaurd, setting manual step length - 2022-04-29 12:42:42 | manually set initial step length: 5.26E+09 - 2022-04-29 12:42:42 | checking poissons ratio for: 'm_try.npy' - 2022-04-29 12:42:42 | model parameters (m_try.npy i01s00): - 2022-04-29 12:42:42 | 5800.00 <= vp <= 5800.00 - 2022-04-29 12:42:42 | 3278.69 <= vs <= 3790.00 - 2022-04-29 12:42:42 | 0.13 <= pr <= 0.27 - 2022-04-29 12:42:42 | - //////////////////////////////////////////////////////////////////////////////// - TRIAL STEP COUNT: i01s01 - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:42:42 | - EVALUATE OBJECTIVE FUNCTION - -------------------------------------------------------------------------------- - 2022-04-29 12:42:42 | saving model 'm_try.npy' to: - /home/bchow/Work/work/sf_specfem2d_example/scratch/scratch/model - 2022-04-29 12:42:42 | evaluating objective function 1 times on system... - 2022-04-29 12:42:42 | checkpointing working environment to disk - 2022-04-29 12:42:44 | exporting current working environment to disk - 2022-04-29 12:42:44 | running task solver.eval_func 1 times - 2022-04-29 12:42:44 | running forward simulations - 2022-04-29 12:42:49 | calling preprocess.prepare_eval_grad() - 2022-04-29 12:42:49 | preparing files for gradient evaluation - 2022-04-29 12:42:50 | exporting residuals to: - /home/bchow/Work/work/sf_specfem2d_example/scratch/scratch - 2022-04-29 12:42:50 | summing residuals with preprocess module - 2022-04-29 12:42:50 | saving misfit 9.850E-04 to tag 'f_try.txt' - 2022-04-29 12:42:50 | - EVALUATE BRACKETING LINE SEARCH - -------------------------------------------------------------------------------- - 2022-04-29 12:42:50 | step length(s) = 0.00E+00, 5.26E+09 - 2022-04-29 12:42:50 | misfit val(s) = 1.75E-03, 9.85E-04 - 2022-04-29 12:42:50 | misfit not bracketed, increasing step length - 2022-04-29 12:42:50 | checking poissons ratio for: 'm_try.npy' - 2022-04-29 12:42:50 | model parameters (m_try.npy i01s01): - 2022-04-29 12:42:50 | 5800.00 <= vp <= 5800.00 - 2022-04-29 12:42:50 | 3141.92 <= vs <= 3969.23 - 2022-04-29 12:42:50 | 0.06 <= pr <= 0.29 - 2022-04-29 12:42:50 | retrying with new trial step - 2022-04-29 12:42:50 | - //////////////////////////////////////////////////////////////////////////////// - TRIAL STEP COUNT: i01s02 - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 12:42:50 | - EVALUATE OBJECTIVE FUNCTION - -------------------------------------------------------------------------------- - 2022-04-29 12:42:50 | saving model 'm_try.npy' to: - /home/bchow/Work/work/sf_specfem2d_example/scratch/scratch/model - 2022-04-29 12:42:51 | evaluating objective function 1 times on system... - 2022-04-29 12:42:51 | checkpointing working environment to disk - 2022-04-29 12:42:52 | exporting current working environment to disk - 2022-04-29 12:42:53 | running task solver.eval_func 1 times - 2022-04-29 12:42:53 | running forward simulations - 2022-04-29 12:42:59 | calling preprocess.prepare_eval_grad() - 2022-04-29 12:42:59 | preparing files for gradient evaluation - 2022-04-29 12:42:59 | exporting residuals to: - /home/bchow/Work/work/sf_specfem2d_example/scratch/scratch - 2022-04-29 12:43:00 | summing residuals with preprocess module - 2022-04-29 12:43:00 | saving misfit 1.227E-03 to tag 'f_try.txt' - 2022-04-29 12:43:00 | - EVALUATE BRACKETING LINE SEARCH - -------------------------------------------------------------------------------- - 2022-04-29 12:43:00 | step length(s) = 0.00E+00, 5.26E+09, 8.51E+09 - 2022-04-29 12:43:00 | misfit val(s) = 1.75E-03, 9.85E-04, 1.23E-03 - 2022-04-29 12:43:00 | bracket okay, step length reasonable, pass - 2022-04-29 12:43:00 | checking poissons ratio for: 'm_try.npy' - 2022-04-29 12:43:00 | model parameters (m_try.npy i01s02): - 2022-04-29 12:43:00 | 5800.00 <= vp <= 5800.00 - 2022-04-29 12:43:00 | 3278.69 <= vs <= 3790.00 - 2022-04-29 12:43:00 | 0.13 <= pr <= 0.27 - 2022-04-29 12:43:00 | trial step successful - 2022-04-29 12:43:00 | - FINALIZING LINE SEARCH - -------------------------------------------------------------------------------- - 2022-04-29 12:43:00 | shifting current model (new) to previous model (old) - 2022-04-29 12:43:00 | setting accepted line search model as current model - 2022-04-29 12:43:00 | current misfit is f_new.txt=9.850E-04 - 2022-04-29 12:43:00 | writing optimization stats to: stats - 2022-04-29 12:43:00 | resetting line search step count to 0 - 2022-04-29 12:43:00 | - ================================================================================ - FINALIZING ITERATION 1 - ================================================================================ - 2022-04-29 12:43:00 | exporting current working environment to disk - 2022-04-29 12:43:01 | saving model 'm_new.npy' to path: - /home/bchow/Work/work/sf_specfem2d_example/output/model_0001 - 2022-04-29 12:43:02 | saving gradient to path: - /home/bchow/Work/work/sf_specfem2d_example/output/gradient_0001 - 2022-04-29 12:43:02 | - ================================================================================ - FINISHED FLOW EXECUTION - ================================================================================ - 2022-04-29 12:43:02 | - ================================================================================ - FINISHED INVERSION WORKFLOW - ================================================================================ - + 001 002 003 004 005 006 007 008 009 010 + + AA.S000000.BXY.semd AA.S000009.BXY.semd AA.S000018.BXY.semd + AA.S000001.BXY.semd AA.S000010.BXY.semd AA.S000019.BXY.semd + AA.S000002.BXY.semd AA.S000011.BXY.semd AA.S000020.BXY.semd + AA.S000003.BXY.semd AA.S000012.BXY.semd AA.S000021.BXY.semd + AA.S000004.BXY.semd AA.S000013.BXY.semd AA.S000022.BXY.semd + AA.S000005.BXY.semd AA.S000014.BXY.semd AA.S000023.BXY.semd + AA.S000006.BXY.semd AA.S000015.BXY.semd AA.S000024.BXY.semd + AA.S000007.BXY.semd AA.S000016.BXY.semd + AA.S000008.BXY.semd AA.S000017.BXY.semd -From the log statements above, we can see that the SeisFlows line -search required 2 trial steps, where it modified values of Vs until -satisfactory reduction in the objective function was met. This was the -final step in the iteration, and so the finalization step made -last-minute preparations for a subsequent iteration. .. code:: ipython3 - # We can see that we have 'new' and 'old' values for each of the optimization values, - # representing the previous model (M00) and the current model (M01). - ! ls scratch/optimize - - -.. parsed-literal:: + # The `plotst` function allows us to quickly visualize output seismograms + ! seisflows plotst output/solver/001/syn/AA.S000000.BXY.semd --save AA.S000000.BXY.semd.png + Image(filename="AA.S000000.BXY.semd.png") - alpha.npy f_old.txt g_old.npy m_new.npy p_old.npy - f_new.txt f_try.txt LBFGS m_old.npy -.. code:: ipython3 - # The stats/ directory contains text files describing the optimization/line search - ! ls stats +.. image:: images/specfem2d_example_files/specfem2d_example_66_0.png -.. parsed-literal:: - factor.txt line_search.txt slope.txt theta.txt - gradient_norm_L1.txt misfit.txt step_count.txt - gradient_norm_L2.txt restarted.txt step_length.txt +.. code:: ipython3 + # `plotst` also takes wildcards to plot multiple synthetics in a single figure + ! seisflows plotst output/solver/001/syn/AA.S00000[123].BXY.semd --save AA.S000001-3.BXY.semd.png + Image(filename="AA.S000001-3.BXY.semd.png") -.. code:: ipython3 - # For example we can look at the step length chosen for the accepted trial step in the line search - ! cat stats/line_search.txt -.. parsed-literal:: +.. image:: images/specfem2d_example_files/specfem2d_example_67_0.png - ITER STEPLEN MISFIT - ========== ========== ========== - 1 0.000e+00 1.748e-03 - 5.261e+09 9.850e-04 - 8.512e+09 1.227e-03 - - -4. Conclusions -~~~~~~~~~~~~~~ - -We’ve now seen how SeisFlows runs an **Inversion** workflow using the -**Specfem2D** solver on a **serial** system (local workstation). More or -less, this is all you need to run SeisFlows with any combination of -modules. The specificities of a system or numerical solver are already -handled internally by SeisFlows, so if you want to use -Specmfe3D_Cartesian as your solver, you would only need to run -``seisflows par solver specfem3d`` at the beginning of your workflow -(you will also need to setup your Specfem3D models, similar to what we -did for Specfem2D here). To run on a slurm system like Chinook, you can -run ``seisflows par system chinook``. diff --git a/docs/start_here.rst b/docs/start_here.rst index 196ff578..d196ccb7 100644 --- a/docs/start_here.rst +++ b/docs/start_here.rst @@ -1,5 +1,5 @@ Getting started -================================= +================ Assuming installation detailed on the `home page `__ has completed successfully, you can start playing around with SeisFlows. @@ -19,6 +19,24 @@ Each sub-argument has it's own help message to further explain what it does. For more information on the SeisFlows command line tool, see the `command line tool `__ docs page. +Running tests +~~~~~~~~~~~~~ + +SeisFlows has some unit/integration tests that ensure the capabilities of +the package are working as intended. Tests should be run before and after any +edits to the source code are made. To run the tests, from the top level +`seisflows` directory: + +.. parsed-literal:: + + cd seisflows + cd tests + pytest + +If developing SeisFlows, please ensure that you run these tests before and after +any changes are made to ensure that your changes do not break intended package +functionality. + Running an example problem ~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/working_directory.rst b/docs/working_directory.rst index 7e67ea05..a370b6c5 100644 --- a/docs/working_directory.rst +++ b/docs/working_directory.rst @@ -1,24 +1,23 @@ -Working Directory Structure -=========================== +Working Directory +================= -SeisFlows hardcodes it’s own working directory when executing a -workflow. Below we explore the working directory set up by the -SPECFEM2D-workstation example. Working directories may change slightly -depending on the chosen workflow, but will more or less follow the -following structure. The two specfem2d directories listed below are not -part of the SeisFlows working directory. +SeisFlows sets it's own working directory when executing a workflow. Below we explore the working directory set up by the `SPECFEM2D-workstation example `__. Working directories may change slightly depending on the chosen workflow, but will more or less follow the same structure. + + **NOTE**: The two SPECFEM2D directories listed below (specfem2d/ & + specfem2d_workdir/) are not part of a standard SeisFlows working + directory. .. code:: ipython3 - %cd ~/Work/official/workshop_pyatoa_sf/ex1_specfem2d_workstation + %cd /home/bchow/Work/scratch ! ls .. parsed-literal:: - /home/bchow/Work/official/workshop_pyatoa_sf/ex1_specfem2d_workstation - logs output_sf.txt scratch stats - output parameters.yaml specfem2d_workdir + /home/bchow/Work/scratch + logs parameters.yaml sflog.txt specfem2d + output scratch sfstate.txt specfem2d_workdir -------------- @@ -26,11 +25,11 @@ part of the SeisFlows working directory. scratch/ -------- -The active working directory of SeisFlows where all of the heavy -lifting takes place. Each module in the SeisFlows package may have it’s -own sub-directory where it stores temporary work data. Additionally, we -have two eval*/ directories where objective function evaluation -(evalfunc) and gradient evaluation (evalgrad) files are stored. +The active working directory of SeisFlows where all of the heavy lifting +takes place. Each module in the SeisFlows package may have it’s own +sub-directory where it stores temporary work data. Additionally, we have +two eval*/ directories where objective function evaluation (eval_func) +and gradient evaluation (eval_grad) files are stored. .. code:: ipython3 @@ -39,7 +38,7 @@ have two eval*/ directories where objective function evaluation .. parsed-literal:: - evalfunc evalgrad optimize preprocess solver system + eval_func eval_grad optimize preprocess solver system .. warning:: @@ -62,7 +61,7 @@ contain all the necessary files to run SPECFEM binaries within). .. parsed-literal:: - 001 002 003 mainsolver + 001 002 003 mainsolver .. code:: ipython3 @@ -72,7 +71,9 @@ contain all the necessary files to run SPECFEM binaries within). .. parsed-literal:: - bin DATA kernel_paths mesher.log OUTPUT_FILES SEM solver.log traces + adj_solver.log combine_vs.log fwd_solver.log SEM + bin DATA kernel_paths traces + combine_vp.log fwd_mesher.log OUTPUT_FILES .. warning:: @@ -91,7 +92,7 @@ into observed (obs), synthetic (syn) and adjoint (adj) waveforms. .. parsed-literal:: - adj obs syn + adj obs syn .. code:: ipython3 @@ -101,7 +102,7 @@ into observed (obs), synthetic (syn) and adjoint (adj) waveforms. .. parsed-literal:: - AA.S0001.BXY.semd + AA.S0001.BXY.semd .. code:: ipython3 @@ -112,16 +113,16 @@ into observed (obs), synthetic (syn) and adjoint (adj) waveforms. .. parsed-literal:: - 251.39999999999998 -1.1814422395268879E-005 - 251.45999999999998 -1.1800275583562581E-005 - 251.51999999999998 -1.1769315129746346E-005 - 251.57999999999998 -1.1721248953632887E-005 - 251.63999999999999 -1.1655830825336088E-005 - 251.69999999999999 -1.1572872866742356E-005 - 251.75999999999999 -1.1472248505521453E-005 - 251.81999999999999 -1.1353902449899163E-005 - 251.88000000000000 -1.1217847351013855E-005 - 251.94000000000000 -1.1064166223014224E-005 + 251.39999999999998 -1.1814422395268879E-005 + 251.45999999999998 -1.1800275583562581E-005 + 251.51999999999998 -1.1769315129746346E-005 + 251.57999999999998 -1.1721248953632887E-005 + 251.63999999999999 -1.1655830825336088E-005 + 251.69999999999999 -1.1572872866742356E-005 + 251.75999999999999 -1.1472248505521453E-005 + 251.81999999999999 -1.1353902449899163E-005 + 251.88000000000000 -1.1217847351013855E-005 + 251.94000000000000 -1.1064166223014224E-005 optimize/ @@ -153,21 +154,21 @@ Optimization Variable Names are described as: .. parsed-literal:: - alpha.npy f_old.txt g_old.npy m_new.npy p_old.npy - f_new.txt f_try.txt LBFGS m_old.npy + alpha.txt f_new.txt f_try.txt m_new.npz output_optim.txt + checkpoint.npz f_old.txt g_old.npz m_old.npz p_old.npz .. code:: ipython3 import numpy as np - m_new = np.load("scratch/optimize/m_new.npy") - print(m_new) + m_new = np.load("scratch/optimize/m_new.npz") + print(m_new["vs"]) .. parsed-literal:: - [5800. 5800. 5800. ... 3499.77655379 3499.9021825 - 3499.99078301] + [[3500.0027437 3499.99441921 3499.90777902 ... 3499.77655378 + 3499.9021825 3499.99078301]] .. code:: ipython3 @@ -177,73 +178,92 @@ Optimization Variable Names are described as: .. parsed-literal:: - 2.591424e-03 - + 8.645199999999999153e-04 -evalfunc/ & evalgrad/ -~~~~~~~~~~~~~~~~~~~~~ -Scratch directories containing objective function evaluation and -gradient evaluation files. These include (1) the current **model** being -used for misfit evaluation, and (2) **residuals** which define the -misfit for each event. **evalgrad/** also contains **kernels** which -define per-event kernels which are summed and manipulated with the -postprocess module. +The ‘checkpoint.npz’ file contains information about the state of the +line search (controlled by the Optimization module). It is used to +resume failed or stopped line searches with minimal redundant use of +computational resources. .. code:: ipython3 - ! ls scratch/evalfunc - ! echo - ! ls scratch/evalgrad + line_search = np.load("scratch/optimize/checkpoint.npz") + + print(vars(line_search)["files"]) + + print("step count: ", line_search["step_count"]) + print("step lengths: ", line_search["step_lens"]) + print("misfit: ", line_search["func_vals"]) .. parsed-literal:: - model residuals - - kernels model residuals + ['restarted', 'func_vals', 'step_lens', 'gtg', 'gtp', 'step_count'] + step count: 0 + step lengths: [0.00000000e+00 2.32268310e+09 3.75818023e+09 1.59087505e+09 + 2.82031810e+09] + misfit: [0.00127902 0.00086452 0.00172904 0.00259356 0.00345808] + +eval_func/ & eval_grad/ +~~~~~~~~~~~~~~~~~~~~~~~ + +Scratch directories containing objective function evaluation and +gradient evaluation files. These include (1) the current **model** being +used for misfit evaluation, and (2) a **residual** file which defines +the misfit for each event. **eval_grad/** also contains **kernels** +which define per-event kernels which are summed and manipulated with the +postprocess module. .. code:: ipython3 - ! ls scratch/evalgrad/residuals + ! ls scratch/eval_func + ! echo + ! ls scratch/eval_grad .. parsed-literal:: - 001 002 003 + model residuals.txt + + gradient kernels misfit_kernel model residuals.txt .. code:: ipython3 - ! cat scratch/evalgrad/residuals/001 + ! cat scratch/eval_grad/residuals.txt .. parsed-literal:: - 2.413801941841247842e-02 - 2.413801941841247842e-02 - 2.413801941841247842e-02 + 2.41E-02 + 2.14E-02 + 1.55E-02 .. code:: ipython3 - ! ls scratch/evalgrad/kernels + ! ls scratch/eval_grad/kernels .. parsed-literal:: - 001 002 003 sum + 001 002 003 .. code:: ipython3 - ! ls scratch/evalgrad/kernels/sum + ! ls scratch/eval_grad/kernels/001 .. parsed-literal:: - proc000000_vp_kernel.bin proc000000_vs_kernel.bin + proc000000_bulk_beta_kernel.bin proc000000_rhop_kernel.bin + proc000000_bulk_c_kernel.bin proc000000_vp_kernel.bin + proc000000_kappa_kernel.bin proc000000_vs_kernel.bin + proc000000_mu_kernel.bin proc000000_weights_kernel.bin + proc000000_rho_kernel.bin system & preprocess @@ -253,24 +273,22 @@ These two directories are empty in our example problem, but are catch-all directories where module-specific files can be output. If you are extending SeisFlows with other base or subclasses, it is preferable to adhere to this structure where each module only interacts with it’s -own directory - -.. code:: ipython3 +own directory. - ! ls scratch/system - ! ls scratch/preprocess +When ``Pyaflowa`` is chosen as the preprocess module, it stores figures, +log files, and data (in ASDFDataSets) within its scratch directory. It +also specifies parameters for exporting these scratch files to disk for +more permanent storage. -------------- output/ ------- -The current active state of SeisFlows, containing pickle (.p) and JSON -files which describe a Python environment of a current workflow. -Additionally files to be permanently saved (e.g., models, graidents, -traces) can be located here. These are tagged in ascending order, e.g., -model_0001 refers to the updated model derived during the first -iteration. +Output files to be permanently saved (e.g., models, graidents, traces) +can be located in this directory. These are tagged in ascending order. +Because we did not run the finalization task in our SPECFEM2D problem, +the output directory only contains our initial model. .. code:: ipython3 @@ -279,31 +297,17 @@ iteration. .. parsed-literal:: - gradient_0001 seisflows_optimize.p seisflows_solver.p - kwargs seisflows_parameters.json seisflows_system.p - model_0001 seisflows_paths.json seisflows_workflow.p - model_init seisflows_postprocess.p - model_true seisflows_preprocess.p - - -.. code:: ipython3 - - ! ls output/model_0001 - - -.. parsed-literal:: - - proc000000_vp.bin proc000000_vs.bin + MODEL_INIT .. code:: ipython3 - ! ls output/gradient_0001 + ! ls output/MODEL_INIT .. parsed-literal:: - proc000000_vp_kernel.bin proc000000_vs_kernel.bin + proc000000_vp.bin proc000000_vs.bin -------------- @@ -323,106 +327,119 @@ other directory) copies are saved to this directory. .. parsed-literal:: - output_sf_001.txt parameters_001.yaml + 0001_00.log 0002_02.log 0004_01.log 0006_00.log parameters_002.yaml + 0001_01.log 0003_00.log 0004_02.log 0006_01.log parameters_003.yaml + 0001_02.log 0003_01.log 0005_00.log 0006_02.log sflog_001.txt + 0002_00.log 0003_02.log 0005_01.log 0007_00.log sflog_002.txt + 0002_01.log 0004_00.log 0005_02.log parameters_001.yaml sflog_003.txt -------------- -stats/ ------- - -Text files describing the optimization statistics of the current -workflow. This directory is only relevant if you are running an -inversion workflow. - -.. code:: ipython3 - - ! ls stats - - -.. parsed-literal:: - - factor.txt line_search.txt slope.txt theta.txt - gradient_norm_L1.txt misfit.txt step_count.txt - gradient_norm_L2.txt restarted.txt step_length.txt +sflog.txt +--------- +The main log file for SeisFlows, where all log statements written to +stdout are recorded during a workflow. Allows a user to come back to a +workflow and understand the tasks completed and any important +information collected during the workflow .. code:: ipython3 - ! cat stats/step_count.txt + ! head -50 sflog.txt .. parsed-literal:: - ITER STEP_COUNT - ==== ================== - 1 0.000000E+00 - 1 2.000000E+00 + 2022-08-16 14:32:48 (I) | + ================================================================================ + SETTING UP INVERSION WORKFLOW + ================================================================================ + 2022-08-16 14:32:55 (D) | running setup for module 'system.Workstation' + 2022-08-16 14:32:57 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/sflog_001.txt + 2022-08-16 14:32:57 (D) | copying par/log file to: /home/bchow/Work/scratch/logs/parameters_001.yaml + 2022-08-16 14:32:57 (D) | running setup for module 'solver.Specfem2D' + 2022-08-16 14:32:57 (I) | initializing 3 solver directories + 2022-08-16 14:32:57 (D) | initializing solver directory source: 001 + 2022-08-16 14:33:04 (D) | linking source '001' as 'mainsolver' + 2022-08-16 14:33:04 (D) | initializing solver directory source: 002 + 2022-08-16 14:33:09 (D) | initializing solver directory source: 003 + 2022-08-16 14:33:16 (D) | running setup for module 'preprocess.Default' + 2022-08-16 14:33:16 (D) | running setup for module 'optimize.Gradient' + 2022-08-16 14:33:17 (I) | no optimization checkpoint found, assuming first run + 2022-08-16 14:33:17 (I) | re-loading optimization module from checkpoint + 2022-08-16 14:33:17 (I) | + //////////////////////////////////////////////////////////////////////////////// + RUNNING ITERATION 01 + //////////////////////////////////////////////////////////////////////////////// + 2022-08-16 14:33:17 (I) | + ================================================================================ + RUNNING INVERSION WORKFLOW + ================================================================================ + 2022-08-16 14:33:17 (I) | + //////////////////////////////////////////////////////////////////////////////// + EVALUATING MISFIT FOR INITIAL MODEL + //////////////////////////////////////////////////////////////////////////////// + 2022-08-16 14:33:17 (I) | checking initial model parameters + 2022-08-16 14:33:17 (I) | 5800.00 <= vp <= 5800.00 + 2022-08-16 14:33:17 (I) | 2600.00 <= rho <= 2600.00 + 2022-08-16 14:33:17 (I) | 3500.00 <= vs <= 3500.00 + 2022-08-16 14:33:17 (I) | checking true/target model parameters + 2022-08-16 14:33:17 (I) | 5900.00 <= vp <= 5900.00 + 2022-08-16 14:33:17 (I) | 2600.00 <= rho <= 2600.00 + 2022-08-16 14:33:17 (I) | 3550.00 <= vs <= 3550.00 + 2022-08-16 14:33:17 (I) | preparing observation data for source 001 + 2022-08-16 14:33:17 (I) | running forward simulation w/ target model for 001 + 2022-08-16 14:33:21 (I) | evaluating objective function for source 001 + 2022-08-16 14:33:21 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:33:25 (D) | quantifying misfit with 'Default' + 2022-08-16 14:33:25 (I) | preparing observation data for source 002 + 2022-08-16 14:33:25 (I) | running forward simulation w/ target model for 002 + 2022-08-16 14:33:29 (I) | evaluating objective function for source 002 + 2022-08-16 14:33:29 (D) | running forward simulation with 'Specfem2D' + 2022-08-16 14:33:33 (D) | quantifying misfit with 'Default' + 2022-08-16 14:33:33 (I) | preparing observation data for source 003 + 2022-08-16 14:33:33 (I) | running forward simulation w/ target model for 003 + 2022-08-16 14:33:36 (I) | evaluating objective function for source 003 -------------- -output_sf.txt --------------- +sfstate.txt +----------- -The main log file for SeisFlows, where all log statements written to -stdout are recorded during a workflow. +A state file which tracks the progress of a workflow, allowing the User +to quickly resumed stopped or failed workflows without wasting +computational resources. The State file simply contains the names of +functions contained in the Workflow task list, as well as their +respective status, which can be ‘completed’, ‘failed’, or not available. .. code:: ipython3 - ! head -50 output_sf.txt + ! cat sfstate.txt .. parsed-literal:: - 2022-04-29 16:45:35 | initializing SeisFlows in sys.modules - 2022-04-29 16:45:39 | copying par/log file to: /home/bchow/Work/official/workshop_pyatoa_sf/ex1_specfem2d_workstation/logs/output_sf_001.txt - 2022-04-29 16:45:39 | copying par/log file to: /home/bchow/Work/official/workshop_pyatoa_sf/ex1_specfem2d_workstation/logs/parameters_001.yaml - 2022-04-29 16:45:39 | exporting current working environment to disk - 2022-04-29 16:45:39 | - //////////////////////////////////////////////////////////////////////////////// - WORKFLOW WILL STOP AFTER FUNC: 'finalize' - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 16:45:39 | - ================================================================================ - STARTING INVERSION WORKFLOW - ================================================================================ - 2022-04-29 16:45:39 | - //////////////////////////////////////////////////////////////////////////////// - ITERATION 1 / 1 - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 16:45:39 | - //////////////////////////////////////////////////////////////////////////////// - PERFORMING MODULE SETUP - //////////////////////////////////////////////////////////////////////////////// - 2022-04-29 16:45:39 | misfit function is: 'waveform' - 2022-04-29 16:45:40 | writing line search history file: - /home/bchow/Work/official/workshop_pyatoa_sf/ex1_specfem2d_workstation/stats/line_search.txt - 2022-04-29 16:45:40 | checking poissons ratio for: 'm_new.npy' - 2022-04-29 16:45:40 | model parameters (m_new.npy i01s00): - 2022-04-29 16:45:40 | 5800.00 <= vp <= 5800.00 - 2022-04-29 16:45:40 | 3500.00 <= vs <= 3500.00 - 2022-04-29 16:45:40 | 0.21 <= pr <= 0.21 - 2022-04-29 16:45:41 | setting up solver on system... - 2022-04-29 16:45:41 | checkpointing working environment to disk - 2022-04-29 16:45:42 | exporting current working environment to disk - 2022-04-29 16:45:43 | running task solver.setup 3 times - 2022-04-29 16:45:43 | initializing 3 solver directories - 2022-04-29 16:45:50 | source 001 symlinked as mainsolver - 2022-04-29 16:45:50 | generating 'data' with MODEL_TRUE synthetics - 2022-04-29 16:45:57 | running mesh generation for MODEL_INIT - 2022-04-29 16:46:27 | - ================================================================================ - INITIALIZING INVERSION - ================================================================================ - 2022-04-29 16:46:27 | - EVALUATE OBJECTIVE FUNCTION - -------------------------------------------------------------------------------- - 2022-04-29 16:46:27 | saving model 'm_new.npy' to: - /home/bchow/Work/official/workshop_pyatoa_sf/ex1_specfem2d_workstation/scratch/evalgrad/model - 2022-04-29 16:46:28 | evaluating objective function 3 times on system... - 2022-04-29 16:46:28 | checkpointing working environment to disk - 2022-04-29 16:46:29 | exporting current working environment to disk - 2022-04-29 16:46:30 | running task solver.eval_func 3 times - 2022-04-29 16:46:30 | running forward simulations - + # SeisFlows State File + # Tue Aug 16 14:33:17 2022 + # Acceptable states: 'completed', 'failed' + # ======================================= + evaluate_initial_misfit: completed + run_adjoint_simulations: completed + postprocess_event_kernels: completed + evaluate_gradient_from_kernels: completed + initialize_line_search: completed + perform_line_search: completed + iteration: 1 + +When submitting a workflow with an existing state file, the workflow +will check the status of each function. ‘Completed’ functions will be +skipped over. ‘Failed’ functions will be re-run. Users can delete lines +from the state file or change status’ manually to re-run tasks within +the list, taking care about the current configuration of the working +directory, which is intrinsically tied to the task list. + +For ‘Inversion’ workflows, the current ‘Iteration’ is also saved, +meaning re-submitted workflows will start at the previously checkpointed +iteration. diff --git a/requirements.txt b/requirements.txt index 9299cf23..586b5ccc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,6 @@ -obspy>=1.2.2 +obspy>=1.3.0 pyyaml>=5.3.1 +scipy<1.9.0 # scipy/obspy hanning window rename error @ 1.9.0 IPython>=7.31.1 +dill>=0.3.5.1 +pytest>=7.1.2 diff --git a/seisflows-super/postprocess/__init__.py b/seisflows-super/postprocess/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows-super/preprocess/__init__.py b/seisflows-super/preprocess/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows-super/solver/__init__.py b/seisflows-super/solver/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows-super/solver/specfem3d_maui.py b/seisflows-super/solver/specfem3d_maui.py deleted file mode 100644 index 882f2c53..00000000 --- a/seisflows-super/solver/specfem3d_maui.py +++ /dev/null @@ -1,293 +0,0 @@ -#!/usr/bin/env python3 -""" -This is the subclass seisflows.solver.Specfem3DMaui - -This class is almost the same as Specfem3D, except the setup step is run as -a serial task. This is useful as HPC job queues are long on Maui, so it saves -on job queue time by replacing it with a long-winded serial task. - -Additionally, misfit quantification is split off from the forward simulation, -because Anaconda is not available on the main cluster, so jobs need to be -submitted to an auxiliary cluster. This is paired with a new evaluate_function() -function defined by the InversionMaui workflow class. -""" -import os -import sys -import warnings - -from glob import glob -from seisflows.tools import unix -from seisflows.tools.wrappers import exists -from seisflows.config import custom_import, SeisFlowsPathsParameters -from seisflows.tools.specfem import call_solver, getpar, setpar - - -# Seisflows configuration -PAR = sys.modules['seisflows_parameters'] -PATH = sys.modules['seisflows_paths'] - -system = sys.modules['seisflows_system'] -preprocess = sys.modules['seisflows_preprocess'] - - -class Specfem3DMaui(custom_import("solver", "specfem3d")): - """ - Python interface to Specfem3D Cartesian. This subclass inherits functions - from seisflows.solver.specfem3d - - !!! See base class for method descriptions !!! - """ - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters(super().required) - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths - """ - if validate: - self.required.validate() - super().check(validate=False) - - def setup(self, model): - """ - Overload of solver.base.setup(), should be run as a single instance - - :type model: str - :param model: "init", "true", generates the mesh to be used for workflow - "true" used for synthetic-synthetic cases - "init" for initial model, default - :type model: str - :param model: model to setup, either 'true' or 'init' - """ - # Choice of model will determine which mesh to generate - self.generate_mesh(model_path=getattr(PATH, f"MODEL_{model.upper()}"), - model_name=f"model_{model.lower()}", - model_type="gll") - - self.distribute_databases() - - def generate_data(self): - """ - Overload seisflows.solver.base.generate_data. To be run in parallel - - Not used if PAR.CASE == "Data" - - Generates data in the synthetic-synthetic comparison case. - Automatically calls generate mesh for the true model, rather than - passing them in as kwargs. - - Also turns on attenuation for the forward model - !!! attenuation could be moved into parameters.yaml? !!! - """ - unix.cd(self.cwd) - - setpar(key="SIMULATION_TYPE", val="1", file="DATA/Par_file") - setpar(key="SAVE_FORWARD", val=".true.", file="DATA/Par_file") - if PAR.ATTENUATION: - setpar(key="ATTENUATION ", val=".true.", file="DATA/Par_file") - else: - setpar(key="ATTENUATION ", val=".false.", file="DATA/Par_file") - - call_solver(mpiexec=PAR.MPIEXEC, executable="bin/xspecfem3D") - - # move ASCII .sem? files into appropriate directory - unix.mv(src=glob(os.path.join("OUTPUT_FILES", self.data_wildcard)), - dst=os.path.join("traces", "obs")) - - # Export traces to permanent storage on disk - if PAR.SAVETRACES: - self.export_traces(os.path.join(PATH.OUTPUT, "traces", "obs")) - - def generate_mesh(self, model_path, model_name, model_type='gll'): - """ - Performs meshing and database generation as a serial task. Differs - slightly from specfem3d class as it only creates database files for - the main solver, which are then copied in serial by the function - distribute_databases() - - :type model_path: str - :param model_path: path to the model to be used for mesh generation - :type model_name: str - :param model_name: name of the model to be used as identification - :type model_type: str - :param model_type: available model types to be passed to the Specfem3D - Par_file. See Specfem3D Par_file for available options. - """ - available_model_types = ["gll"] - - assert(exists(model_path)), f"model {model_path} does not exist" - - model_type = model_type or getpar(key="MODEL", file="DATA/Par_file") - assert(model_type in available_model_types), \ - f"{model_type} not in available types {available_model_types}" - - # Ensure that we're running on the main solver only - assert(self.taskid == 0) - - unix.cd(self.cwd) - - # Check that the model parameter falls into the acceptable types - par = getpar("MODEL").strip() - assert(par in available_model_types), \ - f"Par_file {par} not in available types {available_model_types}" - - if par == "gll": - self.check_mesh_properties(model_path) - - # Copy model files and then run xgenerate databases - src = glob(os.path.join(model_path, "*")) - dst = self.model_databases - unix.cp(src, dst) - - call_solver(mpiexec=PAR.MPIEXEC, - executable="bin/xgenerate_databases") - - self.export_model(os.path.join(PATH.OUTPUT, model_name)) - - def eval_misfit(self, path='', export_traces=False): - """ - Performs function evaluation only, that is, the misfit quantification. - Forward simulations are performed in a separate function - - :type path: str - :param path: path in the scratch directory to use for I/O - :type export_traces: bool - :param export_traces: option to save the observation traces to disk - :return: - """ - preprocess.prepare_eval_grad(cwd=self.cwd, taskid=self.taskid, - source_name=self.source_name, - filenames=self.data_filenames - ) - if export_traces: - self.export_residuals(path) - - def eval_fwd(self, path=''): - """ - High level solver interface - - Performans forward simulations only, function evaluation is split off - into its own function - - :type path: str - :param path: path in the scratch directory to use for I/O - """ - unix.cd(self.cwd) - self.import_model(path) - self.forward() - - def distribute_databases(self): - """ - A serial task to distrubute the database files outputted by - xgenerate_databases from main solver to all other solver directories - """ - # Copy the database files but ignore any vt? files - src_db = glob(os.path.join(PATH.SOLVER, self.mainsolver, - "OUTPUT_FILES", "DATABASES_MPI", "*")) - for extension in [".vtu", ".vtk"]: - src_db = [_ for _ in src_db if extension not in _] - - # Copy the .h files from the mesher, Specfem needs these as well - src_h = glob(os.path.join(PATH.SOLVER, self.mainsolver, - "OUTPUT_FILES", "*.h")) - - for source_name in self.source_names: - # Ensure main solver is skipped - if source_name == self.mainsolver: - continue - # Copy database files to each of the other source directories - dst_db = os.path.join(PATH.SOLVER, source_name, - "OUTPUT_FILES", "DATABASES_MPI", "") - unix.cp(src_db, dst_db) - - # Copy mesher h files into the overlying directory - dst_h = os.path.join(PATH.SOLVER, source_name, "OUTPUT_FILES", "") - unix.cp(src_h, dst_h) - - def initialize_solver_directories(self): - """ - Creates solver directories in serial using a single node. - Should only be run by master job. - - Differs from Base initialize_solver_directories() as this serial task - will create directory structures for each source, rather than having - each source create its own. However the internal dir structure is the - same. - """ - for source_name in self.source_names: - cwd = os.path.join(PATH.SOLVER, source_name) - # Remove any existing scratch directory - unix.rm(cwd) - - # Create internal directory structure, change into directory to make - # all actions RELATIVE path actions - unix.mkdir(cwd) - unix.cd(cwd) - for cwd_dir in ["bin", "DATA", "OUTPUT_FILES/DATABASES_MPI", - "traces/obs", "traces/syn", "traces/adj"]: - unix.mkdir(cwd_dir) - - # Copy exectuables - src = glob(os.path.join(PATH.SPECFEM_BIN, "*")) - dst = os.path.join("bin", "") - unix.cp(src, dst) - - # Copy all input files except source files - src = glob(os.path.join(PATH.SPECFEM_DATA, "*")) - src = [_ for _ in src if self.source_prefix not in _] - dst = os.path.join("DATA", "") - unix.cp(src, dst) - - # symlink event source specifically - src = os.path.join(PATH.SPECFEM_DATA, - f"{self.source_prefix}_{source_name}") - dst = os.path.join("DATA", self.source_prefix) - unix.ln(src, dst) - - if source_name == self.mainsolver: - # Symlink taskid_0 as mainsolver in solver directory - unix.ln(source_name, os.path.join(PATH.SOLVER, "mainsolver")) - # Only check the solver parameters once - self.check_solver_parameter_files() - - def check_solver_parameter_files(self): - """ - Checks solver parameters. Only slightly different to Specfem3D as it - is run by the main task, not be an array process, so no need to check - task_id - """ - nt = getpar(key="NSTEP", cast=int) - dt = getpar(key="DT", cast=float) - - if nt != PAR.NT: - warnings.warn("Specfem3D NSTEP != PAR.NT\n" - "overwriting Specfem3D with Seisflows parameter" - ) - setpar(key="NSTEP", val=PAR.NT) - - if dt != PAR.DT: - warnings.warn("Specfem3D DT != PAR.DT\n" - "overwriting Specfem3D with Seisflows parameter" - ) - setpar(key="DT", val=PAR.DT) - - if self.mesh_properties.nproc != PAR.NPROC: - warnings.warn("Specfem3D mesh nproc != PAR.NPROC") - - if "MULTIPLES" in PAR: - raise NotImplementedError - - @property - def mainsolver(self): - """ - Ensure that the main solver has a consistent reference inside Solver - """ - return self.source_names[0] - diff --git a/seisflows-super/system/__init__.py b/seisflows-super/system/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows-super/system/chinook.py b/seisflows-super/system/chinook.py deleted file mode 100644 index f3c2792a..00000000 --- a/seisflows-super/system/chinook.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -""" -Chinook is the University of Alaska Fairbanks (UAF) high performance computer, -operated by the Geophysical Institute's Research Computing Systems (RCS). -Chinook operates on a SLURM workload manager and therefore overloads the SLURM -System module. Chinook-specific parameters and functions are defined here. - -Information on Chinook can be found here: -https://uaf-rcs.gitbook.io/uaf-rcs-hpc-docs/hpc -""" -import os -import sys -import logging - -from seisflows.config import custom_import, SeisFlowsPathsParameters - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - - -class Chinook(custom_import("system", "slurm")): - """ - System interface for the University of Alaska HPC Chinook, which operates - on a SLURM system. - """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - - :type partitions: dict - :param partitions: Chinook has various partitions which each have their - own number of cores per compute node, defined here - """ - super().__init__() - self.partitions = {"debug": 24, "t1small": 28, "t2small": 28, - "t1standard": 40, "t2standard": 40, "analysis": 28 - } - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters(super().required) - - sf.par("PARTITION", required=False, default="t1small", par_type=int, - docstr="Name of partition on main cluster, available: " - "analysis, t1small, t2small, t1standard, t2standard, gpu") - - sf.par("MPIEXEC", required=False, default="srun", par_type=str, - docstr="Function used to invoke parallel executables") - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths - """ - if validate: - self.required.validate() - super().check(validate=False) - - assert(PAR.PARTITION in self.partitions.keys()), \ - f"Chinook partition must be in {self.partitions.keys()}" - - assert(PAR.NODESIZE == self.partitions[PAR.PARTITION]), \ - (f"PARTITION {PAR.PARTITION} is expected to have NODESIZE=" - f"{self.partitions[PAR.PARTITION]}, not current {PAR.NODESIZE}") - diff --git a/seisflows-super/system/maui.py b/seisflows-super/system/maui.py deleted file mode 100644 index 57bd43e4..00000000 --- a/seisflows-super/system/maui.py +++ /dev/null @@ -1,209 +0,0 @@ -#!/usr/bin/env python3 -""" -Maui is a New Zealand eScience Infrastructure (NeSI) high performance computer. -Maui operates on a SLURM workload manager and therefore overloads the SLURM -System module. Maui-specific parameters and functions are defined here. - -Information on Maui can be found here: -https://support.nesi.org.nz/hc/en-gb/articles/360000163695-M%C4%81ui - -.. note:: - Python and conda capabilities are NOT accessible from Maui, these - capabilities have been shifted onto a separate cluster: Maui ancil - This subclass therefore moves all Python dependent capabilities - (i.e., SeisFlows3, Pyatoa) onto the ancilary cluster. - - See also: https://support.nesi.org.nz/hc/en-gb/articles/\ - 360000203776-M%C4%81ui-Ancillary-Nodes - -""" -import os -import sys -import math -import logging -from seisflows.config import custom_import, SeisFlowsPathsParameters, ROOT_DIR - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - - -class Maui(custom_import("system", "slurm")): - """ - System interface for Maui, which operates on a SLURM system - """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - - :type partitions: dict - :param partitions: Maui has various partitions which each have their - own number of cores per compute node, defined here - """ - super().__init__() - self.partitions = {"nesi_research": 40} - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters(super().required) - - sf.par("ACCOUNT", required=True, par_type=str, - docstr="The account name to submit jobs under") - - sf.par("CPUS_PER_TASK", required=False, default=1, par_type=int, - docstr="Multiple CPUS per task allows for multithreading jobs") - - sf.par("CLUSTER", required=False, default="maui", par_type=str, - docstr="Name of main cluster for parallel job submission") - - sf.par("PARTITION", required=False, default="nesi_research", - par_type=str, docstr="Name of partition on main cluster") - - sf.par("ANCIL_CLUSTER", required=False, default="maui_ancil", - par_type=str, - docstr="Name of ancillary cluster for prepost tasks") - - sf.par("ANCIL_PARTITION", required=False, default="nesi_prepost", - par_type=str, - docstr="Name of ancillary partition for prepost tasks") - - sf.par("ANCIL_TASKTIME", required=False, default="null", par_type=float, - docstr="Tasktime for prepost jobs on ancillary nodes") - - sf.par("NODESIZE", required=False, default=40, par_type=int, - docstr="The number of cores per node defined by the system") - - sf.par("MPIEXEC", required=False, default="srun", par_type=str, - docstr="Function used to invoke parallel executables") - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths - """ - if validate: - self.required.validate() - super().check(validate=False) - - assert(PAR.NODESIZE == self.partitions[PAR.PARTITION]), \ - (f"PARTITION {PAR.PARTITION} is expected to have NODESIZE=" - f"{self.partitions[PAR.PARTITION]}, not current {PAR.NODESIZE}") - - assert("SLURM_MEM_PER_CPU" in (PAR.ENVIRONS or "")), \ - ("Maui runs Slurm>=21 which enforces mutually exclusivity of Slurm " - "memory environment variables SLURM_MEM_PER_CPU and " - "SLURM_MEM_PER_NODE. Due to the cross-cluster nature of " - "running SeisFlows3 on Maui, we must remove one env. variable. " - "Please add 'SLURM_MEM_PER_CPU' to PAR.ENVIRONS.") - - def submit(self): - """ - Submits master job workflow to maui_ancil cluster as a single-core - process - - .. note:: - The master job must be run on maui_ancil because Maui does - not have the ability to run the command "sacct" - - .. note:: - We do not place SLURMARGS into the sbatch command to avoid the - export=None which will not propagate the conda environment - """ - maui_submit_call = " ".join([ - f"sbatch", - f"--account={PAR.ACCOUNT}", - f"--cluster={PAR.ANCIL_CLUSTER}", - f"--partition={PAR.ANCIL_PARTITION}", - f"--job-name={PAR.TITLE}", - f"--output={self.output_log}", - f"--error={self.error_log}", - f"--ntasks=1", - f"--cpus-per-task=1", - f"--time={PAR.WALLTIME:d}", - f"{os.path.join(ROOT_DIR, 'scripts', 'submit')}", - f"--output {PATH.OUTPUT}" - ]) - self.logger.debug(maui_submit_call) - super().submit(maui_submit_call) - - def run(self, classname, method, single=False, **kwargs): - """ - Runs task multiple times in embarrassingly parallel fasion on a SLURM - cluster. Executes classname.method(*args, **kwargs) `NTASK` times, - each time on `NPROC` CPU cores - - :type classname: str - :param classname: the class to run - :type method: str - :param method: the method from the given `classname` to run - :type scale_tasktime: int - :param scale_tasktime: a way to get over the hard-set tasktime, because - some tasks take longer (e.g. smoothing), but you don't want these - to set the tasktimes for all other tasks. This lets you scale the - time of specific tasks by PAR.TASKTIME * scale_tasktime - """ - maui_run_call = " ".join([ - "sbatch", - f"{PAR.SLURMARGS or ''}", - f"--account={PAR.ACCOUNT}", - f"--job-name={PAR.TITLE}", - f"--clusters={PAR.CLUSTER}", - f"--partition={PAR.PARTITION}", - f"--cpus-per-task={PAR.CPUS_PER_TASK}", - f"--nodes={math.ceil(PAR.NPROC / float(PAR.NODESIZE)):d}", - f"--ntasks={PAR.NPROC:d}", - f"--time={PAR.TASKTIME:d}", - f"--output={os.path.join(PATH.WORKDIR, 'logs', '%A_%a')}", - f"--array=0-{PAR.NTASK-1 % PAR.NTASKMAX}", - f"{os.path.join(ROOT_DIR, 'scripts', 'run')}", - f"--output {PATH.OUTPUT}", - f"--classname {classname}", - f"--funcname {method}", - f"--environment {PAR.ENVIRONS or ''}" - ]) - self.logger.debug(maui_run_call) - super().run(classname, method, single, run_call=maui_run_call, **kwargs) - - def run_ancil(self, classname, method, **kwargs): - """ - Runs prepost jobs on Maui ancil, the ancilary cluster which contains - the conda and Python capabilities for Maui. - - :type classname: str - :param classname: the class to run - :type method: str - :param method: the method from the given `classname` to run - """ - ancil_run_call = " ".join([ - "sbatch", - f"{PAR.SLURMARGS or ''}", - f"--account={PAR.ACCOUNT}", - f"--job-name={PAR.TITLE}", - f"--clusters={PAR.ANCIL_CLUSTER}", - f"--partition={PAR.ANCIL_PARTITION}", - f"--cpus-per-task={PAR.CPUS_PER_TASK}", - f"--time={PAR.ANCIL_TASKTIME:d}", - f"--output={os.path.join(PATH.WORKDIR, 'logs', '%A_%a')}", - f"--array=0-{PAR.NTASK-1 % PAR.NTASKMAX}", - f"{os.path.join(ROOT_DIR, 'scripts', 'run')}", - f"--output {PATH.OUTPUT}", - f"--classname {classname}", - f"--funcname {method}", - f"--environment {PAR.ENVIRONS or ''}" - ]) - self.logger.debug(ancil_run_call) - super().run(classname, method, single=False, run_call=ancil_run_call, - **kwargs) - - - - - diff --git a/seisflows-super/workflow/__init__.py b/seisflows-super/workflow/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows-super/workflow/thrifty_inversion.py b/seisflows-super/workflow/thrifty_inversion.py deleted file mode 100644 index 202a8755..00000000 --- a/seisflows-super/workflow/thrifty_inversion.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python3 -""" -Thrifty: using resources carefully and not wastefully - -A thrifty inversion skips the costly intialization step (i.e., forward -simulations and misfit quantification) if the final forward simulations from -the previous iteration's line search can be used in the current one. -""" -import sys -import logging - -from seisflows.tools import unix, msg -from seisflows.config import custom_import - - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] -optimize = sys.modules["seisflows_optimize"] - - -class ThriftyInversion(custom_import("workflow", "inversion")): - """ - Thrifty inversion which attempts to save resources by re-using previous - line search results for the current iteration. - """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - :type thrifty: bool - :param thrifty: the current status of the inversion. - if False: assumed to be first iteration, a restart, or some other - condition has been met which means inversion is defaulting to normal - behavior - if True: A well-scaled inversion can skip the function evaluation - of the next iteration by using the line search results of the - previous iteration - """ - super().__init__() - self.thrifty = False - - def check(self, validate=True): - """ - Checks parameters and paths - """ - super().check(validate=False) - if validate: - self.required.validate() - - assert PAR.LINESEARCH == "Backtrack", \ - "Thrifty inversion requires backtracking line search" - - def initialize(self): - """ - If line search can be carried over, skip initialization step - Or if manually starting a new run, start with normal inversion init - """ - if not self.thrifty or optimize.iter == PAR.BEGIN: - super().initialize() - else: - self.logger.info(msg.mjr("INITIALIZING THRIFTY INVERSION")) - - def clean(self): - """ - Determine if forward simulation from line search can be carried over. - We assume clean() is the final flow() argument so that we can update - the thrifty status here. - """ - self.update_status() - - if self.thrifty: - self.logger.info(msg.mnr("THRIFTY CLEANING WORKDIR FOR NEXT " - "ITERATION")) - unix.rm(PATH.GRAD) - unix.mv(PATH.FUNC, PATH.GRAD) - unix.mkdir(PATH.FUNC) - else: - super().clean() - - def update_status(self): - """ - Determine if line search forward simulation can be carried over based - on a number of criteria - """ - self.logger.info("updating thrifty inversion status") - if optimize.iter == PAR.BEGIN: - self.logger.info("1st iteration, defaulting to inversion workflow") - thrifty = False - elif optimize.restarted: - self.logger.info("optimization has been restarted, defaulting to " - "inversion workflow") - thrifty = False - elif optimize.iter == PAR.END: - self.logger.info("final iteration, defaulting to inversion workflow") - thrifty = False - else: - self.logger.info("continuing with thrifty inversion workflow") - thrifty = True - - self.thrifty = thrifty - - - - diff --git a/seisflows-super/workflow/thrifty_maui.py b/seisflows-super/workflow/thrifty_maui.py deleted file mode 100644 index c76c2c0c..00000000 --- a/seisflows-super/workflow/thrifty_maui.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python3 -""" -This is a subclass seisflows.workflow.InversionMaui -""" -import sys - -from seisflows.config import custom_import -from seisflows.tools.err import ParameterError - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - -system = sys.modules["seisflows_system"] -solver = sys.modules["seisflows_solver"] -optimize = sys.modules["seisflows_optimize"] -preprocess = sys.modules["seisflows_preprocess"] -postprocess = sys.modules["seisflows_postprocess"] - - -class ThriftyMaui(custom_import("workflow", "thrifty_inversion")): - """ - Waveform thrify inversion class specifically for running jobs on the - New Zealand HPC cluster Maui. - - On Maui, Anaconda is only available on an ancillary cluster, Maui_ancil, - so jobs involving the preprocessing module must be called through a - separate system run call. - """ - def check(self): - """ - Ensure that the correct submodules are specified, otherwise - this workflow won't function properly. - """ - super().check() - - if "MAUI" not in PAR.SYSTEM.upper(): - raise ParameterError() - - if "MAUI" not in PAR.SOLVER.upper(): - raise ParameterError() - - def setup(self): - """ - Lays groundwork for inversion by running setup() functions for the - involved sub-modules, and generating synthetic true data if necessary, - and generating the pre-requisite database files. Should only be run once - at the iteration 1 - """ - # Set up all the requisite modules - print("SETUP") - preprocess.setup() - postprocess.setup() - optimize.setup() - - # Run the setup in serial to reduce unnecessary job submissions - # Needs to be split up into multiple system calls - solver.initialize_solver_directories() - - if PAR.CASE.upper() == "SYNTHETIC": - system.run("solver", "setup", single=True, model="true") - system.run("solver", "generate_data") - - system.run("solver", "setup", single=True, model="init") - - def evaluate_function(self, path, suffix): - """ - Performs forward simulation, and evaluates the objective function. - - Differs from Inversion.evaluate_function() as it splits the forward - problem and misfit quantification into two separate system calls, - rather than a single system call. - - :type path: str - :param path: path in the scratch directory to use for I/O - :type suffix: str - :param suffix: suffix to use for I/O - """ - print("EVALUATE FUNCTION\n\tRunning forward simulation") - self.write_model(path=path, suffix=suffix) - system.run("solver", "eval_fwd", path=path) - print("\tEvaluating misfit") - system.run_ancil("solver", "eval_misfit", path=path) - self.write_misfit(path=path, suffix=suffix) - diff --git a/seisflows/__init__.py b/seisflows/__init__.py index 0ebf0e99..eadb0c3d 100644 --- a/seisflows/__init__.py +++ b/seisflows/__init__.py @@ -1,4 +1,6 @@ +import os import logging + from pkgutil import extend_path # Extend the search path for the modules which comprise a package. @@ -7,6 +9,11 @@ # different parts of a single logical package as multiple directories. __path__ = extend_path(__path__, __name__) - # Set up the SeisFlows Logging environment logger = logging.getLogger(__name__) + +# The location of this config file, which is the main repository +ROOT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__))) + +# List of module names required by SeisFlows for imports. Order-sensitive +NAMES = ["workflow", "system", "solver", "preprocess", "optimize"] \ No newline at end of file diff --git a/seisflows/config.py b/seisflows/config.py deleted file mode 100644 index 4119df7a..00000000 --- a/seisflows/config.py +++ /dev/null @@ -1,592 +0,0 @@ -#!/usr/bin/env python3 -""" -This is the Seisflows Config script, it contains utilities that are called upon -throughout the Seisflows workflow. It also (re)defines some important functions -that are used extensively by the machinery of Seisflows. - -SeisFlows consists of interacting objects: -'system', 'preprocess', 'solver', 'postprocess', 'optimize', 'workflow' - -Each corresponds simultaneously to a module in the SeisFlows source code, -a class that is instantiated and made accessible via sys.modules, and a -parameter in a global dictionary. Once in memory, these objects can be thought -of as comprising the complete 'state' of a SeisFlows session -""" -import os -import sys -import json -import types -import pickle -import copyreg -import logging -import traceback -from importlib import import_module - -from seisflows import logger -from seisflows.tools import msg, unix -from seisflows.tools.wrappers import module_exists -from seisflows.tools.err import ParameterError - - -""" -!!! WARNING !!! - -The following constants are (some of the only) hardwired components -of the pacakge. The naming, order, case, etc., of each constant may be -important, and any changes to these will more-than-likely break the underlying -mechanics of the package. Do not touch unless you know what you're doing! -""" - -# List of module names required by SeisFlows for imports. Order-sensitive -# In sys.modules these will be prepended by 'seisflows_', e.g., seisflows_system -NAMES = ["system", "preprocess", "solver", - "postprocess", "optimize", "workflow"] - -# Packages that define the source code, used to search for base- and subclasses -PACKAGES = ["seisflows", "seisflows-super"] - -# These define the sys.modules names where parameter values and paths are stored -PAR = "seisflows_parameters" -PATH = "seisflows_paths" - -# The location of this config file, which is the main repository -ROOT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__))) - -# Define a package-wide default directory and file naming schema. This will -# be returned as a Dict() object, defined below. All of these files and -# directories will be created relative to the user-defined working directory -CFGPATHS = dict( - PAR_FILE="parameters.yaml", # Default SeisFlows parameter file - SCRATCHDIR="scratch", # SeisFlows internal working directory - STATSDIR="stats", # Optimization module log file output - OUTPUTDIR="output", # Permanent disk storage for state and outputs - LOGFILE="output_sf.txt", # Log files for all system log - ERRLOGFILE="error_sf.txt", # StdErr dump site for crash messages - LOGDIR="logs", # Dump site for previously created log files -) -""" -!!! ^^^ WARNING ^^^ !!! -""" - - -def init_seisflows(check=True): - """ - Instantiates SeisFlows objects and makes them globally accessible by - registering them in sys.modules - - :type check: bool - :param check: Run parameter and path checking, defined in the module.check() - functions. By default should be True, to ensure that paths and - parameters are set correctly. It should only be set False for debug - and testing purposes when we need to force our way past this safeguard. - """ - logger.info("initializing SeisFlows in sys.modules") - - # Parameters and paths must already be loaded (normally done by submit) - assert(PAR in sys.modules) - assert(PATH in sys.modules) - - # Check if objects already exist on disk, exit so as to not overwrite - if "OUTPUT" in sys.modules[PATH] and \ - os.path.exists(sys.modules[PATH]["OUTPUT"]): - print(msg.cli("Data from previous workflow found in working directory.", - items=["> seisflows restart: delete data and start new " - "workflow", - "> seisflows resume: resume existing workflow"], - header="warning", border="=") - ) - sys.exit(-1) - - # Instantiate and register objects - for name in NAMES: - sys.modules[f"seisflows_{name}"] = custom_import(name)() - - # Parameter import error checking, missing or improperly set parameters will - # throw assertion errors - if check: - errors = [] - for name in NAMES: - try: - sys.modules[f"seisflows_{name}"].check() - except AssertionError as e: - errors.append(f"{name}: {e}") - if errors: - print(msg.cli("seisflows.config module check failed with:", - items=errors, header="module check error", - border="=")) - sys.exit(-1) - - # Bare minimum module requirements for SeisFlows - req_modules = ["WORKFLOW", "SYSTEM"] - for req in req_modules: - if not hasattr(sys.modules[PAR], req): - print(msg.cli(f"SeisFlows requires defining: {req_modules}." - "Please specify these in the parameter file. Use " - "'seisflows print module' to determine suitable " - "choices.", header="error", border="=")) - sys.exit(-1) - - -def save(): - """ - Export the current session to disk - """ - logger.info("exporting current working environment to disk") - output = sys.modules[PATH]["OUTPUT"] - unix.mkdir(output) - - # Save the paths and parameters into a JSON file - for name in [PAR, PATH]: - fullfile = os.path.join(output, f"{name}.json") - with open(fullfile, "w") as f: - json.dump(sys.modules[name].__dict__, f, sort_keys=True, indent=4) - - # Save the current workflow as pickle objects - for name in NAMES: - fullfile = os.path.join(output, f"seisflows_{name}.p") - with open(fullfile, "wb") as f: - pickle.dump(sys.modules[f"seisflows_{name}"], f) - - -def load(path): - """ - Imports a previously saved session from disk - - :type path: str - :param path: path to the previously saved session - """ - logger.info("loading current working environment from disk") - - # Load parameters and paths from a JSON file - for name in [PAR, PATH]: - fullfile = os.path.join(os.path.abspath(path), f"{name}.json") - with open(fullfile, "r") as f: - sys.modules[name] = Dict(json.load(f)) - - # Load the saved workflow from pickle objects - for name in NAMES: - fullfile = os.path.join(os.path.abspath(path), f"seisflows_{name}.p") - with open(fullfile, "rb") as f: - sys.modules[f"seisflows_{name}"] = pickle.load(f) - - -def flush(): - """ - It is sometimes necessary to flush the currently active working state to - avoid affecting subsequent working states (e.g., running tests back to back) - This command will flush sys.modules of all `seisflows_{}` modules that are - typically instantiated using load(), or init_seisflows() - - https://stackoverflow.com/questions/1668223/how-to-de-import-a-python-module - """ - for name in NAMES: - mod_name = f"seisflows_{name}" - if mod_name in sys.modules: - del sys.modules[mod_name] - - -def config_logger(level="DEBUG", filename=None, filemode="a", verbose=True): - """ - Explicitely configure the logging module with some parameters defined - by the user in the System module. Instantiates a stream logger to write - to stdout, and a file logger which writes to `filename`. Two levels of - verbosity and three levels of log messages allow the user to determine - how much output they want to see. - - :type level: str - :param level: log level to be passed to logger, available are - 'CRITICAL', 'WARNING', 'INFO', 'DEBUG' - :type filename: str or None - :param filename: name of the log file to write log statements to. If None, - logs will be written to STDOUT ONLY, and `filemode` will not be used. - :type filemode: str - :param filemode: method for opening the log file. defaults to append 'a' - :type verbose: bool - :param verbose: if True, writes a more detailed log message stating the - type of log (warning, info, debug), and the class and method which - called the logger (e.g., seisflows.solver.specfem2d.save()). This - is much more useful for debugging but clutters up the log file. - if False, only write the time and message in the log statement. - """ - # Make sure that we don't already have handlers described, which may happen - # if this function gets run multiple times, and leads to duplicate logs - while logger.hasHandlers(): - logger.removeHandler(logger.handlers[0]) - - # Two levels of verbosity on log level, triggered with PAR.VERBOSE - if verbose: - # More verbose logging statement with levelname and func name - fmt_str = ( - "%(asctime)s | %(levelname)-5s | %(name)s.%(funcName)s()\n" - "> %(message)s" - ) - else: - # Clean logging statement with only time and message - fmt_str = "%(asctime)s | %(message)s" - - # Instantiate logger during _register() as we now have user-defined pars - logger.setLevel(level) - formatter = logging.Formatter(fmt_str, datefmt="%Y-%m-%d %H:%M:%S") - - # Stream handler to print log statements to stdout - st_handler = logging.StreamHandler(sys.stdout) - st_handler.setFormatter(formatter) - logger.addHandler(st_handler) - - # File handler to print log statements to text file `filename` - if filename is not None: - file_handler = logging.FileHandler(filename, filemode) - file_handler.setFormatter(formatter) - logger.addHandler(file_handler) - - -class Dict(object): - """ - A barebones dictionary-like object for holding parameters or paths. - - Allows for easier access of dictionary items, does not allow resets of - attributes once defined, nor does it allow deleting attributes once defined. - This helps keep a workflow on rails by preventing the User from editing - paths and parameters during a workflow. - - TODO | Does it make sense to have this inherit dict() rather than defining - TODO | an entirely new object? - """ - def __init__(self, newdict): - """Internal dictionary can ONLY be updated by updating the ENTIRE set - at once, usually done by reading in a new parameter file at the start - of a workflow""" - super(Dict, self).__setattr__('__dict__', newdict) - - def __str__(self): - """Pretty print dictionaries and first level nested dictionaries""" - str_ = "" - longest_key = max([len(_) for _ in self.__dict__.keys()]) - for key, val in self.__dict__.items(): - str_ += f"{key:<{longest_key}}: {val}\n" - return str_ - - def __repr__(self): - """Pretty print when calling an instance of this object""" - return(self.__str__()) - - def __iter__(self): - """Return an iterable list of sorted keys""" - return iter(sorted(self.__dict__.keys())) - - def __getattr__(self, key): - """Attribute-like access of the internal dictionary attributes""" - try: - return self.__dict__[key] - except KeyError: - raise AttributeError(key) - - def __getitem__(self, key): - """.get() like access of the internal dictionary attributes """ - return self.__dict__[key] - - def __setattr__(self, key, val): - """Setting attributes can only be performed one time""" - if key in self.__dict__: - raise TypeError("Once defined, parameters cannot be changed.") - self.__dict__[key] = val - - def __delattr__(self, key): - """Attributes cannot be deleted once set to avoid editing a parameter - set during an active workflow""" - if key in self.__dict__: - raise TypeError("Once defined, parameters cannot be deleted.") - raise KeyError - - def force_set(self, key, val): - """Force-set variables even though the intended behavior of this class - is to not allow deleting or replacing already set variables. - This should be used for check() functions and testing purposes only""" - self.__dict__[key] = val - - def values(self): - """Return values from the internal dictionary""" - return self.__dict__.values() - - -class Null(object): - """ - A null object that always and reliably does nothing - """ - def __init__(self, *args, **kwargs): - pass - - def __call__(self, *args, **kwargs): - return self - - def __nonzero__(self): - return False - - def __getattr__(self, key): - return self - - def __setattr__(self, key, val): - return self - - def __delattr__(self, key): - return self - - -class SeisFlowsPathsParameters: - """ - A class used to simplify defining required or optional paths and parameters - by enforcing a specific structure to their entry into the environment. - Replaces the functionalities of the old check() functions. - - .. note:: - if a path or parameter is optional it requires a default value. - """ - default_par = "!!! REQUIRED PARAMETER !!!" - default_path = "!!! REQUIRED PATH !!!" - - def __init__(self, base=None): - """ - We simply store paths and parameters as nested dictioanries. Due to the - use of inheritance, the class can be passed to itself on initialization - which means paths and parameters can be adopted from base class - - :type base: seisflows.config.DefinePathsParameters - :param base: paths and parameters from abstract Base class that need to - be inherited by the current child class. - """ - self.parameters, self.paths = {}, {} - if base: - self.parameters.update(base.parameters) - self.paths.update(base.paths) - - def par(self, parameter, required, docstr, par_type, default=None): - """ - Add a parameter to the internal list of parameters - - :type parameter: str - :param parameter: name of the parameter - :type required: bool - :param required: whether or not the parameter is required. If it is not - required, then a default value should be given - :type docstr: str - :param docstr: Short explanatory doc string that defines what the - parameter is used for. - :type par_type: class or str - :param par_type: the parameter type, used for doc strings and also - parameter validation - :param default: default value for the parameter, can be any type - """ - if required: - default = self.default_par - if type(par_type) == type: - par_type = par_type.__name__ - self.parameters[parameter] = {"docstr": docstr, "required": required, - "default": default, "type": par_type} - - def path(self, path, required, docstr, default=None): - """ - Add a path to the internal list of paths - - :type path: str - :param path: name of the parameter - :type required: bool - :param required: whether or not the path is required. If it is not - required, then a default value should be given - :type docstr: str - :param docstr: Short explanatory doc string that defines what the - path is used for. - :type default: str - :param default: default value for the path - - """ - if required: - default = self.default_path - self.paths[path] = {"docstr": docstr, "required": required, - "default": default} - - def validate(self, paths=True, parameters=True): - """ - Set internal paths and parameter values into sys.modules. Should be - called by each modules check() function. - - Ensures that required paths and parameters are set by the User in the - parameter file and that default values are stored for any optional - paths and parameters which are not explicitely set. - - :type paths: bool - :param paths: validate the internal path values - :type parameters: bool - :param parameters: validate the internal parameter values - :raises ParameterError: if a required path or parameter is not set by - the user. - """ - if paths: - sys_path = sys.modules[PATH] - for key, attrs in self.paths.items(): - if attrs["required"] and (key not in sys_path): - raise ParameterError(sys_path, key) - elif key not in sys_path: - setattr(sys_path, key, attrs["default"]) - - if parameters: - sys_par = sys.modules[PAR] - for key, attrs in self.parameters.items(): - if attrs["required"] and (key not in sys_par): - raise ParameterError(sys_par, key) - elif key not in sys_par: - setattr(sys_par, key, attrs["default"]) - - -def custom_import(name=None, module=None, classname=None): - """ - Imports SeisFlows module and extracts class that is the camelcase version - of the module name - - For example: - custom_import('workflow', 'inversion') - - imports 'seisflows.workflow.inversion' and, from this module, extracts - class 'Inversion'. - - :type name: str - :param name: component of the workflow to import, defined by `names`, - available: "system", "preprocess", "solver", - "postprocess", "optimize", "workflow" - :type module: module within the workflow component to call upon, e.g. - seisflows.workflow.inversion, where `inversion` is the module - :type classname: str - :param classname: the class to be called from the module. Usually this is - just the CamelCase version of the module, which will be defaulted to if - this parameter is set `None`, however allows for custom class naming. - Note: CamelCase class names following PEP-8 convention. - """ - # Parse input arguments for custom import - # Allow empty system to be called so that import error message can be thrown - if name is None: - print(msg.cli( - "Please check that 'custom_import' utility is being used as " - "follows: custom_import(name, module). The resulting full dotted " - "name 'seisflows.name.module' must correspond to a module " - "within this package.", header="custom import error", border="=")) - sys.exit(-1) - # Invalid `system` call - elif name not in NAMES: - print(msg.cli( - "Please check that the use of custom_import(name, module, class) " - "is implemented correctly, where name must be in the following:", - items=NAMES, header="custom import error", border="=")) - sys.exit(-1) - # Attempt to retrieve currently assigned classname from parameters - if module is None: - try: - module = sys.modules[PAR][name.upper()] - except KeyError: - return Null - # If this still returns nothing, then no module has been assigned - # likely the User has turned this module OFF - if module is None: - return Null - # If no method specified, convert classname to PEP-8 - if classname is None: - # Make a distinction for fully uppercase classnames, e.g. LBFGS - if module.isupper(): - classname = module.upper() - # If normal classname, convert to CamelCase - else: - classname = module.title().replace("_", "") - - # Check if modules exist, otherwise raise custom exception - _exists = False - for package in PACKAGES: - full_dotted_name = ".".join([package, name, module]) - if module_exists(full_dotted_name): - _exists = True - break - if not _exists: - print(msg.cli(f"The following module was not found within the package: " - f"seisflows.{name}.{module}", - header="custom import error", border="=") - ) - sys.exit(-1) - - # If importing the module doesn't work, throw an error. Usually this happens - # when am external dependency isn't available, e.g., Pyatoa - try: - module = import_module(full_dotted_name) - except Exception as e: - print(msg.cli(f"Module could not be imported {full_dotted_name}", - items=[str(e)], header="custom import error", border="=")) - print(traceback.print_exc()) - sys.exit(-1) - - # Extract classname from module if possible - try: - return getattr(module, classname) - except AttributeError: - print(msg.cli(f"The following method was not found in the imported " - f"class: seisflows.{name}.{module}.{classname}")) - sys.exit(-1) - - -def format_paths(mydict): - """ - Ensure that paths have a standardized format before being allowed into - an active working environment. - Expands tilde character (~) in path strings and expands absolute paths - - :type mydict: dict - :param mydict: dictionary of paths to be expanded - :rtype: dict - :return: formatted path dictionary - """ - for key, val in mydict.items(): - try: - mydict[key] = os.path.expanduser(os.path.abspath(val)) - except TypeError: - continue - return mydict - - -def _pickle_method(method): - """ - The following code changes how instance methods are handled by pickle. - Placing it in this module ensures that pickle changes will be in - effect for all SeisFlows workflows - - Note: For relevant discussion, see stackoverflow thread: - "Can't pickle when using python's - multiprocessing Pool.map()" - - Relevant Links (last accessed 01.20.2020): - https://stackoverflow.com/questions/7016567/ - picklingerror-when-using-multiprocessing - - https://bytes.com/topic/python/answers/ - 552476-why-cant-you-pickle-instancemethods - """ - func_name = method.im_func.__name__ - obj = method.im_self - cls = method.im_class - return _unpickle_method, (func_name, obj, cls) - - -def _unpickle_method(func_name, obj, cls): - """ - The unpickling counterpart to the above function - """ - for cls in cls.mro(): - try: - func = cls.__dict__[func_name] - except KeyError: - pass - else: - break - return func.__get__(obj, cls) - - -copyreg.pickle(types.MethodType, _pickle_method, _unpickle_method) - -# Because we defined Dict inside this file, we need to convert our CFGPATHS -# to a Dict at the end of the file to allow direct variable access -# !!! TODO I don't really like this implementation, can it be changed? -CFGPATHS = Dict(CFGPATHS) diff --git a/seisflows-super/__init__.py b/seisflows/examples/__init__.py similarity index 100% rename from seisflows-super/__init__.py rename to seisflows/examples/__init__.py diff --git a/seisflows/scripts/examples/ex1_specfem2d_workstation_inversion.py b/seisflows/examples/ex1_homogeneous_halfspace.py similarity index 100% rename from seisflows/scripts/examples/ex1_specfem2d_workstation_inversion.py rename to seisflows/examples/ex1_homogeneous_halfspace.py diff --git a/seisflows/examples/ex2_hh_w_pyatoa.py b/seisflows/examples/ex2_hh_w_pyatoa.py new file mode 100644 index 00000000..edb316a7 --- /dev/null +++ b/seisflows/examples/ex2_hh_w_pyatoa.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +""" + SEISFLOWS SPECFEM2D WORKSTATION EXAMPLE 2 + +This example will run N iterations of an inversion to assess misfit between +a homogeneous halfspace model and a checkerboard model using X events and +Y receivers. N, X and Y are all user-selectable. + +.. note:: + See Example 1 docstring for more information + +.. rubric:: + $ seisflows examples run 2 +""" +import os +import sys + +from seisflows.tools import msg +from seisflows.tools.unix import cd, rm, ln +from seisflows.examples.sfexample2d import SFExample2D + + +class SFPyatoaEx2D(SFExample2D): + """ + A class for running SeisFlows examples. Overloads Example 1 to take + advantage of the default SPECFEM2D stuff, onyl changes the generation of + MODEL TRUE, the number of stations, and the setup of the parameter file. + """ + def __init__(self, ntask=None, niter=None, nsta=None, nproc=None, + event_id=None, method="run", specfem2d_repo=None, + with_mpi=False, mpiexec="mpirun", **kwargs): + """ + Overload init and attempt to import Pyatoa before running example. + + :type ntask: int + :param ntask: number of events to use in inversion, between 1 and 25. + defaults to 3 + :type niter: int + :param niter: number of iterations to run. defaults to 2 + :type nsta: int + :param nsta: number of stations to include in inversion, between 1 and + 131 + :type event_id: str + :param event_id: allow user to choose a specific event ID from the + example problem. Must match source files in SPECFEM2D example DATA/ + directory. Overwrites `ntask` to be 1 + :type specfem2d_repo: str + :param specfem2d_repo: path to the SPECFEM2D directory which should + contain binary executables. If not given, SPECFEM2D will be + downloaded configured and compiled automatically. + """ + # Because of how the checkerboard model is defined (as a .dat file), + # we cannot run with nproc > 1 because the checkerboard model will be + # partititioned incorrectly. MPI with nproc==1 still okay. + if nproc is not None: + assert(nproc == 1), \ + f"Example #2 can only be run as a serial (nproc==1) task" + + # We set defaults here because `seisflows examples` may input these + # values as NoneType which would override __init__ defaults. + super().__init__(ntask=ntask or 4, niter=niter or 2, nsta=nsta or 32, + event_id=event_id, method=method, + specfem2d_repo=specfem2d_repo, with_mpi=with_mpi, + mpiexec=mpiexec) + + # Make sure that Pyatoa has been installed before running + try: + import pyatoa + except ModuleNotFoundError: + print(msg.cli("Module Pyatoa not found but is required for this " + "example. Please install Pyatoa and rerun this " + "example.", header="module not found error", + border="=") + ) + sys.exit(-1) + + # Define the main SeisFlows modules, which will be different to the + # base example + self._modules = { + "workflow": "inversion", + "preprocess": "pyaflowa", + "optimize": "LBFGS", + } + + # Adjust the existing parameter list + self._parameters["smooth_h"] = 5000. + self._parameters["smooth_v"] = 5000. + self._parameters["pyflex_preset"] = "null" # no windowing in Pyaflowa + + # Pyaflowa preprocessing parameters + self._parameters["unit_output"] = "DISP" + self._parameters["min_period"] = 10. # filter bounds define windows + self._parameters["max_period"] = 200. + + def print_dialogue(self): + """ + Print help/system dialogue message that explains the setup of th + this workflow + """ + print(msg.ascii_logo_small) + print(msg.cli( + f"This is a [SPECFEM2D] [WORKSTATION] example, which will " + f"run an inversion to assess misfit between a starting homogeneous " + f"halfspace model and a target checkerboard model. This " + f"example problem uses the [PYAFLOWA] preprocessing " + f"module and the [LBFGS] optimization algorithm. In this example, " + f"windowing in Pyaflowa is turnd OFF." + f"[{self.ntask} events, {self.nsta} stations, {self.niter} " + f"iterations]. " + f"The tasks involved include: ", + items=["1. (optional) Download, configure, compile SPECFEM2D", + "2. [Setup] a SPECFEM2D working directory", + "3. [Setup] starting model from 'Tape2007' example", + "4. [Setup] target model w/ perturbed starting model", + "5. [Setup] a SeisFlows working directory", + "6. [Run] the inversion workflow"], + header="seisflows example 2", + border="=") + ) + + def setup_specfem2d_for_model_true(self): + """ + Overwrites MODEL TRUE creation from EX1 + + Make some adjustments to the parameter file to create the final velocity + model. This function assumes it is running from inside the + SPECFEM2D/DATA directory + """ + cd(self.workdir_paths.data) + assert(os.path.exists("Par_file")), f"I cannot find the Par_file!" + + print("> Updating SPECFEM2D to set checkerboard model as current model") + self.sf.sempar("model", "legacy") # read model_velocity.dat_checker + rm("proc000000_model_velocity.dat_input") + ln("model_velocity.dat_checker", "proc000000_model_velocity.dat_input") + diff --git a/seisflows/examples/ex3_fwd_solver.py b/seisflows/examples/ex3_fwd_solver.py new file mode 100644 index 00000000..cf3dc65b --- /dev/null +++ b/seisflows/examples/ex3_fwd_solver.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python3 +""" + SEISFLOWS SPECFEM2D WORKSTATION EXAMPLE 3 + +This example will run a number of forward simulations and misfit quantification. +This is useful for generating a large number of synthetics through a given model + +.. note:: + See Example 1 docstring for more information + +.. rubric:: + $ seisflows examples run 3 +""" +import os +from seisflows.tools import msg +from seisflows.tools.unix import cd, ln, rm +from seisflows.examples.sfexample2d import SFExample2D + + +class SFFwdEx2D(SFExample2D): + """ + A class for running SeisFlows examples. Overloads Example 1 to take + advantage of the default SPECFEM2D stuff, only removes the generation of + MODEL TRUE and makes the parameter file more bare bones. + """ + def __init__(self, ntask=None, nsta=None, nproc=None, method="run", + specfem2d_repo=None, with_mpi=False, mpiexec="mpirun", + **kwargs): + """ + Overloads init of the base problem + + :type ntask: int + :param ntask: number of events to use in inversion, between 1 and 25. + defaults to 3 + :type nsta: int + :param nsta: number of stations to include in inversion, between 1 and + 131 + :type method: str + :param method: method for running the example problem, can be: + * 'run': setup and run the example problem + * 'setup': only setup the example problem, do not `submit` job + :type specfem2d_repo: str + :param specfem2d_repo: path to the SPECFEM2D directory which should + contain binary executables. If not given, SPECFEM2D will be + downloaded configured and compiled automatically. + """ + # We set defaults here because `seisflows examples` may input these + # values as NoneType which would override __init__ defaults. + super().__init__(ntask=ntask or 10, nsta=nsta or 25, nproc=nproc or 1, + niter=1, method=method, specfem2d_repo=specfem2d_repo, + with_mpi=with_mpi, mpiexec=mpiexec) + + self._modules = { + "workflow": "forward", + "preprocess": "null", + "optimize": "null" + } + + self._parameters["export_traces"] = True + self._parameters["path_model_true"] = "null" # overload default par. + + def print_dialogue(self): + """ + Print help/system dialogue message that explains the setup of th + this workflow + """ + print(msg.ascii_logo_small) + print(msg.cli( + f"This is a [SPECFEM2D] [WORKSTATION] example, which will run " + f"forward simulations to generate synthetic seismograms through " + f"a homogeneous halfspace starting model. This example uses no " + f"preprocessing or optimization modules. " + f"[{self.ntask} events, {self.nsta} stations] " + f"The tasks involved include: ", + items=["1. (optional) Download, configure, compile SPECFEM2D", + "2. [Setup] a SPECFEM2D working directory", + "3. [Setup] starting model from 'Tape2007' example", + "4. [Setup] a SeisFlows working directory", + "5. [Run] the forward simulation workflow"], + header="seisflows example 3", + border="=") + ) + + def setup_specfem2d_for_model_true(self): + """ + Overwrites MODEL TRUE creation from EX1. The same as in Example 2 + + Make some adjustments to the parameter file to create the final velocity + model. This function assumes it is running from inside the + SPECFEM2D/DATA directory + """ + cd(self.workdir_paths.data) + assert(os.path.exists("Par_file")), f"I cannot find the Par_file!" + + print("> Updating SPECFEM2D to set checkerboard model as current model") + self.sf.sempar("model", "legacy") # read model_velocity.dat_checker + rm("proc000000_model_velocity.dat_input") + for i in range(self.nproc): + ln("model_velocity.dat_checker", + f"proc00000{i}_model_velocity.dat_input") + + + def main(self): + """ + Setup the example and then optionally run the actual seisflows workflow + Mostly the same as Example 1 main() except it does not generate + MODEL_TRUE, and instead sets MODEL_TRUE as the starting model. + """ + print(msg.cli("EXAMPLE SETUP", border="=")) + + # Step 1: Download and configure SPECFEM2D, make binaries. Optional + self.download_specfem2d() + self.configure_specfem2d() + self.make_specfem2d_executables() + # Step 2: Create a working directory and generate initial/final models + self.create_specfem2d_working_directory() + # Step 2a: Generate MODEL_INIT, rearrange consequent directory structure + print(msg.cli("GENERATING INITIAL MODEL", border="=")) + self.setup_specfem2d_for_model_init() # setup SPECFEM run directory + self.setup_specfem2d_for_model_true() # Use checkerboard model + self.run_xspecfem2d_binaries() + self.cleanup_xspecfem2d_run(choice="INIT") + # Step 3: Prepare Par_file and directory for MODEL_TRUE generation + self.setup_seisflows_working_directory() + self.finalize_specfem2d_par_file() + print(msg.cli("COMPLETE EXAMPLE SETUP", border="=")) + # Step 4: Run the workflwo + if self.run_example: + self.run_sf_example() diff --git a/seisflows/scripts/examples/sfexample2d.py b/seisflows/examples/sfexample2d.py similarity index 53% rename from seisflows/scripts/examples/sfexample2d.py rename to seisflows/examples/sfexample2d.py index 145b7da8..0fa0bd93 100644 --- a/seisflows/scripts/examples/sfexample2d.py +++ b/seisflows/examples/sfexample2d.py @@ -30,14 +30,14 @@ import os import sys import glob -import shutil import subprocess import numpy as np from seisflows.tools import msg -from seisflows.config import Dict +from seisflows.tools.config import Dict from seisflows.seisflows import SeisFlows from seisflows.tools.unix import cd, cp, rm, ln, mv, mkdir +from seisflows.tools.unix import nproc as system_nproc class SFExample2D: @@ -45,7 +45,9 @@ class SFExample2D: A class for running SeisFlows examples. Simplifies calls structure so that multiple example runs can benefit from the code written here """ - def __init__(self, ntask=3, niter=2): + def __init__(self, ntask=None, event_id=None, niter=None, nsta=None, + nproc=None, method="run", specfem2d_repo=None, with_mpi=False, + mpiexec="mpirun", **kwargs): """ Set path structure which is used to navigate around SPECFEM repositories and the example working directory @@ -53,35 +55,151 @@ def __init__(self, ntask=3, niter=2): :type ntask: int :param ntask: number of events to use in inversion, between 1 and 25. defaults to 3 + :type event_id: str + :param event_id: allow user to choose a specific event ID from the + example problem. Must match source files in SPECFEM2D example DATA/ + directory. Overwrites `ntask` to be 1 :type niter: int :param niter: number of iterations to run. defaults to 2 + :type nsta: int + :param nsta: number of stations to include in inversion, between 1 and + 131 + :type method: str + :param method: method for running the example problem, can be: + * 'run': setup and run the example problem + * 'setup': only setup the example problem, do not `submit` job + :type specfem2d_repo: str + :param specfem2d_repo: path to the SPECFEM2D directory which should + contain binary executables. If not given, SPECFEM2D will be + downloaded configured and compiled automatically. + :type with_mpi: bool + :param with_mpi: run the example problem with MPI. That is, runs the + Solver with an MPI executable. All other tasks are run in serial. + :type mpiexec: str + :param mpiexec: MPI executable used to run MPI tasks. Defaults to + 'mpiexec' but User is allowed to choose incase their system has + different MPI run call. """ - specfem2d_repo = input( - msg.cli("If you have already downloaded SPECMFE2D, please input " - "the full path to the repo. If left blank, this example " - "will pull the latest version from GitHub and attempt " - "to configure and make the binaries:\n> ") - ) - self.cwd = os.getcwd() self.sem2d_paths, self.workdir_paths = self.define_dir_structures( cwd=self.cwd, specfem2d_repo=specfem2d_repo ) - self.ntask = ntask + + if event_id is not None: + assert(1 <= event_id <= 25), \ + f"event id must be between 1 and 25, not {event_id}" + self.event_id = f"SOURCE_{event_id:0>3}" + ntask = 1 # hard set 1 event if we choose a specific event + else: + self.event_id = None + + # We set defaults here because `seisflows examples` may input these + # values as NoneType which would override __init__ defaults. + self.ntask = ntask or 1 assert(1 <= self.ntask <= 25), \ f"number of tasks/events must be between 1 and 25, not {self.ntask}" - self.niter = niter + self.niter = niter or 1 assert(1 <= self.niter <= np.inf), \ f"number of iterations must be between 1 and inf, not {self.niter}" + self.nsta = nsta or 1 + # -1 because it represents index but we need to talk in terms of count + assert(1 <= self.nsta <= 132), \ + f"number of stations must be between 1 and 131, not {self.nsta}" + + self.nproc = nproc or 1 # must be 1 for Examples 1-3 + assert(self.nproc <= system_nproc()), ( + f"your system has a maximum {system_nproc()} processors, which is " + f"less than the requested value of {self.nproc}. Please adjust" + ) # This bool information is provided by the User running 'setup' or 'run' - self.run_example = bool(sys.argv[1] == "run") + self.run_example = bool(method == "run") # Command line tool to use $ seisflows from inside Python # Zero out sys.argv to ensure that no arguments are given to the CLI sys.argv = [sys.argv[0]] self.sf = SeisFlows() + # Set the main SeisFlows modules prior to running the configure() cmd. + self._modules = { + "workflow": "inversion", + } + + # SeisFlows parameters are set as an attribute so that other examples + # can overwrite or override + self._parameters = { + "ntask": self.ntask, # default 3 sources for this example + "materials": "elastic", # how velocity model parameterized + "density": False, # update density or keep constant + "data_format": "ascii", # how to output synthetic seismograms + "nproc": self.nproc, # number of cores to use for MPI tasks + "start": 1, # first iteration + "end": self.niter, # final iteration -- we will run 2 + "step_count_max": 5, # will cause iteration 2 to fail + "data_case": "synthetic", # synthetic-synthetic inversion + "components": "Y", # only Y component seismograms avail. + "attenuation": False, + "misfit": "traveltime", # cross-correlation phase measure + "adjoint": "traveltime", # cross-correlation phase measure + "path_specfem_bin": self.workdir_paths.bin, + "path_specfem_data": self.workdir_paths.data, + "path_model_init": self.workdir_paths.model_init, + "path_model_true": self.workdir_paths.model_true, + } + + # Determine if we are running serial or parallel solver tasks + if with_mpi: + self.mpiexec = mpiexec + self._parameters["mpiexec"] = self.mpiexec # Pass on to workflow + self._check_mpi_executable() + self._configure_cmd = \ + "./configure FC=gfortran CC=gcc MPIF90=mpif90 --with-mpi" + else: + self.mpiexec = None + self._configure_cmd = "./configure" + + def print_dialogue(self): + """ + Print help/system dialogue message that explains the setup of th + this workflow + """ + print(msg.ascii_logo_small) + print(msg.cli( + f"This is a [SPECFEM2D] [WORKSTATION] example, which will " + f"run an inversion to assess misfit between two homogeneous " + f"halfspace models with slightly different velocities. " + f"[{self.ntask} events, 1 station, {self.niter} iterations]. " + f"The tasks involved include: ", + items=["1. (optional) Download, configure, compile SPECFEM2D", + "2. [Setup] a SPECFEM2D working directory", + "3. [Setup] starting model from 'Tape2007' example", + "4. [Setup] target model w/ perturbed starting model", + "5. [Setup] a SeisFlows working directory", + "6. [Run] the inversion workflow"], + header="seisflows example 1", + border="=") + ) + + def _check_mpi_executable(self): + """ + If User wants to run examples with MPI, checks that MPI executable is + available and can be used to run solver. Sometimes if we don't + '$ module load mpi', we will get 'mpirun: command not found' + """ + try: + subprocess.run(f"which {self.mpiexec}", check=True, shell=True, + stdout=subprocess.DEVNULL) + except subprocess.CalledProcessError: + print( + msg.cli(f"MPI executable '{self.mpiexec}' not found on " + f"system. Please check that you have MPI installed and " + f"loaded. If '{self.mpiexec}' is not how you " + f"invoke MPI, use the flag `--mpiexec $MPIFLAG` when " + f"running the example to change the default executable", + header="missing mpi executable", border="=") + ) + sys.exit(-1) + @staticmethod def define_dir_structures(cwd, specfem2d_repo, ex="Tape2007"): """ @@ -95,15 +213,8 @@ def define_dir_structures(cwd, specfem2d_repo, ex="Tape2007"): :type ex: str :type ex: The name of the example problem inside SPECFEM2D/EXAMPLES """ - if not specfem2d_repo: - print(f"No existing SPECFEM2D repo given, default to: " - f"{cwd}/specfem2d") + if specfem2d_repo is None or not os.path.exists(specfem2d_repo): specfem2d_repo = os.path.join(cwd, "specfem2d") - else: - assert(os.path.exists(specfem2d_repo)), ( - f"User supplied SPECFEM2D directory '{specfem2d_repo}' " - f"does not exist, please check your path and try again." - ) # This defines required structures from the SPECFEM2D repository sem2d = { @@ -131,13 +242,18 @@ def download_specfem2d(self): Last successfully tested 4/28/22 """ if not os.path.exists(self.sem2d_paths.repo): - cmd = ("git clone --recursive --branch devel " + cmd = ("git clone --recursive --branch devel --depth=1 " "https://github.com/geodynamics/specfem2d.git") print(f"Downloading SPECFEM2D with command: {cmd}") subprocess.run(cmd, shell=True, check=True) - def configure_specfem2d_and_make_binaries(self): + assert self.sem2d_paths.repo, ( + f"User supplied SPECFEM2D directory '{self.sem2d_paths.repo}' " + f"does not exist, please check your path and try again." + ) + + def configure_specfem2d(self): """ Run ./configure within the SPECFEM2D repo directory. This function assumes it is being run from inside the repo. Should guess @@ -147,10 +263,10 @@ def configure_specfem2d_and_make_binaries(self): cd(self.sem2d_paths.repo) try: if not os.path.exists("./config.log"): - cmd = "./configure" - print(f"Configuring SPECFEM2D with command: {cmd}") + print(f"Configuring SPECFEM2D with command: " + f"{self._configure_cmd}") # Ignore the configure outputs from SPECFEM - subprocess.run(cmd, shell=True, check=True, + subprocess.run(self._configure_cmd, shell=True, check=True, stdout=subprocess.DEVNULL) else: print("SPECFEM2D already configured, skipping 'configure'") @@ -160,6 +276,10 @@ def configure_specfem2d_and_make_binaries(self): f"to configure SPECFEM2D manually.\n{e}") sys.exit(-1) + def make_specfem2d_executables(self): + """ + Run `$ make all` in SPECFEM2D to create binary executables + """ try: if not glob.glob("./bin/x*"): cmd = "make all" @@ -176,12 +296,6 @@ def configure_specfem2d_and_make_binaries(self): f"to compile SPECFEM2D manually.\n{e}") sys.exit(-1) - # Symlink the finished repo into the working directory so that any - # subsequent runs won't need to have the user re-type repo location - if not os.path.exists(os.path.join(self.cwd, "specfem2d")): - print("symlinking existing specfem2D repository to cwd") - ln(self.sem2d_paths.repo, os.path.join(self.cwd, "specfem2d")) - def create_specfem2d_working_directory(self): """ Create the working directory where we will generate our initial and @@ -202,11 +316,20 @@ def create_specfem2d_working_directory(self): # Make sure that SPECFEM2D can find the expected files in the DATA/ dir cd(self.workdir_paths.data) - rm("SOURCE") - ln("SOURCE_001", "SOURCE") rm("Par_file") ln("Par_file_Tape2007_onerec", "Par_file") + rm("SOURCE") + # Check if user-chosen source file exists + if self.event_id is not None: + assert(os.path.exists(self.event_id)), \ + f"{self.event_id} chosen but does not exist. Please check DATA" + rm("SOURCE") + ln(self.event_id, "SOURCE") + print(f"> Setting {self.event_id} as SOURCE") + else: + ln("SOURCE_001", "SOURCE") + def setup_specfem2d_for_model_init(self): """ Make some adjustments to the original parameter file to. @@ -218,6 +341,7 @@ def setup_specfem2d_for_model_init(self): print("> Setting the SPECFEM2D Par_file for SeisFlows compatiblility") + self.sf.sempar("nproc", self.nproc) self.sf.sempar("setup_with_binary_database", 1) # create .bin files self.sf.sempar("save_model", "binary") # output model in .bin format self.sf.sempar("save_ASCII_kernels", ".false.") # kernels also .bin @@ -240,14 +364,19 @@ def setup_specfem2d_for_model_true(self): def run_xspecfem2d_binaries(self): """ - Runs the xmeshfem2d and then xspecfem2d binaries using subprocess and then - do some cleanup to get files in the correct locations. Assumes that we - can run the binaries directly with './' + Runs the xmeshfem2d and then xspecfem2d binaries using subprocess and + then do some cleanup to get files in the correct locations. Runs either + with './' or with `mpiexec` """ cd(self.workdir_paths.workdir) - cmd_mesh = f"./bin/xmeshfem2D > OUTPUT_FILES/mesher.log.txt" - cmd_spec = f"./bin/xspecfem2D > OUTPUT_FILES/solver.log.txt" + if self.mpiexec: + mpicmd = f"{self.mpiexec} -n {self.nproc}" + cmd_mesh = f"{mpicmd} bin/xmeshfem2D > OUTPUT_FILES/mesher.log.txt" + cmd_spec = f"{mpicmd} bin/xspecfem2D > OUTPUT_FILES/solver.log.txt" + else: + cmd_mesh = f"./bin/xmeshfem2D > OUTPUT_FILES/mesher.log.txt" + cmd_spec = f"./bin/xspecfem2D > OUTPUT_FILES/solver.log.txt" for cmd in [cmd_mesh, cmd_spec]: print(f"Running SPECFEM2D with command: {cmd}") @@ -288,49 +417,76 @@ def setup_seisflows_working_directory(self): cd(self.cwd) self.sf.setup(force=True) # Force will delete existing parameter file + for key, val in self._modules.items(): + self.sf.par(key, val) + self.sf.configure() - self.sf.par("ntask", self.ntask) # default 3 sources for this example - self.sf.par("materials", "elastic") # how velocity model parameterized - self.sf.par("density", "constant") # update density or keep constant - self.sf.par("nt", 5000) # set by SPECFEM2D Par_file - self.sf.par("dt", .06) # set by SPECFEM2D Par_file - self.sf.par("f0", 0.084) # set by SOURCE file - self.sf.par("format", "ascii") # how to output synthetic seismograms - self.sf.par("begin", 1) # first iteration - self.sf.par("end", self.niter) # final iteration -- we will run 2 - self.sf.par("case", "synthetic") # synthetic-synthetic inversion - self.sf.par("attenuation", False) - - self.sf.par("specfem_bin", self.workdir_paths.bin) - self.sf.par("specfem_data", self.workdir_paths.data) - self.sf.par("model_init", self.workdir_paths.model_init) - self.sf.par("model_true", self.workdir_paths.model_true) + # Adjust the parameters.yaml file based on the internal parameter list + # that is specified in __init__. This allows for child examples to + # re-use this function with any parameter list. + for key, val in self._parameters.items(): + self.sf.par(key, val) def finalize_specfem2d_par_file(self): """ - Last minute changes to get the SPECFEM2D Par_file in the correct format - for running SeisFlows. Setting model type to read from .bin GLL files - change number of stations etc. + Final changes to the SPECFEM2D Par_file before running SeisFlows. + Par_file will be used to control all the child specfem2d directories. + Need to tell them to read models from .bin files, and to use existing + station files rather than create them from the Par_file """ + print("> Finalizing SPECFEM2D Par_file for SeisFlows example") + cd(self.workdir_paths.data) self.sf.sempar("model", "gll") # GLL so SPECFEM reads .bin files + self.sf.sempar("use_existing_stations", ".true.") # Use STATIONS file + self.sf.sempar("nproc", self.nproc) + + # Assign STATIONS_checker file which has 132 stations + rm("STATIONS") + + with open("STATIONS_checker", "r") as f: + lines = f.readlines() + + print(f"> Using {self.nsta} stations in this SeisFlows example") + with open("STATIONS", "w") as f: + f.writelines(lines[:self.nsta]) + + # Assign unique event id if necessary, move all the other sources + # out of the DATA directory so that SeisFlows does not see them + if self.event_id is not None: + print(f"> Assigning {self.event_id} as only source for workflow") + rm("SOURCE") + mkdir("SOURCES") + for event_id in glob.glob("SOURCE_???"): + if event_id == self.event_id: + continue + mv(event_id, f"SOURCES/{event_id}") + ln(self.event_id, "SOURCE") def run_sf_example(self): """ Use subprocess to run the SeisFlows example we just set up """ + print(msg.cli("RUNNING SEISFLOWS EXAMPLE WORKFLOW", border="=")) cd(self.cwd) - subprocess.run("seisflows submit -f", check=False, shell=True) + try: + subprocess.run("seisflows submit", check=True, shell=True) + except subprocess.CalledProcessError as e: + print(msg.cli("EXAMPLE FAILED", items=[str(e)], border="=")) + sys.exit(-1) + print(msg.cli("EXAMPLE COMPLETED SUCCESFULLY", border="=")) def main(self): """ Setup the example and then optionally run the actual seisflows workflow """ print(msg.cli("EXAMPLE SETUP", border="=")) + # Step 1: Download and configure SPECFEM2D, make binaries. Optional self.download_specfem2d() - self.configure_specfem2d_and_make_binaries() + self.configure_specfem2d() + self.make_specfem2d_executables() # Step 2: Create a working directory and generate initial/final models self.create_specfem2d_working_directory() # Step 2a: Generate MODEL_INIT, rearrange consequent directory structure @@ -349,30 +505,5 @@ def main(self): print(msg.cli("COMPLETE EXAMPLE SETUP", border="=")) # Step 4: Run the workflwo if self.run_example: - print(msg.cli("RUNNING SEISFLOWS INVERSION WORKFLOW", border="=")) self.run_sf_example() - -if __name__ == "__main__": - print(msg.ascii_logo_small) - print(msg.cli( - f"This is a [SPECFEM2D] [WORKSTATION] example, which will " - f"run an inversion to assess misfit between two homogeneous halfspace " - f"models with slightly different velocities. [3 events, 1 station, 2 " - f"iterations]. The tasks involved include: ", - items=["1. (optional) Download, configure, compile SPECFEM2D", - "2. Set up a SPECFEM2D working directory", - "3. Generate starting model from Tape2007 example", - "4. Generate target model w/ perturbed starting model", - "5. Set up a SeisFlows working directory", - f"6. Run an inversion workflow"], - header="seisflows example 1", - border="=") - ) - - # Dynamically traverse sys.argv to get user-input command line. Cannot - # use argparser here because we're being called by SeisFlows CLI tool which - # is occupying argparser - if len(sys.argv) > 1: - sfex2d = SFExample2D() - sfex2d.main() diff --git a/seisflows/optimize/LBFGS.py b/seisflows/optimize/LBFGS.py index 29f04b2f..1d68f8e7 100644 --- a/seisflows/optimize/LBFGS.py +++ b/seisflows/optimize/LBFGS.py @@ -1,144 +1,139 @@ #!/usr/bin/env python3 """ -This is the custom class for an LBFGS optimization schema. -It supercedes the `seisflows.optimize.base` class +L-BFGS (Limited memory Broyden–Fletcher–Goldfarb–Shanno) algorithm for solving +nonlinear optimization problems. + +L-BFGS Variables: + s: memory of model differences + y: memory of gradient differences + +Optimization Variables: + m: model + f: objective function value + g: gradient direction + p: search direction + +Line Search Variables: + x: list of step lenths from current line search + f: correpsonding list of function values + m: number of step lengths in current line search + n: number of model updates in optimization problem + gtg: dot product of gradient with itself + gtp: dot product of gradient and search direction + +Status codes + status > 0 : finished + status == 0 : not finished + status < 0 : failed + +TODO store LBFGS_iter during checkpointing """ import os -import sys -import logging import numpy as np +from seisflows import logger +from seisflows.optimize.gradient import Gradient from seisflows.tools import unix from seisflows.tools.msg import DEG -from seisflows.tools.wrappers import exists from seisflows.tools.math import angle -from seisflows.config import custom_import, SeisFlowsPathsParameters +from seisflows.plugins import line_search as line_search_dir -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - -class LBFGS(custom_import("optimize", "base")): +class LBFGS(Gradient): """ - The Limited memory BFGS algorithm - Calls upon seisflows.plugin.optimize.LBFGS to accomplish LBFGS algorithm - - Includes optional safeguards: periodic restarting and descent conditions. - - To conserve memory, most vectors are read from disk rather than passed - from a calling routine. - - L-BFGS Variables: - s: memory of model differences - y: memory of gradient differences - - Optimization Variables: - m: model - f: objective function value - g: gradient direction - p: search direction - - Line Search Variables: - x: list of step lenths from current line search - f: correpsonding list of function values - m: number of step lengths in current line search - n: number of model updates in optimization problem - gtg: dot product of gradient with itself - gtp: dot product of gradient and search direction - - Status codes - status > 0 : finished - status == 0 : not finished - status < 0 : failed + L-BFGS Optimization + ------------------- + Limited memory BFGS nonlienar optimization algorithm + + Parameters + ---------- + :type lbfgs_mem: int + :param lbfgs_mem: L-BFGS memory. Max number of previous gradients to + retain in local memory for approximating the objective function. + :type lbfgs_max: L-BFGS periodic restart interval. Must be + 1 <= lbfgs_max <= infinity. + :type lbfgs_thresh: L-BFGS angle restart threshold. If the angle between + the current and previous search direction exceeds this value, + optimization algorithm will be restarted. + + Paths + ----- + *** """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) + __doc__ = Gradient.__doc__ + __doc__ + + def __init__(self, lbfgs_mem=3, lbfgs_max=np.inf, lbfgs_thresh=0., + **kwargs): + """Instantiate L-BFGS specific parameters""" + super().__init__(**kwargs) + + # Overwrite user-chosen line search. L-BFGS requires 'Backtrack'ing LS + if self.line_search_method.title() != "Backtrack": + logger.warning(f"L-BFGS optimization requires 'backtrack'ing line " + f"search. Overwriting '{self.line_search_method}'") + self.line_search_method = "Backtrack" + self._line_search = getattr( + line_search_dir, self.line_search_method)( + step_count_max=self.step_count_max, + step_len_max=self.step_len_max + ) + + self.LBFGS_mem = lbfgs_mem + self.LBFGS_max = lbfgs_max + self.LBFGS_thresh = lbfgs_thresh + + # Set new L-BFGS dependent paths for storing previous gradients + self.path["_LBFGS"] = os.path.join(self.path.scratch, "LBFGS") + self.path["_y_file"] = os.path.join(self.path["_LBFGS"], "Y.dat") + self.path["_s_file"] = os.path.join(self.path["_LBFGS"], "S.dat") + + # Internally used memory parameters for the L-BFGS optimization algo. + self._LBFGS_iter = 0 + self._memory_used = 0 - def __init__(self): - """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - - :type LBFGS: Class - :param LBFGS: plugin LBFGS class that controls the machinery of the - L-BFGS optimization schema - :type LBFGS_iter: int - :param LBFGS_iter: an internally used iteration that differs from - optimization iter. Keeps track of internal LBFGS memory of previous - gradients. If LBFGS is restarted, the LBFGS_iter iteration is reset, - but the optization iteration. - :type memory_used: int - :param memory_used: bookkeeping to see how many previous - gradients have been stored to internal memory. Should not exceed - PAR.LBFGSMEM - :type LBFGS_dir: str - :param LBFGS_dir: location to store LBFGS internal memory - :type y_file: str - :param y_file: path to store memory of the gradient differences - i.e., `g_new - g_old` - :type s_file: str - :param s_file: path to store memory of the model differences - i.e., `m_new - m_old` - """ - super().__init__() - self.LBFGS_iter = 0 - self.memory_used = 0 - self.LBFGS_dir = "LBFGS" - self.y_file = os.path.join(self.LBFGS_dir, "Y") - self.s_file = os.path.join(self.LBFGS_dir, "S") - - @property - def required(self): + def setup(self): """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. + Set up the LBFGS optimization schema """ - sf = SeisFlowsPathsParameters(super().required) - - # Define the Parameters required by this module - sf.par("LINESEARCH", required=False, default="Backtrack", par_type=str, - docstr="Algorithm to use for line search, see " - "seisflows.plugins.line_search for available choices") - - sf.par("LBFGSMEM", required=False, default=3, par_type=int, - docstr="Max number of previous gradients to retain " - "in local memory") - - sf.par("LBFGSMAX", required=False, par_type=int, default="inf", - docstr="LBFGS periodic restart interval, between 1 and 'inf'") - - sf.par("LBFGSTHRESH", required=False, default=0., par_type=float, - docstr="LBFGS angle restart threshold") - - return sf + super().setup() + unix.mkdir(self.path._LBFGS) - def check(self, validate=True): + def checkpoint(self): """ - Checks parameters, paths, and dependencies + Overwrite default checkpointing to store internal L-BFGS Attributes """ - super().check(validate=False) - if validate: - self.required.validate() + super().checkpoint() + checkpoint_dict = dict(np.load(self.path._checkpoint)) + checkpoint_dict["LBFGS_iter"] = self._LBFGS_iter + checkpoint_dict["memory_used"] = self._memory_used - assert(PAR.LINESEARCH.upper() == "BACKTRACK"), \ - "LBFGS requires a Backtracking line search" + np.savez(file=self.path._checkpoint, **checkpoint_dict) # NOQA - def setup(self): + def load_checkpoint(self): """ - Set up the LBFGS optimization schema + Counterpart to `optimize.checkpoint`. Loads a checkpointed optimization + module from disk and sets internal tracking attributes. Adds additional + functionality to restore internal L-BFGS attributes """ - super().setup() + super().load_checkpoint() + + # NumPy appends '.npz' when saving. Make sure we honor that. + if not self.path._checkpoint.endswith(".npz"): + fid = f"{self.path._checkpoint}.npz" + else: + fid = self.path._checkpoint - # Create a separate directory for LBFGS matters - unix.cd(PATH.OPTIMIZE) - unix.mkdir(self.LBFGS_dir) + if os.path.exists(fid): + dict_in = np.load(file=fid) + self._LBFGS_iter = int(dict_in["LBFGS_iter"]) + self._memory_used = int(dict_in["memory_used"]) def compute_direction(self): """ Call on the L-BFGS optimization machinery to compute a search direction using internally stored memory of previous gradients. - The potential outcomes when computing direction with L-BFGS + The potential outcomes when computing direction with L-BFGS: 1. First iteration of L-BFGS optimization, search direction is defined as the inverse gradient 2. L-BFGS internal iteration ticks over the maximum allowable number of @@ -148,73 +143,84 @@ def compute_direction(self): force a restart, search direction is inverse gradient 4. New search direction is acceptably angled from previous, becomes the new search direction - """ - self.logger.info(f"computing search direction with L-BFGS") - self.LBFGS_iter += 1 - unix.cd(PATH.OPTIMIZE) + TODO do we need to precondition L-BFGS? + + :rtype: seisflows.tools.specfem.Model + :return: search direction as a Model instance + """ + self._LBFGS_iter += 1 # Load the current gradient direction, which is the L-BFGS search # direction if this is the first iteration - g = self.load(self.g_new) - if self.LBFGS_iter == 1: - self.logger.info("first L-BFGS iteration, setting search direction " - "as inverse gradient") - p_new = -g - restarted = 0 + g = self.load_vector("g_new") + p_new = g.copy() + + if self._LBFGS_iter == 1: + logger.info("first L-BFGS iteration, default to 'Gradient' descent") + p_new.update(vector=-1 * g.vector) + restarted = False # Restart condition or first iteration lead to setting search direction # as the inverse gradient (i.e., default to steepest descent) - elif self.LBFGS_iter > PAR.LBFGSMAX: - self.logger.info("restarting L-BFGS due to periodic restart " - "condition. setting search direction as" - "inverse gradient") + elif self._LBFGS_iter > self.LBFGS_max: + logger.info("restarting L-BFGS due to periodic restart condition. " + "setting search direction as inverse gradient") self.restart() - p_new = -g - restarted = 1 + p_new.update(vector=-1 * g.vector) + restarted = True # Normal LBFGS direction computation else: # Update the search direction, apply the inverse Hessian such that # 'q' becomes the new search direction 'g' - self.logger.info("applying inverse Hessian to gradient") - s, y = self.update() - q = self.apply(g, s, y) + logger.info("applying inverse Hessian to gradient") + s, y = self._update_search_history() + q = g.copy() + q.update(vector=self._apply_inverse_hessian(g.vector, s, y)) # Determine if the new search direction is appropriate by checking # its angle to the previous search direction - if self.check_status(g, q): - self.logger.info("new L-BFGS search direction found") - p_new = -q - restarted = 0 + if self._check_status(g.vector, q.vector): + logger.info("new L-BFGS search direction found") + p_new.update(vector=-1 * q.vector) + restarted = False else: - self.logger.info("new search direction not appropriate, " - "defaulting to inverse gradient") + logger.info("new search direction not appropriate, defaulting " + "to gradient desceitn") self.restart() - p_new = -g - restarted = 1 + p_new.update(vector=-1 * g.vector) + restarted = True - # Save values to disk and memory - self.save(self.p_new, p_new) - self.restarted = restarted + # Assign restart condition to internal memory + self._restarted = restarted + + return p_new def restart(self): """ - On top of base restart class, include a restart of the LBFGS internal - memory and memmaps + Restart the L-BFGS optimization algorithm by clearing out stored + gradient memory. """ - super().restart() - - self.logger.info("restarting L-BFGS optimization algorithm by clearing " - "internal memory") - self.LBFGS_iter = 1 - self.memory_used = 0 - - unix.cd(PATH.OPTIMIZE) - s = np.memmap(filename=self.s_file, mode="r+") - y = np.memmap(filename=self.y_file, mode="r+") + logger.info("restarting L-BFGS optimization algorithm") + + # Fall back to gradient descent for search direction + g = self.load_vector("g_new") + p_new = g.copy() + p_new.update(vector=-1 * g.vector) + self.save_vector("p_new", p_new) + + # Clear internal memory + self._line_search.clear_search_history() + self._restarted = True + self._LBFGS_iter = 1 + self._memory_used = 0 + + # Clear out previous gradient information + s = np.memmap(filename=self.path._s_file, mode="r+") + y = np.memmap(filename=self.path._y_file, mode="r+") s[:] = 0. y[:] = 0. - def update(self): + def _update_search_history(self): """ Updates L-BFGS algorithm history @@ -233,32 +239,32 @@ def update(self): :rtype y: np.memmap :return y: memory of the gradient differences `g_new - g_old` """ - unix.cd(PATH.OPTIMIZE) - # Determine the iterates for model m and gradient g - s_k = self.load(self.m_new) - self.load(self.m_old) - y_k = self.load(self.g_new) - self.load(self.g_old) + s_k = \ + self.load_vector("m_new").vector - self.load_vector("m_old").vector + y_k = \ + self.load_vector("g_new").vector - self.load_vector("g_old").vector # Determine the shape of the memory map (length of model, length of mem) m = len(s_k) - n = PAR.LBFGSMEM + n = self.LBFGS_mem # Initial iteration, need to create the memory map - if self.memory_used == 0: - s = np.memmap(filename=self.s_file, mode="w+", dtype="float32", - shape=(m, n)) - y = np.memmap(filename=self.y_file, mode="w+", dtype="float32", - shape=(m, n)) + if self._memory_used == 0: + s = np.memmap(filename=self.path._s_file, mode="w+", + dtype="float32", shape=(m, n)) + y = np.memmap(filename=self.path._y_file, mode="w+", + dtype="float32", shape=(m, n)) # Store the model and gradient differences in memmaps s[:, 0] = s_k y[:, 0] = y_k - self.memory_used = 1 + self._memory_used = 1 # Subsequent iterations will append to memory maps else: - s = np.memmap(filename=self.s_file, mode="r+", dtype="float32", - shape=(m, n)) - y = np.memmap(filename=self.y_file, mode="r+", dtype="float32", - shape=(m, n)) + s = np.memmap(filename=self.path._s_file, mode="r+", + dtype="float32", shape=(m, n)) + y = np.memmap(filename=self.path._y_file, mode="r+", + dtype="float32", shape=(m, n)) # Shift all stored memory by one index to make room for latest mem s[:, 1:] = s[:, :-1] y[:, 1:] = y[:, :-1] @@ -267,12 +273,12 @@ def update(self): y[:, 0] = y_k # Keep track of the memory used - if self.memory_used < PAR.LBFGSMEM: - self.memory_used += 1 + if self._memory_used < self.LBFGS_mem: + self._memory_used += 1 return s, y - def apply(self, q, s=None, y=None): + def _apply_inverse_hessian(self, q, s=None, y=None): """ Applies L-BFGS inverse Hessian to given vector @@ -286,20 +292,18 @@ def apply(self, q, s=None, y=None): :rtype r: np.array :return r: new search direction from application of L-BFGS """ - unix.cd(PATH.OPTIMIZE) - # If no memmaps are given as arguments, instantiate them if s is None or y is None: m = len(q) - n = PAR.LBFGSMEM - s = np.memmap(filename=self.s_file, mode="w+", dtype="float32", - shape=(m, n)) - y = np.memmap(filename=self.y_file, mode="w+", dtype="float32", - shape=(m, n)) + n = self.LBFGS_mem + s = np.memmap(filename=self.path._s_file, mode="w+", + dtype="float32", shape=(m, n)) + y = np.memmap(filename=self.path._y_file, mode="w+", + dtype="float32", shape=(m, n)) # First matrix product # Recursion step 2 from appendix A of Modrak & Tromp 2016 - kk = self.memory_used + kk = self._memory_used rh = np.zeros(kk) al = np.zeros(kk) for ii in range(kk): @@ -307,11 +311,8 @@ def apply(self, q, s=None, y=None): al[ii] = rh[ii] * np.dot(s[:, ii], q) q = q - al[ii] * y[:, ii] - # Apply a preconditioner if available - if self.precond: - r = self.precond(q) - else: - r = q + # Apply an optional preconditioner. Otherwise r==q + r = self._precondition(q) # Use scaling M3 proposed by Liu and Nocedal 1989 sty = np.dot(y[:, 0], s[:, 0]) @@ -326,7 +327,7 @@ def apply(self, q, s=None, y=None): return r - def check_status(self, g, r): + def _check_status(self, g, r): """ Check the status of the apply() function, determine if restart necessary Return of False means restart, return of True means good to go. @@ -339,13 +340,13 @@ def check_status(self, g, r): :return: okay status based on status check (False==bad, True==good) """ theta = 180. * np.pi ** -1 * angle(g, r) - self.logger.info(f"new search direction: {theta:.2f}{DEG} from current") + logger.info(f"new search direction: {theta:.2f}{DEG} from current") if not 0. < theta < 90.: - self.logger.info("restarting L-BFGS, theta not a descent direction") + logger.info("restarting L-BFGS, theta not a descent direction") okay = False - elif theta > 90. - PAR.LBFGSTHRESH: - self.logger.info("restarting L-BFGS due to practical safeguard") + elif theta > 90. - self.LBFGS_thresh: + logger.info("restarting L-BFGS due to practical safeguard") okay = False else: okay = True diff --git a/seisflows/optimize/NLCG.py b/seisflows/optimize/NLCG.py index e060947c..cccce683 100644 --- a/seisflows/optimize/NLCG.py +++ b/seisflows/optimize/NLCG.py @@ -1,83 +1,78 @@ #!/usr/bin/env python3 """ -This is the custom class for an NLCG optimization schema. -It supercedes the `seisflows.optimize.base` class +Nonlinear conjugate gradient method for optimization """ -import sys -import logging +import numpy as np -from seisflows.config import custom_import, SeisFlowsPathsParameters +from seisflows import logger +from seisflows.optimize.gradient import Gradient +from seisflows.tools.math import dot +from seisflows.plugins import line_search as line_search_dir -PAR = sys.modules['seisflows_parameters'] -PATH = sys.modules['seisflows_paths'] - -class NLCG(custom_import("optimize", "base")): +class NLCG(Gradient): """ + NLCG Optimization + ----------------- Nonlinear conjugate gradient method - Optimization Variables: - m: model - f: objective function value - g: gradient direction - p: search direction - - Line Search Variables: - x: list of step lenths from current line search - f: correpsonding list of function values - m: number of step lengths in current line search - n: number of model updates in optimization problem - gtg: dot product of gradient with itself - gtp: dot product of gradient and search direction - - Status codes - status > 0 : finished - status == 0 : not finished - status < 0 : failed + Parameters + ---------- + :type nlcg_max: int + :param nlcg_max: NLCG periodic restart interval, should be between 1 + and infinity + :type nlcg_thresh: NLCG conjugacy restart threshold, should be + between 1 and infinity + :type calc_beta: str + :param calc_beta: method to calculate the parameter 'beta' in the + NLCG algorithm. Available: 'pollak_ribere', 'fletcher_reeves' + + Paths + ----- + *** """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - - :type NLCG_iter: Class - :param NLCG_iter: an internally used iteration that differs from - optimization iter. Keeps track of internal NLCG memory. - """ - super().__init__() - self.NLCG_iter = 0 - self.calc_beta = pollak_ribere # !!! Allow the user to choose this fx? - - @property - def required(self): + __doc__ = Gradient.__doc__ + __doc__ + + def __init__(self, nlcg_max=np.inf, nlcg_thresh=np.inf, + calc_beta="pollak_ribere", **kwargs): + """NLCG-specific input parameters""" + super().__init__(**kwargs) + + # Overwrite user-chosen line search. L-BFGS requires 'Backtrack'ing LS + if self.line_search_method.title() != "Bracket": + logger.warning(f"NLCG optimization requires 'bracket'ing line " + f"search. Overwritng '{self.line_search_method}'") + self.line_search_method = "Bracket" + self._line_search = getattr( + line_search_dir, self.line_search_method)( + step_count_max=self.step_count_max, + step_len_max=self.step_len_max + ) + + self.NLCG_max = nlcg_max + self.NLCG_thresh = nlcg_thresh + + # Check paramter validity + _acceptable_calc_beta = ["pollak_ribere", "fletcher_reeves"] + assert(calc_beta in _acceptable_calc_beta), ( + f"unacceptable `calc_beta`, must be in {_acceptable_calc_beta}" + ) + self.calc_beta = calc_beta + + # Internally used parameters + self._NLCG_iter = 0 + self._calc_beta = getattr(self, f"_{calc_beta}") + + def checkpoint(self): """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. + Overwrite default checkpointing to store internal L-BFGS Attributes """ - sf = SeisFlowsPathsParameters(super().required) - - # Define the Parameters required by this module - sf.par("NLCGMAX", required=False, default="null", par_type=float, - docstr="NLCG periodic restart interval, between 1 and inf") - - sf.par("NLCGTHRESH", required=False, default="null", par_type=float, - docstr="NLCG conjugacy restart threshold, between 1 and inf") + super().checkpoint() - return sf + checkpoint_dict = np.load(self.path._checkpoint) + checkpoint_dict["NLCG_iter"] = self._NLCG_iter - def check(self, validate=True): - """ - Checks parameters, paths, and dependencies - """ - if validate: - self.required.validate() - super().check(validate=False) - - assert(PAR.LINESEARCH.upper() == "BRACKET"), \ - f"NLCG requires a bracketing line search algorithm" + np.savez(file=self.path._checkpoint, **dict_out) # NOQA def compute_direction(self): """ @@ -95,111 +90,114 @@ def compute_direction(self): force restart, inverse gradient search direction 5. New NLCG search direction has conjugacy and is a descent direction and is set as the new search direction. - """ - self.logger.debug(f"computing search direction with NLCG") - self.NLCG_iter += 1 - unix.cd(PATH.OPTIMIZE) + :rtype: seisflows.tools.specfem.Model + :return: search direction as a Model instance + """ + self._NLCG_iter += 1 # Load the current gradient direction - g_new = self.load(self.g_new) + g_new = self.load_vector("g_new") + p_new = g_new.copy() # CASE 1: If first iteration, search direction is the current gradient - if self.NLCG_iter == 1: - self.logger.info("first NLCG iteration, setting search direction" - "as inverse gradient") - p_new = -g_new - restarted = 0 + if self._NLCG_iter == 1: + logger.info("first NLCG iteration, setting search direction " + "as inverse gradient") + p_new.update(vector=-1 * g_new.vector) + restarted = False # CASE 2: Force restart if the iterations have surpassed the maximum # number of allowable iter - elif self.NLCG_iter > PAR.NLCGMAX: - logger.info("restarting NLCG due to periodic restart condition. " - "setting search direction as inverse gradient") + elif self._NLCG_iter > self.NLCG_max: + logger.info("restarting NLCG due to periodic restart " + "condition. setting search direction as inverse " + "gradient") self.restart() - p_new = -g_new - restarted = 1 + p_new.update(vector=-1 * g_new.vector) + restarted = True # Normal NLCG direction compuitation else: # Compute search direction - g_old = self.load(self.g_old) - p_old = self.load(self.p_old) + g_old = self.load_vector("g_old") + p_old = self.load_vector("p_old") + beta = self._calc_beta(g_new.vector, g_old.vector) # Apply preconditioner and calc. scale factor for search dir. (beta) - if self.precond: - beta = self.calc_beta(g_new, g_old, self.precond) - p_new = -self.precond(g_new) + beta * p_old - else: - beta = self.calc_beta(g_new, g_old) - p_new = -g_new + beta * p_old - - # Check restart conditions, return search direction and status - if check_conjugacy(g_new, g_old) > PAR.NLCGTHRESH: - self.logger.info("restarting NLCG due to loss of conjugacy") + _p_new_vec = ( + -1 * self._precondition(g_new.vector) + beta * p_old.vector + ) + p_new.update(vector=_p_new_vec) + + # Check restart conditions, return search direction and statusa + if check_conjugacy(g_new.vector, g_old.vector) > self.NLCG_thresh: + logger.info("restarting NLCG due to loss of conjugacy") self.restart() - p_new = -g_new - restarted = 1 - elif check_descent(p_new, g_new) > 0.: - self.logger.info("restarting NLCG, not a descent direction") + p_new.update(vector=-1 * g_new.vector) + restarted = True + elif check_descent(p_new.vector, g_new.vector) > 0.: + logger.info("restarting NLCG, not a descent direction") self.restart() - p_new = -g_new - restarted = 1 + p_new.update(vector=-1 * g_new.vector) + restarted = True else: - p_new = p_new - restarted = 0 + # p_new = p_new + restarted = False # Save values to disk and memory - self.save(self.p_new, p_new) - self.restarted = restarted + self._restarted = restarted + + return p_new def restart(self): """ Overwrite the Base restart class and include a restart of the NLCG """ - super().restart() - self.NLCG_iter = 1 + logger.info("restarting NLCG optimization algorithm") + g_new = self.load_vector("g_new") + p_new = g_new.copy() + p_new.update(vector=-1 * g_new.vector) + self.save_vector("p_new", p_new) -def fletcher_reeves(g_new, g_old, precond=lambda x: x): - """ - One method for calculating beta in the NLCG Algorithm from - Fletcher & Reeves, 1964 + self._line_search.clear_search_history() + self._restarted = 1 + self._NLCG_iter = 1 - :type g_new: np.array - :param g_new: new search direction - :type g_old: np.array - :param g_old: old search direction - :type precond: function - :param precond: preconditioner, defaults to simple return - :rtype: float - :return: beta, the scale factor to apply to the old search direction to - determine the new search direction - """ - num = dot(precond(g_new), g_new) - den = dot(g_old, g_old) - beta = num / den - - return beta - - -def pollak_ribere(g_new, g_old, precond=lambda x: x): - """ - One method for calculating beta in the NLCG Algorithm from - Polak & Ribiere, 1969 + def _fletcher_reeves(self, g_new, g_old): + """ + One method for calculating beta in the NLCG Algorithm from + Fletcher & Reeves, 1964 + + :type g_new: np.array + :param g_new: new search direction + :type g_old: np.array + :param g_old: old search direction + :rtype: float + :return: beta, the scale factor to apply to the old search direction to + determine the new search direction + """ + num = dot(self._precondition(g_new), g_new) + den = dot(g_old, g_old) + beta = num / den + return beta - :type g_new: np.array - :param g_new: new search direction - :type g_old: np.array - :param g_old: old search direction - :type precond: function - :param precond: preconditioner, defaults to simple return - :rtype: float - :return: beta, the scale factor to apply to the old search direction to - determine the new search direction - """ - num = dot(precond(g_new), g_new - g_old) - den = dot(g_old, g_old) - beta = num / den - return beta + def _pollak_ribere(self, g_new, g_old): + """ + One method for calculating beta in the NLCG Algorithm from + Polak & Ribiere, 1969 + + :type g_new: np.array + :param g_new: new search direction + :type g_old: np.array + :param g_old: old search direction + :rtype: float + :return: beta, the scale factor to apply to the old search direction to + determine the new search direction + """ + num = dot(self._precondition(g_new), g_new - g_old) + den = dot(g_old, g_old) + beta = num / den + return beta def check_conjugacy(g_new, g_old): diff --git a/seisflows/optimize/base.py b/seisflows/optimize/base.py deleted file mode 100644 index 1cf59f44..00000000 --- a/seisflows/optimize/base.py +++ /dev/null @@ -1,514 +0,0 @@ -#!/usr/bin/env python3 -""" -The Optimization library contains classes and methods used to solve nonlinear -optimization problems, i.e., misfit minimization. Various subclasses implement -different optimization algorithms. - -.. note:: - By default the base class implements a steepest descent optimization -""" -import os -import sys -import logging -import numpy as np - -from seisflows.tools import msg, unix -from seisflows.tools.math import angle, dot -from seisflows.plugins import line_search, preconds -from seisflows.tools.specfem import check_poissons_ratio -from seisflows.config import SeisFlowsPathsParameters, CFGPATHS - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] -solver = sys.modules["seisflows_solver"] - - -class Base: - """ - Nonlinear optimization abstract base class. - - This base class provides a steepest descent optimization algorithm. - - Nonlinear conjugate, quasi-Newton and Newton methods can be implemented on - top of this base class. - - .. note:: - To reduce memory overhead, vectors are read from disk rather than passed - from calling routines. For example, at the beginning of - compute_direction the current gradient is read from 'g_new' and the - resulting search direction is written to 'p_new'. As the inversion - progresses, other information is stored as well. - - .. note:: - The default numerical parameters defined below should work well for a - range of applications without manual tuning. If the nonlinear - optimization procedure stagnates, it may be due to issues involving - data quality or the choice of data misfit, data processing, or - regularization parameters. Problems in any of these areas usually - manifest themselves through stagnation of the nonlinear optimization - algorithm. - - """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by __init__! - Attributes are just initialized as NoneTypes for clarity and docstrings - - :type iter: int - :param iter: the current iteration of the workflow - :type line_search: Class - :param line_search: a class controlling the line search functionality - for determining step length - :type precond: Class - :param precond: a class controlling the preconditioner functionality - for preconditiong gradient information - :type restarted: bool - :param restarted: a flag signalling if the optimization algorithm has - been restarted recently - - :param m_new: current model - :param m_old: previous model - :param m_try: line search model - :param f_new: current objective function value - :param f_old: previous objective function value - :param f_try: line search function value - :param g_new: current gradient direction - :param g_old: previous gradient direction - :param p_new: current search direction - :param p_old: previous search direction - """ - self.iter = 1 - self.line_search = None - self.precond = None - self.restarted = False - - # Define the names of output stats logs to keep all paths in one place - # Line search log is named differently so that optimize doesn't - # overwrite this log file when intiating the stats directory - self.line_search_log = "line_search" - self.log_factor = "factor" - self.log_gradient_norm_L1 = "gradient_norm_L1" - self.log_gradient_norm_L2 = "gradient_norm_L2" - self.log_misfit = "misfit" - self.log_restarted = "restarted" - self.log_slope = "slope" - self.log_step_count = "step_count" - self.log_step_length = "step_length" - self.log_theta = "theta" - - # Define the names of variables used to keep track of models etc. so - # that we don't have multiple strings floating around defining the same - # thing - self.m_new = "m_new.npy" - self.m_old = "m_old.npy" - self.m_try = "m_try.npy" - self.f_new = "f_new.txt" - self.f_old = "f_old.txt" - self.f_try = "f_try.txt" - self.g_new = "g_new.npy" - self.g_old = "g_old.npy" - self.p_new = "p_new.npy" - self.p_old = "p_old.npy" - self.alpha = "alpha.npy" - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters() - - # Define the Parameters required by this module - sf.par("LINESEARCH", required=False, default="Bracket", par_type=str, - docstr="Algorithm to use for line search, see " - "seisflows.plugins.line_search for available choices") - - sf.par("PRECOND", required=False, par_type=str, - docstr="Algorithm to use for preconditioning gradients, see " - "seisflows.plugins.preconds for available choices") - - sf.par("STEPCOUNTMAX", required=False, default=10, par_type=int, - docstr="Max number of trial steps in line search before a " - "change in line search behavior") - - sf.par("STEPLENINIT", required=False, default=0.05, par_type=float, - docstr="Initial line search step length, as a fraction " - "of current model parameters") - - sf.par("STEPLENMAX", required=False, default=0.5, par_type=float, - docstr="Max allowable step length, as a fraction of " - "current model parameters") - - # Define the Paths required by this module - sf.path("OPTIMIZE", required=False, - default=os.path.join(PATH.SCRATCH, "optimize"), - docstr="scratch path for nonlinear optimization data") - - return sf - - def check(self, validate=True): - """ - Checks parameters, paths, and dependencies - """ - if validate: - self.required.validate() - - if PAR.LINESEARCH: - assert PAR.LINESEARCH in dir(line_search), \ - f"LINESEARCH parameter must be in {dir(line_search)}" - - if PAR.PRECOND: - assert PAR.PRECOND in dir(preconds), \ - f"PRECOND must be in {dir(preconds)}" - - assert 0. < PAR.STEPLENINIT, f"STEPLENINIT must be >= 0." - assert 0. < PAR.STEPLENMAX, f"STEPLENMAX must be >= 0." - assert PAR.STEPLENINIT < PAR.STEPLENMAX, \ - f"STEPLENINIT must be < STEPLENMAX" - - def setup(self): - """ - Sets up nonlinear optimization machinery - """ - # All ptimization statistics text files will be written to path_stats - path_stats = os.path.join(PATH.WORKDIR, CFGPATHS.STATSDIR) - unix.mkdir(path_stats) - - # Line search machinery is defined externally as a plugin class - self.line_search = getattr(line_search, PAR.LINESEARCH)( - step_count_max=PAR.STEPCOUNTMAX, step_len_max=PAR.STEPLENMAX, - log_file=os.path.join(path_stats, f"{self.line_search_log}.txt"), - ) - - if PAR.PRECOND: - self.precond = getattr(preconds, PAR.PRECOND)() - else: - self.precond = None - - # Instantiate all log files in stats/ directory as empty text files - # OVERWRITES any existing stats/ log files that may already be there - for key, val in vars(self).items(): - if "log_" in key: - self.write_stats(val) - - # Ensure that line search step count starts at 0 (workflow.intialize) - self.write_stats(self.log_step_count, 0) - - unix.mkdir(PATH.OPTIMIZE) - if "MODEL_INIT" in PATH: - m_new = solver.merge(solver.load(PATH.MODEL_INIT)) - self.save(self.m_new, m_new) - self.check_model(m_new, self.m_new) - - @property - def eval_str(self): - """ - Print out the evaluation string, which states what iteration and line - search step count we are at. Useful for log statements - - For example, an inversion at iteration 1 and step count 2 will return - 'i01s02' - """ - iter_ = self.iter - step = self.line_search.step_count - return f"i{iter_:0>2}s{step:0>2}" - - def compute_direction(self): - """ - Computes a steepest descent search direction (inverse gradient) - with an optional user-defined preconditioner. - - .. note:: - Other optimization algorithms must overload this method - """ - self.logger.info(f"computing search direction with {PAR.OPTIMIZE}") - - g_new = self.load(self.g_new) - if self.precond is not None: - p_new = -1 * self.precond(g_new) - else: - p_new = -1 * g_new - self.save(self.p_new, p_new) - - def initialize_search(self): - """ - Initialize the plugin line search machinery. Should only be run at - the beginning of line search, by the main workflow module. - """ - m = self.load(self.m_new) - g = self.load(self.g_new) - p = self.load(self.p_new) - f = self.loadtxt(self.f_new) - norm_m = max(abs(m)) - norm_p = max(abs(p)) - gtg = dot(g, g) - gtp = dot(g, p) - - # Restart plugin line search if the optimization library restarts - if self.restarted: - self.line_search.clear_history() - - # Optional safeguard to prevent step length from getting too large - if PAR.STEPLENMAX: - self.line_search.step_len_max = PAR.STEPLENMAX * norm_m / norm_p - self.logger.debug(f"max step length safeguard is: " - f"{self.line_search.step_len_max:.2E}") - - # Alpha defines the trial step length - alpha, _ = self.line_search.initialize(iter=self.iter, step_len=0., - func_val=f, gtg=gtg, gtp=gtp - ) - - # Optional initial step length override - if PAR.STEPLENINIT and len(self.line_search.step_lens) <= 1: - alpha = PAR.STEPLENINIT * norm_m / norm_p - self.logger.debug(f"manually set initial step length: {alpha:.2E}") - - # The new model is the old model, scaled by the step direction and - # gradient threshold to remove any outlier values - m_try = m + alpha * p - - self.save(self.m_try, m_try) - self.savetxt(self.alpha, alpha) - self.check_model(m_try, self.m_try) - - def update_search(self): - """ - Updates line search status and step length and checks if the line search - has been completed. - - Available status codes from line_search.update(): - status == 1 : finished - status == 0 : not finished - status == -1 : failed - """ - alpha, status = self.line_search.update( - iter=self.iter, step_len=self.loadtxt(self.alpha), - func_val=self.loadtxt(self.f_try) - ) - - # New search direction needs to be searchable on disk - if status in [0, 1]: - m = self.load(self.m_new) - p = self.load(self.p_new) - self.savetxt(self.alpha, alpha) - m_try = m + alpha * p - self.save(self.m_try, m_try) - self.check_model(m_try, self.m_try) - - return status - - def finalize_search(self): - """ - Prepares algorithm machinery and scratch directory for next model update - - Removes old model/search parameters, moves current parameters to old, - sets up new current parameters and writes statistic outputs - """ - self.logger.info(msg.sub("FINALIZING LINE SEARCH")) - - g = self.load(self.g_new) - p = self.load(self.p_new) - x = self.line_search.search_history()[0] - f = self.line_search.search_history()[1] - - # Clean scratch directory - unix.cd(PATH.OPTIMIZE) - - # Remove the old model parameters - if self.iter > 1: - self.logger.info("removing previously accepted model files (old)") - for fid in [self.m_old, self.f_old, self.g_old, self.p_old]: - unix.rm(fid) - - self.logger.info("shifting current model (new) to previous model (old)") - unix.mv(self.m_new, self.m_old) - unix.mv(self.f_new, self.f_old) - unix.mv(self.g_new, self.g_old) - unix.mv(self.p_new, self.p_old) - - self.logger.info("setting accepted line search model as current model") - unix.mv(self.m_try, self.m_new) - self.savetxt(self.f_new, f.min()) - self.logger.info(f"current misfit is {self.f_new}={f.min():.3E}") - - # !!! TODO Describe what stats are being written here - self.logger.info(f"writing optimization stats to: {CFGPATHS.STATSDIR}") - self.write_stats(self.log_factor, value= - -dot(g, g) ** -0.5 * (f[1] - f[0]) / (x[1] - x[0]) - ) - self.write_stats(self.log_gradient_norm_L1, value=np.linalg.norm(g, 1)) - self.write_stats(self.log_gradient_norm_L2, value=np.linalg.norm(g, 2)) - self.write_stats(self.log_misfit, value=f[0]) - self.write_stats(self.log_restarted, value=self.restarted) - self.write_stats(self.log_slope, value=(f[1] - f[0]) / (x[1] - x[0])) - self.write_stats(self.log_step_count, value=self.line_search.step_count) - self.write_stats(self.log_step_length, value=x[f.argmin()]) - self.write_stats(self.log_theta, - value=180. * np.pi ** -1 * angle(p, -g)) - - self.logger.info("resetting line search step count to 0") - self.line_search.step_count = 0 - - def retry_status(self): - """ - After a failed line search, this determines if restart is worthwhile - by checking, in effect, if the search direction was the same as gradient - direction - """ - g = self.load(self.g_new) - p = self.load(self.p_new) - theta = angle(p, -g) - - self.logger.debug(f"theta: {theta:6.3f}") - - thresh = 1.e-3 - if abs(theta) < thresh: - return 0 - else: - return 1 - - def restart(self): - """ - Restarts nonlinear optimization algorithm for any schema that is NOT - steepest descent (default base class). - - Keeps current position in model space, but discards history of - nonlinear optimization algorithm in an attempt to recover from - numerical stagnation. - """ - # Steepest descent (base) does not need to be restarted - if PAR.OPTIMIZE != "base": - g = self.load(self.g_new) - self.save(self.p_new, -g) - self.line_search.clear_history() - self.restarted = 1 - - def write_stats(self, log, value=None, format="18.6E"): - """ - Simplified write function to append values to text files in the - STATSDIR. Used because stats line search information can be overwritten - by subsequent iterations so we need to append values to text files - if they should be retained. - - Log files will look something like: - - ITER FACTOR - ==== ====== - 1 0.0 - - :type log: str - :param log: name of the file to write to. Will append .txt to it - :type value: float - :param value: value to write to file - :type format: str - :param format: string formatter for value - """ - fid = os.path.join(PATH.WORKDIR, CFGPATHS.STATSDIR, f"{log}.txt") - - # If no value is given, assuming we are being run from setup() and - # writing to new files. Will OVERWRITE any existing files - if value is None: - with open(fid, "w") as f: - f.write(f"{'ITER':>4} {log.upper():>18}\n") - f.write(f"{'='*4} {'='*18}\n") - - else: - with open(fid, "a") as f: - f.write(f"{self.iter:>4} {value:{format}}\n") - - def check_model(self, m, tag): - """ - Check to ensure that the model parameters fall within the guidelines - of the solver. Print off min/max model parameters for the User. - - :type m: np.array - :param m: model to check parameters of - :type tag: str - :param tag: tag of the model to be used for more specific error msgs - """ - # Dynamic way to split up the model based on number of params - pars = {} - for i, par in enumerate(solver.parameters): - pars[par] = np.split(m, len(solver.parameters))[i] - - # Check Poisson's ratio, which will error our SPECFEM if outside limits - if (pars["vp"] is not None) and (pars["vs"] is not None): - self.logger.debug(f"checking poissons ratio for: '{tag}'") - pars["pr"] = check_poissons_ratio(vp=pars["vp"], vs=pars["vs"]) - if pars["pr"].min() < 0: - self.logger.warning("minimum poisson's ratio is negative") - - # Tell the User min and max values of the updated model - self.logger.info(f"model parameters ({tag} {self.eval_str}):") - parts = "{minval:.2f} <= {key} <= {maxval:.2f}" - for key, vals in pars.items(): - self.logger.info(parts.format(minval=vals.min(), key=key, - maxval=vals.max()) - ) - - @staticmethod - def load(filename): - """ - Convenience function to reads vectors from disk as Numpy files, - reads directly from PATH.OPTIMIZE. Works around Numpy's behavior of - appending '.npy' to files that it saves. - - :type filename: str - :param filename: filename to read from - :rtype: np.array - :return: vector read from disk - """ - fid = os.path.join(PATH.OPTIMIZE, filename) - if not os.path.exists(fid): - fid += ".npy" - return np.load(fid) - - @staticmethod - def save(filename, array): - """ - Convenience function to write vectors to disk as numpy files. - Reads directly from PATH.OPTIMIZE - - :type filename: str - :param filename: filename to read from - :type array: np.array - :param array: array to be saved - """ - np.save(os.path.join(PATH.OPTIMIZE, filename), array) - - @staticmethod - def loadtxt(filename): - """ - Reads scalars from optimize directory on disk, - accounts for savetxt() appending file extension - - :type filename: str - :param filename: filename to read from - :rtype: float - :return: scalar read from disk - """ - if not os.path.splitext(filename)[1]: - filename += ".txt" - return float(np.loadtxt(os.path.join(PATH.OPTIMIZE, filename))) - - @staticmethod - def savetxt(filename, scalar): - """ - Writes scalars to disk with a specific format, appends .txt to the - filename to make it clear that these are text files. - - :type filename: str - :param filename: filename to read from - :type scalar: float - :param scalar: value to write to disk - """ - if not os.path.splitext(filename)[1]: - filename += ".txt" - np.savetxt(os.path.join(PATH.OPTIMIZE, filename), [scalar], "%11.6e") - - diff --git a/seisflows/optimize/gradient.py b/seisflows/optimize/gradient.py new file mode 100644 index 00000000..a8da42d3 --- /dev/null +++ b/seisflows/optimize/gradient.py @@ -0,0 +1,562 @@ +#!/usr/bin/env python3 +""" +Gradient descent nonlinear optimization algorithm. Acts as the Base class for +optimization. + +The Optimization library contains classes and methods used to solve nonlinear +optimization problems, i.e., misfit minimization. Various subclasses implement +different optimization algorithms. + +.. note:: + To reduce memory overhead, and to enable optimization restarts due to + failed line searches, model/gradient vectors and line search history are + passed on disk rather than in memory. + +.. note:: + The default numerical parameters for each algorithm should work well for a + range of applications without manual tuning. If the nonlinear + optimization procedure stagnates, it may be due to issues involving: + + 1) poor data quality + 2) choice of objective function + 3) data processing parameters (i.e., filter bandpass) + 4) regularization methods + + Problems in any of these areas usually manifest themselves through + stagnation of the nonlinear optimizationalgorithm. +""" +import os +import numpy as np +from glob import glob + +from seisflows import logger +from seisflows.tools import msg, unix +from seisflows.tools.config import Dict +from seisflows.tools.math import angle, dot +from seisflows.tools.model import Model +from seisflows.plugins import line_search as line_search_dir + + +class Gradient: + """ + Gradient Optimization + --------------------- + Defines foundational structure for Optimization module. Applies a + gradient/steepest descent optimization algorithm. + + Parameters + ---------- + :type line_search_method: str + :param line_search_method: chosen line_search algorithm. Currently available + are 'bracket' and 'backtrack'. See seisflows.plugins.line_search + for all available options + :type preconditioner: str + :param preconditioner: algorithm for preconditioning gradients. Currently + available: 'diagonal'. Requires `path_preconditioner` to point to a + set of files that define the preconditioner, formatted the same as the + input model + :type step_count_max: int + :param step_count_max: maximum number of trial steps to perform during + the line search before a change in line search behavior is + considered, or a line search is considered to have failed. + :type step_len_init: float + :param step_len_init: initial line search step length guess, provided + as a fraction of current model parameters. + :type step_len_max: float + :param step_len_max: maximum allowable step length during the line + search. Set as a fraction of the current model parameters + + Paths + ----- + :type path_preconditioner: str + :param path_preconditioner: optional path to a set of preconditioner files + formatted the same as the input model (or output model of solver). + Required to exist and contain files if `preconditioner`==True + *** + """ + def __init__(self, line_search_method="bracket", + preconditioner=None, step_count_max=10, step_len_init=0.05, + step_len_max=0.5, workdir=os.getcwd(), path_optimize=None, + path_output=None, path_preconditioner=None, **kwargs): + """ + Gradient-descent input parameters. + + .. note:: + Paths listed here are shared with `workflow.forward` and so are not + included in the class docstring. + + :type workdir: str + :param workdir: working directory in which to look for data and store + results. Defaults to current working directory + :type path_output: str + :param path_output: path to directory used for permanent storage on disk. + Results and exported scratch files are saved here. + """ + super().__init__() + + self.preconditioner = preconditioner + self.step_count_max = step_count_max + self.step_len_init = step_len_init + self.step_len_max = step_len_max + + # Set required path structure + self.path = Dict( + scratch=path_optimize or + os.path.join(workdir, "scratch", "optimize"), + output=path_output or os.path.join(workdir, "output"), + preconditioner=path_preconditioner, + ) + + # Hidden paths to store checkpoint file in scratch directory + self.path["_checkpoint"] = os.path.join(self.path.scratch, + "checkpoint.npz") + self.path["_stats_file"] = os.path.join(self.path.scratch, + "output_optim.txt") + + # Internal check to see if the chosen line search algorithm exists + if not hasattr(line_search_dir, line_search_method): + logger.warning(f"{line_search_method} is not a valid line search " + f"algorithm, defaulting to 'bracket'") + line_search_method = "bracket" + + self.line_search_method = line_search_method + + # Internally used parameters for keeping track of optimization + self._restarted = False + self._acceptable_vectors = ["m_new", "m_old", "m_try", + "g_new", "g_old", "g_try", + "p_new", "p_old", "alpha", + "f_new", "f_old", "f_try"] + self._acceptable_preconditioners = ["diagonal"] + + # .title() ensures we grab the class and not the module + self._line_search = getattr( + line_search_dir, line_search_method.title())( + step_count_max=step_count_max, step_len_max=step_len_max, + ) + + @property + def step_count(self): + """Convenience property to access `step_count` from line search""" + return self._line_search.step_count + + def check(self): + """ + Checks parameters, paths, and dependencies + """ + if self.preconditioner: + # This list should match the logic in self.precondition() + assert self.preconditioner in self._acceptable_preconditioners, \ + f"PRECOND must be in {self._acceptable_preconditioners}" + + assert(os.path.exists(self.path.preconditioner)), ( + f"preconditioner requires PATH.PRECOND pointing to a array-like" + f"weight file" + ) + + assert 0. < self.step_len_init, f"optimize.step_len_init must be >= 0." + assert 0. < self.step_len_max, f"optimize.step_len_max must be >= 0." + assert self.step_len_init < self.step_len_max, \ + f"optimize.step_len_init must be < optimize.step_len_max" + + def setup(self): + """ + Sets up nonlinear optimization machinery + """ + unix.mkdir(self.path.scratch) + + # Load checkpoint (if resuming) or save current checkpoint + self.load_checkpoint() + self.checkpoint() # will be empty + + def load_vector(self, name): + """ + Convenience function to access the full paths of model and gradient + vectors that are saved to disk + + .. note:: + Model, gradient and misfit vectors are named as follows: + m_new: current model + m_old: previous model + m_try: line search model + f_new: current objective function value + f_old: previous objective function value + f_try: line search function value + g_new: current gradient direction + g_old: previous gradient direction + p_new: current search direction + p_old: previous search direction + alpha: trial search direction (aka p_try) + + :type name: str + :param name: name of the vector, acceptable: m, g, p, f, alpha + """ + assert(name in self._acceptable_vectors) + + model_npz = os.path.join(self.path.scratch, f"{name}.npz") + model_npy = model_npz.replace(".npz", ".npy") + model_txt = model_npz.replace(".npz", ".txt") + + if os.path.exists(model_npz): + model = Model(path=model_npz) + elif os.path.exists(model_npy): + model = np.load(model_npy) + elif os.path.exists(model_txt): + model = float(np.loadtxt(model_txt)) + else: + raise FileNotFoundError(f"no optimization file found for '{name}'") + + return model + + def save_vector(self, name, m): + """ + Convenience function to save/overwrite vectors on disk + + :type name: str + :param name: name of the vector to overwrite + :type m: seisflows.tools.specfem.Model or float + :param m: Model to save to disk as npz array + """ + assert(name in self._acceptable_vectors) + + if isinstance(m, Model): + path = os.path.join(self.path.scratch, f"{name}.npz") + m.model = m.split() # overwrite m representation + m.save(path=path) + elif isinstance(m, np.ndarray): + path = os.path.join(self.path.scratch, f"{name}.npy") + np.save(path=path) + elif isinstance(m, (float, int)): + path = os.path.join(self.path.scratch, f"{name}.txt") + np.savetxt(path, [m]) + else: + raise TypeError(f"optimize.save unrecognized type error {type(m)}") + + def checkpoint(self): + """ + The optimization module (and its underlying `line_search` attribute) + requires continuity across runs of the same workflow (e.g., in the + event of a failed job). This function saves internal attributes of + the optimization module to disk so that a resumed workflow does not + lose information from its previous version. + + User can checkpoint other variables by adding kwargs + """ + dict_out = dict(restarted=self._restarted, + func_vals=self._line_search.func_vals, + step_lens=self._line_search.step_lens, + gtg=self._line_search.gtg, + gtp=self._line_search.gtp, + step_count=self._line_search.step_count) + + np.savez(file=self.path._checkpoint, **dict_out) # NOQA + + def load_checkpoint(self): + """ + Counterpart to `optimize.checkpoint`. Loads a checkpointed optimization + module from disk and sets internal tracking attributes. + """ + # NumPy appends '.npz' when saving. Make sure we honor that. + if not self.path._checkpoint.endswith(".npz"): + fid = f"{self.path._checkpoint}.npz" + else: + fid = self.path._checkpoint + + if os.path.exists(fid): + logger.info("re-loading optimization module from checkpoint") + dict_in = np.load(file=fid) + + self._restarted = bool(dict_in["restarted"]) + self._line_search.func_vals = list(dict_in["func_vals"]) + self._line_search.step_lens = list(dict_in["step_lens"]) + self._line_search.gtg = list(dict_in["gtg"]) + self._line_search.gtp = list(dict_in["gtp"]) + self._line_search.step_count = int(dict_in["step_count"]) + else: + logger.info("no optimization checkpoint found, assuming first run") + self.checkpoint() + + def _precondition(self, q): + """ + Apply available preconditioner to a given gradient + + :type q: np.array + :param q: Vector to precondition, typically gradient contained in: g_new + :rtype: np.array + :return: preconditioned vector + """ + if self.preconditioner is not None: + p = Model(path=self.path.preconditioner) + if self.preconditioner.upper() == "DIAGONAL": + logger.info("applying diagonal preconditioner") + return p.vector * q + else: + raise NotImplementedError( + f"preconditioner {self.preconditioner} not supported" + ) + else: + return q + + def compute_direction(self): + """ + Computes steepest descent search direction (inverse gradient) + with an optional user-defined preconditioner. + + .. note:: + Other optimization algorithms must overload this method + + :rtype: seisflows.tools.specfem.Model + :return: search direction as a Model instance + """ + g_new = self.load_vector("g_new") + p_new = g_new.copy() + p_new.update(vector=-1 * self._precondition(g_new.vector)) + + return p_new + + def initialize_search(self): + """ + Generate a trial model by perturbing the current model in the search + direction with a given step length, calculated by the chosen line + search algorithm. + + :rtype: tuple + :return: (Model, float) or (m_try==trial model, alpha=step length) + """ + m = self.load_vector("m_new") # current model from external solver + g = self.load_vector("g_new") # current gradient from scaled kernels + p = self.load_vector("p_new") # current search direction + f = self.load_vector("f_new") # current misfit value from preprocess + + norm_m = max(abs(m.vector)) + norm_p = max(abs(p.vector)) + gtg = dot(g.vector, g.vector) + gtp = dot(g.vector, p.vector) + + # Restart plugin line search if the optimization library restarts + if self._restarted: + self._line_search.clear_search_history() + + # Optional safeguard to prevent step length from getting too large + if self.step_len_max: + new_step_len_max = self.step_len_max * norm_m / norm_p + self._line_search.step_len_max = new_step_len_max + logger.info(f"enforcing max step length safeguard") + + # Initialize the line search and save it to disk. + self._line_search.update_search_history(func_val=f, step_len=0., + gtg=gtg, gtp=gtp) + + alpha, _ = self._line_search.calculate_step_length() + + # Alpha defines the trial step length. Optional step length override + if self.step_len_init and len(self._line_search.step_lens) <= 1: + alpha = self.step_len_init * norm_m / norm_p + logger.debug(f"overwriting initial step length, " + f"alpha_new={alpha:.2E}") + + # The new model is the old model, scaled by the step direction and + # gradient threshold to remove any outlier values + m_try = m.copy() + m_try.update(vector=m.vector + alpha * p.vector) + logger.info("trial model 'm_try' parameters: ") + m_try.check() + + return m_try, alpha + + def update_line_search(self): + """ + Updates line search status and step length after a forward simulation + has been run and misfit calculated. Checks misfit against line search + history to see if the line search has been completed. + + .. note:: + This is a bit confusing as it calculates the step length `alpha` for + the NEXT line search step, while storing the `alpha` value that + was calculated from the LAST line search step. This is because we + need a corresponding misfit `f_try` from the value of `alpha`, which + happens externally with the solver module + + If line search returns a passing exit code (0 or 1), sets up for a + subsequent line search evaluation by saving a new step length (alpha), + and creating a new trial model (m_try). + + .. note: + Available status returns are: + 'TRY': try/re-try the line search as conditions have not been met + 'PASS': line search was successful, you can terminate the search + 'FAIL': line search has failed for one or more reasons. + + :rtype: tuple + :return: (Model, float, bool) or (m_try==trial model, alpha=step length, + status==how to proceed with line search) + """ + # Collect information on a forward evaluation that just took place + alpha_try = self.load_vector("alpha") # step length + f_try = self.load_vector("f_try") # misfit for the trial model + + # Update the line search with a new step length and misfit value + self._line_search.step_count += 1 + self._line_search.update_search_history(step_len=alpha_try, + func_val=f_try) + + # Calculate a new step length based on the current step length and its + # corresponding misfit. + alpha, status = self._line_search.calculate_step_length() + + # Note: if status is 'PASS' then `alpha` represents the step length of + # the lowest misfit in the line search and we reconstruct `m_try` w/ it + if status.upper() in ["PASS", "TRY"]: + # Create a new trial model based on search direction, step length + # and the initial model vector + _m = self.load_vector("m_new") + _p = self.load_vector("p_new") + + # Sets the latest trial model using the current `alpha` value + m_try = _m.copy() + m_try.update(vector=_m.vector + alpha * _p.vector) + logger.info("line search model 'm_try' parameters: ") + m_try.check() + elif status.upper() == "FAIL": + # Failed line search skips over costly vector manipulations + m_try = None + + return m_try, alpha, status + + def finalize_search(self): + """ + Prepares algorithm machinery and scratch directory for next model update + + Removes old model/search parameters, moves current parameters to old, + sets up new current parameters and writes statistic outputs + """ + unix.cd(self.path.scratch) + + logger.info(msg.sub("FINALIZING LINE SEARCH")) + + # Remove the old model parameters + if glob("?_old"): + logger.info("removing previously accepted model files (?_old)") + for fid in ["m_old", "f_old", "g_old", "p_old"]: + unix.rm(os.path.join(self.path.scratch, fid)) + + # Needs to be run before shifting model in next step + self._write_stats() + + logger.info("renaming current (new) optimization vectors as " + "previous model (old)") + # e.g., m_new.npz -> m_old.npz + for src in glob(os.path.join(self.path.scratch, "*_new.*")): + dst = src.replace("_new.", "_old.") + unix.mv(src, dst) + + # Reconstruct + x, f, *_ = self._line_search.get_search_history() + + logger.info("setting accepted trial model (try) as current model (new)") + unix.mv(src=os.path.join(self.path.scratch, "m_try.npz"), + dst=os.path.join(self.path.scratch, "m_new.npz")) + + # Choose minimum misfit value as final misfit/model. index 0 is initial + f = self._line_search.get_search_history()[1] + self.save_vector("f_new", f.min()) + logger.info(f"misfit of accepted trial model is f={f.min():.3E}") + + logger.info("resetting line search step count to 0") + self._line_search.step_count = 0 + + def attempt_line_search_restart(self, threshold=1E-3): + """ + After a failed line search, this determines if restart is worthwhile + by checking, in effect, if the search direction was the same as the + negative gradientdirection. + + Essentially checking if this is a steepest-descent optimization, which + cannot and should not be restarted. If the search direction is calc'ed + by another optimization schema, the search direction and gradient should + differ + + :type threshold: float + :param threshold: angle threshold for the angle between the search + direction and the gradient. + :rtype: bool + :return: pass (True) fail (False) status for retrying line search + """ + g = self.load_vector("g_new") + p = self.load_vector("p_new") + + theta = angle(p.vector, -1 * g.vector) + logger.debug(f"checking gradient/search direction angle, " + f"theta: {theta:6.3f}") + + if abs(theta) < threshold: + return False # Do not restart + else: + return True # Go for restart + + def restart(self): + """ + Restarts nonlinear optimization algorithm for any schema that is NOT + steepest descent (default base class). + + Keeps current position in model space, but discards history of + nonlinear optimization algorithm in an attempt to recover from + numerical stagnation. + + .. note:: + steepest descent optimization algorithm does not have any restart + capabilities. This function is instantiated here to be overwritten + by child classes + """ + pass + + def _write_stats(self): + """ + Simplified write function to append values to text files. + Used because stats line search information can be overwritten + by subsequent iterations so we need to append values to text files + if they should be retained. + + .. note:: + This CSV file can be easily read and plotted using np.genfromtxt + >>> np.genfromtxt("optim_stats.txt", delimiter=",", names=True, \ + dtype=None) + """ + logger.info(f"writing optimization stats") + # First time, write header information + if not os.path.exists(self.path._stats_file): + _head = ("step_count,step_length,gradient_norm_L1,gradient_norm_L2," + "misfit,if_restarted,slope,theta\n") + with open(self.path._stats_file, "w") as f: + f.write(_head) + + g = self.load_vector("g_new") + p = self.load_vector("p_new") + x, f, *_ = self._line_search.get_search_history() + + # Calculated stats factors + # TODO What is this? It was returning a RuntimeError for value too small + # for double precision. Do we need to keep it? + # factor = -1 * dot(g.vector, g.vector) + # factor = factor ** -0.5 * (f[1] - f[0]) / (x[1] - x[0]) + + grad_norm_L1 = np.linalg.norm(g.vector, 1) + grad_norm_L2 = np.linalg.norm(g.vector, 2) + + misfit = f[0] + slope = (f[1] - f[0]) / (x[1] - x[0]) + step_count = self._line_search.step_count + step_length = x[f.argmin()] + theta = 180. * np.pi ** -1 * angle(p.vector, -1 * g.vector) + + with open(self.path._stats_file, "a") as f: + f.write(# f"{factor:6.3E}," + f"{step_count:0>2}," + f"{step_length:6.3E}," + f"{grad_norm_L1:6.3E}," + f"{grad_norm_L2:6.3E}," + f"{misfit:6.3E}," + f"{int(self._restarted)}," + f"{slope:6.3E}," + f"{theta:6.3E}\n" + ) diff --git a/seisflows/plugins/line_search/__init__.py b/seisflows/plugins/line_search/__init__.py index c3c93388..056d49ea 100644 --- a/seisflows/plugins/line_search/__init__.py +++ b/seisflows/plugins/line_search/__init__.py @@ -1,4 +1,3 @@ -from .base import Base from .bracket import Bracket from .backtrack import Backtrack diff --git a/seisflows/plugins/line_search/backtrack.py b/seisflows/plugins/line_search/backtrack.py index 3be1c19e..a86db90b 100644 --- a/seisflows/plugins/line_search/backtrack.py +++ b/seisflows/plugins/line_search/backtrack.py @@ -1,23 +1,23 @@ #!/usr/bin/env python3 """ -This is the subclass class for seisflows.plugins.line_search.backtrack -""" -import logging +Backtracking line search class plugin to be used with an L-BFGS optimization -from seisflows.tools import msg +https://en.wikipedia.org/wiki/Backtracking_line_search +""" +from seisflows import logger from seisflows.plugins.line_search.bracket import Bracket from seisflows.tools.math import parabolic_backtrack class Backtrack(Bracket): """ - Overwrites seisflows.plugins.line_search.Bracket - - Implements backtracking linesearch. A backtracking line search is used - for L-BFGS optimization, where a unit step length is attempted, if this - does not satisfy the misfit reduction criteria, the step length is - `backtracked` to a smaller value. If the backtracked value becomes too small - the backtracking line search defaults to a Bracketing line search. + [line_search.backtrack] Backtracking line search assumes the + gradient is well scaled from the L-BFGS optimization algorithm, such + that a unit step length (1) will provide a decrease in misfit. If + misfit does not decrease, the backtracking step count follows a + parabolic backtrack from 1 -> 0 in search of a decreased misfit. If the + backtracked value becomes too small the backtracking line search defaults to + a Bracketing line search. Variables Descriptions: x: list of step lenths from current line search @@ -28,77 +28,74 @@ class Backtrack(Bracket): gtp: dot product of gradient and search direction Status codes - status > 0 : finished - status == 0 : not finished - status < 0 : failed + status == 1 : PASS, line search finished + status == 0 : TRY/RETRY, attempt line search w/ new step length + status == -1 : FAIL, line search exceeds internal criteria """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self, **kwargs): + def calculate_step_length(self): """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - """ - super().__init__(**kwargs) + Determines step length and search status. Defaults to 'Bracket'ing + line search during the first evaluation (waiting for the L-BFGS to scale + properly). - def calculate_step(self): - """ - Determines step length and search status + .. note:: + Search history variable descriptions: + x: list of step lenths from current line search + f: correpsonding list of function values + m: number of step lengths in current line search + n: number of model updates in optimization problem + gtg: dot product of gradient with itself + gtp: dot product of gradient and search direction + + .. note: + Available status returns are: + 'TRY': try/re-try the line search as conditions have not been met + 'PASS': line search was successful, you can terminate the search + 'FAIL': line search has failed for one or more reasons. + + :rtype: tuple (float, str) + :return: (alpha==calculated step length, + status==how to treat the next step count evaluation) """ # Determine the line search history - x, f, gtg, gtp, step_count, update_count = self.search_history() - + x, f, gtg, gtp, step_count, update_count = self.get_search_history() + # quasi-Newton direction is not yet scaled properly, so instead # of a bactracking line perform a bracketing line search if update_count == 0: - alpha, status = super().calculate_step() + alpha, status = super().calculate_step_length() # Assumed well scaled search direction, attempt backtracking line search # with unit step length else: - self.logger.info(msg.sub("EVALUATE BACKTRACKING LINE SEARCH")) - x_str = ", ".join([f"{_:.2E}" for _ in x]) - f_str = ", ".join([f"{_:.2E}" for _ in f]) - self.logger.debug(f"step length(s) = {x_str}") - self.logger.debug(f"misfit val(s) = {f_str}") + self._print_stats(x, f) # Initial unit step length if step_count == 0: - self.logger.info("attempting unit step length") alpha = min(1., self.step_len_max) - status = 0 + logger.info(f"try: attempt unit step length w/ alpha={alpha}") + status = "TRY" # Pass if misfit is reduced - elif self._check_decrease(x, f): - self.logger.info("misfit decrease, pass") + elif f.min() < f[0]: alpha = x[f.argmin()] - status = 1 + logger.info(f"pass: misfit decreased, line search " + f"successful w/ alpha={alpha}") + status = "PASS" # If misfit continually increases, decrease step length - elif step_count <= self.step_count_max: - self.logger.info("misfit increase, decreasing step length") + elif step_count < self.step_count_max: slope = gtp[-1] / gtg[-1] alpha = parabolic_backtrack(f0=f[0], g0=slope, x1=x[1], f1=f[1], b1=0.1, b2=0.5) - status = 0 + logger.info(f"try: misfit increasing, attempting " + f"to decrease step length to alpha={alpha}") + status = "TRY" # Failed because step_count_max exceeded else: - self.logger.info("backtracking failed, step_count_max exceeded") + logger.info(f"fail: backtracking line search has " + f"failed because the maximum allowable step counts " + f"({self.step_count_max}) has been exceeded") alpha = None - status = -1 + status = "FAIL" return alpha, status - @staticmethod - def _check_decrease(step_lens, func_vals, c=1.e-4): - """ - Checks for sufficient decrease by comparing the current functional value - with the smallest functional value in the list. - - !!! What's with the unused value of 'c'?, also 'x' isn't used - """ - x, f = step_lens, func_vals - if f.min() < f[0]: - return 1 - else: - return 0 - diff --git a/seisflows/plugins/line_search/base.py b/seisflows/plugins/line_search/base.py deleted file mode 100644 index 0f77772d..00000000 --- a/seisflows/plugins/line_search/base.py +++ /dev/null @@ -1,239 +0,0 @@ -#!/usr/bin/env python3 -""" -This is the Base class for seisflows.plugins.line_search - -Line search is called on by the optimization procedure and should not really -have any agency (i.e. it should not be able to iterate its own step count etc., -this should be completely left to the optimization algorithm to keep everything -in one place) -""" -import os -import logging -import numpy as np - -from seisflows.tools.array import count_zeros - - -class Base: - """ - Abstract base class for line search - - Variables Descriptions: - x: list of step lenths from current line search - f: correpsonding list of function values - m: number of step lengths in current line search - n: number of model updates in optimization problem - gtg: dot product of gradient with itself - gtp: dot product of gradient and search direction - - Status codes - status > 0 : finished - status == 0 : not finished - status < 0 : failed - """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self, step_count_max, step_len_max, log_file): - """ - - :type step_count_max: int - :param step_count_max: maximum number of step counts before changing - line search behavior. set by PAR.STEP_COUNT_MAX - :type step_len_max: int - :param step_len_max: maximum length of the step, defaults to infinity, - that is unbounded step length. set by PAR.STEP_LEN_MAX - :type log_file: str - :param log_file: path to write line search stats to. set by optimize.setup() - """ - # Set maximum number of trial steps - self.step_count_max = step_count_max - - # Optional maximum step length safeguard - if step_len_max is None: - self.step_len_max = np.inf - else: - self.step_len_max = step_len_max - - # Write header information to line search file - self.log = log_file - self.write_log() - - # Prepare lists for line search history - self.func_vals = [] - self.step_lens = [] - self.gtg = [] - self.gtp = [] - self.step_count = 0 - - def initialize(self, iter, step_len, func_val, gtg, gtp): - """ - Initialize a new search from step count 0 and calculate the step - direction and length - - :type iter: int - :param iter: current iteration defined by OPTIMIZE.iter - :type step_len: float - :param step_len: initial step length determined by optimization - :type func_val: float - :param func_val: current evaluation of the objective function - :type gtg: float - :param gtg: dot product of the gradient with itself - :type gtp: float - :param gtp: dot product of gradient `g` with search direction `p` - :rtype alpha: float - :return alpha: the calculated trial step length - :rtype status: int - :return status: current status of the line search - """ - self.step_count = 0 - self.step_lens += [step_len] - self.func_vals += [func_val] - self.gtg += [gtg] - self.gtp += [gtp] - - # Write the current misfit evaluation to disk - self.write_log(iter=iter, step_len=step_len, func_val=func_val) - - # Call calculate step, must be implemented by subclass - alpha, status = self.calculate_step() - - return alpha, status - - def update(self, iter, step_len, func_val): - """ - Update search history by appending internal attributes, writing the - current list of step lengths and function evaluations, and calculating a - new step length - - :type iter: int - :param iter: current iteration defined by OPTIMIZE.iter - :type step_len: float - :param step_len: step length determined by optimization - :type func_val: float - :param func_val: current evaluation of the objective function - :rtype alpha: float - :return alpha: the calculated rial step length - :rtype status: int - :return status: current status of the line search - """ - # This has been moved into workflow.line_search() - # self.step_count += 1 - self.step_lens += [step_len] - self.func_vals += [func_val] - - # Write the current misfit evaluation to disk - self.write_log(iter=iter, step_len=step_len, func_val=func_val) - - # Call calcuate step, must be implemented by subclass - alpha, status = self.calculate_step() - - return alpha, status - - def clear_history(self): - """ - Clears internal line search history - """ - self.func_vals = [] - self.step_lens = [] - self.gtg = [] - self.gtp = [] - self.step_count = 0 - - def reset(self): - """ - If a line search fails mid-search, and the User wants to resume from - the line search function. Initialize will be called again. This function - undos the progress made by the previous line search so that a new line - search can be called without problem. - - output.optim needs to have its lines cleared manually - """ - # First step treated differently - if len(self.step_lens) <= 1: - self.clear_history() - else: - # Wind back dot products by one - self.gtg = self.gtg[:-1] - self.gtp = self.gtp[:-1] - - # Move step lens and function evaluations by number of step count - original_idx = -1 * self.step_count - 1 - self.step_lens = self.step_lens[:original_idx] - self.func_vals = self.func_vals[:original_idx] - - def write_log(self, iter=None, step_len=None, func_val=None): - """ - Write the line search history into a formatted text file (self.log) - that looks something like this: - - ITER STEPLEN MISFIT - ======== ========== ========== - 1 0 1 - - :type iter: int - :param iter: the current iteration defined by OPTIMIZATION.iter. - :type step_len: float - :param step_len: Current step length of the line search, also known - as 'alpha' in the optimization algorithm - :type func_val: float - :param func_val: the function evaluation, i.e., the misfit, associated - with the given step length (alpha) - """ - if (iter is None) or (not os.path.exists(self.log)): - # Write out the header of the file to a NEW FILE - self.logger.info(f"writing line search history file:\n{self.log}") - with open(self.log, "w") as f: - f.write(f"{'ITER':>10} {'STEPLEN':>10} {'MISFIT':>10}\n") - f.write(f"{'='*10} {'='*10} {'='*10}\n") - else: - with open(self.log, "a") as f: - # Aesthetic choice, don't repeat iteration numbers in the file - if (step_len is not None) and (step_len > 0): - iter = "" - f.write(f"{iter:>10} {step_len:10.3e} {func_val:10.3e}\n") - - def search_history(self, sort=True): - """ - A convenience function, collects information based on the current - evaluation of the line search, needed to determine search status and - calculate step length. From the full collection of the search history, - only returns values relevant to the current line search. - - :type sort: bool - :param sort: sort the search history by step length - :rtype x: np.array - :return x: list of step lenths from current line search - :rtype f: np.array - :return f: correpsonding list of function values - :rtype gtg: list - :return gtg: dot product dot product of gradient with itself - :rtype gtp: list - :return gtp: dot product of gradient and search direction - :rtype i: int - :return i: step_count - :rtype j: int - :return j: number of iterations corresponding to 0 step length - """ - i = self.step_count - j = count_zeros(self.step_lens) - 1 - k = len(self.step_lens) - x = np.array(self.step_lens[k - i - 1:k]) - f = np.array(self.func_vals[k - i - 1:k]) - - # Sort by step length - if sort: - f = f[abs(x).argsort()] - x = x[abs(x).argsort()] - - return x, f, self.gtg, self.gtp, i, j - - def calculate_step(self): - """ - Determines step length and search status - - !!! Must be implemented by subclass !!! - """ - raise NotImplementedError("Must be implemented by subclass") - - diff --git a/seisflows/plugins/line_search/bracket.py b/seisflows/plugins/line_search/bracket.py index 943c791b..9ddbce82 100644 --- a/seisflows/plugins/line_search/bracket.py +++ b/seisflows/plugins/line_search/bracket.py @@ -1,162 +1,272 @@ #!/usr/bin/env python3 """ -This is the subclass class for seisflows.plugins.line_search.bracket +A bracketing line search (a.k.a direct line search) attempts to find an +appropriate step length by identifying two points between which the minimum +misfit lies. Contains some functionality for saving line search history to disk +so that a line search may be resumed in the case of a failure/reset. + +https://en.wikipedia.org/wiki/Line_search + +.. note:: + Line search is called on by the optimization procedure and should not + really have any agency (i.e. it should not be able to iterate its own step + count etc., this should be completely left to the optimization algorithm to + keep everything in one place) """ -import logging +import os import numpy as np -from seisflows.tools import msg -from seisflows.plugins.line_search.base import Base +from seisflows import logger +from seisflows.tools.array import count_zeros from seisflows.tools.math import parabolic_backtrack, polynomial_fit -class Bracket(Base): +class Bracket: """ - Implements bracketing line search, which attempts to find a step length - corresponding to misfit reduction, and a misfit corresponding to misfit - increase, so that the optimization procedure can scale the step length - in future iterations. - - Variables Descriptions: - x: list of step lenths from current line search - f: correpsonding list of function values - gtg: dot product of gradient with itself - gtp: dot product of gradient and search direction - - Status codes - status > 0 : finished - status == 0 : not finished - status < 0 : failed + [line_search.bracket] The bracketing line search identifies two points + between which the minimum misfit lies between. + + :type step_count_max: int + :param step_count_max: maximum number of step counts before changing + line search behavior. set by PAR.STEP_COUNT_MAX + :type step_len_max: int + :param step_len_max: maximum length of the step, defaults to infinity, + that is unbounded step length. set by PAR.STEP_LEN_MAX """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) + def __init__(self, step_count_max, step_len_max, path=None): + """ + Instantiate max criteria for line search + """ + self.step_count_max = step_count_max + self.step_len_max = step_len_max - def __init__(self, **kwargs): + if path is None: + self.path = os.path.join(os.getcwd(), "line_search") + else: + self.path = path + + self.func_vals = [] + self.step_lens = [] + self.gtg = [] + self.gtp = [] + self.step_count = 0 + + def update_search_history(self, func_val, step_len, gtg=None, gtp=None): """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. + Update the internal list of search history attributes. Lists like + `func_vals` get appended to, while values like step_count are + overwritten. Allowed to increment func_val and step_len by themselves """ - super().__init__(**kwargs) + self.func_vals.append(func_val) + self.step_lens.append(step_len) + if gtg: + self.gtg.append(gtg) + if gtp: + self.gtp.append(gtp) - def calculate_step(self): + def clear_search_history(self): """ - Determines step length (alpha) and search status (status) + Clears internal line search history for a new line search attempt """ - # Determine the line search history - x, f, gtg, gtp, step_count, update_count = self.search_history() + self.func_vals = [] + self.step_lens = [] + self.gtg = [] + self.gtp = [] + self.step_count = 0 + + def check_search_history(self): + """ + Since the line search is just a wrapper for list of numbers, check that + search history hasn't been muddled up by ensuring that internal lists + are the correct length for the given evaluation + """ + assert(len(self.gtg) == len(self.gtp)), f"too many entries for 'gtg'" + assert(len(self.func_vals) == len(self.step_lens)), \ + f"number of function evaluations does not match step lengths" + if self.func_vals: + assert(self.step_count + 1 == len(self.func_vals)), \ + f"current step count doesn't match the number of function evals" + + def get_search_history(self, sort=True): + """ + A convenience function, collects information based on the current + evaluation of the line search, needed to determine search status and + calculate step length. From the full collection of the search history, + only returns values relevant to the current line search. + + :type sort: bool + :param sort: sort the search history by step length + :rtype x: np.array + :return x: list of step lenths from current line search + :rtype f: np.array + :return f: correpsonding list of function values + :rtype gtg: list + :return gtg: dot product dot product of gradient with itself + :rtype gtp: list + :return gtp: dot product of gradient and search direction + :rtype i: int + :return i: step_count + :rtype j: int + :return j: number of iterations corresponding to 0 step length, + i.e., the update count + """ + i = self.step_count + k = len(self.step_lens) + x = np.array(self.step_lens[k - i - 1:k]) + f = np.array(self.func_vals[k - i - 1:k]) + j = count_zeros(self.step_lens) - 1 # update count + + # Sort by step length + if sort: + f = f[abs(x).argsort()] + x = x[abs(x).argsort()] + + return x, f, self.gtg, self.gtp, i, j - # Print out the current line search parameters for convenience - self.logger.debug(msg.sub("EVALUATE BRACKETING LINE SEARCH")) + def _print_stats(self, x, f): + """Print out misfit values and step lengths to the logger""" x_str = ", ".join([f"{_:.2E}" for _ in x]) f_str = ", ".join([f"{_:.2E}" for _ in f]) - self.logger.debug(f"step length(s) = {x_str}") - self.logger.debug(f"misfit val(s) = {f_str}") - + logger.debug(f"step length(s) = {x_str}") + logger.debug(f"misfit val(s) = {f_str}") + + def calculate_step_length(self): + """ + Determines step length (alpha) and search status (status) using a + bracketing line search. Evaluates Wolfe conditions to determine if + a step length is acceptable. + + .. note: + Available status returns are: + 'TRY': try/re-try the line search as conditions have not been met + 'PASS': line search was successful, you can terminate the search + 'FAIL': line search has failed for one or more reasons. + + :rtype: tuple (float, str) + :return: (alpha==calculated step length, + status==how to treat the next step count evaluation) + """ + # Determine the line search history + x, f, gtg, gtp, step_count, update_count = self.get_search_history() + self._print_stats(x, f) + # For the first inversion and initial step, set alpha manually if step_count == 0 and update_count == 0: # Based on idea from Dennis and Schnabel alpha = gtg[-1] ** -1 - self.logger.info(f"first iteration, guessing trial step") - status = 0 - # For every i'th inversions initial step, set alpha manually + logger.info(f"try: first evaluation, attempt guess step length, " + f"alpha={alpha:.2E}") + status = "TRY" + # For every iteration's initial step, set alpha manually elif step_count == 0: # Based on the first equation in sec 3.5 of Nocedal and Wright 2ed idx = np.argmin(self.func_vals[:-1]) alpha = self.step_lens[idx] * gtp[-2] / gtp[-1] - self.logger.info(f"first step, setting scaled step length") - status = 0 + logger.info(f"try: first step count of iteration, " + f"setting scaled step length, alpha={alpha:.2E}") + status = "TRY" # If misfit is reduced and then increased, we've bracketed. Pass - elif self._check_bracket(x, f) and self._good_enough(x,f): + elif _check_bracket(x, f) and _good_enough(x, f): alpha = x[f.argmin()] - self.logger.info(f"bracket okay, step length reasonable, pass") - status = 1 + logger.info(f"pass: bracket acceptable and step length " + f"reasonable. returning minimum line search misfit.") + status = "PASS" # If misfit is reduced but not close, set to quadratic fit - elif self._check_bracket(x, f): + elif _check_bracket(x, f): alpha = polynomial_fit(x, f) - self.logger.info(f"bracket okay, step length unreasonable, " - f"manual step") - status = 0 + logger.info(f"try: bracket acceptable but step length unreasonable " + f"attempting to re-adjust step length " + f"alpha={alpha:.2E}") + status = "TRY" # If misfit continues to step down, increase step length - elif step_count <= self.step_count_max and all(f <= f[0]): + elif step_count < self.step_count_max and all(f <= f[0]): alpha = 1.618034 * x[-1] # 1.618034 is the 'golden ratio' - self.logger.info(f"misfit not bracketed, increasing step length") - status = 0 + logger.info(f"try: misfit not bracketed, increasing step length " + f"using golden ratio, alpha={alpha:.2E}") + status = "TRY" # If misfit increases, reduce step length by backtracking - elif step_count <= self.step_count_max: + elif step_count < self.step_count_max: slope = gtp[-1] / gtg[-1] alpha = parabolic_backtrack(f0=f[0], g0=slope, x1=x[1], f1=f[1], b1=0.1, b2=0.5) - self.logger.info(f"misfit increasing, reducing step length to") - status = 0 + logger.info(f"try: misfit increasing, attempting " + f"to reduce step length using parabloic backtrack, " + f"alpha={alpha:.2E}") + status = "TRY" # step_count_max exceeded, fail else: - self.logger.info(f"bracketing failed, " - f"step_count_max={self.step_count_max} exceeded") + logger.info(f"fail: bracketing line search has failed " + f"to reduce the misfit before exceeding " + f"`step_count_max`={self.step_count_max}") alpha = None - status = -1 + status = "FAIL" # Apply optional step length safeguard if alpha is not None: if alpha > self.step_len_max and step_count == 0: alpha = 0.618034 * self.step_len_max - self.logger.info(f"initial step length safegaurd, setting " - f"manual step length") - status = 0 + logger.info(f"try: applying initial step length " + f"safegaurd as alpha has exceeded maximum step " + f"length, alpha_new={alpha:.2E}") + status = "TRY" # Stop because safeguard prevents us from going further + # TODO Why is this passing? should status not be carried over? elif alpha > self.step_len_max: - self.logger.info(f"step_len_max={self.step_len_max} exceeded, " - f"manual set alpha") alpha = self.step_len_max - status = 1 + logger.info(f"try: applying initial step length " + f"safegaurd as alpha has exceeded maximum step " + f"length, alpha_new={alpha:.2E}") + status = "PASS" return alpha, status - @staticmethod - def _check_bracket(step_lens, func_vals): - """ - Checks if minimum has been bracketed - Looks at the minimum of the misfit values calculated through eval func - to see if the misfit has been reduced w.r.t the initial misfit +def _check_bracket(step_lens, func_vals): + """ + Checks if minimum has been bracketed - :type step_lens: numpy.array - :param step_lens: an array of the step lengths taken during iteration - :type func_vals: numpy.array - :param func_vals: array of misfit values from eval func function - :rtype: bool - :return: status of function as a bool - """ - x, f = step_lens, func_vals - imin, fmin = f.argmin(), f.min() - if (fmin < f[0]) and any(f[imin:] > fmin): + Looks at the minimum of the misfit values calculated through eval func + to see if the misfit has been reduced w.r.t the initial misfit + + :type step_lens: numpy.array + :param step_lens: an array of the step lengths taken during iteration + :type func_vals: numpy.array + :param func_vals: array of misfit values from eval func function + :rtype: bool + :return: status of function as a bool + """ + x, f = step_lens, func_vals + imin, fmin = f.argmin(), f.min() + if (fmin < f[0]) and any(f[imin:] > fmin): + okay = True + else: + okay = False + return okay + + +def _good_enough(step_lens, func_vals, thresh=np.log10(1.2)): + """ + Checks if step length is reasonably close to quadratic estimate + + :type step_lens: np.array + :param step_lens: an array of the step lengths taken during iteration + :type func_vals: np.array + :param func_vals: array of misfit values from eval func function + :type thresh: numpy.float64 + :param thresh: threshold value for comparison against quadratic estimate + :rtype: bool + :return: status of function as a bool + """ + x, f = step_lens, func_vals + if not _check_bracket(x, f): + okay = False + else: + x0 = polynomial_fit(x, f) + if any(np.abs(np.log10(x[1:] / x0)) < thresh): okay = True else: okay = False - return okay - - def _good_enough(self, step_lens, func_vals, thresh=np.log10(1.2)): - """ - Checks if step length is reasonably close to quadratic estimate - - :type step_lens: np.array - :param step_lens: an array of the step lengths taken during iteration - :type func_vals: np.array - :param func_vals: array of misfit values from eval func function - :type thresh: numpy.float64 - :param thresh: threshold value for comparison against quadratic estimate - :rtype: bool - :return: status of function as a bool - """ - x, f = step_lens, func_vals - if not self._check_bracket(x, f): - okay = False - else: - x0 = polynomial_fit(x, f) - if any(np.abs(np.log10(x[1:] / x0)) < thresh): - okay = True - else: - okay = False - return okay + return okay diff --git a/seisflows/plugins/preconds/__init__.py b/seisflows/plugins/preconds/__init__.py deleted file mode 100644 index 07ec545c..00000000 --- a/seisflows/plugins/preconds/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -""" -used by the OPTIMIZE class and specified by the PRECOND parameter -""" -from .diagonal import Diagonal - diff --git a/seisflows/plugins/preconds/diagonal.py b/seisflows/plugins/preconds/diagonal.py deleted file mode 100644 index 03ea4bea..00000000 --- a/seisflows/plugins/preconds/diagonal.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python3 -""" -This is the main class for seisflows.line_search.preconds.diagonal -This class provides the utilities for a diagonal preconditioner -""" -import os -import sys - - -class Diagonal(object): - """ - User supplied diagonal preconditioner - Rescales model parameters based on user supplied weights - """ - def __init__(self): - """ - Loads any required dependencies - """ - PATH = sys.modules["seisflows_paths"] - solver = sys.modules["seisflows_solver"] - - if "PRECOND" not in PATH: - raise Exception - - if not os.path.exists(PATH.PRECOND): - raise Exception - - self.path = PATH.PRECOND - self.load = solver.load - self.merge = solver.merge - - def __call__(self, q): - """ - Applies preconditioner to given vector - - :type q: np.array - :param q: search direction - :rtype: np.array - :return: preconditioned search direction - """ - p = self.merge(self.load(self.path)) - return p * q - - diff --git a/seisflows/plugins/preprocess/readers.py b/seisflows/plugins/preprocess/readers.py deleted file mode 100644 index 2ba08930..00000000 --- a/seisflows/plugins/preprocess/readers.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -SeisFlows uses obspy stream objects for holding and processing seismic data. -In some cases, obspy.read doesn't provide the desired behavior, so we -introduce an additonal level of indirection - -Used by the PREPROCESS class and specified by the READER parameter -""" -import os -from numpy import loadtxt -from obspy import read -from obspy.core import Stream, Stats, Trace - - -def su(path, filename): - """ - Reads seismic unix files outputted by Specfem, using Obspy - - :type path: str - :param path: path to datasets - :type filename: str - :param filename: file to read - """ - st = read(os.path.join(path, filename), format='SU', byteorder='<') - - return st - - -def ascii(path, filename): - """ - Reads SPECFEM3D-style ASCII data - - :type path: str - :param path: path to datasets - :type filenames: list - :param filenames: files to read - """ - st = Stream() - stats = Stats() - - time, data = loadtxt(os.path.join(path, filename)).T - - stats.filename = filename - stats.starttime = time[0] - stats.delta = time[1] - time[0] - stats.npts = len(data) - - try: - parts = filename.split(".") - stats.network = parts[0] - stats.station = parts[1] - stats.channel = parts[2] - except: - pass - - st.append(Trace(data=data, header=stats)) - - return st - diff --git a/seisflows/plugins/preprocess/writers.py b/seisflows/plugins/preprocess/writers.py deleted file mode 100644 index 37858928..00000000 --- a/seisflows/plugins/preprocess/writers.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -SeisFlows uses obspy stream objects for holding and processing seismic data. -In some cases, obspy.read doesn't provide the desired behavior, -so we introduce an additonal level of indirection - -Used by the PREPROCESS class and specified by the WRITER parameter -""" -import os -import numpy as np - - -def su(st, path, filename): - """ - Writes seismic unix files outputted by Specfem, using Obspy - - :type st: obspy.core.stream.Stream - :param st: stream to write - :type path: str - :param path: path to datasets - :type filename: str - :param filename: file to read - """ - for tr in st: - # Work around obspy data type conversion - tr.data = tr.data.astype(np.float32) - - max_delta = 0.065535 - dummy_delta = max_delta - - if st[0].stats.delta > max_delta: - for tr in st: - tr.stats.delta = dummy_delta - - # Write data to file - st.write(os.path.join(path, filename), format='SU') - - -def ascii(st, path, filename=None): - """ - Writes seismic traces as ascii files. Kwargs are left to keep structure of - inputs compatible with other input formats. - - :type st: obspy.core.stream.Stream - :param st: stream to write - :type path: str - :param path: path to datasets - """ - for tr in st: - if filename is None: - filename = tr.stats.filename - - fid_out = os.path.join(path, filename) - - # Float provides the time difference between starttime and default time - time_offset = float(tr.stats.starttime) - - data_out = np.vstack((tr.times() + time_offset, tr.data)).T - - np.savetxt(fid_out, data_out, ["%13.7f", "%17.7f"]) - diff --git a/seisflows/plugins/solver/__init__.py b/seisflows/plugins/solver/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows/plugins/solver/specfem2d.py b/seisflows/plugins/solver/specfem2d.py deleted file mode 100644 index ffb7b8aa..00000000 --- a/seisflows/plugins/solver/specfem2d.py +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env python3 -""" -Plugins used for the numerical solver SPECFEM2D -""" -import sys -from seisflows.tools import array, unix -from seisflows.tools.wrappers import exists, findpath -from seisflows.tools.specfem import getpar, setpar - - -def write_sources(coords, path='.', ws=1., suffix=''): - """ - Writes source information to text file - TODO this has to be adapted for new versions of specfem because the - source file format has changed - """ - sx, sy, sz = coords - - filename = findpath('seisflows.plugins') + '/' + 'solver/specfem2d/SOURCE' - with open(filename, 'r') as f: - lines = f.readlines() - - filename = 'DATA/SOURCE' + suffix - with open(filename, 'w') as f: - f.writelines(lines) - - # adjust source coordinates - setpar('xs', sx, filename) - setpar('zs', sy, filename) - # setpar('ts', ts[0], filename) - - # adjust source amplitude - try: - fs = float(getpar('factor', filename)) - fs *= ws - setpar('factor', str(fs), filename) - except: - pass - - # adjust source wavelet - if 1: - # Ricker wavelet - setpar('time_function_type', 1, filename) - elif 0: - # first derivative of Gaussian - setpar('time_function_type', 2, filename) - elif 0: - # Gaussian - setpar('time_function_type', 3, filename) - elif 0: - # Dirac - setpar('time_function_type', 4, filename) - elif 0: - # Heaviside - setpar('time_function_type', 5, filename) - - # setpar('f0', par['F0'], filename) - - -def write_receivers(coords, path='.'): - """ Writes receiver information to text file - """ - rx, ry, rz = coords - nr = len(coords[0]) - - filename = path + '/' + 'DATA/STATIONS' - - lines = [] - for ir in range(nr): - line = '' - line += 'S%06d' % ir + ' ' - line += 'AA' + ' ' - line += '%11.5e' % rx[ir] + ' ' - line += '%11.5e' % ry[ir] + ' ' - line += '%3.1f' % 0. + ' ' - line += '%3.1f' % 0. + '\n' - lines.extend(line) - - with open(filename, 'w') as f: - f.writelines(lines) - - -def smooth_legacy(input_path='', output_path='', parameters=[], span=0.): - """ - - :param input_path: - :param output_path: - :param parameters: - :param span: - :return: - """ - solver = sys.modules['seisflows_solver'] - PATH = sys.modules['seisflows_paths'] - - if not exists(input_path): - raise Exception - - if not exists(output_path): - unix.mkdir(output_path) - - if solver.mesh_properties.nproc != 1: - raise NotImplementedError - - # intialize arrays - kernels = {} - for key in parameters or solver.parameters: - kernels[key] = [] - - coords = {} - for key in ['x', 'z']: - coords[key] = [] - - # read kernels - for key in parameters or solver.parameters: - kernels[key] += solver.io.read_slice(input_path, key+'_kernel', 0) - - if not span: - return kernels - - # read coordinates - for key in ['x', 'z']: - coords[key] += solver.io.read_slice(PATH.MODEL_INIT, key, 0) - - mesh = array.stack(coords['x'][0], coords['z'][0]) - - # apply smoother - for key in parameters or solver.parameters: - kernels[key] = [array.meshsmooth(kernels[key][0], mesh, span)] - - # write smooth kernels - for key in parameters or solver.parameters: - solver.io.write_slice(kernels[key][0], output_path, key+'_kernel', - 0) diff --git a/seisflows/plugins/solver/specfem3d.py b/seisflows/plugins/solver/specfem3d.py deleted file mode 100644 index 04ba7496..00000000 --- a/seisflows/plugins/solver/specfem3d.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python3 -""" -Plugins used for the numerical solver SPECFEM3D_CARTESIAN -""" -import os -from seisflows.tools.wrappers import findpath -from seisflows.tools.specfem import setpar - - -def write_sources(par, h, path="."): - """ - Writes FORCESOLUTION source information to text file - - :type par: dict - :param par: seisflows.PAR - :type h: - :param h: - :type path: str - :param path: path to write sources to - """ - file = os.path.join(findpath("seisflows.plugins"), "specfem3d", - "FORCESOLUTION") - with open(file, "r") as f: - lines = f.readlines() - - file = "DATA/FORCESOURCE" - with open(file, "w") as f: - f.writelines(lines) - - # adjust coordinates - setpar("xs", h.sx[0], file) - setpar("zs", h.sz[0], file) - setpar("ts", h.ts, file) - - # adjust wavelet - setpar("f0", par["F0"], file) - - -def write_receivers(h): - """ - Writes receiver information to text file - - :type h: - :param h: - """ - file = "DATA/STATIONS" - lines = [] - - # loop over receivers - for ir in range(h.nr): - line = "" - line += "S%06d" % ir + " " - line += "AA" + " " - line += "%11.5e" % h.rx[ir] + " " - line += "%11.5e" % h.rz[ir] + " " - line += "%3.1f" % 0. + " " - line += "%3.1f" % 0. + "\n" - lines.extend(line) - - with open(file, "w") as f: - f.writelines(lines) - - diff --git a/seisflows/plugins/solver/specfem3d_globe.py b/seisflows/plugins/solver/specfem3d_globe.py deleted file mode 100644 index 805cc113..00000000 --- a/seisflows/plugins/solver/specfem3d_globe.py +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python3 -""" -Plugins used for the numerical solver SPECFEM3D_GLOBE -""" - -# Local imports -from seisflows.tools.wrappers import findpath -from seisflows.tools.specfem import setpar - - -def write_sources(PAR, h, path='.'): - """ Writes source information to text file - """ - filename = findpath('seisflows.plugins') + '/' + 'specfem3d/SOURCE' - with open(filename, 'r') as f: - lines = f.readlines() - - filename = 'DATA/SOURCE' - with open(filename, 'w') as f: - f.writelines(lines) - - # adjust coordinates - setpar('xs', h.sx[0], filename) - setpar('zs', h.sz[0], filename) - setpar('ts', h.ts, filename) - - # adjust wavelet - setpar('f0', PAR['F0'], filename) - - -def write_receivers(h): - """ Writes receiver information to text file - """ - filename = 'DATA/STATIONS' - lines = [] - - # loop over receivers - for ir in range(h.nr): - line = '' - line += 'S%06d' % ir + ' ' - line += 'AA' + ' ' - line += '%11.5e' % h.rx[ir] + ' ' - line += '%11.5e' % h.rz[ir] + ' ' - line += '%3.1f' % 0. + ' ' - line += '%3.1f' % 0. + '\n' - lines.extend(line) - - with open(filename, 'w') as f: - f.writelines(lines) - - -def write_parameters(par, version): - """ Writes parameters to text file - """ - raise NotImplementedError diff --git a/seisflows/plugins/solver_io/__init__.py b/seisflows/plugins/solver_io/__init__.py deleted file mode 100644 index 01ef1e41..00000000 --- a/seisflows/plugins/solver_io/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -""" -Used by the SOLVER class and specified by the SOLVERIO parameter - -Note: - ADIOS IO format is currently implemented in SPECFEM3D, but not SeisFlows - import adios -""" -from . import fortran_binary - diff --git a/seisflows/plugins/solver_io/adios.py b/seisflows/plugins/solver_io/adios.py deleted file mode 100644 index 43278a8e..00000000 --- a/seisflows/plugins/solver_io/adios.py +++ /dev/null @@ -1,30 +0,0 @@ - -from os.path import abspath, join -from shutil import copyfile - -import numpy as np - - -def mread(path, parameters, iproc, prefix='', suffix=''): - """ Multiparameter read, callable by a single mpi process - """ - keys = [] - vals = [] - for key in sorted(parameters): - val = _read1(path, iproc, prefix+key+suffix) - keys += [key] - vals += [val] - return keys, vals - - -def read(path, parameter, iproc): - """ Reads from ADIOS container - """ - raise NotImplementedError - - -def write(v, path, parameter, iproc): - """ Writes to ADIOS container - """ - raise NotImplementedError - diff --git a/seisflows/plugins/solver_io/ascii.py b/seisflows/plugins/solver_io/ascii.py deleted file mode 100644 index 04d978be..00000000 --- a/seisflows/plugins/solver_io/ascii.py +++ /dev/null @@ -1,123 +0,0 @@ -""" -Functions to read and write ASCII model (.dat) files used by SPECFEM2D -""" -import os -import numpy as np -from glob import glob -from shutil import copyfile -from seisflows.tools.wrappers import iterable - - -def read_slice(path, parameters, iproc): - """ - Reads SPECFEM model slice(s) based on .dat ASCII files - - :type path: str - :param path: path to the database files - :type parameters: str - :param parameters: parameters to read, e.g. 'vs', 'vp' - :type iproc: int - :param iproc: processor/slice number to read - :rtype: list of np.array - :return: list of arrays corresponding to model parameters in given order - """ - filename = _get_filename(path, iproc) - available_parameters = _get_available_parameters(filename) - model = np.loadtxt(filename).T - - vals = [] - for key in iterable(parameters): - vals += [model[available_parameters.index(key)]] - - return vals - - -def write_slice(data, path, parameters, iproc): - """ - Writes SPECFEM model slice - - !!! This won't work because we need access to the spatial components that - !!! are only the model - - :type data: seisflows.Container - :param data: data to be written to a slice - :type path: str - :param path: path to the database files - :type parameters: str - :param parameters: parameters to write, e.g. 'vs', 'vp' - :type iproc: int - :param iproc: processor/slice number to write - """ - for key in iterable(parameters): - filename = os.path.join(path, f"proc{int(iproc):06d}_{key}.bin") - _write(data, filename) - - -def copy_slice(src, dst, iproc, parameter): - """ - Copies SPECFEM model slice - - :type src: str - :param src: source location to copy slice from - :type dst: str - :param dst: destination location to copy slice to - :type parameter: str - :param parameter: parameters to copy, e.g. 'vs', 'vp' - :type iproc: int - :param iproc: processor/slice number to copy - """ - filename = os.path.basename(_get_filename(src, iproc)) - copyfile(os.path.join(src, filename), - os.path.join(dst, filename)) - - -def _get_filename(path, iproc): - """ - ASCII .dat files list the available parameters in the fileid, meaning - there is no standard format for retrieving files. Use glob to search for - the file based on file extension. - - :type path: str - :param path: path to the database files - :type iproc: int - :param iproc: processor/slice number to read - :rtype: str - :return: filename of the model - """ - filename_glob = os.path.join(path, f"proc{int(iproc):06d}_*.dat") - filename = glob(filename_glob) - assert(len(filename) == 1), \ - f"Expected only one .dat file, found {len(filename)}" - - return filename[0] - - -def _get_available_parameters(filename): - """ - The available parameters are listed in the file name. Split off the - uncessary text and return the listend parameters. - - :type filename: str - :param filename: filename to check parameters from - :rtype: list - :return: list of parameters from the file id - """ - fid = os.path.splitext(os.path.basename(filename))[0] - _, *available_parameters = fid.split("_") - - return available_parameters - - -def _write(v, filename): - """ - Writes Fortran style binary files - Data are written as single precision floating point numbers - """ - n = np.array([4 * len(v)], dtype='int32') - v = np.array(v, dtype='float32') - - with open(filename, 'wb') as file: - n.tofile(file) - v.tofile(file) - n.tofile(file) - diff --git a/seisflows/plugins/solver_io/fortran_binary.py b/seisflows/plugins/solver_io/fortran_binary.py deleted file mode 100644 index 1543ab89..00000000 --- a/seisflows/plugins/solver_io/fortran_binary.py +++ /dev/null @@ -1,96 +0,0 @@ -""" -Functions to read and write FORTRAN binary files that are outputted by Specfem -""" -import os -import numpy as np -from shutil import copyfile -from seisflows.tools.wrappers import iterable - - -def read_slice(path, parameters, iproc): - """ - Reads SPECFEM model slice(s) - - :type path: str - :param path: path to the database files - :type parameters: str - :param parameters: parameters to read, e.g. 'vs', 'vp' - :type iproc: int - :param iproc: processor/slice number to read - """ - vals = [] - for key in iterable(parameters): - filename = os.path.join(path, f"proc{int(iproc):06d}_{key}.bin") - vals += [_read(filename)] - return vals - - -def write_slice(data, path, parameters, iproc): - """ - Writes SPECFEM model slice - - :type data: seisflows.Container - :param data: data to be written to a slice - :type path: str - :param path: path to the database files - :type parameters: str - :param parameters: parameters to write, e.g. 'vs', 'vp' - :type iproc: int - :param iproc: processor/slice number to write - """ - for key in iterable(parameters): - filename = os.path.join(path, f"proc{int(iproc):06d}_{key}.bin") - _write(data, filename) - - -def copy_slice(src, dst, iproc, parameter): - """ - Copies SPECFEM model slice - - :type src: str - :param src: source location to copy slice from - :type dst: str - :param dst: destination location to copy slice to - :type parameter: str - :param parameter: parameters to copy, e.g. 'vs', 'vp' - :type iproc: int - :param iproc: processor/slice number to copy - """ - filename = f"proc{int(iproc):06d}_{parameter}.bin" - copyfile(os.path.join(src, filename), - os.path.join(dst, filename)) - - -def _read(filename): - """ - Reads Fortran style binary data into numpy array - """ - nbytes = os.path.getsize(filename) - with open(filename, 'rb') as file: - # read size of record - file.seek(0) - n = np.fromfile(file, dtype='int32', count=1)[0] - - if n == nbytes-8: - file.seek(4) - data = np.fromfile(file, dtype='float32') - return data[:-1] - else: - file.seek(0) - data = np.fromfile(file, dtype='float32') - return data - - -def _write(v, filename): - """ - Writes Fortran style binary files - Data are written as single precision floating point numbers - """ - n = np.array([4 * len(v)], dtype='int32') - v = np.array(v, dtype='float32') - - with open(filename, 'wb') as file: - n.tofile(file) - v.tofile(file) - n.tofile(file) - diff --git a/seisflows/postprocess/__init__.py b/seisflows/postprocess/__init__.py deleted file mode 100644 index 5f49d2b7..00000000 --- a/seisflows/postprocess/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -import logging -from pkgutil import extend_path -__path__ = extend_path(__path__, __name__) -logger = logging.getLogger(__name__) - diff --git a/seisflows/postprocess/base.py b/seisflows/postprocess/base.py deleted file mode 100644 index 1bf03469..00000000 --- a/seisflows/postprocess/base.py +++ /dev/null @@ -1,184 +0,0 @@ -#!/usr/bin/env python3 -""" -This class provides the core utilities for the SeisFlows postprocessing -functionalities, including kernel/gradient smoothing and masking as well as -kernel summation -""" -import os -import sys -import logging - -from seisflows.tools import msg -from seisflows.config import SeisFlowsPathsParameters - -PAR = sys.modules['seisflows_parameters'] -PATH = sys.modules['seisflows_paths'] - -system = sys.modules['seisflows_system'] -solver = sys.modules['seisflows_solver'] - - -class Base: - """ - Postprocessing in a Seisflows workflow includes tasks such as - regularization, smoothing, sharpening, masking and related operations - on models or gradients - """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by __init__! - Attributes are just initialized as NoneTypes for clarity and docstrings - """ - pass - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters() - - # Define the Parameters required by this module - sf.par("SMOOTH_H", required=False, default=0., par_type=float, - docstr="Gaussian half-width for horizontal smoothing in units " - "of meters. If 0., no smoothing applied") - - sf.par("SMOOTH_V", required=False, default=0., par_type=float, - docstr="Gaussian half-width for vertical smoothing in units " - "of meters") - - sf.par("TASKTIME_SMOOTH", required=False, default=1, par_type=int, - docstr="Large radii smoothing may take longer than normal " - "tasks. Allocate additional smoothing task time " - "as a multiple of TASKTIME") - - # Define the Paths required by this module - sf.path("MASK", required=False, - docstr="Directory to mask files for gradient masking") - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths - """ - if validate: - self.required.validate() - - if PATH.MASK: - assert os.path.exists(PATH.MASK), \ - f"PATH.MASK provided but does not exist" - - def setup(self): - """ - A placeholder function for initialization or setup tasks. Base - postprocessing does not require any setup - """ - pass - - def write_gradient(self, path): - """ - Combines contributions from individual sources and material parameters - to get the gradient, and optionally applies user-supplied scaling - - .. note:: - Because processing operations can be quite expensive, they must be - run through the HPC system interface; processing does not involve - embarassingly parallel tasks, we use run(single=True) - - :type path: str - :param path: directory from which kernels are read and to which - gradient is written - """ - if not os.path.exists(path): - print(msg.cli("Gradient path does in postprocess.write_gradient " - "does not exist but should", - items=[path], header="error")) - sys.exit(-1) - - # Postprocess file structure defined here once-and-for-all - path_grad = os.path.join(path, "gradient") - path_grad_nomask = os.path.join(path, "gradient_nomask") - path_kernels = os.path.join(path, "kernels") - path_kernels_sum = os.path.join(path_kernels, "sum") - path_model = os.path.join(path, "model") - - # Run postprocessing as job on system as it's computationally intensive - self.logger.info("processing kernels into gradient on system...") - system.run("postprocess", "process_kernels", single=True, - path=path_kernels, logger=self.logger) - - # Access the gradient information stored in the kernel summation - gradient = solver.load(path_kernels_sum, suffix="_kernel") - - # Merge the gradients into a single vector - gradient = solver.merge(gradient) - - # Convert to absolute perturbations: - # log dm --> dm (see Eq.13 Tromp et al 2005) - gradient *= solver.merge(solver.load(path_model)) - - if PATH.MASK: - self.logger.info(f"masking gradient") - # to scale the gradient, users can supply "masks" by exactly - # mimicking the file format in which models are stored - mask = solver.merge(solver.load(PATH.MASK)) - - # While both masking and preconditioning involve scaling the - # gradient, they are fundamentally different operations: - # masking is ad hoc, preconditioning is a change of variables; - # For more info, see Modrak & Tromp 2016 GJI - solver.save(solver.split(gradient), path=path_grad_nomask, - suffix="_kernel") - - solver.save(solver.split(gradient * mask), path=path_grad, - suffix="_kernel") - else: - solver.save(solver.split(gradient), path=path_grad, - suffix="_kernel") - - @staticmethod - def process_kernels(path, logger): - """ - Sums kernels from individual sources, with optional smoothing - - .. note:: - This function needs to be run on system, i.e., called by - system.run(single=True) - - :type path: str - :param path: directory containing sensitivity kernels in the scratch - directory - :type logger: Logger - :param logger: Class-specific logging module, log statements pushed - from this logger will be tagged by its specific module/classname - """ - if not os.path.exists(path): - print(msg.cli("Gradient path in postprocess.process_kernels " - "does not exist but should", - items=[path], header="error")) - sys.exit(-1) - - # If specified, smooth the kernels in the vertical and horizontal - path_sum_nosmooth = os.path.join(path, "sum_nosmooth") - path_sum = os.path.join(path, "sum") - - if (PAR.SMOOTH_H > 0) or (PAR.SMOOTH_V > 0): - logger.debug(f"saving unsmoothed and summed kernels to:\n" - f"{path_sum_nosmooth}") - solver.combine(input_path=path, output_path=path_sum_nosmooth) - - logger.info(f"smoothing gradient: H={PAR.SMOOTH_H}m, " - f"V={PAR.SMOOTH_V}m") - logger.debug(f"saving smoothed kernels to:\n{path_sum}") - solver.smooth(input_path=path_sum_nosmooth, output_path=path_sum, - span_h=PAR.SMOOTH_H, span_v=PAR.SMOOTH_V) - - # Combine all the input kernels, generating the unscaled gradient - else: - logger.debug(f"saving summed kernels to:\n{path_sum}") - solver.combine(input_path=path, output_path=path_sum) diff --git a/seisflows/preprocess/base.py b/seisflows/preprocess/base.py deleted file mode 100644 index 80a7f8b3..00000000 --- a/seisflows/preprocess/base.py +++ /dev/null @@ -1,450 +0,0 @@ -#!/usr/bin/env python3 -""" -The SeisFlows Preprocessing module is in charge of interacting with seismic -data (observed and synthetic). It should contain functionality to read and write -seismic data, apply preprocessing such as filtering, quantify misfit, -and write adjoint sources that are expected by the solver. -""" -import os -import sys -import obspy -import logging -import numpy as np - -from seisflows.tools import msg -from seisflows.tools import signal, unix -from seisflows.tools.wrappers import exists -from seisflows.plugins.preprocess import adjoint, misfit, readers, writers -from seisflows.config import SeisFlowsPathsParameters - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - - -class Base: - """ - Default SeisFlows preprocessing class - - Provides data processing functions for seismic traces, with options for - data misfit, filtering, normalization and muting - """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by __init__! - Attributes are just initialized as NoneTypes for clarity and docstrings - """ - self.misfit = None - self.adjoint = None - self.reader = None - self.writer = None - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters() - - # Define the Parameters required by this module - sf.par("MISFIT", required=False, default="waveform", par_type=str, - docstr="Misfit function for waveform comparisons, for available " - "see seisflows.plugins.misfit") - - sf.par("BACKPROJECT", required=False, default="null", par_type=str, - docstr="Backprojection function for migration, for available " - "see seisflows.plugins.adjoint") - - sf.par("NORMALIZE", required=False, default="null", par_type=str, - docstr="Data normalization option") - - sf.par("FILTER", required=False, default="null", par_type=str, - docstr="Data filtering type, available options are:" - "BANDPASS (req. MIN/MAX PERIOD/FREQ);" - "LOWPASS (req. MAX_FREQ or MIN_PERIOD); " - "HIGHPASS (req. MIN_FREQ or MAX_PERIOD) ") - - sf.par("MIN_PERIOD", required=False, par_type=float, - docstr="Minimum filter period applied to time series." - "See also MIN_FREQ, MAX_FREQ, if User defines FREQ " - "parameters, they will overwrite PERIOD parameters.") - - sf.par("MAX_PERIOD", required=False, par_type=float, - docstr="Maximum filter period applied to time series." - "See also MIN_FREQ, MAX_FREQ, if User defines FREQ " - "parameters, they will overwrite PERIOD parameters.") - - sf.par("MIN_FREQ", required=False, par_type=float, - docstr="Maximum filter frequency applied to time series." - "See also MIN_PERIOD, MAX_PERIOD, if User defines FREQ " - "parameters, they will overwrite PERIOD parameters.") - - sf.par("MAX_FREQ", required=False, par_type=float, - docstr="Maximum filter frequency applied to time series," - "See also MIN_PERIOD, MAX_PERIOD, if User defines FREQ " - "parameters, they will overwrite PERIOD parameters.") - - sf.par("MUTE", required=False, par_type=list, default=[], - docstr="Data mute parameters used to zero out early / late " - "arrivals or offsets. Choose any number of: " - "EARLY: mute early arrivals; " - "LATE: mute late arrivals; " - "SHORT: mute short source-receiver distances; " - "LONG: mute long source-receiver distances") - sf.par("NORMALIZE", required=False, par_type=list, default=[], - docstr="Data normalization parameters used to normalize the " - "amplitudes of waveforms. Choose from two sets: " - "ENORML1: normalize per event by L1 of traces; OR " - "ENORML2: normalize per event by L2 of traces; AND " - "TNORML1: normalize per trace by L1 of itself; OR " - "TNORML2: normalize per trace by L2 of itself") - - # TODO: Add the mute parameters here, const, slope and dist - - # Define the Paths required by this module - sf.path("PREPROCESS", required=False, - default=os.path.join(PATH.SCRATCH, "preprocess"), - docstr="scratch path to store any preprocessing outputs") - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths - """ - if validate: - self.required.validate() - - # Data normalization option - if PAR.NORMALIZE: - acceptable_norms = {"TNORML1", "TNORML2", "ENORML1", "ENORML2"} - chosen_norms = [_.upper() for _ in PAR.NORMALIZE] - assert(set(chosen_norms).issubset(acceptable_norms)) - - # Data muting options - if PAR.MUTE: - acceptable_mutes = {"EARLY", "LATE", "LONG", "SHORT"} - chosen_mutes = [_.upper() for _ in PAR.MUTE] - assert(set(chosen_mutes).issubset(acceptable_mutes)) - if "EARLY" in chosen_mutes: - assert(PAR.EARLY_SLOPE is not None) - assert(PAR.EARLY_SLOPE >= 0.) - assert(PAR.EARLY_CONST is not None) - if "LATE" in chosen_mutes: - assert(PAR.LATE_SLOPE is not None) - assert(PAR.LATE_SLOPE >= 0.) - assert(PAR.LATE_CONST is not None) - if "SHORT" in chosen_mutes: - assert(PAR.SHORT_DIST is not None) - assert (PAR.SHORT_DIST > 0) - if "LONG" in chosen_mutes: - assert(PAR.LONG_DIST is not None) - assert (PAR.LONG_DIST > 0) - - # Data filtering options that will be passed to ObsPy filters - if PAR.FILTER: - acceptable_filters = ["BANDPASS", "LOWPASS", "HIGHPASS"] - assert PAR.FILTER.upper() in acceptable_filters, \ - f"PAR.FILTER must be in {acceptable_filters}" - - # Set the min/max frequencies and periods, frequency takes priority - if PAR.MIN_FREQ is not None: - PAR.force_set("MAX_PERIOD", 1 / PAR.MIN_FREQ) - elif PAR.MAX_PERIOD is not None: - PAR.force_set("MIN_FREQ", 1 / PAR.MAX_PERIOD) - - if PAR.MAX_FREQ is not None: - PAR.force_set("MIN_PERIOD", 1 / PAR.MAX_FREQ) - elif PAR.MIN_PERIOD is not None: - PAR.force_set("MAX_FREQ", 1 / PAR.MIN_PERIOD) - - # Check that the correct filter bounds have been set - if PAR.FILTER.upper() == "BANDPASS": - assert(PAR.MIN_FREQ is not None and PAR.MAX_FREQ is not None), \ - ("BANDPASS filter PAR.MIN_PERIOD and PAR.MAX_PERIOD or " - "PAR.MIN_FREQ and PAR.MAX_FREQ") - elif PAR.FILTER.upper() == "LOWPASS": - assert(PAR.MAX_FREQ is not None or PAR.MIN_PERIOD is not None),\ - "LOWPASS requires PAR.MAX_FREQ or PAR.MIN_PERIOD" - elif PAR.FILTER.upper() == "HIGHPASS": - assert(PAR.MIN_FREQ is not None or PAR.MAX_PERIOD is not None),\ - "HIGHPASS requires PAR.MIN_FREQ or PAR.MAX_PERIOD" - - # Check that filter bounds make sense, by this point, MIN and MAX - # FREQ and PERIOD should be set, so we just check the FREQ - assert(0 < PAR.MIN_FREQ < np.inf), "0 < PAR.MIN_FREQ < inf" - assert(0 < PAR.MAX_FREQ < np.inf), "0 < PAR.MAX_FREQ < inf" - assert(PAR.MIN_FREQ < PAR.MAX_FREQ), "PAR.MIN_FREQ < PAR.MAX_FREQ" - - # Assert that readers and writers available - # TODO | This is a bit vague as dir contains imported modules and hidden - # TODO | variables (e.g., np, __name__) - assert(PAR.FORMAT in dir(readers)), f"Reader {PAR.FORMAT} not found" - assert(PAR.FORMAT in dir(writers)), f"Writer {PAR.FORMAT} not found" - - # Assert that either misfit or backproject exists - if PAR.WORKFLOW.upper() == "INVERSION": - assert(PAR.MISFIT is not None) - - def setup(self): - """ - Sets up data preprocessing machinery by dynamicalyl loading the - misfit, adjoint source type, and specifying the expected file type - for input and output seismic data. - """ - unix.mkdir(PATH.PREPROCESS) - - # Define misfit function and adjoint trace generator - if PAR.MISFIT: - self.logger.debug(f"misfit function is: '{PAR.MISFIT}'") - self.misfit = getattr(misfit, PAR.MISFIT.lower()) - self.adjoint = getattr(adjoint, PAR.MISFIT.lower()) - elif PAR.BACKPROJECT: - self.logger.debug(f"backproject function is: '{PAR.BACKPROJECT}'") - self.adjoint = getattr(adjoint, PAR.BACKPROJECT.lower()) - - # Define seismic data reader and writer - self.reader = getattr(readers, PAR.FORMAT) - self.writer = getattr(writers, PAR.FORMAT) - - def prepare_eval_grad(self, cwd, taskid, filenames, **kwargs): - """ - Prepares solver for gradient evaluation by writing residuals and - adjoint traces. Meant to be called by solver.eval_func(). - - Reads in observed and synthetic waveforms, applies optional - preprocessing, assesses misfit, and writes out adjoint sources and - STATIONS_ADJOINT file. - - .. note:: - Meant to be called by solver.eval_func(), may have unused arguments - to keep functions general across subclasses. - - :type cwd: str - :param cwd: current specfem working directory containing observed and - synthetic seismic data to be read and processed. Should be defined - by solver.cwd - :type filenames: list of str - :param filenames: list of filenames defining the files in traces - """ - if taskid == 0: - self.logger.debug("preparing files for gradient evaluation") - - for filename in filenames: - obs = self.reader(path=os.path.join(cwd, "traces", "obs"), - filename=filename) - syn = self.reader(path=os.path.join(cwd, "traces", "syn"), - filename=filename) - - # Process observations and synthetics identically - if PAR.FILTER: - if taskid == 0: - self.logger.debug(f"applying {PAR.FILTER} filter to data") - obs = self._apply_filter(obs) - syn = self._apply_filter(syn) - if PAR.MUTE: - if taskid == 0: - self.logger.debug(f"applying {PAR.MUTE} mutes to data") - obs = self._apply_mute(obs) - syn = self._apply_mute(syn) - if PAR.NORMALIZE: - if taskid == 0: - self.logger.debug(f"normalizing data with: {PAR.NORMALIZE}") - obs = self._apply_normalize(obs) - syn = self._apply_normalize(syn) - - if PAR.MISFIT is not None: - self._write_residuals(cwd, syn, obs) - - # Write the adjoint traces. Rename file extension for Specfem - if PAR.FORMAT.upper() == "ASCII": - # Change the extension to '.adj' from whatever it is - ext = os.path.splitext(filename)[-1] - filename_out = filename.replace(ext, ".adj") - elif PAR.FORMAT.upper() == "SU": - # TODO implement this - raise NotImplementedError - - self._write_adjoint_traces(path=os.path.join(cwd, "traces", "adj"), - syn=syn, obs=obs, filename=filename_out) - - # Copy over the STATIONS file to STATIONS_ADJOINT required by Specfem - # ASSUMING that all stations are used in adjoint simulation - src = os.path.join(cwd, "DATA", "STATIONS") - dst = os.path.join(cwd, "DATA", "STATIONS_ADJOINT") - unix.cp(src, dst) - - def sum_residuals(self, files): - """ - Sums squares of residuals - - :type files: str - :param files: list of single-column text files containing residuals - :rtype: float - :return: sum of squares of residuals - """ - total_misfit = 0. - for filename in files: - total_misfit += np.sum(np.loadtxt(filename) ** 2.) - - return total_misfit - - def finalize(self): - """ - Any finalization processes that need to take place at the end of an - iteration - """ - pass - - def _write_residuals(self, path, syn, obs): - """ - Computes residuals between observed and synthetic seismogram based on - the misfit function PAR.MISFIT. Saves the residuals for each - data-synthetic pair into a text file located at: - - ./scratch/solver/*/residuals - - The resulting file will be a single-column ASCII file that needs to be - summed before use by the solver - - :type path: str - :param path: location "adjoint traces" will be written - :type syn: obspy.core.stream.Stream - :param syn: synthetic data - :type obs: obspy.core.stream.Stream - :param syn: observed data - """ - residuals = [] - for obs_, syn_ in zip(obs, syn): - residuals.append(self.misfit(syn_.data, obs_.data, PAR.NT, PAR.DT)) - - filename = os.path.join(path, "residuals") - if exists(filename): - residuals = np.append(residuals, np.loadtxt(filename)) - - np.savetxt(filename, residuals) - - def _write_adjoint_traces(self, path, syn, obs, filename): - """ - Writes "adjoint traces" required for gradient computation - - :type path: str - :param path: location "adjoint traces" will be written - :type syn: obspy.core.stream.Stream - :param syn: synthetic data - :type obs: obspy.core.stream.Stream - :param syn: observed data - :type filename: str - :param filename: filename to write adjoint traces to - """ - # Use the synthetics as a template for the adjoint sources - adj = syn.copy() - for adj_, obs_, syn_ in zip(adj, obs, syn): - adj.data = self.adjoint(syn_.data, obs_.data, PAR.NT, PAR.DT) - - self.writer(adj, path, filename) - - def _apply_filter(self, st): - """ - Apply a filter to waveform data using ObsPy - - :type st: obspy.core.stream.Stream - :param st: stream to be filtered - :rtype: obspy.core.stream.Stream - :return: filtered traces - """ - # Pre-processing before filtering - st.detrend("demean") - st.detrend("linear") - st.taper(0.05, type="hann") - - if PAR.FILTER.upper() == "BANDPASS": - st.filter("bandpass", zerophase=True, freqmin=PAR.MIN_FREQ, - freqmax=PAR.FREQMAX) - elif PAR.FILTER.upper() == "LOWPASS": - st.filter("lowpass", zerophase=True, freq=PAR.MAX_FREQ) - elif PAR.FILTER.upper() == "HIGHPASS": - st.filter("highpass", zerophase=True, freq=PAR.MIN_FREQ) - - return st - - def _apply_mute(self, st): - """ - Apply mute on data based on early or late arrivals, and short or long - source receiver distances - - .. note:: - The underlying mute functions have been refactored but not tested - as I was not aware of the intended functionality. Not gauranteed - to work, use at your own risk. - - :type st: obspy.core.stream.Stream - :param st: stream to mute - :rtype: obspy.core.stream.Stream - :return: muted stream object - """ - mute_choices = [_.upper() for _ in PAR.MUTE] - if "EARLY" in mute_choices: - st = signal.mute_arrivals(st, slope=PAR.EARLY_SLOPE, - const=PAR.EARLY_CONST, - choice="EARLY") - if "LATE" in mute_choices: - st = signal.mute_arrivals(st, slope=PAR.LATE_SLOPE, - const=PAR.LATE_CONST, - choice="LATE") - if "SHORT" in mute_choices: - st = signal.mute_offsets(st, dist=PAR.SHORT_DIST, - choice="SHORT") - if "LONG" in mute_choices: - st = signal.mute_arrivals(st, dist=PAR.LONG_DIST, - choice="LONG") - - return st - - def _apply_normalize(self, st): - """ - Normalize the amplitudes of waveforms based on user choice - - .. note:: - The normalization function has been refactored but not tested - as I was not aware of the intended functionality. Not gauranteed - to work, use at your own risk. - - :type st: obspy.core.stream.Stream - :param st: All of the data streams to be normalized - :rtype: obspy.core.stream.Stream - :return: stream with normalized traces - """ - st_out = st.copy() - norm_choices = [_.upper() for _ in PAR.NORMALIZE] - - # Normalize an event by the L1 norm of all traces - if 'ENORML1' in norm_choices: - w = 0. - for tr in st_out: - w += np.linalg.norm(tr.data, ord=1) - for tr in st_out: - tr.data /= w - # Normalize an event by the L2 norm of all traces - elif "ENORML2" in norm_choices: - w = 0. - for tr in st_out: - w += np.linalg.norm(tr.data, ord=2) - for tr in st_out: - tr.data /= w - # Normalize each trace by its L1 norm - if "TNORML1" in norm_choices: - for tr in st_out: - w = np.linalg.norm(tr.data, ord=1) - if w > 0: - tr.data /= w - elif "TNORML2" in norm_choices: - # normalize each trace by its L2 norm - for tr in st_out: - w = np.linalg.norm(tr.data, ord=2) - if w > 0: - tr.data /= w - return st_out diff --git a/seisflows/preprocess/default.py b/seisflows/preprocess/default.py new file mode 100644 index 00000000..5fc71741 --- /dev/null +++ b/seisflows/preprocess/default.py @@ -0,0 +1,603 @@ +#!/usr/bin/env python3 +""" +The SeisFlows Preprocessing module is in charge of interacting with seismic +data (observed and synthetic). It should contain functionality to read and write +seismic data, apply preprocessing such as filtering, quantify misfit, +and write adjoint sources that are expected by the solver. +""" +import os +import numpy as np +from glob import glob +from obspy import read as obspy_read +from obspy import Stream, Trace, UTCDateTime + +from seisflows import logger +from seisflows.tools import signal, unix +from seisflows.tools.config import Dict, get_task_id + +from seisflows.plugins.preprocess import misfit as misfit_functions +from seisflows.plugins.preprocess import adjoint as adjoint_sources + + +class Default: + """ + Default Preprocess + ------------------ + Data processing for seismic traces, with options for data misfit, + filtering, normalization and muting. + + Parameters + ---------- + :type data_format: str + :param data_format: data format for reading traces into memory. For + available see: seisflows.plugins.preprocess.readers + :type misfit: str + :param misfit: misfit function for waveform comparisons. For available + see seisflows.plugins.preprocess.misfit + :type backproject: str + :param backproject: backprojection function for migration, or the + objective function in FWI. For available see + seisflows.plugins.preprocess.adjoint + :type normalize: str + :param normalize: Data normalization parameters used to normalize the + amplitudes of waveforms. Choose from two sets: + ENORML1: normalize per event by L1 of traces; OR + ENORML2: normalize per event by L2 of traces; + & + TNORML1: normalize per trace by L1 of itself; OR + TNORML2: normalize per trace by L2 of itself + :type filter: str + :param filter: Data filtering type, available options are: + BANDPASS (req. MIN/MAX PERIOD/FREQ); + LOWPASS (req. MAX_FREQ or MIN_PERIOD); + HIGHPASS (req. MIN_FREQ or MAX_PERIOD) + :type min_period: float + :param min_period: Minimum filter period applied to time series. + See also MIN_FREQ, MAX_FREQ, if User defines FREQ parameters, they + will overwrite PERIOD parameters. + :type max_period: float + :param max_period: Maximum filter period applied to time series. See + also MIN_FREQ, MAX_FREQ, if User defines FREQ parameters, they will + overwrite PERIOD parameters. + :type min_freq: float + :param min_freq: Maximum filter frequency applied to time series, + See also MIN_PERIOD, MAX_PERIOD, if User defines FREQ parameters, + they will overwrite PERIOD parameters. + :type max_freq: float + :param max_freq: Maximum filter frequency applied to time series, + See also MIN_PERIOD, MAX_PERIOD, if User defines FREQ parameters, + they will overwrite PERIOD parameters. + :type mute: list + :param mute: Data mute parameters used to zero out early / late + arrivals or offsets. Choose any number of: + EARLY: mute early arrivals; + LATE: mute late arrivals; + SHORT: mute short source-receiver distances; + LONG: mute long source-receiver distances + + Paths + ----- + :type path_preprocess: str + :param path_preprocess: scratch path for all preprocessing processes, + including saving files + *** + """ + def __init__(self, data_format="ascii", misfit="waveform", + adjoint="waveform", normalize=None, filter=None, + min_period=None, max_period=None, min_freq=None, max_freq=None, + mute=None, early_slope=None, early_const=None, late_slope=None, + late_const=None, short_dist=None, long_dist=None, + workdir=os.getcwd(), path_preprocess=None, path_solver=None, + **kwargs): + """ + Preprocessing module parameters + + .. note:: + Paths listed here are shared with `workflow.forward` and so are not + included in the class docstring. + + :type workdir: str + :param workdir: working directory in which to look for data and store + results. Defaults to current working directory + :type path_preprocess: str + :param path_preprocess: scratch path for all preprocessing processes, + including saving files + """ + self.data_format = data_format.upper() + self.misfit = misfit + self.adjoint = adjoint + self.normalize = normalize + + self.filter = filter + self.min_period = min_period + self.max_period = max_period + self.min_freq = min_freq + self.max_freq = max_freq + self.mute = mute or [] + self.normalize = normalize or [] + + # Mute arrivals sub-parameters + self.early_slope = early_slope + self.early_const = early_const + self.late_slope = late_slope + self.late_const = late_const + self.short_dist = short_dist + self.long_dist = long_dist + + self.path = Dict( + scratch=path_preprocess or os.path.join(workdir, "scratch", + "preprocess"), + solver=path_solver or os.path.join(workdir, "scratch", "solver") + ) + + self._acceptable_data_formats = ["SU", "ASCII"] + + # Misfits and adjoint sources are defined by the available functions + # in each of these plugin files. Drop hidden variables from dir() + self._acceptable_misfits = [_ for _ in dir(misfit_functions) + if not _.startswith("_")] + self._acceptable_adjsrcs = [_ for _ in dir(adjoint_sources) + if not _.startswith("_")] + + # Internal attributes used to keep track of inversion workflows + self._iteration = None + self._step_count = None + self._source_names = None + + def check(self): + """ + Checks parameters and paths + """ + if self.misfit: + assert(self.misfit in self._acceptable_misfits), \ + f"preprocess.misfit must be in {self._acceptable_misfits}" + if self.adjoint: + assert(self.adjoint in self._acceptable_adjsrcs), \ + f"preprocess.misfit must be in {self._acceptable_adjsrcs}" + + # Data normalization option + if self.normalize: + acceptable_norms = {"TNORML1", "TNORML2", "ENORML1", "ENORML2"} + chosen_norms = [_.upper() for _ in self.normalize] + assert(set(chosen_norms).issubset(acceptable_norms)) + + # Data muting options + if self.mute: + acceptable_mutes = {"EARLY", "LATE", "LONG", "SHORT"} + chosen_mutes = [_.upper() for _ in self.mute] + assert(set(chosen_mutes).issubset(acceptable_mutes)) + if "EARLY" in chosen_mutes: + assert(self.early_slope is not None) + assert(self.early_slope >= 0.) + assert(self.early_const is not None) + if "LATE" in chosen_mutes: + assert(self.late_slope is not None) + assert(self.late_slope >= 0.) + assert(self.late_const is not None) + if "SHORT" in chosen_mutes: + assert(self.short_dist is not None) + assert (self.short_dist > 0) + if "LONG" in chosen_mutes: + assert(self.long_dist is not None) + assert (self.long_dist > 0) + + # Data filtering options that will be passed to ObsPy filters + if self.filter: + acceptable_filters = ["BANDPASS", "LOWPASS", "HIGHPASS"] + assert self.filter.upper() in acceptable_filters, \ + f"self.filter must be in {acceptable_filters}" + + # Set the min/max frequencies and periods, frequency takes priority + if self.min_freq is not None: + self.max_period = 1 / self.min_freq + elif self.max_period is not None: + self.min_freq = 1 / self.max_period + + if self.max_freq is not None: + self.min_period = 1 / self.max_freq + elif self.min_period is not None: + self.max_freq = 1 / self.min_period + + # Check that the correct filter bounds have been set + if self.filter.upper() == "BANDPASS": + assert(self.min_freq is not None and + self.max_freq is not None), \ + ("BANDPASS filter PAR.MIN_PERIOD and PAR.MAX_PERIOD or " + "PAR.MIN_FREQ and PAR.MAX_FREQ") + elif self.filter.upper() == "LOWPASS": + assert(self.max_freq is not None or + self.min_period is not None),\ + "LOWPASS requires PAR.MAX_FREQ or PAR.MIN_PERIOD" + elif self.filter.upper() == "HIGHPASS": + assert(self.min_freq is not None or + self.max_period is not None),\ + "HIGHPASS requires PAR.MIN_FREQ or PAR.MAX_PERIOD" + + # Check that filter bounds make sense, by this point, MIN and MAX + # FREQ and PERIOD should be set, so we just check the FREQ + assert(0 < self.min_freq < np.inf), "0 < PAR.MIN_FREQ < inf" + assert(0 < self.max_freq < np.inf), "0 < PAR.MAX_FREQ < inf" + assert(self.min_freq < self.max_freq), ( + "PAR.MIN_FREQ < PAR.MAX_FREQ" + ) + + assert(self.data_format.upper() in self._acceptable_data_formats), \ + f"data format must be in {self._acceptable_data_formats}" + + def setup(self): + """ + Sets up data preprocessing machinery by dynamicalyl loading the + misfit, adjoint source type, and specifying the expected file type + for input and output seismic data. + """ + unix.mkdir(self.path.scratch) + + def read(self, fid): + """ + Waveform reading functionality. Imports waveforms as Obspy streams + + :type fid: str + :param fid: path to file to read data from + :rtype: obspy.core.stream.Stream + :return: ObsPy stream containing data stored in `fid` + """ + st = None + if self.data_format.upper() == "SU": + st = obspy_read(fid, format="SU", byteorder="<") + elif self.data_format.upper() == "ASCII": + st = read_ascii(fid) + return st + + def write(self, st, fid): + """ + Waveform writing functionality. Writes waveforms back to format that + SPECFEM recognizes + + :type st: obspy.core.stream.Stream + :param st: stream to write + :type fid: str + :param fid: path to file to write stream to + """ + if self.data_format.upper() == "SU": + for tr in st: + # Work around for ObsPy data type conversion + tr.data = tr.data.astype(np.float32) + max_delta = 0.065535 + dummy_delta = max_delta + + if st[0].stats.delta > max_delta: + for tr in st: + tr.stats.delta = dummy_delta + + # Write data to file + st.write(fid, format="SU") + + elif self.data_format.upper() == "ASCII": + for tr in st: + # Float provides time difference between starttime and default + time_offset = float(tr.stats.starttime) + data_out = np.vstack((tr.times() + time_offset, tr.data)).T + np.savetxt(fid, data_out, ["%13.7f", "%17.7f"]) + + def _calculate_misfit(self, **kwargs): + """Wrapper for plugins.preprocess.misfit misfit/objective function""" + if self.misfit is not None: + return getattr(misfit_functions, self.misfit)(**kwargs) + else: + return None + + def _generate_adjsrc(self, **kwargs): + """Wrapper for plugins.preprocess.adjoint source/backproject function""" + if self.adjoint is not None: + return getattr(adjoint_sources, self.adjoint)(**kwargs) + else: + return None + + def initialize_adjoint_traces(self, data_filenames, output): + """ + SPECFEM requires that adjoint traces be present for every matching + synthetic seismogram. If an adjoint source does not exist, it is + simply set as zeros. This function creates all adjoint traces as + zeros, to be filled out later + + Appends '.adj. to the solver filenames as expected by SPECFEM (if they + don't already have that extension) + + TODO there are some sem2d and 3d specific tasks that are not carried + TODO over here, were they required? + + :type data_filenames: list of str + :param data_filenames: existing solver waveforms to read from. + These will be copied, zerod out, and saved to path `save`. Should + come from solver.data_filenames + :type output: str + :param output: path to save the new adjoint traces to. + """ + for fid in data_filenames: + st = self.read(fid=fid).copy() + fid = os.path.basename(fid) # drop any path before filename + for tr in st: + tr.data *= 0 + + adj_fid = self._rename_as_adjoint_source(fid) + + # Write traces back to the adjoint trace directory + self.write(st=st, fid=os.path.join(output, adj_fid)) + + def _rename_as_adjoint_source(self, fid): + """ + Rename synthetic waveforms into filenames consistent with how SPECFEM + expects adjoint sources to be named. Usually this just means adding + a '.adj' to the end of the filename + + TODO how does SPECFEM3D_GLOBE expect this? filenames end with .sem.ascii + so the .ascii will get replaced. Is that okay? + """ + if not fid.endswith(".adj"): + if self.data_format.upper() == "SU": + fid = f"{fid}.adj" + elif self.data_format.upper() == "ASCII": + og_extension = os.path.splitext(fid)[-1] # e.g., .semd + fid = fid.replace(og_extension, ".adj") + return fid + + def _setup_quantify_misfit(self, source_name): + """ + Gather waveforms from the Solver scratch directory and + """ + source_name = source_name or self._source_names[get_task_id()] + + obs_path = os.path.join(self.path.solver, source_name, "traces", "obs") + syn_path = os.path.join(self.path.solver, source_name, "traces", "syn") + + observed = sorted(glob(os.path.join(obs_path, "*"))) + synthetic = sorted(glob(os.path.join(syn_path, "*"))) + + assert(len(observed) == len(synthetic)), ( + f"number of observed traces does not match length of synthetic for " + f"source: {source_name}" + ) + + assert(len(observed) != 0 and len(synthetic) != 0), \ + f"cannot quantify misfit, missing observed or synthetic traces" + + return observed, synthetic + + def quantify_misfit(self, source_name=None, save_residuals=None, + save_adjsrcs=None, iteration=1, step_count=0, + **kwargs): + """ + Prepares solver for gradient evaluation by writing residuals and + adjoint traces. Meant to be called by solver.eval_func(). + + Reads in observed and synthetic waveforms, applies optional + preprocessing, assesses misfit, and writes out adjoint sources and + STATIONS_ADJOINT file. + + TODO use concurrent futures to parallelize this + + :type source_name: str + :param source_name: name of the event to quantify misfit for. If not + given, will attempt to gather event id from the given task id which + is assigned by system.run() + :type save_residuals: str + :param save_residuals: if not None, path to write misfit/residuls to + :type save_adjsrcs: str + :param save_adjsrcs: if not None, path to write adjoint sources to + :type iteration: int + :param iteration: current iteration of the workflow, information should + be provided by `workflow` module if we are running an inversion. + Defaults to 1 if not given (1st iteration) + :type step_count: int + :param step_count: current step count of the line search. Information + should be provided by the `optimize` module if we are running an + inversion. Defaults to 0 if not given (1st evaluation) + """ + observed, synthetic = self._setup_quantify_misfit(source_name) + + for obs_fid, syn_fid in zip(observed, synthetic): + obs = self.read(fid=obs_fid) + syn = self.read(fid=syn_fid) + + # Process observations and synthetics identically + if self.filter: + obs = self._apply_filter(obs) + syn = self._apply_filter(syn) + if self.mute: + obs = self._apply_mute(obs) + syn = self._apply_mute(syn) + if self.normalize: + obs = self._apply_normalize(obs) + syn = self._apply_normalize(syn) + + # Write the residuals/misfit and adjoint sources for each component + for tr_obs, tr_syn in zip(obs, syn): + # Simple check to make sure zip retains ordering + assert(tr_obs.stats.component == tr_syn.stats.component) + # Calculate the misfit value and write to file + if save_residuals and self._calculate_misfit: + residual = self._calculate_misfit( + obs=tr_obs.data, syn=tr_syn.data, + nt=tr_syn.stats.npts, dt=tr_syn.stats.delta + ) + with open(save_residuals, "a") as f: + f.write(f"{residual:.2E}\n") + + # Generate an adjoint source trace, write to file + if save_adjsrcs and self._generate_adjsrc: + adjsrc = syn.copy() + adjsrc.data = self._generate_adjsrc( + obs=tr_obs.data, syn=tr_syn.data, + nt=tr_syn.stats.npts, dt=tr_syn.stats.delta + ) + fid = os.path.basename(syn_fid) + fid = self._rename_as_adjoint_source(fid) + self.write(st=adjsrc, fid=os.path.join(save_adjsrcs, fid)) + + def finalize(self): + """Teardown procedures for the default preprocessing class""" + pass + + @staticmethod + def sum_residuals(residuals): + """ + Returns the summed square of residuals for each event. Following + Tape et al. 2007 + + :type residuals: np.array + :param residuals: list of residuals from each NTASK event + :rtype: float + :return: sum of squares of residuals + """ + return np.sum(residuals ** 2.) + + def _apply_filter(self, st): + """ + Apply a filter to waveform data using ObsPy + + :type st: obspy.core.stream.Stream + :param st: stream to be filtered + :rtype: obspy.core.stream.Stream + :return: filtered traces + """ + # Pre-processing before filtering + st.detrend("demean") + st.detrend("linear") + st.taper(0.05, type="hann") + + if self.filter.upper() == "BANDPASS": + st.filter("bandpass", zerophase=True, freqmin=self.min_freq, + freqmax=self.max_freq) + elif self.filter.upper() == "LOWPASS": + st.filter("lowpass", zerophase=True, freq=self.max_freq) + elif self.filter.upper() == "HIGHPASS": + st.filter("highpass", zerophase=True, freq=self.min_freq) + + return st + + def _apply_mute(self, st): + """ + Apply mute on data based on early or late arrivals, and short or long + source receiver distances + + .. note:: + The underlying mute functions have been refactored but not tested + as I was not aware of the intended functionality. Not gauranteed + to work, use at your own risk. + + :type st: obspy.core.stream.Stream + :param st: stream to mute + :rtype: obspy.core.stream.Stream + :return: muted stream object + """ + mute_choices = [_.upper() for _ in self.mute] + if "EARLY" in mute_choices: + st = signal.mute_arrivals(st, slope=self.early_slope, + const=self.early_const, choice="EARLY") + if "LATE" in mute_choices: + st = signal.mute_arrivals(st, slope=self.late_slope, + const=self.late_const, choice="LATE") + if "SHORT" in mute_choices: + st = signal.mute_offsets(st, dist=self.short_dist, choice="SHORT") + if "LONG" in mute_choices: + st = signal.mute_offsets(st, dist=self.long_dist, choice="LONG") + + return st + + def _apply_normalize(self, st): + """ + Normalize the amplitudes of waveforms based on user choice + + .. note:: + The normalization function has been refactored but not tested + as I was not aware of the intended functionality. Not gauranteed + to work, use at your own risk. + + :type st: obspy.core.stream.Stream + :param st: All of the data streams to be normalized + :rtype: obspy.core.stream.Stream + :return: stream with normalized traces + """ + st_out = st.copy() + norm_choices = [_.upper() for _ in self.normalize] + + # Normalize an event by the L1 norm of all traces + if 'ENORML1' in norm_choices: + w = 0. + for tr in st_out: + w += np.linalg.norm(tr.data, ord=1) + for tr in st_out: + tr.data /= w + # Normalize an event by the L2 norm of all traces + elif "ENORML2" in norm_choices: + w = 0. + for tr in st_out: + w += np.linalg.norm(tr.data, ord=2) + for tr in st_out: + tr.data /= w + # Normalize each trace by its L1 norm + if "TNORML1" in norm_choices: + for tr in st_out: + w = np.linalg.norm(tr.data, ord=1) + if w > 0: + tr.data /= w + elif "TNORML2" in norm_choices: + # normalize each trace by its L2 norm + for tr in st_out: + w = np.linalg.norm(tr.data, ord=2) + if w > 0: + tr.data /= w + + return st_out + + +def read_ascii(fid, origintime=None): + """ + Read waveforms in two-column ASCII format. This is copied directly from + pyatoa.utils.read.read_sem() + """ + try: + times = np.loadtxt(fname=fid, usecols=0) + data = np.loadtxt(fname=fid, usecols=1) + + # At some point in 2018, the Specfem developers changed how the ascii files + # were formatted from two columns to comma separated values, and repeat + # values represented as 2*value_float where value_float represents the data + # value as a float + except ValueError: + times, data = [], [] + with open(fid, 'r') as f: + lines = f.readlines() + for line in lines: + try: + time_, data_ = line.strip().split(',') + except ValueError: + if "*" in line: + time_ = data_ = line.split('*')[-1] + else: + raise ValueError + times.append(float(time_)) + data.append(float(data_)) + + times = np.array(times) + data = np.array(data) + + if origintime is None: + origintime = UTCDateTime("1970-01-01T00:00:00") + + # We assume that dt is constant after 'precision' decimal points + delta = round(times[1] - times[0], 4) + + # Honor that Specfem doesn't start exactly on 0 + origintime += times[0] + + # Write out the header information + net, sta, cha, fmt = os.path.basename(fid).split('.') + stats = {"network": net, "station": sta, "location": "", + "channel": cha, "starttime": origintime, "npts": len(data), + "delta": delta, "mseed": {"dataquality": 'D'}, + "time_offset": times[0], "format": fmt + } + st = Stream([Trace(data=data, header=stats)]) + + return st diff --git a/seisflows/preprocess/pyaflowa.py b/seisflows/preprocess/pyaflowa.py new file mode 100644 index 00000000..8866dd0d --- /dev/null +++ b/seisflows/preprocess/pyaflowa.py @@ -0,0 +1,771 @@ +#!/usr/bin/env python3 +""" +The Pyaflowa preprocessing module for waveform gathering, preprocessing and +misfit quantification. We use the name 'Pyaflowa' to avoid any potential +name overlaps with the actual pyatoa package. +""" +import os +import logging +import time +import random +import numpy as np +from concurrent.futures import ProcessPoolExecutor, as_completed +from glob import glob +from pyasdf import ASDFDataSet +from pyatoa import Config, Manager, Inspector, ManagerError +from pyatoa.utils.read import read_station_codes, read_sem +from pyatoa.utils.images import imgs_to_pdf, merge_pdfs + +from seisflows import logger +from seisflows.tools import unix +from seisflows.tools.config import Null, Dict, get_task_id +from seisflows.tools.specfem import check_source_names + + +class Pyaflowa: + """ + Pyaflowa Preprocess + ------------------- + Preprocessing and misfit quantification using Python's Adjoint Tomography + Operations Assistance (Pyatoa) + + Parameters + ---------- + :type min_period: float + :param min_period: Minimum filter corner in unit seconds. Bandpass + filter if set with `max_period`, highpass filter if set without + `max_period`, no filtering if not set and `max_period also not set + :type max_period: float + :param max_period: Maximum filter corner in unit seconds. Bandpass + filter if set with `min_period`, lowpass filter if set without + `min_period`, no filtering if not set and `min_period also not set + :type filter_corners: int + :param filter_corners: number of filter corners applied to filtering + :type client: str + :param client: Client name for ObsPy FDSN data gathering. Pyatoa will + attempt to collect waveform and metadata based on network and + station codes provided in the SPECFEM STATIONS file. If set None, + no FDSN gathering will be attempted + :type rotate: bool + :param rotate: Attempt to rotate waveform components from NEZ -> RTZ + :type pyflex_preset: str + :param pyflex_preset: Parameter map for misfit window configuration + defined by Pyflex. IF None, misfit and adjoint sources will be + calculated on whole traces. For available choices, see Pyatoa docs + page (pyatoa.rtfd.io) + :type fix_windows: bool or str + :param fix_windows: How to address misfit window evaluation at each + evaluation. Options to re-use misfit windows collected during an + inversion, available options: + [True, False, 'ITER', 'ONCE'] + True: Re-use windows after first evaluation (i01s00); + False: Calculate new windows each evaluation; + 'ITER': Calculate new windows at first evaluation of + each iteration (e.g., i01s00... i02s00... + 'ONCE': Calculate new windows at first evaluation of + the workflow, i.e., at self.par.BEGIN + :type adj_src_type: str + :param adj_src_type: Adjoint source type to evaluate misfit, defined by + Pyadjoint. Currently available options: ['cc': cross-correlation, + 'mt': multitaper, 'wav': waveform'] + :type plot: bool + :param plot: plot waveform figures and source receiver maps during + the preprocessing stage + :type pyatoa_log_level: str + :param pyatoa_log_level: Log level to set Pyatoa, Pyflex, Pyadjoint. + Available: ['null': no logging, 'warning': warnings only, + 'info': task tracking, 'debug': log all small details (recommended)] + :type unit_output: str + :param unit_output: Data units. Must match the synthetic output of + external solver. Available: ['DISP': displacement, 'VEL': velocity, + 'ACC': acceleration] + :type export_datasets: bool + :param export_datasets: periodically save the output ASDFDataSets which + contain data, metadata and results collected during the + preprocessing procedure + :type export_figures: bool + :param export_figures: periodically save the output basemaps and + data-synthetic waveform comparison figures + :type export_log_files: bool + :param export_log_files: periodically save log files created by Pyatoa + + Paths + ----- + :type path_preprocess: str + :param path_preprocess: scratch path for preprocessing related steps + *** + """ + def __init__(self, min_period=1., max_period=10., filter_corners=4, + client=None, rotate=False, pyflex_preset="default", + fix_windows=False, adj_src_type="cc", plot=True, + pyatoa_log_level="DEBUG", unit_output="VEL", max_workers=None, + export_datasets=True, export_figures=True, + export_log_files=True, + workdir=os.getcwd(), path_preprocess=None, + path_solver=None, path_specfem_data=None, path_data=None, + path_output=None, data_format="ascii", + data_case="data", components="ZNE", + start=None, ntask=1, nproc=1, source_prefix=None, + **kwargs): + """ + Pyatoa preprocessing parameters + + .. note:: + Paths and parameters listed here are shared with other modules and + so are not included in the main class docstring. + + :type data_format: str + :param data_format: data format for reading traces into memory. Pyatoa + only works with 'ASCII' currently. + :type data_case: str + :param data_case: How to address 'data' in the workflow, options: + 'data': real data will be provided by the user in + `path_data/{source_name}` in the same format that the solver will + produce synthetics (controlled by `solver.format`) OR + synthetic': 'data' will be generated as synthetic seismograms using + a target model provided in `path_model_true`. If None, workflow will + not attempt to generate data. + :type components: str + :param components: components to consider and tag data with. Should be + string of letters such as 'RTZ' + :type workdir: str + :param workdir: working directory in which to look for data and store + results. Defaults to current working directory + :type path_solver: str + :param path_solver: scratch path for all solver related tasks + :type path_data: str + :param path_data: path to any externally stored data required by the + solver + """ + self.min_period = min_period + self.max_period = max_period + self.filter_corners = filter_corners + self.client = client + self.rotate = rotate + self.pyflex_preset = pyflex_preset + self.fix_windows = fix_windows + self.adj_src_type = adj_src_type + self.plot = plot + self.pyatoa_log_level = pyatoa_log_level + self.unit_output = unit_output + + self.max_workers = max_workers + + self.path = Dict( + scratch=path_preprocess or os.path.join(workdir, "scratch", + "preprocess"), + solver=path_solver or os.path.join(workdir, "scratch", "solver"), + output=path_output or os.path.join(workdir, "output"), + specfem_data=path_specfem_data, + data=path_data, + ) + + # How to handle saving output data to disk + self.export_datasets = export_datasets + self.export_figures = export_figures + self.export_log_files = export_log_files + + # Pyatoa-specific internal directory structure for storing data etc. + self.path["_logs"] = os.path.join(self.path.scratch, "logs") + self.path["_tmplogs"] = os.path.join(self.path._logs, "tmp") + self.path["_datasets"] = os.path.join(self.path.scratch, "datasets") + self.path["_figures"] = os.path.join(self.path.scratch, "figures") + + # Where to look for externally stored waveform data and response files + if self.path.data: + self.path["_waveforms"] = os.path.join(self.path.data, "mseed") + self.path["_responses"] = os.path.join(self.path.data, "seed") + else: + self.path["_waveforms"] = None + self.path["_responses"] = None + + # SeisFlows parameters that should be set by other modules. Keep hidden + # so `seisflows configure` doesn't attribute these to preprocess. + self._data_format = data_format.upper() + self._data_case = data_case.lower() + self._components = components + self._start = start + self._ntask = ntask + self._nproc = nproc + self._source_prefix = source_prefix + + # Internal parameters to check against user-set parameters + self._acceptable_data_formats = ["ASCII"] + self._acceptable_source_prefixes = ["SOURCE", "FORCESOLUTION", + "CMTSOLUTION"] + self._acceptable_fix_windows = ["ITER", "ONCE", True, False] + self._acceptable_unit_outputs = ["VEL", "DISP", "ACC"] + + # Internal attributes to be filled in by setup() + self._config = None + self._fix_windows = False + self._station_codes = [] + self._source_names = [] + + def check(self): + """ + Checks Parameter and Path files, will be run at the start of a Seisflows + workflow to ensure that things are set appropriately. + """ + assert(self._data_format.upper() == "ASCII"), \ + "Pyatoa preprocess requires `data_format`=='ASCII'" + + assert(self.path.specfem_data is not None and + os.path.exists(self.path.specfem_data)), ( + f"Pyatoa requires `path_specfem_data` to exist" + ) + + assert(os.path.exists(os.path.join(self.path.specfem_data, + "STATIONS"))), \ + f"Pyatoa preprocessing requires that the `STATIONS` file exists " \ + f"within `path_specfem_data`" + + assert(self._source_prefix in self._acceptable_source_prefixes), ( + f"Pyatoa can only accept `source_prefix` in " + f"{self._acceptable_source_prefixes}, not '{self._source_prefix}'" + ) + assert(self._fix_windows in self._acceptable_fix_windows), \ + f"Pyatoa `fix_windows` must be in {self._acceptable_fix_windows}" + + assert(self.unit_output in self._acceptable_unit_outputs), \ + f"Pyatoa `unit_output` must be in {self._acceptable_unit_outputs}" + + def setup(self): + """ + Sets up data preprocessing machinery by establishing an internally + defined directory structure that will be used to store the outputs + of the preprocessing workflow + + .. note:: + `config.save_to_ds` must be set False, otherwise Pyatoa will try to + write to a read-only ASDFDataSet causing preprocessing to fail. + """ + for pathname in ["scratch", "_logs", "_tmplogs", "_datasets", + "_figures"]: + unix.mkdir(self.path[pathname]) + + # Convert SeisFlows user parameters into Pyatoa config parameters + # Contains paths to look for data and metadata + self._config = Config( + min_period=self.min_period, max_period=self.max_period, + filter_corners=self.filter_corners, client=self.client, + rotate=self.rotate, pyflex_preset=self.pyflex_preset, + fix_windows=self.fix_windows, adj_src_type=self.adj_src_type, + log_level=self.pyatoa_log_level, unit_output=self.unit_output, + component_list=list(self._components), save_to_ds=False, + synthetics_only=bool(self._data_case == "synthetic"), + paths={"waveforms": self.path["_waveforms"] or [], + "responses": self.path["_responses"] or [], + "events": [self.path.specfem_data] + } + ) + # Generate a list of station codes that will be used to search for data + self._station_codes = read_station_codes( + path_to_stations=os.path.join(self.path.specfem_data, "STATIONS"), + loc="*", cha="*" + ) + # Get an internal list of source names. Will be the same as solver + self._source_names = check_source_names( + path_specfem_data=self.path.specfem_data, + source_prefix=self._source_prefix, ntask=self._ntask + ) + + @staticmethod + def _ftag(config): + """ + Create a re-usable file tag from the Config object as multiple functions + will use this tag for file naming and file discovery. + + :type config: pyatoa.core.config.Config + :param config: Configuration object that must contain the 'event_id', + iteration and step count + """ + return f"{config.event_id}_{config.iter_tag}_{config.step_tag}" + + def quantify_misfit(self, source_name=None, save_residuals=None, + save_adjsrcs=None, iteration=1, step_count=0, + **kwargs): + """ + Prepares solver for gradient evaluation by evaluating data-synthetic + misfit and writing residuals and adjoint traces. Meant to be called by + `workflow.evaluate_objective_function`. + + .. note:: + meant to be run on system using system.run() with access to solver + + .. warning:: + parallel processing with concurrent futures currently leads to + computer crashes and I have not been able to figure out why or how + to deal with it. So for the moment misfit quantification on a + per-event basis is run serially + + :type source_name: str + :param source_name: name of the event to quantify misfit for. If not + given, will attempt to gather event id from the given task id which + is assigned by system.run() + :type save_residuals: str + :param save_residuals: if not None, path to write misfit/residuls to + :type save_adjsrcs: str + :param save_adjsrcs: if not None, path to write adjoint sources to + :type iteration: int + :param iteration: current iteration of the workflow, information should + be provided by `workflow` module if we are running an inversion. + Defaults to 1 if not given (1st iteration) + :type step_count: int + :param step_count: current step count of the line search. Information + should be provided by the `optimize` module if we are running an + inversion. Defaults to 0 if not given (1st evaluation) + """ + # Generate an event/evaluation specific config object to control Pyatoa + config = self._setup_quantify_misfit(source_name, iteration, step_count) + + # Run misfit quantification for ALL stations and this given event + # !!! Do not set parallel == True, see note in docstring !!! + misfit, nwin = self._run_quantify_misfit(config, save_adjsrcs, + parallel=False) + # Calculate misfit based on the raw misfit and total number of windows + if save_residuals: + # Calculate the misfit based on the number of windows. Equation from + # Tape et al. (2010). If no windows, misfit is simply raw misfit + try: + residuals = 0.5 * misfit / nwin + except ZeroDivisionError: + # Dealing with the case where nwin==0 (signifying either no + # windows found, or calc'ing misfit on whole trace) + residuals = misfit + with open(save_residuals, "a") as f: + f.write(f"{residuals:.2E}\n") + + # Combine all the individual .png files created into a single PDF + if self.plot: + fid = os.path.join(self.path._figures, f"{self._ftag(config)}.pdf") + self._make_event_figure_pdf(source_name=source_name, output_fid=fid) + + # Finally, collect all the temporary log files and write a main log file + pyatoa_logger = self._config_pyatoa_logger( + fid=os.path.join(self.path._logs, f"{self._ftag(config)}.log") + ) + pyatoa_logger.info( + f"\n{'=' * 80}\n{'SUMMARY':^80}\n{'=' * 80}\n" + f"SOURCE NAME: {config.event_id}\n" + f"WINDOWS: {nwin}\n" + f"RAW MISFIT: {misfit:.4f}\n" + f"\n{'=' * 80}\n{'RAW LOGS':^80}\n{'=' * 80}" + ) + self._collect_tmp_log_files(pyatoa_logger, config.event_id) + + def _setup_quantify_misfit(self, source_name, iteration, step_count): + """ + Create an event-specific Config object which contains information about + the current event, and position in the workflow evaluation. Also + provides specific information on event paths and timing to be used by + the Manager + + :type source_name: str + :param source_name: name of the event to quantify misfit for. If not + given, will attempt to gather event id from the given task id which + is assigned by system.run() + :type iteration: int + :param iteration: current iteration of the workflow, information should + be provided by `workflow` module if we are running an inversion. + Defaults to 1 if not given (1st iteration) + :type step_count: int + :param step_count: current step count of the line search. Information + should be provided by the `optimize` module if we are running an + inversion. Defaults to 0 if not given (1st evaluation) + :rtype: pyatoa.core.config.Config + :return: Config object that is specifically crafted for a given event + that can be directly fed to the Manager for misfit quantification + """ + config = self._config.copy() + config.event_id = source_name or self._source_names[get_task_id()] + config.iteration = iteration + config.step_count = step_count + + # Force the Manager to look in the solver directory for data + # note: we are assuming the SeisFlows `solver` directory structure here. + # If we change how the default `solver` directory is named (defined by + # `solver.initialize_solver_directories()`), then this will break + obs_path = os.path.join(self.path.solver, source_name, "traces", "obs") + config.paths["waveforms"].append(obs_path) + + syn_path = os.path.join(self.path.solver, source_name, "traces", "syn") + config.paths["synthetics"].append(syn_path) + + # Extract start and end times from one of the synthetic traces so that + # Pyatoa knows how long seismograms are and when to start them + # NOTE: assuming all synthetic time axes are the same for this source + synthetics = glob(os.path.join(syn_path, "*")) + assert synthetics, f"Pyatoa found no synthetics in: {syn_path}" + tr_syn = read_sem(synthetics[0])[0] + config.start_pad = abs(tr_syn.stats.time_offset) # [s] must be positive + config.end_pad = tr_syn.stats.endtime - tr_syn.stats.starttime # [s] + + return config + + def _run_quantify_misfit(self, config, save_adjsrcs, parallel=False): + """ + Run misfit quantification for each station concurrently or in serial. + If concurrent, play it safe and cap the max parallel workers at + half the processors otherwise you may run out of memory and crash the + CPU + """ + misfit, nwin = 0, 0 + # Run processing in parallel + if parallel: + with ProcessPoolExecutor(max_workers=1) as executor: + futures = (executor.submit(self._quantify_misfit_station, + config, code, save_adjsrcs) + for code in self._station_codes) + # We only need to return misfit information. All data/results + # are saved to the ASDFDataSet and status is logged to separate + # log file + for future in as_completed(futures): + _misfit, _nwin = future.result() + del future # Free up memory once future is completed + if _misfit is not None: + misfit += _misfit + if _nwin is not None: + nwin += _nwin + # Run processing in serial + else: + for code in self._station_codes: + _misfit, _nwin = self._quantify_misfit_station( + config=config, station_code=code, save_adjsrcs=save_adjsrcs + ) + if _misfit is not None: + misfit += _misfit + if _nwin is not None: + nwin += _nwin + + return misfit, nwin + + def _quantify_misfit_station(self, config, station_code, + save_adjsrcs=False): + """ + Run misfit quantification for a single event-station pair. Gathers, + preprocesses, windows and measures data, saves adjoint source if + requested, and then returns the total misfit and the collected + windows for the station. + + :type config: pyatoa.core.config.Config + :param config: Config object that defines all the processing parameters + required by the Pyatoa workflow + :type station_code: str + :param station_code: chosen station to quantify misfit for. Should be + in the format 'NN.SSS.LL.CCC' + :type save_adjsrcs: str + :param save_adjsrcs: path to directory where adjoint sources should be + saved. Filenames will be generated automatically by Pyatoa to fit + the naming schema required by SPECFEM. If False, no adjoint sources + will be saved. They of course can be saved manually later using + Pyatoa + PyASDF + """ + # Unique identifier for the given source-receiver pair for file naming + # Something like: 001_i01_s00_XX_XYZ + net, sta, loc, cha = station_code.split(".") + tag = f"{self._ftag(config)}_{net}_{sta}" + + # Configure a single source-receiver pair temporary logger + log_file = os.path.join(self.path._tmplogs, f"{tag}.log") + station_logger = self._config_pyatoa_logger(fid=log_file) + station_logger.info(f"\n{'/' * 80}\n{station_code:^80}\n{'/' * 80}") + + # Check whether or not we want to use misfit windows from last eval. + _fix_win, _msg = self._check_fixed_windows(iteration=config.iteration, + step_count=config.step_count) + station_logger.info(_msg) + + # Setup ASDFDataSet in read only so we can pull data/windows in parallel + ds_fid = os.path.join(self.path["_datasets"], f"{config.event_id}.h5") + if os.path.exists(ds_fid): + ds = ASDFDataSet(ds_fid, mode="r") # NOTE: read only mode + else: + ds = None + mgmt = Manager(config=config, ds=ds) + # If data gather fails, return because there's nothing else we can do + try: + # `gather` function uses Config path structure and Client attribute + # to search for data on disk or via webservices (if requested). + mgmt.gather(event_id=config.event_id, + prefix=f"{self._source_prefix}_", + code=station_code) + except ManagerError as e: + station_logger.warning(e) + return None, None + + # If any part of this processing fails, move on to plotting because we + # will have gathered waveform data so a figure is still useful. + try: + mgmt.standardize() + mgmt.preprocess() + mgmt.window(fix_windows=_fix_win) + mgmt.measure() + except ManagerError as e: + station_logger.warning(e) + pass + + # Plot waveform + map figure. Map may fail if we don't have appropriate + # metdata, in which case we fall back to plotting waveform only + if self.plot: + # e.g., 001_i01_s00_XX_ABC.png + save = os.path.join(self.path["_figures"], f"{tag}.png") + try: + mgmt.plot(choice="both", show=False, save=save) + except ManagerError as e: + station_logger.warning(e) + mgmt.plot(choice="wav", show=False, save=save) + + # Write out the .adj adjoint source files for solver to discover. + # Write empty adjoint sources for components with no adjoint sources + if mgmt.stats.misfit is not None and save_adjsrcs: + mgmt.write_adjsrcs(path=save_adjsrcs, write_blanks=True) + + # Wait until the very end to write to the HDF5 file, then do it + # pseudo-serially to get around trying to parallel write to HDF5 file + # WARNING: This is the biggest potential bottleneck of preprocessing + if ds is not None: + ds._close() # close the read-only version so we can open in write + while True: + try: + with ASDFDataSet(ds_fid, mode="a") as ds: + mgmt.write(ds=ds) + break + except (BlockingIOError, FileExistsError): + # Random sleep time [0,1]s to decrease chances of two processes + # attempting to access at exactly the same time + time.sleep(random.random()) + + return mgmt.stats.misfit, mgmt.stats.nwin + + def sum_residuals(self, residuals): + """ + Return summed residuals devided by number of events following equation + in Tape et al. 2010 + + :type residuals: np.array + :param residuals: list of residuals from each NTASK event + :rtype: float + :return: sum of squares of residuals + """ + summed_residuals = np.sum(residuals) + return summed_residuals / self._ntask + + def finalize(self): + """ + Run some serial finalization tasks specific to Pyatoa, which will help + aggregate the collection of output information. + + .. note:: + This finalize function performs the following tasks: + * Generate .csv files using the Inspector + * Aggregate event-specific PDFs into a single evaluation PDF + * Save scratch/ data into output/ if requested + """ + # Generate the Inspector from existing datasets and save to disk + # Allow this is fail, which might happen if we don't have enough data + # or the Dataset is not formatted as expected + unix.cd(self.path._datasets) + insp = Inspector("inspector", verbose=False) + try: + insp.discover() + insp.save() + except Exception as e: + logger.warning(f"Uncontrolled exception in Pyatoa Inspector " + f"creation -- will not create inspector:\n{e}") + + # Make the final PDF for easier User ingestion of waveform/map figures + self._make_evaluation_composite_pdf() + + # Move scratch/ directory results into more permanent storage + if self.export_datasets: + src = glob(os.path.join(self.path._datasets, "*.h5")) + src += glob(os.path.join(self.path._datasets, "*.csv")) # inspector + dst = os.path.join(self.path.output, "pyaflowa", "datasets", "") + unix.mkdir(dst) + unix.cp(src, dst) + + if self.export_figures: + src = glob(os.path.join(self.path._figures, "*.pdf")) + dst = os.path.join(self.path.output, "pyaflowa", "figures", "") + unix.mkdir(dst) + unix.cp(src, dst) + + if self.export_log_files: + src = glob(os.path.join(self.path._logs, "*.log")) + dst = os.path.join(self.path.output, "pyaflowa", "logs", "") + unix.mkdir(dst) + unix.cp(src, dst) + + def _check_fixed_windows(self, iteration, step_count): + """ + Determine how to address re-using misfit windows during an inversion + workflow. Throw some log messages out to let the User know whether or + not misfit windows will be re used throughout an inversion. + + True: Always fix windows except for i01s00 because we don't have any + windows for the first function evaluation + False: Don't fix windows, always choose a new set of windows + Iter: Pick windows only on the initial step count (0th) for each + iteration. WARNING - does not work well with Thrifty Inversion + because the 0th step count is usually skipped + Once: Pick new windows on the first function evaluation and then fix + windows. Useful for when parameters have changed, e.g. filter + bounds + + :type iteration: int + :param iteration: The current iteration of the SeisFlows3 workflow, + within SeisFlows3 this is defined by `optimize.iter` + :type step_count: int + :param step_count: Current line search step count within the SeisFlows3 + workflow. Within SeisFlows3 this is defined by + `optimize.line_search.step_count` + :rtype: tuple (bool, str) + :return: (bool on whether to use windows from the previous step, + and a message that can be sent to the logger) + """ + fix_windows = False + msg = "" + + # First function evaluation never fixes windows + if iteration == 1 and step_count == 0: + fix_windows = False + msg = "first evaluation of workflow, selecting new windows" + elif isinstance(self.fix_windows, str): + # By 'iter'ation only pick new windows on the first step count + if self.fix_windows.upper() == "ITER": + if step_count == 0: + fix_windows = False + msg = "first step of line search, will select new windows" + else: + fix_windows = True + msg = "mid line search, fix windows from last evaluation" + # 'Once' picks windows only for the first function evaluation of + # the current set of iterations. + elif self.fix_windows.upper() == "ONCE": + if iteration == self._start and step_count == 0: + fix_windows = False + msg = "first evaluation of workflow, selecting new windows" + else: + fix_windows = True + msg = "mid workflow, fix windows from last evaluation" + # Bool fix windows simply sets the parameter + elif isinstance(self.fix_windows, bool): + fix_windows = self.fix_windows + msg = f"fixed windows flag set constant: {self.fix_windows}" + + return fix_windows, msg + + def _config_pyatoa_logger(self, fid): + """ + Create a log file to track processing of a given source-receiver pair. + Because each station is processed asynchronously, we don't want them to + log to the main file at the same time, otherwise we get a random mixing + of log messages. Instead we have them log to temporary files, which + are combined at the end of the processing script in serial. + + :type fid: str + :param fid: full path and filename for logger that will be configured + :rtype: logging.Logger + :return: a logger which does NOT log to stdout and only logs to + the given file defined by `fid` + """ + handler = logging.FileHandler(fid, mode="w") + logfmt = "[%(asctime)s] - %(name)s - %(levelname)s: %(message)s" + formatter = logging.Formatter(logfmt, datefmt="%Y-%m-%d %H:%M:%S") + handler.setFormatter(formatter) + for log in ["pyflex", "pyadjoint", "pyatoa"]: + # Set the overall log level + logger = logging.getLogger(log) + # Turn off any existing handlers (stream and file) + while logger.hasHandlers(): + logger.removeHandler(logger.handlers[0]) + # Log to new temporary file + logger.setLevel(self.pyatoa_log_level) + logger.addHandler(handler) + + return logger + + def _collect_tmp_log_files(self, pyatoa_logger, event_id): + """ + Each source-receiver pair has made its own log file. This function + collects these files and writes their content back into the main log. + This is a lot of IO but should be okay since the files are small. + + .. note:: + This was the most foolproof method for having multiple parallel + processes write to the same file. I played around with StringIO + buffers and file locks, but they became overly complicated and + ultimately did not work how I wanted them to. This function trades + filecount and IO overhead for simplicity. + + .. warning:: + The assumption here is that the number of source-receiver pairs + is manageable (in the thousands). If we start reaching file count + limits on the cluster then this method for logging may have to be + re-thought. See link for example: + https://stackless.readthedocs.io/en/3.7-slp/howto/ + logging-cookbook.html#using-concurrent-futures-processpoolexecutor + + :type pyatoa_logger: logging.Logger + :param pyatoa_logger: The main logger for a given event, should be + defined by `pyaflowa.quantify_misfit()` + :type event_id: str + :param event_id: given event id that we are concerned with. Used to + search for matching log files in the temporary log file directory + """ + tmp_logs = sorted(glob(os.path.join(self.path._tmplogs, + f"*{event_id}_*.log"))) + with open(pyatoa_logger.handlers[0].baseFilename, "a") as fw: + for tmp_log in tmp_logs: + with open(tmp_log, "r") as fr: + fw.writelines(fr.readlines()) + unix.rm(tmp_log) # delete after writing + + def _make_event_figure_pdf(self, source_name, output_fid): + """ + Combines source-receiver output PNGS into a single event-specific PDF. + Mostly a convenience function to make it easier to ingest waveform + figures during a workflow. + + :type source_name: str + :param source_name: name of event to search for input files + :type output_fid: str + :param output_fid: full path and filename for output PDF which will be + a combination of all the PNG files created for each station + """ + # Sorrted by network and station name + input_fids = sorted(glob(os.path.join(self.path._figures, + f"{source_name}*.png"))) + if not input_fids: + logger.warning(f"Pyatoa found no event figures for {source_name} " + f"to combine") + return + # Merge all output pdfs into a single pdf, delete originals if okay + imgs_to_pdf(fids=sorted(input_fids), fid_out=output_fid) + if os.path.exists(output_fid): + for fid in input_fids: + os.remove(fid) + + def _make_evaluation_composite_pdf(self): + """ + Combines event-specific PDFs to make an evaluation-specific PDF. + By evaluation we mean any given set of foward simulations, e.g., i01s00 + + This is meant to make it easier for the User to scroll through figures. + Deletes the original event-specific PDFs to keep filecount down + """ + # Event PDFs named like: 001_i01_s00.pdf + event_pdfs = sorted(glob(os.path.join(self.path._figures, "*_*_*.pdf"))) + if not event_pdfs: + logger.warning("Pyatoa could not find event PDFs to merge") + return + # Strip off event name to get evaluation tag for fid, i.e.: i01_s00.pdf + fid_out = "_".join(os.path.basename(event_pdfs[0]).split("_")[1:]) + path_out = os.path.join(self.path._figures, f"{fid_out}") + # Merge PDFs into a single PDF, delete originals + merge_pdfs(fids=event_pdfs, fid_out=path_out) + if os.path.exists(path_out): + for event_pdf in event_pdfs: + os.remove(event_pdf) + diff --git a/seisflows/preprocess/pyatoa.py b/seisflows/preprocess/pyatoa.py deleted file mode 100644 index 3bc08553..00000000 --- a/seisflows/preprocess/pyatoa.py +++ /dev/null @@ -1,381 +0,0 @@ -#!/usr/bin/env python3 -""" -The Pyatoa preprocessing module abstracts all preprocessing functionality -onto Pyatoa (https://github.com/bch0w/pyatoa/). The module defined below is -meant to set up and execute Pyatoa within a running SeisFlows workflow. - -Pyatoa itself aggregates all of its connection with SeisFlows in the Pyaflowa -class, a purpose built object used to simplify calling Pyatoa from within -a SeisFlows workflow. -""" -import os -import sys -import logging -import numpy as np -from glob import glob - -from pyatoa import Pyaflowa, Inspector - -from seisflows.tools import unix, msg -from seisflows.config import custom_import, SeisFlowsPathsParameters, CFGPATHS - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - - -class Pyatoa(custom_import("preprocess", "base")): - """ - Data preprocessing class using the Pyaflowa class within the Pyatoa package. - In charge of data discovery, preprocessing, filtering, misfiti - quantification and data storage. The User does not need to implement Pyatoa, - but rather interacts with it via the parameters and paths of SeisFlows. - """ - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by __init__! - Attributes are just initialized as NoneTypes for clarity and docstrings - - :param logger: Class-specific logging module, log statements pushed - from this logger will be tagged by its specific module/classname - """ - pass - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters() - - # Define the Parameters required by this module - sf.par("UNIT_OUTPUT", required=True, par_type=str, - docstr="Data units. Must match the synthetic output of external " - "solver. Available: ['DISP': displacement, " - "'VEL': velocity, 'ACC': acceleration]") - - # TODO Check this against T0 in check() - sf.par("START_PAD", required=False, default=0, par_type=float, - docstr="For data gathering; time before origin time to gather. " - "START_PAD >= T_0 in SPECFEM constants.h.in. " - "Positive values only") - - # TODO set this automatically by setting equal NT * DT - sf.par("END_PAD", required=True, par_type=float, - docstr="For data gathering; time after origin time to gather. " - "END_PAD >= NT * DT (of Par_file). Positive values only") - - sf.par("MIN_PERIOD", required=False, default="", par_type=float, - docstr="Minimum filter corner in unit seconds. Bandpass filter " - "if set with `MAX_PERIOD`, highpass filter if set " - "without `MAX_PERIOD`, no filtering if not set and " - "`MAX_PERIOD also not set") - - sf.par("MAX_PERIOD", required=False, default="", par_type=float, - docstr="Maximum filter corner in unit seconds. Bandpass filter " - "if set with `MIN_PERIOD`, lowpass filter if set " - "without `MIN_PERIOD`, no filtering if not set and " - "`MIN_PERIOD also not set") - - sf.par("CORNERS", required=False, default=4, par_type=int, - docstr="Number of filter corners applied to filtering") - - sf.par("CLIENT", required=False, par_type=str, - docstr="Client name for ObsPy FDSN data gathering. Pyatoa will " - "attempt to collect waveform and metadata based on " - "network and station codes provided in the SPECFEM " - "STATIONS file. If set None, no FDSN gathering will be " - "attempted") - - sf.par("ROTATE", required=False, default=False, par_type=bool, - docstr="Attempt to rotate waveform components from NEZ -> RTZ") - - sf.par("PYFLEX_PRESET", required=False, default="default", - par_type=str, - docstr="Parameter map for misfit window configuration defined " - "by Pyflex. IF None, misfit and adjoint sources will be " - "calculated on whole traces. For available choices, " - "see Pyatoa docs page (pyatoa.rtfd.io)") - - sf.par("FIX_WINDOWS", required=False, default=False, - par_type="bool or str", - docstr="How to address misfit window evaluation at each " - "evaluation. Options to re-use misfit windows collected " - "during an inversion, available options: " - "[True, False, 'ITER', 'ONCE'] " - "True: Re-use windows after first evaluation (i01s00); " - "False: Calculate new windows each evaluation; " - "'ITER': Calculate new windows at first evaluation of " - "each iteration (e.g., i01s00... i02s00..." - "'ONCE': Calculate new windows at first evaluation of " - "the workflow, i.e., at PAR.BEGIN") - - sf.par("ADJ_SRC_TYPE", required=False, default="cc", par_type=str, - docstr="Adjoint source type to evaluate misfit, defined by " - "Pyadjoint. Currently available options: " - "['cc': cross-correlation, 'mt': multitaper, " - "wav: waveform']") - - sf.par("PLOT", required=False, default=True, par_type=bool, - docstr="Attempt to plot waveforms and maps as PDF files at each " - "function evaluation") - - sf.par("PYATOA_LOG_LEVEL", required=False, default="DEBUG", - par_type=str, - docstr="Log level to set Pyatoa, Pyflex, Pyadjoint. Available: " - "['null': no logging, 'warning': warnings only, " - "'info': task tracking, " - "'debug': log all small details (recommended)]") - - # Parameters to control saving scratch/preprocess files to work dir. - sf.par("SAVE_DATASETS", required=False, default=True, par_type=bool, - docstr="Save PyASDF HDF5 datasets to disk. These datasets store " - "waveform data, metadata, misfit windows, adjoint " - "sources and configuration parameters") - - sf.par("SAVE_FIGURES", required=False, default=True, par_type=bool, - docstr="Save output waveform figures to disk as PDFs") - - sf.par("SAVE_LOGS", required=False, default=True, par_type=bool, - docstr="Save event-specific Pyatoa logs to disk as .txt files") - - # Define the Paths required by this module - sf.path("PREPROCESS", required=False, - default=os.path.join(PATH.SCRATCH, "preprocess"), - docstr="scratch/ path to store waveform data and figures. " - "Pyatoa will generate an internal directory structure " - "here") - - sf.path("DATA", required=False, - docstr="Directory to locally stored data. Pyatoa looks for " - "waveform and metadata in the 'PATH.DATA/mseed' and " - "'PATH.DATA/seed', directories respectively.") - - return sf - - def check(self, validate=True): - """ - Checks Parameter and Path files, will be run at the start of a Seisflows - workflow to ensure that things are set appropriately. - """ - if validate: - self.required.validate() - - # Check that other modules have set parameters that will be used here - for required_parameter in ["COMPONENTS", "FORMAT"]: - assert(required_parameter in PAR), \ - f"Pyatoa requires {required_parameter}" - - assert(PAR.FORMAT.upper() == "ASCII"), \ - "Pyatoa preprocess requires PAR.FORMAT=='ASCII'" - - assert((PAR.DT * PAR.NT) <= (PAR.START_PAD + PAR.END_PAD)), \ - ("Pyatoa preprocess must have (PAR.START_PAD + PAR.END_PAD) >= " - "(PAR.DT * PAR.NT), current values will not provide sufficiently " - f"long data traces (DT*NT={PAR.DT * PAR.NT}; " - f"START+END={PAR.START_PAD + PAR.END_PAD}") - - def setup(self): - """ - Sets up data preprocessing machinery by establishing an internally - defined directory structure that will be used to store the outputs - of the preprocessing workflow - - Akin to an __init__ class, but to be called externally by the workflow. - """ - unix.mkdir(PATH.PREPROCESS) - - def prepare_eval_grad(self, cwd, source_name, taskid, **kwargs): - """ - Prepare the gradient evaluation by gathering, preprocessing waveforms, - and measuring misfit between observations and synthetics using Pyatoa. - - Reads in observed and synthetic waveforms, applies optional - preprocessing, assesses misfit, and writes out adjoint sources and - STATIONS_ADJOINT file. - - .. note:: - Meant to be called by solver.eval_func(), may have unused arguments - to keep functions general across preprocessing subclasses. - - :type cwd: str - :param cwd: current specfem working directory containing observed and - synthetic seismic data to be read and processed. Should be defined - by solver.cwd - :type source_name: str - :param source_name: the event id to be used for tagging and data lookup. - Should be defined by solver.source_name - :type taskid: int - :param taskid: identifier of the currently running solver instance. - Should be defined by solver.taskid - :type filenames: list of str - :param filenames: [not used] list of filenames defining the files in - traces - """ - if taskid == 0: - self.logger.debug("preparing files for gradient evaluation with " - "Pyaflowa") - - # Process all the stations for a given event using Pyaflowa - pyaflowa = self.setup_event_pyaflowa(source_name) - scaled_misfit = pyaflowa.process(nproc=PAR.NPROC) - - if scaled_misfit is None: - print(msg.cli(f"Event {source_name} returned no misfit, you may " - f"want to check logs and waveform figures, " - f"or consider discarding this event from your " - f"workflow", - items=[pyaflowa.paths.logs, pyaflowa.paths.figures], - header="pyatoa preprocessing error", border="=")) - sys.exit(-1) - - # Event misfit defined by Tape et al. (2010) written to solver dir. - self.write_residuals(path=cwd, scaled_misfit=scaled_misfit) - - def setup_event_pyaflowa(self, source_name=None): - """ - A convenience function to set up a Pyaflowa processing instance for - a specific event. - - .. note:: - This is meant to be called by preprocess.prepare_eval_grad() but its - also useful for debugging and manual processing where you can simply - return a formatted Pyaflowa object and debug it directly. - - :type source_name: str - :param source_name: solver source name to evaluate setup for. Must - match from list defined by: solver.source_names - """ - # Late import because preprocess is loaded before optimize, - # Optimize required to know which iteration/step_count we are at - solver = sys.modules["seisflows_solver"] - optimize = sys.modules["seisflows_optimize"] - - iteration = optimize.iter - if source_name is None: - source_name = solver.source_names[0] - - # Deal with the migration case where no step count given - try: - step_count = optimize.line_search.step_count - except AttributeError: - step_count = "" - - # Outsource data processing to an event-specfic Pyaflowa instance - pyaflowa = Pyaflowa(sfpar=PAR, sfpath=PATH) - pyaflowa.setup(source_name=source_name, iteration=iteration, - step_count=step_count, loc="*", cha="*") - - return pyaflowa - - def finalize(self): - """ - Run some serial finalization tasks specific to Pyatoa, which will help - aggregate the collection of output information. - - .. note:: - This finalize function performs the following tasks: - * Generate .csv files using the Inspector - * Aggregate event-specific PDFs into a single evaluation PDF - * Save scratch/ data into output/ if requested - """ - # Initiate Pyaflowa to get access to path structure - pyaflowa = Pyaflowa(sfpar=PAR, sfpath=PATH) - unix.cd(pyaflowa.paths.datasets) - - # Generate the Inspector from existing datasets and save to disk - # Allow this is fail, which might happen if we don't have enough data - # or the Dataset is not formatted as expected - insp = Inspector(PAR.TITLE, verbose=False) - try: - insp.discover() - insp.save() - except Exception as e: - self.logger.warning(f"Uncontrolled exception in Inspector creation " - f"will not create inspector:\n{e}") - - # Make the final PDF for easier User ingestion of waveform/map figures - pyaflowa.make_evaluation_composite_pdf() - - # Move scratch/ directory results into more permanent storage - if PAR.SAVE_DATASETS: - datasets = glob(os.path.join(pyaflowa.paths.datasets, "*.h5")) - self._save_quantity(datasets, tag="datasets") - - if PAR.SAVE_FIGURES: - figures = glob(os.path.join(pyaflowa.paths.figures, "*.pdf")) - self._save_quantity(figures, tag="figures") - - if PAR.SAVE_LOGS: - logs = glob(os.path.join(pyaflowa.paths.logs, "*.txt")) - path_out = os.path.join(PATH.WORKDIR, CFGPATHS.LOGDIR) - self._save_quantity(logs, path_out=path_out) - - def _save_quantity(self, filepaths, tag="", path_out=""): - """ - Repeatable convenience function to save quantities from the scratch/ - directory to the output/ directory - - :type filepaths: list - :param filepaths: full path to files that should be saved to output/ - :type tag: str - :param tag: tag for saving the files in PATH.OUTPUT. If not given, will - save directly into the output/ directory - :type path_out: str - :param path_out: overwrite the default output path file naming - """ - if not path_out: - path_out = os.path.join(PATH.OUTPUT, tag) - - if not os.path.exists(path_out): - unix.mkdir(path_out) - - for src in filepaths: - dst = os.path.join(path_out, os.path.basename(src)) - unix.cp(src, dst) - - def write_residuals(self, path, scaled_misfit): - """ - Computes residuals and saves them to a text file in the appropriate path - - :type path: str - :param path: scratch directory path, e.g. PATH.GRAD or PATH.FUNC - :type scaled_misfit: float - :param scaled_misfit: the summation of misfit from each - source-receiver pair calculated by prepare_eval_grad() - :type source_name: str - :param source_name: name of the source related to the misfit, used - for file naming - """ - residuals_file = os.path.join(path, "residuals") - np.savetxt(residuals_file, [scaled_misfit], fmt="%11.6e") - - def sum_residuals(self, files): - """ - Averages the event misfits and returns the total misfit. - Total misfit defined by Tape et al. (2010) - - :type files: str - :param files: list of single-column text files containing residuals - that will have been generated using prepare_eval_grad() - :rtype: float - :return: average misfit - """ - if len(files) != PAR.NTASK: - print(msg.cli(f"Pyatoa preprocessing module did not recover the " - f"correct number of residual files " - f"({len(files)}/{PAR.NTASK}). Please check that " - f"the preprocessing logs", header="error") - ) - sys.exit(-1) - - total_misfit = 0 - for filename in files: - total_misfit += np.sum(np.loadtxt(filename)) - - total_misfit /= PAR.NTASK - - return total_misfit - diff --git a/seisflows/scripts/__init__.py b/seisflows/scripts/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows/scripts/dsh b/seisflows/scripts/dsh deleted file mode 100644 index e5228915..00000000 --- a/seisflows/scripts/dsh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -hosts=$( echo $1 | tr ',' ' ' ) -exe=$2 -path=$3 -class=$4 -func=$5 -env=$6 - - -k=0; -for host in $hosts; -do - ssh $host "export SEISFLOWS_TASK_ID=$k; $exe $path $class $func $env" & - k=$((k+1)); - sleep 0.5 -done -wait - diff --git a/seisflows/scripts/examples/__init__.py b/seisflows/scripts/examples/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows/scripts/examples/ex2_specfem2d_workstation_inversion_w_pyatoa.py b/seisflows/scripts/examples/ex2_specfem2d_workstation_inversion_w_pyatoa.py deleted file mode 100644 index 7741a0dd..00000000 --- a/seisflows/scripts/examples/ex2_specfem2d_workstation_inversion_w_pyatoa.py +++ /dev/null @@ -1,167 +0,0 @@ -#!/usr/bin/env python3 -""" - SEISFLOWS SPECFEM2D WORKSTATION EXAMPLE 2 - -This example will run two iterations of an inversion to assess misfit between -a homogeneous halfspace model and a checkerboard model using 2 events and -5 receivers. - -.. note:: - See Example 1 docstring for more information - -.. rubric:: - $ seisflows examples run 2 -""" -import os -import sys -import glob -import shutil -import subprocess -import numpy as np - -from seisflows.tools import msg -from seisflows.config import Dict -from seisflows.seisflows import SeisFlows -from seisflows.tools.unix import cd, cp, rm, ln, mv, mkdir -from seisflows.scripts.examples.sfexample2d import SFExample2D - - -class SFPyatoaEx2D(SFExample2D): - """ - A class for running SeisFlows examples. Overloads Example 1 to take - advantage of the default SPECFEM2D stuff, onyl changes the generation of - MODEL TRUE, the number of stations, and the setup of the parameter file. - """ - def __init__(self, ntask=2, niter=1, nsta=5): - """ - Overload init and attempt to import Pyatoa before running example, - overload the default number of tasks to 2, and add a new init parameter - `nsta` which chooses the number of stations, between 1 and 132 - - :type ntask: int - :param ntask: number of events to use in inversion, between 1 and 25. - defaults to 3 - :type niter: int - :param niter: number of iterations to run. defaults to 2 - :type nsta: int - :param nsta: number of stations to include in inversion, between 1 and - 131 - """ - super().__init__(ntask=ntask, niter=niter) - self.nsta = nsta - # -1 because it represents index but we need to talk in terms of count - assert(1 <= self.nsta <= 131), \ - f"number of stations must be between 1 and 131, not {self.nsta}" - # Make sure that Pyatoa has been installed before running - try: - import pyatoa - except ModuleNotFoundError: - print(msg.cli("Module Pyatoa not found but is required for this " - "example. Please install Pyatoa and rerun this " - "example.", header="module not found error", - border="=") - ) - sys.exit(-1) - - def setup_specfem2d_for_model_true(self): - """ - Overwrites MODEL TRUE creation from EX1 - - Make some adjustments to the parameter file to create the final velocity - model. This function assumes it is running from inside the - SPECFEM2D/DATA directory - """ - cd(self.workdir_paths.data) - assert(os.path.exists("Par_file")), f"I cannot find the Par_file!" - - print("> EX: Updating SPECFEM2D to set checkerboard model as " - "MODEL_TRUE") - self.sf.sempar("model", "legacy") # read model_velocity.dat_checker - rm("proc000000_model_velocity.dat_input") - ln("model_velocity.dat_checker", "proc000000_model_velocity.dat_input") - - def setup_seisflows_working_directory(self): - """ - Create and set the SeisFlows parameter file, making sure all required - parameters are set correctly for this example problem - """ - cd(self.cwd) - - print("> EX2: Setting SeisFlows parameters for Pyatao preprocessing") - self.sf.setup(force=True) # Force will delete existing parameter file - self.sf.par("preprocess", "pyatoa") - self.sf.configure() - - self.sf.par("end", 1) # only 1 iteration - self.sf.par("ntask", self.ntask) # 3 sources for this example - self.sf.par("materials", "elastic") # how velocity model parameterized - self.sf.par("density", "constant") # update density or keep constant - self.sf.par("nt", 5000) # set by SPECFEM2D Par_file - self.sf.par("dt", .06) # set by SPECFEM2D Par_file - self.sf.par("f0", 0.084) # set by SOURCE file - self.sf.par("format", "ascii") # how to output synthetic seismograms - self.sf.par("case", "synthetic") # synthetic-synthetic inversion - self.sf.par("attenuation", False) - self.sf.par("components", "Y") - - # PYATOA preprocessing parameters - self.sf.par("unit_output", "DISP") - self.sf.par("min_period", 10) # filter bounds define window selection - self.sf.par("max_period", 200) - self.sf.par("start_pad", 48) # T0 set in Par_file - self.sf.par("end_pad", 5000 * .06) # nt * dt defined by Par_file - # self.sf.par("pyflex_preset", "") # To turn off windowing completely - - self.sf.par("specfem_bin", self.workdir_paths.bin) - self.sf.par("specfem_data", self.workdir_paths.data) - self.sf.par("model_init", self.workdir_paths.model_init) - self.sf.par("model_true", self.workdir_paths.model_true) - - def finalize_specfem2d_par_file(self): - """ - Final changes to the SPECFEM2D Par_file before running SeisFlows. - Par_file will be used to control all the child specfem2d directories. - Need to tell them to read models from .bin files, and to use existing - station files rather than create them from the Par_file - """ - print("> EX2: Finalizing SPECFEM2D Par_file for SeisFlows inversion") - - cd(self.workdir_paths.data) - self.sf.sempar("model", "gll") # GLL so SPECFEM reads .bin files - self.sf.sempar("use_existing_stations", ".true.") # Use STATIONS file - # Assign STATIONS_checker file which has 132 stations - rm("STATIONS") - - # Only write the first 10 lines to get 10 stations in inversion - with open("STATIONS_checker", "r") as f: - lines = f.readlines() - - print(f"> EX2: Using {self.nsta} stations in this inversion workflow") - with open("STATIONS", "w") as f: - f.writelines(lines[:self.nsta]) - - -if __name__ == "__main__": - print(msg.ascii_logo_small) - print(msg.cli( - f"This is a [SPECFEM2D] [WORKSTATION] example, which will " - f"run an inversion to assess misfit between a homogeneous halfspace " - f"and checkerboard model using Pyatoa for misfit quantification " - f"[2 events, 5 stations, 1 iterations]. The tasks involved include: ", - items=["1. (optional) Download, configure, compile SPECFEM2D", - "2. Set up a SPECFEM2D working directory", - "3. Generate starting model from Tape2007 example", - "4. Generate target model w/ perturbed starting model", - "5. Set up a SeisFlows working directory", - f"6. Run an inversion workflow. The line search is expected to " - f"attempt 4 evaluations (i01s04)"], - header="seisflows example 2", - border="=") - ) - - # Dynamically traverse sys.argv to get user-input command line. Cannot - # use argparser here because we're being called by SeisFlows CLI tool which - # is occupying argparser - if len(sys.argv) > 1: - sfex2d = SFPyatoaEx2D() - sfex2d.main() diff --git a/seisflows/scripts/run b/seisflows/scripts/run deleted file mode 120000 index e862dedf..00000000 --- a/seisflows/scripts/run +++ /dev/null @@ -1 +0,0 @@ -run_function.py \ No newline at end of file diff --git a/seisflows/scripts/run_function.py b/seisflows/scripts/run_function.py deleted file mode 100644 index 064d673e..00000000 --- a/seisflows/scripts/run_function.py +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python3 -""" -Only required when system==cluster (or any subclass of cluster) - -This script is a wrapper for running tasks on systems during an active workflow. -Acts as a Python script to submit certain SeisFlows functions or tasks to a -compute system. - -.. note:: - Not to be called by the user, this script is to be called by system.run() - -.. rubric:: - >> python run --output ./OUTPUT --classname solver \ - --funcname eval_func - OR - >> sbatch run --output ./OUTPUT --classname solver --funcname eval_func -""" -import os -import sys -import pickle -import argparse - -from seisflows.config import load, config_logger - - - -def parse_args(): - """ - Get command line arguments - """ - parser = argparse.ArgumentParser("Run arguments for system submitted tasks") - parser.add_argument("-o", "--output", type=str, nargs="?", required=True, - help="the SeisFlows output directory used to load the " - "active working state from inside the compute node" - ) - parser.add_argument("-c", "--classname", type=str, nargs="?", required=True, - help="the SeisFlows class from within which the " - "desired function is defined. Available options " - "are defined in seisflows.config.NAMES" - ) - parser.add_argument("-f", "--funcname", type=str, nargs="?", required=True, - help="the function name from the chosen `classname`. " - "This function will be executed on the compute " - "node") - parser.add_argument("-e", "--environment", type=str, nargs="?", - required=False, - help="Optional comma-separated environment variables, " - "which should be given as " - "VARNAME1=value1,VARNAME2=value2 and so on. These " - "will be separated and instantiated into Python's " - "os.environ") - - return parser.parse_args() - - -def export(myenv): - """ - Exports comma delimited list of environment variables also allows deleting - environment variables by providing VARNAME with no corresponding value - - e.g. VARNAME1=value1,VARNAME2=value2,VARNAME3 - will add VARNAME1 and VARNAME2 to the environment with corresponding values, - and remove VARNAME3 from the environment - - .. note:: - The ability to delete environment variables came from the Maui upgrade - to Slurm 21.08, which enforced mutually exclusivity of --mem-per-cpu - and --mem-per-node, which are both defined on cross-cluster submissions. - We needed a mechanism to remove one of these - - :type myenv: str - :param myenv: the system environment to take variables from - """ - for item in myenv.split(","): - try: - key, val = item.split("=") - os.environ[key] = val - # Variables to be deleted will not split on '=', throwing the ValueError - except ValueError: - del os.environ[item] - - -if __name__ == '__main__': - """ - Runs task within a currently executing workflow - """ - args = parse_args() - - if args.environment: - export(args.environment) - - # Load the last checkpointed working state from the 'seisflows_?.p` files - # Allowing access through sys.modules - load(args.output) - - # Load keyword arguments required by this function - # Files will be something like: 'solver_eval_func.p' - kwargs_fid = f"{args.classname}_{args.funcname}.p" - kwargs_path = os.path.join(args.output, "kwargs", kwargs_fid) - with open(kwargs_path, "rb") as f: - kwargs = pickle.load(f) - - # Load in some of the working state from sys.modules - PAR = sys.modules["seisflows_parameters"] - PATH = sys.modules["seisflows_paths"] - system = sys.modules["seisflows_system"] - - # Configure the CPU-dependent logger which will log to stdout only - # But mainsolver will log to the main log file as well - if system.taskid == 0: - filename = PATH.LOGFILE - else: - filename = None - config_logger(level=PAR.LOG_LEVEL, verbose=PAR.VERBOSE, filename=filename) - - # Get the actual function so we can evaluate it - func = getattr(sys.modules[f"seisflows_{args.classname}"], args.funcname) - - # Evaluate the function with given keyword arguments - func(**kwargs) - - diff --git a/seisflows/scripts/submit_workflow.py b/seisflows/scripts/submit_workflow.py deleted file mode 100644 index 802ac22e..00000000 --- a/seisflows/scripts/submit_workflow.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python3 -""" -Only required when system==cluster (or any subclass of cluster) - -This script is executes a MASTER job through job scheduler -(e.g., PBS, LSF, or SLURM) by running workflow.main() on the compute system. - -.. note:: - Not to be called by the user. This is called when the user runs - `seisflows submit` or `seisflows resume`. Internally this script is meant to - be called by system.submit(). - -.. rubric:: - >> python submit --output ./OUTPUT - OR - >> sbatch submit --output ./OUTPUT -""" -import sys -import argparse - -from seisflows.tools import unix -from seisflows.config import load, config_logger - - -def parse_args(): - """ - Get command line arguments required for the submit script - """ - parser = argparse.ArgumentParser("Run arguments for system submitted tasks") - parser.add_argument("-o", "--output", type=str, nargs="?", required=True, - help="the SeisFlows output directory used to load the " - "active working state from inside the compute node" - ) - - return parser.parse_args() - - -if __name__ == '__main__': - """ - Submit workflow.main() as a MASTER JOB on the compute system - """ - args = parse_args() - - # Load the currently active working state - unix.cd(args.output) - load(args.output) - - # Ensure that the two main modules are loaded - workflow = sys.modules["seisflows_workflow"] - system = sys.modules["seisflows_system"] - - # Set up logging on the compute system to print to stdout only - PAR = sys.modules["seisflows_parameters"] - PATH = sys.modules["seisflows_paths"] - config_logger(level=PAR.LOG_LEVEL, verbose=PAR.VERBOSE) - - # Execute MASTER JOB as workflow.main() - workflow.main() - diff --git a/seisflows/seisflows.py b/seisflows/seisflows.py index 3ead0c87..a2fa2cba 100755 --- a/seisflows/seisflows.py +++ b/seisflows/seisflows.py @@ -12,28 +12,19 @@ - Write a new function within the SeisFlows class - Add a new subparser with optional arguments to sfparser() - Add subparser to subparser dict at the end of sfparser() + In-function import statements are used to reduce call-time for simpler fx's """ import os import sys -import pickle -import inspect -import logging -import warnings import argparse -import traceback -import subprocess from glob import glob -from copy import copy -from IPython import embed - -from seisflows import logger +from inspect import getmro +from seisflows import logger, ROOT_DIR, NAMES from seisflows.tools import unix, msg +from seisflows.tools.config import load_yaml, custom_import, import_seisflows from seisflows.tools.specfem import (getpar, setpar, getpar_vel_model, - setpar_vel_model) -from seisflows.tools.wrappers import loadyaml -from seisflows.config import (init_seisflows, format_paths, config_logger, - Dict, custom_import, SeisFlowsPathsParameters, - NAMES, PACKAGES, ROOT_DIR, CFGPATHS) + setpar_vel_model) + def sfparser(): @@ -78,8 +69,8 @@ def _format_action(self, action): parser.add_argument("-w", "--workdir", nargs="?", default=os.getcwd(), help="The SeisFlows working directory, default: cwd") parser.add_argument("-p", "--parameter_file", nargs="?", - default=CFGPATHS.PAR_FILE, - help=f"Parameters file, default: '{CFGPATHS.PAR_FILE}'") + default="parameters.yaml", + help=f"Parameters file, default: 'parameters.yaml'") # Initiate a sub parser to provide nested help functions and sub commands subparser = parser.add_subparsers( @@ -99,8 +90,6 @@ def _format_action(self, action): directory, a prompt will appear asking the user if they want to overwrite.""" ) - setup.add_argument("-s", "--symlink", action="store_true", - help="symlink source code into the working directory") setup.add_argument("-f", "--force", action="store_true", help="automatically overwrites existing parameter file") # ========================================================================= @@ -115,20 +104,20 @@ def _format_action(self, action): marked appropriately. Required parameters must be set before a workflow can be submitted.""" ) - configure.add_argument("-r", "--relative_paths", action="store_true", + configure.add_argument("-a", "--absolute_paths", action="store_true", help="Set default paths relative to cwd") # ========================================================================= - init = subparser.add_parser( - "init", help="Initiate working environment", - description="""Establish a SeisFlows working environment but don't - submit the workflow to the system and do not perform variable error - checking. Saves the initial state as pickle files to allow for active - environment inspection prior to running 'submit'. Useful for debugging, - development and code exploration.""" + swap = subparser.add_parser( + "swap", help="Swap module parameters in an existing parameter file", + description="""During workflow development, it may be necessary to swap + between different sub-modules (e.g., system.workstation -> + system.cluster). However this would typically involving re-generating + and re-filling a parameter file. The 'swap' function makes it easier + to swap parameters between modules. + """ ) - # init.add_argument("-c", "--check", action="store_true", - # help="Perform parameter and path checking to ensure that " - # "user-defined parameters are accepatable") + swap.add_argument("module", nargs="?", help="Module name to swap") + swap.add_argument("classname", nargs="?", help="Classname to swap to") # ========================================================================= submit = subparser.add_parser( "submit", help="Submit initial workflow to system", @@ -139,8 +128,6 @@ def _format_action(self, action): error checking, and establish the active working environment before executing the workflow.""" ) - submit.add_argument("-f", "--force", action="store_true", - help="Turn off the default parameter precheck") submit.add_argument("-s", "--stop_after", default=None, type=str, help="Optional override of the 'STOP_AFTER' parameter") # ========================================================================= @@ -150,8 +137,6 @@ def _format_action(self, action): an active environment exists in the working directory, and must be submitted to the system again.""" ) - resume.add_argument("-f", "--force", action="store_true", - help="Turn off the default parameter precheck") resume.add_argument("-r", "--resume_from", default=None, type=str, help="Optional override of the 'RESUME_FROM' parameter") resume.add_argument("-s", "--stop_after", default=None, type=str, @@ -164,14 +149,14 @@ def _format_action(self, action): fresh workflow.""" ) restart.add_argument("-f", "--force", action="store_true", - help="Skip the clean and submit precheck statements") + help="Skip the clean warning check statement") # ========================================================================= clean = subparser.add_parser( "clean", help="Remove files relating to an active working environment", description="""Delete all SeisFlows related files in the working directory, except for the parameter file.""" ) - clean.add_argument("-f", "--force", action="store_true", + clean.add_argument("-f", "--force", action="store_true", help="Skip the warning check that precedes the clean " "function") # ========================================================================= @@ -192,11 +177,6 @@ def _format_action(self, action): par.add_argument("-p", "--skip_print", action="store_true", default=False, help="Skip the print statement which is typically " "sent to stdout after changing parameters.") - par.add_argument("-r", "--required", action="store_true", default=False, - help="Only list parameters which have not been set as a " - "default value, typically set with some attention " - "catching argument. 'parameter' and 'value' will be " - "ignored.") # ========================================================================= sempar = subparser.add_parser( "sempar", help="View and edit SPECFEM parameter file", @@ -219,21 +199,49 @@ def _format_action(self, action): # ========================================================================= check = subparser.add_parser( "check", formatter_class=argparse.RawDescriptionHelpFormatter, - description=""" -Check parameters, state, or values of an active environment - - model check the min/max values of currently active models tracked by - optimize. 'seisflows check model [name]' to check specific model. - iter Check current interation and step count of workflow - src List source names and respective internal indices - isrc Check source name for corresponding index - """, - help="Check state of an active environment") - - check.add_argument("choice", type=str, nargs="?", - help="Parameter, state, or value to check") - check.add_argument("args", type=str, nargs="*", - help="Generic arguments passed to check functions") + description="Run check functions to ensure that the provided parameter " + "file has been set correctly" + ) + # ========================================================================= + init = subparser.add_parser( + "init", formatter_class=argparse.RawDescriptionHelpFormatter, + description="Run check and setup functions to generate a SeisFlows " + "working directory") + # ========================================================================= + plot2d = subparser.add_parser( + "plot2d", formatter_class=argparse.RawDescriptionHelpFormatter, + description="""Plots model/kernels/gradient files located in the output/ + directory. ONLY available for SPECFEM2D models.""", + help="Plot 2D figures of models/kernels/gradients.") + + plot2d.add_argument("name", type=str, nargs="?", + help="Name of directory in the output/ directory") + plot2d.add_argument("parameter", type=str, nargs="?", + help="Name of parameter to plot from `name`. E.g., 'vs', " + "'vp' etc.") + plot2d.add_argument("-c", "--cmap", type=str, nargs="?", + help="colormap to be passed to PyPlot") + plot2d.add_argument("-s", "--savefig", type=str, nargs="?", default=None, + help="optional name and path to save figure") + # ========================================================================= + plotst = subparser.add_parser( + "plotst", formatter_class=argparse.RawDescriptionHelpFormatter, + description="""Plots waveforms output by the solver. Uses ObsPy's +Stream.plot() function under the hood. Example call would be +`seisflows plotst scratch/solver/mainsolver/traces/syn/*` + """) + + plotst.add_argument("fids", type=str, nargs="*", + help="File IDs to be passed to plotting. Wildcards " + "acceptable") + plotst.add_argument("--data_format", type=str, nargs="?", default="ASCII", + help="Data format of the files. Must match file type " + "that SeisFlows can read. These include:" + "['SU', 'ASCII']. Defaults to 'ASCII'. See " + "SeisFlows.preprocess.default.read() for " + "all options.") + plotst.add_argument("-s", "--savefig", type=str, nargs="?", default=None, + help="optional name and path to save figure") # ========================================================================= print_ = subparser.add_parser( "print", formatter_class=argparse.RawDescriptionHelpFormatter, @@ -254,8 +262,6 @@ def _format_action(self, action): print_.add_argument("args", type=str, nargs="*", help="Generic arguments passed to check functions") # ========================================================================= - subparser.add_parser("convert", help="Convert model file format", ) - # ========================================================================= reset = subparser.add_parser( "reset", formatter_class=argparse.RawDescriptionHelpFormatter, help="Reset modules within an active state", description=""" @@ -267,7 +273,7 @@ def _format_action(self, action): reset.add_argument("choice", type=str, nargs="?", default=None, help="Choice of module/component to reset") reset.add_argument("args", type=str, nargs="*", - help="Generic arguments passed to reset functions") + help="Generic arguments passed to reset functions") # ========================================================================= subparser.add_parser( "debug", help="Start interactive debug environment", @@ -280,24 +286,6 @@ def _format_action(self, action): made during debugging. """) # ========================================================================= - edit = subparser.add_parser( - "edit", help="Open source code file in text editor", - description="""Directly edit source code files in your favorite - terminal text editor. Simply a shortcut to avoid having to root around - in the repository. Any saved edits will directly affect the SeisFlows - source code and any code errors may lead to failure of the package; - e.g. 'seisflows edit solver base'""" - ) - edit.add_argument("name", type=str, nargs="?", default=None, - help="Name of module to search for source file in") - edit.add_argument("module", type=str, nargs="?", default=None, - help="Name of specific module file to open, extension " - "not required") - edit.add_argument("-e", "--editor", type=str, nargs="?", default=None, - help="Chosen text editor, defaults to $EDITOR env var") - edit.add_argument("-d", "--dont_open", action="store_true", - help="Dont open the text editor, just list full pathname") - # ========================================================================= examples = subparser.add_parser( "examples", help="Look at and run pre-configured example problems", description="""Lists out available example problems and allows the @@ -306,16 +294,65 @@ def _format_action(self, action): numerical solver """ ) - examples.add_argument("run", type=str, nargs="?", default=None, - help="Run your choice of example problem") - examples.add_argument("choice", type=str, nargs="?", default=None, - help="Name of the specific example problem to run") + examples.add_argument("method", type=str, nargs="?", default=None, + help="Method for running the example problem. If not" + "provided, simply prints out the list of " + "available example problems. If given as an " + "integer value, will print out the help message " + "for the given example. If 'run', will run the " + "example. If 'setup' will simply setup the " + "example working directory but will not execute " + "`seisflows submit`") + examples.add_argument("choice", type=int, nargs="?", default=None, + help="If `method` in ['setup', 'run'], integer" + "value corresponding to the given example " + "problem which can listed using `seisflows " + "examples`") + examples.add_argument("-r", "--specfem2d_repo", type=str, nargs="?", + default=None, + help="path to the SPECFEM2D directory which should " + "contain binary executables. If not given, " + "assumes directory is called 'specfem2d/' in " + "the current working directory. If that dir " + "is not found, SPECFEM2D will be downloaded, " + "configured and compiled automatically in the " + "current working directory.") + examples.add_argument("--nsta", type=int, nargs="?", default=None, + help="User-defined number of stations to use for " + "the example problem (1 <= NSTA <= 131). If " + "not given, each example has its own default.") + examples.add_argument("--ntask", type=int, nargs="?", default=None, + help="User-defined number of events to use for " + "the example problem (1 <= NTASK <= 25). If " + "not given, each example has its own default.") + examples.add_argument("--niter", type=int, nargs="?", default=None, + help="User-defined number of iterations to run for " + "the example problem (1 <= NITER <= inf). If " + "not given, each example has its own default.") + examples.add_argument("--event_id", type=int, nargs="?", default=None, + help="Allow User to choose a specific event ID from " + "the Tape 2007 example (1 <= EVENT_ID <= 25). " + "If not used, example will default to choosing " + "sequential from 1 to NTASK") + examples.add_argument("--with_mpi", action="store_true", default=False, + help="Run Solver with MPI using MPI exectuable " + "`mpiexec` (defaults to 'mpirun'). Defaults to " + "False, in which case executables are run " + "in serial") + examples.add_argument("--mpiexec", type=str, nargs="?", default="mpirun", + help="Only for Example(s) 4. MPI executable to use " + "when running SPECFEM2D with MPI. Defaults to " + "'mpirun'") + examples.add_argument("--nproc", type=int, nargs="?", default=None, + help="Number of processors to use for MPI runs. " + "Default values chosen for each example problem." + ) # ========================================================================= # Defines all arguments/functions that expect a sub-argument - subparser_dict = {"check": check, "par": par, "inspect": inspect, - "edit": edit, "sempar": sempar, "clean": clean, + subparser_dict = {"check": check, "par": par, + "sempar": sempar, "clean": clean, "plot2d": plot2d, "restart": restart, "print": print_, "reset": reset, - "examples": examples} + "examples": examples, "swap": swap} if parser.parse_args().command in subparser_dict: return parser, subparser_dict[parser.parse_args().command] else: @@ -339,18 +376,32 @@ class SeisFlows: any checks we must load the entire SeisFlows environment, which is slow but provides the most flexibility when accessing internal information """ - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): + def __init__(self, workdir=None, parameter_file=None): """ Parse user-defined arguments and establish internal parameters used to control which functions execute and how. Instance must be called to execute internal functions + + .. note:: + Normally the `workdir` and `parameter_file` paramters should be + set through the argparser (i.e., command line) but we allow + it to be set in a Python environment through __init__ incase there + is no access to the argparser through the command line (e.g., when + testing functionality using pytest) + + :type workdir: str + :param workdir: the working directory to initiate a SeisFlows workflow. + :type parameter_file: str + :param parameter_file: full path to the parameter file """ self._parser, self._subparser = sfparser() self._paths = None self._parameters = None self._args = self._parser.parse_args() + if workdir is not None: + self._args.workdir = workdir + if parameter_file is not None: + self._args.parameter_file = parameter_file def __call__(self, command=None, **kwargs): """ @@ -406,128 +457,19 @@ def _public_methods(self): """ return [_ for _ in dir(self) if not _.startswith("_")] - def _register(self, force=True): + def setup(self, force=False, **kwargs): """ - Load the paths and parameters from file into sys.modules, set the - default parameters if they are missing from the file, and expand all - paths to absolute pathnames. Also configure the logger. + Initiate a SeisFlows working directory from scratch by establishing a + template parameter file. .. note:: - This is ideally the FIRST thing that happens everytime SeisFlows - is initiated. The package cannot do anything without the resulting - PATH and PARAMETER variables. + Future working directory setup functions can be placed here - :type force: bool - :param force: if False, print out a few key parameters and require - user-input before allowing workflow to be submitted. This is - usually run before submit and resume, to prevent job submission - without user evaluation. - """ - # Check if the filepaths exist - if not os.path.exists(self._args.parameter_file): - print(msg.cli(f"SeisFlows parameter file not found: " - f"'{self._args.parameter_file}'. Run 'seisflows " - f"setup' to create a new parameter file.") - ) - sys.exit(-1) - - # Register parameters from the parameter file - try: - parameters = loadyaml(self._args.parameter_file) - except Exception as e: - print(msg.cli(f"Please check that your parameter file is properly " - f"formatted in the YAML format. If you have just run " - f"'seisflows configure', you may have some required " - f"parameters that will need to be filled out before " - f"you can proceed. The error message is:", - items=[str(e)], header="parameter file read error", - border="=")) - sys.exit(-1) - - # Distribute the paths and parameters internally and separately - # If we are running seisflows configure, paths will be empty - try: - paths = parameters.pop("PATHS") - except KeyError: - paths = {} - - # WORKDIR needs to be set here as it's expected by most modules - if "WORKDIR" not in paths: - paths["WORKDIR"] = self._args.workdir - - # Parameter file is set here as well so that it can be user-defined - if "PAR_FILE" not in paths: - paths["PAR_FILE"] = self._args.parameter_file - - # For submit() and resume(), provide a dialogue to stdout requiring a - # visual pre-check of parameters before submitting workflow - if not force and parameters["PRECHECK"]: - items = [] - for p in parameters["PRECHECK"]: - try: - items.append(f"{p.upper()}: {parameters[p.upper()]}") - except KeyError: - items.append(f"{p.upper()}: !!! PARAMETER NOT FOUND !!!") - print(msg.cli("Please ensure that the parameters listed below " - "are set correctly. You can edit this list with " - "the PRECHECK parameter.", items=items, - header="seisflows precheck", border="=")) - check = input("Continue? (y/[n])\n") - if check != "y": - sys.exit(-1) - - # Expand all paths to be absolute on the filesystem - paths = format_paths(paths) - - # Register parameters to sys, ensure they meet standards of the package - sys.modules["seisflows_parameters"] = Dict(parameters) - sys.modules["seisflows_paths"] = Dict(paths) - self._paths = paths - self._parameters = parameters - - def _load_modules(self): - """ - A function to load and check each of the SeisFlows modules, - re-initiating the SeisFlows environment. All modules are reliant on one - another so any access to SeisFlows requires loading everything - simultaneously and in correct order - """ - # Working directory should already have been created by submit() - unix.cd(self._args.workdir) - - # Reload objects from Pickle files - for NAME in NAMES: - fullfile = os.path.join(self._args.workdir, CFGPATHS.OUTPUTDIR, - f"seisflows_{NAME}.p") - - if not os.path.exists(fullfile): - print(msg.cli("Not a SeisFlows working directory (no state " - "files found). Run 'seisflows init' or " - "'seisflows submit' to instantiate a working " - "directory.") - ) - sys.exit(-1) - with open(fullfile, "rb") as f: - sys.modules[f"seisflows_{NAME}"] = pickle.load(f) - - # Check parameters so that default values are present - for NAME in NAMES: - sys.modules[f"seisflows_{NAME}"].check() - - def setup(self, symlink=False, force=False, **kwargs): - """ - Initiate a SeisFlows working directory from scratch; establish a - template parameter file and symlink the source code for easy access - - :type symlink: bool - :param symlink: flag to turn on source code symlinking :type force: bool :param force: flag to force parameter file overwriting """ - PAR_FILE = os.path.join(ROOT_DIR, "templates", "parameters.yaml") - REPO_DIR = os.path.abspath(os.path.join(ROOT_DIR, "..")) - - if os.path.exists(self._args.parameter_file): + par_file = os.path.join(self._args.workdir, self._args.parameter_file) + if os.path.exists(par_file): if force: check = "y" else: @@ -536,49 +478,67 @@ def setup(self, symlink=False, force=False, **kwargs): f"({self._args.parameter_file}) found. Do you " f"wish to overwrite with a blank file? (y/[n])" )) - - if check == "y": - unix.rm(self._args.parameter_file) - else: + if check != "y": sys.exit(0) - unix.cp(PAR_FILE, self._args.workdir) - print(msg.cli(f"creating parameter file: {self._args.parameter_file}")) - # Symlink the source code for easy access to repo - if symlink: - src_code = os.path.join(self._args.workdir, "source_code") - if not os.path.exists(src_code): - unix.mkdir(src_code) - for package in PACKAGES: - unix.ln(os.path.join(REPO_DIR, package), src_code) - - def configure(self, relative_paths=False, **kwargs): + with open(par_file, "w") as f: + f.write(msg.base_parameter_file) + print(msg.cli(f"created parameter file: {self._args.parameter_file}")) + + def configure(self, absolute_paths=False, **kwargs): """ Dynamically generate the parameter file by writing out docstrings and default values for each of the SeisFlows module parameters. This function writes files manually, consistent with the .yaml format. - :type relative_paths: bool - :param relative_paths: if True, expand pathnames to absolute paths, + .. note:: + This function relies on docstrings being formatted the same way + throughout the package. Note the trailing '***' character at the end + of the docstring. This is required for `configure` to know where one + docstring ends and another beings. The formatting looks like: + + Title + ----- + some description + + Parameters + ---------- + :type a: int + :param a: parameter a + + Paths + ----- + :type path_a: str + :param path_a: path for a + *** + + :type absolute_paths: bool + :param absolute_paths: if True, expand pathnames to absolute paths, else if False, use path names relative to the working directory. + Defaults to False, uses relative paths. """ - print(msg.cli(f"filling {self._args.parameter_file} w/ default values")) - self._register(force=True) + from traceback import format_exc - # Check if the User set turn off any modules (if None, dont instantiate) - names = copy(NAMES) - for name, choice in self._parameters.items(): - if choice is None: - names.remove(name.lower()) + print("configuring SeisFlows parameter file") - # Need to attempt importing all modules before we access their par/paths - for NAME in NAMES: - sys.modules[f"seisflows_{NAME}"] = custom_import(NAME)() + def split_module_docstring(mod, idx): + """ + Since our docstrings are concatenated, we need to break them + and remove the path docstrings, those come later. - # System defines foundational directory structure required by other - # modules. Don't validate the parameters because they aren't yet set - sys.modules["seisflows_system"].required.validate(paths=True, - parameters=False) + :type idx: int + :param idx: 0 returns parameter docstrings, 1 returns path docstring + """ + docstring = mod.__doc__.replace("\n", "\n#") + docssplit = docstring.split("***\n#") + docfinal = "".join([_.split("Paths\n# -----\n#")[idx] for _ in + docssplit]) + return docfinal + + # Load in a barebones parameter file and instantiate specific classes + parameters = load_yaml(os.path.join(self._args.workdir, + self._args.parameter_file)) + modules = [custom_import(name, parameters[name])() for name in NAMES] # If writing to parameter file fails for any reason, the file will be # mangled, create a temporary copy that can be re-instated upon failure @@ -586,128 +546,171 @@ def configure(self, relative_paths=False, **kwargs): unix.cp(self._args.parameter_file, temp_par_file) try: - # Paths are collected for each but written at the end - seisflows_paths = {} - with open(self._args.parameter_file, "a") as f: - for name in names: - req = sys.modules[f"seisflows_{name}"].required - seisflows_paths.update(req.paths) - - # Write the docstring header and then the parameters in YAML - msg.write_par_file_header(f, req.parameters, name) - msg.write_par_file_paths_pars(f, req.parameters) - - # Write the paths in the same format as parameters - msg.write_par_file_header(f, seisflows_paths, name="PATHS") - f.write("PATHS:\n") - - if relative_paths: - # If requested, set the paths relative to the current dir - for key, attrs in seisflows_paths.items(): - if attrs["default"] is not None: - seisflows_paths[key]["default"] = os.path.relpath( - attrs["default"]) - msg.write_par_file_paths_pars(f, seisflows_paths, indent=4) - # General error catch as anything can happen here - except Exception as e: + written, path_docstrings = [], [] + f = open(self._args.parameter_file, "a") + # Write all module parameters and corresponding docstrings + for module in modules: + if not module: + continue + docstring = split_module_docstring(module, 0) + f.write(f"# {'=' * 77}\n#{docstring}\n# {'=' * 77}\n") + # Write the parameters, make sure to not have the same one twice + for key, val in vars(module).items(): + # Skip already written, hidden vars, and paths + if (key in written) or key.startswith("_") or key == "path": + continue + # YAML wants NoneType to be 'null' + if val is None: + val = "null" + f.write(f"{key}: {val}\n") + written.append(key) + + # Write docstrings for publically accesible path structure + f.write(f"# {'=' * 77}\n") + f.write("#\n") + f.write("#\t Paths\n") + f.write("#\t -----\n") + for module in modules: + if not module: + continue + docstring = split_module_docstring(module, -1) + f.write(f"#{docstring}\n") + f.write(f"# {'=' * 77}\n") + + # Write values for publically accessible path structure + written = [] + for module in modules: + if not module: + continue + for key, val in module.path.items(): + # '_key' means hidden path so don't include in par file + if key in written or key.startswith("_"): + continue + if val is None: + val = "null" + if absolute_paths: + val = os.path.abspath(val) + f.write(f"path_{key}: {val}\n") + written.append(key) + except Exception: unix.rm(self._args.parameter_file) unix.cp(temp_par_file, self._args.parameter_file) - print(msg.cli(text="seisflows configure traceback", header="error")) - print(traceback.format_exc()) - sys.exit(-1) + logger.critical( + msg.cli(text="seisflows configure traceback", header="error") + ) + print(format_exc()) + raise else: unix.rm(temp_par_file) - def init(self, **kwargs): + f.close() + + def swap(self, module, classname, **kwargs): """ - Establish a SeisFlows working environment on disk. Instantiates a - working state in memory (sys.modules) and then writes this state as \ - pickle files to the OUTPUT directory for User inspection and debug - purposes. + Swap the parameters of an existing parameter file with a new module. + Useful for changing out parameters without having to re-make a + parameter file from scratch. e.g., to swap systems from a workstation + to a cluster + + TODO figure out how to match paths too + + .. rubric:: + $ seisflows swap system slurm """ - self._register(force=True) + if module not in NAMES: + print(msg.cli(text=f"{module} does not match {NAMES}", + header="error")) + sys.exit(-1) + + # Load in old parameter file and then move it to a hidden file + ogpars = load_yaml(self._args.parameter_file) + unix.mv(self._args.parameter_file, f"_{self._args.parameter_file}") + try: + # Create a new parameter file with updated module + self.setup(force=True) + for name in NAMES: + setpar(key=name, val=ogpars[name], + file=self._args.parameter_file, delim=":") + + # Overwrite with new parameters + setpar(key=module, val=classname, file=self._args.parameter_file, + delim=":") + self.configure() + + ogpars.pop(module) # don't edit the parameter were changing + for key, val in ogpars.items(): + if val is None: + val = "null" + try: + setpar(key=key, val=val, file=self._args.parameter_file, + delim=":") + except KeyError: + continue + # Replace parameter file if any errors happen + except Exception as e: + unix.mv(f"_{self._args.parameter_file}", self._args.parameter_file) + raise(e) + finally: + unix.rm(f"_{self._args.parameter_file}") + def check(self, **kwargs): + """ + Run check() functions for a given parameter file and each of the + SeisFlows modules, ensuring that parameters are acceptable for the + given set of user-defined parameters + """ unix.mkdir(self._args.workdir) unix.cd(self._args.workdir) - init_seisflows() - - workflow = sys.modules["seisflows_workflow"] - workflow.checkpoint() + workflow = import_seisflows(workdir=self._args.workdir, + parameter_file=self._args.parameter_file) + try: + workflow.check() + except AssertionError as e: + print(msg.cli(str(e), border="=", header="parameter errror")) - # Ensure that all parameters and paths that need to be instantiated - # are present in sys modules - for NAME in NAMES: - sys.modules[f"seisflows_{NAME}"].required.validate() + def init(self, **kwargs): + """ + Run check() + setup() functions for a given parameter file and each of + the SeisFlows modules, ensuring that parameters are acceptable for the + given set of user-defined parameters and running setup procedure + which may create directories and perform some file management. + """ + unix.mkdir(self._args.workdir) + unix.cd(self._args.workdir) - print(msg.cli(f"instantiating SeisFlows working state in directory: " - f"{CFGPATHS.OUTPUTDIR}")) + workflow = import_seisflows(workdir=self._args.workdir, + parameter_file=self._args.parameter_file) + try: + workflow.check() + workflow.setup() + except AssertionError as e: + print(msg.cli(str(e), border="=", header="parameter errror")) - def submit(self, stop_after=None, force=False, **kwargs): + def submit(self, **kwargs): """ Main SeisFlows execution command. Submit the SeisFlows workflow to the chosen system, and execute seisflows.workflow.main(). Will create the working directory and any required paths and ensure that all required paths exist. - - :type stop_after: str - :param stop_after: allow the function to overwrite the 'STOP_AFTER' - parameter in the parameter file, which dictates how far the workflow - will proceed until stopping. Must match flow function names in - workflow.main() - :type force: bool - :param force: if True, turns off the parameter precheck and - simply submits the workflow """ - # Ensure that the 'RESUME_FROM' parameter is not set, incase of restart - self.par(parameter="resume_from", value="", skip_print=True) - - if stop_after is not None: - self.par(parameter="stop_after", value=stop_after, skip_print=True) - - self._register(force=force) - - # A list of paths that need to exist if provided by user - # !!! TODO Move this required paths somewhere more visible? config? - # !!! TODO or is it even necessary? - REQ_PATHS = ["SPECFEM_BIN", "SPECFEM_DATA", "MODEL_INIT", "MODEL_TRUE", - "DATA", "LOCAL", "MASK"] - - # Check that all required paths exist before submitting workflow - paths_dont_exist = [] - for key in REQ_PATHS: - if key in self._paths: - # If a required path is given (not None) and doesnt exist, exit - if self._paths[key] and not os.path.exists(self._paths[key]): - paths_dont_exist.append(f"{key}: {self._paths[key]}") - if paths_dont_exist: - print(msg.cli("The following paths do not exist but need to:", - items=paths_dont_exist, header="path error", - border="=")) - sys.exit(-1) - unix.mkdir(self._args.workdir) unix.cd(self._args.workdir) - # Set logger to print to stdout and write to a file - PATH = sys.modules["seisflows_paths"] - PAR = sys.modules["seisflows_parameters"] - config_logger(level=PAR.LOG_LEVEL, verbose=PAR.VERBOSE, - filename=PATH.LOGFILE) - - # Submit workflow.main() to the system - init_seisflows() - system = sys.modules["seisflows_system"] - system.submit() + parameters = load_yaml(self._args.parameter_file) + system = custom_import("system", parameters.system)(**parameters) + system.submit(workdir=self._args.workdir, + parameter_file=self._args.parameter_file) def clean(self, force=False, **kwargs): """ Clean the SeisFlows working directory except for the parameter file. :type force: bool - :param force: ignore the warning check that precedes the clean() + :param force: ignore the warning check that precedes the clean() function, useful if you don't want any input messages popping up """ + # Check if the filepaths exist if not os.path.exists(self._args.parameter_file): print(msg.cli(f"SeisFlows parameter file not found: " @@ -725,69 +728,19 @@ def clean(self, force=False, **kwargs): "(y/[n])", header="clean", border="=")) if check == "y": - # CFGPATHS defines the outermost directory structure of SeisFlows - # We safeguard below against deleting the parameter file - items = [] - for fid_ in CFGPATHS.values(): - for fid in glob(os.path.join(self._args.workdir, fid_)): - # Safeguards against deleting files that should not be dltd - try: - assert("yaml" not in fid) - assert(not os.path.islink(fid)) - unix.rm(fid) - items.append(f"- deleting file/folder: {fid}") - except AssertionError: - items.append(f"+ skipping over: {fid}") - continue - print(msg.cli(items=items, header="clean", border="=")) - - def resume(self, stop_after=None, resume_from=None, force=False, - **kwargs): - """ - Resume a previously started workflow by loading the module pickle files - and submitting the workflow from where it left off. - :type stop_after: str - :param stop_after: allow the function to overwrite the 'STOP_AFTER' - parameter in the parameter file, which dictates how far the workflow - will proceed until stopping. Must match flow function names in - workflow.main() - :type resume_from: str - :param resume_from: allow the function to overwrite the 'RESUME_FROM' - parameter in the parameter file, which dictates which function the - workflow starts from, must match the flow functions given in - workflow.main() - :type force: bool - :param force: if True, turns off the parameter precheck and - simply submits the workflow - """ - if stop_after is not None: - self.par(parameter="STOP_AFTER", value=stop_after, skip_print=True) - if resume_from is not None: - self.par(parameter="RESUME_FROM", value=resume_from, - skip_print=True) - - self._register(force=force) - self._load_modules() - - # Set logger to print to stdout and write to a file - PATH = sys.modules["seisflows_paths"] - PAR = sys.modules["seisflows_parameters"] - config_logger(level=PAR.LOG_LEVEL, verbose=PAR.VERBOSE, - filename=PATH.LOGFILE) - - system = sys.modules["seisflows_system"] - system.submit() + pars = load_yaml(self._args.parameter_file) + for name in ["scratch", "output", "log_files", "state_file", + "output_log"]: + path = f"path_{name}" + if path in pars: + unix.rm(pars[path]) def restart(self, force=False, **kwargs): """ Restart simply means clean the workding dir and submit a new workflow. - - :type force: bool - :param force: ignore the warning check that precedes the clean() - function, useful if you don't want any input messages popping up """ self.clean(force=force) - self.submit(force=force) + self.submit() def debug(self, **kwargs): """ @@ -796,18 +749,18 @@ def debug(self, **kwargs): interactive environment allowing exploration of the package space. Does not allow stepping through of code (not a breakpoint). """ - self._register(force=True) - self._load_modules() - - # Distribute modules to common names for easy access during debug mode - PATH = sys.modules["seisflows_paths"] - PAR = sys.modules["seisflows_parameters"] - system = sys.modules["seisflows_system"] - preprocess = sys.modules["seisflows_preprocess"] - solver = sys.modules["seisflows_solver"] - postprocess = sys.modules["seisflows_postprocess"] - optimize = sys.modules["seisflows_optimize"] - workflow = sys.modules["seisflows_workflow"] + from IPython import embed + + workflow = import_seisflows(workdir=self._args.workdir, + parameter_file=self._args.parameter_file) + + # Break out sub-modules and parameters so they're more easily accesible + parameters = load_yaml(self._args.parameter_file) + system, solver, preprocess, optimize = workflow._modules.values() + + print("Loaded SeisFlows Modules:") + for module in [workflow, system, solver, preprocess, optimize]: + print(f"{module.__class__}") print(msg.cli("SeisFlows's debug mode is an embedded IPython " "environment. All modules are loaded by default. " @@ -841,7 +794,7 @@ def sempar(self, parameter, value=None, skip_print=False, seisflows sempar velocity_model to edit the values of a velocity model (SPECFEM2D) - + seisflows sempar velocity_model \ "1 1 2600.d0 5800.d0 3500.0d0 0 0 10.d0 10.d0 0 0 0 0 0 0" @@ -861,8 +814,8 @@ def sempar(self, parameter, value=None, skip_print=False, :type value: str :param value: value to set for parameter. if none, will simply print out the current parameter value. to set as nonetype, set to 'null' - SPECFEM2D: if set to 'velocity_model' allows the user to set and - edit the velocity model defined in the SPECMFE2D Par_file. Not a + SPECFEM2D: if set to 'velocity_model' allows the user to set and + edit the velocity model defined in the SPECMFE2D Par_file. Not a very smart capability, likely easier to do this manually. :type par_file: str :param par_file: name of the SPECFEM parameter file, defaults: Par_file @@ -894,7 +847,7 @@ def sempar(self, parameter, value=None, skip_print=False, delim="=") except KeyError: print(msg.cli(f"'{parameter}' not found in {par_file}")) - sys.exit(-1) + return # Option 1: Simply print out the value of the given parameter if value is None: @@ -913,8 +866,7 @@ def sempar(self, parameter, value=None, skip_print=False, if not skip_print: print(msg.cli(f"{key}: {cur_val} -> {value}")) - def par(self, parameter, value=None, skip_print=False, required=False, - **kwargs): + def par(self, parameter, value=None, skip_print=False, **kwargs): """ Check or set parameters in the seisflows parameter file. @@ -943,26 +895,21 @@ def par(self, parameter, value=None, skip_print=False, required=False, :type skip_print: bool :param skip_print: skip the print statement which is typically sent to stdout after changing parameters. - :type required: bool - :param required: Only list parameters which have not been set as a - default value, 'parameter' and 'value' will be ignored. """ + from warnings import warn + if not os.path.exists(self._args.parameter_file): sys.exit(f"\n\tparameter file '{self._args.parameter_file}' " f"does not exist\n") - if parameter is None and not required: + if parameter is None: self._subparser.print_help() sys.exit(0) - elif required: - self._par_required() - sys.exit(0) # SeisFlows parameter file dictates upper-case parameters parameter = parameter.upper() if isinstance(value, str) and value.lower() == "none": - warnings.warn("to set values to nonetype, use 'null' not 'none'", - UserWarning) + warn("to set values NoneType, use 'null' not 'none'", UserWarning) # Use the specfem tool to grab related information try: @@ -972,7 +919,7 @@ def par(self, parameter, value=None, skip_print=False, required=False, except KeyError: print(msg.cli(f"'{parameter}' not found in " f"{self._args.parameter_file}")) - sys.exit(-1) + return # Option 1: Simply print out the value of the given parameter if value is None: @@ -985,79 +932,9 @@ def par(self, parameter, value=None, skip_print=False, required=False, if not skip_print: print(msg.cli(f"{key}: {cur_val} -> {value}")) - def _par_required(self): - """ - Only list parameters which have not been set as a default value. - Filled in with default values defined in SeisFlowsPathParameters + def examples(self, method=None, choice=None, **kwargs): """ - sf = SeisFlowsPathsParameters - with open(self._args.parameter_file, "r") as f: - lines = f.readlines() - for check in [sf.default_par, sf.default_path]: - print(f"{check}\n{'='*len(check)}") - for line in lines: - if check in line: - print(f"\t{line.split(':')[0].strip()}") - - def edit(self, name, module, editor=None, **kwargs): - """ - Directly edit the SeisFlows source code matching the given name - and module using the chosen text editor. - - USAGE - - seisflows edit [name] [module] [editor] - - To edit the base Solver class using vim, one would run: - - seisflows edit solver base vim - - To simply find the location of the inversion workflow source code: - - seisflows edit workflow inversion q - - :type name: str - :param name: name of module, must match seisflows.config.NAMES - :type module: str - :param module: the module name contained under the SeisFlows namespace - :type editor: str - :param editor: optional chosen text editor to open the file. - * If NoneType: defaults to system environment $EDITOR - * If 'q': For quit, does not open an editor, simply prints fid - """ - if name is None: - self._subparser.print_help() - sys.exit(0) - - editor = editor or os.environ.get("EDITOR") - if editor is None: - print(msg.cli("$EDITOR environment variable is not set, please " - "set manually with the following call structure: " - "seisflows edit [name] [module] [editor]")) - sys.exit(-1) - - REPO_DIR = os.path.abspath(os.path.join(ROOT_DIR, "..")) - if name not in NAMES: - print(msg.cli(f"{name} not in SeisFlows names: {NAMES}")) - sys.exit(-1) - - for package in PACKAGES: - fid_try = os.path.join(REPO_DIR, package, name, f"{module}.py") - if os.path.exists(fid_try): - if self._args.dont_open: - print(msg.cli(text=fid_try)) - sys.exit(0) - else: - subprocess.call([editor, fid_try]) - print(msg.cli(f"Edited file: {fid_try}")) - sys.exit(0) - else: - print(msg.cli(f"seisflows.{name}.{module} not found")) - sys.exit(-1) - - def examples(self, run=None, choice=None, **kwargs): - """ - List or run a SeisFlows example problem + List or run a SeisFlows example problems USAGE @@ -1071,13 +948,52 @@ def examples(self, run=None, choice=None, **kwargs): seisflows examples run 1 - :type run: bool - :param run: if True, run an example of choice `choice` + :type method: bool + :param method: if True, run an example of choice `choice` :type choice: str :param choice: The choice of example, must match the given tag or file name that is assigned to it """ - examples_dir = os.path.join(ROOT_DIR, "scripts", "examples") + # e.g., $ seisflows examples + if method is None: + self._print_examples() + sys.exit(0) + # e.g., $ seisflows examples 1 + elif method and (choice is None): + try: + choice = int(method) + except ValueError: + print(f"`method` argument must be 'run', 'setup' or an integer " + f"value corresponding to one of the available examples") + sys.exit(0) + + # Allow the examples to be dynamically recovered based on user choice + if choice == 1: + from seisflows.examples.ex1_homogeneous_halfspace \ + import SFExample2D as Example + elif choice == 2: + from seisflows.examples.ex2_hh_w_pyatoa \ + import SFPyatoaEx2D as Example + elif choice == 3: + from seisflows.examples.ex3_fwd_solver import SFFwdEx2D as Example + else: + print(f"no SeisFlows example matching given number: {choice}") + sys.exit(0) + + # Run or setup example, or just print system dialogue + example = Example(method=method, **kwargs) + example.print_dialogue() + + # e.g., $ seisflows examples run 1 + if method in ["setup", "run"]: + example.main() + + @staticmethod + def _print_examples(): + """Simply print a list of available examples which match the format + ex_?*.py""" + # Gather all the available examples in the repository + examples_dir = os.path.join(ROOT_DIR, "examples") examples_list = [] example_names = sorted(glob(os.path.join(examples_dir, "ex*.py"))) @@ -1085,67 +1001,20 @@ def examples(self, run=None, choice=None, **kwargs): example_name = os.path.splitext(os.path.basename(fid))[0] examples_list.append((i+1, example_name, fid)) - arg1, arg2 = None, None - if run: - # Case 1: seisflows examples 1 OR seisflows examples ex1_... - if choice is None: - arg1 = run - arg2 = "" - # Case 2: seisflows examples run 1 OR seisflows examples run ex1_... - elif run in ["run", "setup"]: - arg1 = choice - arg2 = f" {run}" # space so that we do $ python ex.py run - if arg1: - # Allow for matching against index (int) and name (str) - try: - arg1 = int(arg1) - except ValueError: - pass - - for ex_tup in examples_list: - j, exname, fid = ex_tup - if arg1 in [j, exname]: - print(f"{run.capitalize()} example: {exname}") - subprocess.run(f"python {fid}{arg2}", shell=True, - check=False) - return - - # Default behavior is to just print this help dialogue items = [f"{j}: {exname}" for j, exname, fid in examples_list] - print(msg.cli("Example options where is either the " - "example name or corresponding index, provided below.", - items=[ - "'seisflows examples ': print example description", - "'seisflows examples setup ': setup example but " - "don't run workflow", - "'seisflows examples run ': setup and run example" - ], + print(msg.cli( + "Example options where is either the example name " + "or corresponding index, provided below.", + items=[ + "'seisflows examples ': print example description", + "'seisflows examples setup ': setup example but " + "don't run workflow 'seisflows examples run ': " + "setup and run example" + ], header="seisflows examples" )) print(msg.cli(items=items)) - def check(self, choice=None, **kwargs): - """ - Check parameters, state or values of an active SeisFlows environment. - Type 'seisflows check --help' for a detailed help message. - - :type choice: str - :param choice: underlying sub-function to choose - """ - acceptable_args = {"model": self._check_model_parameters, - "iter": self._check_current_iteration, - "src": self._check_source_names, - "isrc": self._check_source_index} - - # Ensure that help message is thrown for empty commands - if choice not in acceptable_args.keys(): - self._subparser.print_help() - sys.exit(0) - - self._register(force=True) - self._load_modules() - acceptable_args[choice](*self._args.args, **kwargs) - def print(self, choice=None, **kwargs): """ Print information relating to an active SeisFlows environment. @@ -1155,7 +1024,7 @@ def print(self, choice=None, **kwargs): :param choice: underlying sub-function to choose """ acceptable_args = {"modules": self._print_modules, - "flow": self._print_flow, + "tasks": self._print_tasks, "inherit": self._print_inheritance} # Ensure that help message is thrown for empty commands @@ -1165,78 +1034,103 @@ def print(self, choice=None, **kwargs): acceptable_args[choice](*self._args.args, **kwargs) - def reset(self, choice=None, **kwargs): + def plotst(self, fids, data_format="ASCII", savefig=None, **kwargs): """ - Mid-level function to wrap lower level reset functions - """ - acceptable_args = {"line_search": self._reset_line_search,} - - # Ensure that help message is thrown for empty commands - if choice not in acceptable_args.keys(): - self._subparser.print_help() - sys.exit(0) + Simple stream/waveform plotter to visualize synthetic waveforms created + by the solver. Uses ObsPy under the hood to generate a large stream + and then plots all waveforms together. - self._register(force=True) - self._load_modules() - acceptable_args[choice](*self._args.args, **kwargs) + .. note:: + Very simple function to look at waveforms. If you want more + sophisticated plotting tools, look at Python packages `Pyatoa` + or `PySEP` - def convert(self, name, path=None, **kwargs): + :type fids: list + :param fids: list of file ID's to plot + :type data_format: str + :param data_format: data format used to determine how to read data files + :type savefig: str or None + :param savefig: full path and filename to save the output figure. If + NoneType, will not save the figure """ - Convert a model in the OUTPUT directory between vector to binary - representation. Kwargs are passed through to solver.save() - - USAGE + from obspy import Stream + from seisflows.preprocess.default import Default - seisflows convert [name] [path] [**kwargs] + # Take advantage of the Default Preprocessing module's read() function + plotter = Default(data_format=data_format) + assert(data_format.upper() in plotter._acceptable_data_formats), \ + f"data format must be in {plotter._acceptable_data_formats}" # NOQA - To convert the vector model 'm_try' to binary representation in the - output directory + st = Stream() + for fid in fids: + st += plotter.read(fid) - seisflows convert m_try + st.plot(outfile=savefig, **kwargs) - :type name: str - :param name: name of the model to convert, e.g. 'm_try' - :type path: str - :param path: path and file id to save the output model. if None, will - default to saving in the output directory under the name of the - model + def plot2d(self, name=None, parameter=None, cmap=None, savefig=None, + **kwargs): """ - self._load_modules(force=True) - - solver = sys.modules["seisflows_solver"] - optimize = sys.modules["seisflows_optimize"] - PATH = sys.modules["seisflows_paths"] + Plot model, gradient or kernels in the PATH.OUTPUT - if path is None: - path = os.path.join(PATH.OUTPUT, name) - if os.path.exists(path): - print(msg.cli("The following file exists and will be overwritten. " - "Please rename or move this file and re-try: {path}")) - sys.exit(-1) - - solver.save(solver.split(optimize.load(name)), path=path, **kwargs ) + :type name: str + :param name: Name of directory in the output/ directory + :type parameter: str + :param parameter: Name of parameter to plot from `name`, e.g., 'vs', + 'vp' etc. + :type cmap: str + :param cmap: optional colormap parameter to be passed to Pyplot + :type savefig: str + :param savefig: optional name and path of filename to save figure + to disk + """ + from seisflows.tools.model import Model + + # Figure out which models/gradients/kernels we can actually plot + _, output_dir, _ = getpar(key="path_output", + file=self._args.parameter_file, + delim=":") + # Assuming only models/kernels/gradients have the format *_* in output + acceptable_names = sorted([ + os.path.basename(_) for _ in glob(os.path.join(output_dir, "*_*")) + ]) + if name is None: + print(msg.cli(f"Available models/gradients/kernels", + items=sorted(acceptable_names), header="Plot2D") + ) + sys.exit(0) + else: + assert(name in acceptable_names), ( + f"`seisflows plot 2d` can only plot {acceptable_names}" + ) + # Grab model_init to use its coordinates + # name of directory for model_init is defined by solver.specfem.setup() + base_model = Model(path=os.path.join(output_dir, "MODEL_INIT")) + assert(base_model.coordinates is not None), \ + f"`MODEL_INIT` does not have any available 2D coordinates" + + # Now read in the actual updated values and update the model + plot_model = Model(path=os.path.join(output_dir, name)) + plot_model.coordinates = base_model.coordinates + # plot2d has internal check for acceptable parameter value + plot_model.plot2d(parameter=parameter, cmap=cmap, show=True, + title=f"{name} // {parameter.upper()}", save=savefig) - def validate(self, module=None, name=None): + def reset(self, choice=None, **kwargs): """ - Ensure that all the modules (and their respective subclasses) meet some - necessary requirements such as having specific functions and parameters. - Not a full replacement for running the test suite, but useful for - checking newly written subclasses. - - USAGE - - To validate a specific subclass: + Mid-level function to wrap lower level reset functions - seisflows validate workflow inversion + TODO re-write '_reset_line_search' + """ + acceptable_args = {"line_search": self._reset_line_search,} - To validate the entire codebase + # Ensure that help message is thrown for empty commands + if choice not in acceptable_args.keys(): + self._subparser.print_help() + sys.exit(0) - seisflows validate - """ - raise NotImplementedError + acceptable_args[choice](*self._args.args, **kwargs) - @staticmethod - def _inspect_class_that_defined_method(name, func, **kwargs): + def _inspect_class_that_defined_method(self, name, func, **kwargs): """ Given a function name and generalized module (e.g. solver), inspect which of the subclasses actually defined the function. Makes it easier @@ -1251,17 +1145,21 @@ def _inspect_class_that_defined_method(name, func, **kwargs): :param func: Corresponding method/function name for the given module """ # Dynamically get the correct module and function based on names - try: - module = sys.modules[f"seisflows_{name}"] - except KeyError: - print(msg.cli(f"SeisFlows has no module: {name}")) - sys.exit(-1) - try: - method = getattr(module, func) - except AttributeError: - print(msg.cli(f"SeisFlows.{name} has no function: {func}")) - sys.exit(-1) - + # try: + # module = sys.modules[f"seisflows_{name}"] + # except KeyError: + # print(msg.cli(f"SeisFlows has no module: {name}")) + # sys.exit(-1) + # try: + # method = getattr(module, func) + # except AttributeError: + # print(msg.cli(f"SeisFlows.{name} has no function: {func}")) + # sys.exit(-1) + + parameters = load_yaml(os.path.join(self._args.workdir, + self._args.parameter_file)) + module = custom_import(name, parameters[name])() + method = getattr(module, func) method_name = method.__name__ if method.__self__: classes = [method.__self__.__class__] @@ -1278,8 +1176,7 @@ def _inspect_class_that_defined_method(name, func, **kwargs): print(msg.cli(f"Error matching class for SeisFlows.{name}.{func}")) sys.exit(-1) - @staticmethod - def _inspect_module_hierarchy(name=None, **kwargs): + def _inspect_module_hierarchy(self, name=None, **kwargs): """ Determine the order of class hierarchy for a given SeisFlows module. @@ -1293,46 +1190,25 @@ def _inspect_module_hierarchy(name=None, **kwargs): :param name: choice of module, if None, will print hierarchies for all modules. """ + parameters = load_yaml(os.path.join(self._args.workdir, + self._args.parameter_file)) + items = [] for NAME in NAMES: if name and NAME != name: continue - module = sys.modules[f"seisflows_{NAME}"] + module = custom_import(NAME, parameters[NAME])() item_str = f"{NAME.upper():<12}" - for i, cls in enumerate(inspect.getmro(type(module))[::-1]): + for i, cls in enumerate(getmro(type(module))[::-1]): + # The base inheritance is always 'object', skip printing this. + if i == 0: + continue item_str += f"> {cls.__name__:<10}" items.append(item_str) print(msg.cli(items=items, header="seisflows inheritance")) - def _reset_line_search(self, **kwargs): - """ - Reset the machinery of the line search. This is useful for if a line - search fails or stagnates but the User does not want to re-run the - entire iteration. They can reset the line search and resume the workflow - from the line search step - - The following rubric details how you might use this from command line: - - .. rubric:: - $ seisflows reset line_search - $ seisflows par resume_from line_search - $ seisflows resume_from -f - """ - optimize = sys.modules["seisflows_optimize"] - workflow = sys.modules["seisflows_workflow"] - - current_step = optimize.line_search.step_count - optimize.line_search.reset() - - # Manually set step count back to 0, this usually happens in - # optimize.finalize_search() - optimize.line_search.step_count = 0 - print(msg.cli(f"resetting line search machinery. step count: " - f"{current_step} -> {optimize.line_search.step_count }")) - workflow.checkpoint() - - def _print_modules(self, name=None, package=None, **kwargs): + def _print_modules(self, package=None, **kwargs): """ Print out available modules in the SeisFlows name space for all available packages and modules. @@ -1346,21 +1222,18 @@ def _print_modules(self, name=None, package=None, **kwargs): :param package: specify an indivdual package to search """ items = [] - module_list = return_modules() - for name_, package_dict in module_list.items(): - if name is not None and name != name_: + module_dict = return_modules() + + for module_, module_list in module_dict.items(): + if package is not None and module_ != package: continue - items.append(f"+ {name_.upper()}") - for package_, module_list in package_dict.items(): - if package is not None and package_ != package: - continue - items.append(f"\t- {package_}".expandtabs(tabsize=4)) - for module_ in module_list: - items.append(f"\t\t* {module_}".expandtabs(tabsize=4)) - print(msg.cli("'+': package, '-': module, '*': class", items=items, + items.append(f"- {module_}".expandtabs(tabsize=4)) + for module_ in module_list: + items.append(f"\t* {module_}".expandtabs(tabsize=4)) + print(msg.cli("'-': module, '*': class", items=items, header="seisflows modules")) - def _print_flow(self, **kwargs): + def _print_tasks(self, **kwargs): """ Simply print out the seisflows.workflow.main() flow variable which describes what order workflow functions will be run. Useful for @@ -1369,14 +1242,12 @@ def _print_flow(self, **kwargs): .. rubric:: $ seisflows print flow """ - self._register(force=True) - self._load_modules() - - workflow = custom_import("workflow")() - flow = workflow.main(return_flow=True) - items = [f"{a+1}: {b.__name__}" for a, b in enumerate(flow)] - print(msg.cli(f"Flow arguments for {type(workflow)}", items=items, - header="seisflows workflow main")) + parameters = load_yaml(os.path.join(self._args.workdir, + self._args.parameter_file)) + wf = custom_import("workflow", parameters["workflow"])() + items = [f"{a+1}: {b.__name__}" for a, b in enumerate(wf.task_list)] + print(msg.cli(f"Task list for {type(wf)}", items=items, + header="seisflows workflow task list")) def _print_inheritance(self, name=None, func=None, **kwargs): """ @@ -1402,95 +1273,93 @@ def _print_inheritance(self, name=None, func=None, **kwargs): seisflows inspect solver eval_func """ - self._register(force=True) - self._load_modules() if func is None: self._inspect_module_hierarchy(name, **kwargs) else: self._inspect_class_that_defined_method(name, func, **kwargs) - def _check_model_parameters(self, src=None, **kwargs): - """ - Print out the min/max values from one or all of the currently available - models. Useful for checking what models are associated with what part of - the workflow, e.g. evaluate function, evaluate gradient. - - :type src: str - :param src: the name of a specific model to check, e.g. 'm_try', - otherwise will check parameters for all models - """ - optimize = sys.modules["seisflows_optimize"] - PATH = sys.modules["seisflows_paths"] - - avail = glob(os.path.join(PATH.OPTIMIZE, "m_*")) - srcs = [os.path.basename(_) for _ in avail] - if src: - if src not in srcs: - print(msg.cli(f"{src} not in available models: {avail}")) - sys.exit(-1) - srcs = [src] - for tag in srcs: - m = optimize.load(tag) - optimize.check_model(m, tag) - - def _check_current_iteration(self, **kwargs): - """ - Display the current point in the workflow in terms of the iteration - and step count number. Args are not used by allow for a more general - check() function. - """ - optimize = sys.modules["seisflows_optimize"] - try: - items = [] - ln = optimize.line_search - items.append(f"Iteration: {optimize.iter}") - items.append(f"Step Count: {ln.step_count} / {ln.step_count_max}") - print(msg.cli(items=items)) - except AttributeError: - print(msg.cli("OPTIMIZATION module has not been initialized yet, " - "cannot retrieve iteration or step count values.")) - sys.exit(-1) - - def _check_source_names(self, source_name=None, **kwargs): - """ - Sources are tagged by name but also by index in the source names which - can be confusing and usually requires doubling checking. This check - just prints out source names next to their respective index, or if a - source name is requested, provides the index for that - - :type source_name: str - :param source_name: name of source to check index, if None will simply - print out all sources - """ - try: - source_names = sys.modules["seisflows_solver"].source_names - except FileNotFoundError as e: - print(msg.cli(str(e))) - sys.exit(-1) - - if source_name: - print(msg.cli(f"{source_names.index(source_name)}: {source_name}")) - else: - items = [] - for i, source_name in enumerate(source_names): - items.append(f"{i:>3}: {source_name}") - print(msg.cli(items=items, header="source names")) - - def _check_source_index(self, idx=None, **kwargs): - """ - Look up source name by index - - :type idx: int - :param idx: index of source to look up - """ - if idx is None: - self._check_source_names(source_name=None) - else: - solver = sys.modules["seisflows_solver"] - try: - print(msg.cli(f"{idx}: {solver.source_names[int(idx)]}")) - except IndexError: - print(msg.cli(f"idx out of range: {len(solver.source_names)}")) + # def _check_model_parameters(self, src=None, **kwargs): + # """ + # Print out the min/max values from one or all of the currently available + # models. Useful for checking what models are associated with what part of + # the workflow, e.g. evaluate function, evaluate gradient. + # + # :type src: str + # :param src: the name of a specific model to check, e.g. 'm_try', + # otherwise will check parameters for all models + # """ + # optimize = sys.modules["seisflows_optimize"] + # PATH = sys.modules["seisflows_paths"] + # + # avail = glob(os.path.join(PATH.OPTIMIZE, "m_*")) + # srcs = [os.path.basename(_) for _ in avail] + # if src: + # if src not in srcs: + # print(msg.cli(f"{src} not in available models: {avail}")) + # sys.exit(-1) + # srcs = [src] + # for tag in srcs: + # m = optimize.load(tag) + # m.check() + # + # def _check_current_iteration(self, **kwargs): + # """ + # Display the current point in the workflow in terms of the iteration + # and step count number. Args are not used by allow for a more general + # check() function. + # """ + # optimize = sys.modules["seisflows_optimize"] + # try: + # items = [] + # ln = optimize.line_search + # items.append(f"Iteration: {optimize.iter}") + # items.append(f"Step Count: {ln.step_count} / {ln.step_count_max}") + # print(msg.cli(items=items)) + # except AttributeError: + # print(msg.cli("OPTIMIZATION module has not been initialized yet, " + # "cannot retrieve iteration or step count values.")) + # sys.exit(-1) + # + # def _check_source_names(self, source_name=None, **kwargs): + # """ + # Sources are tagged by name but also by index in the source names which + # can be confusing and usually requires doubling checking. This check + # just prints out source names next to their respective index, or if a + # source name is requested, provides the index for that + # + # :type source_name: str + # :param source_name: name of source to check index, if None will simply + # print out all sources + # """ + # try: + # source_names = sys.modules["seisflows_solver"].source_names + # except FileNotFoundError as e: + # print(msg.cli(str(e))) + # sys.exit(-1) + # + # if source_name: + # print(msg.cli(f"{source_names.index(source_name)}: {source_name}")) + # else: + # items = [] + # for i, source_name in enumerate(source_names): + # items.append(f"{i:>3}: {source_name}") + # print(msg.cli(items=items, header="source names")) + # + # def _check_source_index(self, idx=None, **kwargs): + # """ + # Look up source name by index + # + # :type idx: int + # :param idx: index of source to look up + # """ + # if idx is None: + # self._check_source_names(source_name=None) + # else: + # solver = sys.modules["seisflows_solver"] + # try: + # print(msg.cli(f"{idx}: {solver.source_names[int(idx)]}")) + # except IndexError: + # print(msg.cli(f"idx out of range: {len(solver.source_names)}")) def return_modules(): @@ -1503,19 +1372,15 @@ def return_modules(): :return: a dict with keys matching names and values as dicts for each package. nested list contains all the avaialble modules """ - REPO_DIR = os.path.abspath(os.path.join(ROOT_DIR, "..")) - module_dict = {} for NAME in NAMES: - module_dict[NAME] = {} - for PACKAGE in PACKAGES: - module_dict[NAME][PACKAGE] = [] - mod_dir = os.path.join(REPO_DIR, PACKAGE, NAME) - for pyfile in sorted(glob(os.path.join(mod_dir, "*.py"))): - stripped_pyfile = os.path.basename(pyfile) - stripped_pyfile = os.path.splitext(stripped_pyfile)[0] - if not stripped_pyfile.startswith("_"): - module_dict[NAME][PACKAGE].append(stripped_pyfile) + module_dict[NAME] = [] + mod_dir = os.path.join(ROOT_DIR, NAME) + for pyfile in sorted(glob(os.path.join(mod_dir, "*.py"))): + stripped_pyfile = os.path.basename(pyfile) + stripped_pyfile = os.path.splitext(stripped_pyfile)[0] + if not stripped_pyfile.startswith("_"): + module_dict[NAME].append(stripped_pyfile) return module_dict diff --git a/seisflows/solver/base.py b/seisflows/solver/base.py deleted file mode 100644 index f1db5e62..00000000 --- a/seisflows/solver/base.py +++ /dev/null @@ -1,998 +0,0 @@ -#!/usr/bin/env python3 -""" -This Solver module is in charge of interacting with external numerical solvers -such as SPECFEM (2D/3D/3D_GLOBE). The Base class provides general functions -that work with SPECFEM, while subclasses provide details to differentiate the -various types of SPECFEM. -""" -import os -import sys -import logging -import numpy as np -from glob import glob -from functools import partial - -from seisflows.plugins import solver_io -from seisflows.tools import msg, unix -from seisflows.tools.specfem import Container, call_solver -from seisflows.tools.wrappers import Struct, diff, exists -from seisflows.config import SeisFlowsPathsParameters - - -PAR = sys.modules['seisflows_parameters'] -PATH = sys.modules['seisflows_paths'] -system = sys.modules['seisflows_system'] -preprocess = sys.modules['seisflows_preprocess'] - - -class Base: - """ - This base class provides an interface through which solver simulations can - be set up and run and a parent class for the following subclasses: - - SPECFEM2D - SPECFEM3D - SPECFEM3D_GLOBE - - .. note::: - This class supports only acoustic and isotropic elastic inversions. - - Function descriptors: - - eval_func, eval_grad, apply_hess - - These methods deal with evaluation of the misfit function or its - derivatives. Together, they provide the primary interface through which - SeisFlows interacts with SPECFEM2D/3D - - forward, adjoint - - These methods allow direct access to low-level SPECFEM2D/3D components, - providing an alternative interface through which to interact with the - solver - - steup, generate_data, generate_model - - One-time operations performed at the beginning of inversion or migration - - initialize_solver_directories, initialize_adjoint_traces - - SPECFEM2D/3D requires a particular directory structure in which to run - and particular file formats for models, data, and parameter files. These - methods help put in place all these prerequisites - - load, save - - For reading and writing SPECFEM2D/3D models and kernels. On the disk, - models and kernels are stored as binary files, and in memory, as - dictionaries with different keys corresponding to different material - parameters - - split, merge - - Within the solver routines, it is natural to store models as - dictionaries. Within the optimization routines, it is natural to store - models as vectors. Two methods, 'split' and 'merge', are used to convert - back and forth between these two representations - - combine, smooth - - Utilities for combining and smoothing kernels - - generate_data, generate_mesh, eval_fwd, forward, adjoint, - data_filenames, model_databases, kernel_databases, source_prefix - - !!! Required functions which must be implemented by subclass !!! - - """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by the User_! - Attributes are just initialized as NoneTypes for clarity and docstrings - - :type parameters: list of str - :param parameters: a list detailing the parameters to be used to - define the model, available: ['vp', 'vs', 'rho'] - :type _mesh_properties: seisflows.tools.wrappers.Struct - :param _mesh_properties: hidden attribute, a dictionary of mesh - properties, including the ngll points, nprocs, and mesh coordinates - :type _source_names: hidden attribute, - :param _source_names: the names of all the sources that are being used - by the solver - :type logger: Logger - :param logger: Class-specific logging module, log statements pushed - from this logger will be tagged by its specific module/classname - """ - self.parameters = [] - self._mesh_properties = None - self._source_names = None - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters() - - sf.par("MATERIALS", required=True, par_type=str, - docstr="Material parameters used to define model. Available: " - "['ELASTIC': Vp, Vs, 'ACOUSTIC': Vp, 'ISOTROPIC', " - "'ANISOTROPIC']") - - sf.par("DENSITY", required=True, par_type=str, - docstr="How to treat density during inversion. Available: " - "['CONSTANT': Do not update density, " - "'VARIABLE': Update density]") - - sf.par("ATTENUATION", required=True, par_type=str, - docstr="If True, turn on attenuation during forward " - "simulations, otherwise set attenuation off. Attenuation " - "is always off for adjoint simulations.") - - sf.par("COMPONENTS", required=False, default="ZNE", par_type=str, - docstr="Components used to generate data, formatted as a single " - "string, e.g. ZNE or NZ or E") - - sf.par("SOLVERIO", required=False, default="fortran_binary", - par_type=int, - docstr="The format external solver files. Available: " - "['fortran_binary', 'adios']") - - sf.path("SOLVER", required=False, - default=os.path.join(PATH.SCRATCH, "solver"), - docstr="scratch path to hold solver working directories") - - sf.path("SPECFEM_BIN", required=True, - docstr="path to the SPECFEM binary executables") - - sf.path("SPECFEM_DATA", required=True, - docstr="path to the SPECFEM DATA/ directory containing the " - "'Par_file', 'STATIONS' file and 'CMTSOLUTION' files") - - sf.path("DATA", required=False, - docstr="path to a directory containing any external data " - "required by the workflow. Catch all directory that " - "can be accessed by all modules") - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths - """ - if validate: - self.required.validate() - - # Check that other modules have set parameters that will be used here - for required_parameter in ["NPROC"]: - assert (required_parameter in PAR), \ - f"Solver requires {required_parameter}" - - # Important to reset parameters to a blank list and let the check - # statements fill it. If not, each time workflow is resumed, parameters - # list will append redundant parameters and things stop working - - available_materials = ["ELASTIC", "ACOUSTIC", # specfem2d, specfem3d - "ISOTROPIC", "ANISOTROPIC"] # specfem3d_globe - assert(PAR.MATERIALS.upper() in available_materials), \ - f"MATERIALS must be in {available_materials}" - - acceptable_densities = ["CONSTANT", "VARIABLE"] - assert(PAR.DENSITY.upper() in acceptable_densities), \ - f"DENSITY must be in {acceptable_densities}" - - # Internal parameter list based on user-input material choices - self.parameters = [] - if PAR.MATERIALS.upper() == "ELASTIC": - assert(PAR.SOLVER.lower() in ["specfem2d", "specfem3d"]) - self.parameters += ["vp", "vs"] - elif PAR.MATERIALS.upper() == "ACOUSTIC": - assert(PAR.SOLVER.lower() in ["specfem2d", "specfem3d"]) - self.parameters += ["vp"] - elif PAR.MATERIALS.upper() == "ISOTROPIC": - assert(PAR.SOLVER.lower() in ["specfem3d_globe"]) - self.parameters += ["vp", "vs"] - elif PAR.MATERIALS.upper() == "ANISOTROPIC": - assert(PAR.SOLVER.lower() in ["specfem3d_globe"]) - self.parameters += ["vpv", "vph", "vsv", "vsh", "eta"] - - if PAR.DENSITY.upper() == "VARIABLE": - self.parameters.append("rho") - - assert hasattr(solver_io, PAR.SOLVERIO) - assert hasattr(self.io, "read_slice"), \ - "IO method has no attribute 'read_slice'" - assert hasattr(self.io, "write_slice"), \ - "IO method has no attribute 'write_slice'" - - def setup(self): - """ - Prepares solver for inversion or migration. - Sets up directory structure expected by SPECFEM and copies or generates - seismic data to be inverted or migrated - - .. note:; - As input for an inversion or migration, users can choose between - providing data, or providing a target model from which data are - generated on the fly. - In the former case, a value for PATH.DATA must be supplied; - in the latter case, a value for PATH.MODEL_TRUE must be provided. - """ - # Clean up for new inversion - unix.rm(self.cwd) - self.initialize_solver_directories() - - # Determine where observation data will come from - if PAR.CASE.upper() == "SYNTHETIC" and PATH.MODEL_TRUE is not None: - if self.taskid == 0: - self.logger.info("generating 'data' with MODEL_TRUE synthetics") - # Generate synthetic data on the fly using the true model - self.generate_data(model_path=PATH.MODEL_TRUE, - model_name="model_true", - model_type="gll") - elif PATH.DATA is not None and os.path.exists(PATH.DATA): - # If Data provided by user, copy directly into the solver directory - unix.cp(src=glob(os.path.join(PATH.DATA, self.source_name, "*")), - dst=os.path.join("traces", "obs") - ) - - # Prepare initial model - if self.taskid == 0: - self.logger.info("running mesh generation for MODEL_INIT") - self.generate_mesh(model_path=PATH.MODEL_INIT, - model_name="model_init", - model_type="gll") - - # Create blank adjoint traces to be overwritten - self.initialize_adjoint_traces() - - def clean(self): - """ - Clean up solver-dependent run directory by removing the OUTPUT_FILES/ - directory - """ - unix.cd(self.cwd) - unix.rm("OUTPUT_FILES") - unix.mkdir("OUTPUT_FILES") - - def generate_data(self, *args, **kwargs): - """ - Generates data based on a given model - - !!! Must be implemented by subclass !!! - """ - raise NotImplementedError - - def generate_mesh(self, *args, **kwargs): - """ - Performs meshing and database generation - - !!! Must be implemented by subclass !!! - """ - raise NotImplementedError - - def eval_func(self, path, write_residuals=True): - """ - High level solver interface - - Performs forward simulations and evaluates the misfit function - - :type path: str - :param path: directory from which model is imported and where residuals - will be exported - :type write_residuals: bool - :param write_residuals: calculate and export residuals - """ - if self.taskid == 0: - self.logger.info("running forward simulations") - - unix.cd(self.cwd) - self.import_model(path) - self.forward() - - if write_residuals: - if self.taskid == 0: - self.logger.debug("calling preprocess.prepare_eval_grad()") - preprocess.prepare_eval_grad(cwd=self.cwd, taskid=self.taskid, - source_name=self.source_name, - filenames=self.data_filenames - ) - self.export_residuals(path) - - def eval_grad(self, path, export_traces=False): - """ - High level solver interface that evaluates gradient by carrying out - adjoint simulations. A function evaluation must already have been - carried out. - - :type path: str - :param path: directory from which model is imported - :type export_traces: bool - :param export_traces: if True, save traces to OUTPUT. - if False, discard traces - """ - unix.cd(self.cwd) - if self.taskid == 0: - self.logger.debug("running adjoint simulations") - - # Check to make sure that preprocessing module created adjoint traces - adjoint_traces_wildcard = os.path.join("traces", "adj", "*") - if not glob(adjoint_traces_wildcard): - print(msg.cli(f"Event {self.source_name} has no adjoint traces, " - f"which will lead to an external solver error. " - f"Please check that solver.eval_func() executed " - f"properly", border="=", header="solver error") - ) - sys.exit(-1) - - self.adjoint() - self.export_kernels(path) - - if export_traces: - self.export_traces(path=os.path.join(path, "traces", "syn"), - prefix="traces/syn") - self.export_traces(path=os.path.join(path, "traces", "adj"), - prefix="traces/adj") - - def apply_hess(self, path): - """ - High level solver interface that computes action of Hessian on a given - model vector. A gradient evaluation must have already been carried out. - - TODO preprocess has no function prepare_apply_hess() - - :type path: str - :param path: directory to which output files are exported - """ - raise NotImplementedError - - unix.cd(self.cwd) - self.import_model(path) - unix.mkdir("traces/lcg") - - self.forward("traces/lcg") - preprocess.prepare_apply_hess(self.cwd) - self.adjoint() - self.export_kernels(path) - - def forward(self): - """ - Low level solver interface - - Calls forward solver - - !!! Must be implemented by subclass !!! - """ - raise NotImplementedError - - def adjoint(self): - """ - Low level solver interface - - Calls adjoint solver - - !!! Must be implemented by subclass !!! - """ - raise NotImplementedError - - @property - def io(self): - """ - Solver IO module set by User. - - Located in seisflows.plugins.solver_io - """ - return getattr(solver_io, PAR.SOLVERIO) - - def load(self, path, prefix="", suffix="", parameters=None,): - """ - Solver I/O: Loads SPECFEM2D/3D models or kernels - - :type path: str - :param path: directory from which model is read - :type prefix: str - :param prefix: optional filename prefix - :type suffix: str - :param suffix: optional filename suffix, eg '_kernel' - :type parameters: list - :param parameters: material parameters to be read - (if empty, defaults to self.parameters) - :rtype: dict - :return: model or kernels indexed by material parameter and - processor rank, ie dict[parameter][iproc] - """ - if parameters is None: - parameters = self.parameters - - load_dict = Container() - for iproc in range(self.mesh_properties.nproc): - for key in parameters: - load_dict[key] += self.io.read_slice( - path=path, parameters=f"{prefix}{key}{suffix}", iproc=iproc - ) - - return load_dict - - def save(self, save_dict, path, parameters=None, prefix="", suffix=""): - """ - Solver I/O: Saves SPECFEM2D/3D models or kernels - - :type save_dict: dict or Container - :param save_dict: model stored as a dictionary or Container - :type path: str - :param path: directory from which model is read - :type parameters: list - :param parameters: list of material parameters to be read - :type prefix: str - :param prefix: optional filename prefix - :type suffix: str - :param suffix: optional filename suffix, eg '_kernel' - """ - unix.mkdir(path) - - if parameters is None: - parameters = self.parameters - - # Fill in any missing parameters - missing_keys = diff(parameters, save_dict.keys()) - for iproc in range(self.mesh_properties.nproc): - for key in missing_keys: - save_dict[key] += self.io.read_slice( - path=PATH.MODEL_INIT, parameters=f"{prefix}{key}{suffix}", - iproc=iproc - ) - - # Write slices to disk - for iproc in range(self.mesh_properties.nproc): - for key in parameters: - self.io.write_slice(data=save_dict[key][iproc], path=path, - parameters=f"{prefix}{key}{suffix}", - iproc=iproc) - - def merge(self, model, parameters=None): - """ - Convert dictionary representation `model` to vector representation `m` - - :type model: dict - :param model: model to be converted - :type parameters: list - :param parameters: optional list of parameters, - defaults to `self.parameters` - :rtype: np.ndarray - :return: model as a vector - """ - if parameters is None: - parameters = self.parameters - - m = np.array([]) - for key in parameters: - for iproc in range(self.mesh_properties.nproc): - m = np.append(m, model[key][iproc]) - - return m - - def split(self, m, parameters=None): - """ - Converts vector representation `m` to dictionary representation `model` - - :type m: np.ndarray - :param m: model to be converted - :type parameters: list - :param parameters: optional list of parameters, - defaults to `self.parameters` - :rtype: dict - :return: model as a dictionary - """ - if parameters is None: - parameters = self.parameters - - nproc = self.mesh_properties.nproc - ngll = self.mesh_properties.ngll - model = Container() - - for idim, key in enumerate(parameters): - model[key] = [] - for iproc in range(nproc): - imin = sum(ngll) * idim + sum(ngll[:iproc]) - imax = sum(ngll) * idim + sum(ngll[:iproc + 1]) - model[key] += [m[imin:imax]] - - return model - - def combine(self, input_path, output_path, parameters=None): - """ - Postprocessing wrapper: xcombine_sem - Sums kernels from individual source contributions to create gradient. - - .. note:: - The binary xcombine_sem simply sums matching databases (.bin) - - .. note:: - It is ASSUMED that this function is being called by - system.run(single=True) so that we can use the main solver - directory to perform the kernel summation task - - :type input_path: str - :param input_path: path to data - :type output_path: str - :param output_path: path to export the outputs of xcombine_sem - :type parameters: list - :param parameters: optional list of parameters, - defaults to `self.parameters` - """ - if parameters is None: - parameters = self.parameters - - if not exists(output_path): - unix.mkdir(output_path) - - unix.cd(self.cwd) - - # Write the source names into the kernel paths file for SEM/ directory - with open("kernel_paths", "w") as f: - f.writelines( - [os.path.join(input_path, f"{name}\n") - for name in self.source_names] - ) - - # Call on xcombine_sem to combine kernels into a single file - for name in self.parameters: - # e.g.: mpiexec ./bin/xcombine_sem alpha_kernel kernel_paths output - call_solver(mpiexec=PAR.MPIEXEC, - executable=" ".join([f"bin/xcombine_sem", - f"{name}_kernel", "kernel_paths", - output_path]) - ) - - def smooth(self, input_path, output_path, parameters=None, span_h=0., - span_v=0., output="solver.log"): - """ - Postprocessing wrapper: xsmooth_sem - Smooths kernels by convolving them with a Gaussian. - - .. note:: - paths require a trailing `/` character when calling xsmooth_sem - - .. note:: - It is ASSUMED that this function is being called by - system.run(single=True) so that we can use the main solver - directory to perform the kernel smooth task - - :type input_path: str - :param input_path: path to data - :type output_path: str - :param output_path: path to export the outputs of xcombine_sem - :type parameters: list - :param parameters: optional list of parameters, - defaults to `self.parameters` - :type span_h: float - :param span_h: horizontal smoothing length in meters - :type span_v: float - :param span_v: vertical smoothing length in meters - :type output: str - :param output: file to output stdout to - """ - if parameters is None: - parameters = self.parameters - - if not exists(output_path): - unix.mkdir(output_path) - - # Apply smoothing operator inside scratch/solver/* - unix.cd(self.cwd) - - # mpiexec ./bin/xsmooth_sem SMOOTH_H SMOOTH_V name input output use_gpu - for name in parameters: - call_solver(mpiexec=PAR.MPIEXEC, - executable=" ".join(["bin/xsmooth_sem", - str(span_h), str(span_v), - f"{name}_kernel", - os.path.join(input_path, ""), - os.path.join(output_path, ""), - ".false"]), - output=output - ) - - # Rename output files - files = glob(os.path.join(output_path, "*")) - unix.rename(old="_smooth", new="", names=files) - - def combine_vol_data_vtk(self): - """ - Postprocessing wrapper for xcombine_vol_data_vtk - - !!! must be implemented by subclass !!! - """ - pass - - def import_model(self, path): - """ - File transfer utility. Import the model into the workflow. - - :type path: str - :param path: path to model - """ - model = self.load(path=os.path.join(path, "model")) - self.save(model, self.model_databases) - - def import_traces(self, path): - """ - File transfer utility. Import traces into the workflow. - - :type path: str - :param path: path to traces - """ - src = glob(os.path.join(path, 'traces', self.source_name, '*')) - dst = os.path.join(self.cwd, 'traces', 'obs') - unix.cp(src, dst) - - def export_model(self, path, parameters=None): - """ - File transfer utility. Export the model to disk. - - Performed by master solver. - - :type path: str - :param path: path to save model - :type parameters: list - :param parameters: list of parameters that define the model - """ - if parameters is None: - parameters = self.parameters - - if self.taskid == 0: - unix.mkdir(path) - for key in parameters: - files = glob(os.path.join(self.model_databases, f"*{key}.bin")) - unix.cp(files, path) - - def export_kernels(self, path): - """ - File transfer utility. Export kernels to disk - - :type path: str - :param path: path to save kernels - """ - if self.taskid == 0: - self.logger.debug(f"exporting kernels to:\n{path}") - - unix.cd(self.kernel_databases) - - # Work around conflicting name conventions - self.rename_kernels() - - src = glob("*_kernel.bin") - dst = os.path.join(path, "kernels", self.source_name) - unix.mkdir(dst) - unix.mv(src, dst) - - def export_residuals(self, path): - """ - File transfer utility. Export residuals to disk. - - :type path: str - :param path: path to save residuals - """ - if self.taskid == 0: - self.logger.debug(f"exporting residuals to:\n{path}") - - unix.mkdir(os.path.join(path, "residuals")) - src = os.path.join(self.cwd, "residuals") - - # If this residuals directory has not been created, something - # has gone wrong with the preprocessing and workflow cannot proceed - if not os.path.exists(src): - print(msg.cli("The Solver function 'export_residuals' expected " - "'residuals' directories to be created but could not " - "find them and cannot continue the workflow. Please " - "check the preprocess.prepare_eval_grad() function", - header="preprocess error", border="=")) - sys.exit(-1) - - dst = os.path.join(path, "residuals", self.source_name) - unix.mv(src, dst) - - def export_traces(self, path, prefix="traces/obs"): - """ - File transfer utility. Export traces to disk. - - :type path: str - :param path: path to save traces - :type prefix: str - :param prefix: location of traces w.r.t self.cwd - """ - if self.taskid == 0: - self.logger.debug("exporting traces to {path} {prefix}") - - unix.mkdir(os.path.join(path)) - - src = os.path.join(self.cwd, prefix) - dst = os.path.join(path, self.source_name) - unix.cp(src, dst) - - def rename_kernels(self): - """ - Works around conflicting kernel filename conventions by renaming - `alpha` to `vp` and `beta` to `vs` - """ - # Rename 'alpha' to 'vp' - for tag in ["alpha", "alpha[hv]", "reg1_alpha", "reg1_alpha[hv]"]: - names = glob(f"*proc??????_{tag}_kernel.bin") - unix.rename(old="alpha", new="vp", names=names) - - # Rename 'beta' to 'vs' - for tag in ["beta", "beta[hv]", "reg1_beta", "reg1_beta[hv]"]: - names = glob(f"*proc??????_{tag}_kernel.bin") - unix.rename(old="beta", new="vs", names=names) - - def rename_data(self, path): - """ - Optional method to rename data to work around conflicting naming schemes - for data outputted by the solver - - !!! Can be implemented by subclass !!! - """ - pass - - def initialize_solver_directories(self): - """ - Creates directory structure expected by SPECFEM3D (bin/, DATA/) copies - executables, and prepares input files. Executables must be supplied - by user as there is no mechanism for automatically compiling from source - - Directories will act as completely independent Specfem run directories. - This allows for embarrassing parallelization while avoiding the need - for intra-directory communications, at the cost of redundancy and - extra files. - """ - if self.taskid == 0: - self.logger.info(f"initializing {PAR.NTASK} solver directories") - - unix.mkdir(self.cwd) - unix.cd(self.cwd) - - # Create directory structure - for cwd_dir in ["bin", "DATA", "OUTPUT_FILES/DATABASES_MPI", - "traces/obs", "traces/syn", "traces/adj", - self.model_databases, self.kernel_databases]: - unix.mkdir(cwd_dir) - - # Copy exectuables into the bin/ directory - src = glob(os.path.join(PATH.SPECFEM_BIN, "*")) - dst = os.path.join("bin", "") - unix.cp(src, dst) - - # Copy all input files except source files - src = glob(os.path.join(PATH.SPECFEM_DATA, "*")) - src = [_ for _ in src if self.source_prefix not in _] - dst = os.path.join("DATA", "") - unix.cp(src, dst) - - # Symlink event source specifically, strip the source name as SPECFEM - # just expects `source_name` - src = os.path.join(PATH.SPECFEM_DATA, - f"{self.source_prefix}_{self.source_name}") - dst = os.path.join("DATA", self.source_prefix) - unix.ln(src, dst) - - if self.taskid == 0: - mainsolver = os.path.join(PATH.SOLVER, "mainsolver") - # Symlink taskid_0 as mainsolver in solver directory for convenience - if not os.path.exists(mainsolver): - unix.ln(self.cwd, mainsolver) - self.logger.debug(f"source {self.source_name} symlinked as " - f"mainsolver") - else: - # Copy the initial model from mainsolver into current directory - # Avoids the need to run multiple instances of xgenerate_databases - src = os.path.join(PATH.SOLVER, "mainsolver", "OUTPUT_FILES", - "DATABASES_MPI") - dst = os.path.join(self.cwd, "OUTPUT_FILES", "DATABASES_MPI") - unix.cp(src, dst) - - self.check_solver_parameter_files() - - def initialize_adjoint_traces(self): - """ - Setup utility: Creates the "adjoint traces" expected by SPECFEM. - This is only done for the 'base' the Preprocess class. - - .. note:: - Adjoint traces are initialized by writing zeros for all channels. - Channels actually in use during an inversion or migration will be - overwritten with nonzero values later on. - """ - if PAR.PREPROCESS.lower() == "default": - if self.taskid == 0: - self.logger.debug(f"intializing {len(self.data_filenames)} " - f"empty adjoint traces per event") - - for filename in self.data_filenames: - st = preprocess.reader( - path=os.path.join(self.cwd, "traces", "obs"), - filename=filename - ) - # Zero out data just so we have empty adjoint traces as SPECFEM - # will expect all adjoint sources to have all components - st *= 0 - - # Write traces back to the adjoint trace directory - preprocess.writer(st=st, filename=filename, - path=os.path.join(self.cwd, "traces", "adj") - ) - - def check_mesh_properties(self, path=None): - """ - Determine if Mesh properties are okay for workflow - - :type path: str - :param path: path to the mesh file - """ - # Check the given model path or the initial model - if path is None: - path = PATH.MODEL_INIT - - if not exists(path): - print(msg.cli(f"The following mesh path does not exist but should", - items=[path], header="solver error", border="=")) - sys.exit(-1) - - # Count slices and grid points - key = self.parameters[0] - iproc = 0 - ngll = [] - while True: - dummy = self.io.read_slice(path=path, parameters=key, - iproc=iproc)[0] - ngll += [len(dummy)] - iproc += 1 - if not exists(os.path.join(path, - f"proc{int(iproc):06d}_{key}.bin")): - break - nproc = iproc - - # Create coordinate pointers - # !!! This partial is incorrectly defined and does not execute when - # !!! called. What is the point of that? - coords = Struct() - for key in ['x', 'y', 'z']: - coords[key] = partial(self.io.read_slice, self, path, key) - - # Define internal mesh properties - self._mesh_properties = Struct([["nproc", nproc], - ["ngll", ngll], - ["path", path], - ["coords", coords]] - ) - - def check_source_names(self): - """ - Determines names of sources by applying wildcard rule to - user-supplied input files - - .. note:: - Source list is sorted and collected from start up to PAR.NTASK - """ - # Apply wildcard rule and check for available sources, exit if no - # sources found because then we can't proceed - wildcard = f"{self.source_prefix}_*" - fids = sorted(glob(os.path.join(PATH.SPECFEM_DATA, wildcard))) - if not fids: - print(msg.cli("No matching source files when searching PATH for" - "the given WILDCARD", - items=[f"PATH: {PATH.SPECFEM_DATA}", - f"WILDCARD: {wildcard}"], header="error" - ) - ) - sys.exit(-1) - - # Create internal definition of sources names by stripping prefixes - names = [os.path.basename(fid).split("_")[-1] for fid in fids] - self._source_names = names[:PAR.NTASK] - - def check_solver_parameter_files(self): - """ - Optional method - - !!! Can be implemented by subclass !!! - """ - pass - - @property - def taskid(self): - """ - Returns the currently running process for embarassingly parallelized - tasks. - - :rtype: int - :return: task id for given solver - """ - return system.taskid() - - @property - def source_name(self): - """ - Returns name of source currently under consideration - - :rtype: str - :return: given source name for given task id - """ - return self.source_names[self.taskid] - - @property - def cwd(self): - """ - Returns working directory currently in use - - :rtype: str - :return: current solver working directory - """ - return os.path.join(PATH.SOLVER, self.source_name) - - @property - def source_names(self): - """ - Returns list of source names - - :rtype: list - :return: list of source names - """ - if self._source_names is None: - self.check_source_names() - - return self._source_names - - @property - def mesh_properties(self): - """ - Returns mesh properties - - :rtype: Struct - :return: Structure of mesh properties - """ - if self._mesh_properties is None: - self.check_mesh_properties() - - return self._mesh_properties - - @property - def data_filenames(self): - """ - Template filenames for accessing data - - !!! Must be implemented by subclass !!! - """ - return NotImplementedError - - @property - def model_databases(self): - """ - Template filenames for accessing models - - !!! Must be implemented by subclass !!! - """ - return NotImplementedError - - @property - def kernel_databases(self): - """ - Template filenames for accessing kernels - - !!! Must be implemented by subclass !!! - """ - return NotImplementedError - - @property - def source_prefix(self): - """ - Template filenames for accessing sources - - !!! Must be implemented by subclass !!! - """ - return NotImplementedError - - diff --git a/seisflows/solver/specfem.py b/seisflows/solver/specfem.py new file mode 100644 index 00000000..b6954794 --- /dev/null +++ b/seisflows/solver/specfem.py @@ -0,0 +1,854 @@ +#!/usr/bin/env python3 +""" +This Solver module is in charge of interacting with external numerical solvers +such as SPECFEM (2D/3D/3D_GLOBE). This SPECFEM base class provides general +functions that work with all versions of SPECFEM. Subclasses will provide +additional capabilities unique to each version of SPECFEM. + +.. note:: + The Base class implementation is almost completely SPECFEM2D related. + However, SPECFEM2D requires a few unique parameters that 3D/3D_GLOBE + do not. Because of the inheritance architecture of SeisFlows, we do not + want the 3D and 3D_GLOBE versions to inherit 2D-specific parameters, so + we need this this more generalized SPECFEM base class. + +TODO + - add in `apply_hess` functionality that was partially written in legacy code + - move `_initialize_adjoint_traces` to workflow.migration + - Add density scaling based on Vp? +""" +import os +import sys +import subprocess +from glob import glob + +from seisflows import logger +from seisflows.tools import msg, unix +from seisflows.tools.config import get_task_id, Dict +from seisflows.tools.specfem import getpar, setpar, check_source_names + + +class Specfem: + """ + Solver SPECFEM + -------------- + Defines foundational structure for Specfem-based solver module. + Generalized SPECFEM interface to manipulate SPECFEM2D/3D/3D_GLOBE w/ Python + + Parameters + ---------- + :type data_format: str + :param data_format: data format for reading traces into memory. + Available: ['SU': seismic unix format, 'ASCII': human-readable ascii] + :type materials: str + :param materials: Material parameters used to define model. Available: + ['ELASTIC': Vp, Vs, 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC'] + :type density: bool + :param density: How to treat density during inversion. If True, updates + density during inversion. If False, keeps it constant. + TODO allow density scaling during an inversion + :type attenuation: bool + :param attenuation: How to treat attenuation during inversion. + if True, turns on attenuation during forward simulations only. If + False, attenuation is always set to False. Requires underlying + attenution (Q_mu, Q_kappa) model + :type smooth_h: float + :param smooth_h: Gaussian half-width for horizontal smoothing in units + of meters. If 0., no smoothing applied. Only applicable for workflows: + ['migration', 'inversion'], ignored for 'forward' workflow. + :type smooth_h: float + :param smooth_v: Gaussian half-width for vertical smoothing in units + of meters. Only applicable for workflows: ['migration', 'inversion'], + ignored for 'forward' workflow. + :type components: str + :param components: components to consider and tag data with. Should be + string of letters such as 'RTZ' + :type solver_io: str + :param solver_io: format of model/kernel/gradient files expected by the + numerical solver. Available: ['fortran_binary': default .bin files]. + TODO: ['adios': ADIOS formatted files] + :type source_prefix: str + :param source_prefix: prefix of source/event/earthquake files. If None, + will attempt to guess based on the specific solver chosen. + :type mpiexec: str + :param mpiexec: MPI executable used to run parallel processes. Should also + be defined for the system module + + Paths + ----- + :type path_data: str + :param path_data: path to any externally stored data required by the solver + :type path_specfem_bin: str + :param path_specfem_bin: path to SPECFEM bin/ directory which + contains binary executables for running SPECFEM + :type path_specfem_data: str + :param path_specfem_data: path to SPECFEM DATA/ directory which must + contain the CMTSOLUTION, STATIONS and Par_file files used for + running SPECFEM + *** + """ + def __init__(self, data_format="ascii", materials="acoustic", + density=False, nproc=1, ntask=1, attenuation=False, + smooth_h=0., smooth_v=0., components="ZNE", + source_prefix=None, mpiexec=None, workdir=os.getcwd(), + path_solver=None, path_eval_grad=None, + path_data=None, path_specfem_bin=None, path_specfem_data=None, + path_model_init=None, path_model_true=None, path_output=None, + **kwargs): + """ + Set default SPECFEM interface parameters + + .. note:: + Paths listed here are shared with `workflow.forward` and so are not + included in the class docstring. + + :type workdir: str + :param workdir: working directory in which to look for data and store + results. Defaults to current working directory + :type path_solver: str + :param path_solver: scratch path for all solver related tasks + :type path_model_init: str + :param path_model_init: path to the starting model used to calculate the + initial misfit. Must match the expected `solver_io` format. + :type path_model_true: str + :param path_model_true: path to a target model if `case`=='synthetic' and + a set of synthetic 'observations' are required for workflow. + :type path_output: str + :param path_output: shared output directory on disk for more permanent + storage of solver related files such as traces, kernels, gradients. + """ + # Publically accessible parameters + self.data_format = data_format + self.materials = materials + self.nproc = nproc + self.ntask = ntask + self.density = density + self.attenuation = attenuation + self.smooth_h = smooth_h + self.smooth_v = smooth_v + self.components = components + # self.solver_io = solver_io # currently not used + self.source_prefix = source_prefix or "SOURCE" + + # Define internally used directory structure + self.path = Dict( + scratch=path_solver or os.path.join(workdir, "scratch", "solver"), + eval_grad=path_eval_grad or + os.path.join(workdir, "scratch", "evalgrad"), + data=path_data or os.path.join(workdir, "SFDATA"), + output=path_output or os.path.join(workdir, "output"), + specfem_bin=path_specfem_bin, + specfem_data=path_specfem_data, + model_init=path_model_init, + model_true=path_model_true, + ) + self.path.mainsolver = os.path.join(self.path.scratch, "mainsolver") + + # Private internal parameters for keeping track of solver requirements + self._parameters = [] + if self.density: + self._parameters.append("rho") + + self._mpiexec = mpiexec + self._source_names = None # for property source_names + self._ext = None # for database file extensions + + # Define available choices for check parameters + self._available_model_types = ["gll"] + self._available_materials = [ + "ELASTIC", "ACOUSTIC", # specfem2d, specfem3d + "ISOTROPIC", "ANISOTROPIC" # specfem3d_globe + ] + self._available_data_formats = ["ASCII", "SU"] + self._required_binaries = ["xspecfem2D", "xmeshfem2D", "xcombine_sem", + "xsmooth_sem"] + self._acceptable_source_prefixes = ["SOURCE", "FORCE", "FORCESOLUTION"] + + def check(self): + """ + Checks parameter validity for SPECFEM input files and model parameters + """ + assert(self.materials.upper() in self._available_materials), \ + f"solver.materials must be in {self._available_materials}" + + if self.data_format.upper() not in self._available_data_formats: + raise NotImplementedError( + f"solver.data_format must be {self._available_data_formats}" + ) + + # Check that User has provided appropriate binary files to run SPECFEM + assert(self.path.specfem_bin is not None and + os.path.exists(self.path.specfem_bin)), ( + f"`path_specfem_bin` must exist and must point to directory " + f"containing SPECFEM executables" + ) + for fid in self._required_binaries: + assert(os.path.exists(os.path.join(self.path.specfem_bin, fid))), ( + f"`path_specfem_bin`/{fid} does not exist but is required by " + f"SeisFlows solver module" + ) + + # Check that SPECFEM/DATA directory exists + assert(self.path.specfem_data is not None and + os.path.exists(self.path.specfem_data)), ( + f"`path_specfem_data` must exist and must point to directory " + f"containing SPECFEM input files" + ) + for fid in ["STATIONS", "Par_file"]: + assert(os.path.exists(os.path.join(self.path.specfem_data, fid))), ( + f"DATA/{fid} does not exist but is required by SeisFlows solver" + ) + + # Make sure source files exist and are appropriately labeled + assert(self.source_prefix in self._acceptable_source_prefixes), ( + f"SPECFEM `source_prefix` must be in " + f"{self._acceptable_source_prefixes}" + ) + assert(glob(os.path.join(self.path.specfem_data, + f"{self.source_prefix}*"))), ( + f"No source files with prefix {self.source_prefix} found in DATA/") + + # Check that model type is set correctly in the Par_file + model_type = getpar(key="MODEL", + file=os.path.join(self.path.specfem_data, + "Par_file"))[1] + assert(model_type in self._available_model_types), ( + f"SPECFEM Par_file parameter `model`='{model_type}' does not " + f"match acceptable model types: {self._available_model_types}" + ) + + # Assign file extensions to be used for database file searching + if model_type == "gll": + self._ext = ".bin" + + # Make sure the initial model is set and actually contains files + assert(self.path.model_init is not None and + os.path.exists(self.path.model_init)), \ + f"`path_model_init` is required for the solver, but does not exist" + + assert(len(glob(os.path.join(self.path.model_init, "*")))), \ + f"`path_model_init` is empty but should have model files" + + if self.path.model_true is not None: + assert(os.path.exists(self.path.model_true)), \ + f"`path_model_true` is provided but does not exist" + assert(len(glob(os.path.join(self.path.model_true, "*")))), \ + f"`path_model_true` is empty but should have model files" + + # Check that the number of tasks/events matches the number of events + self._source_names = check_source_names( + path_specfem_data=self.path.specfem_data, + source_prefix=self.source_prefix, ntask=self.ntask + ) + + assert(isinstance(self.density, bool)), \ + f"solver `density` must be True (variable) or False (constant)" + + @property + def source_names(self): + """ + Returns list of source names which should be stored in PAR.SPECFEM_DATA + Source names are expected to match the following wildcard, + 'PREFIX_*' where PREFIX is something like 'CMTSOLUTION' or 'FORCE' + + .. note:: + Dependent on environment variable 'SEISFLOWS_TASKID' which is + assigned by system.run() to each individually running process. + + :rtype: list + :return: list of source names + """ + if self._source_names is None: + self._source_names = check_source_names( + path_specfem_data=self.path.specfem_data, + source_prefix=self.source_prefix, ntask=self.ntask + ) + return self._source_names + + @property + def source_name(self): + """ + Returns name of source currently under consideration + + .. note:: + Dependent on environment variable 'SEISFLOWS_TASKID' which is + assigned by system.run() to each individually running process. + + :rtype: str + :return: given source name for given task id + """ + return self.source_names[get_task_id()] + + @property + def cwd(self): + """ + Returns working directory currently in use by a running solver instance + + .. note:: + Dependent on environment variable 'SEISFLOWS_TASKID' which is + assigned by system.run() to each individually running process. + + :rtype: str + :return: current solver working directory + """ + return os.path.join(self.path.scratch, self.source_name) + + def data_wildcard(self, comp="?"): + """ + Returns a wildcard identifier for synthetic data based on SPECFEM2D + file naming schema. Allows formatting dcomponent e.g., + when called by solver.data_filenames. + + .. note:: + SPECFEM3D/3D_GLOBE versions must overwrite this function + + :type comp: str + :param comp: component formatter, defaults to wildcard '?' + :rtype: str + :return: wildcard identifier for channels + """ + if self.data_format.upper() == "SU": + return f"U{comp}_file_single.su" + elif self.data_format.upper() == "ASCII": + return f"*.?X{comp}.sem?" + + def data_filenames(self, choice="obs"): + """ + Returns the filenames of SPECFEM2D data, either by the requested + components or by all available files in the directory. + + .. note:: + SPECFEM3D/3D_GLOBE versions must overwrite this function + + .. note:: + If the glob returns an empty list, this function exits the + workflow because filenames should not be empty is they're being + queried + + :rtype: list + :return: list of data filenames + """ + assert(choice in ["obs", "syn", "adj"]), \ + f"choice must be: 'obs', 'syn' or 'adj'" + + if self.components: + comp_glob = f"[{self.components}]" # e.g., [NEZ] + else: + comp_glob = "?" + data_wildcard = self.data_wildcard(comp=comp_glob) + file_glob = os.path.join(self.cwd, "traces", choice, data_wildcard) + filenames = glob(file_glob) + + if not filenames: + logger.critical( + msg.cli("The property `solver.data_filenames`, used to search " + "for waveform files, is empty and should not be. " + "Please check solver parameters: ", + items=[f"failed wildcard: {file_glob}"], + header="data filenames error", border="=") + ) + sys.exit(-1) + + return filenames + + @property + def model_databases(self): + """ + The location of model inputs and outputs as defined by SPECFEM2D. + This is RELATIVE to a SPECFEM2D working directory. + + .. note:: + This path is SPECFEM version dependent so SPECFEM3D/3D_GLOBE + versions must overwrite this function + + :rtype: str + :return: path where SPECFEM2D database files are stored, relative to + `solver.cwd` + """ + return "DATA" + + @property + def model_files(self): + """ + Return a list of paths to model files that match the internal parameter + list. Used to generate model vectors of the same length as gradients. + + :rtype: list + :return: a list of full paths to model files that matches the internal + list of solver parameters + """ + _model_files = [] + for parameter in self._parameters: + _model_files += glob(os.path.join(self.path.mainsolver, + self.model_databases, + f"*{parameter}{self._ext}")) + return _model_files + + @property + def kernel_databases(self): + """ + The location of kernel inputs and outputs as defined by SPECFEM2D + This is RELATIVE to a SPECFEM2D working directory. + + .. note:: + This path is SPECFEM version dependent so SPECFEM3D/3D_GLOBE + versions must overwrite this function + + :rtype: str + :return: path where SPECFEM2D database files are stored, relative to + `solver.cwd` + """ + return "OUTPUT_FILES" + + def setup(self): + """ + Prepares solver scratch directories for an impending workflow. + + Sets up directory structure expected by SPECFEM and copies or generates + seismic data to be inverted or migrated. + + Exports INIT/STARTING and TRUE/TARGET models to disk (output/ dir.) + """ + self._initialize_working_directories() + self._export_starting_models() + + def forward_simulation(self, executables=None, save_traces=False, + export_traces=False, **kwargs): + """ + Wrapper for SPECFEM binaries: 'xmeshfem?D' 'xgenerate_databases', + 'xspecfem?D' + + Calls SPECFEM2D forward solver, exports solver outputs to traces dir + + .. note:: + SPECFEM3D/3D_GLOBE versions must overwrite this function + + :type executables: list or None + :param executables: list of SPECFEM executables to run, in order, to + complete a forward simulation. This can be left None in most cases, + which will select default values based on the specific solver + being called (2D/3D/3D_GLOBE). It is made an optional parameter + to keep the function more general for inheritance purposes. + :type save_traces: str + :param save_traces: move files from their native SPECFEM output location + to another directory. This is used to move output waveforms to + 'traces/obs' or 'traces/syn' so that SeisFlows knows where to look + for them, and so that SPECFEM doesn't overwrite existing files + during subsequent forward simulations + :type export_traces: str + :param export_traces: export traces from the scratch directory to a more + permanent storage location. i.e., copy files from their original + location + """ + if executables is None: + executables = ["bin/xmeshfem2D", "bin/xspecfem2D"] + + unix.cd(self.cwd) + setpar(key="SIMULATION_TYPE", val="1", file="DATA/Par_file") + setpar(key="SAVE_FORWARD", val=".true.", file="DATA/Par_file") + + # Calling subprocess.run() for each of the binary executables listed + for exc in executables: + # e.g., fwd_mesher.log + stdout = f"fwd_{self._exc2log(exc)}.log" + self._run_binary(executable=exc, stdout=stdout) + + # Work around SPECFEM's version dependent file names + if self.data_format.upper() == "SU": + for tag in ["d", "v", "a", "p"]: + unix.rename(old=f"single_{tag}.su", new="single.su", + names=glob(os.path.join("OUTPUT_FILES", "*.su"))) + # Exporting traces to disk (output/) for more permanent storage + if export_traces: + if not os.path.exists(export_traces): + unix.mkdir(export_traces) + unix.cp( + src=glob(os.path.join("OUTPUT_FILES", self.data_wildcard())), + dst=export_traces + ) + # Save traces somewhere else in the scratch/ directory for easier access + if save_traces: + if not os.path.exists(save_traces): + unix.mkdir(save_traces) + unix.mv( + src=glob(os.path.join("OUTPUT_FILES", self.data_wildcard())), + dst=save_traces + ) + + def adjoint_simulation(self, executables=None, save_kernels=False, + export_kernels=False): + """ + Wrapper for SPECFEM binary 'xspecfem?D' + + Calls SPECFEM2D adjoint solver, creates the `SEM` folder with adjoint + traces which is required by the adjoint solver. Renames kernels + after they have been created from 'alpha' and 'beta' to 'vp' and 'vs', + respectively. + + .. note:: + SPECFEM3D/3D_GLOBE versions must overwrite this function + + :type executables: list or None + :param executables: list of SPECFEM executables to run, in order, to + complete an adjoint simulation. This can be left None in most cases, + which will select default values based on the specific solver + being called (2D/3D/3D_GLOBE). It is made an optional parameter + to keep the function more general for inheritance purposes. + :type save_kernels: str + :param save_kernels: move the kernels from their native SPECFEM output + location to another path. This is used to move kernels to another + SeisFlows scratch directory so that they are discoverable by + other modules. The typical location they are moved to is + path_eval_grad + :type export_kernels: str + :param export_kernels: export/copy/save kernels from the scratch + directory to a more permanent storage location. i.e., copy files + from their original location. Note that kernel file sizes are LARGE, + so exporting kernels can lead to massive storage requirements. + """ + if executables is None: + executables = ["bin/xspecfem2D"] + + unix.cd(self.cwd) + + setpar(key="SIMULATION_TYPE", val="3", file="DATA/Par_file") + setpar(key="SAVE_FORWARD", val=".false.", file="DATA/Par_file") + + unix.rm("SEM") + unix.ln("traces/adj", "SEM") + + # Calling subprocess.run() for each of the binary executables listed + for exc in executables: + # e.g., adj_solver.log + stdout = f"adj_{self._exc2log(exc)}.log" + logger.info(f"running SPECFEM executable {exc}, log to '{stdout}'") + self._run_binary(executable=exc, stdout=stdout) + + # Rename kernels to work w/ conflicting name conventions + # Change directory so that the rename doesn't affect the full path + unix.cd(self.kernel_databases) + logger.debug(f"renaming output event kernels: 'alpha' -> 'vp'") + for tag in ["alpha", "alpha[hv]", "reg1_alpha", "reg1_alpha[hv]"]: + names = glob(f"*proc??????_{tag}_kernel{self._ext}") + unix.rename(old="alpha", new="vp", names=names) + + logger.debug(f"renaming output event kernels: 'beta' -> 'vs'") + for tag in ["beta", "beta[hv]", "reg1_beta", "reg1_beta[hv]"]: + names = glob(f"*proc??????_{tag}_kernel{self._ext}") + unix.rename(old="beta", new="vs", names=names) + + # Save and export the kernels to user-defined locations + if export_kernels: + unix.mkdir(export_kernels) + for par in self._parameters: + unix.cp(src=glob(f"*{par}_kernel{self._ext}"), + dst=export_kernels) + + if save_kernels: + unix.mkdir(save_kernels) + for par in self._parameters: + unix.mv(src=glob(f"*{par}_kernel{self._ext}"), dst=save_kernels) + + def combine(self, input_path, output_path, parameters=None): + """ + Wrapper for 'xcombine_sem'. + Sums kernels from individual source contributions to create gradient. + + .. note:: + The binary xcombine_sem simply sums matching databases + + .. note:: + It is ASSUMED that this function is being called by + system.run(single=True) so that we can use the main solver + directory to perform the kernel summation task + + :type input_path: str + :param input_path: path to data + :type output_path: strs + :param output_path: path to export the outputs of xcombine_sem + :type parameters: list + :param parameters: optional list of parameters, + defaults to `self._parameters` + """ + unix.cd(self.cwd) + + if parameters is None: + parameters = self._parameters + + if not os.path.exists(output_path): + unix.mkdir(output_path) + + # Write the source names into the kernel paths file for SEM/ directory + with open("kernel_paths", "w") as f: + f.writelines( + [os.path.join(input_path, f"{name}\n") + for name in self.source_names] + ) + + # Call on xcombine_sem to combine kernels into a single file + for name in parameters: + # e.g.: mpiexec bin/xcombine_sem alpha_kernel kernel_paths output/ + exc = f"bin/xcombine_sem {name}_kernel kernel_paths {output_path}" + # e.g., smooth_vp.log + stdout = f"{self._exc2log(exc)}_{name}.log" + self._run_binary(executable=exc, stdout=stdout) + + def smooth(self, input_path, output_path, parameters=None, span_h=None, + span_v=None, use_gpu=False): + """ + Wrapper for SPECFEM binary: xsmooth_sem + Smooths kernels by convolving them with a 3D Gaussian + + .. note:: + It is ASSUMED that this function is being called by + system.run(single=True) so that we can use the main solver + directory to perform the kernel smooth task + + :type input_path: str + :param input_path: path to data + :type output_path: str + :param output_path: path to export the outputs of xcombine_sem + :type parameters: list + :param parameters: optional list of parameters, + defaults to `self._parameters` + :type span_h: float + :param span_h: horizontal smoothing length in meters + :type span_v: float + :param span_v: vertical smoothing length in meters + :type use_gpu: bool + :param use_gpu: whether to use GPU acceleration for smoothing. Requires + GPU compiled binaries and GPU compute node. + """ + unix.cd(self.cwd) + + # Assign some default parameters from class attributes if not given + if parameters is None: + parameters = self._parameters + if span_h is None: + span_h = self.smooth_h + if span_v is None: + span_v = self.smooth_v + + logger.debug(f"smoothing {parameters} with horizontal Gaussian " + f"{span_h}m and vertical Gaussian {span_v}m") + + if not os.path.exists(output_path): + unix.mkdir(output_path) + + # Ensure trailing '/' character, required by xsmooth_sem + input_path = os.path.join(input_path, "") + output_path = os.path.join(output_path, "") + if use_gpu: + use_gpu = ".true" + else: + use_gpu = ".false" + # mpiexec ./bin/xsmooth_sem SMOOTH_H SMOOTH_V name input output use_gpu + for name in parameters: + exc = (f"bin/xsmooth_sem {str(span_h)} {str(span_v)} {name}_kernel " + f"{input_path} {output_path} {use_gpu}") + # e.g., combine_vs.log + stdout = f"{self._exc2log(exc)}_{name}.log" + self._run_binary(executable=exc, stdout=stdout) + + # Rename output files to remove the '_smooth' suffix which SeisFlows + # will not recognize + files = glob(os.path.join(output_path, "*")) + unix.rename(old="_smooth", new="", names=files) + + def _run_binary(self, executable, stdout="solver.log", with_mpi=True): + """ + Calls MPI solver executable to run solver binaries, used by individual + processes to run the solver on system. If the external solver returns a + non-zero exit code (failure), this function will return a negative + boolean. + + .. note:: + This function ASSUMES it is being run from a SPECFEM working + directory, i.e., that the executables are located in ./bin/ + + .. note:: + This is essentially an error-catching wrapper of subprocess.run() + + :type executable: str + :param executable: executable function to call. May or may not start + E.g., acceptable calls for the solver would './bin/xspecfem2D'. + Also accepts additional command line arguments such as: + 'xcombine_sem alpha_kernel kernel_paths...' + :type stdout: str + :param stdout: where to redirect stdout + :type with_mpi: bool + :param with_mpi: If `mpiexec` is given, use MPI to run the executable. + Some executables (e.g., combine_vol_data_vtk) must be run in + serial so this flag allows them to turn off MPI running. + :raises SystemExit: If external numerical solver return any failure + code while running + """ + # Executable may come with additional sub arguments, we only need to + # check that the actually executable exists + if not unix.which(executable.split(" ")[0]): + logger.critical(msg.cli(f"executable '{executable}' does not exist", + header="external solver error", border="=")) + sys.exit(-1) + + # Prepend with `mpiexec` if we are running with MPI + # looks something like: `mpirun -n 4 ./bin/xspecfem2d` + if self._mpiexec and with_mpi: + executable = f"{self._mpiexec} -n {self.nproc} {executable}" + logger.debug(f"running executable with cmd: '{executable}'") + + try: + with open(stdout, "w") as f: + subprocess.run(executable, shell=True, check=True, stdout=f, + stderr=f) + except (subprocess.CalledProcessError, OSError) as e: + logger.critical( + msg.cli("The external numerical solver has returned a " + "nonzero exit code (failure). Consider stopping any " + "currently running jobs to avoid wasted " + "computational resources. Check 'scratch/solver/" + f"mainsolver/{stdout}' for the solvers stdout log " + "message. The failing command and error message are:", + items=[f"exc: {executable}", f"err: {e}"], + header="external solver error", + border="=") + ) + sys.exit(-1) + + @staticmethod + def _exc2log(exc): + """ + Very simple conversion utility to get log file names based on binaries. + e.g., binary 'xspecfem2D' will return 'solver'. Helps keep log file + naming consistent and generalizable + + TODO add a check here to see if the log file exists, and then use + `number_fid` to increment so that we keep all the output logs + + :type exc: str + :param exc: specfem executable, e.g., xspecfem2D, xgenerate_databases + :rtype: str + :return: logfile name that matches executable name + """ + convert_dict = {"specfem": "solver", "meshfem": "mesher", + "generate_databases": "mesher", "smooth": "smooth", + "combine": "combine"} + for key, val in convert_dict.items(): + if key in exc: + return val + else: + return "logger" + + def import_model(self, path_model): + """ + Copy files from given `path_model` into the current working directory + model database. Used for grabbing starting models (e.g., MODEL_INIT) + and models that have been perturbed by the optimization library. + + :type path_model: str + :param path_model: path to an existing starting model + """ + assert(os.path.exists(path_model)), f"model {path_model} does not exist" + unix.cd(self.cwd) + + # Copy the model files (ex: proc000023_vp.bin ...) into database dir + src = glob(os.path.join(path_model, f"*{self._ext}")) + dst = os.path.join(self.cwd, self.model_databases, "") + unix.cp(src, dst) + + def _initialize_working_directories(self): + """ + Serial task used to initialize working directories for each of the a + available sources + """ + logger.info(f"initializing {self.ntask} solver directories") + for source_name in self.source_names: + cwd = os.path.join(self.path.scratch, source_name) + if os.path.exists(cwd): + continue + self._initialize_working_directory(cwd=cwd) + + def _initialize_working_directory(self, cwd=None): + """ + Creates scratch directory structure expected by SPECFEM + (i.e., bin, DATA, OUTPUT_FILES). Copies executables (bin) and + input data (DATA) directories, prepares simulation input files. + + Each directory will act as completely independent Specfem working dir. + This allows for embarrassing parallelization while avoiding the need + for intra-directory communications, at the cost of temporary disk space. + + .. note:: + path to binary executables must be supplied by user as SeisFlows has + no mechanism for automatically compiling from source code. + + :type cwd: str + :param cwd: optional scratch working directory to intialize. If None, + will set based on current running seisflows task (self.taskid) + """ + # Define a constant list of required SPECFEM dir structure, relative cwd + _required_structure = {"bin", "DATA", "traces/obs", "traces/syn", + "traces/adj", self.model_databases, + self.kernel_databases} + + # Allow this function to be called on system or in serial + if cwd is None: + cwd = self.cwd + source_name = self.source_name + else: + source_name = os.path.basename(cwd) + + logger.debug(f"initializing solver directory source: {source_name}") + + # Starting from a fresh working directory + unix.rm(cwd) + unix.mkdir(cwd) + for dir_ in _required_structure: + unix.mkdir(os.path.join(cwd, dir_)) + + # Copy existing SPECFEM exectuables into the bin/ directory + src = glob(os.path.join(self.path.specfem_bin, "*")) + dst = os.path.join(cwd, "bin", "") + unix.cp(src, dst) + + # Copy all input DATA/ files except the source files + src = glob(os.path.join(self.path.specfem_data, "*")) + src = [_ for _ in src if self.source_prefix not in _] + dst = os.path.join(cwd, "DATA", "") + unix.cp(src, dst) + + # Symlink event source specifically, only retain source prefix + src = os.path.join(self.path.specfem_data, + f"{self.source_prefix}_{source_name}") + dst = os.path.join(cwd, "DATA", self.source_prefix) + unix.ln(src, dst) + + # Symlink TaskID==0 as mainsolver in solver directory for convenience + if self.source_names.index(source_name) == 0: + if not os.path.exists(self.path.mainsolver): + logger.debug(f"linking source '{source_name}' as 'mainsolver'") + unix.ln(cwd, self.path.mainsolver) + + def _export_starting_models(self, parameters=None): + """ + Export the initial and target models to the SeisFlows output/ directory. + + :type parameters: list + :param parameters: list of parameters to export. If None, will default + to `self._parameters` + """ + if parameters is None: + parameters = self._parameters + + # Export the initial and target models to the SeisFlows output directory + for name, model in zip(["MODEL_INIT", "MODEL_TRUE"], + [self.path.model_init, self.path.model_true]): + # Skip over if user has not provided model path (e.g., real data + # inversion will not have `model_true`) + if not model: + continue + dst = os.path.join(self.path.output, name, "") + if not os.path.exists(dst): + unix.mkdir(dst) + for par in parameters: + src = glob(os.path.join(model, f"*{par}{self._ext}")) + unix.cp(src, dst) diff --git a/seisflows/solver/specfem2d.py b/seisflows/solver/specfem2d.py index c41a0dc1..996ecc91 100644 --- a/seisflows/solver/specfem2d.py +++ b/seisflows/solver/specfem2d.py @@ -1,433 +1,110 @@ #!/usr/bin/env python3 """ -This is the subclass seisflows.solver.specfem2d - This class provides utilities for the Seisflows solver interactions with -Specfem2D. It inherits all attributes from seisflows.solver.Base, +Specfem2D. It builds upon the base Specfem class which generalizes all solver +interactions with various versions of Specfem. + +TODO + Internal paramater f0 is not currently used. Can we remove or integrate? """ import os -import sys -import logging from glob import glob -from seisflows.tools import unix, msg -from seisflows.tools.wrappers import exists -from seisflows.config import custom_import, SeisFlowsPathsParameters -from seisflows.tools.specfem import call_solver, getpar, setpar - - -PAR = sys.modules['seisflows_parameters'] -PATH = sys.modules['seisflows_paths'] +from seisflows.solver.specfem import Specfem +from seisflows.tools import unix +from seisflows.tools.specfem import getpar, setpar -system = sys.modules['seisflows_system'] -preprocess = sys.modules['seisflows_preprocess'] - -class Specfem2D(custom_import("solver", "base")): +class Specfem2D(Specfem): """ - Python interface to Specfem2D. This subclass inherits functions from - seisflows.solver.Base - - !!! See base class for method descriptions !!! + Solver SPECFEM2D + ---------------- + SPECFEM2D-specific alterations to the base SPECFEM module + + Parameters + ---------- + :type source_prefix: str + :param source_prefix: Prefix of source files in path SPECFEM_DATA. Defaults + to 'SOURCE' + :type multiples: bool + :param multiples: set an absorbing top-boundary condition + + Paths + ----- + *** """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - - :type logger: Logger - :param logger: Class-specific logging module, log statements pushed - from this logger will be tagged by its specific module/classname - """ - super().__init__() - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters(super().required) - - # Define the Parameters required by this module - sf.par("NT", required=True, par_type=float, - docstr="Number of time steps set in the SPECFEM Par_file") - - sf.par("DT", required=True, par_type=float, - docstr="Time step or delta set in the SPECFEM Par_file") - - sf.par("F0", required=True, par_type=float, - docstr="Dominant source frequency") - - sf.par("FORMAT", required=True, par_type=float, - docstr="Format of synthetic waveforms used during workflow, " - "available options: ['ascii', 'su']") - - sf.par("SOURCE_PREFIX", required=False, default="SOURCE", - par_type=str, - docstr="Prefix of SOURCE files in path SPECFEM_DATA. By " - "default, 'SOURCE' for SPECFEM2D") - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths - """ - if validate: - self.required.validate() - - super().check(validate=False) - - acceptable_formats = ["SU", "ASCII"] - assert(PAR.FORMAT.upper() in acceptable_formats), \ - f"FORMAT must be {acceptable_formats}" - - def check_solver_parameter_files(self): - """ - Checks SPECFEM2D Par_file for acceptable parameters and matches with - the internally set parameters - """ - # Check the number of steps in the SPECFEM2D Par_file - nt_str, nt, nt_i = getpar(key="NSTEP", file="DATA/Par_file") - if int(nt) != PAR.NT: - if self.taskid == 0: - print(msg.cli(f"SPECFEM2D {nt_str}=={nt} is not equal " - f"SeisFlows PAR.NT=={PAR.NT}. Please ensure " - f"that these values match in both files.", - header="parameter match error", border="=") - ) - sys.exit(-1) - - dt_str, dt, dt_i = getpar(key="DT", file="DATA/Par_file") - if float(dt) != PAR.DT: - if self.taskid == 0: - print(msg.cli(f"SPECFEM2D {dt_str}=={dt} is not equal " - f"SeisFlows PAR.DT=={PAR.DT}. Please ensure " - f"that these values match in both files.", - header="parameter match error", border="=") - ) - sys.exit(-1) - - # Check the central frequency in the SPECFEM2D SOURCE file - f0_str, f0, f0_i = getpar(key="f0", file="DATA/SOURCE") - if float(f0) != PAR.F0: - if self.taskid == 0: - print(msg.cli(f"SPECFEM2D {f0_str}=={f0} is not equal " - f"SeisFlows PAR.F0=={PAR.F0}. Please ensure " - f"that these values match the DATA/SOURCE file.", - header="parameter match error", border="=") - ) - sys.exit(-1) - - # Ensure that NPROC matches the MESH values - nproc = self.mesh_properties.nproc - if nproc != PAR.NPROC: - if self.taskid == 0: - print(msg.cli(f"SPECFEM2D mesh NPROC=={nproc} is not equal" - f"SeisFlows PAR.NPROC=={PAR.NPROC}. " - f"Please check that your mesh matches this val.", - header="parameter match error", border="=") - ) - sys.exit(-1) - - if "MULTIPLES" in PAR: - if PAR.MULTIPLES: - setpar(key="absorbtop", val=".false.", file="DATA/Par_file") - else: - setpar(key="absorbtop", val=".true.", file="DATA/Par_file") - - def generate_data(self, **model_kwargs): - """ - Generates data using the True model, exports traces to `traces/obs` - - :param model_kwargs: keyword arguments to pass to `generate_mesh` - """ - self.generate_mesh(**model_kwargs) - - unix.cd(self.cwd) - setpar(key="SIMULATION_TYPE", val="1", file="DATA/Par_file") - setpar(key="SAVE_FORWARD", val=".true.", file="DATA/Par_file") - - call_solver(PAR.MPIEXEC, "bin/xmeshfem2D", output="mesher.log") - call_solver(PAR.MPIEXEC, "bin/xspecfem2D", output="solver.log") - - if PAR.FORMAT.upper() == "SU": - # Work around SPECFEM2D's version dependent file names - for tag in ["d", "v", "a", "p"]: - unix.rename(old=f"single_{tag}.su", new="single.su", - names=glob(os.path.join("OUTPUT_FILES", "*.su"))) - - unix.mv(src=glob(os.path.join("OUTPUT_FILES", self.data_wildcard)), - dst=os.path.join("traces", "obs")) - - if PAR.SAVETRACES: - self.export_traces(os.path.join(PATH.OUTPUT, "traces", "obs")) - - def initialize_adjoint_traces(self): - """ - Setup utility: Creates the "adjoint traces" expected by SPECFEM. - This is only done for the 'base' the Preprocess class. - - Note: - Adjoint traces are initialized by writing zeros for all channels. - Channels actually in use during an inversion or migration will be - overwritten with nonzero values later on. - """ - super().initialize_adjoint_traces() - - unix.cd(self.cwd) - unix.cd(os.path.join("traces", "adj")) - - # work around SPECFEM2D's use of different name conventions for - # regular traces and 'adjoint' traces - if PAR.FORMAT.upper() == "SU": - files = glob("*SU") - unix.rename(old="_SU", new="_SU.adj", names=files) - elif PAR.FORMAT.upper() == "ASCII": - files = glob("*sem?") - - # Get the available extensions, which are named based on unit - extensions = set([os.path.splitext(_)[-1] for _ in files]) - for extension in extensions: - unix.rename(old=extension, new=".adj", names=files) - - # SPECFEM2D requires that all components exist even if ununsed - components = ["x", "y", "z", "p"] - - if PAR.FORMAT.upper() == "SU": - for comp in components: - src = f"U{PAR.COMPONENTS[0]}_file_single.su.adj" - dst = f"U{comp.lower()}s_file_single.su.adj" - if not exists(dst): - unix.cp(src, dst) - elif PAR.FORMAT.upper() == "ASCII": - for fid in glob("*.adj"): - net, sta, cha, ext = fid.split(".") - for comp in components: - # Replace the last value in the channel with new component - cha_check = cha[:-1] + comp.upper() - fid_check = ".".join([net, sta, cha_check, ext]) - if not exists(fid_check): - unix.cp(fid, fid_check) - - def generate_mesh(self, model_path, model_name, model_type='gll'): - """ - Performs meshing with internal mesher Meshfem2D and database generation - - :type model_path: str - :param model_path: path to the model to be used for mesh generation - :type model_name: str - :param model_name: name of the model to be used as identification - :type model_type: str - :param model_type: available model types to be passed to the Specfem3D - Par_file. See Specfem3D Par_file for available options. - """ - assert(exists(model_path)), f"model {model_path} does not exist" - - available_model_types = ["gll"] - assert(model_type in available_model_types), \ - f"{model_type} not in available types {available_model_types}" + __doc__ = Specfem.__doc__ + __doc__ - unix.cd(self.cwd) + def __init__(self, source_prefix="SOURCE", multiples=False, **kwargs): + """Instantiate a Specfem2D solver interface""" + super().__init__(source_prefix=source_prefix, **kwargs) - # Run mesh generation - if model_type == "gll": - self.check_mesh_properties(model_path) + self.multiples = multiples + self._f0 = None - # Copy the model files (ex: proc000023_vp.bin ...) into DATA - src = glob(os.path.join(model_path, "*")) - dst = self.model_databases - unix.cp(src, dst) + # Define parameters based on material type + if self.materials.upper() == "ACOUSTIC": + self._parameters += ["vp"] + elif self.materials.upper() == "ELASTIC": + self._parameters += ["vp", "vs"] - # Export the model into output folder - if self.taskid == 0: - self.export_model(os.path.join(PATH.OUTPUT, model_name)) - - def forward(self, path='traces/syn'): + def setup(self): """ - Calls SPECFEM2D forward solver, exports solver outputs to traces dir - - :type path: str - :param path: path to export traces to after completion of simulation + Setup the SPECFEM2D solver interface in a SeisFlows workflow + Append coordinate files to exported model files so that we can use + them for plotting later """ - setpar(key="SIMULATION_TYPE", val="1", file="DATA/Par_file") - setpar(key="SAVE_FORWARD", val=".true.", file="DATA/Par_file") - - call_solver(mpiexec=PAR.MPIEXEC, executable="bin/xmeshfem2D") - call_solver(mpiexec=PAR.MPIEXEC, executable="bin/xspecfem2D") + source_file = os.path.join(self.path.specfem_data, self.source_prefix) + self._f0 = getpar(key="f0", file=source_file)[1] - if PAR.FORMAT.upper() == "SU": - # Work around SPECFEM2D's version dependent file names - for tag in ["d", "v", "a", "p"]: - unix.rename(old=f"single_{tag}.su", new="single.su", - names=glob(os.path.join("OUTPUT_FILES", "*.su"))) - - unix.mv(src=glob(os.path.join("OUTPUT_FILES", self.data_wildcard)), - dst=path) - - def adjoint(self): - """ - Calls SPECFEM2D adjoint solver, creates the `SEM` folder with adjoint - traces which is required by the adjoint solver - """ - setpar(key="SIMULATION_TYPE", val="3", file="DATA/Par_file") - setpar(key="SAVE_FORWARD", val=".false.", file="DATA/Par_file") - - unix.rm("SEM") - unix.ln("traces/adj", "SEM") + par_file = os.path.join(self.path.specfem_data, "Par_file") + if self.multiples: + setpar(key="absorbtop", val=".false.", file=par_file) + else: + setpar(key="absorbtop", val=".true.", file=par_file) - # Deal with different SPECFEM2D name conventions for regular traces and - # "adjoint" traces - if PAR.FORMAT.upper == "SU": - unix.rename(old=".su", new=".su.adj", - names=glob(os.path.join("traces", "adj", "*.su"))) + super().setup() - call_solver(mpiexec=PAR.MPIEXEC, executable="bin/xmeshfem2D") - call_solver(mpiexec=PAR.MPIEXEC, executable="bin/xspecfem2D") + # Copy in coordinate files to the Model definition so we can plot + self._export_starting_models(parameters=["x", "z"]) - def smooth(self, input_path, **kwargs): + def smooth(self, input_path, output_path, parameters=None, span_h=None, + span_v=None, use_gpu=False): """ Specfem2D requires additional model parameters in directory to perform - the xsmooth_sem task. This function will copy these files into the - directory before performing the base smooth operations. + the xsmooth_sem task. This function will copy these files into the + directory before performing the base smooth operations. Kwargs should match arguments of solver.base.smooth() - + .. note:: This operation is usually run with run(single=True) so only one task will be performing these operations. :type input_path: str :param input_path: path to data - """ - # Redundant to 'base' class but necessary - if not exists(input_path): - unix.mkdir(input_path) - - unix.cd(self.cwd) - unix.cd("DATA") - - # Copy over only the files that are required. Won't execute if no match + :type output_path: str + :param output_path: path to export the outputs of xcombine_sem + :type parameters: list + :param parameters: optional list of parameters, + defaults to `self._parameters` + :type span_h: float + :param span_h: horizontal smoothing length in meters + :type span_v: float + :param span_v: vertical smoothing length in meters + :type use_gpu: bool + :param use_gpu: whether to use GPU acceleration for smoothing. Requires + GPU compiled binaries and GPU compute node. + """ + unix.cd(os.path.join(self.cwd, self.model_databases)) + + # SPECFEM2D requires these files to run the smoother files = [] for tag in ["jacobian", "NSPEC_ibool", "x", "y", "z"]: files += glob(f"*_{tag}.bin") for src in files: - unix.cp(src=src, dst=input_path) - - super().smooth(input_path=input_path, **kwargs) - - def import_model(self, path): - """ - File transfer utility to move a SPEFEM2D model into the correct location - for a workflow. - - :type path: str - :param path: path to the SPECFEM2D model - :return: - """ - unix.cp(src=glob(os.path.join(path, "model", "*")), - dst=os.path.join(self.cwd, "DATA") - ) - - def export_model(self, path): - """ - File transfer utility to move a SPEFEM2D model from the DATA directory - to an external path location - - :type path: str - :param path: path to export the SPECFEM2D model - :return: - """ - unix.mkdir(path) - unix.cp(src=glob(os.path.join(self.cwd, "DATA", "*.bin")), - dst=path) - - @property - def data_filenames(self): - """ - Returns the filenames of all data, either by the requested components - or by all available files in the directory. - - .. note:: - If the glob returns an empty list, this function exits the - workflow because filenames should not be empty is they're being - queried - - :rtype: list - :return: list of data filenames - """ - unix.cd(self.cwd) - unix.cd(os.path.join("traces", "obs")) - - if PAR.COMPONENTS: - filenames = [] - if PAR.FORMAT.upper() == "SU": - for comp in PAR.COMPONENTS: - filenames += [self.data_wildcard.format(comp=comp.lower())] - # filenames += [f"U{comp.lower()}_file_single.su"] - elif PAR.FORMAT.upper() == "ASCII": - for comp in PAR.COMPONENTS: - filenames += glob( - self.data_wildcard.format(comp=comp.upper()) - ) - # filenames += glob(f"*.?X{comp.upper()}.sem?") - else: - filenames = glob(self.data_wildcard) - - if not filenames: - print(msg.cli("The property solver.data_filenames, used to search " - "for traces in 'scratch/solver/*/traces' is empty " - "and should not be. Please check solver parameters: ", - items=[f"data_wildcard: {self.data_wildcard}"], - header="data filenames error", border="=") - ) - sys.exit(-1) - - return filenames - - @property - def model_databases(self): - """ - The location of model inputs and outputs as defined by SPECFEM2D - """ - return os.path.join(self.cwd, "DATA") - - @property - def kernel_databases(self): - """ - The location of kernel inputs and outputs as defined by SPECFEM2D - """ - return os.path.join(self.cwd, "OUTPUT_FILES") - - @property - def data_wildcard(self, comp="?"): - """ - Returns a wildcard identifier for synthetic data based on SPECFEM2D - file naming schema. Allows formatting dcomponent e.g., - when called by solver.data_filenames - - :type comp: str - :param comp: component formatter, defaults to wildcard '?' - :rtype: str - :return: wildcard identifier for channels - """ - if PAR.FORMAT.upper() == "SU": - # return f"*.su" # too vague but maybe for a reason? -bryant - return f"U{comp}_file_single.su" - elif PAR.FORMAT.upper() == "ASCII": - return f"*.?X{comp}.sem?" - - @property - def source_prefix(self): - """ - Specfem2D's preferred source prefix - - :rtype: str - :return: source prefix - """ - return PAR.SOURCE_PREFIX.upper() + unix.cp(src=src, dst=input_path) + super().smooth(input_path=input_path, output_path=output_path, + parameters=parameters, span_h=span_h, span_v=span_v, + use_gpu=use_gpu) diff --git a/seisflows/solver/specfem3d.py b/seisflows/solver/specfem3d.py index 5f247f71..d0d6d522 100644 --- a/seisflows/solver/specfem3d.py +++ b/seisflows/solver/specfem3d.py @@ -1,367 +1,244 @@ #!/usr/bin/env python3 """ -This is the subclass seisflows.solver.Specfem3D This class provides utilities for the Seisflows solver interactions with -Specfem3D Cartesian. It inherits all attributes from seisflows.solver.Base, -and overwrites these functions to provide specified interaction with Specfem3D +Specfem3D Cartesian. """ import os -import sys -import logging from glob import glob +from seisflows import logger +from seisflows.tools import unix +from seisflows.tools.specfem import setpar, getpar +from seisflows.solver.specfem import Specfem -import seisflows.plugins.solver.specfem3d as solvertools -from seisflows.tools import unix, msg -from seisflows.tools.wrappers import exists -from seisflows.config import custom_import, SeisFlowsPathsParameters -from seisflows.tools.specfem import call_solver, getpar, setpar - -# Seisflows configuration -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - -system = sys.modules["seisflows_system"] -preprocess = sys.modules["seisflows_preprocess"] - - -class Specfem3D(custom_import("solver", "base")): +class Specfem3D(Specfem): """ - Python interface to Specfem3D Cartesian. This subclass inherits functions - from seisflows.solver.Base - - !!! See base class for method descriptions !!! + Solver SPECFEM3D + ---------------- + SPECFEM3D-specific alterations to the base SPECFEM module + + Parameters + ---------- + :type source_prefix: str + :param source_prefix: Prefix of source files in path SPECFEM_DATA. Must be + in ['CMTSOLUTION', 'FORCESOLUTION']. Defaults to 'CMTSOLUTION' + :type export_vtk: bool + :param export_vtk: anytime a model, kernel or gradient is considered, + generate a VTK file and store it in the scratch/ directory for the User + to visualize at their leisure. + :type prune_scratch: bool + :param prune_scratch: prune/remove database files as soon as they are used, + to keep overall filesystem burden down + - removes *.vt? files after they're generated by a forward simulation + - removes proc*_absorb_field.bin and proc*_save_forward_array.bin + files after adjoint simulations + + Paths + ----- + *** """ - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - - :type logger: Logger - :param logger: Class-specific logging module, log statements pushed - from this logger will be tagged by its specific module/classname - """ - super().__init__() + __doc__ = Specfem.__doc__ + __doc__ - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters(super().required) + def __init__(self, source_prefix="CMTSOLUTION", export_vtk=True, + prune_scratch=True, **kwargs): + """Instantiate a Specfem3D_Cartesian solver interface""" - # Define the Parameters required by this module - sf.par("NT", required=True, par_type=float, - docstr="Number of time steps set in the SPECFEM Par_file") + super().__init__(source_prefix=source_prefix, **kwargs) - sf.par("DT", required=True, par_type=float, - docstr="Time step or delta set in the SPECFEM Par_file") + self.prune_scratch = prune_scratch + self.export_vtk = export_vtk - sf.par("FORMAT", required=True, par_type=float, - docstr="Format of synthetic waveforms used during workflow, " - "available options: ['ascii', 'su']") + # Define parameters based on material type + if self.materials.upper() == "ACOUSTIC": + self._parameters += ["vp"] + elif self.materials.upper() == "ELASTIC": + self._parameters += ["vp", "vs"] - sf.par("SOURCE_PREFIX", required=False, default="CMTSOLUTION", - par_type=str, - docstr="Prefix of SOURCE files in path SPECFEM_DATA. Available " - "['CMTSOLUTION', FORCESOLUTION']") + # Overwriting the base class parameters + self._acceptable_source_prefixes = ["CMTSOLUTION", "FORCESOLUTION"] + self._required_binaries = ["xspecfem3D", "xmeshfem3D", + "xgenerate_databases", "xcombine_sem", + "xsmooth_sem", "xcombine_vol_data_vtk"] - return sf + self._model_databases = None + self.path._vtk_files = os.path.join(self.path.scratch, "vtk_files") - def check(self, validate=True): + def setup(self): """ - Checks parameters and paths + Generate .vtk files for the initial and target (if applicable) models, + which the User can use for external visualization """ - if validate: - self.required.validate() - super().check(validate=False) + super().setup() - acceptable_formats = ["SU", "ASCII"] - if PAR.FORMAT.upper() not in acceptable_formats: - raise Exception(f"'FORMAT' must be {acceptable_formats}") + # Work-in-progress + # self.combine_vol_data_vtk() - def generate_data(self, **model_kwargs): + def data_wildcard(self, comp="?"): """ - Generates data using the True model, exports traces to `traces/obs` - - :param model_kwargs: keyword arguments to pass to `generate_mesh` - """ - # Create the mesh - self.generate_mesh(**model_kwargs) - - # Run the Forward simulation - unix.cd(self.cwd) - setpar(key="SIMULATION_TYPE", val="1", file="DATA/Par_file") - setpar(key="SAVE_FORWARD", val=".true.", file="DATA/Par_file") - if PAR.ATTENUATION: - setpar(key="ATTENUATION", val=".true.", file="DATA/Par_file") - else: - setpar(key="ATTENUATION", val=".false.", file="DATA/Par_file") - - call_solver(mpiexec=PAR.MPIEXEC, executable="bin/xspecfem3D") + Returns a wildcard identifier for synthetic data - unix.mv(src=glob(os.path.join("OUTPUT_FILES", self.data_wildcard)), - dst=os.path.join("traces", "obs")) + TODO where does SU put its component? - # Export traces to disk for permanent storage - if PAR.SAVETRACES: - self.export_traces(os.path.join(PATH.OUTPUT, "traces", "obs")) + :rtype: str + :return: wildcard identifier for channels + """ + if self.data_format.upper() == "SU": + return f"*_d?_SU" + elif self.data_format.upper() == "ASCII": + return f"*.?X{comp}.sem?" - def generate_mesh(self, model_path, model_name, model_type=None): + @property + def model_databases(self): """ - Performs meshing with internal mesher Meshfem3D and database generation - - :type model_path: str - :param model_path: path to the model to be used for mesh generation - :type model_name: str - :param model_name: name of the model to be used as identification - :type model_type: str - :param model_type: available model types to be passed to the Specfem3D - Par_file. See Specfem3D Par_file for available options. + The location of databases for model outputs, usually + OUTPUT_FILES/DATABASES_MPI. This can be determined by 'LOCAL_PATH' + in your Par_file """ - available_model_types = ["gll"] - - assert(exists(model_path)), f"model {model_path} does not exist" - - model_type = model_type or getpar(key="MODEL", file="DATA/Par_file") - assert(model_type in available_model_types), \ - f"{model_type} not in available types {available_model_types}" - - unix.cd(self.cwd) + if self._model_databases is None: + self._model_databases = getpar( + key="LOCAL_PATH", file=os.path.join(self.path.specfem_data, + "Par_file"))[1] + return self._model_databases - # Run mesh generation - if model_type == "gll": - self.check_mesh_properties(model_path) - - src = glob(os.path.join(model_path, "*")) - dst = self.model_databases - unix.cp(src, dst) - - call_solver(mpiexec=PAR.MPIEXEC, executable="bin/xmeshfem3D") - call_solver(mpiexec=PAR.MPIEXEC, - executable="bin/xgenerate_databases") - - # Export the model for future use in the workflow - if self.taskid == 0: - self.export_model(os.path.join(PATH.OUTPUT, model_name)) - - def eval_func(self, *args, **kwargs): + @property + def kernel_databases(self): """ - Call eval_func from Base class + The location of databases for kernel outputs, usually the same as + 'model_databases' """ - super().eval_func(*args, **kwargs) + return self.model_databases - # Work around SPECFEM3D conflicting name conventions of SU data - self.rename_data() - - def forward(self, path="traces/syn"): + def forward_simulation(self, executables=None, save_traces=False, + export_traces=False, **kwargs): """ Calls SPECFEM3D forward solver, exports solver outputs to traces dir - :type path: str - :param path: path to export traces to after completion of simulation + :type executables: list or None + :param executables: list of SPECFEM executables to run, in order, to + complete a forward simulation. This can be left None in most cases, + which will select default values based on the specific solver + being called (2D/3D/3D_GLOBE). It is made an optional parameter + to keep the function more general for inheritance purposes. + :type save_traces: str + :param save_traces: move files from their native SPECFEM output location + to another directory. This is used to move output waveforms to + 'traces/obs' or 'traces/syn' so that SeisFlows knows where to look + for them, and so that SPECFEM doesn't overwrite existing files + during subsequent forward simulations + :type export_traces: str + :param export_traces: export traces from the scratch directory to a more + permanent storage location. i.e., copy files from their original + location """ - # Set parameters and run forward simulation - setpar(key="SIMULATION_TYPE", val="1", file="DATA/Par_file") - setpar(key="SAVE_FORWARD", val=".true.", file="DATA/Par_file") - if PAR.ATTENUATION: + unix.cd(self.cwd) + + if executables is None: + executables = ["bin/xgenerate_databases", "bin/xspecfem3D"] + + # Database files only need to be made once, usually at the first + # evaluation. Once made, we don't have to run xmeshfem3D anymore. + if not glob(os.path.join(self.model_databases, "proc*_Database")): + executables = ["bin/xmeshfem3D"] + executables + + # SPECFEM3D has to deal with attenuation + if self.attenuation: setpar(key="ATTENUATION", val=".true.", file="DATA/Par_file") else: setpar(key="ATTENUATION", val=".false`.", file="DATA/Par_file") - call_solver(mpiexec=PAR.MPIEXEC, - executable="bin/xgenerate_databases") - call_solver(mpiexec=PAR.MPIEXEC, executable="bin/xspecfem3D") + super().forward_simulation(executables=executables, + save_traces=save_traces, + export_traces=export_traces + ) - # Find and move output traces, by default to synthetic traces dir - unix.mv(src=glob(os.path.join("OUTPUT_FILES", self.data_wildcard)), - dst=path) + if self.prune_scratch: + logger.debug("removing '*.vt?' files from database directory") + unix.rm(glob(os.path.join(self.model_databases, "proc*_*.vt?"))) - def adjoint(self): + def adjoint_simulation(self, executables=None, save_kernels=False, + export_kernels=False): """ Calls SPECFEM3D adjoint solver, creates the `SEM` folder with adjoint traces which is required by the adjoint solver - """ - setpar(key="SIMULATION_TYPE", val="3", file="DATA/Par_file") - setpar(key="SAVE_FORWARD", val=".false.", file="DATA/Par_file") - setpar(key="ATTENUATION", val=".false.", file="DATA/Par_file") - - unix.rm("SEM") - unix.ln("traces/adj", "SEM") - - call_solver(mpiexec=PAR.MPIEXEC, executable="bin/xspecfem3D") - def check_solver_parameter_files(self): - """ - Checks solver parameters - """ - # Check the number of steps in the SPECFEM2D Par_file - nt_str, nt, nt_i = getpar(key="NSTEP", file="DATA/Par_file") - if int(nt) != PAR.NT: - if self.taskid == 0: - print(msg.cli(f"SPECFEM3D {nt_str}=={nt} is not equal " - f"SeisFlows PAR.NT=={PAR.NT}. Please ensure " - f"that these values match in both files.", - header="parameter match error", border="=") - ) - sys.exit(-1) - - dt_str, dt, dt_i = getpar(key="DT", file="DATA/Par_file") - if float(dt) != PAR.DT: - if self.taskid == 0: - print(msg.cli(f"SPECFEM3D {dt_str}=={dt} is not equal " - f"SeisFlows PAR.DT=={PAR.DT}. Please ensure " - f"that these values match in both files.", - header="parameter match error", border="=") - ) - sys.exit(-1) - - # Ensure that NPROC matches the MESH values - nproc = self.mesh_properties.nproc - if nproc != PAR.NPROC: - if self.taskid == 0: - print(msg.cli(f"SPECFEM3D mesh NPROC=={nproc} is not equal " - f"SeisFlows PAR.NPROC=={PAR.NPROC}. " - f"Please check that your mesh matches this val.", - header="parameter match error", border="=") - ) - sys.exit(-1) - - if "MULTIPLES" in PAR: - raise NotImplementedError - - def initialize_adjoint_traces(self): - """ - Setup utility: Creates the "adjoint traces" expected by SPECFEM - - Note: - Adjoint traces are initialized by writing zeros for all channels. - Channels actually in use during an inversion or migration will be - overwritten with nonzero values later on. - """ - # Initialize adjoint traces as zeroes for all data_filenames - # write to `traces/adj` - super().initialize_adjoint_traces() - - # Rename data to work around Specfem naming convetions - self.rename_data() - - # Workaround for Specfem3D's requirement that all components exist, - # even ones not in use as adjoint traces - if PAR.FORMAT.upper() == "SU": - unix.cd(os.path.join(self.cwd, "traces", "adj")) - - for iproc in range(PAR.NPROC): - for channel in ["x", "y", "z"]: - dst = f"{iproc:d}_d{channel}_SU.adj" - if not exists(dst): - src = f"{iproc:d}_d{PAR.COMPONENTS[0]}_SU.adj" - unix.cp(src, dst) - - def rename_data(self): - """ - Works around conflicting data filename conventions - - Specfem3D's uses different name conventions for regular traces - and 'adjoint' traces - """ - if PAR.FORMAT.upper() == "SU": - files = glob(os.path.join(self.cwd, "traces", "adj", "*SU")) - unix.rename(old='_SU', new='_SU.adj', names=files) - - def write_parameters(self): - """ - Write a set of parameters - - !!! This calls on plugins.solver.specfem3d.write_parameters() - but that function doesn't exist !!! - """ - unix.cd(self.cwd) - solvertools.write_parameters(vars(PAR)) - - def write_receivers(self): - """ - Write a list of receivers into a text file - - !!! This calls on plugins.solver.specfem3d.write_receivers() - but incorrect number of parameters is forwarded !!! - """ + :type executables: list or None + :param executables: list of SPECFEM executables to run, in order, to + complete an adjoint simulation. This can be left None in most cases, + which will select default values based on the specific solver + being called (2D/3D/3D_GLOBE). It is made an optional parameter + to keep the function more general for inheritance purposes. + :type save_kernels: str + :param save_kernels: move the kernels from their native SPECFEM output + location to another path. This is used to move kernels to another + SeisFlows scratch directory so that they are discoverable by + other modules. The typical location they are moved to is + path_eval_grad + :type export_kernels: str + :param export_kernels: export/copy/save kernels from the scratch + directory to a more permanent storage location. i.e., copy files + from their original location. Note that kernel file sizes are LARGE, + so exporting kernels can lead to massive storage requirements. + """ + if executables is None: + executables = ["bin/xspecfem3D"] + + # Make sure attenuation is OFF, if ON you'll get a floating point error unix.cd(self.cwd) - setpar(key="use_existing_STATIONS", val=".true", file="DATA/Par_file") - - _, h = preprocess.load("traces/obs") - solvertools.write_receivers(h.nr, h.rx, h.rz) + setpar(key="ATTENUATION", val=".false.", file="DATA/Par_file") - def write_sources(self): - """ - Write sources to text file + super().adjoint_simulation(executables=executables, + save_kernels=save_kernels, + export_kernels=export_kernels) + + if self.prune_scratch: + for glob_key in ["proc??????_save_forward_array.bin", + "proc??????_absorb_field.bin"]: + logger.debug(f"removing '{glob_key}' files from database " + f"directory") + unix.rm(glob(os.path.join(self.model_databases, glob_key))) + + def combine_vol_data_vtk(self, input_path, output_path, hi_res=False, + parameters=None): + """ + Wrapper for 'xcombine_vol_data_vtk'. Combines binary files together + to generate a single .VTK file that can be visualized by external + software like ParaView + + .. rubric:: + xcombine_data start end quantity input_dir output_dir hi/lo-res + + .. note:: + It is ASSUMED that this function is being called by + system.run(single=True) so that we can use the main solver + directory to perform the kernel summation task + + :type input_path: str + :param input_path: path to database files to be summed. + :type output_path: strs + :param output_path: path to export the outputs of xcombine_sem + :type hi_res: bool + :param hi_res: Set the high resolution flag to 1 or True, which will + generate .vtk files with data at EACH GLL point, rather than at each + nodal vertex. These files are LARGE, and we discourage using + `hi_res`==True unless you know you want these files. + :type parameters: list + :param parameters: optional list of parameters, + defaults to `self._parameters` """ unix.cd(self.cwd) - _, h = preprocess.load(dir="traces/obs") - solvertools.write_sources(PAR=vars(PAR), h=h) - @property - def data_wildcard(self): - """ - Returns a wildcard identifier for synthetic data + if parameters is None: + parameters = self._parameters - :rtype: str - :return: wildcard identifier for channels - """ - if PAR.FORMAT.upper() == "SU": - return f"*_d?_SU" - elif PAR.FORMAT.upper() == "ASCII": - return f"*.?X?.sem?" + if not os.path.exists(output_path): + unix.mkdir(output_path) - @property - def data_filenames(self): - """ - Returns the filenames of all data, either by the requested components - or by all available files in the directory. - - :rtype: list - :return: list of data filenames - """ - unix.cd(os.path.join(self.cwd, "traces", "obs")) - - if PAR.COMPONENTS: - components = PAR.COMPONENTS - - if PAR.FORMAT.upper() == "SU": - return sorted(glob(f"*_d[{components.lower()}]_SU")) - elif PAR.FORMAT.upper() == "ASCII": - return sorted(glob(f"*.?X[{components.upper()}].sem?")) - else: - if PAR.FORMAT.upper() == "SU": - return sorted(glob("*_d?_SU")) - elif PAR.FORMAT.upper() == "ASCII": - return sorted(glob("*.???.sem?")) - - @property - def kernel_databases(self): - """ - The location of databases for kernel outputs, relative to the current - working directory. - """ - return os.path.join(self.cwd, "OUTPUT_FILES", "DATABASES_MPI") - - @property - def model_databases(self): - """ - The location of databases for model outputs - """ - return os.path.join(self.cwd, "OUTPUT_FILES", "DATABASES_MPI") - - @property - def source_prefix(self): - """ - Specfem3D's preferred source prefix - - :rtype: str - :return: source prefix - """ - return PAR.SOURCE_PREFIX.upper() + # Call on xcombine_sem to combine kernels into a single file + for name in parameters: + # e.g.: bin/xcombine_vol_data_vtk 0 3 alpha_kernel in/ out/ 0 + exc = f"bin/xcombine_vol_data_vtk 0 {self.nproc-1} {name} " \ + f"{input_path} {output_path} {int(hi_res)}" + # e.g., smooth_vp.log + stdout = f"{self._exc2log(exc)}_{name}.log" + self._run_binary(executable=exc, stdout=stdout, with_mpi=False) diff --git a/seisflows/solver/specfem3d_globe.py b/seisflows/solver/specfem3d_globe.py index ca35a90a..f1205f86 100644 --- a/seisflows/solver/specfem3d_globe.py +++ b/seisflows/solver/specfem3d_globe.py @@ -1,211 +1,181 @@ #!/usr/bin/env python3 """ -This is the subclass seisflows.solver.specfem3d_globe This class provides utilities for the Seisflows solver interactions with -Specfem3D Globe. It inherits all attributes from seisflows.solver.specfem3d, -and overwrites these functions to provide specified interaction with Specfem3D. -""" -import os -import sys -import logging -from glob import glob - -import seisflows.plugins.solver.specfem3d_globe as solvertools -from seisflows.tools.specfem import Minmax # Model, Minmax, -# from seisflows.plugins.io import loadbypar, copybin, loadbin, savebin -from seisflows.tools import unix, msg -from seisflows.tools.wrappers import Struct, exists -from seisflows.config import custom_import, SeisFlowsPathsParameters - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] -system = sys.modules["seisflows_system"] +Specfem3D Globe. +SPECFEM3D_Globe specfic notes: + - does not allow SU seismogram outputs, only ASCII, SAC, ASDF, 3D_Array +""" +from seisflows.solver.specfem3d import Specfem3D -class Specfem3DGlobe(custom_import("solver", "specfem3d")): - """ - Python interface to Specfem3D Globe. This subclass inherits functions - from seisflows.solver.specfem3d.Specfem3D - !!! See base class for method descriptions !!! +class Specfem3DGlobe(Specfem3D): """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - - :type logger: Logger - :param logger: Class-specific logging module, log statements pushed - from this logger will be tagged by its specific module/classname - """ - super().__init__() - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters(super().required) - - return sf - - def load(self, path, prefix="reg1_", suffix="", parameters=None): - """ - Reads SPECFEM model or kernel - - Models are stored in Fortran binary format and separated into - multiple files according to material parameter and processor rank. - - :type path: str - :param path: directory from which model is read - :type prefix: str - :param prefix: optional filename prefix - :type suffix: str - :param suffix: optional filename suffix, eg '_kernel' - :type parameters: list - :param parameters: material parameters to be read - (if empty, defaults to self.parameters) - :rtype: dict - :return: model or kernels indexed by material parameter and - processor rank, ie dict[parameter][iproc] - """ - parameters = parameters or self.parameters - - model = Model(parameters) - minmax = Minmax(parameters) - - for iproc in range(self.mesh_properties.nproc): - # read database files based on parameters - keys, vals = loadbypar(path, self.parameters, iproc, prefix, - suffix) - for key, val in zip(keys, vals): - model[key] += [val] - - minmax.update(keys, vals) - - return model - - def save(self, path, model, prefix="reg1_", suffix=""): - """ - Writes SPECFEM3D_GLOBE transerverly isotropic model - - :type path: str - :param path: - :type model - :param model: - :type prefix: str - :param prefix: prefix that begins the name of the model parameters - :type suffix: str - :param suffix: that follow the name of model parameters - """ - unix.mkdir(path) - - for iproc in range(self.mesh_properties.nproc): - for check_key in ["vpv", "vph", "vsv", "vsh", "eta"]: - if check_key in self.parameters: - savebin(model[key][iproc], path, iproc, prefix+key+suffix) - elif 'kernel' in suffix: - pass - else: - src = PATH.OUTPUT + '/' + 'model_init' - dst = path - copybin(src, dst, iproc, prefix+key+suffix) - - if 'rho' in self.parameters: - savebin(model['rho'][iproc], path, iproc, prefix+'rho'+suffix) - elif 'kernel' in suffix: - pass - else: - src = PATH.OUTPUT + '/' + 'model_init' - dst = path - copybin(src, dst, iproc, prefix+'rho'+suffix) - - def check_mesh_properties(self, path=None, parameters=None): - """ - Determine if Mesh properties are okay for workflow - - :type path: str - :param path: path to the mesh file - """ - if not hasattr(self, '_mesh_properties'): - if path is None: - path = PATH.MODEL_INIT + Solver SPECFEM3D_GLOBE + ---------------------- + SPECFEM3D_Globe-specific alterations to the solver.specfem3d module - if parameters is None: - parameters = self.parameters + Parameters + ---------- - nproc = 0 - ngll = [] - while True: - dummy = loadbin(path, nproc, 'reg1_' + parameters[0]) - ngll += [len(dummy)] - nproc += 1 - if not exists( - os.path.join(path, - f"proc{nrpoc}_reg1_{parameters[0]}.bin")): - break - - self._mesh_properties = Struct([['nproc', nproc], - ['ngll', ngll]] - ) - - def rename_data(self): - """ - Works around conflicting data filename conventions - - Specfem3D's uses different name conventions for regular traces - and 'adjoint' traces - """ - files = glob(os.path.join(self.cwd, "traces", "adj", "*sem.ascii")) - unix.rename("sem.ascii", "sem.ascii.adj", files) + Paths + ----- + *** + """ + __doc__ = Specfem3D.__doc__ + __doc__ - def initialize_adjoint_traces(self): - """ - Setup utility: Creates the "adjoint traces" expected by SPECFEM + def __init__(self, **kwargs): + """Instantiate a Specfem3D_Globe solver interface""" + super().__init__(**kwargs) - !!! This probably doesnt work + if self.materials.upper() == "ACOUSTIC": + self._parameters += ["vp"] + elif self.materials.upper() == "ELASTIC": + self._parameters += ["vp", "vs"] + elif self.materials.upper() == "ISOTROPIC": + self._parameters += ["vp", "vs"] + elif self.materials.upper() == "ANISOTROPIC": + self._parameters += ["vpv", "vph", "vsv", "vsh", "eta"] - Note: - Adjoint traces are initialized by writing zeros for all channels. - Channels actually in use during an inversion or migration will be - overwritten with nonzero values later on. - """ - super().initialize_adjoint_traces() - - # workaround for SPECFEM's use of different name conventions for - # regular traces and 'adjoint' traces - if PAR.FORMAT.upper() in ['ASCII', 'ascii']: - files = glob(os.path.join(self.cwd, "traces", "adj", "*sem.ascii")) - unix.rename("sem.ascii", "adj", files) - - @property - def data_wildcard(self): + def data_wildcard(self, comp="?"): """ Returns a wildcard identifier for synthetic data :rtype: str :return: wildcard identifier for channels """ - if PAR.FORMAT.upper() == "ASCII": - return f"*.?X?.sem.ascii" - - @property - def data_filenames(self): - """ - Returns the filenames of all data, either by the requested components - or by all available files in the directory. - - :rtype: list - :return: list of data filenames - """ - unix.cd(os.path.join(self.cwd, "traces", "obs")) + if self.data_format.upper() == "SU": + raise NotImplementedError("SU file access is still a WIP") + elif self.data_format.upper() == "ASCII": + return f"*.?X{comp}.sem.ascii" + + # def load(self, path, prefix="reg1_", suffix="", parameters=None): + # """ + # Reads SPECFEM model or kernel + # + # .. note:: + # SPECFEM3D_Globe meshes are broken into 3 regions. + # Region 1 == Crust + Mantle + # Region 2 == Outer core + # Region 3 == Inner core + # + # .. warning:: + # Currently SeisFlows only considers the crust + mantle in Globe + # simulations + # + # + # :type path: str + # :param path: directory from which model is read + # :type prefix: str + # :param prefix: optional filename prefix + # :type suffix: str + # :param suffix: optional filename suffix, eg '_kernel' + # :type parameters: list + # :param parameters: material parameters to be read + # (if empty, defaults to self.parameters) + # :rtype: dict + # :return: model or kernels indexed by material parameter and + # processor rank, ie dict[parameter][iproc] + # """ + # parameters = parameters or self.parameters + # + # model = Model(parameters) + # minmax = Minmax(parameters) + # + # for iproc in range(self.mesh_properties.nproc): + # # read database files based on parameters + # keys, vals = loadbypar(path, self.parameters, iproc, prefix, + # suffix) + # for key, val in zip(keys, vals): + # model[key] += [val] + # + # minmax.update(keys, vals) + # + # return model + # + # def save(self, path, model, prefix="reg1_", suffix=""): + # """ + # Writes SPECFEM3D_GLOBE transerverly isotropic model + # + # :type path: str + # :param path: + # :type model + # :param model: + # :type prefix: str + # :param prefix: prefix that begins the name of the model parameters + # :type suffix: str + # :param suffix: that follow the name of model parameters + # """ + # unix.mkdir(path) + # + # for iproc in range(self.mesh_properties.nproc): + # for check_key in ["vpv", "vph", "vsv", "vsh", "eta"]: + # if check_key in self.parameters: + # savebin(model[key][iproc], path, iproc, prefix+key+suffix) + # elif 'kernel' in suffix: + # pass + # else: + # src = self.path.OUTPUT + '/' + 'model_init' + # dst = path + # copybin(src, dst, iproc, prefix+key+suffix) + # + # if 'rho' in self.parameters: + # savebin(model['rho'][iproc], path, iproc, prefix+'rho'+suffix) + # elif 'kernel' in suffix: + # pass + # else: + # src = self.path.OUTPUT + '/' + 'model_init' + # dst = path + # copybin(src, dst, iproc, prefix+'rho'+suffix) + # + # def check_mesh_properties(self, path=None, parameters=None): + # """ + # Determine if Mesh properties are okay for workflow + # + # :type path: str + # :param path: path to the mesh file + # """ + # if not hasattr(self, '_mesh_properties'): + # if path is None: + # path = self.path.MODEL_INIT + # + # if parameters is None: + # parameters = self.parameters + # + # nproc = 0 + # ngll = [] + # while True: + # dummy = loadbin(path, nproc, 'reg1_' + parameters[0]) + # ngll += [len(dummy)] + # nproc += 1 + # if not os.path.exists( + # os.path.join(path, + # f"proc{nrpoc}_reg1_{parameters[0]}.bin")): + # break + # + # self._mesh_properties = Struct([['nproc', nproc], + # ['ngll', ngll]] + # ) + # + # def initialize_adjoint_traces(self): + # """ + # Setup utility: Creates the "adjoint traces" expected by SPECFEM + # + # !!! This probably doesnt work + # + # .. note:: + # Adjoint traces are initialized by writing zeros for all channels. + # Channels actually in use during an inversion or migration will be + # overwritten with nonzero values later on. + # """ + # super().initialize_adjoint_traces() + # + # # workaround for SPECFEM's use of different name conventions for + # # regular traces and 'adjoint' traces + # if self.par.FORMAT.upper() in ['ASCII', 'ascii']: + # files = glob(os.path.join(self.cwd, "traces", "adj", "*sem.ascii")) + # unix.rename("sem.ascii", "adj", files) - if PAR.FORMAT.upper() == "ASCII": - return sorted(glob("*.???.sem.ascii")) diff --git a/seisflows/system/base.py b/seisflows/system/base.py deleted file mode 100644 index 2a252898..00000000 --- a/seisflows/system/base.py +++ /dev/null @@ -1,214 +0,0 @@ -#!/usr/bin/env python3 -""" -The System module provides the basic core utilities for interaction with compute -systems. The Base class must be overloaded by subclasses related to specific -compute system types (cluster vs. workstation) and even specific HPCs. -""" -import os -import sys -import pickle -import logging - -from seisflows.tools import unix, msg -from seisflows.tools.wrappers import number_fid -from seisflows.config import save, SeisFlowsPathsParameters, CFGPATHS - - - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - - -class Base: - """ - Abstract base class for the Systems module which controls interaction with - compute systems such as HPC clusters. - """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - """ - self.output_log = os.path.join(PATH.WORKDIR, CFGPATHS.LOGFILE) - self.error_log = os.path.join(PATH.WORKDIR, CFGPATHS.ERRLOGFILE) - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters() - - sf.par("TITLE", required=False, - default=os.path.basename(os.path.abspath(".")), par_type=str, - docstr="The name used to submit jobs to the system, defaults " - "to the name of the working directory") - - sf.par("PRECHECK", required=False, par_type=list, default=["TITLE"], - docstr="A list of parameters that will be displayed to stdout " - "before 'submit' or 'resume' is run. Useful for " - "manually reviewing important parameters prior to " - "system submission") - - sf.par("LOG_LEVEL", required=False, par_type=str, default="DEBUG", - docstr="Verbosity output of SF logger. Available from least to " - "most verbosity: 'CRITICAL', 'WARNING', 'INFO', 'DEBUG'; " - "defaults to 'DEBUG'") - - sf.par("VERBOSE", required=False, default=False, par_type=bool, - docstr="Level of verbosity provided to the output log. If True, " - "log statements will declare what module/class/function " - "they are being called from. Useful for debugging but " - "also very noisy.") - - # Define the Paths required by this module - # note: PATH.WORKDIR has been set by the entry point seisflows.setup() - sf.path("SCRATCH", required=False, - default=os.path.join(PATH.WORKDIR, CFGPATHS.SCRATCHDIR), - docstr="scratch path to hold temporary data during workflow") - - sf.path("OUTPUT", required=False, - default=os.path.join(PATH.WORKDIR, CFGPATHS.OUTPUTDIR), - docstr="directory to save workflow outputs to disk") - - sf.path("SYSTEM", required=False, - default=os.path.join(PATH.WORKDIR, CFGPATHS.SCRATCHDIR, - "system"), - docstr="scratch path to hold any system related data") - - sf.path("LOCAL", required=False, - docstr="path to local data to be used during workflow") - - sf.path("LOGFILE", required=False, default=self.output_log, - docstr="the main output log file where all processes will " - "track their status") - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths - """ - if validate: - self.required.validate() - - # !!! This system could be better, currently defining log file twice - if self.output_log != PATH.LOGFILE: - self.output_log = PATH.LOGFILE - - def setup(self): - """ - Create the SeisFlows directory structure in preparation for a - SeisFlows workflow. Ensure that if any config information is left over - from a previous workflow, that these files are not overwritten by - the new workflow. Should be called by submit() - - .. note:: - This function is expected to create dirs: SCRATCH, SYSTEM, OUTPUT - and the following log files: output, error - - .. note:: - Logger is configured here as all workflows, independent of system, - will be calling setup() - - :rtype: tuple of str - :return: (path to output log, path to error log) - """ - # Create scratch directories - unix.mkdir(PATH.SCRATCH) - unix.mkdir(PATH.SYSTEM) - - # Create output directories - unix.mkdir(PATH.OUTPUT) - log_files = os.path.join(PATH.WORKDIR, CFGPATHS.LOGDIR) - unix.mkdir(log_files) - - # If resuming, move old log files to keep them out of the way. Number - # in ascending order, so we don't end up overwriting things - for src in [self.output_log, self.error_log, PATH.PAR_FILE]: - i = 1 - if os.path.exists(src): - dst = os.path.join(log_files, number_fid(src, i)) - while os.path.exists(dst): - i += 1 - dst = os.path.join(log_files, number_fid(src, i)) - self.logger.debug(f"copying par/log file to: {dst}") - unix.cp(src=src, dst=dst) - - def submit(self): - """ - Main insertion point of SeisFlows onto the compute system. - - .. rubric:: - $ seisflows submit - - .. note:: - The expected behavior of the submit() function is to: - 1) run system setup, creating directory structure, - 2) execute workflow by submitting workflow.main() - """ - raise NotImplementedError("Must be implemented by subclass") - - def run(self, classname, method, single=False, **kwargs): - """ - Runs a task multiple times in am embarassingly parallel fashion - - .. note:: - The expected behavior of the run() function is to: submit N jobs to - the system in parallel. For example, in a simulation step, run() - submits N jobs to the compute system where N is the number of - events requiring an adjoint simulation. - - :type classname: str - :param classname: the class to run - :type method: str - :param method: the method from the given `classname` to run - :type single: bool - :param single: run a single-process, non-parallel task, such as - smoothing the gradient, which only needs to be run by once. - This will change how the job array and the number of tasks is - defined, such that the job is submitted as a single-core job to - the system. - :rtype: None - :return: This function is not expected to return anything - """ - raise NotImplementedError("Must be implemented by subclass") - - def taskid(self): - """ - Provides a unique identifier for each running task. This is - compute system specific. - - :rtype: int - :return: this function is expected to return a unique numerical - identifier. - """ - raise NotImplementedError("Must be implemented by subclass") - - def checkpoint(self, path, classname, method, kwargs): - """ - Writes the SeisFlows working environment to disk so that new tasks can - be executed in a separate/new/restarted working environment. - - :type path: str - :param path: path to save the checkpointed pickle files to - :type classname: str - :param classname: name of the class to save - :type method: str - :param method: the specific function to be checkpointed - :type kwargs: dict - :param kwargs: dictionary to pass to object saving - """ - self.logger.debug("checkpointing working environment to disk") - - argspath = os.path.join(path, "kwargs") - argsfile = os.path.join(argspath, f"{classname}_{method}.p") - unix.mkdir(argspath) - with open(argsfile, "wb") as f: - pickle.dump(kwargs, f) - save() - diff --git a/seisflows/system/chinook.py b/seisflows/system/chinook.py new file mode 100644 index 00000000..708ee551 --- /dev/null +++ b/seisflows/system/chinook.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 +""" +Chinook is the University of Alaska Fairbanks (UAF) high performance computer, +operated by the Geophysical Institute's Research Computing Systems (RCS). +Chinook operates on a SLURM workload manager and therefore overloads the SLURM +System module. Chinook-specific parameters and functions are defined here. + +Information on Chinook can be found here: +https://uaf-rcs.gitbook.io/uaf-rcs-hpc-docs/hpc +""" +import os +from seisflows.system.slurm import Slurm + + +class Chinook(Slurm): + """ + System Chinook + -------------- + University of Alaska Fairbanks HPC Chinook, SLURM based system + + Parameters + ---------- + :type partition: str + :param partition: Chinook has various partitions which each have their + own number of cores per compute node. Available are: analysis, t1small, + t2small, t1standard, t2standard, gpu + + Paths + ----- + + *** + """ + __doc__ = Slurm.__doc__ + __doc__ + + + def __init__(self, partition="t1small", **kwargs): + """Chinook init""" + super().__init__(**kwargs) + + self.partition = partition + + self._partitions = {"debug": 24, "t1small": 28, "t2small": 28, + "t1standard": 40, "t2standard": 40, "analysis": 28 + } + + @property + def submit_call_header(self): + """ + The submit call defines the SBATCH header which is used to submit a + workflow task list to the system. It is usually dictated by the + system's required parameters, such as account names and partitions. + Submit calls are modified and called by the `submit` function. + + .. note:: + Force the partition to run on 'Debug' since we are only running a + single core job. This may run into walltime problems but for now + it seems more economincal to enforce this + + :rtype: str + :return: the system-dependent portion of a submit call + """ + _call = " ".join([ + f"sbatch", + f"--job-name={self.title}", + f"--output={self.path.output_log}", + f"--error={self.path.output_log}", + f"--ntasks=1", + f"--partition=debug", + # f"--partition={self.partition}", + f"--time={self._walltime}" + ]) + return _call + + @property + def run_call_header(self): + """ + The run call defines the SBATCH header which is used to run tasks during + an executing workflow. Like the submit call its arguments are dictated + by the given system. Run calls are modified and called by the `run` + function + + :rtype: str + :return: the system-dependent portion of a run call + """ + _call = " ".join([ + f"sbatch", + f"{self.slurm_args or ''}", + f"--job-name={self.title}", + f"--ntasks={self.nproc:d}", + f"--partition={self.partition}", + f"--tasks-per-node={self.node_size}", + f"--time={self._tasktime}", + f"--output={os.path.join(self.path.log_files, '%A_%a')}", + f"--array=0-{self.ntask-1 % self.ntask_max}", + f"--parsable" + ]) + return _call diff --git a/seisflows/system/chinook_singularity.py b/seisflows/system/chinook_singularity.py new file mode 100644 index 00000000..7d7cfb01 --- /dev/null +++ b/seisflows/system/chinook_singularity.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +""" +For running SeisFlows on Chinook through Singularity. This class is a +kludge to get research going as Chinook is scheduled for OS upgrade in the +coming month(s) which will cause this entire kludge to become obsolete. This +code is therefore unpolished and only meant to get things working in a +band-aid/barebones manner. +""" +import os +from datetime import timedelta +from seisflows.system.singularity import Singularity + + +class ChinookSingularity(Singularity): + """ + System Chinook Singularity + -------------------------- + University of Alaska Fairbanks HPC Chinook, SLURM based system running + the Singularity container software + + Parameters + ---------- + :type partition: str + :param partition: Chinook has various partitions which each have their + own number of cores per compute node. Available are: analysis, t1small, + t2small, t1standard, t2standard, gpu + + Paths + ----- + + *** + """ + __doc__ = Singularity.__doc__ + __doc__ + + + def __init__(self, partition="t1small", slurm_args="", **kwargs): + """Chinook init""" + super().__init__(**kwargs) + + self.partition = partition + self.slurm_args = slurm_args # currently NOT used + + self._partitions = {"debug": 24, "t1small": 28, "t2small": 28, + "t1standard": 40, "t2standard": 40, "analysis": 28 + } + self._tasktime = str(timedelta(minutes=self.tasktime)) + + + @property + def node_size(self): + """Defines the node size of a given cluster partition. This is a hard + set number defined by the system architecture""" + return self._partitions[self.partition] + + @property + def run_call_header(self): + """ + The run call defines the SBATCH header which is used to run tasks during + an executing workflow. Like the submit call its arguments are dictated + by the given system. Run calls are modified and called by the `run` + function + + :rtype: str + :return: the system-dependent portion of a run call + """ + _output = os.path.relpath(os.path.join(self.path.log_files, '%A_%a')) + _call = "\n".join([ + f"#SBATCH --job-name={self.title}", + f"#SBATCH --ntasks={self.nproc:d}", + f"#SBATCH --tasks-per-node={self.node_size}", + f"#SBATCH --time={self._tasktime}", + f"#SBATCH --output={_output}", + f"#SBATCH --array=0-{self.ntask-1 % self.ntask_max}", + f"{super().run_call_header}", # Singularity wrapper + ]) + + return _call diff --git a/seisflows/system/cluster.py b/seisflows/system/cluster.py index 27ce1f44..15459b4a 100644 --- a/seisflows/system/cluster.py +++ b/seisflows/system/cluster.py @@ -3,113 +3,205 @@ The Cluster class provides the core utilities interaction with HPC systems which must be overloaded by subclasses for specific workload managers, or specific clusters. + +The `Cluster` class acts as a base class for more specific cluster +implementations (like SLURM). However it can be used standalone. When running +jobs on the `Cluster` system, jobs will be submitted to the master system +using `subprocess.run`, mimicing how jobs would be run on a cluster but not +actually submitting to any job scheduler. """ +import os import sys -import logging import subprocess +from concurrent.futures import ProcessPoolExecutor, wait +from seisflows import logger, ROOT_DIR +from seisflows.tools.unix import nproc +from seisflows.tools.config import pickle_function_list +from seisflows.system.workstation import Workstation -from seisflows.tools import msg -from seisflows.config import custom_import, save, SeisFlowsPathsParameters - - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - -class Cluster(custom_import("system", "base")): +class Cluster(Workstation): """ - Abstract base class for the Systems module which controls interaction with - compute systems such as HPC clusters. + Cluster System + ------------------ + Generic or common HPC/cluster interfacing commands + + Parameters + ---------- + :type title: str + :param title: The name used to submit jobs to the system, defaults + to the name of the current working directory + :type mpiexec: str + :param mpiexec: Function used to invoke executables on the system. + For example 'mpirun', 'mpiexec', 'srun', 'ibrun' + :type ntask_max: int + :param ntask_max: limit the number of concurrent tasks in a given array job + :type walltime: float + :param walltime: maximum job time in minutes for the master SeisFlows + job submitted to cluster. Fractions of minutes acceptable. + :type tasktime: float + :param tasktime: maximum job time in minutes for each job spawned by + the SeisFlows master job during a workflow. These include, e.g., + running the forward solver, adjoint solver, smoother, kernel combiner. + All spawned tasks receive the same task time. Fractions of minutes + acceptable. + :type environs: str + :param environs: Optional environment variables to be provided in the + following format VAR1=var1,VAR2=var2... Will be set using + os.environs + + Paths + ----- + *** """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(_nrpo_qualname__) + __doc__ = Workstation.__doc__ + __doc__ + + def __init__(self, title=None, mpiexec="", ntask_max=None, walltime=10, + tasktime=1, environs="", **kwargs): + """Instantiate the Cluster System class""" + super().__init__(**kwargs) + + if title is None: + self.title = os.path.basename(os.getcwd()) + else: + self.title = title + self.mpiexec = mpiexec + self.ntask_max = ntask_max or nproc() - 1 # -1 because master job + self.walltime = walltime + self.tasktime = tasktime + self.environs = environs or "" @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. + def submit_call_header(self): """ - sf = SeisFlowsPathsParameters(super().required) - - # Define the Parameters required by this module - sf.par("WALLTIME", required=True, par_type=float, - docstr="Maximum job time in minutes for main SeisFlows job") + The submit call defines the SBATCH header which is used to submit a + workflow task list to the system. It is usually dictated by the + system's required parameters, such as account names and partitions. + Submit calls are modified and called by the `submit` function. - sf.par("TASKTIME", required=True, par_type=float, - docstr="Maximum job time in minutes for each SeisFlows task") - - sf.par("NTASK", required=True, par_type=int, - docstr="Number of separate, individual tasks. Also equal to " - "the number of desired sources in workflow") - - sf.par("NPROC", required=True, par_type=int, - docstr="Number of processor to use for each simulation") - - sf.par("ENVIRONS", required=False, default="", par_type=str, - docstr="Optional environment variables to be provided in the" - "following format VAR1=var1,VAR2=var2... Will be set" - "using os.environs") - - return sf + .. note:: + Generalized `cluster` returns empty string but child system + classes will need to overwrite the submit call. - def check(self, validate=True): - """ - Checks parameters and paths + :rtype: str + :return: the system-dependent portion of a submit call """ - if validate: - self.required.validate() + return "" - super().check(validate=False) - - def submit(self, submit_call): + @property + def run_call_header(self): """ - Main insertion point of SeisFlows onto the compute system. - - .. rubric:: - $ seisflows submit + The run call defines the SBATCH header which is used to run tasks during + an executing workflow. Like the submit call its arguments are dictated + by the given system. Run calls are modified and called by the `run` + function .. note:: - The expected behavior of the submit() function is to: - 1) run system setup, creating directory structure, - 2) execute workflow by submitting workflow.main() - - :type workflow: seisflows.workflow - :param workflow: an active seisflows workflow instance - :type submit_call: str - :param submit_call: the command line workload manager call to be run by - subprocess. These need to be passed in by specific workload manager - subclasses. - """ - self.setup() - workflow = sys.modules["seisflows_workflow"] - workflow.checkpoint() - - # check==True: subprocess will wait for workflow.main() to finish - subprocess.run(submit_call, shell=True, check=True) + Generalized `cluster` returns empty string but child system + classes will need to overwrite the submit call. - def run(self, classname, method, **kwargs): + :rtype: str + :return: the system-dependent portion of a run call """ - Runs a task multiple times in parallel - - .. note:: - The expected behavior of the run() function is to: submit N jobs to - the system in parallel. For example, in a simulation step, run() - submits N jobs to the compute system where N is the number of - events requiring an adjoint simulation. + return "" - :rtype: None - :return: This function is not expected to return anything + def submit(self, workdir=None, parameter_file="parameters.yaml"): """ - raise NotImplementedError('Must be implemented by subclass.') - - def taskid(self): + Submits the main workflow job as a separate job submitted directly to + the system that is running the master job + + :type workdir: str + :param workdir: path to the current working directory + :type parameter_file: str + :param parameter_file: paramter file file name used to instantiate + the SeisFlows package """ - Provides a unique identifier for each running task. This is - compute system specific. - - :rtype: int - :return: this function is expected to return a unique numerical - identifier. + # e.g., submit -w ./ -p parameters.yaml + submit_call = " ".join([ + f"{self.submit_call_header}", + f"{os.path.join(ROOT_DIR, 'system', 'runscripts', 'submit')}", + f"--workdir {workdir}", + f"--parameter_file {parameter_file}", + ]) + + logger.debug(submit_call) + try: + subprocess.run(submit_call, shell=True) + except subprocess.CalledProcessError as e: + logger.critical(f"SeisFlows master job has failed with: {e}") + sys.exit(-1) + + def run(self, funcs, single=False, **kwargs): + """ + Runs tasks multiple times in parallel by submitting NTASK new jobs to + system. The list of functions and its kwargs are saved as pickles files, + and then re-loaded by each submitted process with specific environment + variables. Each spawned process will run the list of functions. + + :type funcs: list of methods + :param funcs: a list of functions that should be run in order. All + kwargs passed to run() will be passed into the functions. + :type single: bool + :param single: run a single-process, non-parallel task, such as + smoothing the gradient, which only needs to be run by once. + This will change how the job array and the number of tasks is + defined, such that the job is submitted as a single-core job to + the system. + :type run_call: str + :param run_call: the call used to submit the run script. If None, + attempts default run call which should be suited for the given + system. Can be overwritten by child classes to involve other + arguments + """ + # Single tasks only need to be run one time, as `TASK_ID` === 0 + ntasks = {True: 1, False: self.ntask}[single] + funcs_fid, kwargs_fid = pickle_function_list(functions=funcs, + path=self.path.scratch, + **kwargs) + logger.info(f"running functions {[_.__name__ for _ in funcs]} on " + f"system {ntasks} times") + + # Create the run call which will simply call an external Python script + # e.g., run --funcs func.p --kwargs kwargs.p --environment ... + run_call = " ".join([ + f"{self.run_call_header}", + f"{os.path.join(ROOT_DIR, 'system', 'runscripts', 'run')}", + f"--funcs {funcs_fid}", + f"--kwargs {kwargs_fid}", + f"--environment SEISFLOWS_TASKID={{task_id}},{self.environs}" + ]) + logger.debug(run_call) + + # Don't need to spin up concurrent.futures for a single run + if single: + self._run_task(run_call=run_call, task_id=0) + # Run tasks in parallel and wait for all of them to finish + else: + with ProcessPoolExecutor(max_workers=nproc() - 1) as executor: + futures = [executor.submit(self._run_task, run_call, task_id) + for task_id in range(ntasks)] + wait(futures) + + def _run_task(self, run_call, task_id): + """ + Convenience function to run a single Python job with subprocess.run + with some error catching and redirect of stdout to a log file. + + :type run_call: str + :param run_call: python call to run a task involving loading the + pickled function list and its kwargs, and then running them + :type task_id: int + :param task_id: given task id, used for log messages and to format + the run call """ - raise NotImplementedError('Must be implemented by subclass.') + logger.debug(f"running task id {task_id}") + try: + f = open(self._get_log_file(task_id), "w") + subprocess.run(run_call.format(task_id=task_id), shell=True, + stdout=f) + except subprocess.CalledProcessError as e: + logger.critical(f"run task_id {task_id} has failed with error " + f"message {e}") + sys.exit(-1) + finally: + f.close() diff --git a/seisflows/system/frontera.py b/seisflows/system/frontera.py new file mode 100644 index 00000000..2e9682e1 --- /dev/null +++ b/seisflows/system/frontera.py @@ -0,0 +1,275 @@ +#!/usr/bin/env python3 +""" +Frontera is one of the Texas Advanced Computing Center (TACC) HPCs. +https://frontera-portal.tacc.utexas.edu/ + +.. note:: Frontera Caveat 1 + On TACC Systems you cannot submit 'sbatch' from compute nodes. Work around: + SSHs from compute node to login node, activate conda environemtn, submit + sbatch script. This requires knowing the User name, conda environment name, + and ensuring SSH keys are available. Thanks to Ian Wang for the suggestion + to SSH around the problem. + + Essentially we are running, from the compute node: + $ ssh user@hostname 'conda activate env; sbatch --arg=val run_function.sh' + +.. note:: Frontera Caveat 2 + TACC does not allow the '--array' option, which SeisFlows uses to submit + multiple jobs in a single SBATCH command. To work around this, the Frontera + module submits jobs one by one. +""" +import os +import sys +import subprocess +from seisflows import ROOT_DIR, logger +from seisflows.tools import msg +from seisflows.tools.config import pickle_function_list +from seisflows.system.slurm import (Slurm, query_job_states, BAD_STATES, + check_job_status_list) + + +class Frontera(Slurm): + """ + System Frontera + -------------- + Texas Advanced Computing Center HPC Frontera, SLURM based system + + Parameters + ---------- + :type user: str + :param user: User's username on TACC systems. Can be determined by 'whoami' + or will be gathered from the 'USER' environment variable. Used for + internal ssh'ing from compute nodes to login nodes. + :type conda_env: str + :param conda_env: name of the Conda environment in which you are running + SeisFlows. Defaults to environment variable 'CONDA_DEFAULT_ENV'. Used + to activate the conda environment AFTER ssh'ing from compute to login + node, to ensure that the newly submitted job has access to the SeisFlows + environment + :type partition: str + :param partition: Chinook has various partitions which each have their + own number of cores per compute node. Available are: small, normal, + large, development, flex + :type allocation: str + :param allocation: Name of allocation/project on the Frontera system. + Required if you have more than one active allocation. + + Paths + ----- + + *** + """ + def __init__(self, user=None, conda_env=None, partition="development", + allocation=None, **kwargs): + """Frontera init""" + super().__init__(**kwargs) + + self.user = user or os.environ["USER"] # alt. getpass.getuser() + self.conda_env = conda_env or os.environ["CONDA_DEFAULT_ENV"] + self.partition = partition + self.allocation = allocation + self.mpiexec = "ibrun" + + # See 'Frontera Caveat 1' note for why we need these calls + self._ssh_call = f"ssh {self.user}@frontera.tacc.utexas.edu" + self._conda_activate = f"conda activate {self.conda_env}" + + # Internally used check parameters. Because 'development' and 'large' + # partitions do not allow >1 job per user, we cannot use them + self._acceptable_partitions = ["small", "normal", "flex"] + self._partitions = {"small": 28, "normal": 28, "large": 28, "flex": 28, + "development": 28} + self._max_jobs = {"small": 20, "large": 1, "normal": 100, "flex": 15, + "development": 1} + + # Hard set `ntask_max` based on TACCS 'QOSMaxJobsPerUserLimit' + self.ntask_max = self._max_jobs[self.partition] + + def check(self): + """ + Checks parameters and paths + """ + super().check() + + assert(self.partition in self._acceptable_partitions), \ + f"Frontera `partition` must be in {self._acceptable_partitions}" + + assert(self._max_jobs[self.partition] > 1), ( + f"Frontera partition '{self.partition}' does not allow more than 1 " + f"simultaneously running job, meaning SeisFlows will not work. " + f"please choose a different partition" + ) + + if self.tasktime > 60 and self.partition == "flex": + logger.warning("Frontera's 'Flex' partition may cancel jobs that " + "exceed 60 minute wall time. Consider choosing a " + "different partition if this may be a problem") + + @property + def submit_call_header(self): + """ + The submit call defines the SBATCH header which is used to submit a + workflow task list to the system. It is usually dictated by the + system's required parameters, such as account names and partitions. + Submit calls are modified and called by the `submit` function. + + :rtype: str + :return: the system-dependent portion of a submit call + """ + _call = " ".join([ + f"sbatch", + f"--job-name={self.title}", # -J + f"--partition={self.partition}", # -p + f"--output={self.path.output_log}", # -o + f"--error={self.path.output_log}", + f"--nodes=1", # -N + f"--ntasks=1", # -n + f"--time={self._walltime}" # -t + ]) + if self.allocation is not None: + _call = f"{_call} --allocation={self.allocation}" + return _call + + @property + def run_call_header(self): + """ + The run call defines the SBATCH header which is used to run tasks during + an executing workflow. Like the submit call its arguments are dictated + by the given system. Run calls are modified and called by the `run` + function + + :rtype: str + :return: the system-dependent portion of a run call + """ + _call = " ".join([ + f"sbatch", + f"{self.slurm_args or ''}", + f"--job-name={self.title}", + f"--partition={self.partition}", + f"--output={os.path.join(self.path.log_files, '%A')}", + f"--ntasks={self.nproc:d}", + f"--nodes={self.nodes}", + f"--time={self._tasktime}", + f"--parsable" + ]) + if self.allocation is not None: + _call = f"{_call} --allocation={self.allocation}" + return _call + + @staticmethod + def _stdout_to_job_id(stdout): + """ + The stdout message after an SBATCH job is submitted. On Frontera, the + standard message is preceded by a log message which looks like: + + ``` + ----------------------------------------------------------------- + Welcome to the Frontera Supercomputer + ----------------------------------------------------------------- + + No reservation for this job + --> Verifying valid submit host (login3)...OK + --> Verifying valid jobname...OK + --> Verifying valid ssh keys...OK + --> Verifying access to desired queue (development)...OK + --> Checking available allocation (EAR21042)...OK + --> Verifying that quota for filesystem ... is at 3.87% allocated...OK + --> Verifying that quota for filesystem ... is at 0.91% allocated...OK + 4738284 + + ``` + :type stdout: str + :param stdout: standard SBATCH response after submitting a job with the + '--parsable' flag + :rtype: str + :return: a matching job ID. We convert str->int->str to ensure that + the job id is an integer value (which it must be) + """ + job_id = stdout.split("OK")[-1].strip().split(";")[0] + try: + int(job_id) + except ValueError: + logger.critical(f"parsed job id '{job_id}' does not evaluate as an " + f"integer, please check that function " + f"`system._stdout_to_job_id()` is set correctly") + sys.exit(-1) + + return job_id + + def run(self, funcs, single=False, **kwargs): + """ + Runs task multiple times in embarrassingly parallel fasion on Frontera. + Executes the list of functions (`funcs`) NTASK times with each + task occupying NPROC cores. + + .. note:: + Completely overwrites the `Slurm.run()` command + + TODO + * can we ssh once or do we have to do it for each process? + * the ssh command prints the ssh prompt to the log file, how do + we supress that? + + :type funcs: list of methods + :param funcs: a list of functions that should be run in order. All + kwargs passed to run() will be passed into the functions. + :type single: bool + :param single: run a single-process, non-parallel task, such as + smoothing the gradient, which only needs to be run by once. + This will change how the job array and the number of tasks is + defined, such that the job is submitted as a single-core job to + the system. + """ + funcs_fid, kwargs_fid = pickle_function_list(funcs, + path=self.path.scratch, + **kwargs) + if single: + logger.info(f"running functions {[_.__name__ for _ in funcs]} on " + f"system 1 time") + _ntask = 1 + else: + logger.info(f"running functions {[_.__name__ for _ in funcs]} on " + f"system {self.ntask} times") + _ntask = self.ntask + + # Run call is slightly different for Frontera, which needs ssh and + # cannot run array jobs + job_ids = [] + for taskid in range(_ntask): + run_call = " ".join([ + f"{self.run_call_header}", + f"{os.path.join(ROOT_DIR, 'system', 'runscripts', 'run')}", + f"--funcs {funcs_fid}", + f"--kwargs {kwargs_fid}", + f"--environment {self.environs or ''},SEISFLOWS_TASKID={taskid}" + ]) + # Need to wrap run call in quotes so it can go through ssh + run_call = f"{self._ssh_call} '{self._conda_activate}; {run_call}'" + if taskid == 0: + logger.debug(run_call) + + stdout = subprocess.run(run_call, stdout=subprocess.PIPE, + text=True, shell=True).stdout + job_ids.append(self._stdout_to_job_id(stdout)) + + # Monitor the job queue until all jobs have completed, or any one fails + try: + status = check_job_status_list(job_ids) + except FileNotFoundError: + logger.critical(f"cannot access job information through 'sacct', " + f"waited 50s with no return, please check job " + f"scheduler and log messages") + sys.exit(-1) + + if status == -1: # Failed job + logger.critical( + msg.cli(f"Stopping workflow. Please check logs for details.", + items=[f"TASKS: {[_.__name__ for _ in funcs]}", + f"SBATCH: {run_call}"], + header="slurm run error", border="=") + ) + sys.exit(-1) + else: + logger.info(f"{self.ntask} tasks finished successfully") + + diff --git a/seisflows/system/lsf.py b/seisflows/system/lsf.py index f7f9d29c..dd7b4f74 100644 --- a/seisflows/system/lsf.py +++ b/seisflows/system/lsf.py @@ -1,26 +1,19 @@ #!/usr/bin/env python3 """ -This is the subclass seisflows.system.lsf_lg +This is the subclass seisflows.system.lsf.Lsf This class provides the core utilities interaction with HPC systems which run using the Platform Load Sharing Facility (LSF) workload management platform. """ import os -import sys import time -import logging import subprocess - -from seisflows.tools import msg, unix -from seisflows.tools.wrappers import findpath -from seisflows.config import custom_import, SeisFlowsPathsParameters - - -PAR = sys.modules['seisflows_parameters'] -PATH = sys.modules['seisflows_paths'] +import sys +from seisflows import ROOT_DIR +from seisflows.system.cluster import Cluster -class Lsf(custom_import("system", "cluster")): +class Lsf(Cluster): """ An interface through which to submit workflows, run tasks in serial or parallel, and perform other system functions. @@ -29,69 +22,77 @@ class Lsf(custom_import("system", "cluster")): classes provide a consistent command set across different computing environments. - Intermediate files are written to a global scratch path PATH.SCRATCH, + Intermediate files are written to a global scratch path self.path.SCRATCH, which must be accessible to all compute nodes. - Optionally, users can provide a local scratch path PATH.LOCAL if each + Optionally, users can provide a local scratch path self.path.LOCAL if each compute node has its own local filesystem. For important additional information, please see - http://seisflows.readthedocs.org/en/latest/manual/manual.html#system-configuration + http://seisflows.readthedocs.org/en/latest/manual/ + manual.html#system-configuration """ - logger = logging.getLogger(__name__).getChild(__qualname__) - def __init__(self): """ These parameters should not be set by the user. Attributes are initialized as NoneTypes for clarity and docstrings. """ - super().__init__() - - @property - def required(self): - """ - Checks parameters and paths - """ - sf = SeisFlowsPathsParameters(super().required) + raise NotImplementedError("This module is still a work in progress") + sys.exit(-1) - sf.par("MPIEXEC", required=False, default="mpiexec", par_type=str, - docstr="Function used to invoke executables on the system. " - "For example 'srun' on SLURM systems, or './' on a " - "workstation. If left blank, will guess based on the " - "system.") + super().__init__() + self.logger.warning("system.LSF is underdeveloped and " + "will likely not work without significant testing " + "and source code edits") + + self.required.par( + "MPIEXEC", required=False, default="mpiexec", par_type=str, + docstr="Function used to invoke executables on the system. " + "For example 'srun' on SLURM systems, or './' on a " + "workstation. If left blank, will guess based on the " + "system." + ) # Define the Parameters required by this module - sf.par("NTASKMAX", required=False, default=100, par_type=int, - docstr="Limit on the number of concurrent tasks in array") - - sf.par("NODESIZE", required=True, par_type=int, - docstr="The number of cores per node defined by the system") - - sf.par("LSFARGS", required=False, default="", par_type=str, - docstr="Any optional, additional LSG arguments that will be " - "passed to the LSF submit scripts") - - def submit(self, workflow): - """ - Submits workflow - """ - # Prepare 'bsub' arguments - submit_call = " ".join([ - f"bsub", - f"{PAR.LSFARGS}", - f"-J {PAR.TITLE}", - f"-o {self.output_log}.log", - f"-e {self.error_log}.log", - f"-n {PAR.NODESIZE}", - f'-R "span[ptile={PAR.NODESIZE}"', - f"-W {PAR.WALLTIME:d}:00", - os.path.join(findpath("seisflows.system"), "wrappers", "submit"), - PATH.OUTPUT - ]) - - super().submit(workflow, submit_call) - - def run(self, classname, method, *args, **kwargs): + self.required.par( + "NTASKMAX", required=False, default=100, par_type=int, + docstr="Limit on the number of concurrent tasks in array" + ) + self.required.par( + "NODESIZE", required=True, par_type=int, + docstr="The number of cores per node defined by the system" + ) + self.required.par( + "LSFARGS", required=False, default="", par_type=str, + docstr="Any optional, additional LSG arguments that will be " + "passed to the LSF submit scripts" + ) + self.required.path( + "LOCAL", required=False, + docstr="path to local data to be used during workflow" + ) + + def submit(self, submit_call=None): + """ + Submits workflow using 'bsub' arguments + """ + if submit_call is None: + submit_call = " ".join([ + f"bsub", + f"{self.par.LSFARGS}", + f"-J {self.par.TITLE}", + f"-o {self.output_log}.log", + f"-e {self.error_log}.log", + f"-n {self.par.NODESIZE}", + f'-R "span[ptile={self.par.NODESIZE}"', + f"-W {self.par.WALLTIME:d}:00", + f"{os.path.join(ROOT_DIR, 'scripts', 'submit')}", + f"--output {self.path.OUTPUT}" + ]) + + super().submit(submit_call=submit_call) + + def run(self, classname, method, single=False, run_call=None, **kwargs): """ Runs task multiple times in embarrassingly parallel fasion on the maui cluster @@ -105,117 +106,103 @@ def run(self, classname, method, *args, **kwargs): :param method: the method from the given `classname` to run """ # Checkpoint this individual method before proceeding - self.checkpoint(PATH.OUTPUT, classname, method, args, kwargs) + self.checkpoint(self.path.OUTPUT, classname, method, kwargs) # Submit job array run_call = " ".join([ f"bsub", - f"{PAR.LSFARGS}", - f"-J {PAR.TITLE}", - f"-n {PAR.NPROC}", - f'-R "span[ptile={PAR.NODESIZE}"', - f"-W {PAR.TASKTIME:d}:00", - f"-o {os.path.join(PATH.WORKDIR, 'output.logs', '%J_%I')}", - f"[1-{PAR.NTASK}] % {PAR.NTASKMAX}", - f"{os.path.join(findpath('seisflows.system'), 'wrappers', 'run')}", - f"{PATH.OUTPUT}", - f"{classname}", - f"{method}", - f"{PAR.ENVIRONS}" + f"{self.par.LSFARGS}", + f"-J {self.par.TITLE}", + f"-n {self.par.NPROC}", + f'-R "span[ptile={self.par.NODESIZE}"', + f"-W {self.par.TASKTIME:d}:00", + f"-o {os.path.join(self.path.WORKDIR, 'output.logs', '%J_%I')}", + f"[1-{self.par.NTASK}] % {self.par.NTASKMAX}", + f"{os.path.join(ROOT_DIR, 'scripts', 'run')}", + f"--output {self.path.OUTPUT}" + f"--classname {classname}", + f"--funcname {method}", + f"--environment {self.par.ENVIRONS or ''}" ]) + self.logger.debug(run_call) - stdout = subprocess.check_output(run_call, shell=True) - - # keep track of job ids - jobs = self.job_id_list(stdout, PAR.NTASK) - - while True: - # Wait seconds before checking status again - time.sleep(30) - self.timestamp() - isdone, jobs = self.job_status(classname, method, jobs) - if isdone: - return + # Single-process jobs simply need to replace a few sbatch arguments. + # Do it AFTER `run_call` has been defined so that subclasses submitting + # custom run calls can still benefit from this + if single: + self.logger.info("replacing parts of sbatch run call for single " + "process job") + run_call = _modify_run_call_single_proc(run_call) - def run_single(self, classname, method, *args, **kwargs): - """ Runs task multiple times in embarrassingly parallel fasion - - Executes classname.method(*args, **kwargs) NTASK times, each time on - NPROC cpu cores - """ - # Checkpoint this individual method before proceeding - self.checkpoint(PATH.OUTPUT, classname, method, args, kwargs) - - # Submit job array - run_call = " ".join([ - f"bsub", - f"{PAR.LSFARGS}", - f"-J {PAR.TITLE}", - f"-n {PAR.NPROC}", - f'-R "span[ptile={PAR.NODESIZE}"', - f"-W {PAR.TASKTIME:d}:00", - f"-o {os.path.join(PATH.WORKDIR, 'output.logs', '%J')}", - f"[1-1]", - f"{os.path.join(findpath('seisflows.system'), 'wrappers', 'run')}", - f"{PATH.OUTPUT}", - f"{classname}", - f"{method}", - f"{PAR.ENVIRONS}" - ]) - - stdout = check_output(run_call, shell=True) + # The standard response from SLURM when submitting jobs + # is something like 'Submitted batch job 441636', we want job number + stdout = subprocess.run(run_call, stdout=subprocess.PIPE, + text=True, shell=True).stdout # keep track of job ids - jobs = self.job_id_list(stdout, ntask=1) + jobs = self._job_id_list(stdout, single) while True: # Wait seconds before checking status again - time.sleep(30) - self.timestamp() - isdone, jobs = self.job_status(classname, method, jobs) + time.sleep(5) + isdone, jobs = self._job_status(classname, method, jobs) if isdone: return - def job_id_list(self, stdout, ntask): + def taskid(self): """ - Parses job id list from sbatch standard output - - :type stdout: str - :param stdout: the output of subprocess.check_output() - :type ntask: int - :param ntask: number of tasks currently running + Provides a unique identifier for each running task """ - job = stdout.split()[1].strip()[1:-1] - if ntask == 1: - return [job] - else: - number_jobs = range(1, PAR.NSRC + 1) - return ["{job}[{}]".format(_) for _ in number_jobs] + return int(os.getenv('LSB_JOBINDEX')) - 1 - def job_status(self, classname, method, jobs): + def checkpoint(self, path, classname, method, kwargs): + """Inherits from workflow.system.workstation.Workstation""" + self.checkpoint(path=path, classname=classname, method=method, + kwargs=kwargs) + + def _check_job_status(self, job_ids): """ Queries completion status of a single job + TODO this function is mangled, needs to be rewritten + :type job: str :param job: job id to query """ job_finished = [] - for job in jobs: - state = self._query(job) + for job_id in job_ids: + state = self._query(job_id) if state == "DONE": job_finished.append(True) else: job_finished.append(False) if state == "EXIT": - print(msg.cli(f"LSF job {job} failed to execute " - f"{classname}.{method}.", header="error", - border="=")) - sys.exit(-1) + return job_id, "FAILED" isdone = all(job_finished) - return isdone, jobs + return None, "OKAY" + + def _job_id_list(self, stdout, single): + """ + Parses job id list from LSF standard output + + :type stdout: str + :param stdout: the output of subprocess.check_output() + :type single: bool + :param single: if running a single process job, returns a list of length + 1 with a single job id, else returns a list of length self.par.NTASK + for all arrayed jobs + :rtype: list + :return: a list of array jobs that should be currently running + """ + job = stdout.split()[1].strip()[1:-1] + if single: + return [job] + else: + number_jobs = range(1, self.par.NSRC + 1) + return ["{job}[{}]".format(_) for _ in number_jobs] def _query(self, jobid): """ @@ -225,41 +212,34 @@ def _query(self, jobid): :param jobid: job id to query LSF system about """ # Write the job status output to a temporary file - with open(os.path.join(PATH.SYSTEM, "job_status", "w")) as f: - call('bjobs -a -d "{jobid}"', stdout=f) + with open(os.path.join(self.path.SYSTEM, "job_status", "w")) as f: + subprocess.call('bjobs -a -d "{jobid}"', stdout=f) # Read the job status back from the text file - with open(os.path.join(PATH.SYSTEM, "job_status", "r")) as f: + with open(os.path.join(self.path.SYSTEM, "job_status", "r")) as f: lines = f.readlines() state = lines[1].split()[2].strip() return state - def taskid(self): - """ - Provides a unique identifier for each running task - """ - return int(os.getenv('LSB_JOBINDEX')) - 1 - - def timestamp(self): - """ - Timestamp the current running job - """ - with open(os.path.join(PATH.SYSTEM, "timestamps", "a")) as f: - f.write(time.strftime("%H:%M:%S")) - f.write("\n") - - def save_kwargs(self, classname, method, kwargs): - """ - Save key word arguments as a pickle object. - - :type classname: str - :param classname: the class to run - :type method: str - :param method: the method from the given `classname` to run - """ - kwargspath = os.path.join(PATH.OUTPUT, "kwargs") - kwargsfile = os.path.join(kwargspath, f"{classname}_{method}.p") + # def save_kwargs(self, classname, method, kwargs): + # """ + # Save key word arguments as a pickle object. + # + # :type classname: str + # :param classname: the class to run + # :type method: str + # :param method: the method from the given `classname` to run + # """ + # kwargspath = os.path.join(self.path.OUTPUT, "kwargs") + # kwargsfile = os.path.join(kwargspath, f"{classname}_{method}.p") + # + # unix.mkdir(kwargspath) + # saveobj(kwargsfile, kwargs) + + +def _modify_run_call_single_proc(run_call): + """ - unix.mkdir(kwargspath) - saveobj(kwargsfile, kwargs) + """ + raise NotImplementedError("This function needs to be written") diff --git a/seisflows/system/maui.py b/seisflows/system/maui.py new file mode 100644 index 00000000..45da8e92 --- /dev/null +++ b/seisflows/system/maui.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python3 +""" +Maui is a New Zealand eScience Infrastructure (NeSI) high performance computer. +Maui operates on a SLURM workload manager and therefore overloads the SLURM +System module. Maui-specific parameters and functions are defined here. + +Information on Maui can be found here: +https://support.nesi.org.nz/hc/en-gb/articles/360000163695-M%C4%81ui + +.. note:: + Python and conda capabilities are NOT accessible from Maui, these + capabilities have been shifted onto a separate cluster: Maui ancil + This subclass therefore moves all Python dependent capabilities + (i.e., SeisFlows3, Pyatoa) onto the ancilary cluster. + + See also: https://support.nesi.org.nz/hc/en-gb/articles/\ + 360000203776-M%C4%81ui-Ancillary-Nodes + +""" +import os +from seisflows.system.slurm import Slurm + + +class Maui(Slurm): + """ + System Maui + ----------- + New Zealand Maui-specfic modifications to base SLURM system + + Parameters + ---------- + :type account: str + :param account: Maui account to submit jobs under, will be used for the + '--account' sbatch argument + :type cpus_per_task: int + :param cpus_per_task: allow for multiple cpus per task, i.e,. + multithreaded jobs + :type cluster: str + :param cluster: cluster to submit jobs to. Available are Maui and + Mahuika + :type partition: str + :param partition: partition of the cluster to submit jobs to. + :type ancil_cluster: str + :param ancil_cluster: name of the ancilary cluster used for pre- + post-processing tasks. + :type ancil_partition: name of the partition of the ancilary cluster + :type ancil_tasktime: int + :param ancil_tasktime: Tasktime in minutes for pre and post-processing + jobs submitted to Maui ancil. + + Paths + ----- + *** + """ + __doc__ = Slurm.__doc__ + __doc__ + + def __init__(self, account=None, cpus_per_task=1, cluster="maui", + partition="nesi_research", ancil_cluster="maui_ancil", + ancil_partition="nesi_prepost", ancil_tasktime=1, **kwargs): + """Maui init""" + super().__init__(**kwargs) + + self.account = account + self.cluster = cluster + self.partition = partition + self.cpus_per_task = cpus_per_task + self.ancil_cluster = ancil_cluster + self.ancil_partition = ancil_partition + self.ancil_tasktime = ancil_tasktime + if self.environs and "SLURM_MEM_PER_CPU" not in self.environs: + self.environs = f"{self.environs},SLURM_MEM_PER_CPU" + else: + self.environs = "SLURM_MEM_PER_CPU" + + self._partitions = {"nesi_research": 40} + self._available_clusters = ["maui", "mahuika"] + + def check(self): + """ + Checks parameters and paths + """ + super().check() + + assert("SLURM_MEM_PER_CPU" in (self.environs or "")), \ + ("Maui runs Slurm>=21 which enforces mutually exclusivity of Slurm " + "memory environment variables SLURM_MEM_PER_CPU and " + "SLURM_MEM_PER_NODE. Due to the cross-cluster nature of " + "running SeisFlows on Maui, we must remove one env. variable. " + "Please add 'SLURM_MEM_PER_CPU' to self.par.ENVIRONS.") + + assert(self.cluster in self._available_clusters), ( + f"System 'Maui' parameter cluster must be in " + f"{self._available_clusters}" + ) + + assert(self.account), f"System 'Maui' requires parameter 'account'" + + @property + def submit_call_header(self): + """ + The submit call defines the SBATCH header which is used to submit a + workflow task list to the system. It is usually dictated by the + system's required parameters, such as account names and partitions. + Submit calls are modified and called by the `submit` function. + + .. note:: + The master job must be run on `maui_ancil` because Maui does + not have the ability to run the command "sacct", nor can it + not have the ability to run the command "sacct", nor can it + use the Conda environment that has been set by Ancil + + .. note:: + We do not place SLURMARGS into the sbatch command to avoid the + export=None which will not propagate the conda environment + + :rtype: str + :return: the system-dependent portion of a submit call + """ + _call = " ".join([ + f"sbatch", + f"--account={self.account}", + f"--cluster={self.ancil_cluster}", + f"--partition={self.ancil_partition}", + f"--job-name={self.title}", + f"--output={self.path.output_log}", + f"--error={self.path.output_log}", + f"--ntasks=1", + f"--cpus-per-task=1", + f"--time={self._walltime}" + ]) + return _call + + @property + def run_call_header(self): + """ + The run call defines the SBATCH header which is used to run tasks during + an executing workflow. Like the submit call its arguments are dictated + by the given system. Run calls are modified and called by the `run` + function + + :rtype: str + :return: the system-dependent portion of a run call + """ + _call = " ".join([ + f"sbatch", + f"{self.slurm_args or ''}", + f"--account={self.account}", + f"--job-name={self.title}", + f"--clusters={self.cluster}", + f"--partition={self.partition}", + f"--cpus-per-task={self.cpus_per_task}", + f"--nodes={self.nodes:d}", + f"--ntasks={self.nproc:d}", + f"--time={self._tasktime}", + f"--output={os.path.join(self.path.log_files, '%A_%a')}", + f"--array=0-{self.ntask-1 % self.ntask_max}", + f"--parsable" + ]) + return _call + + @property + def ancil_run_call_header(self): + """ + A modified form of `run_call` which is used to run jobs on the Ancil + pre/postprocessing cluster of Maui. This is used to run Pyaflowa jobs + which require the Conda environment active on Maui Ancil. + """ + _call = " ".join([ + f"sbatch", + f"{self.slurm_args or ''}", + f"--account={self.account}", + f"--job-name={self.title}", + f"--clusters={self.ancil_cluster}", + f"--partition={self.ancil_partition}", + f"--cpus-per-task={self.cpus_per_task}", + f"--nodes={self.nodes:d}", + f"--ntasks={self.nproc:d}", + f"--time={self.ancil_tasktime:d}", + f"--output={os.path.join(self.path.log_files, '%A_%a')}", + f"--array=0-{self.ntask-1 % self.ntask_max}" + ]) + return _call diff --git a/seisflows-super/optimize/__init__.py b/seisflows/system/runscripts/__init__.py similarity index 100% rename from seisflows-super/optimize/__init__.py rename to seisflows/system/runscripts/__init__.py diff --git a/seisflows/system/runscripts/run b/seisflows/system/runscripts/run new file mode 120000 index 00000000..e017cbf0 --- /dev/null +++ b/seisflows/system/runscripts/run @@ -0,0 +1 @@ +run_funcs.py \ No newline at end of file diff --git a/seisflows/system/runscripts/run_funcs.py b/seisflows/system/runscripts/run_funcs.py new file mode 100755 index 00000000..5d3ff35c --- /dev/null +++ b/seisflows/system/runscripts/run_funcs.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +""" +Only required when system==cluster (or any subclass of cluster) + +This script is a wrapper for running tasks on systems during an active workflow. +Loads in functions/methods and their keyword arguments from pickle files which +have been written by system.run(). Runs functions in order of list. + +.. note:: + Not to be called by the user, this script is to be called by system.run() + +.. rubric:: + >> python run --funcs function_list.p --kwargs kwarg_dict.p +""" +import argparse +import dill +import os + +from seisflows import logger +from seisflows.tools.config import config_logger + + +def parse_args(): + """ + Get command line arguments + """ + parser = argparse.ArgumentParser("Run arguments for system submitted tasks") + + parser.add_argument("-f", "--funcs", type=str, nargs="?", required=True, + help="path to pickle file containing a list of " + "functions/methods that should be run by the " + "submitted process" + ) + parser.add_argument("-k", "--kwargs", type=str, nargs="?", required=False, + default=None, + help="path to pickle file containing a dictionary of " + "keyword argumnets that should be passed to the " + "functions") + parser.add_argument("-e", "--environment", type=str, nargs="?", + required=False, + help="Optional comma-separated environment variables, " + "which should be given as " + "VARNAME1=value1,VARNAME2=value2 and so on. These " + "will be separated and instantiated into Python's " + "os.environ") + + return parser.parse_args() + + +def export(myenv): + """ + Exports comma delimited list of environment variables also allows deleting + environment variables by providing VARNAME with no corresponding value + + e.g. VARNAME1=value1,VARNAME2=value2,VARNAME3 + will add VARNAME1 and VARNAME2 to the environment with corresponding values, + and remove VARNAME3 from the environment + + .. note:: + The ability to delete environment variables came from the Maui upgrade + to Slurm 21.08, which enforced mutually exclusivity of --mem-per-cpu + and --mem-per-node, which are both defined on cross-cluster submissions. + We needed a mechanism to remove one of these + + :type myenv: str + :param myenv: the system environment to take variables from + """ + for item in myenv.split(","): + if item: + try: + key, val = item.split("=") + os.environ[key] = val + # Variables to be deleted will not split on '=', throwing ValueError + except ValueError: + try: + del os.environ[item] + # If a NoneType sneaks through, it will throw TypeEror on 'del' + except TypeError: + continue + + +if __name__ == '__main__': + """Runs task within a currently executing workflow """ + args = parse_args() + + if args.environment: + export(args.environment) + + # Load the functions + with open(args.funcs, "rb") as f: + funcs = dill.load(f) + + # Load the kwargs. Optional, if No kwargs then funcs will be run bare + if args.kwargs is not None: + with open(args.kwargs, "rb") as f: + kwargs = dill.load(f) + else: + kwargs = {} + + # Hold onto the main handler for after the task is finished + handlers = logger.handlers + + # Redirect the logger to point at stdout, which the Cluster system (or sub + # class of it) will redirect to a task specific log file. Currently no + # way of accessing user defiend 'verbose' or 'log_level' parameters + config_logger(filename=None, stream_handler=True) + + # Evaluate the function with given keyword arguments + for func in funcs: + func(**kwargs) + + # Replace original log handler now that the tasks have finished + logger.handlers = handlers + + diff --git a/seisflows/scripts/submit b/seisflows/system/runscripts/submit similarity index 100% rename from seisflows/scripts/submit rename to seisflows/system/runscripts/submit diff --git a/seisflows/system/runscripts/submit_workflow.py b/seisflows/system/runscripts/submit_workflow.py new file mode 100755 index 00000000..ecb8210d --- /dev/null +++ b/seisflows/system/runscripts/submit_workflow.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +""" +Only required when system==cluster (or any subclass of cluster) +This script is used to execute a MASTER job on system. It is essentially the +same as `system.workstation.Workstation.submit()`, except it can be called as +a script using subprocess, allowing it to be submitted to e.g., a job scheduler + +.. note:: + Not to be called by the user. This is called when the user runs + `seisflows submit` or `seisflows resume`. Internally this script is meant to + be called by system.submit(). + +.. rubric:: + >> python submit -w ./ -p parameters.yaml + OR + >> sbatch submit -w ./ -p parameters.yaml +""" +import os +import argparse +from seisflows.tools.config import import_seisflows + + +def parse_args(): + """ + Get command line arguments required for the submit script + """ + parser = argparse.ArgumentParser("Run arguments for system submitted tasks") + parser.add_argument("-w", "--workdir", type=str, nargs="?", required=True, + default=os.getcwd(), help="SeisFlows working directory") + parser.add_argument("-p", "--parameter_file", type=str, nargs="?", + required=True, default="parameters.yaml", + help="SeisFlows parameter file") + + return parser.parse_args() + + +if __name__ == '__main__': + """ + Submit workflow.main() as a MASTER JOB on the compute system + """ + args = parse_args() + workflow = import_seisflows(workdir=args.workdir, + parameter_file=args.parameter_file, + stream_handler=False) + workflow.check() + workflow.setup() + workflow.run() diff --git a/seisflows/system/singularity.py b/seisflows/system/singularity.py new file mode 100644 index 00000000..0dd44ad0 --- /dev/null +++ b/seisflows/system/singularity.py @@ -0,0 +1,212 @@ +#!/usr/bin/env python3 +""" +A Cluster-adjacent base class that provides core utilities for interactions +with HPC systems running Singularity. Must be overloaded by subclasses defined +for specific workload managers / clusters. + +The `Singularity` class was written for clusters running SeisFlows through +Docker containers using Singularity. The reason for writing a separate class +is because Docker containers do not have access to the workload manager (e.,g +SLURM/sbatch) and therefore we cannot run job submission calls directly from +the Python environment. Instead, each time a job must be submitted to the +Cluster, the User must manually submit. + +.. note:: + To users looking to run SeisFlows directly via their Cluster Conda + environment, look at the `Cluster` class and its workload manager-specific + sub-classes +""" +import os +import subprocess +from seisflows import logger, ROOT_DIR +from seisflows.tools import msg +from seisflows.tools.unix import nproc, cp +from seisflows.tools.config import pickle_function_list, import_seisflows +from seisflows.system.workstation import Workstation +from seisflows.system.slurm import modify_run_call_single_proc + + +class Singularity(Workstation): + """ + Singularity System + ------------------ + HPC interfacing through Docker/Singularity containers + + Parameters + ---------- + :type title: str + :param title: The name used to submit jobs to the system, defaults + to the name of the current working directory + :type mpiexec: str + :param mpiexec: Function used to invoke executables on the system. + For example 'mpirun', 'mpiexec', 'srun', 'ibrun' + :type ntask_max: int + :param ntask_max: limit the number of concurrent tasks in a given array job + :type tasktime: float + :param tasktime: maximum job time in minutes for each job spawned by + the SeisFlows master job during a workflow. These include, e.g., + running the forward solver, adjoint solver, smoother, kernel combiner. + All spawned tasks receive the same task time. Fractions of minutes + acceptable. + :type environs: str + :param environs: Optional environment variables to be provided in the + following format VAR1=var1,VAR2=var2... Will be set using + os.environs + + Paths + ----- + :type path_container: str + :param path_container: path to the Docker Image that contains adjTomo + software package + *** + """ + __doc__ = Workstation.__doc__ + __doc__ + + def __init__(self, title=None, mpiexec="", ntask_max=None, + tasktime=1, environs="", singularity_exec="singularity", + path_container=None, **kwargs): + """Instantiate the Cluster System class""" + super().__init__(**kwargs) + + if title is None: + self.title = os.path.basename(os.getcwd()) + else: + self.title = title + self.mpiexec = mpiexec + self.ntask_max = ntask_max or nproc() - 1 # -1 because master job + self.tasktime = tasktime + self.environs = environs or "" + self.singularity_exec = singularity_exec + + self.path["container"] = path_container + self.path["run"] = os.path.join(self.path.scratch, "run") + + # def check(self): + # """ + # Checks path and parameter validity + # """ + # super().check() + # + # assert(self.path.container and os.path.exists(self.path.container)), ( + # f"`Singularity` System class requires a Docker Image specified in " + # f" path `path_container`" + # ) + # + # # # Check that 'singularity' exists on system + # try: + # subprocess.run(f"which {self.singularity_exec}", check=True, + # shell=True, stdout=subprocess.DEVNULL) + # except subprocess.CalledProcessError: + # logger.critical(f"Singularity exectuable {self.singularity_exec} " + # f"not found on sytem (using `which`), but is " + # f"required to run a `Singularity` System. Please " + # f"check your parameter: `singularity_exec`.") + # sys.exit(-1) + + def setup(self): + """ + Copies 'submit' and 'run' .py scripts from the repository into the + working directory so that the User can run these scripts directly. + This is a manual step in order to allow Users to run with a container + without using native environment commands (e.g., sbatch) from inside a + container. + """ + super().setup() + + # Location of scripts INSIDE the repository + run_script = os.path.join(ROOT_DIR, "system", "runscripts", "run") + cp(run_script, self.path.run) + + @property + def run_call_header(self): + """ + The run call defines the Singularity wrapper which executes run calls + using the Docker image. It also binds the current working directory + inside the container so that we can write back to the local filesystem. + + .. note:: + Generalized `cluster` returns empty string but child system + classes will need to overwrite the submit call. + + :rtype: str + :return: the system-dependent portion of a run call + """ + return (f"{self.singularity_exec} exec -c " + f"--bind $(pwd):/work {self.path.container} " + f"bash -c 'cd /work;") + + def submit(self, workdir=None, parameter_file="parameters.yaml"): + """ + Submits the main workflow job as a serial job submitted directly to + the system that is running the master job + + :type workdir: str + :param workdir: path to the current working directory + :type parameter_file: str + :param parameter_file: parameter file name used to instantiate the + SeisFlows package + """ + workflow = import_seisflows(workdir=workdir or self.path.workdir, + parameter_file=parameter_file) + workflow.check() + workflow.setup() + workflow.run() + + def run(self, funcs, single=False, **kwargs): + """ + Runs tasks multiple times in parallel by submitting NTASK new jobs to + system. The list of functions and its kwargs are saved as pickles files, + and then re-loaded by each submitted process with specific environment + variables. Each spawned process will run the list of functions. + + :type funcs: list of methods + :param funcs: a list of functions that should be run in order. All + kwargs passed to run() will be passed into the functions. + :type single: bool + :param single: run a single-process, non-parallel task, such as + smoothing the gradient, which only needs to be run by once. + This will change how the job array and the number of tasks is + defined, such that the job is submitted as a single-core job to + the system. + :type run_call: str + :param run_call: the call used to submit the run script. If None, + attempts default run call which should be suited for the given + system. Can be overwritten by child classes to involve other + arguments + """ + # Single tasks only need to be run one time, as `TASK_ID` === 0 + ntasks = {True: 1, False: self.ntask}[single] + funcs_fid, kwargs_fid = pickle_function_list(functions=funcs, + path=self.path.scratch, + **kwargs) + logger.info(f"running functions {[_.__name__ for _ in funcs]} on " + f"system {self.ntask} times") + + # Create the run call which will simply call an external Python script + # e.g., run --funcs func.p --kwargs kwargs.p --environment ... + run_call = " ".join([ + f"{self.run_call_header}", + f"{self.path.run}", + f"--funcs {funcs_fid}", + f"--kwargs {kwargs_fid}", + f"--environment {self.environs}" + f"'" # <- important, closes the bash command started in header + ]) + logger.debug(run_call) + + # !!! This is SLURM dependent. Will need to change if other scheduler + if single: + modify_run_call_single_proc(run_call) + + # Write the run call inside a script to make it cleaner for User to call + runscript = os.path.join(self.path.scratch, "run_task.sh") + with open(runscript, "w") as f: + f.write("#!/bin/bash -e\n") # shebang + f.write(run_call) + + input(msg.cli(f"sh {os.path.relpath(runscript)}", + header="task run call", border="=", + items=["> please execute the above command", + "> hit `enter` when all jobs are complete", + "> monitor jobs using `sacct` or `squeue`"]) + ) diff --git a/seisflows/system/slurm.py b/seisflows/system/slurm.py index e8da4afc..f27144e6 100644 --- a/seisflows/system/slurm.py +++ b/seisflows/system/slurm.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 """ -The Simmple Linux Utility for Resource Management (SLURM) is a commonly used +The Simple Linux Utility for Resource Management (SLURM) is a commonly used workload manager on many high performance computers / clusters. The Slurm system class provides generalized utilites for interacting with Slurm systems. @@ -12,329 +12,421 @@ system supers will not be up to date until access to those systems are granted. This rosetta stone, for converting from SLURM to other workload management tools will be useful: https://slurm.schedmd.com/rosetta.pdf + +.. note:: + SLURM systems expect walltime/tasktime in format: "minutes", + "minutes:seconds", "hours:minutes:seconds". SeisFlows uses the latter + and converts task and walltimes from input of minutes to a time string. + +TODO + Create 'slurm_singulairty', a child class for singularity-based runs which + loads and runs programs through singularity, OR add a parameter options + which will change the run and/or submit calls """ import os import sys -import math +import numpy as np import time -import logging import subprocess +from datetime import timedelta +from seisflows import ROOT_DIR, logger +from seisflows.system.cluster import Cluster from seisflows.tools import msg -from seisflows.config import ROOT_DIR, custom_import, SeisFlowsPathsParameters +from seisflows.tools.config import pickle_function_list -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] +# Define bad states defined by SLURM which signifiy failed jobs +BAD_STATES = ["TIMEOUT", "FAILED", "NODE_FAIL", "OUT_OF_MEMORY", "CANCELLED"] -class Slurm(custom_import("system", "cluster")): + +class Slurm(Cluster): """ - Generalized interface for submitting jobs to and interfacing with a SLURM - workload management system. + System Slurm + ------------ + Interface for submitting and monitoring jobs on HPC systems running the + Simple Linux Utility for Resource Management (SLURM) workload manager. + + Parameters + ---------- + :type slurm_args: str + :param slurm_args: Any (optional) additional SLURM arguments that will + be passed to the SBATCH scripts. Should be in the form: + '--key1=value1 --key2=value2" + + Paths + ----- + *** """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) + __doc__ = Cluster.__doc__ + __doc__ - def __init__(self): + def __init__(self, ntask_max=100, slurm_args="", **kwargs): """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. + Slurm-specific setup parameters + + :type ntask_max: int + :param ntask_max: set the maximum number of simultaneously running array + job processes that are submitted to a cluster at one time. """ - super().__init__() + super().__init__(**kwargs) - @property - def required(self): + # Overwrite the existing 'mpiexec' + if self.mpiexec is None: + self.mpiexec = "srun -u" + self.ntask_max = ntask_max + self.slurm_args = slurm_args + + # Must be overwritten by child class + self.partition = None + self._partitions = {} + + # Convert walltime and tasktime to datetime str 'H:MM:SS' + self._tasktime = str(timedelta(minutes=self.tasktime)) + self._walltime = str(timedelta(minutes=self.walltime)) + + def check(self): """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. + Checks parameters and paths """ - sf = SeisFlowsPathsParameters(super().required) + super().check() + + assert(self.node_size is not None), ( + f"Slurm system child classes require defining the node_size or " + f"the number of cores per node inherent to the compute system.") - sf.par("MPIEXEC", required=False, default="srun -u", par_type=str, - docstr="Function used to invoke executables on the system. " - "For example 'srun' on SLURM systems, or './' on a " - "workstation. If left blank, will guess based on the " - "system.") + assert(self.partition in self._partitions), \ + f"Cluster partition name must match {self._partitions}" - sf.par("NTASKMAX", required=False, default=100, par_type=int, - docstr="Limit on the number of concurrent tasks in array") + assert("--parsable" in self.run_call_header), ( + f"System `run_call_header` requires SBATCH argument '--parsable' " + f"which is required to keep STDOUT formatted correctly when " + f"submitting jobs to the system." + ) + + @property + def nodes(self): + """Defines the number of nodes which is derived from system node size""" + _nodes = np.ceil(self.nproc / float(self.node_size)) + _nodes = _nodes.astype(int) + return _nodes - sf.par("NODESIZE", required=True, par_type=int, - docstr="The number of cores per node defined by the system") + @property + def node_size(self): + """Defines the node size of a given cluster partition. This is a hard + set number defined by the system architecture""" + return self._partitions[self.partition] + + @property + def submit_call_header(self): + """ + The submit call defines the SBATCH header which is used to submit a + workflow task list to the system. It is usually dictated by the + system's required parameters, such as account names and partitions. + Submit calls are modified and called by the `submit` function. - sf.par("SLURMARGS", required=False, default="", par_type=str, - docstr="Any optional, additional SLURM arguments that will be " - "passed to the SBATCH scripts") + :rtype: str + :return: the system-dependent portion of a submit call + """ + _call = " ".join([ + f"sbatch", + f"{self.slurm_args or ''}", + f"--job-name={self.title}", + f"--output={self.path.output_log}", + f"--error={self.path.output_log}", + f"--ntasks-per-node={self.node_size}", + f"--nodes=1", + f"--time={self._walltime}" + ]) + return _call - return sf + @property + def run_call_header(self): + """ + The run call defines the SBATCH header which is used to run tasks during + an executing workflow. Like the submit call its arguments are dictated + by the given system. Run calls are modified and called by the `run` + function - def submit(self, submit_call=None): + :rtype: str + :return: the system-dependent portion of a run call """ - Submits workflow as a single process master job - - :type workflow: module - :param workflow: - :type submit_call: str - :param submit_call: subclasses (e.g., specific SLURM cluster subclasses) - can overload the sbatch command line input by setting - submit_call. If set to None, default submit_call will be set here. + _call = " ".join([ + f"sbatch", + f"{self.slurm_args or ''}", + f"--job-name={self.title}", + f"--nodes={self.nodes}", + f"--ntasks-per-node={self.node_size:d}", + f"--ntasks={self.nproc:d}", + f"--time={self._tasktime}", + f"--output={os.path.join(self.path.log_files, '%A_%a')}", + f"--array=0-{self.ntask-1}%{self.ntask_max}", + f"--parsable" + ]) + return _call + + @staticmethod + def _stdout_to_job_id(stdout): """ - if submit_call is None: - submit_call = " ".join([ - f"sbatch", - f"{PAR.SLURMARGS or ''}", - f"--job-name={PAR.TITLE}", - f"--output={self.output_log}", - f"--error={self.error_log}", - f"--ntasks-per-node={PAR.NODESIZE}", - f"--nodes=1", - f"--time={PAR.WALLTIME:d}", - f"{os.path.join(ROOT_DIR, 'scripts', 'submit')}", - "--output {PATH.OUTPUT}" - ]) - self.logger.debug(submit_call) - - super().submit(submit_call) - - def run(self, classname, method, single=False, run_call=None, **kwargs): + The stdout message after an SBATCH job is submitted, from which we get + the job number, differs between systems, allow this to vary + + .. note:: Examples + 1) standard example: Submitted batch job 4738244 + 2) (1) with '--parsable' flag: 4738244 + 3) federated cluster: Submitted batch job 4738244; Maui + 4) (3) with '--parsable' flag: 4738244; Maui + + This function deals with cases (2) and (4). Other systems that have more + complicated stdout messages will need to overwrite this function + + :type stdout: str + :param stdout: standard SBATCH response after submitting a job with the + '--parsable' flag + :rtype: str + :return: a matching job ID. We convert str->int->str to ensure that + the job id is an integer value (which it must be) + :raises SystemExit: if the job id does not evaluate as an integer + """ + job_id = str(stdout).split(";")[0].strip() + try: + int(job_id) + except ValueError: + logger.critical(f"parsed job id '{job_id}' does not evaluate as an " + f"integer, please check that function " + f"`system._stdout_to_job_id()` is set correctly") + sys.exit(-1) + + return job_id + + def run(self, funcs, single=False, **kwargs): """ Runs task multiple times in embarrassingly parallel fasion on a SLURM - cluster. Executes classname.method(*args, **kwargs) `NTASK` times, - each time on `NPROC` CPU cores + cluster. Executes the list of functions (`funcs`) NTASK times with each + task occupying NPROC cores. .. note:: - The actual CLI call structure looks something like this - $ sbatch --args scripts/run OUTPUT class method environs + Completely overwrites the `Cluster.run()` command - :type classname: str - :param classname: the class to run - :type method: str - :param method: the method from the given `classname` to run + :type funcs: list of methods + :param funcs: a list of functions that should be run in order. All + kwargs passed to run() will be passed into the functions. :type single: bool :param single: run a single-process, non-parallel task, such as smoothing the gradient, which only needs to be run by once. This will change how the job array and the number of tasks is defined, such that the job is submitted as a single-core job to the system. - :type run_call: str - :param run_call: subclasses (e.g., specific SLURM cluster subclasses) - can overload the sbatch command line input by setting - run_call. If set to None, default run_call will be set here. """ - self.checkpoint(PATH.OUTPUT, classname, method, kwargs) + funcs_fid, kwargs_fid = pickle_function_list(funcs, + path=self.path.scratch, + **kwargs) + if single: + logger.info(f"running functions {[_.__name__ for _ in funcs]} on " + f"system 1 time") + else: + logger.info(f"running functions {[_.__name__ for _ in funcs]} on " + f"system {self.ntask} times") # Default sbatch command line input, can be overloaded by subclasses # Copy-paste this default run_call and adjust accordingly for subclass - if run_call is None: - run_call = " ".join([ - "sbatch", - f"{PAR.SLURMARGS or ''}", - f"--job-name={PAR.TITLE}", - f"--nodes={math.ceil(PAR.NPROC/float(PAR.NODESIZE)):d}", - f"--ntasks-per-node={PAR.NODESIZE:d}", - f"--ntasks={PAR.NPROC:d}", - f"--time={PAR.TASKTIME:d}", - f"--output={os.path.join(PATH.WORKDIR, 'logs', '%A_%a')}", - f"--array=0-{PAR.NTASK-1 % PAR.NTASKMAX}", - f"{os.path.join(ROOT_DIR, 'scripts', 'run')}", - f"--output {PATH.OUTPUT}", - f"--classname {classname}", - f"--funcname {method}", - f"--environment {PAR.ENVIRONS or ''}" - ]) - self.logger.debug(run_call) + run_call = " ".join([ + f"{self.run_call_header}", + f"{os.path.join(ROOT_DIR, 'system', 'runscripts', 'run')}", + f"--funcs {funcs_fid}", + f"--kwargs {kwargs_fid}", + f"--environment {self.environs or ''}" + ]) # Single-process jobs simply need to replace a few sbatch arguments. # Do it AFTER `run_call` has been defined so that subclasses submitting # custom run calls can still benefit from this if single: - self.logger.info("replacing parts of sbatch run call for single " - "process job") - for part in run_call.split(" "): - if "--array" in part: - run_call.replace(part, "--array=0-0") - elif "--ntasks" in part: - run_call.replace(part, "--ntasks=1") - # Append taskid to environment variable, deal with the case where - # PAR.ENVIRONS is an empty string - task_id_str = "SEISFLOWS_TASKID=0" - if not run_call.strip().endswith("--environment"): - task_id_str = f",{task_id_str}" # appending to the list of vars - run_call += task_id_str - self.logger.debug(run_call) - - # The standard response from SLURM when submitting jobs - # is something like 'Submitted batch job 441636', we want job number - stdout = subprocess.run(run_call, stdout=subprocess.PIPE, - text=True, shell=True).stdout - job_ids = job_id_list(stdout, single) - - # Contiously check for job completion on ALL running array jobs - is_done = False - count = 0 - bad_states = ["TIMEOUT", "FAILED", "NODE_FAIL", "OUT_OF_MEMORY", - "CANCELLED"] - while not is_done: - # Wait a bit to avoid rapidly querying sacct - time.sleep(5) - is_done, states = job_array_status(job_ids) - # EXIT CONDITION: if any of the jobs provide job failure codes - if not is_done: - for i, state in enumerate(states): - # Sometimes states can be something like 'CANCELLED+', so - # we can't do exact string matching, check partial matches - if any([check in state for check in bad_states]): - print(msg.cli((f"Stopping workflow for {state} job. " - f"Please check log file for details."), - items=[f"TASK: {classname}.{method}", - f"TASK ID: {job_ids[i]}", - f"LOG: logs/{job_ids[i]}", - f"SBATCH: {run_call}"], - header="slurm run error", border="=")) - sys.exit(-1) - # WAIT CONDITION: if sacct is not working, we'll get stuck in a loop - if "UNDEFINED" in states: - count += 1 - # Every 10 counts, warn the user this is unexpected behavior - if not count % 10: - job_id = job_ids[states.index("UNDEFINED")] - self.logger.warning(f"SLURM command 'sacct {job_id}' has " - f"returned unexpected response {count} " - f"times. This job may have failed " - f"unexpectedly. Consider checking " - f"manually") - - self.logger.info(f"Task {classname}.{method} finished successfully") - - def taskid(self): - """ - Provides a unique identifier for each running task + logger.info("replacing parts of sbatch run call for single " + "process job") + run_call = modify_run_call_single_proc(run_call) - :rtype: int - :return: identifier for a given task - """ - # If not set, this environment variable will return None - sftaskid = os.getenv("SEISFLOWS_TASKID") + logger.debug(run_call) - if sftaskid is None: - sftaskid = os.getenv("SLURM_ARRAY_TASK_ID") - if sftaskid is None: - print(msg.cli("system.taskid() environment variable not found. " - "Assuming DEBUG mode and returning taskid==0. " - "If not DEBUG mode, please check SYSTEM.run()", - header="warning", border="=")) - sftaskid = 0 + # Grab the job id (used to monitor job status) from the stdout message + stdout = subprocess.run(run_call, stdout=subprocess.PIPE, + text=True, shell=True).stdout + job_id = self._stdout_to_job_id(stdout) - return int(sftaskid) + # Monitor the job queue until all jobs have completed, or any one fails + try: + status = check_job_status_array(job_id) + except FileNotFoundError: + logger.critical(f"cannot access job information through 'sacct', " + f"waited 50s with no return, please check job " + f"scheduler and log messages") + sys.exit(-1) + + if status == -1: # Failed job + logger.critical( + msg.cli(f"Stopping workflow. Please check logs for details.", + items=[f"TASKS: {[_.__name__ for _ in funcs]}", + f"SBATCH: {run_call}"], + header="slurm run error", border="=") + ) + sys.exit(-1) + else: + logger.info(f"task {job_id} finished successfully") + # Wait for all processes to finish and write to disk (if they do) + # Moving on too quickly may result in required files not being avail + time.sleep(5) -def job_id_list(stdout, single): +def check_job_status_array(job_id): """ - Parses job id list from sbatch standard output. Stdout typically looks - like: 'Submitted batch job 441636', but if submitting jobs cross-cluster - (e.g., like on Maui), stdout might be: - 'Submitted batch job 441636 on cluster Maui' + Repeatedly check the status of a currently running job using 'sacct'. + If the job goes into a bad state like 'FAILED', log the failing + job's id and their states. If all jobs complete nominally, return .. note:: - In order to find the job number, we just scan each word in stdout - until we find the number, ASSUMING that there is only one number in - the string - - TODO Should failing to return job_id break in reasonable way? - - The output job arrays will look something like: - [44163_0, 44163_1, ..., 44163_PAR.NTASK] - - :type stdout: str - :param stdout: the text response from running 'sbatch' on SLURM, which - should be returned by subprocess.run(stdout=PIPE) - :type single: bool - :param single: if running a single process job, returns a list of length - 1 with a single job id, else returns a list of length PAR.NTASK - for all arrayed jobs - :rtype: list - :return: a list of array jobs that should be currently running + The time.sleep() is critical before querying job status because the + system will likely take a second to intitiate jobs so if we + `query_job_states` before this has happenend, it will return empty + lists and cause the function to error out + + :type job_id: str + :param job_id: main job id to query, returned from the subprocess.run that + ran the jobs + :rtype: int + :return: status of all running jobs. 1 for pass (all jobs COMPLETED). -1 for + fail (one or more jobs returned failing status) + :raises FileNotFoundError: if 'sacct' does not return any output for ~1 min. """ - if single: - ntask = 1 - else: - ntask = PAR.NTASK - - # Splitting e.g.,: 'Submitted batch job 441636\n' - for part in stdout.strip().split(): - try: - # The int will keep throwing ValueError until we find the num - job_id = int(part) - break - except ValueError: + logger.info(f"monitoring job status for submitted job: {job_id}") + while True: + time.sleep(5) # give job time to process and also prevent over-query + job_ids, states = query_job_states(job_id) + # Sometimes query_job_state() does not return, so we wait again + if not job_ids or not states: continue - return [f"{job_id}_{i}" for i in range(ntask)] - - -def job_array_status(job_ids): - """ - Determines current status of job or job array - - :type job_ids: list - :param job_ids: list of SLURM job id numbers to check completion of - Will not return unless all jobs have completed - :rtype is_done: bool - :return is_done: True if all jobs in the array have been completed - :rtype states: list - :return states: list of states returned from sacct - """ - states = [] - for job_id in job_ids: - state = check_job_state(job_id) - states.append(state.upper()) - - # All array jobs must be completed to return is_done == True - is_done = all([state.upper() == "COMPLETED" for state in states]) - - return is_done, states + if all([state == "COMPLETED" for state in states]): + logger.debug("all array jobs returned a 'COMPLETED' state") + return 1 # Pass + elif any([check in states for check in BAD_STATES]): # Any bad states? + logger.info("atleast 1 system job returned a failing exit code") + for job_id, state in zip(job_ids, states): + if state in BAD_STATES: + logger.debug(f"{job_id}: {state}") + return -1 # Fail + +def check_job_status_list(job_ids): + """ + Check the status of a list of currently running jobs. This is used for + systems that cannot submit array jobs (e.g., Frontera) where we instead + submit jobs one by one and have to check the status of all those jobs + together. + + :type job_ids: list of str + :param job_id: job ID's to query with SACCT. Will be considered one group + of jobs, who all need to finish successfully otherwise the entire group + is considered failed + :rtype: int + :return: status of all running jobs. 1 for pass (all jobs COMPLETED). -1 for + fail (one or more jobs returned failing status) + :raises FileNotFoundError: if 'sacct' does not return any output for ~1 min. + """ + logger.info(f"monitoring job status for {len(job_ids)} submitted jobs") + + while True: + time.sleep(10) + job_id_list, states = [], [] + for job_id in job_ids: + _job_ids, _states = query_job_states(job_id) + job_id_list += _job_ids + states += _states + # Sometimes query_job_state() does not return, so we wait again + if not states or not job_id_list: + continue + if all([state == "COMPLETED" for state in states]): + return 1 # Pass + elif any([check in states for check in BAD_STATES]): # Any bad states? + logger.info("atleast 1 system job returned a failing exit code") + for job_id, state in zip(job_ids, states): + if state in BAD_STATES: + logger.debug(f"{job_id}: {state}") + return -1 # Fail -def check_job_state(job_id): +def query_job_states(job_id, _recheck=0): """ - Queries completion status of a single job by running: - $ sacct -nL -o jobid,state -j {job_id} - - # Example outputs from this sacct command - # JOB_ID STATUS - 441630_0 PENDING # array job will have the array number - 441630 COMPLETED # if --array=0-0, jobs will not have suffix - 441628.batch COMPLETED # we don't want to check these - - Available job states: https://slurm.schedmd.com/sacct.html + Queries completion status of an array job by running the SLURM cmd `sacct` + Available job states are listed here: https://slurm.schedmd.com/sacct.html .. note:: - -L flag in sacct queries all available clusters, not just the - cluster that ran the `sacct` call - -X supress the .batch and .extern jobname + The actual command line call wil look something like this + $ sacct -nLX -o jobid,state -j 441630 + 441630_0 PENDING + 441630_1 COMPLETED - :type job: str - :param job: job id to query + .. note:: + SACCT flag options are described as follows: + -L: queries all available clusters, not just the cluster that ran the + `sacct` call. Used for federated clusters + -X: supress the .batch and .extern jobnames that are normally returned + but don't represent that actual running job + + :type job_id: str + :param job_id: main job id to query, returned from the subprocess.run that + ran the jobs + :type rechecks: int + :param rechecks: Used for recursive calling of the function. It can take + time for jobs to be initiated on a system, which may result in the + stdout of the 'sacct' command to be empty. In this case we wait and call + the function again. Rechecks are used to prevent endless loops by + putting a stop criteria + :raises FileNotFoundError: if 'sacct' does not return any output for ~1 min. """ + job_ids, job_states = [], [] cmd = f"sacct -nLX -o jobid,state -j {job_id}" stdout = subprocess.run(cmd, stdout=subprocess.PIPE, text=True, shell=True).stdout - - # Undefined status will be retured if we cannot match the job id with - # the sacct output - # TODO should undefined state throw an error? - state = "UNDEFINED" - lines = stdout.strip().split("\n") - for line in lines: - # expecting e.g., 441628 COMPLETED - try: - job_id_check, state = line.split() - # str.split() will throw ValueError on non-matching strings - except ValueError: + + # Recursively re-check job state incase the job has not been instantiated + # in which cause 'stdout' is an empty string + if not stdout: + _recheck += 1 + if _recheck > 10: + raise FileNotFoundError(f"Cannot access job ID {job_id}") + time.sleep(10) + query_job_states(job_id, _recheck) + + # Return the job numbers and respective states for the given job ID + for job_line in str(stdout).strip().split("\n"): + if not job_line: continue - # Use in to allow for array jobs to match job ids - if job_id in job_id_check: - break + job_id, job_state = job_line.split() + job_ids.append(job_id) + job_states.append(job_state) + + return job_ids, job_states + +def modify_run_call_single_proc(run_call): + """ + Modifies a SLURM SBATCH command to use only 1 processor as a single run + by replacing the --array and --ntasks options + + :type run_call: str + :param run_call: The SBATCH command to modify + :rtype: str + :return: a modified SBATCH command that should only run on 1 processor + """ + for part in run_call.split(" "): + if "--array" in part: + run_call = run_call.replace(part, "--array=0-0") + elif "--ntasks" in part: + run_call = run_call.replace(part, "--ntasks=1") + + # Append taskid to environment variable, deal with the case where + # self.par.ENVIRONS is an empty string + task_id_str = "SEISFLOWS_TASKID=0" + if not run_call.strip().endswith("--environment"): + task_id_str = f",{task_id_str}" # appending to the list of vars - return state + run_call += task_id_str + return run_call diff --git a/seisflows/system/workstation.py b/seisflows/system/workstation.py index 91baa5d7..54a1d417 100644 --- a/seisflows/system/workstation.py +++ b/seisflows/system/workstation.py @@ -1,76 +1,187 @@ #!/usr/bin/env python3 """ -This is a subclass seisflows.system.workstation -Provides utilities for submitting jobs in serial on a single machine +The `workstation` class is the foundational `System` module in SeisFlows, +it provides utilities for submitting jobs in SERIAL on a small-scale machine, +e.g., a workstation or a laptop. All other `System` classes build on this class. """ import os import sys -import logging +import subprocess +from contextlib import redirect_stdout -from seisflows.tools import unix, msg -from seisflows.config import custom_import, SeisFlowsPathsParameters +from seisflows import logger +from seisflows.tools import unix +from seisflows.tools.config import Dict, import_seisflows +from seisflows.tools.config import number_fid, set_task_id -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - -class Workstation(custom_import("system", "base")): +class Workstation: """ - Run tasks in a serial fashion on a single local machine + Workstation System + ------------------ + Defines foundational structure for System module. When used standalone, + runs solver tasks either in serial (if `nproc`==1; i.e., without MPI) or in + parallel (if `nproc`>1; i.e., with MPI). All other tasks are run in serial. + + Parameters + ---------- + :type ntask: int + :param ntask: number of individual tasks/events to run during workflow. + Must be <= the number of source files in `path_specfem_data` + :type nproc: int + :param nproc: number of processors to use for each simulation. Choose 1 for + serial simulations, and `nproc`>1 for parallel simulations. + :type mpiexec: str + :param mpiexec: MPI executable on system. Defaults to 'mpirun -n ${NPROC}' + :type log_level: str + :param log_level: logger level to pass to logging module. + Available: 'debug', 'info', 'warning', 'critical' + :type verbose: bool + :param verbose: if True, formats the log messages to include the file + name, line number and message type. Useful for debugging but + also very verbose. + + Paths + ----- + :type path_output_log: str + :param path_output_log: path to a text file used to store the outputs of + the package wide logger, which are also written to stdout + :type path_par_file: str + :param path_par_file: path to parameter file which is used to instantiate + the package + :type path_log_files: str + :param path_log_files: path to a directory where individual log files are + saved whenever a number of parallel tasks are run on the system. + *** """ - logger = logging.getLogger(__name__).getChild(__qualname__) + def __init__(self, ntask=1, nproc=1, mpiexec=None, log_level="DEBUG", + verbose=False, workdir=os.getcwd(), path_output=None, + path_system=None, path_par_file=None, path_output_log=None, + path_log_files=None, **kwargs): + """ + Workstation System Class Parameters - @property - def required(self): + .. note:: + Paths listed here are shared with `workflow.forward` and so are not + included in the class docstring. + + :type workdir: str + :param workdir: working directory in which to look for data and store + results. Defaults to current working directory + :type path_output: str + :param path_output: path to directory used for permanent storage on disk. + Results and exported scratch files are saved here. + :type path_system: str + :param path_system: scratch path to save any system related files """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. + self.ntask = ntask + self.nproc = nproc + self.mpiexec = mpiexec + self.log_level = log_level.upper() + self.verbose = verbose + + # Define internal path system + self.path = Dict( + workdir=workdir or os.getcwd(), + scratch=path_system or os.path.join(workdir, "scratch", "system"), + par_file=path_par_file or os.path.join(workdir, "parameters.yaml"), + output=path_output or os.path.join(workdir, "output"), + log_files=path_log_files or os.path.join(workdir, "logs"), + output_log=path_output_log or os.path.join(workdir, "sflog.txt"), + ) + self._acceptable_log_levels = ["CRITICAL", "WARNING", "INFO", "DEBUG"] + + def check(self): """ - sf = SeisFlowsPathsParameters(super().required) - - sf.par("MPIEXEC", required=False, default=None, par_type=str, - docstr="Function used to invoke executables on the system. " - "For example 'srun' on SLURM systems, or './' on a " - "workstation. If left blank, will guess based on the " - "system.") - - sf.par("NTASK", required=False, default=1, par_type=int, - docstr="Number of separate, individual tasks. Also equal to " - "the number of desired sources in workflow") + Checks parameters and paths + """ + assert(os.path.exists(self.path.par_file)), \ + f"parameter file does not exist but should" + + assert(self.ntask > 0), f"number of events/tasks `ntask` cannot be neg'" + assert(self.log_level in self._acceptable_log_levels), \ + f"`system.log_level` must be in {self._acceptable_log_levels}" + + if self.nproc > 1: + assert(self.mpiexec is not None), ( + f"Multi-core workflows (`nproc`>1) require an MPI executable " + f"`mpiexec`" + ) + if self.mpiexec is not None: + # Make user that `mpiexec` exists on system + try: + stdout = subprocess.run(f"which {self.mpiexec}", shell=True, + check=True, text=True, + stdout=subprocess.PIPE).stdout + except subprocess.CalledProcessError: + logger.critical( + f"MPI executable {self.mpiexec} was not found on system " + f"with cmd: `which {self.mpiexec}. Please check that your " + f"MPI module is loaded and accessible from the command line" + ) + sys.exit(-1) + logger.debug(f"MPI executable is located at: {stdout.strip()}") + + def setup(self): + """ + Create the SeisFlows directory structure in preparation for a + SeisFlows workflow. Ensure that if any config information is left over + from a previous workflow, that these files are not overwritten by + the new workflow. Should be called by submit() - sf.par("NPROC", required=False, default=1, par_type=int, - docstr="Number of processor to use for each simulation") + .. note:: + This function is expected to create dirs: SCRATCH, SYSTEM, OUTPUT + and the following log files: output, error - return sf + .. note:: + Logger is configured here as all workflows, independent of system, + will be calling setup() - def check(self, validate=True): + :rtype: tuple of str + :return: (path to output log, path to error log) """ - Checks parameters and paths - """ - super().check(validate=False) - if validate: - self.required.validate() - - def submit(self): + for path in [self.path.scratch, self.path.output, self.path.log_files]: + unix.mkdir(path) + + # If resuming, move old log files to keep them out of the way. Number + # in ascending order, so we don't end up overwriting things + for src in [self.path.output_log, self.path.par_file]: + i = 1 + if os.path.exists(src): + dst = os.path.join(self.path.log_files, number_fid(src, i)) + while os.path.exists(dst): + i += 1 + dst = os.path.join(self.path.log_files, number_fid(src, i)) + logger.debug(f"copying par/log file to: {dst}") + unix.cp(src=src, dst=dst) + + def submit(self, workdir=None, parameter_file="parameters.yaml"): """ - Submits the main workflow job + Submits the main workflow job as a serial job submitted directly to + the system that is running the master job + + :type workdir: str + :param workdir: path to the current working directory + :type parameter_file: str + :param parameter_file: parameter file name used to instantiate the + SeisFlows package """ - self.setup() - workflow = sys.modules["seisflows_workflow"] - workflow.checkpoint() - workflow.main() + workflow = import_seisflows(workdir=workdir or self.path.workdir, + parameter_file=parameter_file) + workflow.check() + workflow.setup() + workflow.run() - def run(self, classname, method, single=False, **kwargs): + def run(self, funcs, single=False, **kwargs): """ Executes task multiple times in serial. .. note:: kwargs will be passed to the underlying `method` that is called - :type classname: str - :param classname: the class to run - :type method: str - :param method: the method from the given `classname` to run + :type funcs: list of methods + :param funcs: a list of functions that should be run in order. All + kwargs passed to run() will be passed into the functions. :type single: bool :param single: run a single-process, non-parallel task, such as smoothing the gradient, which only needs to be run by once. @@ -78,42 +189,34 @@ def run(self, classname, method, single=False, **kwargs): defined, such that the job is submitted as a single-core job to the system. """ - self.checkpoint(PATH.OUTPUT, classname, method, kwargs) - - # Allows dynamic retrieval of any function from within package, e.g., - # 4}_{task_id:0>2}.log") + if os.path.exists(log_file): + idx += 1 + else: + return log_file diff --git a/seisflows/templates/__init__.py b/seisflows/templates/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows/templates/base_class.py b/seisflows/templates/base_class.py deleted file mode 100644 index 4a4012e8..00000000 --- a/seisflows/templates/base_class.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python3 -""" -This is a SeisFlows Base class -""" -import os -import sys -import logging -from seisflows.tools import msg -from seisflows.config import SeisFlowsPathsParameters - -# Required SeisFlows configuration -PAR = sys.modules['seisflows_parameters'] -PATH = sys.modules['seisflows_paths'] - -# The number of loaded modules depends on the module this Base class belongs to -system = sys.modules["seisflows_system"] -solver = sys.modules["seisflows_solver"] -optimize = sys.modules["seisflows_optimize"] -preprocess = sys.modules["seisflows_preprocess"] -postprocess = sys.modules["seisflows_postprocess"] - - -class Base: - """ - This is a template Base class - """ - # Class-specific logger accessed using self.logger - # When this logger is called, e.g., self.logger.info("text"), the logging - # package will know exactly which module, class and function the log - # statement has been sent from, extraordinarily helpful for debugging. - logger = logging.getLogger(__name__).getChild(__qualname__) - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - - :rtype: seisflows.config.SeisFlowsPathsParameters - :return: Paths and parameters that define the given class - - """ - sf = SeisFlowsPathsParameters() - - # Define the Parameters required by this module - sf.par("EXAMPLE_REQUIRED_PARAMETER", required=True, par_type=str, - docstr="Required parameters do not need default values and will " - "need to be set by the user in the parameter file" - ) - - sf.par("EXAMPLE_OPTIONAL_PARAMETER", required=False, default=0, - par_type=int, docstr="Optional parameters require a default " - "value, if no default value is given, the " - "parameter is set to None" - ) - - # Define the Paths required by this module - sf.path("EXAMPLE_REQUIRED_PATH", required=True, - docstr="Required paths to be set by user in parameter file") - - sf.path("EXAMPLE_OPTIONAL_PATH", required=False, - default=os.path.join(PATH.SCRATCH, "example"), - docstr="Optional paths require default values") - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths. The validate function ensures that all - required paths and parameters are accounted for, and that all - optional paths and parameters are set to user-defined or default values. - - :type validate: bool - :param validate: set required paths and parameters into sys.modules - """ - # The validate statement is used internally to set required paths - # and parameters into sys.modules. Default values are stored for - # optional terms - if validate: - self.required.validate() - - def test(self, *args, **kwargs): - """ - This is an example test function which can take any number of args - or kwargs. The base class is responsible for setting all of the - necessary functions - """ - super.test() - # Multiple logging levels determine how verbose the module will be - self.logger.info("important log statement goes here") - self.logger.debug("debugging log statement goes here") - self.logger.warning("warnings can be passed here") diff --git a/seisflows/templates/parameters.yaml b/seisflows/templates/parameters.yaml deleted file mode 100644 index 303931d1..00000000 --- a/seisflows/templates/parameters.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# ////////////////////////////////////////////////////////////////////////////// -# -# SeisFlows YAML Parameter File -# -# ////////////////////////////////////////////////////////////////////////////// -# -# Modules correspond to the structure of the source code, and determine -# SeisFlows' behavior at runtime. Each module requires its own sub-parameters. -# -# .. rubric:: -# - To determine available options for modules listed below, run: -# > seisflows print modules -# - To auto-fill with docstrings and default values (recommended), run: -# > seisflows configure -# - To set values as NoneType, use: null -# - To set values as infinity, use: inf -# -# MODULES -# /////// -# WORKFLOW (str): The method for running SeisFlows; equivalent to main() -# SOLVER (str): External numerical solver to use for waveform simulations -# SYSTEM (str): Computer architecture of the system being used -# OPTIMIZE (str): Optimization algorithm for the inverse problem -# PREPROCESS (str): Preprocessing schema for waveform data -# POSTPROCESS (str): Postprocessing schema for kernels and gradients -# ============================================================================== -WORKFLOW: inversion -SOLVER: specfem2d -SYSTEM: workstation -OPTIMIZE: LBFGS -PREPROCESS: base -POSTPROCESS: base diff --git a/seisflows/templates/sub_class.py b/seisflows/templates/sub_class.py deleted file mode 100644 index 7bf936e4..00000000 --- a/seisflows/templates/sub_class.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env python3 -""" -This is a SeisFlows subclass which inherits attributes from a parent class -""" -import sys -import logging -from seisflows.tools import msg -from seisflows.config import SeisFlowsPathsParameters, custom_import - -# Required SeisFlows configuration -PAR = sys.modules['seisflows_parameters'] -PATH = sys.modules['seisflows_paths'] - -# The number of loaded modules depends on the module this Base class belongs to -system = sys.modules["seisflows_system"] -solver = sys.modules["seisflows_solver"] -optimize = sys.modules["seisflows_optimize"] -preprocess = sys.modules["seisflows_preprocess"] -postprocess = sys.modules["seisflows_postprocess"] - - -class Subclass(custom_import("MODULE NAME HERE", "PARENT CLASS NAME HERE")): - """ - This is a template subclass - """ - # Class-specific logger accessed using self.logger - # When this logger is called, e.g., self.logger.info("text"), the logging - # package will know exactly which module, class and function the log - # statement has been sent from, extraordinarily helpful for debugging. - logger = logging.getLogger(__name__).getChild(__qualname__) - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - - :rtype: seisflows.config.SeisFlowsPathsParameters - :return: Paths and parameters that define the given class - - """ - # The super().required argument ensures that the sublcass inherits the - # paths and parameters defined by its parent class - sf = SeisFlowsPathsParameters(super().required) - - # > Additional or overloading paths and parameters can be set here - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths. The validate function ensures that all - required paths and parameters are accounted for, and that all - optional paths and parameters are set to user-defined or default values. - """ - if validate: - self.required.validate() - - # Validation only required by the lowest subclass, which will validate - # all the paths and parameters from each of its parent classes - super.check(validate=False) - - def test(self, *args, **kwargs): - """ - This is an example OVERWRITE of the base_class.test() function. - If a super() statement is used, all the code within the base class - will be run. - """ - # The super statements calls the code chunk in base_class.test() - # Here it will be executed before the remainder of sub_class.test() is - # executed - super.test() - - # Multiple logging levels determine how verbose the module will be - self.logger.info("important log statement goes here") - self.logger.debug("debugging log statement goes here") - self.logger.warning("warnings can be passed here") \ No newline at end of file diff --git a/seisflows/tests/test_config.py b/seisflows/tests/test_config.py deleted file mode 100644 index 32fbb3dc..00000000 --- a/seisflows/tests/test_config.py +++ /dev/null @@ -1,145 +0,0 @@ -""" -Test the SeisFlows configuration script, which configures the compute -system and the working environment required for SF to run properly -""" -import os -import sys -import shutil -import pytest -from unittest.mock import patch -from seisflows import config -from seisflows.seisflows import SeisFlows -from seisflows.tools.err import ParameterError - - -TEST_DIR = os.path.join(config.ROOT_DIR, "tests") - - -@pytest.fixture -def copy_par_file(tmpdir): - """ - Copy the template parameter file into the temporary test directory - :rtype: str - :return: location of the parameter file - """ - src = os.path.join(TEST_DIR, "test_data", "test_filled_parameters.yaml") - dst = os.path.join(tmpdir, "parameters.yaml") - shutil.copy(src, dst) - - -@pytest.fixture -def sfinit(tmpdir, copy_par_file): - """ - Re-used function that will initate a SeisFlows working environment in - sys modules - :return: - """ - copy_par_file - os.chdir(tmpdir) - with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - sf._register(force=True) - config.init_seisflows() - - return sf - - -def test_seisflows_constants(): - """ - Ensure that the constants set in the Config file have not changed - Essentially a double check to make sure these things haven't been edited - because the rest of the package depends on these being accesible and - the same - """ - names_check = ["system", "preprocess", "solver", - "postprocess", "optimize", "workflow"] - - packages_check = ["seisflows", "seisflows-super"] - - root_dir_check = os.path.join( - os.path.dirname(os.path.abspath(__file__)), ".." - ) - - assert(config.NAMES == names_check) - assert(config.PACKAGES == packages_check) - assert(os.path.samefile(config.ROOT_DIR, root_dir_check)) - - -def test_init_seisflows(sfinit): - """ - Make sure that initiation of the modular approach of seisflows works - as expected. That is, that system-wide accessible modules are - instantiated with the accepted naming schema - - .. note:: - This assumes that the parameter file is set up correctly, which it - should be if it's coming from the test data directory - :return: - """ - sf = sfinit - # Ensure that all the modules in NAMES have been instantiated in sys.modules - for name in config.NAMES: - assert(f"seisflows_{name}" in sys.modules) - - -def test_save_and_load(sfinit): - """ - Test saving the current session to disk - :return: - """ - # Instantiate sys modules and save to disk - sf = sfinit - config.save() - # Now remove seisflows sys modules so we can try load them back - for name in config.NAMES: - sys.modules.pop(f"seisflows_{name}") - config.load(path="./output") - for name in config.NAMES: - assert(f"seisflows_{name}" in sys.modules) - - -def test_seisflows_paths_parameters(sfinit): - """ - Test the class that makes inputting and checking paths and parameters easier - Recreates the required() function at the top of each class. - """ - sf = sfinit - sfpp = config.SeisFlowsPathsParameters() - - # All of these parameters are defined in the test parameter file - sfpp.par("SOLVER", required=True, par_type=str, - docstr="This is a required parameter") - sfpp.par("MIN_PERIOD", required=False, default=10., par_type=float, - docstr="This is an optional parameter") - sfpp.path("SPECFEM_BIN", required=True, docstr="This is a required path") - sfpp.path("LOCAL", required=False, docstr="This is an optional path") - sfpp.validate() - - # These parameters are not defined and are expected to throw parameter error - sfpp.path("UNDEFINED", required=True, - docstr="This path is not in the test parameter file") - with pytest.raises(ParameterError): - sfpp.validate() - - -def test_custom_import(sfinit): - """ - Test that importing based on internal modules works for various inputs - :return: - """ - sfinit - with pytest.raises(SystemExit): - config.custom_import() - with pytest.raises(SystemExit): - config.custom_import(name="NOT A VALID NAME") - - module = config.custom_import(name="optimize", module="LBFGS") - assert(module.__name__ == "LBFGS") - assert(module.__module__ == "seisflows.optimize.LBFGS") - - # Check one more to be safe - module = config.custom_import(name="optimize", module="base") - assert(module.__name__ == "Base") - assert(module.__module__ == "seisflows.optimize.base") - - diff --git a/seisflows/tests/test_data/DATA/CMTSOLUTION_c46e1d99 b/seisflows/tests/test_data/DATA/CMTSOLUTION_c46e1d99 deleted file mode 100644 index 3d78a2e2..00000000 --- a/seisflows/tests/test_data/DATA/CMTSOLUTION_c46e1d99 +++ /dev/null @@ -1,13 +0,0 @@ -PDE 1999 01 01 00 00 00.00 67000 67000 -25000 4.2 4.2 homog_test -event name: homog_test -time shift: 0.0000 -half duration: 5.0 -latorUTM: 67000.0 -longorUTM: 67000.0 -depth: 30.0 -Mrr: -7.600000e+27 -Mtt: 7.700000e+27 -Mpp: -2.000000e+26 -Mrt: -2.500000e+28 -Mrp: 4.000000e+26 -Mtp: -2.500000e+27 diff --git a/seisflows/tests/test_data/DATA/FORCESOLUTION_c46e1d99 b/seisflows/tests/test_data/DATA/FORCESOLUTION_c46e1d99 deleted file mode 100644 index 17c19713..00000000 --- a/seisflows/tests/test_data/DATA/FORCESOLUTION_c46e1d99 +++ /dev/null @@ -1,10 +0,0 @@ -FORCE 001 -time shift: 0.0000 -f0: 5.0 -latorUTM: 67000.0 -longorUTM: 67000.0 -depth: 30.0 -factor force source: 1.d10 -component dir vect source E: 1.d0 -component dir vect source N: -2.d0 -component dir vect source Z_UP: -1.d0 diff --git a/seisflows/tests/test_data/DATA/Par_file_SPECFEM2D_cf893667 b/seisflows/tests/test_data/DATA/Par_file_SPECFEM2D_cf893667 deleted file mode 100644 index 0746c242..00000000 --- a/seisflows/tests/test_data/DATA/Par_file_SPECFEM2D_cf893667 +++ /dev/null @@ -1,439 +0,0 @@ -#----------------------------------------------------------- -# -# Simulation input parameters -# -#----------------------------------------------------------- - -# title of job -title = Test of SPECFEM2D with curved interfaces - -# forward or adjoint simulation -# 1 = forward, 2 = adjoint, 3 = both simultaneously -# note: 2 is purposely UNUSED (for compatibility with the numbering of our 3D codes) -SIMULATION_TYPE = 1 -# 0 = regular wave propagation simulation, 1/2/3 = noise simulation -NOISE_TOMOGRAPHY = 0 -# save the last frame, needed for adjoint simulation -SAVE_FORWARD = .false. - -# parameters concerning partitioning -NPROC = 1 # number of processes - -# time step parameters -# total number of time steps -NSTEP = 1600 - -# duration of a time step (see section "How to choose the time step" of the manual for how to do this) -DT = 1.1d-3 - -# time stepping -# 1 = Newmark (2nd order), 2 = LDDRK4-6 (4th-order 6-stage low storage Runge-Kutta), 3 = classical RK4 4th-order 4-stage Runge-Kutta -time_stepping_scheme = 1 - -# set the type of calculation (P-SV or SH/membrane waves) -P_SV = .true. - -# axisymmetric (2.5D) or Cartesian planar (2D) simulation -AXISYM = .false. - -#----------------------------------------------------------- -# -# Mesh -# -#----------------------------------------------------------- - -# Partitioning algorithm for decompose_mesh -PARTITIONING_TYPE = 3 # SCOTCH = 3, ascending order (very bad idea) = 1 - -# number of control nodes per element (4 or 9) -NGNOD = 9 - -# creates/reads a binary database that allows to skip all time consuming setup steps in initialization -# 0 = does not read/create database -# 1 = creates database -# 2 = reads database -setup_with_binary_database = 0 - -# available models -# default - define model using nbmodels below -# ascii - read model from ascii database file -# binary - read model from binary databse file -# binary_voigt - read Voigt model from binary database file -# external - define model using define_external_model subroutine -# gll - read GLL model from binary database file -# legacy - read model from model_velocity.dat_input -MODEL = default - -# Output the model with the requested type, does not save if turn to default or .false. -# (available output formats: ascii,binary,gll,legacy) -SAVE_MODEL = default - - -#----------------------------------------------------------- -# -# Attenuation -# -#----------------------------------------------------------- - -# attenuation parameters -ATTENUATION_VISCOELASTIC = .false. # turn attenuation (viscoelasticity) on or off for non-poroelastic solid parts of the model -ATTENUATION_VISCOACOUSTIC = .false. # turn attenuation (viscoacousticity) on or off for non-poroelastic fluid parts of the model - -# for viscoelastic or viscoacoustic attenuation -N_SLS = 3 # number of standard linear solids for attenuation (3 is usually the minimum) -ATTENUATION_f0_REFERENCE = 5.196 # in case of attenuation, reference frequency in Hz at which the velocity values in the velocity model are given (unused otherwise); relevant only if source is a Dirac or a Heaviside, otherwise it is automatically set to f0 the dominant frequency of the source in the DATA/SOURCE file -READ_VELOCITIES_AT_f0 = .false. # read seismic velocities at ATTENUATION_f0_REFERENCE instead of at infinite frequency (see user manual for more information) -USE_SOLVOPT = .false. # use more precise but much more expensive way of determining the Q factor relaxation times, as in https://doi.org/10.1093/gji/ggw024 - -# for poroelastic attenuation -ATTENUATION_PORO_FLUID_PART = .false. # turn viscous attenuation on or off for the fluid part of poroelastic parts of the model -Q0_poroelastic = 1 # quality factor for viscous attenuation (ignore it if you are not using a poroelastic material) -freq0_poroelastic = 10 # frequency for viscous attenuation (ignore it if you are not using a poroelastic material) - -# to undo attenuation and/or PMLs for sensitivity kernel calculations or forward runs with SAVE_FORWARD -# use the flag below. It performs undoing of attenuation and/or of PMLs in an exact way for sensitivity kernel calculations -# but requires disk space for temporary storage, and uses a significant amount of memory used as buffers for temporary storage. -# When that option is on the second parameter indicates how often the code dumps restart files to disk (if in doubt, use something between 100 and 1000). -UNDO_ATTENUATION_AND_OR_PML = .false. -NT_DUMP_ATTENUATION = 500 - -# Instead of reconstructing the forward wavefield, this option reads it from the disk using asynchronous I/O. -# Outperforms conventional mode using a value of NTSTEP_BETWEEN_COMPUTE_KERNELS high enough. -NO_BACKWARD_RECONSTRUCTION = .false. - -#----------------------------------------------------------- -# -# Sources -# -#----------------------------------------------------------- - -# source parameters -NSOURCES = 1 # number of sources (source information is then read from the DATA/SOURCE file) -force_normal_to_surface = .false. # angleforce normal to surface (external mesh and curve file needed) - -# use an existing initial wave field as source or start from zero (medium initially at rest) -initialfield = .false. -add_Bielak_conditions_bottom = .false. # add Bielak conditions or not if initial plane wave -add_Bielak_conditions_right = .false. -add_Bielak_conditions_top = .false. -add_Bielak_conditions_left = .false. - -# acoustic forcing -ACOUSTIC_FORCING = .false. # acoustic forcing of an acoustic medium with a rigid interface - -# noise simulations - type of noise source time function: -# 0=external (S_squared), 1=Ricker(second derivative), 2=Ricker(first derivative), 3=Gaussian, 4=Figure 2a of Tromp et al. 2010 -# (default value 4 is chosen to reproduce the time function from Fig 2a of "Tromp et al., 2010, Noise Cross-Correlation Sensitivity Kernels") -noise_source_time_function_type = 4 - -# moving sources -# Set write_moving_sources_database to .true. if the generation of moving source databases takes -# a long time. Then the simulation is done in two steps: first you run the code and it writes the databases to file -# (in DATA folder by default). Then you rerun the code and it will read the databases in there directly possibly -# saving a lot of time. -# This is only useful for GPU version (for now) -write_moving_sources_database = .false. - -#----------------------------------------------------------- -# -# Receivers -# -#----------------------------------------------------------- - -# receiver set parameters for recording stations (i.e. recording points) -# seismotype : record 1=displ 2=veloc 3=accel 4=pressure 5=curl of displ 6=the fluid potential -seismotype = 1 # several values can be chosen. For example : 1,2,4 - -# interval in time steps for writing of seismograms -# every how many time steps we save the seismograms -# (costly, do not use a very small value; if you use a very large value that is larger than the total number -# of time steps of the run, the seismograms will automatically be saved once at the end of the run anyway) -NTSTEP_BETWEEN_OUTPUT_SEISMOS = 10000 - -# set to n to reduce the sampling rate of output seismograms by a factor of n -# defaults to 1, which means no down-sampling -NTSTEP_BETWEEN_OUTPUT_SAMPLE = 1 - -# so far, this option can only be used if all the receivers are in acoustic elements -USE_TRICK_FOR_BETTER_PRESSURE = .false. - -# use this t0 as earliest starting time rather than the automatically calculated one -USER_T0 = 0.0d0 - -# seismogram formats -save_ASCII_seismograms = .true. # save seismograms in ASCII format or not -save_binary_seismograms_single = .true. # save seismograms in single precision binary format or not (can be used jointly with ASCII above to save both) -save_binary_seismograms_double = .false. # save seismograms in double precision binary format or not (can be used jointly with both flags above to save all) -SU_FORMAT = .false. # output single precision binary seismograms in Seismic Unix format (adjoint traces will be read in the same format) - -# use an existing STATION file found in ./DATA or create a new one from the receiver positions below in this Par_file -use_existing_STATIONS = .false. - -# number of receiver sets (i.e. number of receiver lines to create below) -nreceiversets = 2 - -# orientation -anglerec = 0.d0 # angle to rotate components at receivers -rec_normal_to_surface = .false. # base anglerec normal to surface (external mesh and curve file needed) - -# first receiver set (repeat these 6 lines and adjust nreceiversets accordingly) -nrec = 11 # number of receivers -xdeb = 300. # first receiver x in meters -zdeb = 2200. # first receiver z in meters -xfin = 3700. # last receiver x in meters (ignored if only one receiver) -zfin = 2200. # last receiver z in meters (ignored if only one receiver) -record_at_surface_same_vertical = .true. # receivers inside the medium or at the surface (z values are ignored if this is set to true, they are replaced with the topography height) - -# second receiver set -nrec = 11 # number of receivers -xdeb = 2500. # first receiver x in meters -zdeb = 2500. # first receiver z in meters -xfin = 2500. # last receiver x in meters (ignored if only one receiver) -zfin = 0. # last receiver z in meters (ignored if only one receiver) -record_at_surface_same_vertical = .false. # receivers inside the medium or at the surface (z values are ignored if this is set to true, they are replaced with the topography height) - - -#----------------------------------------------------------- -# -# adjoint kernel outputs -# -#----------------------------------------------------------- - -# save sensitivity kernels in ASCII format (much bigger files, but compatible with current GMT scripts) or in binary format -save_ASCII_kernels = .true. - -# since the accuracy of kernel integration may not need to respect the CFL, this option permits to save computing time, and memory with UNDO_ATTENUATION_AND_OR_PML mode -NTSTEP_BETWEEN_COMPUTE_KERNELS = 1 - -# outputs approximate Hessian for preconditioning -APPROXIMATE_HESS_KL = .false. - -#----------------------------------------------------------- -# -# Boundary conditions -# -#----------------------------------------------------------- - -# Perfectly Matched Layer (PML) boundaries -# absorbing boundary active or not -PML_BOUNDARY_CONDITIONS = .true. -NELEM_PML_THICKNESS = 3 -ROTATE_PML_ACTIVATE = .false. -ROTATE_PML_ANGLE = 30. -# change the four parameters below only if you know what you are doing; they change the damping profiles inside the PMLs -K_MIN_PML = 1.0d0 # from Gedney page 8.11 -K_MAX_PML = 1.0d0 -damping_change_factor_acoustic = 0.5d0 -damping_change_factor_elastic = 1.0d0 -# set the parameter below to .false. unless you know what you are doing; this implements automatic adjustment of the PML parameters for elongated models. -# The goal is to improve the absorbing efficiency of PML for waves with large incidence angles, but this can lead to artefacts. -# In particular, this option is efficient only when the number of sources NSOURCES is equal to one. -PML_PARAMETER_ADJUSTMENT = .false. - -# Stacey ABC -STACEY_ABSORBING_CONDITIONS = .false. - -# periodic boundaries -ADD_PERIODIC_CONDITIONS = .false. -PERIODIC_HORIZ_DIST = 4000.d0 - -#----------------------------------------------------------- -# -# Velocity and density models -# -#----------------------------------------------------------- - -# number of model materials -nbmodels = 4 -# available material types (see user manual for more information) -# acoustic: model_number 1 rho Vp 0 0 0 QKappa 9999 0 0 0 0 0 0 (for QKappa use 9999 to ignore it) -# elastic: model_number 1 rho Vp Vs 0 0 QKappa Qmu 0 0 0 0 0 0 (for QKappa and Qmu use 9999 to ignore them) -# anisotropic: model_number 2 rho c11 c13 c15 c33 c35 c55 c12 c23 c25 0 QKappa Qmu -# anisotropic in AXISYM: model_number 2 rho c11 c13 c15 c33 c35 c55 c12 c23 c25 c22 QKappa Qmu -# poroelastic: model_number 3 rhos rhof phi c kxx kxz kzz Ks Kf Kfr etaf mufr Qmu -# tomo: model_number -1 0 0 A 0 0 0 0 0 0 0 0 0 0 -# -# note: When viscoelasticity or viscoacousticity is turned on, -# the Vp and Vs values that are read here are the UNRELAXED ones i.e. the values at infinite frequency -# unless the READ_VELOCITIES_AT_f0 parameter above is set to true, in which case they are the values at frequency f0. -# -# Please also note that Qmu is always equal to Qs, but Qkappa is in general not equal to Qp. -# To convert one to the other see doc/Qkappa_Qmu_versus_Qp_Qs_relationship_in_2D_plane_strain.pdf and -# utils/attenuation/conversion_from_Qkappa_Qmu_to_Qp_Qs_from_Dahlen_Tromp_959_960.f90. -1 1 2700.d0 3000.d0 1732.051d0 0 0 9999 9999 0 0 0 0 0 0 -2 1 2500.d0 2700.d0 0 0 0 9999 9999 0 0 0 0 0 0 -3 1 2200.d0 2500.d0 1443.375d0 0 0 9999 9999 0 0 0 0 0 0 -4 1 2200.d0 2200.d0 1343.375d0 0 0 9999 9999 0 0 0 0 0 0 - -# external tomography file -TOMOGRAPHY_FILE = ./DATA/tomo_file.xyz - -# use an external mesh created by an external meshing tool or use the internal mesher -read_external_mesh = .false. - -#----------------------------------------------------------- -# -# PARAMETERS FOR EXTERNAL MESHING -# -#----------------------------------------------------------- - -# data concerning mesh, when generated using third-party app (more info in README) -# (see also absorbing_conditions above) -mesh_file = ./DATA/mesh_file # file containing the mesh -nodes_coords_file = ./DATA/nodes_coords_file # file containing the nodes coordinates -materials_file = ./DATA/materials_file # file containing the material number for each element -free_surface_file = ./DATA/free_surface_file # file containing the free surface -axial_elements_file = ./DATA/axial_elements_file # file containing the axial elements if AXISYM is true -absorbing_surface_file = ./DATA/absorbing_surface_file # file containing the absorbing surface -acoustic_forcing_surface_file = ./DATA/MSH/Surf_acforcing_Bottom_enforcing_mesh # file containing the acoustic forcing surface -absorbing_cpml_file = ./DATA/absorbing_cpml_file # file containing the CPML element numbers -tangential_detection_curve_file = ./DATA/courbe_eros_nodes # file containing the curve delimiting the velocity model - -#----------------------------------------------------------- -# -# PARAMETERS FOR INTERNAL MESHING -# -#----------------------------------------------------------- - -# file containing interfaces for internal mesh -interfacesfile = ../EXAMPLES/simple_topography_and_also_a_simple_fluid_layer/DATA/interfaces_simple_topo_curved.dat - -# geometry of the model (origin lower-left corner = 0,0) and mesh description -xmin = 0.d0 # abscissa of left side of the model -xmax = 4000.d0 # abscissa of right side of the model -nx = 80 # number of elements along X - -# absorbing boundary parameters (see absorbing_conditions above) -absorbbottom = .true. -absorbright = .true. -absorbtop = .false. -absorbleft = .true. - -# define the different regions of the model in the (nx,nz) spectral-element mesh -nbregions = 5 # then set below the different regions and model number for each region -# format of each line: nxmin nxmax nzmin nzmax material_number -1 80 1 20 1 -1 59 21 40 2 -71 80 21 40 2 -1 80 41 60 3 -60 70 21 40 4 - -#----------------------------------------------------------- -# -# Display parameters -# -#----------------------------------------------------------- - -# interval at which we output time step info and max of norm of displacement -# (every how many time steps we display information about the simulation. costly, do not use a very small value) -NTSTEP_BETWEEN_OUTPUT_INFO = 100 - -# meshing output -output_grid_Gnuplot = .false. # generate a GNUPLOT file containing the grid, and a script to plot it -output_grid_ASCII = .false. # dump the grid in an ASCII text file consisting of a set of X,Y,Z points or not - -# to plot total energy curves, for instance to monitor how CPML absorbing layers behave; -# should be turned OFF in most cases because a bit expensive -OUTPUT_ENERGY = .false. - -# every how many time steps we compute energy (which is a bit expensive to compute) -NTSTEP_BETWEEN_OUTPUT_ENERGY = 10 - -# Compute the field int_0^t v^2 dt for a set of GLL points and write it to file. Use -# the script utils/visualisation/plotIntegratedEnergyFile.py to watch. It is refreshed at the same time than the seismograms -COMPUTE_INTEGRATED_ENERGY_FIELD = .false. - -#----------------------------------------------------------- -# -# Movies/images/snaphots visualizations -# -#----------------------------------------------------------- - -# every how many time steps we draw JPEG or PostScript pictures of the simulation -# and/or we dump results of the simulation as ASCII or binary files (costly, do not use a very small value) -NTSTEP_BETWEEN_OUTPUT_IMAGES = 100 - -# minimum amplitude kept in % for the JPEG and PostScript snapshots; amplitudes below that are muted -cutsnaps = 1. - -#### for JPEG color images #### -output_color_image = .true. # output JPEG color image of the results every NTSTEP_BETWEEN_OUTPUT_IMAGES time steps or not -imagetype_JPEG = 2 # display 1=displ_Ux 2=displ_Uz 3=displ_norm 4=veloc_Vx 5=veloc_Vz 6=veloc_norm 7=accel_Ax 8=accel_Az 9=accel_norm 10=pressure -factor_subsample_image = 1.0d0 # (double precision) factor to subsample or oversample (if set to e.g. 0.5) color images output by the code (useful for very large models, or to get nicer looking denser pictures) -USE_CONSTANT_MAX_AMPLITUDE = .false. # by default the code normalizes each image independently to its maximum; use this option to use the global maximum below instead -CONSTANT_MAX_AMPLITUDE_TO_USE = 1.17d4 # constant maximum amplitude to use for all color images if the above USE_CONSTANT_MAX_AMPLITUDE option is true -POWER_DISPLAY_COLOR = 0.30d0 # non linear display to enhance small amplitudes in JPEG color images -DRAW_SOURCES_AND_RECEIVERS = .true. # display sources as orange crosses and receivers as green squares in JPEG images or not -DRAW_WATER_IN_BLUE = .true. # display acoustic layers as constant blue in JPEG images, because they likely correspond to water in the case of ocean acoustics or in the case of offshore oil industry experiments (if off, display them as greyscale, as for elastic or poroelastic elements, for instance for acoustic-only oil industry models of solid media) -USE_SNAPSHOT_NUMBER_IN_FILENAME = .false. # use snapshot number in the file name of JPEG color snapshots instead of the time step (for instance to create movies in an easier way later) - -#### for PostScript snapshots #### -output_postscript_snapshot = .true. # output Postscript snapshot of the results every NTSTEP_BETWEEN_OUTPUT_IMAGES time steps or not -imagetype_postscript = 1 # display 1=displ vector 2=veloc vector 3=accel vector; small arrows are displayed for the vectors -meshvect = .true. # display mesh on PostScript plots or not -modelvect = .false. # display velocity model on PostScript plots or not -boundvect = .true. # display boundary conditions on PostScript plots or not -interpol = .true. # interpolation of the PostScript display on a regular grid inside each spectral element, or use the non-evenly spaced GLL points -pointsdisp = 6 # number of points in each direction for interpolation of PostScript snapshots (set to 1 for lower-left corner only) -subsamp_postscript = 1 # subsampling of background velocity model in PostScript snapshots -sizemax_arrows = 1.d0 # maximum size of arrows on PostScript plots in centimeters -US_LETTER = .false. # use US letter or European A4 paper for PostScript plots - -#### for wavefield dumps #### -output_wavefield_dumps = .false. # output wave field to a text file (creates very big files) -imagetype_wavefield_dumps = 1 # display 1=displ vector 2=veloc vector 3=accel vector 4=pressure -use_binary_for_wavefield_dumps = .false. # use ASCII or single-precision binary format for the wave field dumps - -#----------------------------------------------------------- - -# Ability to run several calculations (several earthquakes) -# in an embarrassingly-parallel fashion from within the same run; -# this can be useful when using a very large supercomputer to compute -# many earthquakes in a catalog, in which case it can be better from -# a batch job submission point of view to start fewer and much larger jobs, -# each of them computing several earthquakes in parallel. -# To turn that option on, set parameter NUMBER_OF_SIMULTANEOUS_RUNS to a value greater than 1. -# To implement that, we create NUMBER_OF_SIMULTANEOUS_RUNS MPI sub-communicators, -# each of them being labeled "my_local_mpi_comm_world", and we use them -# in all the routines in "src/shared/parallel.f90", except in MPI_ABORT() because in that case -# we need to kill the entire run. -# When that option is on, of course the number of processor cores used to start -# the code in the batch system must be a multiple of NUMBER_OF_SIMULTANEOUS_RUNS, -# all the individual runs must use the same number of processor cores, -# which as usual is NPROC in the Par_file, -# and thus the total number of processor cores to request from the batch system -# should be NUMBER_OF_SIMULTANEOUS_RUNS * NPROC. -# All the runs to perform must be placed in directories called run0001, run0002, run0003 and so on -# (with exactly four digits). -# -# Imagine you have 10 independent calculations to do, each of them on 100 cores; you have three options: -# -# 1/ submit 10 jobs to the batch system -# -# 2/ submit a single job on 1000 cores to the batch, and in that script create a sub-array of jobs to start 10 jobs, -# each running on 100 cores (see e.g. http://www.schedmd.com/slurmdocs/job_array.html ) -# -# 3/ submit a single job on 1000 cores to the batch, start SPECFEM2D on 1000 cores, create 10 sub-communicators, -# cd into one of 10 subdirectories (called e.g. run0001, run0002,... run0010) depending on the sub-communicator -# your MPI rank belongs to, and run normally on 100 cores using that sub-communicator. -# -# The option below implements 3/. -# -NUMBER_OF_SIMULTANEOUS_RUNS = 1 - -# if we perform simultaneous runs in parallel, if only the source and receivers vary between these runs -# but not the mesh nor the model (velocity and density) then we can also read the mesh and model files -# from a single run in the beginning and broadcast them to all the others; for a large number of simultaneous -# runs for instance when solving inverse problems iteratively this can DRASTICALLY reduce I/Os to disk in the solver -# (by a factor equal to NUMBER_OF_SIMULTANEOUS_RUNS), and reducing I/Os is crucial in the case of huge runs. -# Thus, always set this option to .true. if the mesh and the model are the same for all simultaneous runs. -# In that case there is no need to duplicate the mesh and model file database (the content of the DATABASES_MPI -# directories) in each of the run0001, run0002,... directories, it is sufficient to have one in run0001 -# and the code will broadcast it to the others) -BROADCAST_SAME_MESH_AND_MODEL = .true. - -#----------------------------------------------------------- - -# set to true to use GPUs -GPU_MODE = .false. - diff --git a/seisflows/tests/test_data/DATA/Par_file_SPECFEM3D_c46e1d99 b/seisflows/tests/test_data/DATA/Par_file_SPECFEM3D_c46e1d99 deleted file mode 100644 index 11f54a77..00000000 --- a/seisflows/tests/test_data/DATA/Par_file_SPECFEM3D_c46e1d99 +++ /dev/null @@ -1,379 +0,0 @@ -#----------------------------------------------------------- -# -# Simulation input parameters -# -#----------------------------------------------------------- - -# forward or adjoint simulation -# 1 = forward, 2 = adjoint, 3 = both simultaneously -SIMULATION_TYPE = 1 -# 0 = earthquake simulation, 1/2/3 = three steps in noise simulation -NOISE_TOMOGRAPHY = 0 -SAVE_FORWARD = .false. - -# solve a full FWI inverse problem from a single calling program with no I/Os, storing everything in memory, -# or run a classical forward or adjoint problem only and save the seismograms and/or sensitivity kernels to disk (with costlier I/Os) -INVERSE_FWI_FULL_PROBLEM = .false. - -# UTM projection parameters -# Use a negative zone number for the Southern hemisphere: -# The Northern hemisphere corresponds to zones +1 to +60, -# The Southern hemisphere corresponds to zones -1 to -60. -UTM_PROJECTION_ZONE = 11 -SUPPRESS_UTM_PROJECTION = .true. - -# number of MPI processors -NPROC = 4 - -# time step parameters -NSTEP = 5000 -DT = 0.05 - -# set to true to use local-time stepping (LTS) -LTS_MODE = .false. - -# Partitioning algorithm for decompose_mesh -# choose partitioner: 1==SCOTCH (default), 2==METIS, 3==PATOH, 4==ROWS_PART -PARTITIONING_TYPE = 1 - -#----------------------------------------------------------- -# -# LDDRK time scheme -# -#----------------------------------------------------------- -USE_LDDRK = .false. -INCREASE_CFL_FOR_LDDRK = .false. -RATIO_BY_WHICH_TO_INCREASE_IT = 1.4 - -#----------------------------------------------------------- -# -# Mesh -# -#----------------------------------------------------------- - -# Number of nodes for 2D and 3D shape functions for hexahedra. -# We use either 8-node mesh elements (bricks) or 27-node elements. -# If you use our internal mesher, the only option is 8-node bricks (27-node elements are not supported). -NGNOD = 8 - -# models: -# available options are: -# default (model parameters described by mesh properties) -# 1D models available are: -# 1d_prem,1d_socal,1d_cascadia -# 3D models available are: -# aniso,external,gll,salton_trough,tomo,SEP,coupled,... -MODEL = default - -# path for external tomographic models files -TOMOGRAPHY_PATH = DATA/tomo_files/ -# if you are using a SEP model (oil-industry format) -SEP_MODEL_DIRECTORY = DATA/my_SEP_model/ - -#----------------------------------------------------------- - -# parameters describing the model -APPROXIMATE_OCEAN_LOAD = .false. -TOPOGRAPHY = .false. -ATTENUATION = .false. -ANISOTROPY = .false. -GRAVITY = .false. - -# in case of attenuation, reference frequency in Hz at which the velocity values in the velocity model are given (unused otherwise) -ATTENUATION_f0_REFERENCE = 18.d0 - -# attenuation period range over which we try to mimic a constant Q factor -MIN_ATTENUATION_PERIOD = 999999998.d0 -MAX_ATTENUATION_PERIOD = 999999999.d0 -# ignore this range and ask the code to compute it automatically instead based on the estimated resolution of the mesh (use this unless you know what you are doing) -COMPUTE_FREQ_BAND_AUTOMATIC = .true. - -# Olsen's constant for Q_mu = constant * V_s attenuation rule -USE_OLSEN_ATTENUATION = .false. -OLSEN_ATTENUATION_RATIO = 0.05 - -#----------------------------------------------------------- -# -# Absorbing boundary conditions -# -#----------------------------------------------------------- - -# C-PML boundary conditions for a regional simulation -# (if set to .false., and STACEY_ABSORBING_CONDITIONS is also set to .false., you get a free surface instead -# in the case of elastic or viscoelastic mesh elements, and a rigid surface in the case of acoustic (fluid) elements -PML_CONDITIONS = .false. - -# C-PML top surface -PML_INSTEAD_OF_FREE_SURFACE = .false. - -# C-PML dominant frequency -f0_FOR_PML = 0.05555 - -# parameters used to rotate C-PML boundary conditions by a given angle (not completed yet) -# ROTATE_PML_ACTIVATE = .false. -# ROTATE_PML_ANGLE = 0. - -# absorbing boundary conditions for a regional simulation -# (if set to .false., and PML_CONDITIONS is also set to .false., you get a free surface instead -# in the case of elastic or viscoelastic mesh elements, and a rigid surface in the case of acoustic (fluid) elements -STACEY_ABSORBING_CONDITIONS = .true. - -# absorbing top surface (defined in mesh as 'free_surface_file') -STACEY_INSTEAD_OF_FREE_SURFACE = .false. - -# When STACEY_ABSORBING_CONDITIONS is set to .true. : -# absorbing conditions are defined in xmin, xmax, ymin, ymax and zmin -# this option BOTTOM_FREE_SURFACE can be set to .true. to -# make zmin free surface instead of absorbing condition -BOTTOM_FREE_SURFACE = .false. - -#----------------------------------------------------------- -# -# undoing attenuation and/or PMLs for sensitivity kernel calculations -# -#----------------------------------------------------------- - -# to undo attenuation and/or PMLs for sensitivity kernel calculations or forward runs with SAVE_FORWARD -# use the flag below. It performs undoing of attenuation and/or of PMLs in an exact way for sensitivity kernel calculations -# but requires disk space for temporary storage, and uses a significant amount of memory used as buffers for temporary storage. -# When that option is on the second parameter indicates how often the code dumps restart files to disk (if in doubt, use something between 100 and 1000). -UNDO_ATTENUATION_AND_OR_PML = .false. -NT_DUMP_ATTENUATION = 500 - -#----------------------------------------------------------- -# -# Visualization -# -#----------------------------------------------------------- - -# save AVS or OpenDX movies -# MOVIE_TYPE = 1 to show the top surface -# MOVIE_TYPE = 2 to show all the external faces of the mesh -CREATE_SHAKEMAP = .false. -MOVIE_SURFACE = .false. -MOVIE_TYPE = 1 -MOVIE_VOLUME = .false. -SAVE_DISPLACEMENT = .false. -USE_HIGHRES_FOR_MOVIES = .false. -NTSTEP_BETWEEN_FRAMES = 200 -HDUR_MOVIE = 0.0 - -# save AVS or OpenDX mesh files to check the mesh -SAVE_MESH_FILES = .true. - -# path to store the local database file on each node -LOCAL_PATH = OUTPUT_FILES/DATABASES_MPI - -# interval at which we output time step info and max of norm of displacement -NTSTEP_BETWEEN_OUTPUT_INFO = 500 - -#----------------------------------------------------------- -# -# Sources -# -#----------------------------------------------------------- - -# sources and receivers Z coordinates given directly (i.e. as their true position) instead of as their depth -USE_SOURCES_RECEIVERS_Z = .false. - -# use a (tilted) FORCESOLUTION force point source (or several) instead of a CMTSOLUTION moment-tensor source. -# This can be useful e.g. for oil industry foothills simulations or asteroid simulations -# in which the source is a vertical force, normal force, tilted force, impact etc. -# If this flag is turned on, the FORCESOLUTION file must be edited by giving: -# - the corresponding time-shift parameter, -# - the half duration parameter of the source, -# - the coordinates of the source, -# - the magnitude of the force source, -# - the components of a (non necessarily unitary) direction vector for the force source in the E/N/Z_UP basis. -# The direction vector is made unitary internally in the code and thus only its direction matters here; -# its norm is ignored and the norm of the force used is the factor force source times the source time function. -USE_FORCE_POINT_SOURCE = .false. - -# set to true to use a Ricker source time function instead of the source time functions set by default -# to represent a (tilted) FORCESOLUTION force point source or a CMTSOLUTION moment-tensor source. -USE_RICKER_TIME_FUNCTION = .false. - -# Use an external source time function. -# if .true. you must add a file with your source time function and the file name -# path relative to lauching directory at the end of CMTSOLUTION or FORCESOURCE file -# (with multiple sources, one file per source is required). -# This file must have a single column containing the amplitude of the source at that time step, -# and on its first line it must contain the time step used, which must be equal to DT as defined at the beginning of this Par_file (the code will check that). -# Be sure when this option is .false. to remove the name of stf file in CMTSOLUTION or FORCESOURCE -USE_EXTERNAL_SOURCE_FILE = .false. - -# print source time function -PRINT_SOURCE_TIME_FUNCTION = .false. - -# source encoding -# (for acoustic simulations only for now) determines source encoding factor +/-1 depending on sign of moment tensor -# (see e.g. Krebs et al., 2009. Fast full-wavefield seismic inversion using encoded sources, Geophysics, 74 (6), WCC177-WCC188.) -USE_SOURCE_ENCODING = .false. - -#----------------------------------------------------------- -# -# Seismograms -# -#----------------------------------------------------------- - -# interval in time steps for writing of seismograms -NTSTEP_BETWEEN_OUTPUT_SEISMOS = 10000 - -# set to n to reduce the sampling rate of output seismograms by a factor of n -# defaults to 1, which means no down-sampling -NTSTEP_BETWEEN_OUTPUT_SAMPLE = 1 - -# decide if we save displacement, velocity, acceleration and/or pressure in forward runs (they can be set to true simultaneously) -# currently pressure seismograms are implemented in acoustic (i.e. fluid) elements only -SAVE_SEISMOGRAMS_DISPLACEMENT = .true. -SAVE_SEISMOGRAMS_VELOCITY = .false. -SAVE_SEISMOGRAMS_ACCELERATION = .false. -SAVE_SEISMOGRAMS_PRESSURE = .false. # currently implemented in acoustic (i.e. fluid) elements only - -# save seismograms also when running the adjoint runs for an inverse problem -# (usually they are unused and not very meaningful, leave this off in almost all cases) -SAVE_SEISMOGRAMS_IN_ADJOINT_RUN = .true. - -# save seismograms in binary or ASCII format (binary is smaller but may not be portable between machines) -USE_BINARY_FOR_SEISMOGRAMS = .false. - -# output seismograms in Seismic Unix format (binary with 240-byte-headers) -SU_FORMAT = .false. - -# output seismograms in ASDF (requires asdf-library) -ASDF_FORMAT = .false. - -# decide if main process writes all the seismograms or if all processes do it in parallel -WRITE_SEISMOGRAMS_BY_MAIN = .false. - -# save all seismograms in one large combined file instead of one file per seismogram -# to avoid overloading shared non-local file systems such as LUSTRE or GPFS for instance -SAVE_ALL_SEISMOS_IN_ONE_FILE = .false. - -# use a trick to increase accuracy of pressure seismograms in fluid (acoustic) elements: -# use the second derivative of the source for the source time function instead of the source itself, -# and then record -potential_acoustic() as pressure seismograms instead of -potential_dot_dot_acoustic(); -# this is mathematically equivalent, but numerically significantly more accurate because in the explicit -# Newmark time scheme acceleration is accurate at zeroth order while displacement is accurate at second order, -# thus in fluid elements potential_dot_dot_acoustic() is accurate at zeroth order while potential_acoustic() -# is accurate at second order and thus contains significantly less numerical noise. -USE_TRICK_FOR_BETTER_PRESSURE = .false. - -#----------------------------------------------------------- -# -# Energy calculation -# -#----------------------------------------------------------- - -# to plot energy curves, for instance to monitor how CPML absorbing layers behave; -# should be turned OFF in most cases because a bit expensive -OUTPUT_ENERGY = .false. -# every how many time steps we compute energy (which is a bit expensive to compute) -NTSTEP_BETWEEN_OUTPUT_ENERGY = 10 - -#----------------------------------------------------------- -# -# Adjoint kernel outputs -# -#----------------------------------------------------------- - -# interval in time steps for reading adjoint traces -# 0 = read the whole adjoint sources at start time -NTSTEP_BETWEEN_READ_ADJSRC = 0 - -# read adjoint sources using ASDF (requires asdf-library) -READ_ADJSRC_ASDF = .false. - -# this parameter must be set to .true. to compute anisotropic kernels -# in crust and mantle (related to the 21 Cij in geographical coordinates) -# default is .false. to compute isotropic kernels (related to alpha and beta) -ANISOTROPIC_KL = .false. - -# compute transverse isotropic kernels (alpha_v,alpha_h,beta_v,beta_h,eta,rho) -# rather than fully anisotropic kernels in case ANISOTROPIC_KL is set to .true. -SAVE_TRANSVERSE_KL = .false. - -# this parameter must be set to .true. to compute anisotropic kernels for -# cost function using velocity observable rather than displacement -ANISOTROPIC_VELOCITY_KL = .false. - -# outputs approximate Hessian for preconditioning -APPROXIMATE_HESS_KL = .false. - -# save Moho mesh and compute Moho boundary kernels -SAVE_MOHO_MESH = .false. - -#----------------------------------------------------------- -# -# Coupling with an injection technique (DSM, AxiSEM, or FK) -# -#----------------------------------------------------------- -COUPLE_WITH_INJECTION_TECHNIQUE = .false. -INJECTION_TECHNIQUE_TYPE = 3 # 1 = DSM, 2 = AxiSEM, 3 = FK -MESH_A_CHUNK_OF_THE_EARTH = .false. -TRACTION_PATH = DATA/AxiSEM_tractions/3/ -FKMODEL_FILE = FKmodel -RECIPROCITY_AND_KH_INTEGRAL = .false. # does not work yet - -#----------------------------------------------------------- - -# Dimitri Komatitsch, July 2014, CNRS Marseille, France: -# added the ability to run several calculations (several earthquakes) -# in an embarrassingly-parallel fashion from within the same run; -# this can be useful when using a very large supercomputer to compute -# many earthquakes in a catalog, in which case it can be better from -# a batch job submission point of view to start fewer and much larger jobs, -# each of them computing several earthquakes in parallel. -# To turn that option on, set parameter NUMBER_OF_SIMULTANEOUS_RUNS to a value greater than 1. -# To implement that, we create NUMBER_OF_SIMULTANEOUS_RUNS MPI sub-communicators, -# each of them being labeled "my_local_mpi_comm_world", and we use them -# in all the routines in "src/shared/parallel.f90", except in MPI_ABORT() because in that case -# we need to kill the entire run. -# When that option is on, of course the number of processor cores used to start -# the code in the batch system must be a multiple of NUMBER_OF_SIMULTANEOUS_RUNS, -# all the individual runs must use the same number of processor cores, -# which as usual is NPROC in the Par_file, -# and thus the total number of processor cores to request from the batch system -# should be NUMBER_OF_SIMULTANEOUS_RUNS * NPROC. -# All the runs to perform must be placed in directories called run0001, run0002, run0003 and so on -# (with exactly four digits). -# -# Imagine you have 10 independent calculations to do, each of them on 100 cores; you have three options: -# -# 1/ submit 10 jobs to the batch system -# -# 2/ submit a single job on 1000 cores to the batch, and in that script create a sub-array of jobs to start 10 jobs, -# each running on 100 cores (see e.g. http://www.schedmd.com/slurmdocs/job_array.html ) -# -# 3/ submit a single job on 1000 cores to the batch, start SPECFEM3D on 1000 cores, create 10 sub-communicators, -# cd into one of 10 subdirectories (called e.g. run0001, run0002,... run0010) depending on the sub-communicator -# your MPI rank belongs to, and run normally on 100 cores using that sub-communicator. -# -# The option below implements 3/. -# -NUMBER_OF_SIMULTANEOUS_RUNS = 1 - -# if we perform simultaneous runs in parallel, if only the source and receivers vary between these runs -# but not the mesh nor the model (velocity and density) then we can also read the mesh and model files -# from a single run in the beginning and broadcast them to all the others; for a large number of simultaneous -# runs for instance when solving inverse problems iteratively this can DRASTICALLY reduce I/Os to disk in the solver -# (by a factor equal to NUMBER_OF_SIMULTANEOUS_RUNS), and reducing I/Os is crucial in the case of huge runs. -# Thus, always set this option to .true. if the mesh and the model are the same for all simultaneous runs. -# In that case there is no need to duplicate the mesh and model file database (the content of the DATABASES_MPI -# directories) in each of the run0001, run0002,... directories, it is sufficient to have one in run0001 -# and the code will broadcast it to the others) -BROADCAST_SAME_MESH_AND_MODEL = .true. - -#----------------------------------------------------------- - -# set to true to use GPUs -GPU_MODE = .false. - -# ADIOS Options for I/Os -ADIOS_ENABLED = .false. -ADIOS_FOR_DATABASES = .false. -ADIOS_FOR_MESH = .false. -ADIOS_FOR_FORWARD_ARRAYS = .false. -ADIOS_FOR_KERNELS = .false. -ADIOS_FOR_UNDO_ATTENUATION = .false. - diff --git a/seisflows/tests/test_data/scripts/make_parameter_files.sh b/seisflows/tests/test_data/scripts/make_parameter_files.sh deleted file mode 100644 index 28fdf931..00000000 --- a/seisflows/tests/test_data/scripts/make_parameter_files.sh +++ /dev/null @@ -1,29 +0,0 @@ -# Run a few SeisFlows commands to generate test data. Useful if the parameter -# file ever changes, at which point we will need to generate new files. -cd .. -rm *yaml - -seisflows setup -cp parameters.yaml test_setup_parameters.yaml - -seisflows configure -r -cp parameters.yaml test_conf_parameters.yaml - -seisflows par -p materials elastic -seisflows par -p density constant -seisflows par -p nt 1000 -seisflows par -p dt .01 -seisflows par -p f0 .084 -seisflows par -p format ascii -seisflows par -p begin 1 -seisflows par -p end 1 -seisflows par -p case data -seisflows par -p attenuation False -seisflows par -p specfem_bin ./bin -seisflows par -p specfem_data ./DATA -seisflows par -p model_init ./MODEL_INIT -seisflows par -p model_true ./MODEL_TRUE - -mv parameters.yaml test_filled_parameters.yaml - - diff --git a/seisflows/tests/test_data/scripts/make_test_directory_structure.py b/seisflows/tests/test_data/scripts/make_test_directory_structure.py deleted file mode 100644 index 41c9df08..00000000 --- a/seisflows/tests/test_data/scripts/make_test_directory_structure.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -Create a test directory structure with actual data to test individual modules -""" -import os -from seisflows.tools import unix -from seisflows.config import CFGPATHS, ROOT_DIR - - -testdir = os.path.join(ROOT_DIR, "tests", "test_data") -workdir = os.path.join(testdir, "workdir") -for key, path in CFGPATHS.__dict__.items(): - full_path = os.path.join(workdir, path) - if os.path.exists(full_path): - unix.rm(full_path) - # Identify files by the separator between filename and extension - if "." in path: - open(full_path, "w") - else: - unix.mkdir(os.path.join(workdir, path)) - -# Make the scratch solver directory -scratchdir = os.path.join(workdir, CFGPATHS.SCRATCHDIR) -solverdir = os.path.join(scratchdir, "solver", "001") -tracesdir = os.path.join(solverdir, "traces") -for dir_ in [scratchdir, solverdir, tracesdir]: - unix.mkdir(dir_) - -for dir_ in ["obs", "syn", "adj"]: - unix.mkdir(os.path.join(tracesdir, dir_)) diff --git a/seisflows/tests/test_data/test_conf_parameters.yaml b/seisflows/tests/test_data/test_conf_parameters.yaml deleted file mode 100644 index f387edaf..00000000 --- a/seisflows/tests/test_data/test_conf_parameters.yaml +++ /dev/null @@ -1,303 +0,0 @@ -# ////////////////////////////////////////////////////////////////////////////// -# -# SeisFlows YAML Parameter File -# -# ////////////////////////////////////////////////////////////////////////////// -# -# Modules correspond to the structure of the source code, and determine -# SeisFlows' behavior at runtime. Each module requires its own sub-parameters. -# -# .. rubric:: -# - To determine available options for modules listed below, run: -# > seisflows print module -# - To auto-fill with docstrings and default values (recommended), run: -# > seisflows configure -# - To set values as NoneType, use: null -# - To set values as infinity, use: inf -# -# MODULES -# /////// -# WORKFLOW (str): The method for running SeisFlows; equivalent to main() -# SOLVER (str): External numerical solver to use for waveform simulations -# SYSTEM (str): Computer architecture of the system being used -# OPTIMIZE (str): Optimization algorithm for the inverse problem -# PREPROCESS (str): Preprocessing schema for waveform data -# POSTPROCESS (str): Postprocessing schema for kernels and gradients -# ============================================================================== -WORKFLOW: inversion -SOLVER: specfem2d -SYSTEM: workstation -OPTIMIZE: LBFGS -PREPROCESS: base -POSTPROCESS: base - -# ============================================================================= -# SYSTEM -# ////// -# TITLE (str): -# The name used to submit jobs to the system, defaults to the name of the -# working directory -# PRECHECK (list): -# A list of parameters that will be displayed to stdout before 'submit' or -# 'resume' is run. Useful for manually reviewing important parameters prior -# to system submission -# LOG_LEVEL (str): -# Verbosity output of SF logger. Available from least to most verbosity: -# 'CRITICAL', 'WARNING', 'INFO', 'DEBUG'; defaults to 'DEBUG' -# VERBOSE (bool): -# Level of verbosity provided to the output log. If True, log statements -# will declare what module/class/function they are being called from. -# Useful for debugging but also very noisy. -# MPIEXEC (str): -# Function used to invoke executables on the system. For example 'srun' on -# SLURM systems, or './' on a workstation. If left blank, will guess based -# on the system. -# NTASK (int): -# Number of separate, individual tasks. Also equal to the number of desired -# sources in workflow -# NPROC (int): -# Number of processor to use for each simulation -# ============================================================================= -TITLE: test_data -PRECHECK: - - TITLE -LOG_LEVEL: DEBUG -VERBOSE: False -MPIEXEC: -NTASK: 1 -NPROC: 1 - -# ============================================================================= -# PREPROCESS -# ////////// -# MISFIT (str): -# Misfit function for waveform comparisons, for available see -# seisflows.plugins.misfit -# BACKPROJECT (str): -# Backprojection function for migration, for available see -# seisflows.plugins.adjoint -# NORMALIZE (list): -# Data normalization parameters used to normalize the amplitudes of -# waveforms. Choose from two sets:ENORML1: normalize per event by L1 of -# traces; ORENORML2: normalize per event by L2 of traces; ANDTNORML1: -# normalize per trace by L1 of itself; ORTNORML2: normalize per trace by L2 -# of itself -# FILTER (str): -# Data filtering type, available options are:BANDPASS (req. MIN/MAX -# PERIOD/FREQ);LOWPASS (req. MAX_FREQ or MIN_PERIOD); HIGHPASS (req. -# MIN_FREQ or MAX_PERIOD) -# MIN_PERIOD (float): -# Minimum filter period applied to time series.See also MIN_FREQ, MAX_FREQ, -# if User defines FREQ parameters, they will overwrite PERIOD parameters. -# MAX_PERIOD (float): -# Maximum filter period applied to time series.See also MIN_FREQ, MAX_FREQ, -# if User defines FREQ parameters, they will overwrite PERIOD parameters. -# MIN_FREQ (float): -# Maximum filter frequency applied to time series.See also MIN_PERIOD, -# MAX_PERIOD, if User defines FREQ parameters, they will overwrite PERIOD -# parameters. -# MAX_FREQ (float): -# Maximum filter frequency applied to time series,See also MIN_PERIOD, -# MAX_PERIOD, if User defines FREQ parameters, they will overwrite PERIOD -# parameters. -# MUTE (list): -# Data mute parameters used to zero out early / late arrivals or offsets. -# Choose any number of: EARLY: mute early arrivals; LATE: mute late -# arrivals; SHORT: mute short source-receiver distances; LONG: mute long -# source-receiver distances -# ============================================================================= -MISFIT: waveform -BACKPROJECT: null -NORMALIZE: [] -FILTER: null -MIN_PERIOD: -MAX_PERIOD: -MIN_FREQ: -MAX_FREQ: -MUTE: [] - -# ============================================================================= -# SOLVER -# ////// -# MATERIALS (str): -# Material parameters used to define model. Available: ['ELASTIC': Vp, Vs, -# 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC'] -# DENSITY (str): -# How to treat density during inversion. Available: ['CONSTANT': Do not -# update density, 'VARIABLE': Update density] -# ATTENUATION (str): -# If True, turn on attenuation during forward simulations, otherwise set -# attenuation off. Attenuation is always off for adjoint simulations. -# COMPONENTS (str): -# Components used to generate data, formatted as a single string, e.g. ZNE -# or NZ or E -# SOLVERIO (int): -# The format external solver files. Available: ['fortran_binary', 'adios'] -# NT (float): -# Number of time steps set in the SPECFEM Par_file -# DT (float): -# Time step or delta set in the SPECFEM Par_file -# F0 (float): -# Dominant source frequency -# FORMAT (float): -# Format of synthetic waveforms used during workflow, available options: -# ['ascii', 'su'] -# SOURCE_PREFIX (str): -# Prefix of SOURCE files in path SPECFEM_DATA. By default, 'SOURCE' for -# SPECFEM2D -# ============================================================================= -MATERIALS: !!! REQUIRED PARAMETER !!! -DENSITY: !!! REQUIRED PARAMETER !!! -ATTENUATION: !!! REQUIRED PARAMETER !!! -COMPONENTS: ZNE -SOLVERIO: fortran_binary -NT: !!! REQUIRED PARAMETER !!! -DT: !!! REQUIRED PARAMETER !!! -F0: !!! REQUIRED PARAMETER !!! -FORMAT: !!! REQUIRED PARAMETER !!! -SOURCE_PREFIX: SOURCE - -# ============================================================================= -# POSTPROCESS -# /////////// -# SMOOTH_H (float): -# Gaussian half-width for horizontal smoothing in units of meters. If 0., -# no smoothing applied -# SMOOTH_V (float): -# Gaussian half-width for vertical smoothing in units of meters -# TASKTIME_SMOOTH (int): -# Large radii smoothing may take longer than normal tasks. Allocate -# additional smoothing task time as a multiple of TASKTIME -# ============================================================================= -SMOOTH_H: 0.0 -SMOOTH_V: 0.0 -TASKTIME_SMOOTH: 1 - -# ============================================================================= -# OPTIMIZE -# //////// -# LINESEARCH (str): -# Algorithm to use for line search, see seisflows.plugins.line_search for -# available choices -# PRECOND (str): -# Algorithm to use for preconditioning gradients, see -# seisflows.plugins.preconds for available choices -# STEPCOUNTMAX (int): -# Max number of trial steps in line search before a change in line search -# behavior -# STEPLENINIT (float): -# Initial line search step length, as a fraction of current model -# parameters -# STEPLENMAX (float): -# Max allowable step length, as a fraction of current model parameters -# LBFGSMEM (int): -# Max number of previous gradients to retain in local memory -# LBFGSMAX (int): -# LBFGS periodic restart interval, between 1 and 'inf' -# LBFGSTHRESH (float): -# LBFGS angle restart threshold -# ============================================================================= -LINESEARCH: Backtrack -PRECOND: -STEPCOUNTMAX: 10 -STEPLENINIT: 0.05 -STEPLENMAX: 0.5 -LBFGSMEM: 3 -LBFGSMAX: inf -LBFGSTHRESH: 0.0 - -# ============================================================================= -# WORKFLOW -# //////// -# CASE (str): -# Type of inversion, available: ['data': real data inversion, 'synthetic': -# synthetic-synthetic inversion] -# RESUME_FROM (str): -# Name of task to resume inversion from -# STOP_AFTER (str): -# Name of task to stop inversion after finishing -# SAVEMODEL (bool): -# Save final model files after each iteration -# SAVEGRADIENT (bool): -# Save gradient files after each iteration -# SAVEKERNELS (bool): -# Save event kernel files after each iteration -# SAVETRACES (bool): -# Save waveform traces after each iteration -# SAVERESIDUALS (bool): -# Save waveform residuals after each iteration -# SAVEAS (str): -# Format to save models, gradients, kernels. Available: ['binary': save -# files in native SPECFEM .bin format, 'vector': save files as NumPy .npy -# files, 'both': save as both binary and vectors] -# BEGIN (int): -# First iteration of workflow, 1 <= BEGIN <= inf -# END (int): -# Last iteration of workflow, BEGIN <= END <= inf -# ============================================================================= -CASE: !!! REQUIRED PARAMETER !!! -RESUME_FROM: -STOP_AFTER: -SAVEMODEL: True -SAVEGRADIENT: True -SAVEKERNELS: False -SAVETRACES: False -SAVERESIDUALS: False -SAVEAS: binary -BEGIN: 1 -END: !!! REQUIRED PARAMETER !!! - -# ============================================================================= -# PATHS -# ///// -# SCRATCH: -# scratch path to hold temporary data during workflow -# OUTPUT: -# directory to save workflow outputs to disk -# SYSTEM: -# scratch path to hold any system related data -# LOCAL: -# path to local data to be used during workflow -# LOGFILE: -# the main output log file where all processes will track their status -# SOLVER: -# scratch path to hold solver working directories -# SPECFEM_BIN: -# path to the SPECFEM binary executables -# SPECFEM_DATA: -# path to the SPECFEM DATA/ directory containing the 'Par_file', 'STATIONS' -# file and 'CMTSOLUTION' files -# DATA: -# path to data available to workflow -# MASK: -# Directory to mask files for gradient masking -# OPTIMIZE: -# scratch path to store data related to nonlinear optimization -# MODEL_INIT: -# location of the initial model to be used for workflow -# MODEL_TRUE: -# Target model to be used for PAR.CASE == 'synthetic' -# FUNC: -# scratch path to store data related to function evaluations -# GRAD: -# scratch path to store data related to gradient evaluations -# HESS: -# scratch path to store data related to Hessian evaluations -# ============================================================================= -PATHS: - SCRATCH: scratch - OUTPUT: output - SYSTEM: scratch/system - LOCAL: - LOGFILE: output_sf.txt - SOLVER: scratch/solver - SPECFEM_BIN: !!! REQUIRED PATH !!! - SPECFEM_DATA: !!! REQUIRED PATH !!! - DATA: - MASK: - OPTIMIZE: scratch/optimize - MODEL_INIT: !!! REQUIRED PATH !!! - MODEL_TRUE: - FUNC: scratch/scratch - GRAD: scratch/evalgrad - HESS: scratch/evalhess diff --git a/seisflows/tests/test_data/test_filled_parameters.yaml b/seisflows/tests/test_data/test_filled_parameters.yaml deleted file mode 100644 index 56e7717b..00000000 --- a/seisflows/tests/test_data/test_filled_parameters.yaml +++ /dev/null @@ -1,303 +0,0 @@ -# ////////////////////////////////////////////////////////////////////////////// -# -# SeisFlows YAML Parameter File -# -# ////////////////////////////////////////////////////////////////////////////// -# -# Modules correspond to the structure of the source code, and determine -# SeisFlows' behavior at runtime. Each module requires its own sub-parameters. -# -# .. rubric:: -# - To determine available options for modules listed below, run: -# > seisflows print module -# - To auto-fill with docstrings and default values (recommended), run: -# > seisflows configure -# - To set values as NoneType, use: null -# - To set values as infinity, use: inf -# -# MODULES -# /////// -# WORKFLOW (str): The method for running SeisFlows; equivalent to main() -# SOLVER (str): External numerical solver to use for waveform simulations -# SYSTEM (str): Computer architecture of the system being used -# OPTIMIZE (str): Optimization algorithm for the inverse problem -# PREPROCESS (str): Preprocessing schema for waveform data -# POSTPROCESS (str): Postprocessing schema for kernels and gradients -# ============================================================================== -WORKFLOW: inversion -SOLVER: specfem2d -SYSTEM: workstation -OPTIMIZE: LBFGS -PREPROCESS: base -POSTPROCESS: base - -# ============================================================================= -# SYSTEM -# ////// -# TITLE (str): -# The name used to submit jobs to the system, defaults to the name of the -# working directory -# PRECHECK (list): -# A list of parameters that will be displayed to stdout before 'submit' or -# 'resume' is run. Useful for manually reviewing important parameters prior -# to system submission -# LOG_LEVEL (str): -# Verbosity output of SF logger. Available from least to most verbosity: -# 'CRITICAL', 'WARNING', 'INFO', 'DEBUG'; defaults to 'DEBUG' -# VERBOSE (bool): -# Level of verbosity provided to the output log. If True, log statements -# will declare what module/class/function they are being called from. -# Useful for debugging but also very noisy. -# MPIEXEC (str): -# Function used to invoke executables on the system. For example 'srun' on -# SLURM systems, or './' on a workstation. If left blank, will guess based -# on the system. -# NTASK (int): -# Number of separate, individual tasks. Also equal to the number of desired -# sources in workflow -# NPROC (int): -# Number of processor to use for each simulation -# ============================================================================= -TITLE: test_data -PRECHECK: - - TITLE -LOG_LEVEL: DEBUG -VERBOSE: False -MPIEXEC: -NTASK: 1 -NPROC: 1 - -# ============================================================================= -# PREPROCESS -# ////////// -# MISFIT (str): -# Misfit function for waveform comparisons, for available see -# seisflows.plugins.misfit -# BACKPROJECT (str): -# Backprojection function for migration, for available see -# seisflows.plugins.adjoint -# NORMALIZE (list): -# Data normalization parameters used to normalize the amplitudes of -# waveforms. Choose from two sets:ENORML1: normalize per event by L1 of -# traces; ORENORML2: normalize per event by L2 of traces; ANDTNORML1: -# normalize per trace by L1 of itself; ORTNORML2: normalize per trace by L2 -# of itself -# FILTER (str): -# Data filtering type, available options are:BANDPASS (req. MIN/MAX -# PERIOD/FREQ);LOWPASS (req. MAX_FREQ or MIN_PERIOD); HIGHPASS (req. -# MIN_FREQ or MAX_PERIOD) -# MIN_PERIOD (float): -# Minimum filter period applied to time series.See also MIN_FREQ, MAX_FREQ, -# if User defines FREQ parameters, they will overwrite PERIOD parameters. -# MAX_PERIOD (float): -# Maximum filter period applied to time series.See also MIN_FREQ, MAX_FREQ, -# if User defines FREQ parameters, they will overwrite PERIOD parameters. -# MIN_FREQ (float): -# Maximum filter frequency applied to time series.See also MIN_PERIOD, -# MAX_PERIOD, if User defines FREQ parameters, they will overwrite PERIOD -# parameters. -# MAX_FREQ (float): -# Maximum filter frequency applied to time series,See also MIN_PERIOD, -# MAX_PERIOD, if User defines FREQ parameters, they will overwrite PERIOD -# parameters. -# MUTE (list): -# Data mute parameters used to zero out early / late arrivals or offsets. -# Choose any number of: EARLY: mute early arrivals; LATE: mute late -# arrivals; SHORT: mute short source-receiver distances; LONG: mute long -# source-receiver distances -# ============================================================================= -MISFIT: waveform -BACKPROJECT: null -NORMALIZE: [] -FILTER: null -MIN_PERIOD: -MAX_PERIOD: -MIN_FREQ: -MAX_FREQ: -MUTE: [] - -# ============================================================================= -# SOLVER -# ////// -# MATERIALS (str): -# Material parameters used to define model. Available: ['ELASTIC': Vp, Vs, -# 'ACOUSTIC': Vp, 'ISOTROPIC', 'ANISOTROPIC'] -# DENSITY (str): -# How to treat density during inversion. Available: ['CONSTANT': Do not -# update density, 'VARIABLE': Update density] -# ATTENUATION (str): -# If True, turn on attenuation during forward simulations, otherwise set -# attenuation off. Attenuation is always off for adjoint simulations. -# COMPONENTS (str): -# Components used to generate data, formatted as a single string, e.g. ZNE -# or NZ or E -# SOLVERIO (int): -# The format external solver files. Available: ['fortran_binary', 'adios'] -# NT (float): -# Number of time steps set in the SPECFEM Par_file -# DT (float): -# Time step or delta set in the SPECFEM Par_file -# F0 (float): -# Dominant source frequency -# FORMAT (float): -# Format of synthetic waveforms used during workflow, available options: -# ['ascii', 'su'] -# SOURCE_PREFIX (str): -# Prefix of SOURCE files in path SPECFEM_DATA. By default, 'SOURCE' for -# SPECFEM2D -# ============================================================================= -MATERIALS: elastic -DENSITY: constant -ATTENUATION: False -COMPONENTS: ZNE -SOLVERIO: fortran_binary -NT: 1000 -DT: .01 -F0: .084 -FORMAT: ascii -SOURCE_PREFIX: SOURCE - -# ============================================================================= -# POSTPROCESS -# /////////// -# SMOOTH_H (float): -# Gaussian half-width for horizontal smoothing in units of meters. If 0., -# no smoothing applied -# SMOOTH_V (float): -# Gaussian half-width for vertical smoothing in units of meters -# TASKTIME_SMOOTH (int): -# Large radii smoothing may take longer than normal tasks. Allocate -# additional smoothing task time as a multiple of TASKTIME -# ============================================================================= -SMOOTH_H: 0.0 -SMOOTH_V: 0.0 -TASKTIME_SMOOTH: 1 - -# ============================================================================= -# OPTIMIZE -# //////// -# LINESEARCH (str): -# Algorithm to use for line search, see seisflows.plugins.line_search for -# available choices -# PRECOND (str): -# Algorithm to use for preconditioning gradients, see -# seisflows.plugins.preconds for available choices -# STEPCOUNTMAX (int): -# Max number of trial steps in line search before a change in line search -# behavior -# STEPLENINIT (float): -# Initial line search step length, as a fraction of current model -# parameters -# STEPLENMAX (float): -# Max allowable step length, as a fraction of current model parameters -# LBFGSMEM (int): -# Max number of previous gradients to retain in local memory -# LBFGSMAX (int): -# LBFGS periodic restart interval, between 1 and 'inf' -# LBFGSTHRESH (float): -# LBFGS angle restart threshold -# ============================================================================= -LINESEARCH: Backtrack -PRECOND: -STEPCOUNTMAX: 10 -STEPLENINIT: 0.05 -STEPLENMAX: 0.5 -LBFGSMEM: 3 -LBFGSMAX: inf -LBFGSTHRESH: 0.0 - -# ============================================================================= -# WORKFLOW -# //////// -# CASE (str): -# Type of inversion, available: ['data': real data inversion, 'synthetic': -# synthetic-synthetic inversion] -# RESUME_FROM (str): -# Name of task to resume inversion from -# STOP_AFTER (str): -# Name of task to stop inversion after finishing -# SAVEMODEL (bool): -# Save final model files after each iteration -# SAVEGRADIENT (bool): -# Save gradient files after each iteration -# SAVEKERNELS (bool): -# Save event kernel files after each iteration -# SAVETRACES (bool): -# Save waveform traces after each iteration -# SAVERESIDUALS (bool): -# Save waveform residuals after each iteration -# SAVEAS (str): -# Format to save models, gradients, kernels. Available: ['binary': save -# files in native SPECFEM .bin format, 'vector': save files as NumPy .npy -# files, 'both': save as both binary and vectors] -# BEGIN (int): -# First iteration of workflow, 1 <= BEGIN <= inf -# END (int): -# Last iteration of workflow, BEGIN <= END <= inf -# ============================================================================= -CASE: data -RESUME_FROM: -STOP_AFTER: -SAVEMODEL: True -SAVEGRADIENT: True -SAVEKERNELS: False -SAVETRACES: False -SAVERESIDUALS: False -SAVEAS: binary -BEGIN: 1 -END: 1 - -# ============================================================================= -# PATHS -# ///// -# SCRATCH: -# scratch path to hold temporary data during workflow -# OUTPUT: -# directory to save workflow outputs to disk -# SYSTEM: -# scratch path to hold any system related data -# LOCAL: -# path to local data to be used during workflow -# LOGFILE: -# the main output log file where all processes will track their status -# SOLVER: -# scratch path to hold solver working directories -# SPECFEM_BIN: -# path to the SPECFEM binary executables -# SPECFEM_DATA: -# path to the SPECFEM DATA/ directory containing the 'Par_file', 'STATIONS' -# file and 'CMTSOLUTION' files -# DATA: -# path to data available to workflow -# MASK: -# Directory to mask files for gradient masking -# OPTIMIZE: -# scratch path to store data related to nonlinear optimization -# MODEL_INIT: -# location of the initial model to be used for workflow -# MODEL_TRUE: -# Target model to be used for PAR.CASE == 'synthetic' -# FUNC: -# scratch path to store data related to function evaluations -# GRAD: -# scratch path to store data related to gradient evaluations -# HESS: -# scratch path to store data related to Hessian evaluations -# ============================================================================= -PATHS: - SCRATCH: scratch - OUTPUT: output - SYSTEM: scratch/system - LOCAL: - LOGFILE: output_sf.txt - SOLVER: scratch/solver - SPECFEM_BIN: ./bin - SPECFEM_DATA: ./DATA - DATA: - MASK: - OPTIMIZE: scratch/optimize - MODEL_INIT: ./MODEL_INIT - MODEL_TRUE: ./MODEL_TRUE - FUNC: scratch/scratch - GRAD: scratch/evalgrad - HESS: scratch/evalhess diff --git a/seisflows/tests/test_data/test_preprocess/AA.S0001.BXY.adj b/seisflows/tests/test_data/test_preprocess/AA.S0001.BXY.adj new file mode 100644 index 00000000..a0de276c --- /dev/null +++ b/seisflows/tests/test_data/test_preprocess/AA.S0001.BXY.adj @@ -0,0 +1,5000 @@ + -48.0000000 0.0000000 + -47.9400000 0.0000000 + -47.8800000 0.0000000 + -47.8200000 0.0000000 + -47.7600000 0.0000000 + -47.7000000 0.0000000 + -47.6400000 0.0000000 + -47.5800000 0.0000000 + -47.5200000 0.0000000 + -47.4600000 0.0000000 + -47.4000000 0.0000000 + -47.3400000 0.0000000 + -47.2800000 0.0000000 + -47.2200000 0.0000000 + -47.1600000 0.0000000 + -47.1000000 0.0000000 + -47.0400000 0.0000000 + -46.9800000 0.0000000 + -46.9200000 0.0000000 + -46.8600000 0.0000000 + -46.8000000 0.0000000 + -46.7400000 0.0000000 + -46.6800000 0.0000000 + -46.6200000 0.0000000 + -46.5600000 0.0000000 + -46.5000000 0.0000000 + -46.4400000 0.0000000 + -46.3800000 0.0000000 + -46.3200000 0.0000000 + -46.2600000 0.0000000 + -46.2000000 0.0000000 + -46.1400000 0.0000000 + -46.0800000 0.0000000 + -46.0200000 0.0000000 + -45.9600000 0.0000000 + -45.9000000 0.0000000 + -45.8400000 0.0000000 + -45.7800000 0.0000000 + -45.7200000 0.0000000 + -45.6600000 0.0000000 + -45.6000000 0.0000000 + -45.5400000 0.0000000 + -45.4800000 0.0000000 + -45.4200000 0.0000000 + -45.3600000 0.0000000 + -45.3000000 0.0000000 + -45.2400000 0.0000000 + -45.1800000 0.0000000 + -45.1200000 0.0000000 + -45.0600000 0.0000000 + -45.0000000 0.0000000 + -44.9400000 0.0000000 + -44.8800000 0.0000000 + -44.8200000 0.0000000 + -44.7600000 0.0000000 + -44.7000000 0.0000000 + -44.6400000 0.0000000 + -44.5800000 0.0000000 + -44.5200000 0.0000000 + -44.4600000 0.0000000 + -44.4000000 0.0000000 + -44.3400000 0.0000000 + -44.2800000 0.0000000 + -44.2200000 0.0000000 + -44.1600000 0.0000000 + -44.1000000 0.0000000 + -44.0400000 0.0000000 + -43.9800000 0.0000000 + -43.9200000 0.0000000 + -43.8600000 0.0000000 + -43.8000000 0.0000000 + -43.7400000 0.0000000 + -43.6800000 0.0000000 + -43.6200000 0.0000000 + -43.5600000 0.0000000 + -43.5000000 0.0000000 + -43.4400000 0.0000000 + -43.3800000 0.0000000 + -43.3200000 0.0000000 + -43.2600000 0.0000000 + -43.2000000 0.0000000 + -43.1400000 0.0000000 + -43.0800000 0.0000000 + -43.0200000 0.0000000 + -42.9600000 0.0000000 + -42.9000000 0.0000000 + -42.8400000 0.0000000 + -42.7800000 0.0000000 + -42.7200000 0.0000000 + -42.6600000 0.0000000 + -42.6000000 0.0000000 + -42.5400000 0.0000000 + -42.4800000 0.0000000 + -42.4200000 0.0000000 + -42.3600000 0.0000000 + -42.3000000 0.0000000 + -42.2400000 0.0000000 + -42.1800000 0.0000000 + -42.1200000 0.0000000 + -42.0600000 0.0000000 + -42.0000000 0.0000000 + -41.9400000 0.0000000 + -41.8800000 0.0000000 + -41.8200000 0.0000000 + -41.7600000 0.0000000 + -41.7000000 0.0000000 + -41.6400000 0.0000000 + -41.5800000 0.0000000 + -41.5200000 0.0000000 + -41.4600000 0.0000000 + -41.4000000 0.0000000 + -41.3400000 0.0000000 + -41.2800000 0.0000000 + -41.2200000 0.0000000 + -41.1600000 0.0000000 + -41.1000000 0.0000000 + -41.0400000 0.0000000 + -40.9800000 0.0000000 + -40.9200000 0.0000000 + -40.8600000 0.0000000 + -40.8000000 0.0000000 + -40.7400000 0.0000000 + -40.6800000 0.0000000 + -40.6200000 0.0000000 + -40.5600000 0.0000000 + -40.5000000 0.0000000 + -40.4400000 0.0000000 + -40.3800000 0.0000000 + -40.3200000 0.0000000 + -40.2600000 0.0000000 + -40.2000000 0.0000000 + -40.1400000 0.0000000 + -40.0800000 0.0000000 + -40.0200000 0.0000000 + -39.9600000 0.0000000 + -39.9000000 0.0000000 + -39.8400000 0.0000000 + -39.7800000 0.0000000 + -39.7200000 0.0000000 + -39.6600000 0.0000000 + -39.6000000 0.0000000 + -39.5400000 0.0000000 + -39.4800000 0.0000000 + -39.4200000 0.0000000 + -39.3600000 0.0000000 + -39.3000000 0.0000000 + -39.2400000 0.0000000 + -39.1800000 0.0000000 + -39.1200000 0.0000000 + -39.0600000 0.0000000 + -39.0000000 0.0000000 + -38.9400000 0.0000000 + -38.8800000 0.0000000 + -38.8200000 0.0000000 + -38.7600000 0.0000000 + -38.7000000 0.0000000 + -38.6400000 0.0000000 + -38.5800000 0.0000000 + -38.5200000 0.0000000 + -38.4600000 0.0000000 + -38.4000000 0.0000000 + -38.3400000 0.0000000 + -38.2800000 0.0000000 + -38.2200000 0.0000000 + -38.1600000 0.0000000 + -38.1000000 0.0000000 + -38.0400000 0.0000000 + -37.9800000 0.0000000 + -37.9200000 0.0000000 + -37.8600000 0.0000000 + -37.8000000 0.0000000 + -37.7400000 0.0000000 + -37.6800000 0.0000000 + -37.6200000 0.0000000 + -37.5600000 0.0000000 + -37.5000000 0.0000000 + -37.4400000 0.0000000 + -37.3800000 0.0000000 + -37.3200000 0.0000000 + -37.2600000 0.0000000 + -37.2000000 0.0000000 + -37.1400000 0.0000000 + -37.0800000 0.0000000 + -37.0200000 0.0000000 + -36.9600000 0.0000000 + -36.9000000 0.0000000 + -36.8400000 0.0000000 + -36.7800000 0.0000000 + -36.7200000 0.0000000 + -36.6600000 0.0000000 + -36.6000000 0.0000000 + -36.5400000 0.0000000 + -36.4800000 0.0000000 + -36.4200000 0.0000000 + -36.3600000 0.0000000 + -36.3000000 0.0000000 + -36.2400000 0.0000000 + -36.1800000 0.0000000 + -36.1200000 0.0000000 + -36.0600000 0.0000000 + -36.0000000 0.0000000 + -35.9400000 0.0000000 + -35.8800000 0.0000000 + -35.8200000 0.0000000 + -35.7600000 0.0000000 + -35.7000000 0.0000000 + -35.6400000 0.0000000 + -35.5800000 0.0000000 + -35.5200000 0.0000000 + -35.4600000 0.0000000 + -35.4000000 0.0000000 + -35.3400000 0.0000000 + -35.2800000 0.0000000 + -35.2200000 0.0000000 + -35.1600000 0.0000000 + -35.1000000 0.0000000 + -35.0400000 0.0000000 + -34.9800000 0.0000000 + -34.9200000 0.0000000 + -34.8600000 0.0000000 + -34.8000000 0.0000000 + -34.7400000 0.0000000 + -34.6800000 0.0000000 + -34.6200000 0.0000000 + -34.5600000 0.0000000 + -34.5000000 0.0000000 + -34.4400000 0.0000000 + -34.3800000 0.0000000 + -34.3200000 0.0000000 + -34.2600000 0.0000000 + -34.2000000 0.0000000 + -34.1400000 0.0000000 + -34.0800000 0.0000000 + -34.0200000 0.0000000 + -33.9600000 0.0000000 + -33.9000000 0.0000000 + -33.8400000 0.0000000 + -33.7800000 0.0000000 + -33.7200000 0.0000000 + -33.6600000 0.0000000 + -33.6000000 0.0000000 + -33.5400000 0.0000000 + -33.4800000 0.0000000 + -33.4200000 0.0000000 + -33.3600000 0.0000000 + -33.3000000 0.0000000 + -33.2400000 0.0000000 + -33.1800000 0.0000000 + -33.1200000 0.0000000 + -33.0600000 0.0000000 + -33.0000000 0.0000000 + -32.9400000 0.0000000 + -32.8800000 0.0000000 + -32.8200000 0.0000000 + -32.7600000 0.0000000 + -32.7000000 0.0000000 + -32.6400000 0.0000000 + -32.5800000 0.0000000 + -32.5200000 0.0000000 + -32.4600000 0.0000000 + -32.4000000 0.0000000 + -32.3400000 0.0000000 + -32.2800000 0.0000000 + -32.2200000 0.0000000 + -32.1600000 0.0000000 + -32.1000000 0.0000000 + -32.0400000 0.0000000 + -31.9800000 0.0000000 + -31.9200000 0.0000000 + -31.8600000 0.0000000 + -31.8000000 0.0000000 + -31.7400000 0.0000000 + -31.6800000 0.0000000 + -31.6200000 0.0000000 + -31.5600000 0.0000000 + -31.5000000 0.0000000 + -31.4400000 0.0000000 + -31.3800000 0.0000000 + -31.3200000 0.0000000 + -31.2600000 0.0000000 + -31.2000000 0.0000000 + -31.1400000 0.0000000 + -31.0800000 0.0000000 + -31.0200000 0.0000000 + -30.9600000 0.0000000 + -30.9000000 0.0000000 + -30.8400000 0.0000000 + -30.7800000 0.0000000 + -30.7200000 0.0000000 + -30.6600000 0.0000000 + -30.6000000 0.0000000 + -30.5400000 0.0000000 + -30.4800000 0.0000000 + -30.4200000 0.0000000 + -30.3600000 0.0000000 + -30.3000000 0.0000000 + -30.2400000 0.0000000 + -30.1800000 0.0000000 + -30.1200000 0.0000000 + -30.0600000 0.0000000 + -30.0000000 0.0000000 + -29.9400000 0.0000000 + -29.8800000 0.0000000 + -29.8200000 0.0000000 + -29.7600000 0.0000000 + -29.7000000 0.0000000 + -29.6400000 0.0000000 + -29.5800000 0.0000000 + -29.5200000 0.0000000 + -29.4600000 0.0000000 + -29.4000000 0.0000000 + -29.3400000 0.0000000 + -29.2800000 0.0000000 + -29.2200000 0.0000000 + -29.1600000 0.0000000 + -29.1000000 0.0000000 + -29.0400000 0.0000000 + -28.9800000 0.0000000 + -28.9200000 0.0000000 + -28.8600000 0.0000000 + -28.8000000 0.0000000 + -28.7400000 0.0000000 + -28.6800000 0.0000000 + -28.6200000 0.0000000 + -28.5600000 0.0000000 + -28.5000000 0.0000000 + -28.4400000 0.0000000 + -28.3800000 0.0000000 + -28.3200000 0.0000000 + -28.2600000 0.0000000 + -28.2000000 0.0000000 + -28.1400000 0.0000000 + -28.0800000 0.0000000 + -28.0200000 0.0000000 + -27.9600000 0.0000000 + -27.9000000 0.0000000 + -27.8400000 0.0000000 + -27.7800000 0.0000000 + -27.7200000 0.0000000 + -27.6600000 0.0000000 + -27.6000000 0.0000000 + -27.5400000 0.0000000 + -27.4800000 0.0000000 + -27.4200000 0.0000000 + -27.3600000 0.0000000 + -27.3000000 0.0000000 + -27.2400000 0.0000000 + -27.1800000 0.0000000 + -27.1200000 0.0000000 + -27.0600000 0.0000000 + -27.0000000 0.0000000 + -26.9400000 0.0000000 + -26.8800000 0.0000000 + -26.8200000 0.0000000 + -26.7600000 0.0000000 + -26.7000000 0.0000000 + -26.6400000 0.0000000 + -26.5800000 0.0000000 + -26.5200000 0.0000000 + -26.4600000 0.0000000 + -26.4000000 0.0000000 + -26.3400000 0.0000000 + -26.2800000 0.0000000 + -26.2200000 0.0000000 + -26.1600000 0.0000000 + -26.1000000 0.0000000 + -26.0400000 0.0000000 + -25.9800000 0.0000000 + -25.9200000 0.0000000 + -25.8600000 0.0000000 + -25.8000000 0.0000000 + -25.7400000 0.0000000 + -25.6800000 0.0000000 + -25.6200000 0.0000000 + -25.5600000 0.0000000 + -25.5000000 0.0000000 + -25.4400000 0.0000000 + -25.3800000 0.0000000 + -25.3200000 0.0000000 + -25.2600000 0.0000000 + -25.2000000 0.0000000 + -25.1400000 0.0000000 + -25.0800000 0.0000000 + -25.0200000 0.0000000 + -24.9600000 0.0000000 + -24.9000000 0.0000000 + -24.8400000 0.0000000 + -24.7800000 0.0000000 + -24.7200000 0.0000000 + -24.6600000 0.0000000 + -24.6000000 0.0000000 + -24.5400000 0.0000000 + -24.4800000 0.0000000 + -24.4200000 0.0000000 + -24.3600000 0.0000000 + -24.3000000 0.0000000 + -24.2400000 0.0000000 + -24.1800000 0.0000000 + -24.1200000 0.0000000 + -24.0600000 0.0000000 + -24.0000000 0.0000000 + -23.9400000 0.0000000 + -23.8800000 0.0000000 + -23.8200000 0.0000000 + -23.7600000 0.0000000 + -23.7000000 0.0000000 + -23.6400000 0.0000000 + -23.5800000 0.0000000 + -23.5200000 0.0000000 + -23.4600000 0.0000000 + -23.4000000 0.0000000 + -23.3400000 0.0000000 + -23.2800000 0.0000000 + -23.2200000 0.0000000 + -23.1600000 0.0000000 + -23.1000000 0.0000000 + -23.0400000 0.0000000 + -22.9800000 0.0000000 + -22.9200000 0.0000000 + -22.8600000 0.0000000 + -22.8000000 0.0000000 + -22.7400000 0.0000000 + -22.6800000 0.0000000 + -22.6200000 0.0000000 + -22.5600000 0.0000000 + -22.5000000 0.0000000 + -22.4400000 0.0000000 + -22.3800000 0.0000000 + -22.3200000 0.0000000 + -22.2600000 0.0000000 + -22.2000000 0.0000000 + -22.1400000 0.0000000 + -22.0800000 0.0000000 + -22.0200000 0.0000000 + -21.9600000 0.0000000 + -21.9000000 0.0000000 + -21.8400000 0.0000000 + -21.7800000 0.0000000 + -21.7200000 0.0000000 + -21.6600000 0.0000000 + -21.6000000 0.0000000 + -21.5400000 0.0000000 + -21.4800000 0.0000000 + -21.4200000 0.0000000 + -21.3600000 0.0000000 + -21.3000000 0.0000000 + -21.2400000 0.0000000 + -21.1800000 0.0000000 + -21.1200000 0.0000000 + -21.0600000 0.0000000 + -21.0000000 0.0000000 + -20.9400000 0.0000000 + -20.8800000 0.0000000 + -20.8200000 0.0000000 + -20.7600000 0.0000000 + -20.7000000 0.0000000 + -20.6400000 0.0000000 + -20.5800000 0.0000000 + -20.5200000 0.0000000 + -20.4600000 0.0000000 + -20.4000000 0.0000000 + -20.3400000 0.0000000 + -20.2800000 0.0000000 + -20.2200000 0.0000000 + -20.1600000 0.0000000 + -20.1000000 0.0000000 + -20.0400000 0.0000000 + -19.9800000 0.0000000 + -19.9200000 0.0000000 + -19.8600000 0.0000000 + -19.8000000 0.0000000 + -19.7400000 0.0000000 + -19.6800000 0.0000000 + -19.6200000 0.0000000 + -19.5600000 0.0000000 + -19.5000000 0.0000000 + -19.4400000 0.0000000 + -19.3800000 0.0000000 + -19.3200000 0.0000000 + -19.2600000 0.0000000 + -19.2000000 0.0000000 + -19.1400000 0.0000000 + -19.0800000 0.0000000 + -19.0200000 0.0000000 + -18.9600000 0.0000000 + -18.9000000 0.0000000 + -18.8400000 0.0000000 + -18.7800000 0.0000000 + -18.7200000 0.0000000 + -18.6600000 0.0000000 + -18.6000000 0.0000000 + -18.5400000 0.0000000 + -18.4800000 0.0000000 + -18.4200000 0.0000000 + -18.3600000 0.0000000 + -18.3000000 0.0000000 + -18.2400000 0.0000000 + -18.1800000 0.0000000 + -18.1200000 0.0000000 + -18.0600000 0.0000000 + -18.0000000 0.0000000 + -17.9400000 0.0000000 + -17.8800000 0.0000000 + -17.8200000 0.0000000 + -17.7600000 0.0000000 + -17.7000000 0.0000000 + -17.6400000 0.0000000 + -17.5800000 0.0000000 + -17.5200000 0.0000000 + -17.4600000 0.0000000 + -17.4000000 0.0000000 + -17.3400000 0.0000000 + -17.2800000 0.0000000 + -17.2200000 0.0000000 + -17.1600000 0.0000000 + -17.1000000 0.0000000 + -17.0400000 0.0000000 + -16.9800000 0.0000000 + -16.9200000 0.0000000 + -16.8600000 0.0000000 + -16.8000000 0.0000000 + -16.7400000 0.0000000 + -16.6800000 0.0000000 + -16.6200000 0.0000000 + -16.5600000 0.0000000 + -16.5000000 0.0000000 + -16.4400000 0.0000000 + -16.3800000 0.0000000 + -16.3200000 0.0000000 + -16.2600000 0.0000000 + -16.2000000 0.0000000 + -16.1400000 0.0000000 + -16.0800000 0.0000000 + -16.0200000 0.0000000 + -15.9600000 0.0000000 + -15.9000000 0.0000000 + -15.8400000 0.0000000 + -15.7800000 0.0000000 + -15.7200000 0.0000000 + -15.6600000 0.0000000 + -15.6000000 0.0000000 + -15.5400000 0.0000000 + -15.4800000 0.0000000 + -15.4200000 0.0000000 + -15.3600000 0.0000000 + -15.3000000 0.0000000 + -15.2400000 0.0000000 + -15.1800000 0.0000000 + -15.1200000 0.0000000 + -15.0600000 0.0000000 + -15.0000000 0.0000000 + -14.9400000 0.0000000 + -14.8800000 0.0000000 + -14.8200000 0.0000000 + -14.7600000 0.0000000 + -14.7000000 0.0000000 + -14.6400000 0.0000000 + -14.5800000 0.0000000 + -14.5200000 0.0000000 + -14.4600000 0.0000000 + -14.4000000 0.0000000 + -14.3400000 0.0000000 + -14.2800000 0.0000000 + -14.2200000 0.0000000 + -14.1600000 0.0000000 + -14.1000000 0.0000000 + -14.0400000 0.0000000 + -13.9800000 0.0000000 + -13.9200000 0.0000000 + -13.8600000 0.0000000 + -13.8000000 0.0000000 + -13.7400000 0.0000000 + -13.6800000 0.0000000 + -13.6200000 0.0000000 + -13.5600000 0.0000000 + -13.5000000 0.0000000 + -13.4400000 0.0000000 + -13.3800000 0.0000000 + -13.3200000 0.0000000 + -13.2600000 0.0000000 + -13.2000000 0.0000000 + -13.1400000 0.0000000 + -13.0800000 0.0000000 + -13.0200000 0.0000000 + -12.9600000 0.0000000 + -12.9000000 0.0000000 + -12.8400000 0.0000000 + -12.7800000 0.0000000 + -12.7200000 0.0000000 + -12.6600000 0.0000000 + -12.6000000 0.0000000 + -12.5400000 0.0000000 + -12.4800000 0.0000000 + -12.4200000 0.0000000 + -12.3600000 0.0000000 + -12.3000000 0.0000000 + -12.2400000 0.0000000 + -12.1800000 0.0000000 + -12.1200000 0.0000000 + -12.0600000 0.0000000 + -12.0000000 0.0000000 + -11.9400000 0.0000000 + -11.8800000 0.0000000 + -11.8200000 0.0000000 + -11.7600000 0.0000000 + -11.7000000 0.0000000 + -11.6400000 0.0000000 + -11.5800000 0.0000000 + -11.5200000 0.0000000 + -11.4600000 0.0000000 + -11.4000000 0.0000000 + -11.3400000 0.0000000 + -11.2800000 0.0000000 + -11.2200000 0.0000000 + -11.1600000 0.0000000 + -11.1000000 0.0000000 + -11.0400000 0.0000000 + -10.9800000 0.0000000 + -10.9200000 0.0000000 + -10.8600000 0.0000000 + -10.8000000 0.0000000 + -10.7400000 0.0000000 + -10.6800000 0.0000000 + -10.6200000 0.0000000 + -10.5600000 0.0000000 + -10.5000000 0.0000000 + -10.4400000 0.0000000 + -10.3800000 0.0000000 + -10.3200000 0.0000000 + -10.2600000 0.0000000 + -10.2000000 0.0000000 + -10.1400000 0.0000000 + -10.0800000 0.0000000 + -10.0200000 0.0000000 + -9.9600000 0.0000000 + -9.9000000 0.0000000 + -9.8400000 0.0000000 + -9.7800000 0.0000000 + -9.7200000 0.0000000 + -9.6600000 0.0000000 + -9.6000000 0.0000000 + -9.5400000 0.0000000 + -9.4800000 0.0000000 + -9.4200000 0.0000000 + -9.3600000 0.0000000 + -9.3000000 0.0000000 + -9.2400000 0.0000000 + -9.1800000 0.0000000 + -9.1200000 0.0000000 + -9.0600000 0.0000000 + -9.0000000 0.0000000 + -8.9400000 0.0000000 + -8.8800000 0.0000000 + -8.8200000 0.0000000 + -8.7600000 0.0000000 + -8.7000000 0.0000000 + -8.6400000 0.0000000 + -8.5800000 0.0000000 + -8.5200000 0.0000000 + -8.4600000 0.0000000 + -8.4000000 0.0000000 + -8.3400000 0.0000000 + -8.2800000 0.0000000 + -8.2200000 0.0000000 + -8.1600000 0.0000000 + -8.1000000 0.0000000 + -8.0400000 0.0000000 + -7.9800000 0.0000000 + -7.9200000 0.0000000 + -7.8600000 0.0000000 + -7.8000000 0.0000000 + -7.7400000 0.0000000 + -7.6800000 0.0000000 + -7.6200000 0.0000000 + -7.5600000 0.0000000 + -7.5000000 0.0000000 + -7.4400000 0.0000000 + -7.3800000 0.0000000 + -7.3200000 0.0000000 + -7.2600000 0.0000000 + -7.2000000 0.0000000 + -7.1400000 0.0000000 + -7.0800000 0.0000000 + -7.0200000 0.0000000 + -6.9600000 0.0000000 + -6.9000000 0.0000000 + -6.8400000 0.0000000 + -6.7800000 0.0000000 + -6.7200000 0.0000000 + -6.6600000 0.0000000 + -6.6000000 0.0000000 + -6.5400000 0.0000000 + -6.4800000 0.0000000 + -6.4200000 0.0000000 + -6.3600000 0.0000000 + -6.3000000 0.0000000 + -6.2400000 0.0000000 + -6.1800000 0.0000000 + -6.1200000 0.0000000 + -6.0600000 0.0000000 + -6.0000000 0.0000000 + -5.9400000 0.0000000 + -5.8800000 0.0000000 + -5.8200000 0.0000000 + -5.7600000 0.0000000 + -5.7000000 0.0000000 + -5.6400000 0.0000000 + -5.5800000 0.0000000 + -5.5200000 0.0000000 + -5.4600000 0.0000000 + -5.4000000 0.0000000 + -5.3400000 0.0000000 + -5.2800000 0.0000000 + -5.2200000 0.0000000 + -5.1600000 0.0000000 + -5.1000000 0.0000000 + -5.0400000 0.0000000 + -4.9800000 0.0000000 + -4.9200000 0.0000000 + -4.8600000 0.0000000 + -4.8000000 0.0000000 + -4.7400000 0.0000000 + -4.6800000 0.0000000 + -4.6200000 0.0000000 + -4.5600000 0.0000000 + -4.5000000 0.0000000 + -4.4400000 0.0000000 + -4.3800000 0.0000000 + -4.3200000 0.0000000 + -4.2600000 0.0000000 + -4.2000000 0.0000000 + -4.1400000 0.0000000 + -4.0800000 0.0000000 + -4.0200000 0.0000000 + -3.9600000 0.0000000 + -3.9000000 0.0000000 + -3.8400000 0.0000000 + -3.7800000 0.0000000 + -3.7200000 0.0000000 + -3.6600000 0.0000000 + -3.6000000 0.0000000 + -3.5400000 0.0000000 + -3.4800000 0.0000000 + -3.4200000 0.0000000 + -3.3600000 0.0000000 + -3.3000000 0.0000000 + -3.2400000 0.0000000 + -3.1800000 0.0000000 + -3.1200000 0.0000000 + -3.0600000 0.0000000 + -3.0000000 0.0000000 + -2.9400000 0.0000000 + -2.8800000 0.0000000 + -2.8200000 0.0000000 + -2.7600000 0.0000000 + -2.7000000 0.0000000 + -2.6400000 0.0000000 + -2.5800000 0.0000000 + -2.5200000 0.0000000 + -2.4600000 0.0000000 + -2.4000000 0.0000000 + -2.3400000 0.0000000 + -2.2800000 0.0000000 + -2.2200000 0.0000000 + -2.1600000 0.0000000 + -2.1000000 0.0000000 + -2.0400000 0.0000000 + -1.9800000 0.0000000 + -1.9200000 0.0000000 + -1.8600000 0.0000000 + -1.8000000 0.0000000 + -1.7400000 0.0000000 + -1.6800000 0.0000000 + -1.6200000 0.0000000 + -1.5600000 0.0000000 + -1.5000000 0.0000000 + -1.4400000 0.0000000 + -1.3800000 0.0000000 + -1.3200000 0.0000000 + -1.2600000 0.0000000 + -1.2000000 0.0000000 + -1.1400000 0.0000000 + -1.0800000 0.0000000 + -1.0200000 0.0000000 + -0.9600000 0.0000000 + -0.9000000 0.0000000 + -0.8400000 0.0000000 + -0.7800000 0.0000000 + -0.7200000 0.0000000 + -0.6600000 0.0000000 + -0.6000000 0.0000000 + -0.5400000 0.0000000 + -0.4800000 0.0000000 + -0.4200000 0.0000000 + -0.3600000 0.0000000 + -0.3000000 0.0000000 + -0.2400000 0.0000000 + -0.1800000 0.0000000 + -0.1200000 0.0000000 + -0.0600000 0.0000000 + 0.0000000 0.0000000 + 0.0600000 0.0000000 + 0.1200000 0.0000000 + 0.1800000 0.0000000 + 0.2400000 0.0000000 + 0.3000000 0.0000000 + 0.3600000 0.0000000 + 0.4200000 0.0000000 + 0.4800000 0.0000000 + 0.5400000 0.0000000 + 0.6000000 0.0000000 + 0.6600000 0.0000000 + 0.7200000 0.0000000 + 0.7800000 0.0000000 + 0.8400000 0.0000000 + 0.9000000 0.0000000 + 0.9600000 0.0000000 + 1.0200000 0.0000000 + 1.0800000 0.0000000 + 1.1400000 0.0000000 + 1.2000000 0.0000000 + 1.2600000 0.0000000 + 1.3200000 0.0000000 + 1.3800000 0.0000000 + 1.4400000 0.0000000 + 1.5000000 0.0000000 + 1.5600000 0.0000000 + 1.6200000 0.0000000 + 1.6800000 0.0000000 + 1.7400000 0.0000000 + 1.8000000 0.0000000 + 1.8600000 0.0000000 + 1.9200000 0.0000000 + 1.9800000 0.0000000 + 2.0400000 0.0000000 + 2.1000000 0.0000000 + 2.1600000 0.0000000 + 2.2200000 0.0000000 + 2.2800000 0.0000000 + 2.3400000 0.0000000 + 2.4000000 0.0000000 + 2.4600000 0.0000000 + 2.5200000 0.0000000 + 2.5800000 0.0000000 + 2.6400000 0.0000000 + 2.7000000 0.0000000 + 2.7600000 0.0000000 + 2.8200000 0.0000000 + 2.8800000 0.0000000 + 2.9400000 0.0000000 + 3.0000000 0.0000000 + 3.0600000 0.0000000 + 3.1200000 0.0000000 + 3.1800000 0.0000000 + 3.2400000 0.0000000 + 3.3000000 0.0000000 + 3.3600000 0.0000000 + 3.4200000 0.0000000 + 3.4800000 0.0000000 + 3.5400000 0.0000000 + 3.6000000 0.0000000 + 3.6600000 0.0000000 + 3.7200000 0.0000000 + 3.7800000 0.0000000 + 3.8400000 0.0000000 + 3.9000000 0.0000000 + 3.9600000 0.0000000 + 4.0200000 0.0000000 + 4.0800000 0.0000000 + 4.1400000 0.0000000 + 4.2000000 0.0000000 + 4.2600000 0.0000000 + 4.3200000 0.0000000 + 4.3800000 0.0000000 + 4.4400000 0.0000000 + 4.5000000 0.0000000 + 4.5600000 0.0000000 + 4.6200000 0.0000000 + 4.6800000 0.0000000 + 4.7400000 0.0000000 + 4.8000000 0.0000000 + 4.8600000 0.0000000 + 4.9200000 0.0000000 + 4.9800000 0.0000000 + 5.0400000 0.0000000 + 5.1000000 0.0000000 + 5.1600000 0.0000000 + 5.2200000 0.0000000 + 5.2800000 0.0000000 + 5.3400000 0.0000000 + 5.4000000 0.0000000 + 5.4600000 0.0000000 + 5.5200000 0.0000000 + 5.5800000 0.0000000 + 5.6400000 0.0000000 + 5.7000000 0.0000000 + 5.7600000 0.0000000 + 5.8200000 0.0000000 + 5.8800000 0.0000000 + 5.9400000 0.0000000 + 6.0000000 0.0000000 + 6.0600000 0.0000000 + 6.1200000 0.0000000 + 6.1800000 0.0000000 + 6.2400000 0.0000000 + 6.3000000 0.0000000 + 6.3600000 0.0000000 + 6.4200000 0.0000000 + 6.4800000 0.0000000 + 6.5400000 0.0000000 + 6.6000000 0.0000000 + 6.6600000 0.0000000 + 6.7200000 0.0000000 + 6.7800000 0.0000000 + 6.8400000 0.0000000 + 6.9000000 0.0000000 + 6.9600000 0.0000000 + 7.0200000 0.0000000 + 7.0800000 0.0000000 + 7.1400000 0.0000000 + 7.2000000 0.0000000 + 7.2600000 0.0000000 + 7.3200000 0.0000000 + 7.3800000 0.0000000 + 7.4400000 0.0000000 + 7.5000000 0.0000000 + 7.5600000 0.0000000 + 7.6200000 0.0000000 + 7.6800000 0.0000000 + 7.7400000 0.0000000 + 7.8000000 0.0000000 + 7.8600000 0.0000000 + 7.9200000 0.0000000 + 7.9800000 0.0000000 + 8.0400000 0.0000000 + 8.1000000 0.0000000 + 8.1600000 0.0000000 + 8.2200000 0.0000000 + 8.2800000 0.0000000 + 8.3400000 0.0000000 + 8.4000000 0.0000000 + 8.4600000 0.0000000 + 8.5200000 0.0000000 + 8.5800000 0.0000000 + 8.6400000 0.0000000 + 8.7000000 0.0000000 + 8.7600000 0.0000000 + 8.8200000 0.0000000 + 8.8800000 0.0000000 + 8.9400000 0.0000000 + 9.0000000 0.0000000 + 9.0600000 0.0000000 + 9.1200000 0.0000000 + 9.1800000 0.0000000 + 9.2400000 0.0000000 + 9.3000000 0.0000000 + 9.3600000 0.0000000 + 9.4200000 0.0000000 + 9.4800000 0.0000000 + 9.5400000 0.0000000 + 9.6000000 0.0000000 + 9.6600000 0.0000000 + 9.7200000 0.0000000 + 9.7800000 0.0000000 + 9.8400000 0.0000000 + 9.9000000 0.0000000 + 9.9600000 0.0000000 + 10.0200000 0.0000000 + 10.0800000 0.0000000 + 10.1400000 0.0000000 + 10.2000000 0.0000000 + 10.2600000 0.0000000 + 10.3200000 0.0000000 + 10.3800000 0.0000000 + 10.4400000 0.0000000 + 10.5000000 0.0000000 + 10.5600000 0.0000000 + 10.6200000 0.0000000 + 10.6800000 0.0000000 + 10.7400000 0.0000000 + 10.8000000 0.0000000 + 10.8600000 0.0000000 + 10.9200000 0.0000000 + 10.9800000 0.0000000 + 11.0400000 0.0000000 + 11.1000000 0.0000000 + 11.1600000 0.0000000 + 11.2200000 0.0000000 + 11.2800000 0.0000000 + 11.3400000 0.0000000 + 11.4000000 0.0000000 + 11.4600000 0.0000000 + 11.5200000 0.0000000 + 11.5800000 0.0000000 + 11.6400000 0.0000000 + 11.7000000 0.0000000 + 11.7600000 0.0000000 + 11.8200000 0.0000000 + 11.8800000 0.0000000 + 11.9400000 0.0000000 + 12.0000000 0.0000000 + 12.0600000 0.0000000 + 12.1200000 0.0000000 + 12.1800000 0.0000000 + 12.2400000 0.0000000 + 12.3000000 0.0000000 + 12.3600000 0.0000000 + 12.4200000 0.0000000 + 12.4800000 0.0000000 + 12.5400000 0.0000000 + 12.6000000 0.0000000 + 12.6600000 0.0000000 + 12.7200000 0.0000000 + 12.7800000 0.0000000 + 12.8400000 0.0000000 + 12.9000000 0.0000000 + 12.9600000 0.0000000 + 13.0200000 0.0000000 + 13.0800000 0.0000000 + 13.1400000 0.0000000 + 13.2000000 0.0000000 + 13.2600000 0.0000000 + 13.3200000 0.0000000 + 13.3800000 0.0000000 + 13.4400000 0.0000000 + 13.5000000 0.0000000 + 13.5600000 0.0000000 + 13.6200000 0.0000000 + 13.6800000 0.0000000 + 13.7400000 0.0000000 + 13.8000000 0.0000000 + 13.8600000 0.0000000 + 13.9200000 0.0000000 + 13.9800000 0.0000000 + 14.0400000 0.0000000 + 14.1000000 0.0000000 + 14.1600000 0.0000000 + 14.2200000 0.0000000 + 14.2800000 0.0000000 + 14.3400000 0.0000000 + 14.4000000 0.0000000 + 14.4600000 0.0000000 + 14.5200000 0.0000000 + 14.5800000 0.0000000 + 14.6400000 0.0000000 + 14.7000000 0.0000000 + 14.7600000 0.0000000 + 14.8200000 0.0000000 + 14.8800000 0.0000000 + 14.9400000 0.0000000 + 15.0000000 0.0000000 + 15.0600000 0.0000000 + 15.1200000 0.0000000 + 15.1800000 0.0000000 + 15.2400000 0.0000000 + 15.3000000 0.0000000 + 15.3600000 0.0000000 + 15.4200000 0.0000000 + 15.4800000 0.0000000 + 15.5400000 0.0000000 + 15.6000000 0.0000000 + 15.6600000 0.0000000 + 15.7200000 0.0000000 + 15.7800000 0.0000000 + 15.8400000 0.0000000 + 15.9000000 0.0000000 + 15.9600000 0.0000000 + 16.0200000 0.0000000 + 16.0800000 0.0000000 + 16.1400000 0.0000000 + 16.2000000 0.0000000 + 16.2600000 0.0000000 + 16.3200000 0.0000000 + 16.3800000 0.0000000 + 16.4400000 0.0000000 + 16.5000000 0.0000000 + 16.5600000 0.0000000 + 16.6200000 0.0000000 + 16.6800000 0.0000000 + 16.7400000 0.0000000 + 16.8000000 0.0000000 + 16.8600000 0.0000000 + 16.9200000 0.0000000 + 16.9800000 0.0000000 + 17.0400000 0.0000000 + 17.1000000 0.0000000 + 17.1600000 0.0000000 + 17.2200000 0.0000000 + 17.2800000 0.0000000 + 17.3400000 0.0000000 + 17.4000000 0.0000000 + 17.4600000 0.0000000 + 17.5200000 0.0000000 + 17.5800000 0.0000000 + 17.6400000 0.0000000 + 17.7000000 0.0000000 + 17.7600000 0.0000000 + 17.8200000 0.0000000 + 17.8800000 0.0000000 + 17.9400000 0.0000000 + 18.0000000 0.0000000 + 18.0600000 0.0000000 + 18.1200000 0.0000000 + 18.1800000 0.0000000 + 18.2400000 0.0000000 + 18.3000000 0.0000000 + 18.3600000 0.0000000 + 18.4200000 0.0000000 + 18.4800000 0.0000000 + 18.5400000 0.0000000 + 18.6000000 0.0000000 + 18.6600000 0.0000000 + 18.7200000 0.0000000 + 18.7800000 0.0000000 + 18.8400000 0.0000000 + 18.9000000 0.0000000 + 18.9600000 0.0000000 + 19.0200000 0.0000000 + 19.0800000 0.0000000 + 19.1400000 0.0000000 + 19.2000000 0.0000000 + 19.2600000 0.0000000 + 19.3200000 0.0000000 + 19.3800000 0.0000000 + 19.4400000 0.0000000 + 19.5000000 0.0000000 + 19.5600000 0.0000000 + 19.6200000 0.0000000 + 19.6800000 0.0000000 + 19.7400000 0.0000000 + 19.8000000 0.0000000 + 19.8600000 0.0000000 + 19.9200000 0.0000000 + 19.9800000 0.0000000 + 20.0400000 0.0000000 + 20.1000000 0.0000000 + 20.1600000 0.0000000 + 20.2200000 0.0000000 + 20.2800000 0.0000000 + 20.3400000 0.0000000 + 20.4000000 0.0000000 + 20.4600000 0.0000000 + 20.5200000 0.0000000 + 20.5800000 0.0000000 + 20.6400000 0.0000000 + 20.7000000 0.0000000 + 20.7600000 0.0000000 + 20.8200000 0.0000000 + 20.8800000 0.0000000 + 20.9400000 0.0000000 + 21.0000000 0.0000000 + 21.0600000 0.0000000 + 21.1200000 0.0000000 + 21.1800000 0.0000000 + 21.2400000 0.0000000 + 21.3000000 0.0000000 + 21.3600000 0.0000000 + 21.4200000 0.0000000 + 21.4800000 0.0000000 + 21.5400000 0.0000000 + 21.6000000 0.0000000 + 21.6600000 0.0000000 + 21.7200000 0.0000000 + 21.7800000 0.0000000 + 21.8400000 0.0000000 + 21.9000000 0.0000000 + 21.9600000 0.0000000 + 22.0200000 0.0000000 + 22.0800000 0.0000000 + 22.1400000 0.0000000 + 22.2000000 0.0000000 + 22.2600000 0.0000000 + 22.3200000 0.0000000 + 22.3800000 0.0000000 + 22.4400000 0.0000000 + 22.5000000 0.0000000 + 22.5600000 0.0000000 + 22.6200000 0.0000000 + 22.6800000 0.0000000 + 22.7400000 0.0000000 + 22.8000000 0.0000000 + 22.8600000 0.0000000 + 22.9200000 0.0000000 + 22.9800000 0.0000000 + 23.0400000 0.0000000 + 23.1000000 0.0000000 + 23.1600000 0.0000000 + 23.2200000 0.0000000 + 23.2800000 0.0000000 + 23.3400000 0.0000000 + 23.4000000 0.0000000 + 23.4600000 0.0000000 + 23.5200000 0.0000000 + 23.5800000 0.0000000 + 23.6400000 0.0000000 + 23.7000000 0.0000000 + 23.7600000 0.0000000 + 23.8200000 0.0000000 + 23.8800000 0.0000000 + 23.9400000 0.0000000 + 24.0000000 0.0000000 + 24.0600000 0.0000000 + 24.1200000 0.0000000 + 24.1800000 0.0000000 + 24.2400000 0.0000000 + 24.3000000 0.0000000 + 24.3600000 0.0000000 + 24.4200000 0.0000000 + 24.4800000 0.0000000 + 24.5400000 0.0000000 + 24.6000000 0.0000000 + 24.6600000 0.0000000 + 24.7200000 0.0000000 + 24.7800000 0.0000000 + 24.8400000 0.0000000 + 24.9000000 0.0000000 + 24.9600000 0.0000000 + 25.0200000 0.0000000 + 25.0800000 0.0000000 + 25.1400000 0.0000000 + 25.2000000 0.0000000 + 25.2600000 0.0000000 + 25.3200000 0.0000000 + 25.3800000 0.0000000 + 25.4400000 0.0000000 + 25.5000000 0.0000000 + 25.5600000 0.0000000 + 25.6200000 0.0000000 + 25.6800000 0.0000000 + 25.7400000 0.0000000 + 25.8000000 0.0000000 + 25.8600000 0.0000000 + 25.9200000 0.0000000 + 25.9800000 0.0000000 + 26.0400000 0.0000000 + 26.1000000 0.0000000 + 26.1600000 0.0000000 + 26.2200000 0.0000000 + 26.2800000 0.0000000 + 26.3400000 0.0000000 + 26.4000000 0.0000000 + 26.4600000 0.0000000 + 26.5200000 0.0000000 + 26.5800000 0.0000000 + 26.6400000 0.0000000 + 26.7000000 0.0000000 + 26.7600000 0.0000000 + 26.8200000 0.0000000 + 26.8800000 0.0000000 + 26.9400000 0.0000000 + 27.0000000 0.0000000 + 27.0600000 0.0000000 + 27.1200000 0.0000000 + 27.1800000 0.0000000 + 27.2400000 0.0000000 + 27.3000000 0.0000000 + 27.3600000 0.0000000 + 27.4200000 0.0000000 + 27.4800000 0.0000000 + 27.5400000 0.0000000 + 27.6000000 0.0000000 + 27.6600000 0.0000000 + 27.7200000 0.0000000 + 27.7800000 0.0000000 + 27.8400000 0.0000000 + 27.9000000 0.0000000 + 27.9600000 0.0000000 + 28.0200000 0.0000000 + 28.0800000 0.0000000 + 28.1400000 0.0000000 + 28.2000000 0.0000000 + 28.2600000 0.0000000 + 28.3200000 0.0000000 + 28.3800000 0.0000000 + 28.4400000 0.0000000 + 28.5000000 0.0000000 + 28.5600000 0.0000000 + 28.6200000 0.0000000 + 28.6800000 0.0000000 + 28.7400000 0.0000000 + 28.8000000 0.0000000 + 28.8600000 0.0000000 + 28.9200000 0.0000000 + 28.9800000 0.0000000 + 29.0400000 0.0000000 + 29.1000000 0.0000000 + 29.1600000 0.0000000 + 29.2200000 0.0000000 + 29.2800000 0.0000000 + 29.3400000 0.0000000 + 29.4000000 0.0000000 + 29.4600000 0.0000000 + 29.5200000 0.0000000 + 29.5800000 0.0000000 + 29.6400000 0.0000000 + 29.7000000 0.0000000 + 29.7600000 0.0000000 + 29.8200000 0.0000000 + 29.8800000 0.0000000 + 29.9400000 0.0000000 + 30.0000000 0.0000000 + 30.0600000 0.0000000 + 30.1200000 0.0000000 + 30.1800000 0.0000000 + 30.2400000 0.0000000 + 30.3000000 0.0000000 + 30.3600000 0.0000000 + 30.4200000 0.0000000 + 30.4800000 0.0000000 + 30.5400000 0.0000000 + 30.6000000 0.0000000 + 30.6600000 0.0000000 + 30.7200000 0.0000000 + 30.7800000 0.0000000 + 30.8400000 0.0000000 + 30.9000000 0.0000000 + 30.9600000 0.0000000 + 31.0200000 0.0000000 + 31.0800000 0.0000000 + 31.1400000 0.0000000 + 31.2000000 0.0000000 + 31.2600000 0.0000000 + 31.3200000 0.0000000 + 31.3800000 0.0000000 + 31.4400000 0.0000000 + 31.5000000 0.0000000 + 31.5600000 0.0000000 + 31.6200000 0.0000000 + 31.6800000 0.0000000 + 31.7400000 0.0000000 + 31.8000000 0.0000000 + 31.8600000 0.0000000 + 31.9200000 0.0000000 + 31.9800000 0.0000000 + 32.0400000 0.0000000 + 32.1000000 0.0000000 + 32.1600000 0.0000000 + 32.2200000 0.0000000 + 32.2800000 0.0000000 + 32.3400000 0.0000000 + 32.4000000 0.0000000 + 32.4600000 0.0000000 + 32.5200000 0.0000000 + 32.5800000 0.0000000 + 32.6400000 0.0000000 + 32.7000000 0.0000000 + 32.7600000 0.0000000 + 32.8200000 0.0000000 + 32.8800000 0.0000000 + 32.9400000 0.0000000 + 33.0000000 0.0000000 + 33.0600000 0.0000000 + 33.1200000 0.0000000 + 33.1800000 0.0000000 + 33.2400000 0.0000000 + 33.3000000 0.0000000 + 33.3600000 0.0000000 + 33.4200000 0.0000000 + 33.4800000 0.0000000 + 33.5400000 0.0000000 + 33.6000000 0.0000000 + 33.6600000 0.0000000 + 33.7200000 0.0000000 + 33.7800000 0.0000000 + 33.8400000 0.0000000 + 33.9000000 0.0000000 + 33.9600000 0.0000000 + 34.0200000 0.0000000 + 34.0800000 0.0000000 + 34.1400000 0.0000000 + 34.2000000 0.0000000 + 34.2600000 0.0000000 + 34.3200000 0.0000000 + 34.3800000 0.0000000 + 34.4400000 0.0000000 + 34.5000000 0.0000000 + 34.5600000 0.0000000 + 34.6200000 0.0000000 + 34.6800000 0.0000000 + 34.7400000 0.0000000 + 34.8000000 0.0000000 + 34.8600000 0.0000000 + 34.9200000 0.0000000 + 34.9800000 0.0000000 + 35.0400000 0.0000000 + 35.1000000 0.0000000 + 35.1600000 0.0000000 + 35.2200000 0.0000000 + 35.2800000 0.0000000 + 35.3400000 0.0000000 + 35.4000000 0.0000000 + 35.4600000 0.0000000 + 35.5200000 0.0000000 + 35.5800000 0.0000000 + 35.6400000 0.0000000 + 35.7000000 0.0000000 + 35.7600000 0.0000000 + 35.8200000 0.0000000 + 35.8800000 0.0000000 + 35.9400000 0.0000000 + 36.0000000 0.0000000 + 36.0600000 0.0000000 + 36.1200000 0.0000000 + 36.1800000 0.0000000 + 36.2400000 0.0000000 + 36.3000000 0.0000000 + 36.3600000 0.0000000 + 36.4200000 0.0000000 + 36.4800000 0.0000000 + 36.5400000 0.0000000 + 36.6000000 0.0000000 + 36.6600000 0.0000000 + 36.7200000 0.0000000 + 36.7800000 0.0000000 + 36.8400000 0.0000000 + 36.9000000 0.0000000 + 36.9600000 0.0000000 + 37.0200000 0.0000000 + 37.0800000 0.0000000 + 37.1400000 0.0000000 + 37.2000000 0.0000000 + 37.2600000 0.0000000 + 37.3200000 0.0000000 + 37.3800000 0.0000000 + 37.4400000 0.0000000 + 37.5000000 0.0000000 + 37.5600000 0.0000000 + 37.6200000 0.0000000 + 37.6800000 0.0000000 + 37.7400000 0.0000000 + 37.8000000 0.0000000 + 37.8600000 0.0000000 + 37.9200000 0.0000000 + 37.9800000 0.0000000 + 38.0400000 0.0000000 + 38.1000000 0.0000000 + 38.1600000 0.0000000 + 38.2200000 0.0000000 + 38.2800000 0.0000000 + 38.3400000 0.0000000 + 38.4000000 0.0000000 + 38.4600000 0.0000000 + 38.5200000 0.0000000 + 38.5800000 0.0000000 + 38.6400000 0.0000000 + 38.7000000 0.0000000 + 38.7600000 0.0000000 + 38.8200000 0.0000000 + 38.8800000 0.0000000 + 38.9400000 0.0000000 + 39.0000000 0.0000000 + 39.0600000 0.0000000 + 39.1200000 0.0000000 + 39.1800000 0.0000000 + 39.2400000 0.0000000 + 39.3000000 0.0000000 + 39.3600000 0.0000000 + 39.4200000 0.0000000 + 39.4800000 0.0000000 + 39.5400000 0.0000000 + 39.6000000 0.0000000 + 39.6600000 0.0000000 + 39.7200000 0.0000000 + 39.7800000 0.0000000 + 39.8400000 0.0000000 + 39.9000000 0.0000000 + 39.9600000 0.0000000 + 40.0200000 0.0000000 + 40.0800000 0.0000000 + 40.1400000 0.0000000 + 40.2000000 0.0000000 + 40.2600000 0.0000000 + 40.3200000 0.0000000 + 40.3800000 0.0000000 + 40.4400000 0.0000000 + 40.5000000 0.0000000 + 40.5600000 0.0000000 + 40.6200000 0.0000000 + 40.6800000 0.0000000 + 40.7400000 0.0000000 + 40.8000000 0.0000000 + 40.8600000 0.0000000 + 40.9200000 0.0000000 + 40.9800000 0.0000000 + 41.0400000 0.0000000 + 41.1000000 0.0000000 + 41.1600000 0.0000000 + 41.2200000 0.0000000 + 41.2800000 0.0000000 + 41.3400000 0.0000000 + 41.4000000 0.0000000 + 41.4600000 0.0000000 + 41.5200000 0.0000000 + 41.5800000 0.0000000 + 41.6400000 0.0000000 + 41.7000000 0.0000000 + 41.7600000 0.0000000 + 41.8200000 0.0000000 + 41.8800000 0.0000000 + 41.9400000 0.0000000 + 42.0000000 0.0000000 + 42.0600000 0.0000000 + 42.1200000 0.0000000 + 42.1800000 0.0000000 + 42.2400000 0.0000000 + 42.3000000 0.0000000 + 42.3600000 0.0000000 + 42.4200000 0.0000000 + 42.4800000 0.0000000 + 42.5400000 0.0000000 + 42.6000000 0.0000000 + 42.6600000 0.0000000 + 42.7200000 0.0000000 + 42.7800000 0.0000000 + 42.8400000 0.0000000 + 42.9000000 0.0000000 + 42.9600000 0.0000000 + 43.0200000 0.0000000 + 43.0800000 0.0000000 + 43.1400000 0.0000000 + 43.2000000 0.0000000 + 43.2600000 0.0000000 + 43.3200000 0.0000000 + 43.3800000 0.0000000 + 43.4400000 0.0000000 + 43.5000000 0.0000000 + 43.5600000 0.0000000 + 43.6200000 0.0000000 + 43.6800000 0.0000000 + 43.7400000 0.0000000 + 43.8000000 0.0000000 + 43.8600000 0.0000000 + 43.9200000 0.0000000 + 43.9800000 0.0000000 + 44.0400000 0.0000000 + 44.1000000 0.0000000 + 44.1600000 0.0000000 + 44.2200000 0.0000000 + 44.2800000 0.0000000 + 44.3400000 0.0000000 + 44.4000000 0.0000000 + 44.4600000 0.0000000 + 44.5200000 0.0000000 + 44.5800000 0.0000000 + 44.6400000 0.0000000 + 44.7000000 0.0000000 + 44.7600000 0.0000000 + 44.8200000 0.0000000 + 44.8800000 0.0000000 + 44.9400000 0.0000000 + 45.0000000 0.0000000 + 45.0600000 0.0000000 + 45.1200000 0.0000000 + 45.1800000 0.0000000 + 45.2400000 0.0000000 + 45.3000000 0.0000000 + 45.3600000 0.0000000 + 45.4200000 0.0000000 + 45.4800000 0.0000000 + 45.5400000 -0.0000000 + 45.6000000 -0.0000000 + 45.6600000 -0.0000000 + 45.7200000 -0.0000000 + 45.7800000 -0.0000000 + 45.8400000 -0.0000000 + 45.9000000 -0.0000000 + 45.9600000 -0.0000000 + 46.0200000 -0.0000000 + 46.0800000 -0.0000000 + 46.1400000 -0.0000000 + 46.2000000 0.0000000 + 46.2600000 0.0000000 + 46.3200000 0.0000000 + 46.3800000 0.0000000 + 46.4400000 -0.0000000 + 46.5000000 -0.0000000 + 46.5600000 -0.0000000 + 46.6200000 -0.0000000 + 46.6800000 -0.0000000 + 46.7400000 -0.0000000 + 46.8000000 -0.0000000 + 46.8600000 -0.0000000 + 46.9200000 -0.0000000 + 46.9800000 -0.0000000 + 47.0400000 -0.0000000 + 47.1000000 -0.0000000 + 47.1600000 -0.0000000 + 47.2200000 -0.0000000 + 47.2800000 -0.0000000 + 47.3400000 -0.0000000 + 47.4000000 -0.0000000 + 47.4600000 -0.0000000 + 47.5200000 0.0000000 + 47.5800000 0.0000000 + 47.6400000 0.0000000 + 47.7000000 0.0000000 + 47.7600000 0.0000000 + 47.8200000 0.0000000 + 47.8800000 0.0000000 + 47.9400000 0.0000000 + 48.0000000 -0.0000000 + 48.0600000 -0.0000000 + 48.1200000 -0.0000000 + 48.1800000 -0.0000000 + 48.2400000 -0.0000000 + 48.3000000 -0.0000000 + 48.3600000 -0.0000000 + 48.4200000 -0.0000000 + 48.4800000 -0.0000000 + 48.5400000 -0.0000000 + 48.6000000 -0.0000000 + 48.6600000 -0.0000000 + 48.7200000 0.0000000 + 48.7800000 0.0000000 + 48.8400000 0.0000000 + 48.9000000 0.0000000 + 48.9600000 0.0000000 + 49.0200000 0.0000000 + 49.0800000 0.0000000 + 49.1400000 0.0000000 + 49.2000000 0.0000000 + 49.2600000 -0.0000000 + 49.3200000 -0.0000000 + 49.3800000 -0.0000000 + 49.4400000 -0.0000000 + 49.5000000 -0.0000000 + 49.5600000 -0.0000000 + 49.6200000 -0.0000000 + 49.6800000 -0.0000000 + 49.7400000 -0.0000000 + 49.8000000 -0.0000000 + 49.8600000 -0.0000000 + 49.9200000 0.0000000 + 49.9800000 0.0000000 + 50.0400000 0.0000000 + 50.1000000 0.0000000 + 50.1600000 0.0000000 + 50.2200000 0.0000000 + 50.2800000 0.0000000 + 50.3400000 0.0000000 + 50.4000000 0.0000000 + 50.4600000 0.0000000 + 50.5200000 0.0000000 + 50.5800000 -0.0000000 + 50.6400000 -0.0000000 + 50.7000000 -0.0000000 + 50.7600000 -0.0000000 + 50.8200000 -0.0000000 + 50.8800000 -0.0000000 + 50.9400000 -0.0000000 + 51.0000000 -0.0000000 + 51.0600000 -0.0000000 + 51.1200000 -0.0000000 + 51.1800000 0.0000000 + 51.2400000 0.0000000 + 51.3000000 0.0000000 + 51.3600000 0.0000000 + 51.4200000 0.0000000 + 51.4800000 0.0000000 + 51.5400000 0.0000000 + 51.6000000 0.0000000 + 51.6600000 0.0000000 + 51.7200000 0.0000000 + 51.7800000 0.0000000 + 51.8400000 0.0000000 + 51.9000000 0.0000000 + 51.9600000 0.0000000 + 52.0200000 -0.0000000 + 52.0800000 -0.0000000 + 52.1400000 -0.0000000 + 52.2000000 -0.0000000 + 52.2600000 -0.0000000 + 52.3200000 -0.0000000 + 52.3800000 -0.0000000 + 52.4400000 -0.0000000 + 52.5000000 -0.0000000 + 52.5600000 -0.0000000 + 52.6200000 -0.0000000 + 52.6800000 -0.0000000 + 52.7400000 -0.0000000 + 52.8000000 -0.0000000 + 52.8600000 -0.0000000 + 52.9200000 -0.0000000 + 52.9800000 -0.0000000 + 53.0400000 0.0000000 + 53.1000000 0.0000000 + 53.1600000 0.0000000 + 53.2200000 0.0000000 + 53.2800000 0.0000000 + 53.3400000 0.0000000 + 53.4000000 0.0000000 + 53.4600000 0.0000000 + 53.5200000 0.0000000 + 53.5800000 0.0000000 + 53.6400000 0.0000000 + 53.7000000 0.0000000 + 53.7600000 0.0000000 + 53.8200000 0.0000000 + 53.8800000 0.0000000 + 53.9400000 -0.0000000 + 54.0000000 -0.0000000 + 54.0600000 -0.0000000 + 54.1200000 -0.0000000 + 54.1800000 -0.0000000 + 54.2400000 -0.0000000 + 54.3000000 -0.0000000 + 54.3600000 -0.0000000 + 54.4200000 -0.0000000 + 54.4800000 -0.0000000 + 54.5400000 -0.0000000 + 54.6000000 -0.0000000 + 54.6600000 -0.0000000 + 54.7200000 -0.0000000 + 54.7800000 -0.0000000 + 54.8400000 0.0000000 + 54.9000000 0.0000000 + 54.9600000 0.0000000 + 55.0200000 0.0000000 + 55.0800000 0.0000000 + 55.1400000 0.0000000 + 55.2000000 0.0000000 + 55.2600000 0.0000000 + 55.3200000 0.0000000 + 55.3800000 0.0000000 + 55.4400000 0.0000000 + 55.5000000 0.0000000 + 55.5600000 0.0000000 + 55.6200000 0.0000000 + 55.6800000 0.0000000 + 55.7400000 -0.0000000 + 55.8000000 -0.0000000 + 55.8600000 -0.0000000 + 55.9200000 -0.0000000 + 55.9800000 -0.0000000 + 56.0400000 -0.0000000 + 56.1000000 -0.0000000 + 56.1600000 -0.0000000 + 56.2200000 -0.0000000 + 56.2800000 -0.0000000 + 56.3400000 -0.0000000 + 56.4000000 -0.0000000 + 56.4600000 -0.0000000 + 56.5200000 -0.0000000 + 56.5800000 -0.0000000 + 56.6400000 -0.0000000 + 56.7000000 0.0000000 + 56.7600000 0.0000000 + 56.8200000 0.0000000 + 56.8800000 0.0000000 + 56.9400000 0.0000000 + 57.0000000 0.0000000 + 57.0600000 0.0000000 + 57.1200000 0.0000000 + 57.1800000 0.0000000 + 57.2400000 0.0000000 + 57.3000000 0.0000000 + 57.3600000 0.0000000 + 57.4200000 0.0000000 + 57.4800000 0.0000000 + 57.5400000 0.0000000 + 57.6000000 0.0000000 + 57.6600000 -0.0000000 + 57.7200000 -0.0000000 + 57.7800000 -0.0000000 + 57.8400000 -0.0000000 + 57.9000000 -0.0000000 + 57.9600000 -0.0000000 + 58.0200000 -0.0000000 + 58.0800000 -0.0000000 + 58.1400000 -0.0000000 + 58.2000000 -0.0000000 + 58.2600000 -0.0000000 + 58.3200000 -0.0000000 + 58.3800000 -0.0000000 + 58.4400000 -0.0000000 + 58.5000000 -0.0000000 + 58.5600000 0.0000000 + 58.6200000 0.0000000 + 58.6800000 0.0000000 + 58.7400000 0.0000000 + 58.8000000 0.0000000 + 58.8600000 0.0000000 + 58.9200000 0.0000000 + 58.9800000 0.0000000 + 59.0400000 0.0000000 + 59.1000000 0.0000000 + 59.1600000 0.0000000 + 59.2200000 0.0000000 + 59.2800000 0.0000000 + 59.3400000 0.0000000 + 59.4000000 0.0000000 + 59.4600000 0.0000000 + 59.5200000 -0.0000000 + 59.5800000 -0.0000000 + 59.6400000 -0.0000000 + 59.7000000 -0.0000000 + 59.7600000 -0.0000000 + 59.8200000 -0.0000000 + 59.8800000 -0.0000000 + 59.9400000 -0.0000000 + 60.0000000 -0.0000000 + 60.0600000 -0.0000000 + 60.1200000 -0.0000000 + 60.1800000 -0.0000000 + 60.2400000 -0.0000000 + 60.3000000 -0.0000000 + 60.3600000 -0.0000000 + 60.4200000 -0.0000000 + 60.4800000 -0.0000000 + 60.5400000 0.0000000 + 60.6000000 0.0000000 + 60.6600000 0.0000000 + 60.7200000 0.0000000 + 60.7800000 0.0000000 + 60.8400000 0.0000000 + 60.9000000 0.0000000 + 60.9600000 0.0000000 + 61.0200000 0.0000000 + 61.0800000 0.0000000 + 61.1400000 0.0000000 + 61.2000000 0.0000000 + 61.2600000 0.0000000 + 61.3200000 0.0000000 + 61.3800000 0.0000000 + 61.4400000 0.0000000 + 61.5000000 -0.0000000 + 61.5600000 -0.0000000 + 61.6200000 -0.0000000 + 61.6800000 -0.0000000 + 61.7400000 -0.0000000 + 61.8000000 -0.0000000 + 61.8600000 -0.0000000 + 61.9200000 -0.0000000 + 61.9800000 -0.0000000 + 62.0400000 -0.0000000 + 62.1000000 -0.0000000 + 62.1600000 -0.0000000 + 62.2200000 -0.0000000 + 62.2800000 -0.0000000 + 62.3400000 -0.0000000 + 62.4000000 -0.0000000 + 62.4600000 0.0000000 + 62.5200000 0.0000000 + 62.5800000 0.0000000 + 62.6400000 0.0000000 + 62.7000000 0.0000000 + 62.7600000 0.0000000 + 62.8200000 0.0000000 + 62.8800000 0.0000000 + 62.9400000 0.0000000 + 63.0000000 0.0000000 + 63.0600000 0.0000000 + 63.1200000 0.0000000 + 63.1800000 0.0000000 + 63.2400000 0.0000000 + 63.3000000 0.0000000 + 63.3600000 0.0000000 + 63.4200000 0.0000000 + 63.4800000 -0.0000000 + 63.5400000 -0.0000000 + 63.6000000 -0.0000000 + 63.6600000 -0.0000000 + 63.7200000 -0.0000000 + 63.7800000 -0.0000000 + 63.8400000 -0.0000000 + 63.9000000 -0.0000000 + 63.9600000 -0.0000000 + 64.0200000 -0.0000000 + 64.0800000 -0.0000000 + 64.1400000 -0.0000000 + 64.2000000 -0.0000000 + 64.2600000 -0.0000000 + 64.3200000 -0.0000000 + 64.3800000 -0.0000000 + 64.4400000 -0.0000000 + 64.5000000 0.0000000 + 64.5600000 0.0000000 + 64.6200000 0.0000000 + 64.6800000 0.0000000 + 64.7400000 0.0000000 + 64.8000000 0.0000000 + 64.8600000 0.0000000 + 64.9200000 0.0000000 + 64.9800000 0.0000000 + 65.0400000 0.0000000 + 65.1000000 0.0000000 + 65.1600000 0.0000000 + 65.2200000 0.0000000 + 65.2800000 0.0000000 + 65.3400000 0.0000000 + 65.4000000 0.0000000 + 65.4600000 0.0000000 + 65.5200000 -0.0000000 + 65.5800000 -0.0000000 + 65.6400000 -0.0000000 + 65.7000000 -0.0000000 + 65.7600000 -0.0000000 + 65.8200000 -0.0000000 + 65.8800000 -0.0000000 + 65.9400000 -0.0000000 + 66.0000000 -0.0000000 + 66.0600000 -0.0000000 + 66.1200000 -0.0000000 + 66.1800000 -0.0000000 + 66.2400000 -0.0000000 + 66.3000000 -0.0000000 + 66.3600000 -0.0000000 + 66.4200000 -0.0000000 + 66.4800000 -0.0000000 + 66.5400000 -0.0000000 + 66.6000000 0.0000000 + 66.6600000 0.0000000 + 66.7200000 0.0000000 + 66.7800000 0.0000000 + 66.8400000 0.0000000 + 66.9000000 0.0000000 + 66.9600000 0.0000000 + 67.0200000 0.0000000 + 67.0800000 0.0000000 + 67.1400000 0.0000000 + 67.2000000 0.0000000 + 67.2600000 0.0000000 + 67.3200000 0.0000000 + 67.3800000 0.0000000 + 67.4400000 0.0000000 + 67.5000000 0.0000000 + 67.5600000 0.0000000 + 67.6200000 0.0000000 + 67.6800000 -0.0000000 + 67.7400000 -0.0000000 + 67.8000000 -0.0000000 + 67.8600000 -0.0000000 + 67.9200000 -0.0000000 + 67.9800000 -0.0000000 + 68.0400000 -0.0000000 + 68.1000000 -0.0000000 + 68.1600000 -0.0000000 + 68.2200000 -0.0000000 + 68.2800000 -0.0000000 + 68.3400000 -0.0000000 + 68.4000000 -0.0000000 + 68.4600000 -0.0000000 + 68.5200000 -0.0000000 + 68.5800000 -0.0000000 + 68.6400000 -0.0000000 + 68.7000000 -0.0000000 + 68.7600000 0.0000000 + 68.8200000 0.0000000 + 68.8800000 0.0000000 + 68.9400000 0.0000000 + 69.0000000 0.0000000 + 69.0600000 0.0000000 + 69.1200000 0.0000000 + 69.1800000 0.0000000 + 69.2400000 0.0000000 + 69.3000000 0.0000000 + 69.3600000 0.0000000 + 69.4200000 0.0000000 + 69.4800000 0.0000000 + 69.5400000 0.0000000 + 69.6000000 0.0000000 + 69.6600000 0.0000000 + 69.7200000 0.0000000 + 69.7800000 0.0000000 + 69.8400000 0.0000000 + 69.9000000 -0.0000000 + 69.9600000 -0.0000000 + 70.0200000 -0.0000000 + 70.0800000 -0.0000000 + 70.1400000 -0.0000000 + 70.2000000 -0.0000000 + 70.2600000 -0.0000000 + 70.3200000 -0.0000000 + 70.3800000 -0.0000000 + 70.4400000 -0.0000000 + 70.5000000 -0.0000000 + 70.5600000 -0.0000000 + 70.6200000 -0.0000000 + 70.6800000 -0.0000000 + 70.7400000 -0.0000000 + 70.8000000 -0.0000000 + 70.8600000 -0.0000000 + 70.9200000 -0.0000000 + 70.9800000 -0.0000000 + 71.0400000 0.0000000 + 71.1000000 0.0000000 + 71.1600000 0.0000000 + 71.2200000 0.0000000 + 71.2800000 0.0000000 + 71.3400000 0.0000000 + 71.4000000 0.0000000 + 71.4600000 0.0000000 + 71.5200000 0.0000000 + 71.5800000 0.0000000 + 71.6400000 0.0000000 + 71.7000000 0.0000000 + 71.7600000 0.0000000 + 71.8200000 0.0000000 + 71.8800000 0.0000000 + 71.9400000 0.0000000 + 72.0000000 0.0000000 + 72.0600000 0.0000000 + 72.1200000 0.0000000 + 72.1800000 0.0000000 + 72.2400000 -0.0000000 + 72.3000000 -0.0000000 + 72.3600000 -0.0000000 + 72.4200000 -0.0000000 + 72.4800000 -0.0000000 + 72.5400000 -0.0000000 + 72.6000000 -0.0000000 + 72.6600000 -0.0000000 + 72.7200000 -0.0000000 + 72.7800000 -0.0000000 + 72.8400000 -0.0000000 + 72.9000000 -0.0000000 + 72.9600000 -0.0000000 + 73.0200000 -0.0000000 + 73.0800000 -0.0000000 + 73.1400000 -0.0000000 + 73.2000000 -0.0000000 + 73.2600000 -0.0000000 + 73.3200000 -0.0000000 + 73.3800000 0.0000000 + 73.4400000 0.0000000 + 73.5000000 0.0000000 + 73.5600000 0.0000000 + 73.6200000 0.0000000 + 73.6800000 0.0000000 + 73.7400000 0.0000000 + 73.8000000 0.0000000 + 73.8600000 0.0000000 + 73.9200000 0.0000000 + 73.9800000 0.0000000 + 74.0400000 0.0000000 + 74.1000000 0.0000000 + 74.1600000 0.0000000 + 74.2200000 0.0000000 + 74.2800000 0.0000000 + 74.3400000 0.0000000 + 74.4000000 0.0000000 + 74.4600000 0.0000000 + 74.5200000 0.0000000 + 74.5800000 -0.0000000 + 74.6400000 -0.0000000 + 74.7000000 -0.0000000 + 74.7600000 -0.0000000 + 74.8200000 -0.0000000 + 74.8800000 -0.0000000 + 74.9400000 -0.0000000 + 75.0000000 -0.0000000 + 75.0600000 -0.0000000 + 75.1200000 -0.0000000 + 75.1800000 -0.0000000 + 75.2400000 -0.0000000 + 75.3000000 -0.0000000 + 75.3600000 -0.0000000 + 75.4200000 -0.0000000 + 75.4800000 -0.0000000 + 75.5400000 -0.0000000 + 75.6000000 -0.0000000 + 75.6600000 -0.0000000 + 75.7200000 0.0000000 + 75.7800000 0.0000000 + 75.8400000 0.0000000 + 75.9000000 0.0000000 + 75.9600000 0.0000000 + 76.0200000 0.0000000 + 76.0800000 0.0000000 + 76.1400000 0.0000000 + 76.2000000 0.0000000 + 76.2600000 0.0000000 + 76.3200000 0.0000000 + 76.3800000 0.0000000 + 76.4400000 0.0000000 + 76.5000000 0.0000000 + 76.5600000 0.0000000 + 76.6200000 0.0000000 + 76.6800000 0.0000000 + 76.7400000 0.0000000 + 76.8000000 0.0000000 + 76.8600000 -0.0000000 + 76.9200000 -0.0000000 + 76.9800000 -0.0000000 + 77.0400000 -0.0000000 + 77.1000000 -0.0000000 + 77.1600000 -0.0000000 + 77.2200000 -0.0000000 + 77.2800000 -0.0000000 + 77.3400000 -0.0000000 + 77.4000000 -0.0000000 + 77.4600000 -0.0000000 + 77.5200000 -0.0000000 + 77.5800000 -0.0000000 + 77.6400000 -0.0000000 + 77.7000000 -0.0000000 + 77.7600000 -0.0000000 + 77.8200000 -0.0000000 + 77.8800000 -0.0000000 + 77.9400000 -0.0000000 + 78.0000000 -0.0000000 + 78.0600000 -0.0000000 + 78.1200000 0.0000000 + 78.1800000 0.0000000 + 78.2400000 0.0000000 + 78.3000000 0.0000000 + 78.3600000 0.0000000 + 78.4200000 0.0000000 + 78.4800000 0.0000000 + 78.5400000 0.0000000 + 78.6000000 0.0000000 + 78.6600000 0.0000000 + 78.7200000 0.0000000 + 78.7800000 0.0000000 + 78.8400000 0.0000000 + 78.9000000 0.0000000 + 78.9600000 0.0000000 + 79.0200000 0.0000000 + 79.0800000 -0.0000000 + 79.1400000 -0.0000000 + 79.2000000 -0.0000000 + 79.2600000 -0.0000000 + 79.3200000 -0.0000000 + 79.3800000 -0.0000000 + 79.4400000 -0.0000000 + 79.5000000 -0.0000000 + 79.5600000 -0.0000000 + 79.6200000 -0.0000000 + 79.6800000 -0.0000000 + 79.7400000 -0.0000000 + 79.8000000 -0.0000000 + 79.8600000 -0.0000000 + 79.9200000 -0.0000000 + 79.9800000 -0.0000000 + 80.0400000 -0.0000000 + 80.1000000 -0.0000000 + 80.1600000 -0.0000000 + 80.2200000 -0.0000000 + 80.2800000 -0.0000000 + 80.3400000 -0.0000000 + 80.4000000 -0.0000000 + 80.4600000 -0.0000000 + 80.5200000 -0.0000000 + 80.5800000 0.0000000 + 80.6400000 0.0000000 + 80.7000000 0.0000000 + 80.7600000 0.0000000 + 80.8200000 0.0000000 + 80.8800000 0.0000000 + 80.9400000 0.0000000 + 81.0000000 0.0000000 + 81.0600000 0.0000000 + 81.1200000 0.0000000 + 81.1800000 0.0000000 + 81.2400000 0.0000000 + 81.3000000 0.0000000 + 81.3600000 0.0000000 + 81.4200000 0.0000000 + 81.4800000 0.0000000 + 81.5400000 0.0000000 + 81.6000000 0.0000000 + 81.6600000 0.0000000 + 81.7200000 0.0000000 + 81.7800000 0.0000000 + 81.8400000 0.0000000 + 81.9000000 0.0000000 + 81.9600000 0.0000000 + 82.0200000 0.0000000 + 82.0800000 0.0000000 + 82.1400000 0.0000000 + 82.2000000 0.0000000 + 82.2600000 0.0000000 + 82.3200000 0.0000000 + 82.3800000 0.0000000 + 82.4400000 0.0000000 + 82.5000000 0.0000000 + 82.5600000 0.0000000 + 82.6200000 0.0000000 + 82.6800000 0.0000000 + 82.7400000 0.0000000 + 82.8000000 0.0000000 + 82.8600000 0.0000000 + 82.9200000 0.0000000 + 82.9800000 0.0000000 + 83.0400000 0.0000000 + 83.1000000 0.0000000 + 83.1600000 0.0000000 + 83.2200000 0.0000000 + 83.2800000 0.0000000 + 83.3400000 0.0000000 + 83.4000000 0.0000000 + 83.4600000 0.0000000 + 83.5200000 0.0000000 + 83.5800000 0.0000000 + 83.6400000 0.0000000 + 83.7000000 0.0000000 + 83.7600000 0.0000000 + 83.8200000 0.0000000 + 83.8800000 0.0000000 + 83.9400000 0.0000000 + 84.0000000 0.0000000 + 84.0600000 0.0000000 + 84.1200000 0.0000000 + 84.1800000 0.0000000 + 84.2400000 0.0000000 + 84.3000000 0.0000000 + 84.3600000 0.0000000 + 84.4200000 0.0000000 + 84.4800000 0.0000000 + 84.5400000 0.0000000 + 84.6000000 0.0000000 + 84.6600000 0.0000000 + 84.7200000 0.0000000 + 84.7800000 0.0000000 + 84.8400000 0.0000000 + 84.9000000 0.0000000 + 84.9600000 0.0000000 + 85.0200000 0.0000000 + 85.0800000 0.0000000 + 85.1400000 0.0000000 + 85.2000000 0.0000000 + 85.2600000 0.0000000 + 85.3200000 0.0000000 + 85.3800000 0.0000000 + 85.4400000 0.0000000 + 85.5000000 0.0000000 + 85.5600000 0.0000000 + 85.6200000 0.0000000 + 85.6800000 0.0000000 + 85.7400000 0.0000000 + 85.8000000 0.0000000 + 85.8600000 0.0000000 + 85.9200000 0.0000000 + 85.9800000 0.0000000 + 86.0400000 0.0000000 + 86.1000000 -0.0000000 + 86.1600000 -0.0000000 + 86.2200000 -0.0000000 + 86.2800000 -0.0000000 + 86.3400000 -0.0000000 + 86.4000000 -0.0000000 + 86.4600000 -0.0000000 + 86.5200000 -0.0000000 + 86.5800000 -0.0000000 + 86.6400000 -0.0000000 + 86.7000000 -0.0000000 + 86.7600000 -0.0000000 + 86.8200000 -0.0000000 + 86.8800000 -0.0000000 + 86.9400000 -0.0000000 + 87.0000000 -0.0000000 + 87.0600000 -0.0000000 + 87.1200000 -0.0000000 + 87.1800000 -0.0000000 + 87.2400000 -0.0000000 + 87.3000000 -0.0000000 + 87.3600000 -0.0000000 + 87.4200000 -0.0000000 + 87.4800000 -0.0000000 + 87.5400000 -0.0000000 + 87.6000000 -0.0000000 + 87.6600000 -0.0000000 + 87.7200000 -0.0000000 + 87.7800000 -0.0000000 + 87.8400000 -0.0000000 + 87.9000000 -0.0000000 + 87.9600000 -0.0000000 + 88.0200000 -0.0000000 + 88.0800000 -0.0000000 + 88.1400000 -0.0000000 + 88.2000000 -0.0000000 + 88.2600000 -0.0000000 + 88.3200000 -0.0000000 + 88.3800000 -0.0000000 + 88.4400000 -0.0000000 + 88.5000000 -0.0000000 + 88.5600000 -0.0000000 + 88.6200000 -0.0000000 + 88.6800000 -0.0000000 + 88.7400000 -0.0000000 + 88.8000000 -0.0000000 + 88.8600000 -0.0000000 + 88.9200000 -0.0000000 + 88.9800000 -0.0000000 + 89.0400000 -0.0000000 + 89.1000000 -0.0000000 + 89.1600000 -0.0000000 + 89.2200000 -0.0000000 + 89.2800000 -0.0000000 + 89.3400000 -0.0000000 + 89.4000000 -0.0000000 + 89.4600000 -0.0000000 + 89.5200000 -0.0000000 + 89.5800000 -0.0000000 + 89.6400000 -0.0000000 + 89.7000000 -0.0000000 + 89.7600000 -0.0000000 + 89.8200000 -0.0000000 + 89.8800000 -0.0000000 + 89.9400000 -0.0000000 + 90.0000000 -0.0000000 + 90.0600000 -0.0000000 + 90.1200000 -0.0000000 + 90.1800000 -0.0000000 + 90.2400000 -0.0000000 + 90.3000000 -0.0000000 + 90.3600000 -0.0000000 + 90.4200000 -0.0000000 + 90.4800000 -0.0000000 + 90.5400000 -0.0000000 + 90.6000000 -0.0000000 + 90.6600000 -0.0000000 + 90.7200000 -0.0000000 + 90.7800000 -0.0000000 + 90.8400000 -0.0000000 + 90.9000000 -0.0000000 + 90.9600000 -0.0000000 + 91.0200000 -0.0000000 + 91.0800000 -0.0000000 + 91.1400000 -0.0000000 + 91.2000000 -0.0000000 + 91.2600000 -0.0000000 + 91.3200000 -0.0000000 + 91.3800000 -0.0000000 + 91.4400000 -0.0000000 + 91.5000000 -0.0000000 + 91.5600000 -0.0000000 + 91.6200000 -0.0000000 + 91.6800000 -0.0000000 + 91.7400000 -0.0000000 + 91.8000000 -0.0000000 + 91.8600000 -0.0000000 + 91.9200000 0.0000000 + 91.9800000 0.0000000 + 92.0400000 0.0000000 + 92.1000000 0.0000000 + 92.1600000 0.0000000 + 92.2200000 0.0000000 + 92.2800000 0.0000000 + 92.3400000 0.0000000 + 92.4000000 0.0000000 + 92.4600000 0.0000000 + 92.5200000 0.0000000 + 92.5800000 0.0000000 + 92.6400000 0.0000000 + 92.7000000 0.0000000 + 92.7600000 0.0000000 + 92.8200000 0.0000000 + 92.8800000 0.0000000 + 92.9400000 0.0000000 + 93.0000000 0.0000000 + 93.0600000 0.0000000 + 93.1200000 0.0000000 + 93.1800000 0.0000001 + 93.2400000 0.0000001 + 93.3000000 0.0000001 + 93.3600000 0.0000001 + 93.4200000 0.0000001 + 93.4800000 0.0000001 + 93.5400000 0.0000001 + 93.6000000 0.0000001 + 93.6600000 0.0000002 + 93.7200000 0.0000002 + 93.7800000 0.0000002 + 93.8400000 0.0000002 + 93.9000000 0.0000003 + 93.9600000 0.0000003 + 94.0200000 0.0000003 + 94.0800000 0.0000004 + 94.1400000 0.0000004 + 94.2000000 0.0000005 + 94.2600000 0.0000005 + 94.3200000 0.0000006 + 94.3800000 0.0000006 + 94.4400000 0.0000007 + 94.5000000 0.0000008 + 94.5600000 0.0000009 + 94.6200000 0.0000010 + 94.6800000 0.0000011 + 94.7400000 0.0000012 + 94.8000000 0.0000014 + 94.8600000 0.0000015 + 94.9200000 0.0000017 + 94.9800000 0.0000019 + 95.0400000 0.0000021 + 95.1000000 0.0000023 + 95.1600000 0.0000026 + 95.2200000 0.0000029 + 95.2800000 0.0000032 + 95.3400000 0.0000035 + 95.4000000 0.0000039 + 95.4600000 0.0000043 + 95.5200000 0.0000047 + 95.5800000 0.0000052 + 95.6400000 0.0000057 + 95.7000000 0.0000063 + 95.7600000 0.0000069 + 95.8200000 0.0000076 + 95.8800000 0.0000084 + 95.9400000 0.0000092 + 96.0000000 0.0000101 + 96.0600000 0.0000110 + 96.1200000 0.0000121 + 96.1800000 0.0000132 + 96.2400000 0.0000145 + 96.3000000 0.0000159 + 96.3600000 0.0000173 + 96.4200000 0.0000189 + 96.4800000 0.0000207 + 96.5400000 0.0000225 + 96.6000000 0.0000246 + 96.6600000 0.0000268 + 96.7200000 0.0000292 + 96.7800000 0.0000318 + 96.8400000 0.0000346 + 96.9000000 0.0000376 + 96.9600000 0.0000409 + 97.0200000 0.0000444 + 97.0800000 0.0000482 + 97.1400000 0.0000523 + 97.2000000 0.0000567 + 97.2600000 0.0000614 + 97.3200000 0.0000665 + 97.3800000 0.0000720 + 97.4400000 0.0000779 + 97.5000000 0.0000843 + 97.5600000 0.0000911 + 97.6200000 0.0000984 + 97.6800000 0.0001062 + 97.7400000 0.0001146 + 97.8000000 0.0001236 + 97.8600000 0.0001332 + 97.9200000 0.0001435 + 97.9800000 0.0001545 + 98.0400000 0.0001662 + 98.1000000 0.0001788 + 98.1600000 0.0001922 + 98.2200000 0.0002064 + 98.2800000 0.0002216 + 98.3400000 0.0002378 + 98.4000000 0.0002551 + 98.4600000 0.0002735 + 98.5200000 0.0002930 + 98.5800000 0.0003137 + 98.6400000 0.0003357 + 98.7000000 0.0003591 + 98.7600000 0.0003839 + 98.8200000 0.0004102 + 98.8800000 0.0004381 + 98.9400000 0.0004675 + 99.0000000 0.0004987 + 99.0600000 0.0005317 + 99.1200000 0.0005666 + 99.1800000 0.0006035 + 99.2400000 0.0006424 + 99.3000000 0.0006834 + 99.3600000 0.0007266 + 99.4200000 0.0007722 + 99.4800000 0.0008202 + 99.5400000 0.0008707 + 99.6000000 0.0009238 + 99.6600000 0.0009796 + 99.7200000 0.0010382 + 99.7800000 0.0010997 + 99.8400000 0.0011643 + 99.9000000 0.0012320 + 99.9600000 0.0013029 + 100.0200000 0.0013771 + 100.0800000 0.0014547 + 100.1400000 0.0015360 + 100.2000000 0.0016208 + 100.2600000 0.0017094 + 100.3200000 0.0018019 + 100.3800000 0.0018984 + 100.4400000 0.0019989 + 100.5000000 0.0021036 + 100.5600000 0.0022126 + 100.6200000 0.0023260 + 100.6800000 0.0024438 + 100.7400000 0.0025662 + 100.8000000 0.0026933 + 100.8600000 0.0028251 + 100.9200000 0.0029617 + 100.9800000 0.0031032 + 101.0400000 0.0032497 + 101.1000000 0.0034013 + 101.1600000 0.0035580 + 101.2200000 0.0037198 + 101.2800000 0.0038869 + 101.3400000 0.0040592 + 101.4000000 0.0042368 + 101.4600000 0.0044198 + 101.5200000 0.0046081 + 101.5800000 0.0048018 + 101.6400000 0.0050008 + 101.7000000 0.0052052 + 101.7600000 0.0054150 + 101.8200000 0.0056300 + 101.8800000 0.0058504 + 101.9400000 0.0060759 + 102.0000000 0.0063067 + 102.0600000 0.0065425 + 102.1200000 0.0067833 + 102.1800000 0.0070291 + 102.2400000 0.0072797 + 102.3000000 0.0075349 + 102.3600000 0.0077948 + 102.4200000 0.0080590 + 102.4800000 0.0083274 + 102.5400000 0.0085999 + 102.6000000 0.0088763 + 102.6600000 0.0091563 + 102.7200000 0.0094398 + 102.7800000 0.0097265 + 102.8400000 0.0100161 + 102.9000000 0.0103085 + 102.9600000 0.0106032 + 103.0200000 0.0109001 + 103.0800000 0.0111988 + 103.1400000 0.0114990 + 103.2000000 0.0118004 + 103.2600000 0.0121026 + 103.3200000 0.0124052 + 103.3800000 0.0127080 + 103.4400000 0.0130105 + 103.5000000 0.0133123 + 103.5600000 0.0136130 + 103.6200000 0.0139122 + 103.6800000 0.0142094 + 103.7400000 0.0145044 + 103.8000000 0.0147965 + 103.8600000 0.0150854 + 103.9200000 0.0153705 + 103.9800000 0.0156516 + 104.0400000 0.0159279 + 104.1000000 0.0161992 + 104.1600000 0.0164649 + 104.2200000 0.0167246 + 104.2800000 0.0169777 + 104.3400000 0.0172239 + 104.4000000 0.0174625 + 104.4600000 0.0176932 + 104.5200000 0.0179156 + 104.5800000 0.0181290 + 104.6400000 0.0183331 + 104.7000000 0.0185274 + 104.7600000 0.0187115 + 104.8200000 0.0188849 + 104.8800000 0.0190472 + 104.9400000 0.0191981 + 105.0000000 0.0193370 + 105.0600000 0.0194636 + 105.1200000 0.0195776 + 105.1800000 0.0196786 + 105.2400000 0.0197663 + 105.3000000 0.0198403 + 105.3600000 0.0199003 + 105.4200000 0.0199461 + 105.4800000 0.0199774 + 105.5400000 0.0199939 + 105.6000000 0.0199955 + 105.6600000 0.0199820 + 105.7200000 0.0199532 + 105.7800000 0.0199089 + 105.8400000 0.0198490 + 105.9000000 0.0197735 + 105.9600000 0.0196823 + 106.0200000 0.0195753 + 106.0800000 0.0194526 + 106.1400000 0.0193142 + 106.2000000 0.0191600 + 106.2600000 0.0189903 + 106.3200000 0.0188050 + 106.3800000 0.0186044 + 106.4400000 0.0183886 + 106.5000000 0.0181577 + 106.5600000 0.0179120 + 106.6200000 0.0176517 + 106.6800000 0.0173772 + 106.7400000 0.0170886 + 106.8000000 0.0167863 + 106.8600000 0.0164707 + 106.9200000 0.0161421 + 106.9800000 0.0158010 + 107.0400000 0.0154477 + 107.1000000 0.0150826 + 107.1600000 0.0147063 + 107.2200000 0.0143191 + 107.2800000 0.0139217 + 107.3400000 0.0135145 + 107.4000000 0.0130981 + 107.4600000 0.0126729 + 107.5200000 0.0122396 + 107.5800000 0.0117987 + 107.6400000 0.0113509 + 107.7000000 0.0108966 + 107.7600000 0.0104365 + 107.8200000 0.0099712 + 107.8800000 0.0095014 + 107.9400000 0.0090276 + 108.0000000 0.0085504 + 108.0600000 0.0080706 + 108.1200000 0.0075886 + 108.1800000 0.0071052 + 108.2400000 0.0066209 + 108.3000000 0.0061364 + 108.3600000 0.0056522 + 108.4200000 0.0051690 + 108.4800000 0.0046873 + 108.5400000 0.0042078 + 108.6000000 0.0037311 + 108.6600000 0.0032576 + 108.7200000 0.0027879 + 108.7800000 0.0023225 + 108.8400000 0.0018621 + 108.9000000 0.0014070 + 108.9600000 0.0009578 + 109.0200000 0.0005150 + 109.0800000 0.0000789 + 109.1400000 -0.0003499 + 109.2000000 -0.0007712 + 109.2600000 -0.0011844 + 109.3200000 -0.0015892 + 109.3800000 -0.0019852 + 109.4400000 -0.0023722 + 109.5000000 -0.0027498 + 109.5600000 -0.0031178 + 109.6200000 -0.0034759 + 109.6800000 -0.0038238 + 109.7400000 -0.0041613 + 109.8000000 -0.0044883 + 109.8600000 -0.0048046 + 109.9200000 -0.0051100 + 109.9800000 -0.0054044 + 110.0400000 -0.0056877 + 110.1000000 -0.0059599 + 110.1600000 -0.0062208 + 110.2200000 -0.0064704 + 110.2800000 -0.0067088 + 110.3400000 -0.0069359 + 110.4000000 -0.0071517 + 110.4600000 -0.0073563 + 110.5200000 -0.0075497 + 110.5800000 -0.0077321 + 110.6400000 -0.0079035 + 110.7000000 -0.0080640 + 110.7600000 -0.0082137 + 110.8200000 -0.0083529 + 110.8800000 -0.0084816 + 110.9400000 -0.0086000 + 111.0000000 -0.0087083 + 111.0600000 -0.0088067 + 111.1200000 -0.0088954 + 111.1800000 -0.0089747 + 111.2400000 -0.0090446 + 111.3000000 -0.0091056 + 111.3600000 -0.0091577 + 111.4200000 -0.0092013 + 111.4800000 -0.0092366 + 111.5400000 -0.0092638 + 111.6000000 -0.0092833 + 111.6600000 -0.0092952 + 111.7200000 -0.0092999 + 111.7800000 -0.0092977 + 111.8400000 -0.0092887 + 111.9000000 -0.0092733 + 111.9600000 -0.0092517 + 112.0200000 -0.0092243 + 112.0800000 -0.0091912 + 112.1400000 -0.0091528 + 112.2000000 -0.0091094 + 112.2600000 -0.0090611 + 112.3200000 -0.0090083 + 112.3800000 -0.0089512 + 112.4400000 -0.0088900 + 112.5000000 -0.0088251 + 112.5600000 -0.0087566 + 112.6200000 -0.0086849 + 112.6800000 -0.0086101 + 112.7400000 -0.0085325 + 112.8000000 -0.0084522 + 112.8600000 -0.0083696 + 112.9200000 -0.0082848 + 112.9800000 -0.0081981 + 113.0400000 -0.0081096 + 113.1000000 -0.0080195 + 113.1600000 -0.0079280 + 113.2200000 -0.0078354 + 113.2800000 -0.0077417 + 113.3400000 -0.0076471 + 113.4000000 -0.0075518 + 113.4600000 -0.0074560 + 113.5200000 -0.0073598 + 113.5800000 -0.0072632 + 113.6400000 -0.0071666 + 113.7000000 -0.0070699 + 113.7600000 -0.0069733 + 113.8200000 -0.0068769 + 113.8800000 -0.0067809 + 113.9400000 -0.0066852 + 114.0000000 -0.0065901 + 114.0600000 -0.0064955 + 114.1200000 -0.0064016 + 114.1800000 -0.0063085 + 114.2400000 -0.0062162 + 114.3000000 -0.0061248 + 114.3600000 -0.0060343 + 114.4200000 -0.0059448 + 114.4800000 -0.0058563 + 114.5400000 -0.0057689 + 114.6000000 -0.0056827 + 114.6600000 -0.0055976 + 114.7200000 -0.0055137 + 114.7800000 -0.0054311 + 114.8400000 -0.0053497 + 114.9000000 -0.0052695 + 114.9600000 -0.0051906 + 115.0200000 -0.0051131 + 115.0800000 -0.0050368 + 115.1400000 -0.0049618 + 115.2000000 -0.0048882 + 115.2600000 -0.0048159 + 115.3200000 -0.0047449 + 115.3800000 -0.0046752 + 115.4400000 -0.0046068 + 115.5000000 -0.0045398 + 115.5600000 -0.0044740 + 115.6200000 -0.0044096 + 115.6800000 -0.0043464 + 115.7400000 -0.0042844 + 115.8000000 -0.0042238 + 115.8600000 -0.0041643 + 115.9200000 -0.0041061 + 115.9800000 -0.0040491 + 116.0400000 -0.0039933 + 116.1000000 -0.0039386 + 116.1600000 -0.0038851 + 116.2200000 -0.0038328 + 116.2800000 -0.0037815 + 116.3400000 -0.0037313 + 116.4000000 -0.0036822 + 116.4600000 -0.0036342 + 116.5200000 -0.0035871 + 116.5800000 -0.0035411 + 116.6400000 -0.0034960 + 116.7000000 -0.0034520 + 116.7600000 -0.0034088 + 116.8200000 -0.0033666 + 116.8800000 -0.0033253 + 116.9400000 -0.0032848 + 117.0000000 -0.0032452 + 117.0600000 -0.0032065 + 117.1200000 -0.0031685 + 117.1800000 -0.0031314 + 117.2400000 -0.0030950 + 117.3000000 -0.0030594 + 117.3600000 -0.0030246 + 117.4200000 -0.0029904 + 117.4800000 -0.0029569 + 117.5400000 -0.0029242 + 117.6000000 -0.0028920 + 117.6600000 -0.0028606 + 117.7200000 -0.0028297 + 117.7800000 -0.0027995 + 117.8400000 -0.0027699 + 117.9000000 -0.0027409 + 117.9600000 -0.0027124 + 118.0200000 -0.0026844 + 118.0800000 -0.0026571 + 118.1400000 -0.0026302 + 118.2000000 -0.0026038 + 118.2600000 -0.0025780 + 118.3200000 -0.0025526 + 118.3800000 -0.0025277 + 118.4400000 -0.0025032 + 118.5000000 -0.0024792 + 118.5600000 -0.0024556 + 118.6200000 -0.0024324 + 118.6800000 -0.0024097 + 118.7400000 -0.0023873 + 118.8000000 -0.0023654 + 118.8600000 -0.0023438 + 118.9200000 -0.0023225 + 118.9800000 -0.0023017 + 119.0400000 -0.0022812 + 119.1000000 -0.0022610 + 119.1600000 -0.0022411 + 119.2200000 -0.0022216 + 119.2800000 -0.0022024 + 119.3400000 -0.0021835 + 119.4000000 -0.0021649 + 119.4600000 -0.0021466 + 119.5200000 -0.0021286 + 119.5800000 -0.0021109 + 119.6400000 -0.0020934 + 119.7000000 -0.0020762 + 119.7600000 -0.0020593 + 119.8200000 -0.0020426 + 119.8800000 -0.0020262 + 119.9400000 -0.0020100 + 120.0000000 -0.0019940 + 120.0600000 -0.0019783 + 120.1200000 -0.0019628 + 120.1800000 -0.0019475 + 120.2400000 -0.0019325 + 120.3000000 -0.0019176 + 120.3600000 -0.0019030 + 120.4200000 -0.0018886 + 120.4800000 -0.0018743 + 120.5400000 -0.0018603 + 120.6000000 -0.0018464 + 120.6600000 -0.0018328 + 120.7200000 -0.0018193 + 120.7800000 -0.0018060 + 120.8400000 -0.0017929 + 120.9000000 -0.0017799 + 120.9600000 -0.0017671 + 121.0200000 -0.0017545 + 121.0800000 -0.0017421 + 121.1400000 -0.0017298 + 121.2000000 -0.0017176 + 121.2600000 -0.0017057 + 121.3200000 -0.0016938 + 121.3800000 -0.0016822 + 121.4400000 -0.0016706 + 121.5000000 -0.0016592 + 121.5600000 -0.0016480 + 121.6200000 -0.0016369 + 121.6800000 -0.0016259 + 121.7400000 -0.0016150 + 121.8000000 -0.0016043 + 121.8600000 -0.0015937 + 121.9200000 -0.0015833 + 121.9800000 -0.0015729 + 122.0400000 -0.0015627 + 122.1000000 -0.0015526 + 122.1600000 -0.0015426 + 122.2200000 -0.0015327 + 122.2800000 -0.0015229 + 122.3400000 -0.0015133 + 122.4000000 -0.0015037 + 122.4600000 -0.0014943 + 122.5200000 -0.0014849 + 122.5800000 -0.0014757 + 122.6400000 -0.0014666 + 122.7000000 -0.0014575 + 122.7600000 -0.0014486 + 122.8200000 -0.0014397 + 122.8800000 -0.0014310 + 122.9400000 -0.0014223 + 123.0000000 -0.0014137 + 123.0600000 -0.0014052 + 123.1200000 -0.0013968 + 123.1800000 -0.0013885 + 123.2400000 -0.0013803 + 123.3000000 -0.0013721 + 123.3600000 -0.0013641 + 123.4200000 -0.0013561 + 123.4800000 -0.0013482 + 123.5400000 -0.0013403 + 123.6000000 -0.0013326 + 123.6600000 -0.0013249 + 123.7200000 -0.0013173 + 123.7800000 -0.0013098 + 123.8400000 -0.0013023 + 123.9000000 -0.0012949 + 123.9600000 -0.0012876 + 124.0200000 -0.0012804 + 124.0800000 -0.0012732 + 124.1400000 -0.0012661 + 124.2000000 -0.0012591 + 124.2600000 -0.0012522 + 124.3200000 -0.0012453 + 124.3800000 -0.0012385 + 124.4400000 -0.0012317 + 124.5000000 -0.0012250 + 124.5600000 -0.0012184 + 124.6200000 -0.0012118 + 124.6800000 -0.0012053 + 124.7400000 -0.0011989 + 124.8000000 -0.0011925 + 124.8600000 -0.0011862 + 124.9200000 -0.0011799 + 124.9800000 -0.0011737 + 125.0400000 -0.0011676 + 125.1000000 -0.0011615 + 125.1600000 -0.0011555 + 125.2200000 -0.0011495 + 125.2800000 -0.0011436 + 125.3400000 -0.0011378 + 125.4000000 -0.0011320 + 125.4600000 -0.0011262 + 125.5200000 -0.0011205 + 125.5800000 -0.0011149 + 125.6400000 -0.0011093 + 125.7000000 -0.0011038 + 125.7600000 -0.0010983 + 125.8200000 -0.0010928 + 125.8800000 -0.0010874 + 125.9400000 -0.0010821 + 126.0000000 -0.0010768 + 126.0600000 -0.0010715 + 126.1200000 -0.0010663 + 126.1800000 -0.0010612 + 126.2400000 -0.0010560 + 126.3000000 -0.0010509 + 126.3600000 -0.0010459 + 126.4200000 -0.0010409 + 126.4800000 -0.0010359 + 126.5400000 -0.0010310 + 126.6000000 -0.0010261 + 126.6600000 -0.0010213 + 126.7200000 -0.0010165 + 126.7800000 -0.0010117 + 126.8400000 -0.0010070 + 126.9000000 -0.0010023 + 126.9600000 -0.0009976 + 127.0200000 -0.0009930 + 127.0800000 -0.0009884 + 127.1400000 -0.0009839 + 127.2000000 -0.0009794 + 127.2600000 -0.0009749 + 127.3200000 -0.0009705 + 127.3800000 -0.0009661 + 127.4400000 -0.0009617 + 127.5000000 -0.0009574 + 127.5600000 -0.0009530 + 127.6200000 -0.0009488 + 127.6800000 -0.0009445 + 127.7400000 -0.0009403 + 127.8000000 -0.0009362 + 127.8600000 -0.0009320 + 127.9200000 -0.0009279 + 127.9800000 -0.0009239 + 128.0400000 -0.0009198 + 128.1000000 -0.0009158 + 128.1600000 -0.0009119 + 128.2200000 -0.0009079 + 128.2800000 -0.0009041 + 128.3400000 -0.0009002 + 128.4000000 -0.0008964 + 128.4600000 -0.0008926 + 128.5200000 -0.0008889 + 128.5800000 -0.0008851 + 128.6400000 -0.0008815 + 128.7000000 -0.0008778 + 128.7600000 -0.0008742 + 128.8200000 -0.0008707 + 128.8800000 -0.0008672 + 128.9400000 -0.0008637 + 129.0000000 -0.0008602 + 129.0600000 -0.0008568 + 129.1200000 -0.0008535 + 129.1800000 -0.0008501 + 129.2400000 -0.0008469 + 129.3000000 -0.0008436 + 129.3600000 -0.0008404 + 129.4200000 -0.0008373 + 129.4800000 -0.0008342 + 129.5400000 -0.0008311 + 129.6000000 -0.0008281 + 129.6600000 -0.0008252 + 129.7200000 -0.0008223 + 129.7800000 -0.0008194 + 129.8400000 -0.0008166 + 129.9000000 -0.0008139 + 129.9600000 -0.0008112 + 130.0200000 -0.0008085 + 130.0800000 -0.0008060 + 130.1400000 -0.0008035 + 130.2000000 -0.0008010 + 130.2600000 -0.0007986 + 130.3200000 -0.0007963 + 130.3800000 -0.0007940 + 130.4400000 -0.0007918 + 130.5000000 -0.0007897 + 130.5600000 -0.0007876 + 130.6200000 -0.0007857 + 130.6800000 -0.0007838 + 130.7400000 -0.0007819 + 130.8000000 -0.0007802 + 130.8600000 -0.0007785 + 130.9200000 -0.0007770 + 130.9800000 -0.0007755 + 131.0400000 -0.0007741 + 131.1000000 -0.0007728 + 131.1600000 -0.0007716 + 131.2200000 -0.0007705 + 131.2800000 -0.0007695 + 131.3400000 -0.0007686 + 131.4000000 -0.0007678 + 131.4600000 -0.0007671 + 131.5200000 -0.0007665 + 131.5800000 -0.0007661 + 131.6400000 -0.0007657 + 131.7000000 -0.0007655 + 131.7600000 -0.0007654 + 131.8200000 -0.0007654 + 131.8800000 -0.0007656 + 131.9400000 -0.0007659 + 132.0000000 -0.0007663 + 132.0600000 -0.0007669 + 132.1200000 -0.0007676 + 132.1800000 -0.0007685 + 132.2400000 -0.0007695 + 132.3000000 -0.0007706 + 132.3600000 -0.0007719 + 132.4200000 -0.0007733 + 132.4800000 -0.0007750 + 132.5400000 -0.0007767 + 132.6000000 -0.0007786 + 132.6600000 -0.0007807 + 132.7200000 -0.0007830 + 132.7800000 -0.0007854 + 132.8400000 -0.0007880 + 132.9000000 -0.0007907 + 132.9600000 -0.0007936 + 133.0200000 -0.0007967 + 133.0800000 -0.0008000 + 133.1400000 -0.0008034 + 133.2000000 -0.0008070 + 133.2600000 -0.0008108 + 133.3200000 -0.0008147 + 133.3800000 -0.0008188 + 133.4400000 -0.0008231 + 133.5000000 -0.0008275 + 133.5600000 -0.0008321 + 133.6200000 -0.0008369 + 133.6800000 -0.0008418 + 133.7400000 -0.0008469 + 133.8000000 -0.0008521 + 133.8600000 -0.0008574 + 133.9200000 -0.0008630 + 133.9800000 -0.0008686 + 134.0400000 -0.0008744 + 134.1000000 -0.0008803 + 134.1600000 -0.0008864 + 134.2200000 -0.0008925 + 134.2800000 -0.0008988 + 134.3400000 -0.0009051 + 134.4000000 -0.0009116 + 134.4600000 -0.0009181 + 134.5200000 -0.0009247 + 134.5800000 -0.0009314 + 134.6400000 -0.0009381 + 134.7000000 -0.0009449 + 134.7600000 -0.0009517 + 134.8200000 -0.0009586 + 134.8800000 -0.0009654 + 134.9400000 -0.0009722 + 135.0000000 -0.0009791 + 135.0600000 -0.0009859 + 135.1200000 -0.0009926 + 135.1800000 -0.0009994 + 135.2400000 -0.0010060 + 135.3000000 -0.0010126 + 135.3600000 -0.0010190 + 135.4200000 -0.0010254 + 135.4800000 -0.0010316 + 135.5400000 -0.0010377 + 135.6000000 -0.0010436 + 135.6600000 -0.0010494 + 135.7200000 -0.0010549 + 135.7800000 -0.0010603 + 135.8400000 -0.0010654 + 135.9000000 -0.0010703 + 135.9600000 -0.0010750 + 136.0200000 -0.0010794 + 136.0800000 -0.0010835 + 136.1400000 -0.0010873 + 136.2000000 -0.0010908 + 136.2600000 -0.0010940 + 136.3200000 -0.0010968 + 136.3800000 -0.0010993 + 136.4400000 -0.0011014 + 136.5000000 -0.0011032 + 136.5600000 -0.0011045 + 136.6200000 -0.0011054 + 136.6800000 -0.0011059 + 136.7400000 -0.0011060 + 136.8000000 -0.0011057 + 136.8600000 -0.0011048 + 136.9200000 -0.0011036 + 136.9800000 -0.0011018 + 137.0400000 -0.0010996 + 137.1000000 -0.0010969 + 137.1600000 -0.0010937 + 137.2200000 -0.0010900 + 137.2800000 -0.0010858 + 137.3400000 -0.0010811 + 137.4000000 -0.0010759 + 137.4600000 -0.0010702 + 137.5200000 -0.0010640 + 137.5800000 -0.0010573 + 137.6400000 -0.0010500 + 137.7000000 -0.0010423 + 137.7600000 -0.0010340 + 137.8200000 -0.0010252 + 137.8800000 -0.0010160 + 137.9400000 -0.0010062 + 138.0000000 -0.0009960 + 138.0600000 -0.0009853 + 138.1200000 -0.0009741 + 138.1800000 -0.0009625 + 138.2400000 -0.0009504 + 138.3000000 -0.0009378 + 138.3600000 -0.0009249 + 138.4200000 -0.0009115 + 138.4800000 -0.0008977 + 138.5400000 -0.0008835 + 138.6000000 -0.0008690 + 138.6600000 -0.0008541 + 138.7200000 -0.0008389 + 138.7800000 -0.0008233 + 138.8400000 -0.0008074 + 138.9000000 -0.0007913 + 138.9600000 -0.0007748 + 139.0200000 -0.0007582 + 139.0800000 -0.0007413 + 139.1400000 -0.0007242 + 139.2000000 -0.0007069 + 139.2600000 -0.0006894 + 139.3200000 -0.0006718 + 139.3800000 -0.0006540 + 139.4400000 -0.0006362 + 139.5000000 -0.0006182 + 139.5600000 -0.0006002 + 139.6200000 -0.0005822 + 139.6800000 -0.0005641 + 139.7400000 -0.0005461 + 139.8000000 -0.0005280 + 139.8600000 -0.0005100 + 139.9200000 -0.0004921 + 139.9800000 -0.0004742 + 140.0400000 -0.0004565 + 140.1000000 -0.0004389 + 140.1600000 -0.0004214 + 140.2200000 -0.0004041 + 140.2800000 -0.0003869 + 140.3400000 -0.0003700 + 140.4000000 -0.0003533 + 140.4600000 -0.0003368 + 140.5200000 -0.0003205 + 140.5800000 -0.0003046 + 140.6400000 -0.0002889 + 140.7000000 -0.0002735 + 140.7600000 -0.0002584 + 140.8200000 -0.0002436 + 140.8800000 -0.0002292 + 140.9400000 -0.0002151 + 141.0000000 -0.0002014 + 141.0600000 -0.0001880 + 141.1200000 -0.0001750 + 141.1800000 -0.0001624 + 141.2400000 -0.0001502 + 141.3000000 -0.0001384 + 141.3600000 -0.0001269 + 141.4200000 -0.0001159 + 141.4800000 -0.0001053 + 141.5400000 -0.0000951 + 141.6000000 -0.0000854 + 141.6600000 -0.0000761 + 141.7200000 -0.0000671 + 141.7800000 -0.0000587 + 141.8400000 -0.0000506 + 141.9000000 -0.0000430 + 141.9600000 -0.0000358 + 142.0200000 -0.0000291 + 142.0800000 -0.0000228 + 142.1400000 -0.0000169 + 142.2000000 -0.0000114 + 142.2600000 -0.0000064 + 142.3200000 -0.0000018 + 142.3800000 0.0000024 + 142.4400000 0.0000062 + 142.5000000 0.0000096 + 142.5600000 0.0000125 + 142.6200000 0.0000150 + 142.6800000 0.0000172 + 142.7400000 0.0000189 + 142.8000000 0.0000203 + 142.8600000 0.0000212 + 142.9200000 0.0000218 + 142.9800000 0.0000219 + 143.0400000 0.0000217 + 143.1000000 0.0000211 + 143.1600000 0.0000202 + 143.2200000 0.0000188 + 143.2800000 0.0000171 + 143.3400000 0.0000150 + 143.4000000 0.0000126 + 143.4600000 0.0000097 + 143.5200000 0.0000066 + 143.5800000 0.0000030 + 143.6400000 -0.0000009 + 143.7000000 -0.0000052 + 143.7600000 -0.0000098 + 143.8200000 -0.0000148 + 143.8800000 -0.0000201 + 143.9400000 -0.0000258 + 144.0000000 -0.0000319 + 144.0600000 -0.0000383 + 144.1200000 -0.0000451 + 144.1800000 -0.0000522 + 144.2400000 -0.0000598 + 144.3000000 -0.0000677 + 144.3600000 -0.0000759 + 144.4200000 -0.0000846 + 144.4800000 -0.0000936 + 144.5400000 -0.0001030 + 144.6000000 -0.0001128 + 144.6600000 -0.0001230 + 144.7200000 -0.0001336 + 144.7800000 -0.0001446 + 144.8400000 -0.0001560 + 144.9000000 -0.0001678 + 144.9600000 -0.0001800 + 145.0200000 -0.0001927 + 145.0800000 -0.0002058 + 145.1400000 -0.0002194 + 145.2000000 -0.0002333 + 145.2600000 -0.0002478 + 145.3200000 -0.0002627 + 145.3800000 -0.0002780 + 145.4400000 -0.0002938 + 145.5000000 -0.0003101 + 145.5600000 -0.0003269 + 145.6200000 -0.0003442 + 145.6800000 -0.0003619 + 145.7400000 -0.0003801 + 145.8000000 -0.0003988 + 145.8600000 -0.0004181 + 145.9200000 -0.0004378 + 145.9800000 -0.0004580 + 146.0400000 -0.0004787 + 146.1000000 -0.0005000 + 146.1600000 -0.0005217 + 146.2200000 -0.0005440 + 146.2800000 -0.0005667 + 146.3400000 -0.0005900 + 146.4000000 -0.0006138 + 146.4600000 -0.0006381 + 146.5200000 -0.0006628 + 146.5800000 -0.0006881 + 146.6400000 -0.0007139 + 146.7000000 -0.0007401 + 146.7600000 -0.0007668 + 146.8200000 -0.0007939 + 146.8800000 -0.0008215 + 146.9400000 -0.0008496 + 147.0000000 -0.0008781 + 147.0600000 -0.0009069 + 147.1200000 -0.0009362 + 147.1800000 -0.0009659 + 147.2400000 -0.0009959 + 147.3000000 -0.0010262 + 147.3600000 -0.0010569 + 147.4200000 -0.0010879 + 147.4800000 -0.0011191 + 147.5400000 -0.0011506 + 147.6000000 -0.0011823 + 147.6600000 -0.0012143 + 147.7200000 -0.0012463 + 147.7800000 -0.0012786 + 147.8400000 -0.0013109 + 147.9000000 -0.0013433 + 147.9600000 -0.0013758 + 148.0200000 -0.0014083 + 148.0800000 -0.0014407 + 148.1400000 -0.0014731 + 148.2000000 -0.0015054 + 148.2600000 -0.0015375 + 148.3200000 -0.0015694 + 148.3800000 -0.0016012 + 148.4400000 -0.0016326 + 148.5000000 -0.0016638 + 148.5600000 -0.0016946 + 148.6200000 -0.0017250 + 148.6800000 -0.0017550 + 148.7400000 -0.0017845 + 148.8000000 -0.0018135 + 148.8600000 -0.0018419 + 148.9200000 -0.0018696 + 148.9800000 -0.0018967 + 149.0400000 -0.0019232 + 149.1000000 -0.0019488 + 149.1600000 -0.0019737 + 149.2200000 -0.0019977 + 149.2800000 -0.0020208 + 149.3400000 -0.0020430 + 149.4000000 -0.0020643 + 149.4600000 -0.0020845 + 149.5200000 -0.0021036 + 149.5800000 -0.0021217 + 149.6400000 -0.0021386 + 149.7000000 -0.0021544 + 149.7600000 -0.0021689 + 149.8200000 -0.0021822 + 149.8800000 -0.0021942 + 149.9400000 -0.0022050 + 150.0000000 -0.0022143 + 150.0600000 -0.0022223 + 150.1200000 -0.0022289 + 150.1800000 -0.0022341 + 150.2400000 -0.0022379 + 150.3000000 -0.0022401 + 150.3600000 -0.0022409 + 150.4200000 -0.0022402 + 150.4800000 -0.0022380 + 150.5400000 -0.0022342 + 150.6000000 -0.0022289 + 150.6600000 -0.0022221 + 150.7200000 -0.0022137 + 150.7800000 -0.0022038 + 150.8400000 -0.0021923 + 150.9000000 -0.0021793 + 150.9600000 -0.0021647 + 151.0200000 -0.0021486 + 151.0800000 -0.0021309 + 151.1400000 -0.0021118 + 151.2000000 -0.0020911 + 151.2600000 -0.0020690 + 151.3200000 -0.0020454 + 151.3800000 -0.0020204 + 151.4400000 -0.0019939 + 151.5000000 -0.0019661 + 151.5600000 -0.0019369 + 151.6200000 -0.0019064 + 151.6800000 -0.0018746 + 151.7400000 -0.0018415 + 151.8000000 -0.0018072 + 151.8600000 -0.0017717 + 151.9200000 -0.0017351 + 151.9800000 -0.0016973 + 152.0400000 -0.0016585 + 152.1000000 -0.0016187 + 152.1600000 -0.0015779 + 152.2200000 -0.0015362 + 152.2800000 -0.0014936 + 152.3400000 -0.0014502 + 152.4000000 -0.0014060 + 152.4600000 -0.0013611 + 152.5200000 -0.0013156 + 152.5800000 -0.0012694 + 152.6400000 -0.0012226 + 152.7000000 -0.0011753 + 152.7600000 -0.0011276 + 152.8200000 -0.0010795 + 152.8800000 -0.0010310 + 152.9400000 -0.0009822 + 153.0000000 -0.0009332 + 153.0600000 -0.0008840 + 153.1200000 -0.0008346 + 153.1800000 -0.0007852 + 153.2400000 -0.0007357 + 153.3000000 -0.0006863 + 153.3600000 -0.0006369 + 153.4200000 -0.0005876 + 153.4800000 -0.0005385 + 153.5400000 -0.0004897 + 153.6000000 -0.0004410 + 153.6600000 -0.0003927 + 153.7200000 -0.0003448 + 153.7800000 -0.0002972 + 153.8400000 -0.0002501 + 153.9000000 -0.0002034 + 153.9600000 -0.0001573 + 154.0200000 -0.0001117 + 154.0800000 -0.0000667 + 154.1400000 -0.0000223 + 154.2000000 0.0000214 + 154.2600000 0.0000645 + 154.3200000 0.0001068 + 154.3800000 0.0001483 + 154.4400000 0.0001891 + 154.5000000 0.0002291 + 154.5600000 0.0002683 + 154.6200000 0.0003067 + 154.6800000 0.0003441 + 154.7400000 0.0003807 + 154.8000000 0.0004164 + 154.8600000 0.0004512 + 154.9200000 0.0004851 + 154.9800000 0.0005180 + 155.0400000 0.0005500 + 155.1000000 0.0005810 + 155.1600000 0.0006111 + 155.2200000 0.0006402 + 155.2800000 0.0006683 + 155.3400000 0.0006955 + 155.4000000 0.0007217 + 155.4600000 0.0007468 + 155.5200000 0.0007711 + 155.5800000 0.0007943 + 155.6400000 0.0008166 + 155.7000000 0.0008379 + 155.7600000 0.0008582 + 155.8200000 0.0008776 + 155.8800000 0.0008960 + 155.9400000 0.0009135 + 156.0000000 0.0009301 + 156.0600000 0.0009457 + 156.1200000 0.0009605 + 156.1800000 0.0009743 + 156.2400000 0.0009872 + 156.3000000 0.0009993 + 156.3600000 0.0010105 + 156.4200000 0.0010209 + 156.4800000 0.0010305 + 156.5400000 0.0010392 + 156.6000000 0.0010472 + 156.6600000 0.0010543 + 156.7200000 0.0010607 + 156.7800000 0.0010664 + 156.8400000 0.0010713 + 156.9000000 0.0010755 + 156.9600000 0.0010791 + 157.0200000 0.0010819 + 157.0800000 0.0010841 + 157.1400000 0.0010857 + 157.2000000 0.0010867 + 157.2600000 0.0010870 + 157.3200000 0.0010868 + 157.3800000 0.0010860 + 157.4400000 0.0010847 + 157.5000000 0.0010828 + 157.5600000 0.0010805 + 157.6200000 0.0010776 + 157.6800000 0.0010743 + 157.7400000 0.0010706 + 157.8000000 0.0010664 + 157.8600000 0.0010618 + 157.9200000 0.0010569 + 157.9800000 0.0010515 + 158.0400000 0.0010458 + 158.1000000 0.0010397 + 158.1600000 0.0010334 + 158.2200000 0.0010267 + 158.2800000 0.0010197 + 158.3400000 0.0010125 + 158.4000000 0.0010050 + 158.4600000 0.0009973 + 158.5200000 0.0009893 + 158.5800000 0.0009812 + 158.6400000 0.0009728 + 158.7000000 0.0009643 + 158.7600000 0.0009556 + 158.8200000 0.0009467 + 158.8800000 0.0009377 + 158.9400000 0.0009286 + 159.0000000 0.0009193 + 159.0600000 0.0009100 + 159.1200000 0.0009006 + 159.1800000 0.0008911 + 159.2400000 0.0008815 + 159.3000000 0.0008719 + 159.3600000 0.0008622 + 159.4200000 0.0008525 + 159.4800000 0.0008427 + 159.5400000 0.0008330 + 159.6000000 0.0008232 + 159.6600000 0.0008134 + 159.7200000 0.0008037 + 159.7800000 0.0007939 + 159.8400000 0.0007842 + 159.9000000 0.0007745 + 159.9600000 0.0007648 + 160.0200000 0.0007552 + 160.0800000 0.0007456 + 160.1400000 0.0007361 + 160.2000000 0.0007266 + 160.2600000 0.0007172 + 160.3200000 0.0007079 + 160.3800000 0.0006986 + 160.4400000 0.0006894 + 160.5000000 0.0006803 + 160.5600000 0.0006713 + 160.6200000 0.0006624 + 160.6800000 0.0006535 + 160.7400000 0.0006447 + 160.8000000 0.0006361 + 160.8600000 0.0006275 + 160.9200000 0.0006190 + 160.9800000 0.0006106 + 161.0400000 0.0006023 + 161.1000000 0.0005942 + 161.1600000 0.0005861 + 161.2200000 0.0005781 + 161.2800000 0.0005702 + 161.3400000 0.0005625 + 161.4000000 0.0005548 + 161.4600000 0.0005473 + 161.5200000 0.0005398 + 161.5800000 0.0005325 + 161.6400000 0.0005253 + 161.7000000 0.0005181 + 161.7600000 0.0005111 + 161.8200000 0.0005042 + 161.8800000 0.0004974 + 161.9400000 0.0004907 + 162.0000000 0.0004841 + 162.0600000 0.0004776 + 162.1200000 0.0004712 + 162.1800000 0.0004649 + 162.2400000 0.0004587 + 162.3000000 0.0004526 + 162.3600000 0.0004466 + 162.4200000 0.0004408 + 162.4800000 0.0004350 + 162.5400000 0.0004293 + 162.6000000 0.0004237 + 162.6600000 0.0004182 + 162.7200000 0.0004128 + 162.7800000 0.0004075 + 162.8400000 0.0004022 + 162.9000000 0.0003971 + 162.9600000 0.0003921 + 163.0200000 0.0003871 + 163.0800000 0.0003823 + 163.1400000 0.0003775 + 163.2000000 0.0003728 + 163.2600000 0.0003682 + 163.3200000 0.0003637 + 163.3800000 0.0003593 + 163.4400000 0.0003549 + 163.5000000 0.0003506 + 163.5600000 0.0003465 + 163.6200000 0.0003423 + 163.6800000 0.0003383 + 163.7400000 0.0003343 + 163.8000000 0.0003304 + 163.8600000 0.0003266 + 163.9200000 0.0003229 + 163.9800000 0.0003192 + 164.0400000 0.0003156 + 164.1000000 0.0003121 + 164.1600000 0.0003086 + 164.2200000 0.0003052 + 164.2800000 0.0003018 + 164.3400000 0.0002985 + 164.4000000 0.0002953 + 164.4600000 0.0002921 + 164.5200000 0.0002890 + 164.5800000 0.0002860 + 164.6400000 0.0002830 + 164.7000000 0.0002801 + 164.7600000 0.0002772 + 164.8200000 0.0002743 + 164.8800000 0.0002716 + 164.9400000 0.0002689 + 165.0000000 0.0002662 + 165.0600000 0.0002636 + 165.1200000 0.0002610 + 165.1800000 0.0002584 + 165.2400000 0.0002560 + 165.3000000 0.0002535 + 165.3600000 0.0002511 + 165.4200000 0.0002488 + 165.4800000 0.0002465 + 165.5400000 0.0002442 + 165.6000000 0.0002420 + 165.6600000 0.0002398 + 165.7200000 0.0002377 + 165.7800000 0.0002356 + 165.8400000 0.0002336 + 165.9000000 0.0002316 + 165.9600000 0.0002296 + 166.0200000 0.0002277 + 166.0800000 0.0002258 + 166.1400000 0.0002240 + 166.2000000 0.0002222 + 166.2600000 0.0002204 + 166.3200000 0.0002187 + 166.3800000 0.0002170 + 166.4400000 0.0002154 + 166.5000000 0.0002138 + 166.5600000 0.0002123 + 166.6200000 0.0002108 + 166.6800000 0.0002093 + 166.7400000 0.0002079 + 166.8000000 0.0002065 + 166.8600000 0.0002052 + 166.9200000 0.0002040 + 166.9800000 0.0002027 + 167.0400000 0.0002016 + 167.1000000 0.0002004 + 167.1600000 0.0001994 + 167.2200000 0.0001984 + 167.2800000 0.0001974 + 167.3400000 0.0001965 + 167.4000000 0.0001956 + 167.4600000 0.0001948 + 167.5200000 0.0001941 + 167.5800000 0.0001934 + 167.6400000 0.0001928 + 167.7000000 0.0001923 + 167.7600000 0.0001918 + 167.8200000 0.0001914 + 167.8800000 0.0001910 + 167.9400000 0.0001908 + 168.0000000 0.0001906 + 168.0600000 0.0001905 + 168.1200000 0.0001904 + 168.1800000 0.0001905 + 168.2400000 0.0001906 + 168.3000000 0.0001908 + 168.3600000 0.0001911 + 168.4200000 0.0001915 + 168.4800000 0.0001920 + 168.5400000 0.0001926 + 168.6000000 0.0001933 + 168.6600000 0.0001940 + 168.7200000 0.0001949 + 168.7800000 0.0001959 + 168.8400000 0.0001970 + 168.9000000 0.0001982 + 168.9600000 0.0001996 + 169.0200000 0.0002010 + 169.0800000 0.0002026 + 169.1400000 0.0002043 + 169.2000000 0.0002061 + 169.2600000 0.0002080 + 169.3200000 0.0002101 + 169.3800000 0.0002123 + 169.4400000 0.0002146 + 169.5000000 0.0002170 + 169.5600000 0.0002196 + 169.6200000 0.0002224 + 169.6800000 0.0002252 + 169.7400000 0.0002282 + 169.8000000 0.0002314 + 169.8600000 0.0002347 + 169.9200000 0.0002381 + 169.9800000 0.0002417 + 170.0400000 0.0002454 + 170.1000000 0.0002492 + 170.1600000 0.0002532 + 170.2200000 0.0002574 + 170.2800000 0.0002616 + 170.3400000 0.0002660 + 170.4000000 0.0002706 + 170.4600000 0.0002753 + 170.5200000 0.0002801 + 170.5800000 0.0002850 + 170.6400000 0.0002900 + 170.7000000 0.0002952 + 170.7600000 0.0003005 + 170.8200000 0.0003059 + 170.8800000 0.0003114 + 170.9400000 0.0003170 + 171.0000000 0.0003226 + 171.0600000 0.0003284 + 171.1200000 0.0003343 + 171.1800000 0.0003402 + 171.2400000 0.0003462 + 171.3000000 0.0003523 + 171.3600000 0.0003584 + 171.4200000 0.0003646 + 171.4800000 0.0003707 + 171.5400000 0.0003770 + 171.6000000 0.0003832 + 171.6600000 0.0003894 + 171.7200000 0.0003956 + 171.7800000 0.0004018 + 171.8400000 0.0004080 + 171.9000000 0.0004141 + 171.9600000 0.0004202 + 172.0200000 0.0004262 + 172.0800000 0.0004322 + 172.1400000 0.0004380 + 172.2000000 0.0004437 + 172.2600000 0.0004493 + 172.3200000 0.0004548 + 172.3800000 0.0004601 + 172.4400000 0.0004653 + 172.5000000 0.0004703 + 172.5600000 0.0004751 + 172.6200000 0.0004796 + 172.6800000 0.0004840 + 172.7400000 0.0004881 + 172.8000000 0.0004920 + 172.8600000 0.0004956 + 172.9200000 0.0004989 + 172.9800000 0.0005019 + 173.0400000 0.0005046 + 173.1000000 0.0005069 + 173.1600000 0.0005089 + 173.2200000 0.0005106 + 173.2800000 0.0005118 + 173.3400000 0.0005127 + 173.4000000 0.0005132 + 173.4600000 0.0005132 + 173.5200000 0.0005128 + 173.5800000 0.0005119 + 173.6400000 0.0005106 + 173.7000000 0.0005088 + 173.7600000 0.0005064 + 173.8200000 0.0005036 + 173.8800000 0.0005003 + 173.9400000 0.0004964 + 174.0000000 0.0004920 + 174.0600000 0.0004870 + 174.1200000 0.0004814 + 174.1800000 0.0004753 + 174.2400000 0.0004686 + 174.3000000 0.0004613 + 174.3600000 0.0004534 + 174.4200000 0.0004449 + 174.4800000 0.0004357 + 174.5400000 0.0004260 + 174.6000000 0.0004156 + 174.6600000 0.0004046 + 174.7200000 0.0003929 + 174.7800000 0.0003807 + 174.8400000 0.0003677 + 174.9000000 0.0003542 + 174.9600000 0.0003400 + 175.0200000 0.0003251 + 175.0800000 0.0003096 + 175.1400000 0.0002935 + 175.2000000 0.0002768 + 175.2600000 0.0002594 + 175.3200000 0.0002414 + 175.3800000 0.0002228 + 175.4400000 0.0002036 + 175.5000000 0.0001838 + 175.5600000 0.0001634 + 175.6200000 0.0001425 + 175.6800000 0.0001210 + 175.7400000 0.0000989 + 175.8000000 0.0000763 + 175.8600000 0.0000532 + 175.9200000 0.0000296 + 175.9800000 0.0000055 + 176.0400000 -0.0000190 + 176.1000000 -0.0000440 + 176.1600000 -0.0000694 + 176.2200000 -0.0000952 + 176.2800000 -0.0001214 + 176.3400000 -0.0001480 + 176.4000000 -0.0001749 + 176.4600000 -0.0002020 + 176.5200000 -0.0002295 + 176.5800000 -0.0002572 + 176.6400000 -0.0002852 + 176.7000000 -0.0003133 + 176.7600000 -0.0003416 + 176.8200000 -0.0003700 + 176.8800000 -0.0003986 + 176.9400000 -0.0004272 + 177.0000000 -0.0004558 + 177.0600000 -0.0004845 + 177.1200000 -0.0005131 + 177.1800000 -0.0005417 + 177.2400000 -0.0005702 + 177.3000000 -0.0005985 + 177.3600000 -0.0006267 + 177.4200000 -0.0006547 + 177.4800000 -0.0006825 + 177.5400000 -0.0007100 + 177.6000000 -0.0007372 + 177.6600000 -0.0007640 + 177.7200000 -0.0007905 + 177.7800000 -0.0008166 + 177.8400000 -0.0008422 + 177.9000000 -0.0008673 + 177.9600000 -0.0008919 + 178.0200000 -0.0009160 + 178.0800000 -0.0009395 + 178.1400000 -0.0009623 + 178.2000000 -0.0009846 + 178.2600000 -0.0010061 + 178.3200000 -0.0010269 + 178.3800000 -0.0010469 + 178.4400000 -0.0010662 + 178.5000000 -0.0010846 + 178.5600000 -0.0011022 + 178.6200000 -0.0011190 + 178.6800000 -0.0011348 + 178.7400000 -0.0011497 + 178.8000000 -0.0011637 + 178.8600000 -0.0011767 + 178.9200000 -0.0011887 + 178.9800000 -0.0011996 + 179.0400000 -0.0012095 + 179.1000000 -0.0012184 + 179.1600000 -0.0012262 + 179.2200000 -0.0012329 + 179.2800000 -0.0012385 + 179.3400000 -0.0012429 + 179.4000000 -0.0012463 + 179.4600000 -0.0012484 + 179.5200000 -0.0012495 + 179.5800000 -0.0012493 + 179.6400000 -0.0012480 + 179.7000000 -0.0012456 + 179.7600000 -0.0012419 + 179.8200000 -0.0012371 + 179.8800000 -0.0012312 + 179.9400000 -0.0012240 + 180.0000000 -0.0012157 + 180.0600000 -0.0012063 + 180.1200000 -0.0011957 + 180.1800000 -0.0011839 + 180.2400000 -0.0011711 + 180.3000000 -0.0011571 + 180.3600000 -0.0011420 + 180.4200000 -0.0011259 + 180.4800000 -0.0011087 + 180.5400000 -0.0010905 + 180.6000000 -0.0010712 + 180.6600000 -0.0010510 + 180.7200000 -0.0010298 + 180.7800000 -0.0010076 + 180.8400000 -0.0009846 + 180.9000000 -0.0009606 + 180.9600000 -0.0009358 + 181.0200000 -0.0009102 + 181.0800000 -0.0008838 + 181.1400000 -0.0008566 + 181.2000000 -0.0008287 + 181.2600000 -0.0008001 + 181.3200000 -0.0007709 + 181.3800000 -0.0007410 + 181.4400000 -0.0007106 + 181.5000000 -0.0006796 + 181.5600000 -0.0006481 + 181.6200000 -0.0006161 + 181.6800000 -0.0005838 + 181.7400000 -0.0005510 + 181.8000000 -0.0005179 + 181.8600000 -0.0004844 + 181.9200000 -0.0004507 + 181.9800000 -0.0004168 + 182.0400000 -0.0003827 + 182.1000000 -0.0003484 + 182.1600000 -0.0003140 + 182.2200000 -0.0002796 + 182.2800000 -0.0002451 + 182.3400000 -0.0002105 + 182.4000000 -0.0001761 + 182.4600000 -0.0001417 + 182.5200000 -0.0001074 + 182.5800000 -0.0000732 + 182.6400000 -0.0000392 + 182.7000000 -0.0000054 + 182.7600000 0.0000282 + 182.8200000 0.0000614 + 182.8800000 0.0000944 + 182.9400000 0.0001271 + 183.0000000 0.0001594 + 183.0600000 0.0001914 + 183.1200000 0.0002229 + 183.1800000 0.0002541 + 183.2400000 0.0002847 + 183.3000000 0.0003149 + 183.3600000 0.0003447 + 183.4200000 0.0003739 + 183.4800000 0.0004025 + 183.5400000 0.0004307 + 183.6000000 0.0004582 + 183.6600000 0.0004852 + 183.7200000 0.0005116 + 183.7800000 0.0005374 + 183.8400000 0.0005626 + 183.9000000 0.0005872 + 183.9600000 0.0006111 + 184.0200000 0.0006344 + 184.0800000 0.0006571 + 184.1400000 0.0006791 + 184.2000000 0.0007005 + 184.2600000 0.0007211 + 184.3200000 0.0007412 + 184.3800000 0.0007605 + 184.4400000 0.0007792 + 184.5000000 0.0007972 + 184.5600000 0.0008145 + 184.6200000 0.0008312 + 184.6800000 0.0008472 + 184.7400000 0.0008625 + 184.8000000 0.0008772 + 184.8600000 0.0008912 + 184.9200000 0.0009045 + 184.9800000 0.0009172 + 185.0400000 0.0009292 + 185.1000000 0.0009406 + 185.1600000 0.0009514 + 185.2200000 0.0009614 + 185.2800000 0.0009709 + 185.3400000 0.0009797 + 185.4000000 0.0009879 + 185.4600000 0.0009955 + 185.5200000 0.0010025 + 185.5800000 0.0010089 + 185.6400000 0.0010147 + 185.7000000 0.0010198 + 185.7600000 0.0010244 + 185.8200000 0.0010285 + 185.8800000 0.0010319 + 185.9400000 0.0010348 + 186.0000000 0.0010371 + 186.0600000 0.0010389 + 186.1200000 0.0010401 + 186.1800000 0.0010408 + 186.2400000 0.0010410 + 186.3000000 0.0010406 + 186.3600000 0.0010398 + 186.4200000 0.0010384 + 186.4800000 0.0010365 + 186.5400000 0.0010341 + 186.6000000 0.0010312 + 186.6600000 0.0010279 + 186.7200000 0.0010241 + 186.7800000 0.0010198 + 186.8400000 0.0010151 + 186.9000000 0.0010099 + 186.9600000 0.0010043 + 187.0200000 0.0009983 + 187.0800000 0.0009918 + 187.1400000 0.0009849 + 187.2000000 0.0009776 + 187.2600000 0.0009699 + 187.3200000 0.0009619 + 187.3800000 0.0009534 + 187.4400000 0.0009446 + 187.5000000 0.0009354 + 187.5600000 0.0009259 + 187.6200000 0.0009160 + 187.6800000 0.0009058 + 187.7400000 0.0008953 + 187.8000000 0.0008844 + 187.8600000 0.0008733 + 187.9200000 0.0008619 + 187.9800000 0.0008501 + 188.0400000 0.0008382 + 188.1000000 0.0008259 + 188.1600000 0.0008135 + 188.2200000 0.0008008 + 188.2800000 0.0007878 + 188.3400000 0.0007747 + 188.4000000 0.0007614 + 188.4600000 0.0007479 + 188.5200000 0.0007342 + 188.5800000 0.0007204 + 188.6400000 0.0007064 + 188.7000000 0.0006923 + 188.7600000 0.0006781 + 188.8200000 0.0006637 + 188.8800000 0.0006493 + 188.9400000 0.0006348 + 189.0000000 0.0006202 + 189.0600000 0.0006056 + 189.1200000 0.0005910 + 189.1800000 0.0005763 + 189.2400000 0.0005616 + 189.3000000 0.0005469 + 189.3600000 0.0005322 + 189.4200000 0.0005176 + 189.4800000 0.0005030 + 189.5400000 0.0004885 + 189.6000000 0.0004740 + 189.6600000 0.0004596 + 189.7200000 0.0004453 + 189.7800000 0.0004311 + 189.8400000 0.0004170 + 189.9000000 0.0004031 + 189.9600000 0.0003893 + 190.0200000 0.0003756 + 190.0800000 0.0003621 + 190.1400000 0.0003488 + 190.2000000 0.0003357 + 190.2600000 0.0003227 + 190.3200000 0.0003100 + 190.3800000 0.0002974 + 190.4400000 0.0002851 + 190.5000000 0.0002730 + 190.5600000 0.0002611 + 190.6200000 0.0002495 + 190.6800000 0.0002381 + 190.7400000 0.0002270 + 190.8000000 0.0002161 + 190.8600000 0.0002055 + 190.9200000 0.0001952 + 190.9800000 0.0001851 + 191.0400000 0.0001753 + 191.1000000 0.0001658 + 191.1600000 0.0001566 + 191.2200000 0.0001476 + 191.2800000 0.0001390 + 191.3400000 0.0001306 + 191.4000000 0.0001225 + 191.4600000 0.0001147 + 191.5200000 0.0001072 + 191.5800000 0.0001000 + 191.6400000 0.0000931 + 191.7000000 0.0000864 + 191.7600000 0.0000801 + 191.8200000 0.0000740 + 191.8800000 0.0000682 + 191.9400000 0.0000627 + 192.0000000 0.0000575 + 192.0600000 0.0000526 + 192.1200000 0.0000479 + 192.1800000 0.0000435 + 192.2400000 0.0000393 + 192.3000000 0.0000354 + 192.3600000 0.0000318 + 192.4200000 0.0000284 + 192.4800000 0.0000253 + 192.5400000 0.0000224 + 192.6000000 0.0000198 + 192.6600000 0.0000174 + 192.7200000 0.0000152 + 192.7800000 0.0000133 + 192.8400000 0.0000116 + 192.9000000 0.0000101 + 192.9600000 0.0000088 + 193.0200000 0.0000077 + 193.0800000 0.0000068 + 193.1400000 0.0000061 + 193.2000000 0.0000056 + 193.2600000 0.0000053 + 193.3200000 0.0000052 + 193.3800000 0.0000053 + 193.4400000 0.0000055 + 193.5000000 0.0000059 + 193.5600000 0.0000065 + 193.6200000 0.0000072 + 193.6800000 0.0000081 + 193.7400000 0.0000091 + 193.8000000 0.0000103 + 193.8600000 0.0000117 + 193.9200000 0.0000132 + 193.9800000 0.0000148 + 194.0400000 0.0000166 + 194.1000000 0.0000185 + 194.1600000 0.0000206 + 194.2200000 0.0000228 + 194.2800000 0.0000251 + 194.3400000 0.0000275 + 194.4000000 0.0000301 + 194.4600000 0.0000328 + 194.5200000 0.0000356 + 194.5800000 0.0000386 + 194.6400000 0.0000416 + 194.7000000 0.0000448 + 194.7600000 0.0000481 + 194.8200000 0.0000515 + 194.8800000 0.0000550 + 194.9400000 0.0000587 + 195.0000000 0.0000624 + 195.0600000 0.0000663 + 195.1200000 0.0000703 + 195.1800000 0.0000744 + 195.2400000 0.0000786 + 195.3000000 0.0000829 + 195.3600000 0.0000873 + 195.4200000 0.0000918 + 195.4800000 0.0000965 + 195.5400000 0.0001012 + 195.6000000 0.0001061 + 195.6600000 0.0001110 + 195.7200000 0.0001161 + 195.7800000 0.0001213 + 195.8400000 0.0001266 + 195.9000000 0.0001319 + 195.9600000 0.0001374 + 196.0200000 0.0001430 + 196.0800000 0.0001487 + 196.1400000 0.0001545 + 196.2000000 0.0001603 + 196.2600000 0.0001663 + 196.3200000 0.0001723 + 196.3800000 0.0001785 + 196.4400000 0.0001847 + 196.5000000 0.0001910 + 196.5600000 0.0001974 + 196.6200000 0.0002039 + 196.6800000 0.0002105 + 196.7400000 0.0002171 + 196.8000000 0.0002238 + 196.8600000 0.0002305 + 196.9200000 0.0002373 + 196.9800000 0.0002442 + 197.0400000 0.0002511 + 197.1000000 0.0002581 + 197.1600000 0.0002651 + 197.2200000 0.0002721 + 197.2800000 0.0002792 + 197.3400000 0.0002863 + 197.4000000 0.0002934 + 197.4600000 0.0003005 + 197.5200000 0.0003076 + 197.5800000 0.0003147 + 197.6400000 0.0003218 + 197.7000000 0.0003289 + 197.7600000 0.0003359 + 197.8200000 0.0003429 + 197.8800000 0.0003499 + 197.9400000 0.0003568 + 198.0000000 0.0003636 + 198.0600000 0.0003704 + 198.1200000 0.0003771 + 198.1800000 0.0003837 + 198.2400000 0.0003902 + 198.3000000 0.0003966 + 198.3600000 0.0004028 + 198.4200000 0.0004090 + 198.4800000 0.0004150 + 198.5400000 0.0004208 + 198.6000000 0.0004265 + 198.6600000 0.0004320 + 198.7200000 0.0004373 + 198.7800000 0.0004425 + 198.8400000 0.0004474 + 198.9000000 0.0004522 + 198.9600000 0.0004567 + 199.0200000 0.0004610 + 199.0800000 0.0004651 + 199.1400000 0.0004689 + 199.2000000 0.0004725 + 199.2600000 0.0004758 + 199.3200000 0.0004788 + 199.3800000 0.0004816 + 199.4400000 0.0004840 + 199.5000000 0.0004862 + 199.5600000 0.0004881 + 199.6200000 0.0004897 + 199.6800000 0.0004910 + 199.7400000 0.0004919 + 199.8000000 0.0004926 + 199.8600000 0.0004929 + 199.9200000 0.0004929 + 199.9800000 0.0004926 + 200.0400000 0.0004919 + 200.1000000 0.0004909 + 200.1600000 0.0004895 + 200.2200000 0.0004879 + 200.2800000 0.0004859 + 200.3400000 0.0004835 + 200.4000000 0.0004808 + 200.4600000 0.0004778 + 200.5200000 0.0004744 + 200.5800000 0.0004707 + 200.6400000 0.0004667 + 200.7000000 0.0004624 + 200.7600000 0.0004577 + 200.8200000 0.0004527 + 200.8800000 0.0004475 + 200.9400000 0.0004419 + 201.0000000 0.0004360 + 201.0600000 0.0004298 + 201.1200000 0.0004234 + 201.1800000 0.0004166 + 201.2400000 0.0004096 + 201.3000000 0.0004024 + 201.3600000 0.0003949 + 201.4200000 0.0003872 + 201.4800000 0.0003792 + 201.5400000 0.0003710 + 201.6000000 0.0003626 + 201.6600000 0.0003541 + 201.7200000 0.0003453 + 201.7800000 0.0003364 + 201.8400000 0.0003273 + 201.9000000 0.0003181 + 201.9600000 0.0003087 + 202.0200000 0.0002992 + 202.0800000 0.0002897 + 202.1400000 0.0002800 + 202.2000000 0.0002702 + 202.2600000 0.0002604 + 202.3200000 0.0002505 + 202.3800000 0.0002406 + 202.4400000 0.0002306 + 202.5000000 0.0002206 + 202.5600000 0.0002106 + 202.6200000 0.0002007 + 202.6800000 0.0001907 + 202.7400000 0.0001808 + 202.8000000 0.0001710 + 202.8600000 0.0001611 + 202.9200000 0.0001514 + 202.9800000 0.0001418 + 203.0400000 0.0001322 + 203.1000000 0.0001227 + 203.1600000 0.0001134 + 203.2200000 0.0001042 + 203.2800000 0.0000951 + 203.3400000 0.0000862 + 203.4000000 0.0000774 + 203.4600000 0.0000688 + 203.5200000 0.0000604 + 203.5800000 0.0000521 + 203.6400000 0.0000441 + 203.7000000 0.0000362 + 203.7600000 0.0000286 + 203.8200000 0.0000211 + 203.8800000 0.0000139 + 203.9400000 0.0000069 + 204.0000000 0.0000002 + 204.0600000 -0.0000064 + 204.1200000 -0.0000127 + 204.1800000 -0.0000187 + 204.2400000 -0.0000245 + 204.3000000 -0.0000300 + 204.3600000 -0.0000353 + 204.4200000 -0.0000403 + 204.4800000 -0.0000451 + 204.5400000 -0.0000496 + 204.6000000 -0.0000538 + 204.6600000 -0.0000578 + 204.7200000 -0.0000615 + 204.7800000 -0.0000649 + 204.8400000 -0.0000681 + 204.9000000 -0.0000710 + 204.9600000 -0.0000736 + 205.0200000 -0.0000760 + 205.0800000 -0.0000781 + 205.1400000 -0.0000799 + 205.2000000 -0.0000814 + 205.2600000 -0.0000827 + 205.3200000 -0.0000838 + 205.3800000 -0.0000845 + 205.4400000 -0.0000850 + 205.5000000 -0.0000853 + 205.5600000 -0.0000853 + 205.6200000 -0.0000850 + 205.6800000 -0.0000845 + 205.7400000 -0.0000838 + 205.8000000 -0.0000828 + 205.8600000 -0.0000815 + 205.9200000 -0.0000801 + 205.9800000 -0.0000783 + 206.0400000 -0.0000764 + 206.1000000 -0.0000742 + 206.1600000 -0.0000718 + 206.2200000 -0.0000692 + 206.2800000 -0.0000664 + 206.3400000 -0.0000633 + 206.4000000 -0.0000601 + 206.4600000 -0.0000566 + 206.5200000 -0.0000529 + 206.5800000 -0.0000490 + 206.6400000 -0.0000450 + 206.7000000 -0.0000407 + 206.7600000 -0.0000362 + 206.8200000 -0.0000316 + 206.8800000 -0.0000268 + 206.9400000 -0.0000217 + 207.0000000 -0.0000166 + 207.0600000 -0.0000112 + 207.1200000 -0.0000057 + 207.1800000 0.0000000 + 207.2400000 0.0000059 + 207.3000000 0.0000119 + 207.3600000 0.0000181 + 207.4200000 0.0000244 + 207.4800000 0.0000309 + 207.5400000 0.0000375 + 207.6000000 0.0000442 + 207.6600000 0.0000511 + 207.7200000 0.0000581 + 207.7800000 0.0000652 + 207.8400000 0.0000725 + 207.9000000 0.0000798 + 207.9600000 0.0000873 + 208.0200000 0.0000949 + 208.0800000 0.0001025 + 208.1400000 0.0001103 + 208.2000000 0.0001181 + 208.2600000 0.0001260 + 208.3200000 0.0001340 + 208.3800000 0.0001421 + 208.4400000 0.0001502 + 208.5000000 0.0001584 + 208.5600000 0.0001666 + 208.6200000 0.0001748 + 208.6800000 0.0001831 + 208.7400000 0.0001914 + 208.8000000 0.0001997 + 208.8600000 0.0002080 + 208.9200000 0.0002163 + 208.9800000 0.0002246 + 209.0400000 0.0002329 + 209.1000000 0.0002411 + 209.1600000 0.0002494 + 209.2200000 0.0002575 + 209.2800000 0.0002656 + 209.3400000 0.0002736 + 209.4000000 0.0002816 + 209.4600000 0.0002894 + 209.5200000 0.0002972 + 209.5800000 0.0003049 + 209.6400000 0.0003124 + 209.7000000 0.0003198 + 209.7600000 0.0003270 + 209.8200000 0.0003341 + 209.8800000 0.0003411 + 209.9400000 0.0003479 + 210.0000000 0.0003544 + 210.0600000 0.0003608 + 210.1200000 0.0003670 + 210.1800000 0.0003730 + 210.2400000 0.0003788 + 210.3000000 0.0003843 + 210.3600000 0.0003895 + 210.4200000 0.0003946 + 210.4800000 0.0003993 + 210.5400000 0.0004038 + 210.6000000 0.0004080 + 210.6600000 0.0004119 + 210.7200000 0.0004156 + 210.7800000 0.0004189 + 210.8400000 0.0004219 + 210.9000000 0.0004246 + 210.9600000 0.0004270 + 211.0200000 0.0004290 + 211.0800000 0.0004307 + 211.1400000 0.0004320 + 211.2000000 0.0004330 + 211.2600000 0.0004337 + 211.3200000 0.0004340 + 211.3800000 0.0004339 + 211.4400000 0.0004335 + 211.5000000 0.0004328 + 211.5600000 0.0004316 + 211.6200000 0.0004301 + 211.6800000 0.0004282 + 211.7400000 0.0004260 + 211.8000000 0.0004234 + 211.8600000 0.0004205 + 211.9200000 0.0004171 + 211.9800000 0.0004135 + 212.0400000 0.0004094 + 212.1000000 0.0004051 + 212.1600000 0.0004003 + 212.2200000 0.0003953 + 212.2800000 0.0003899 + 212.3400000 0.0003842 + 212.4000000 0.0003781 + 212.4600000 0.0003718 + 212.5200000 0.0003651 + 212.5800000 0.0003582 + 212.6400000 0.0003509 + 212.7000000 0.0003434 + 212.7600000 0.0003356 + 212.8200000 0.0003275 + 212.8800000 0.0003192 + 212.9400000 0.0003107 + 213.0000000 0.0003019 + 213.0600000 0.0002930 + 213.1200000 0.0002838 + 213.1800000 0.0002744 + 213.2400000 0.0002649 + 213.3000000 0.0002552 + 213.3600000 0.0002454 + 213.4200000 0.0002354 + 213.4800000 0.0002253 + 213.5400000 0.0002151 + 213.6000000 0.0002048 + 213.6600000 0.0001944 + 213.7200000 0.0001839 + 213.7800000 0.0001734 + 213.8400000 0.0001629 + 213.9000000 0.0001524 + 213.9600000 0.0001418 + 214.0200000 0.0001312 + 214.0800000 0.0001207 + 214.1400000 0.0001102 + 214.2000000 0.0000997 + 214.2600000 0.0000893 + 214.3200000 0.0000790 + 214.3800000 0.0000687 + 214.4400000 0.0000586 + 214.5000000 0.0000485 + 214.5600000 0.0000386 + 214.6200000 0.0000288 + 214.6800000 0.0000192 + 214.7400000 0.0000097 + 214.8000000 0.0000004 + 214.8600000 -0.0000088 + 214.9200000 -0.0000178 + 214.9800000 -0.0000266 + 215.0400000 -0.0000351 + 215.1000000 -0.0000435 + 215.1600000 -0.0000517 + 215.2200000 -0.0000596 + 215.2800000 -0.0000673 + 215.3400000 -0.0000748 + 215.4000000 -0.0000821 + 215.4600000 -0.0000891 + 215.5200000 -0.0000958 + 215.5800000 -0.0001023 + 215.6400000 -0.0001086 + 215.7000000 -0.0001146 + 215.7600000 -0.0001203 + 215.8200000 -0.0001258 + 215.8800000 -0.0001310 + 215.9400000 -0.0001360 + 216.0000000 -0.0001406 + 216.0600000 -0.0001451 + 216.1200000 -0.0001492 + 216.1800000 -0.0001532 + 216.2400000 -0.0001568 + 216.3000000 -0.0001602 + 216.3600000 -0.0001633 + 216.4200000 -0.0001662 + 216.4800000 -0.0001689 + 216.5400000 -0.0001713 + 216.6000000 -0.0001734 + 216.6600000 -0.0001754 + 216.7200000 -0.0001771 + 216.7800000 -0.0001785 + 216.8400000 -0.0001798 + 216.9000000 -0.0001808 + 216.9600000 -0.0001816 + 217.0200000 -0.0001822 + 217.0800000 -0.0001826 + 217.1400000 -0.0001828 + 217.2000000 -0.0001829 + 217.2600000 -0.0001827 + 217.3200000 -0.0001824 + 217.3800000 -0.0001819 + 217.4400000 -0.0001812 + 217.5000000 -0.0001804 + 217.5600000 -0.0001794 + 217.6200000 -0.0001783 + 217.6800000 -0.0001770 + 217.7400000 -0.0001757 + 217.8000000 -0.0001741 + 217.8600000 -0.0001725 + 217.9200000 -0.0001708 + 217.9800000 -0.0001690 + 218.0400000 -0.0001670 + 218.1000000 -0.0001650 + 218.1600000 -0.0001629 + 218.2200000 -0.0001607 + 218.2800000 -0.0001584 + 218.3400000 -0.0001561 + 218.4000000 -0.0001537 + 218.4600000 -0.0001513 + 218.5200000 -0.0001488 + 218.5800000 -0.0001462 + 218.6400000 -0.0001436 + 218.7000000 -0.0001410 + 218.7600000 -0.0001384 + 218.8200000 -0.0001357 + 218.8800000 -0.0001330 + 218.9400000 -0.0001303 + 219.0000000 -0.0001275 + 219.0600000 -0.0001248 + 219.1200000 -0.0001221 + 219.1800000 -0.0001193 + 219.2400000 -0.0001166 + 219.3000000 -0.0001139 + 219.3600000 -0.0001112 + 219.4200000 -0.0001085 + 219.4800000 -0.0001058 + 219.5400000 -0.0001031 + 219.6000000 -0.0001005 + 219.6600000 -0.0000978 + 219.7200000 -0.0000952 + 219.7800000 -0.0000927 + 219.8400000 -0.0000901 + 219.9000000 -0.0000876 + 219.9600000 -0.0000851 + 220.0200000 -0.0000827 + 220.0800000 -0.0000803 + 220.1400000 -0.0000779 + 220.2000000 -0.0000756 + 220.2600000 -0.0000733 + 220.3200000 -0.0000710 + 220.3800000 -0.0000688 + 220.4400000 -0.0000667 + 220.5000000 -0.0000645 + 220.5600000 -0.0000625 + 220.6200000 -0.0000604 + 220.6800000 -0.0000584 + 220.7400000 -0.0000565 + 220.8000000 -0.0000545 + 220.8600000 -0.0000527 + 220.9200000 -0.0000508 + 220.9800000 -0.0000491 + 221.0400000 -0.0000473 + 221.1000000 -0.0000456 + 221.1600000 -0.0000440 + 221.2200000 -0.0000423 + 221.2800000 -0.0000408 + 221.3400000 -0.0000392 + 221.4000000 -0.0000377 + 221.4600000 -0.0000363 + 221.5200000 -0.0000348 + 221.5800000 -0.0000335 + 221.6400000 -0.0000321 + 221.7000000 -0.0000308 + 221.7600000 -0.0000295 + 221.8200000 -0.0000283 + 221.8800000 -0.0000270 + 221.9400000 -0.0000259 + 222.0000000 -0.0000247 + 222.0600000 -0.0000236 + 222.1200000 -0.0000225 + 222.1800000 -0.0000214 + 222.2400000 -0.0000204 + 222.3000000 -0.0000194 + 222.3600000 -0.0000184 + 222.4200000 -0.0000175 + 222.4800000 -0.0000166 + 222.5400000 -0.0000157 + 222.6000000 -0.0000148 + 222.6600000 -0.0000140 + 222.7200000 -0.0000131 + 222.7800000 -0.0000123 + 222.8400000 -0.0000116 + 222.9000000 -0.0000108 + 222.9600000 -0.0000101 + 223.0200000 -0.0000094 + 223.0800000 -0.0000087 + 223.1400000 -0.0000080 + 223.2000000 -0.0000073 + 223.2600000 -0.0000067 + 223.3200000 -0.0000061 + 223.3800000 -0.0000055 + 223.4400000 -0.0000049 + 223.5000000 -0.0000044 + 223.5600000 -0.0000038 + 223.6200000 -0.0000033 + 223.6800000 -0.0000028 + 223.7400000 -0.0000023 + 223.8000000 -0.0000018 + 223.8600000 -0.0000013 + 223.9200000 -0.0000009 + 223.9800000 -0.0000005 + 224.0400000 -0.0000001 + 224.1000000 0.0000003 + 224.1600000 0.0000007 + 224.2200000 0.0000011 + 224.2800000 0.0000014 + 224.3400000 0.0000017 + 224.4000000 0.0000021 + 224.4600000 0.0000024 + 224.5200000 0.0000027 + 224.5800000 0.0000029 + 224.6400000 0.0000032 + 224.7000000 0.0000034 + 224.7600000 0.0000037 + 224.8200000 0.0000039 + 224.8800000 0.0000041 + 224.9400000 0.0000043 + 225.0000000 0.0000045 + 225.0600000 0.0000046 + 225.1200000 0.0000048 + 225.1800000 0.0000049 + 225.2400000 0.0000051 + 225.3000000 0.0000052 + 225.3600000 0.0000053 + 225.4200000 0.0000054 + 225.4800000 0.0000055 + 225.5400000 0.0000056 + 225.6000000 0.0000056 + 225.6600000 0.0000057 + 225.7200000 0.0000057 + 225.7800000 0.0000058 + 225.8400000 0.0000058 + 225.9000000 0.0000058 + 225.9600000 0.0000058 + 226.0200000 0.0000058 + 226.0800000 0.0000058 + 226.1400000 0.0000058 + 226.2000000 0.0000058 + 226.2600000 0.0000058 + 226.3200000 0.0000057 + 226.3800000 0.0000057 + 226.4400000 0.0000057 + 226.5000000 0.0000056 + 226.5600000 0.0000056 + 226.6200000 0.0000055 + 226.6800000 0.0000054 + 226.7400000 0.0000054 + 226.8000000 0.0000053 + 226.8600000 0.0000052 + 226.9200000 0.0000052 + 226.9800000 0.0000051 + 227.0400000 0.0000050 + 227.1000000 0.0000049 + 227.1600000 0.0000048 + 227.2200000 0.0000047 + 227.2800000 0.0000046 + 227.3400000 0.0000045 + 227.4000000 0.0000044 + 227.4600000 0.0000043 + 227.5200000 0.0000043 + 227.5800000 0.0000042 + 227.6400000 0.0000041 + 227.7000000 0.0000040 + 227.7600000 0.0000039 + 227.8200000 0.0000038 + 227.8800000 0.0000037 + 227.9400000 0.0000036 + 228.0000000 0.0000035 + 228.0600000 0.0000034 + 228.1200000 0.0000034 + 228.1800000 0.0000033 + 228.2400000 0.0000032 + 228.3000000 0.0000031 + 228.3600000 0.0000031 + 228.4200000 0.0000030 + 228.4800000 0.0000029 + 228.5400000 0.0000029 + 228.6000000 0.0000028 + 228.6600000 0.0000028 + 228.7200000 0.0000027 + 228.7800000 0.0000027 + 228.8400000 0.0000026 + 228.9000000 0.0000026 + 228.9600000 0.0000026 + 229.0200000 0.0000025 + 229.0800000 0.0000025 + 229.1400000 0.0000025 + 229.2000000 0.0000024 + 229.2600000 0.0000024 + 229.3200000 0.0000024 + 229.3800000 0.0000024 + 229.4400000 0.0000024 + 229.5000000 0.0000024 + 229.5600000 0.0000023 + 229.6200000 0.0000023 + 229.6800000 0.0000023 + 229.7400000 0.0000023 + 229.8000000 0.0000023 + 229.8600000 0.0000023 + 229.9200000 0.0000023 + 229.9800000 0.0000023 + 230.0400000 0.0000023 + 230.1000000 0.0000023 + 230.1600000 0.0000023 + 230.2200000 0.0000023 + 230.2800000 0.0000023 + 230.3400000 0.0000023 + 230.4000000 0.0000023 + 230.4600000 0.0000022 + 230.5200000 0.0000022 + 230.5800000 0.0000022 + 230.6400000 0.0000021 + 230.7000000 0.0000021 + 230.7600000 0.0000020 + 230.8200000 0.0000020 + 230.8800000 0.0000019 + 230.9400000 0.0000019 + 231.0000000 0.0000018 + 231.0600000 0.0000017 + 231.1200000 0.0000016 + 231.1800000 0.0000015 + 231.2400000 0.0000014 + 231.3000000 0.0000012 + 231.3600000 0.0000011 + 231.4200000 0.0000009 + 231.4800000 0.0000008 + 231.5400000 0.0000006 + 231.6000000 0.0000004 + 231.6600000 0.0000002 + 231.7200000 -0.0000000 + 231.7800000 -0.0000002 + 231.8400000 -0.0000005 + 231.9000000 -0.0000008 + 231.9600000 -0.0000010 + 232.0200000 -0.0000013 + 232.0800000 -0.0000016 + 232.1400000 -0.0000019 + 232.2000000 -0.0000023 + 232.2600000 -0.0000026 + 232.3200000 -0.0000030 + 232.3800000 -0.0000034 + 232.4400000 -0.0000037 + 232.5000000 -0.0000041 + 232.5600000 -0.0000046 + 232.6200000 -0.0000050 + 232.6800000 -0.0000054 + 232.7400000 -0.0000059 + 232.8000000 -0.0000064 + 232.8600000 -0.0000069 + 232.9200000 -0.0000074 + 232.9800000 -0.0000079 + 233.0400000 -0.0000084 + 233.1000000 -0.0000089 + 233.1600000 -0.0000095 + 233.2200000 -0.0000101 + 233.2800000 -0.0000106 + 233.3400000 -0.0000112 + 233.4000000 -0.0000118 + 233.4600000 -0.0000124 + 233.5200000 -0.0000130 + 233.5800000 -0.0000136 + 233.6400000 -0.0000143 + 233.7000000 -0.0000149 + 233.7600000 -0.0000155 + 233.8200000 -0.0000162 + 233.8800000 -0.0000168 + 233.9400000 -0.0000175 + 234.0000000 -0.0000181 + 234.0600000 -0.0000188 + 234.1200000 -0.0000194 + 234.1800000 -0.0000201 + 234.2400000 -0.0000207 + 234.3000000 -0.0000214 + 234.3600000 -0.0000220 + 234.4200000 -0.0000227 + 234.4800000 -0.0000233 + 234.5400000 -0.0000240 + 234.6000000 -0.0000246 + 234.6600000 -0.0000252 + 234.7200000 -0.0000258 + 234.7800000 -0.0000264 + 234.8400000 -0.0000270 + 234.9000000 -0.0000276 + 234.9600000 -0.0000281 + 235.0200000 -0.0000287 + 235.0800000 -0.0000292 + 235.1400000 -0.0000297 + 235.2000000 -0.0000302 + 235.2600000 -0.0000306 + 235.3200000 -0.0000311 + 235.3800000 -0.0000315 + 235.4400000 -0.0000319 + 235.5000000 -0.0000323 + 235.5600000 -0.0000326 + 235.6200000 -0.0000329 + 235.6800000 -0.0000332 + 235.7400000 -0.0000334 + 235.8000000 -0.0000337 + 235.8600000 -0.0000339 + 235.9200000 -0.0000340 + 235.9800000 -0.0000341 + 236.0400000 -0.0000342 + 236.1000000 -0.0000343 + 236.1600000 -0.0000343 + 236.2200000 -0.0000342 + 236.2800000 -0.0000342 + 236.3400000 -0.0000341 + 236.4000000 -0.0000339 + 236.4600000 -0.0000338 + 236.5200000 -0.0000335 + 236.5800000 -0.0000333 + 236.6400000 -0.0000330 + 236.7000000 -0.0000326 + 236.7600000 -0.0000322 + 236.8200000 -0.0000318 + 236.8800000 -0.0000313 + 236.9400000 -0.0000308 + 237.0000000 -0.0000303 + 237.0600000 -0.0000297 + 237.1200000 -0.0000290 + 237.1800000 -0.0000284 + 237.2400000 -0.0000277 + 237.3000000 -0.0000269 + 237.3600000 -0.0000261 + 237.4200000 -0.0000253 + 237.4800000 -0.0000245 + 237.5400000 -0.0000236 + 237.6000000 -0.0000227 + 237.6600000 -0.0000217 + 237.7200000 -0.0000208 + 237.7800000 -0.0000197 + 237.8400000 -0.0000187 + 237.9000000 -0.0000176 + 237.9600000 -0.0000166 + 238.0200000 -0.0000155 + 238.0800000 -0.0000143 + 238.1400000 -0.0000132 + 238.2000000 -0.0000120 + 238.2600000 -0.0000108 + 238.3200000 -0.0000096 + 238.3800000 -0.0000084 + 238.4400000 -0.0000072 + 238.5000000 -0.0000060 + 238.5600000 -0.0000048 + 238.6200000 -0.0000035 + 238.6800000 -0.0000023 + 238.7400000 -0.0000010 + 238.8000000 0.0000002 + 238.8600000 0.0000014 + 238.9200000 0.0000027 + 238.9800000 0.0000039 + 239.0400000 0.0000051 + 239.1000000 0.0000063 + 239.1600000 0.0000075 + 239.2200000 0.0000087 + 239.2800000 0.0000098 + 239.3400000 0.0000110 + 239.4000000 0.0000121 + 239.4600000 0.0000132 + 239.5200000 0.0000143 + 239.5800000 0.0000154 + 239.6400000 0.0000164 + 239.7000000 0.0000174 + 239.7600000 0.0000184 + 239.8200000 0.0000194 + 239.8800000 0.0000203 + 239.9400000 0.0000212 + 240.0000000 0.0000220 + 240.0600000 0.0000229 + 240.1200000 0.0000237 + 240.1800000 0.0000244 + 240.2400000 0.0000251 + 240.3000000 0.0000258 + 240.3600000 0.0000265 + 240.4200000 0.0000271 + 240.4800000 0.0000277 + 240.5400000 0.0000282 + 240.6000000 0.0000287 + 240.6600000 0.0000291 + 240.7200000 0.0000296 + 240.7800000 0.0000300 + 240.8400000 0.0000303 + 240.9000000 0.0000306 + 240.9600000 0.0000309 + 241.0200000 0.0000311 + 241.0800000 0.0000313 + 241.1400000 0.0000314 + 241.2000000 0.0000315 + 241.2600000 0.0000316 + 241.3200000 0.0000317 + 241.3800000 0.0000317 + 241.4400000 0.0000316 + 241.5000000 0.0000316 + 241.5600000 0.0000315 + 241.6200000 0.0000313 + 241.6800000 0.0000312 + 241.7400000 0.0000310 + 241.8000000 0.0000307 + 241.8600000 0.0000305 + 241.9200000 0.0000302 + 241.9800000 0.0000299 + 242.0400000 0.0000296 + 242.1000000 0.0000292 + 242.1600000 0.0000289 + 242.2200000 0.0000285 + 242.2800000 0.0000281 + 242.3400000 0.0000276 + 242.4000000 0.0000272 + 242.4600000 0.0000267 + 242.5200000 0.0000262 + 242.5800000 0.0000258 + 242.6400000 0.0000253 + 242.7000000 0.0000247 + 242.7600000 0.0000242 + 242.8200000 0.0000237 + 242.8800000 0.0000231 + 242.9400000 0.0000226 + 243.0000000 0.0000220 + 243.0600000 0.0000215 + 243.1200000 0.0000209 + 243.1800000 0.0000204 + 243.2400000 0.0000198 + 243.3000000 0.0000193 + 243.3600000 0.0000187 + 243.4200000 0.0000182 + 243.4800000 0.0000176 + 243.5400000 0.0000171 + 243.6000000 0.0000166 + 243.6600000 0.0000161 + 243.7200000 0.0000156 + 243.7800000 0.0000150 + 243.8400000 0.0000146 + 243.9000000 0.0000141 + 243.9600000 0.0000136 + 244.0200000 0.0000131 + 244.0800000 0.0000127 + 244.1400000 0.0000122 + 244.2000000 0.0000118 + 244.2600000 0.0000114 + 244.3200000 0.0000110 + 244.3800000 0.0000106 + 244.4400000 0.0000102 + 244.5000000 0.0000098 + 244.5600000 0.0000094 + 244.6200000 0.0000091 + 244.6800000 0.0000088 + 244.7400000 0.0000084 + 244.8000000 0.0000081 + 244.8600000 0.0000078 + 244.9200000 0.0000076 + 244.9800000 0.0000073 + 245.0400000 0.0000070 + 245.1000000 0.0000068 + 245.1600000 0.0000066 + 245.2200000 0.0000064 + 245.2800000 0.0000062 + 245.3400000 0.0000060 + 245.4000000 0.0000058 + 245.4600000 0.0000056 + 245.5200000 0.0000055 + 245.5800000 0.0000053 + 245.6400000 0.0000052 + 245.7000000 0.0000050 + 245.7600000 0.0000049 + 245.8200000 0.0000048 + 245.8800000 0.0000047 + 245.9400000 0.0000046 + 246.0000000 0.0000045 + 246.0600000 0.0000045 + 246.1200000 0.0000044 + 246.1800000 0.0000043 + 246.2400000 0.0000043 + 246.3000000 0.0000042 + 246.3600000 0.0000042 + 246.4200000 0.0000042 + 246.4800000 0.0000042 + 246.5400000 0.0000041 + 246.6000000 0.0000041 + 246.6600000 0.0000041 + 246.7200000 0.0000041 + 246.7800000 0.0000041 + 246.8400000 0.0000042 + 246.9000000 0.0000042 + 246.9600000 0.0000042 + 247.0200000 0.0000042 + 247.0800000 0.0000043 + 247.1400000 0.0000043 + 247.2000000 0.0000043 + 247.2600000 0.0000044 + 247.3200000 0.0000044 + 247.3800000 0.0000045 + 247.4400000 0.0000045 + 247.5000000 0.0000046 + 247.5600000 0.0000046 + 247.6200000 0.0000047 + 247.6800000 0.0000047 + 247.7400000 0.0000048 + 247.8000000 0.0000048 + 247.8600000 0.0000049 + 247.9200000 0.0000049 + 247.9800000 0.0000050 + 248.0400000 0.0000050 + 248.1000000 0.0000051 + 248.1600000 0.0000052 + 248.2200000 0.0000052 + 248.2800000 0.0000053 + 248.3400000 0.0000053 + 248.4000000 0.0000054 + 248.4600000 0.0000054 + 248.5200000 0.0000055 + 248.5800000 0.0000055 + 248.6400000 0.0000055 + 248.7000000 0.0000056 + 248.7600000 0.0000056 + 248.8200000 0.0000056 + 248.8800000 0.0000056 + 248.9400000 0.0000057 + 249.0000000 0.0000057 + 249.0600000 0.0000057 + 249.1200000 0.0000057 + 249.1800000 0.0000057 + 249.2400000 0.0000057 + 249.3000000 0.0000057 + 249.3600000 0.0000056 + 249.4200000 0.0000056 + 249.4800000 0.0000056 + 249.5400000 0.0000056 + 249.6000000 0.0000055 + 249.6600000 0.0000055 + 249.7200000 0.0000055 + 249.7800000 0.0000054 + 249.8400000 0.0000054 + 249.9000000 0.0000053 + 249.9600000 0.0000052 + 250.0200000 0.0000052 + 250.0800000 0.0000051 + 250.1400000 0.0000050 + 250.2000000 0.0000049 + 250.2600000 0.0000048 + 250.3200000 0.0000047 + 250.3800000 0.0000046 + 250.4400000 0.0000045 + 250.5000000 0.0000044 + 250.5600000 0.0000042 + 250.6200000 0.0000041 + 250.6800000 0.0000040 + 250.7400000 0.0000038 + 250.8000000 0.0000037 + 250.8600000 0.0000035 + 250.9200000 0.0000034 + 250.9800000 0.0000032 + 251.0400000 0.0000030 + 251.1000000 0.0000029 + 251.1600000 0.0000027 + 251.2200000 0.0000025 + 251.2800000 0.0000023 + 251.3400000 0.0000021 + 251.4000000 0.0000019 + 251.4600000 0.0000017 + 251.5200000 0.0000015 + 251.5800000 0.0000013 + 251.6400000 0.0000010 + 251.7000000 0.0000008 + 251.7600000 0.0000006 + 251.8200000 0.0000003 + 251.8800000 0.0000001 + 251.9400000 -0.0000002 diff --git a/seisflows/tests/test_data/OUTPUT_FILES/AA.S0001.BXY.semd b/seisflows/tests/test_data/test_preprocess/AA.S0001.BXY.semd similarity index 100% rename from seisflows/tests/test_data/OUTPUT_FILES/AA.S0001.BXY.semd rename to seisflows/tests/test_data/test_preprocess/AA.S0001.BXY.semd diff --git a/seisflows/tests/test_data/OUTPUT_FILES/Uy_file_single_d.su b/seisflows/tests/test_data/test_preprocess/Uy_file_single_d.su similarity index 100% rename from seisflows/tests/test_data/OUTPUT_FILES/Uy_file_single_d.su rename to seisflows/tests/test_data/test_preprocess/Uy_file_single_d.su diff --git a/seisflows/tests/test_data/test_preprocess/Uy_file_single_d.su.adj b/seisflows/tests/test_data/test_preprocess/Uy_file_single_d.su.adj new file mode 100644 index 00000000..40625ca0 Binary files /dev/null and b/seisflows/tests/test_data/test_preprocess/Uy_file_single_d.su.adj differ diff --git a/seisflows/tests/test_data/test_setup_parameters.yaml b/seisflows/tests/test_data/test_setup_parameters.yaml deleted file mode 100644 index 08fbbae8..00000000 --- a/seisflows/tests/test_data/test_setup_parameters.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# ////////////////////////////////////////////////////////////////////////////// -# -# SeisFlows YAML Parameter File -# -# ////////////////////////////////////////////////////////////////////////////// -# -# Modules correspond to the structure of the source code, and determine -# SeisFlows' behavior at runtime. Each module requires its own sub-parameters. -# -# .. rubric:: -# - To determine available options for modules listed below, run: -# > seisflows print module -# - To auto-fill with docstrings and default values (recommended), run: -# > seisflows configure -# - To set values as NoneType, use: null -# - To set values as infinity, use: inf -# -# MODULES -# /////// -# WORKFLOW (str): The method for running SeisFlows; equivalent to main() -# SOLVER (str): External numerical solver to use for waveform simulations -# SYSTEM (str): Computer architecture of the system being used -# OPTIMIZE (str): Optimization algorithm for the inverse problem -# PREPROCESS (str): Preprocessing schema for waveform data -# POSTPROCESS (str): Postprocessing schema for kernels and gradients -# ============================================================================== -WORKFLOW: inversion -SOLVER: specfem2d -SYSTEM: workstation -OPTIMIZE: LBFGS -PREPROCESS: base -POSTPROCESS: base diff --git a/seisflows/tests/test_data/test_solver/001/DATA/Par_file b/seisflows/tests/test_data/test_solver/001/DATA/Par_file new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/Par_file @@ -0,0 +1 @@ + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE new file mode 120000 index 00000000..93be0227 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE @@ -0,0 +1 @@ +SOURCE_001 \ No newline at end of file diff --git a/seisflows/tests/test_data/DATA/SOURCE_cf893667 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_001 similarity index 81% rename from seisflows/tests/test_data/DATA/SOURCE_cf893667 rename to seisflows/tests/test_data/test_solver/001/DATA/SOURCE_001 index 3170a66b..29f9b7f3 100644 --- a/seisflows/tests/test_data/DATA/SOURCE_cf893667 +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_001 @@ -1,7 +1,7 @@ ## Source 1 source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver -xs = 2500. # source location x in meters -zs = 2500. # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +xs = 362079.06 # source location x in meters +zs = 61219.23 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) ## Source type parameters: # 1 = elastic force or acoustic pressure # 2 = moment tensor @@ -33,24 +33,24 @@ source_type = 1 # 9 = burst, # 10 = Sinus source time function, # 11 = Marmousi Ormsby wavelet -time_function_type = 1 +time_function_type = 2 # If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : # (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) # IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop -name_of_source_file = YYYYYYYY # Only for option 8 : file containing the source wavelet +name_of_source_file = "" # Only for option 8 : file containing the source wavelet burst_band_width = 0. # Only for option 9 : band width of the burst -f0 = 10.0 # dominant source frequency (Hz) if not Dirac or Heaviside -tshift = 0.0 # time shift when multi sources (if one source, must be zero) +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) ## Force source # angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused -anglesource = 0. +anglesource = 0.00 ## Moment tensor # The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. -Mxx = 1. # Mxx component (for a moment tensor source only) -Mzz = 1. # Mzz component (for a moment tensor source only) -Mxz = 0. # Mxz component (for a moment tensor source only) +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) ## Amplification (factor to amplify source time function) -factor = 1.d10 # amplification factor +factor = 1.000e+10 # amplification factor ## Moving source parameters vx = 0.0 # Horizontal source velocity (m/s) vz = 0.0 # Vertical source velocity (m/s) diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_002 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_002 new file mode 100644 index 00000000..8371bd1f --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_002 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 116059.49 # source location x in meters +zs = 105566.07 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_003 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_003 new file mode 100644 index 00000000..1e470574 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_003 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 326286.97 # source location x in meters +zs = 411609.09 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_004 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_004 new file mode 100644 index 00000000..88c63c31 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_004 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 84727.42 # source location x in meters +zs = 333825.53 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_005 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_005 new file mode 100644 index 00000000..9cc4bdb0 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_005 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 192015.27 # source location x in meters +zs = 248162.11 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_006 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_006 new file mode 100644 index 00000000..9c75ff61 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_006 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 335300.42 # source location x in meters +zs = 240097.73 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_007 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_007 new file mode 100644 index 00000000..ce16fcf6 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_007 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 204670.83 # source location x in meters +zs = 441693.44 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_008 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_008 new file mode 100644 index 00000000..3c42bd9b --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_008 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 223849.60 # source location x in meters +zs = 259437.84 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_009 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_009 new file mode 100644 index 00000000..e307422a --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_009 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 197026.87 # source location x in meters +zs = 32902.82 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_010 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_010 new file mode 100644 index 00000000..6d975236 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_010 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 67392.40 # source location x in meters +zs = 183183.89 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_011 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_011 new file mode 100644 index 00000000..9c225ebe --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_011 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 20482.04 # source location x in meters +zs = 443390.92 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_012 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_012 new file mode 100644 index 00000000..7779d01f --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_012 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 350280.81 # source location x in meters +zs = 283883.49 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_013 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_013 new file mode 100644 index 00000000..7b415bab --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_013 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 449852.28 # source location x in meters +zs = 27585.00 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_014 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_014 new file mode 100644 index 00000000..313e804d --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_014 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 141836.41 # source location x in meters +zs = 242463.91 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_015 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_015 new file mode 100644 index 00000000..8bf6ea62 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_015 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 206999.46 # source location x in meters +zs = 105547.63 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_016 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_016 new file mode 100644 index 00000000..fe50abde --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_016 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 423539.80 # source location x in meters +zs = 96379.35 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_017 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_017 new file mode 100644 index 00000000..e00db1f3 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_017 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 135933.15 # source location x in meters +zs = 373123.66 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_018 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_018 new file mode 100644 index 00000000..a2a56c91 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_018 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 299952.04 # source location x in meters +zs = 325462.20 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_019 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_019 new file mode 100644 index 00000000..bcc9bb15 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_019 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 328568.63 # source location x in meters +zs = 163336.65 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_020 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_020 new file mode 100644 index 00000000..7924ad90 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_020 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 140568.70 # source location x in meters +zs = 273985.02 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_021 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_021 new file mode 100644 index 00000000..bd6a9361 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_021 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 186309.01 # source location x in meters +zs = 352472.55 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_022 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_022 new file mode 100644 index 00000000..6b29767f --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_022 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 309676.50 # source location x in meters +zs = 177014.37 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_023 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_023 new file mode 100644 index 00000000..6a3d7b27 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_023 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 301818.07 # source location x in meters +zs = 114690.70 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_024 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_024 new file mode 100644 index 00000000..c22c7771 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_024 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 404440.55 # source location x in meters +zs = 142810.05 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_025 b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_025 new file mode 100644 index 00000000..fbfa72e2 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/SOURCE_025 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 299367.72 # source location x in meters +zs = 240300.65 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/001/DATA/STATIONS b/seisflows/tests/test_data/test_solver/001/DATA/STATIONS new file mode 100644 index 00000000..02d3056f --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/DATA/STATIONS @@ -0,0 +1,2 @@ +S000000 AA 2.43610e+05 2.78904e+05 0.0 0.0 +S000001 AA 3.38981e+05 1.77849e+05 0.0 0.0 diff --git a/seisflows/tests/test_data/test_solver/001/bin/xcombine_sem b/seisflows/tests/test_data/test_solver/001/bin/xcombine_sem new file mode 100755 index 00000000..969a4d93 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/bin/xcombine_sem @@ -0,0 +1,3 @@ +#!/bin/bash -e +echo "xcombine_sem" + diff --git a/seisflows/tests/test_data/test_solver/001/bin/xmeshfem2D b/seisflows/tests/test_data/test_solver/001/bin/xmeshfem2D new file mode 100755 index 00000000..149ca704 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/bin/xmeshfem2D @@ -0,0 +1,2 @@ +#!/bin/bash -e +echo "xmeshfem2D" diff --git a/seisflows/tests/test_data/test_solver/001/bin/xsmooth_sem b/seisflows/tests/test_data/test_solver/001/bin/xsmooth_sem new file mode 100755 index 00000000..376b4aa5 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/bin/xsmooth_sem @@ -0,0 +1,3 @@ +#!/bin/bash -e +echo "xsmooth_sem" + diff --git a/seisflows/tests/test_data/test_solver/001/bin/xspecfem2D b/seisflows/tests/test_data/test_solver/001/bin/xspecfem2D new file mode 100755 index 00000000..e50c2b0b --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/bin/xspecfem2D @@ -0,0 +1,3 @@ +#!/bin/bash -e +echo "xspecfem2D" + diff --git a/seisflows/tests/test_data/test_solver/001/traces/obs/AA.S000000.BXY.semd b/seisflows/tests/test_data/test_solver/001/traces/obs/AA.S000000.BXY.semd new file mode 100644 index 00000000..32de22fb --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/traces/obs/AA.S000000.BXY.semd @@ -0,0 +1,5000 @@ + -48.000000000000000 0.0000000000000000 + -47.939999999999998 0.0000000000000000 + -47.880000000000003 0.0000000000000000 + -47.820000000000000 0.0000000000000000 + -47.759999999999998 0.0000000000000000 + -47.700000000000003 0.0000000000000000 + -47.640000000000001 0.0000000000000000 + -47.579999999999998 0.0000000000000000 + -47.520000000000003 0.0000000000000000 + -47.460000000000001 0.0000000000000000 + -47.399999999999999 0.0000000000000000 + -47.340000000000003 0.0000000000000000 + -47.280000000000001 0.0000000000000000 + -47.219999999999999 0.0000000000000000 + -47.159999999999997 0.0000000000000000 + -47.100000000000001 0.0000000000000000 + -47.039999999999999 0.0000000000000000 + -46.979999999999997 0.0000000000000000 + -46.920000000000002 0.0000000000000000 + -46.859999999999999 0.0000000000000000 + -46.799999999999997 0.0000000000000000 + -46.740000000000002 0.0000000000000000 + -46.680000000000000 0.0000000000000000 + -46.619999999999997 0.0000000000000000 + -46.560000000000002 0.0000000000000000 + -46.500000000000000 0.0000000000000000 + -46.439999999999998 0.0000000000000000 + -46.380000000000003 0.0000000000000000 + -46.320000000000000 0.0000000000000000 + -46.259999999999998 0.0000000000000000 + -46.200000000000003 0.0000000000000000 + -46.140000000000001 0.0000000000000000 + -46.079999999999998 0.0000000000000000 + -46.020000000000003 0.0000000000000000 + -45.960000000000001 0.0000000000000000 + -45.899999999999999 0.0000000000000000 + -45.840000000000003 0.0000000000000000 + -45.780000000000001 0.0000000000000000 + -45.719999999999999 0.0000000000000000 + -45.659999999999997 0.0000000000000000 + -45.600000000000001 0.0000000000000000 + -45.539999999999999 0.0000000000000000 + -45.479999999999997 0.0000000000000000 + -45.420000000000002 0.0000000000000000 + -45.359999999999999 0.0000000000000000 + -45.299999999999997 0.0000000000000000 + -45.240000000000002 0.0000000000000000 + -45.180000000000000 0.0000000000000000 + -45.119999999999997 0.0000000000000000 + -45.060000000000002 0.0000000000000000 + -45.000000000000000 0.0000000000000000 + -44.939999999999998 0.0000000000000000 + -44.880000000000003 0.0000000000000000 + -44.820000000000000 0.0000000000000000 + -44.759999999999998 0.0000000000000000 + -44.700000000000003 0.0000000000000000 + -44.640000000000001 0.0000000000000000 + -44.579999999999998 0.0000000000000000 + -44.520000000000003 0.0000000000000000 + -44.460000000000001 0.0000000000000000 + -44.399999999999999 0.0000000000000000 + -44.340000000000003 0.0000000000000000 + -44.280000000000001 0.0000000000000000 + -44.219999999999999 0.0000000000000000 + -44.159999999999997 0.0000000000000000 + -44.100000000000001 0.0000000000000000 + -44.039999999999999 0.0000000000000000 + -43.980000000000004 0.0000000000000000 + -43.920000000000002 0.0000000000000000 + -43.859999999999999 0.0000000000000000 + -43.799999999999997 0.0000000000000000 + -43.740000000000002 0.0000000000000000 + -43.680000000000000 0.0000000000000000 + -43.619999999999997 0.0000000000000000 + -43.560000000000002 0.0000000000000000 + -43.500000000000000 0.0000000000000000 + -43.439999999999998 0.0000000000000000 + -43.380000000000003 0.0000000000000000 + -43.320000000000000 0.0000000000000000 + -43.259999999999998 0.0000000000000000 + -43.200000000000003 0.0000000000000000 + -43.140000000000001 0.0000000000000000 + -43.079999999999998 0.0000000000000000 + -43.020000000000003 0.0000000000000000 + -42.960000000000001 0.0000000000000000 + -42.899999999999999 0.0000000000000000 + -42.840000000000003 0.0000000000000000 + -42.780000000000001 0.0000000000000000 + -42.719999999999999 0.0000000000000000 + -42.659999999999997 0.0000000000000000 + -42.600000000000001 0.0000000000000000 + -42.539999999999999 0.0000000000000000 + -42.480000000000004 0.0000000000000000 + -42.420000000000002 0.0000000000000000 + -42.359999999999999 0.0000000000000000 + -42.299999999999997 0.0000000000000000 + -42.240000000000002 0.0000000000000000 + -42.180000000000000 0.0000000000000000 + -42.119999999999997 0.0000000000000000 + -42.060000000000002 0.0000000000000000 + -42.000000000000000 0.0000000000000000 + -41.939999999999998 0.0000000000000000 + -41.880000000000003 0.0000000000000000 + -41.820000000000000 0.0000000000000000 + -41.759999999999998 0.0000000000000000 + -41.700000000000003 0.0000000000000000 + -41.640000000000001 0.0000000000000000 + -41.579999999999998 0.0000000000000000 + -41.520000000000003 0.0000000000000000 + -41.460000000000001 0.0000000000000000 + -41.399999999999999 0.0000000000000000 + -41.340000000000003 0.0000000000000000 + -41.280000000000001 0.0000000000000000 + -41.219999999999999 0.0000000000000000 + -41.159999999999997 0.0000000000000000 + -41.100000000000001 0.0000000000000000 + -41.039999999999999 0.0000000000000000 + -40.980000000000004 0.0000000000000000 + -40.920000000000002 0.0000000000000000 + -40.859999999999999 0.0000000000000000 + -40.799999999999997 0.0000000000000000 + -40.740000000000002 0.0000000000000000 + -40.680000000000000 0.0000000000000000 + -40.619999999999997 0.0000000000000000 + -40.560000000000002 0.0000000000000000 + -40.500000000000000 0.0000000000000000 + -40.439999999999998 0.0000000000000000 + -40.380000000000003 0.0000000000000000 + -40.320000000000000 0.0000000000000000 + -40.259999999999998 0.0000000000000000 + -40.200000000000003 0.0000000000000000 + -40.140000000000001 0.0000000000000000 + -40.079999999999998 0.0000000000000000 + -40.020000000000003 0.0000000000000000 + -39.960000000000001 0.0000000000000000 + -39.899999999999999 0.0000000000000000 + -39.840000000000003 0.0000000000000000 + -39.780000000000001 0.0000000000000000 + -39.719999999999999 0.0000000000000000 + -39.659999999999997 0.0000000000000000 + -39.600000000000001 0.0000000000000000 + -39.539999999999999 0.0000000000000000 + -39.480000000000004 0.0000000000000000 + -39.420000000000002 0.0000000000000000 + -39.359999999999999 0.0000000000000000 + -39.299999999999997 0.0000000000000000 + -39.240000000000002 0.0000000000000000 + -39.180000000000000 0.0000000000000000 + -39.120000000000005 0.0000000000000000 + -39.060000000000002 0.0000000000000000 + -39.000000000000000 0.0000000000000000 + -38.939999999999998 0.0000000000000000 + -38.880000000000003 0.0000000000000000 + -38.820000000000000 0.0000000000000000 + -38.759999999999998 0.0000000000000000 + -38.700000000000003 0.0000000000000000 + -38.640000000000001 0.0000000000000000 + -38.579999999999998 0.0000000000000000 + -38.519999999999996 0.0000000000000000 + -38.460000000000001 0.0000000000000000 + -38.399999999999999 0.0000000000000000 + -38.340000000000003 0.0000000000000000 + -38.280000000000001 0.0000000000000000 + -38.219999999999999 0.0000000000000000 + -38.159999999999997 0.0000000000000000 + -38.100000000000001 0.0000000000000000 + -38.039999999999999 0.0000000000000000 + -37.980000000000004 0.0000000000000000 + -37.920000000000002 0.0000000000000000 + -37.859999999999999 0.0000000000000000 + -37.799999999999997 0.0000000000000000 + -37.740000000000002 0.0000000000000000 + -37.680000000000000 0.0000000000000000 + -37.620000000000005 0.0000000000000000 + -37.560000000000002 0.0000000000000000 + -37.500000000000000 0.0000000000000000 + -37.439999999999998 0.0000000000000000 + -37.380000000000003 0.0000000000000000 + -37.320000000000000 0.0000000000000000 + -37.259999999999998 0.0000000000000000 + -37.200000000000003 0.0000000000000000 + -37.140000000000001 0.0000000000000000 + -37.079999999999998 0.0000000000000000 + -37.019999999999996 0.0000000000000000 + -36.960000000000001 0.0000000000000000 + -36.899999999999999 0.0000000000000000 + -36.840000000000003 0.0000000000000000 + -36.780000000000001 0.0000000000000000 + -36.719999999999999 0.0000000000000000 + -36.659999999999997 0.0000000000000000 + -36.600000000000001 0.0000000000000000 + -36.539999999999999 0.0000000000000000 + -36.480000000000004 0.0000000000000000 + -36.420000000000002 0.0000000000000000 + -36.359999999999999 0.0000000000000000 + -36.299999999999997 0.0000000000000000 + -36.240000000000002 0.0000000000000000 + -36.180000000000000 0.0000000000000000 + -36.120000000000005 0.0000000000000000 + -36.060000000000002 0.0000000000000000 + -36.000000000000000 0.0000000000000000 + -35.939999999999998 0.0000000000000000 + -35.880000000000003 0.0000000000000000 + -35.820000000000000 0.0000000000000000 + -35.759999999999998 0.0000000000000000 + -35.700000000000003 0.0000000000000000 + -35.640000000000001 0.0000000000000000 + -35.579999999999998 0.0000000000000000 + -35.519999999999996 0.0000000000000000 + -35.460000000000001 0.0000000000000000 + -35.399999999999999 0.0000000000000000 + -35.340000000000003 0.0000000000000000 + -35.280000000000001 0.0000000000000000 + -35.219999999999999 0.0000000000000000 + -35.159999999999997 0.0000000000000000 + -35.100000000000001 0.0000000000000000 + -35.039999999999999 0.0000000000000000 + -34.980000000000004 0.0000000000000000 + -34.920000000000002 0.0000000000000000 + -34.859999999999999 0.0000000000000000 + -34.799999999999997 0.0000000000000000 + -34.740000000000002 0.0000000000000000 + -34.680000000000000 0.0000000000000000 + -34.620000000000005 0.0000000000000000 + -34.560000000000002 0.0000000000000000 + -34.500000000000000 0.0000000000000000 + -34.439999999999998 0.0000000000000000 + -34.380000000000003 0.0000000000000000 + -34.320000000000000 0.0000000000000000 + -34.259999999999998 0.0000000000000000 + -34.200000000000003 0.0000000000000000 + -34.140000000000001 0.0000000000000000 + -34.079999999999998 0.0000000000000000 + -34.020000000000003 0.0000000000000000 + -33.960000000000001 0.0000000000000000 + -33.899999999999999 0.0000000000000000 + -33.840000000000003 0.0000000000000000 + -33.780000000000001 0.0000000000000000 + -33.719999999999999 0.0000000000000000 + -33.659999999999997 0.0000000000000000 + -33.600000000000001 0.0000000000000000 + -33.539999999999999 0.0000000000000000 + -33.480000000000004 0.0000000000000000 + -33.420000000000002 0.0000000000000000 + -33.359999999999999 0.0000000000000000 + -33.299999999999997 0.0000000000000000 + -33.240000000000002 0.0000000000000000 + -33.180000000000000 0.0000000000000000 + -33.120000000000005 0.0000000000000000 + -33.060000000000002 0.0000000000000000 + -33.000000000000000 0.0000000000000000 + -32.939999999999998 0.0000000000000000 + -32.880000000000003 0.0000000000000000 + -32.820000000000000 0.0000000000000000 + -32.759999999999998 0.0000000000000000 + -32.700000000000003 0.0000000000000000 + -32.640000000000001 0.0000000000000000 + -32.579999999999998 0.0000000000000000 + -32.520000000000003 0.0000000000000000 + -32.460000000000001 0.0000000000000000 + -32.399999999999999 0.0000000000000000 + -32.340000000000003 0.0000000000000000 + -32.280000000000001 0.0000000000000000 + -32.219999999999999 0.0000000000000000 + -32.159999999999997 0.0000000000000000 + -32.100000000000001 0.0000000000000000 + -32.039999999999999 0.0000000000000000 + -31.980000000000000 0.0000000000000000 + -31.920000000000002 0.0000000000000000 + -31.859999999999999 0.0000000000000000 + -31.800000000000001 0.0000000000000000 + -31.740000000000002 0.0000000000000000 + -31.680000000000000 0.0000000000000000 + -31.620000000000001 0.0000000000000000 + -31.560000000000002 0.0000000000000000 + -31.500000000000000 0.0000000000000000 + -31.440000000000001 0.0000000000000000 + -31.379999999999999 0.0000000000000000 + -31.320000000000000 0.0000000000000000 + -31.260000000000002 0.0000000000000000 + -31.199999999999999 0.0000000000000000 + -31.140000000000001 0.0000000000000000 + -31.080000000000002 0.0000000000000000 + -31.020000000000000 0.0000000000000000 + -30.960000000000001 0.0000000000000000 + -30.900000000000002 0.0000000000000000 + -30.840000000000000 0.0000000000000000 + -30.780000000000001 0.0000000000000000 + -30.719999999999999 0.0000000000000000 + -30.660000000000000 0.0000000000000000 + -30.600000000000001 0.0000000000000000 + -30.539999999999999 0.0000000000000000 + -30.480000000000000 0.0000000000000000 + -30.420000000000002 0.0000000000000000 + -30.359999999999999 0.0000000000000000 + -30.300000000000001 0.0000000000000000 + -30.240000000000002 0.0000000000000000 + -30.180000000000000 0.0000000000000000 + -30.120000000000001 0.0000000000000000 + -30.060000000000002 0.0000000000000000 + -30.000000000000000 0.0000000000000000 + -29.940000000000001 0.0000000000000000 + -29.879999999999999 0.0000000000000000 + -29.820000000000000 0.0000000000000000 + -29.760000000000002 0.0000000000000000 + -29.699999999999999 0.0000000000000000 + -29.640000000000001 0.0000000000000000 + -29.580000000000002 0.0000000000000000 + -29.520000000000000 0.0000000000000000 + -29.460000000000001 0.0000000000000000 + -29.400000000000002 0.0000000000000000 + -29.340000000000000 0.0000000000000000 + -29.280000000000001 0.0000000000000000 + -29.220000000000002 0.0000000000000000 + -29.160000000000000 0.0000000000000000 + -29.100000000000001 0.0000000000000000 + -29.039999999999999 0.0000000000000000 + -28.980000000000000 0.0000000000000000 + -28.920000000000002 0.0000000000000000 + -28.859999999999999 0.0000000000000000 + -28.800000000000001 0.0000000000000000 + -28.740000000000002 0.0000000000000000 + -28.680000000000000 0.0000000000000000 + -28.620000000000001 0.0000000000000000 + -28.560000000000002 0.0000000000000000 + -28.500000000000000 0.0000000000000000 + -28.440000000000001 0.0000000000000000 + -28.379999999999999 0.0000000000000000 + -28.320000000000000 0.0000000000000000 + -28.260000000000002 0.0000000000000000 + -28.199999999999999 0.0000000000000000 + -28.140000000000001 0.0000000000000000 + -28.080000000000002 0.0000000000000000 + -28.020000000000000 0.0000000000000000 + -27.960000000000001 0.0000000000000000 + -27.900000000000002 0.0000000000000000 + -27.840000000000000 0.0000000000000000 + -27.780000000000001 0.0000000000000000 + -27.720000000000002 0.0000000000000000 + -27.660000000000000 0.0000000000000000 + -27.600000000000001 0.0000000000000000 + -27.539999999999999 0.0000000000000000 + -27.480000000000000 0.0000000000000000 + -27.420000000000002 0.0000000000000000 + -27.359999999999999 0.0000000000000000 + -27.300000000000001 0.0000000000000000 + -27.240000000000002 0.0000000000000000 + -27.180000000000000 0.0000000000000000 + -27.120000000000001 0.0000000000000000 + -27.060000000000002 0.0000000000000000 + -27.000000000000000 0.0000000000000000 + -26.940000000000001 0.0000000000000000 + -26.880000000000003 0.0000000000000000 + -26.820000000000000 0.0000000000000000 + -26.760000000000002 0.0000000000000000 + -26.699999999999999 0.0000000000000000 + -26.640000000000001 0.0000000000000000 + -26.580000000000002 0.0000000000000000 + -26.520000000000000 0.0000000000000000 + -26.460000000000001 0.0000000000000000 + -26.400000000000002 0.0000000000000000 + -26.340000000000000 0.0000000000000000 + -26.280000000000001 0.0000000000000000 + -26.220000000000002 0.0000000000000000 + -26.160000000000000 0.0000000000000000 + -26.100000000000001 0.0000000000000000 + -26.039999999999999 0.0000000000000000 + -25.980000000000000 0.0000000000000000 + -25.920000000000002 0.0000000000000000 + -25.859999999999999 0.0000000000000000 + -25.800000000000001 0.0000000000000000 + -25.740000000000002 0.0000000000000000 + -25.680000000000000 0.0000000000000000 + -25.620000000000001 0.0000000000000000 + -25.560000000000002 0.0000000000000000 + -25.500000000000000 0.0000000000000000 + -25.440000000000001 0.0000000000000000 + -25.380000000000003 0.0000000000000000 + -25.320000000000000 0.0000000000000000 + -25.260000000000002 0.0000000000000000 + -25.199999999999999 0.0000000000000000 + -25.140000000000001 0.0000000000000000 + -25.080000000000002 0.0000000000000000 + -25.020000000000000 0.0000000000000000 + -24.960000000000001 0.0000000000000000 + -24.900000000000002 0.0000000000000000 + -24.840000000000000 0.0000000000000000 + -24.780000000000001 0.0000000000000000 + -24.720000000000002 0.0000000000000000 + -24.660000000000000 0.0000000000000000 + -24.600000000000001 0.0000000000000000 + -24.539999999999999 0.0000000000000000 + -24.480000000000000 0.0000000000000000 + -24.420000000000002 0.0000000000000000 + -24.359999999999999 0.0000000000000000 + -24.300000000000001 0.0000000000000000 + -24.240000000000002 0.0000000000000000 + -24.180000000000000 0.0000000000000000 + -24.120000000000001 0.0000000000000000 + -24.060000000000002 0.0000000000000000 + -24.000000000000000 0.0000000000000000 + -23.940000000000001 0.0000000000000000 + -23.880000000000003 0.0000000000000000 + -23.820000000000000 0.0000000000000000 + -23.760000000000002 0.0000000000000000 + -23.699999999999999 0.0000000000000000 + -23.640000000000001 0.0000000000000000 + -23.580000000000002 0.0000000000000000 + -23.520000000000000 0.0000000000000000 + -23.460000000000001 0.0000000000000000 + -23.400000000000002 0.0000000000000000 + -23.340000000000000 0.0000000000000000 + -23.280000000000001 0.0000000000000000 + -23.220000000000002 0.0000000000000000 + -23.160000000000000 0.0000000000000000 + -23.100000000000001 0.0000000000000000 + -23.039999999999999 0.0000000000000000 + -22.980000000000000 0.0000000000000000 + -22.920000000000002 0.0000000000000000 + -22.859999999999999 0.0000000000000000 + -22.800000000000001 0.0000000000000000 + -22.740000000000002 0.0000000000000000 + -22.680000000000000 0.0000000000000000 + -22.620000000000001 0.0000000000000000 + -22.560000000000002 0.0000000000000000 + -22.500000000000000 0.0000000000000000 + -22.440000000000001 0.0000000000000000 + -22.380000000000003 0.0000000000000000 + -22.320000000000000 0.0000000000000000 + -22.260000000000002 0.0000000000000000 + -22.199999999999999 0.0000000000000000 + -22.140000000000001 0.0000000000000000 + -22.080000000000002 0.0000000000000000 + -22.020000000000000 0.0000000000000000 + -21.960000000000001 0.0000000000000000 + -21.900000000000002 0.0000000000000000 + -21.840000000000000 0.0000000000000000 + -21.780000000000001 0.0000000000000000 + -21.720000000000002 0.0000000000000000 + -21.660000000000000 0.0000000000000000 + -21.600000000000001 0.0000000000000000 + -21.540000000000003 0.0000000000000000 + -21.480000000000000 0.0000000000000000 + -21.420000000000002 0.0000000000000000 + -21.359999999999999 0.0000000000000000 + -21.300000000000001 0.0000000000000000 + -21.240000000000002 0.0000000000000000 + -21.180000000000000 0.0000000000000000 + -21.120000000000001 0.0000000000000000 + -21.060000000000002 0.0000000000000000 + -21.000000000000000 0.0000000000000000 + -20.940000000000001 0.0000000000000000 + -20.880000000000003 0.0000000000000000 + -20.820000000000000 0.0000000000000000 + -20.760000000000002 0.0000000000000000 + -20.699999999999999 0.0000000000000000 + -20.640000000000001 0.0000000000000000 + -20.580000000000002 0.0000000000000000 + -20.520000000000000 0.0000000000000000 + -20.460000000000001 0.0000000000000000 + -20.400000000000002 0.0000000000000000 + -20.340000000000000 0.0000000000000000 + -20.280000000000001 0.0000000000000000 + -20.220000000000002 0.0000000000000000 + -20.160000000000000 0.0000000000000000 + -20.100000000000001 0.0000000000000000 + -20.040000000000003 0.0000000000000000 + -19.980000000000000 0.0000000000000000 + -19.920000000000002 0.0000000000000000 + -19.859999999999999 0.0000000000000000 + -19.800000000000001 0.0000000000000000 + -19.740000000000002 0.0000000000000000 + -19.680000000000000 0.0000000000000000 + -19.620000000000001 0.0000000000000000 + -19.560000000000002 0.0000000000000000 + -19.500000000000000 0.0000000000000000 + -19.440000000000001 0.0000000000000000 + -19.380000000000003 0.0000000000000000 + -19.320000000000000 0.0000000000000000 + -19.260000000000002 0.0000000000000000 + -19.200000000000003 0.0000000000000000 + -19.140000000000001 0.0000000000000000 + -19.080000000000002 0.0000000000000000 + -19.020000000000000 0.0000000000000000 + -18.960000000000001 0.0000000000000000 + -18.900000000000002 0.0000000000000000 + -18.840000000000000 0.0000000000000000 + -18.780000000000001 0.0000000000000000 + -18.720000000000002 0.0000000000000000 + -18.660000000000000 0.0000000000000000 + -18.600000000000001 0.0000000000000000 + -18.540000000000003 0.0000000000000000 + -18.480000000000000 0.0000000000000000 + -18.420000000000002 0.0000000000000000 + -18.359999999999999 0.0000000000000000 + -18.300000000000001 0.0000000000000000 + -18.240000000000002 0.0000000000000000 + -18.180000000000000 0.0000000000000000 + -18.120000000000001 0.0000000000000000 + -18.060000000000002 0.0000000000000000 + -18.000000000000000 0.0000000000000000 + -17.940000000000001 0.0000000000000000 + -17.880000000000003 0.0000000000000000 + -17.820000000000000 0.0000000000000000 + -17.760000000000002 0.0000000000000000 + -17.700000000000003 0.0000000000000000 + -17.640000000000001 0.0000000000000000 + -17.580000000000002 0.0000000000000000 + -17.520000000000000 0.0000000000000000 + -17.460000000000001 0.0000000000000000 + -17.400000000000002 0.0000000000000000 + -17.340000000000000 0.0000000000000000 + -17.280000000000001 0.0000000000000000 + -17.220000000000002 0.0000000000000000 + -17.160000000000000 0.0000000000000000 + -17.100000000000001 0.0000000000000000 + -17.040000000000003 0.0000000000000000 + -16.980000000000000 0.0000000000000000 + -16.920000000000002 0.0000000000000000 + -16.859999999999999 0.0000000000000000 + -16.800000000000001 0.0000000000000000 + -16.740000000000002 0.0000000000000000 + -16.680000000000000 0.0000000000000000 + -16.620000000000001 0.0000000000000000 + -16.560000000000002 0.0000000000000000 + -16.500000000000000 0.0000000000000000 + -16.440000000000001 0.0000000000000000 + -16.380000000000003 0.0000000000000000 + -16.320000000000000 0.0000000000000000 + -16.260000000000002 0.0000000000000000 + -16.200000000000003 0.0000000000000000 + -16.140000000000001 0.0000000000000000 + -16.080000000000002 0.0000000000000000 + -16.020000000000000 0.0000000000000000 + -15.960000000000001 0.0000000000000000 + -15.899999999999999 0.0000000000000000 + -15.840000000000003 0.0000000000000000 + -15.780000000000001 0.0000000000000000 + -15.719999999999999 0.0000000000000000 + -15.660000000000004 0.0000000000000000 + -15.600000000000001 0.0000000000000000 + -15.539999999999999 0.0000000000000000 + -15.480000000000004 0.0000000000000000 + -15.420000000000002 0.0000000000000000 + -15.359999999999999 0.0000000000000000 + -15.300000000000004 0.0000000000000000 + -15.240000000000002 0.0000000000000000 + -15.180000000000000 0.0000000000000000 + -15.120000000000005 0.0000000000000000 + -15.060000000000002 0.0000000000000000 + -15.000000000000000 0.0000000000000000 + -14.939999999999998 0.0000000000000000 + -14.880000000000003 0.0000000000000000 + -14.820000000000000 0.0000000000000000 + -14.759999999999998 0.0000000000000000 + -14.700000000000003 0.0000000000000000 + -14.640000000000001 0.0000000000000000 + -14.579999999999998 0.0000000000000000 + -14.520000000000003 0.0000000000000000 + -14.460000000000001 0.0000000000000000 + -14.399999999999999 0.0000000000000000 + -14.340000000000003 0.0000000000000000 + -14.280000000000001 0.0000000000000000 + -14.219999999999999 0.0000000000000000 + -14.160000000000004 0.0000000000000000 + -14.100000000000001 0.0000000000000000 + -14.039999999999999 0.0000000000000000 + -13.980000000000004 0.0000000000000000 + -13.920000000000002 0.0000000000000000 + -13.859999999999999 0.0000000000000000 + -13.800000000000004 0.0000000000000000 + -13.740000000000002 0.0000000000000000 + -13.680000000000000 0.0000000000000000 + -13.620000000000005 0.0000000000000000 + -13.560000000000002 0.0000000000000000 + -13.500000000000000 0.0000000000000000 + -13.439999999999998 0.0000000000000000 + -13.380000000000003 0.0000000000000000 + -13.320000000000000 0.0000000000000000 + -13.259999999999998 0.0000000000000000 + -13.200000000000003 0.0000000000000000 + -13.140000000000001 0.0000000000000000 + -13.079999999999998 0.0000000000000000 + -13.020000000000003 0.0000000000000000 + -12.960000000000001 0.0000000000000000 + -12.899999999999999 0.0000000000000000 + -12.840000000000003 0.0000000000000000 + -12.780000000000001 0.0000000000000000 + -12.719999999999999 0.0000000000000000 + -12.660000000000004 0.0000000000000000 + -12.600000000000001 0.0000000000000000 + -12.539999999999999 0.0000000000000000 + -12.480000000000004 0.0000000000000000 + -12.420000000000002 0.0000000000000000 + -12.359999999999999 0.0000000000000000 + -12.300000000000004 0.0000000000000000 + -12.240000000000002 0.0000000000000000 + -12.180000000000000 0.0000000000000000 + -12.120000000000005 0.0000000000000000 + -12.060000000000002 0.0000000000000000 + -12.000000000000000 0.0000000000000000 + -11.940000000000005 0.0000000000000000 + -11.880000000000003 0.0000000000000000 + -11.820000000000000 0.0000000000000000 + -11.759999999999998 0.0000000000000000 + -11.700000000000003 0.0000000000000000 + -11.640000000000001 0.0000000000000000 + -11.579999999999998 0.0000000000000000 + -11.520000000000003 0.0000000000000000 + -11.460000000000001 0.0000000000000000 + -11.399999999999999 0.0000000000000000 + -11.340000000000003 0.0000000000000000 + -11.280000000000001 0.0000000000000000 + -11.219999999999999 0.0000000000000000 + -11.160000000000004 0.0000000000000000 + -11.100000000000001 0.0000000000000000 + -11.039999999999999 0.0000000000000000 + -10.980000000000004 0.0000000000000000 + -10.920000000000002 0.0000000000000000 + -10.859999999999999 0.0000000000000000 + -10.800000000000004 0.0000000000000000 + -10.740000000000002 0.0000000000000000 + -10.680000000000000 0.0000000000000000 + -10.620000000000005 0.0000000000000000 + -10.560000000000002 0.0000000000000000 + -10.500000000000000 0.0000000000000000 + -10.440000000000005 0.0000000000000000 + -10.380000000000003 0.0000000000000000 + -10.320000000000000 0.0000000000000000 + -10.259999999999998 0.0000000000000000 + -10.200000000000003 0.0000000000000000 + -10.140000000000001 0.0000000000000000 + -10.079999999999998 0.0000000000000000 + -10.020000000000003 0.0000000000000000 + -9.9600000000000009 0.0000000000000000 + -9.8999999999999986 0.0000000000000000 + -9.8400000000000034 0.0000000000000000 + -9.7800000000000011 0.0000000000000000 + -9.7199999999999989 0.0000000000000000 + -9.6600000000000037 0.0000000000000000 + -9.6000000000000014 0.0000000000000000 + -9.5399999999999991 0.0000000000000000 + -9.4800000000000040 0.0000000000000000 + -9.4200000000000017 0.0000000000000000 + -9.3599999999999994 0.0000000000000000 + -9.3000000000000043 0.0000000000000000 + -9.2400000000000020 0.0000000000000000 + -9.1799999999999997 0.0000000000000000 + -9.1200000000000045 0.0000000000000000 + -9.0600000000000023 0.0000000000000000 + -9.0000000000000000 0.0000000000000000 + -8.9400000000000048 0.0000000000000000 + -8.8800000000000026 0.0000000000000000 + -8.8200000000000003 0.0000000000000000 + -8.7599999999999980 0.0000000000000000 + -8.7000000000000028 0.0000000000000000 + -8.6400000000000006 0.0000000000000000 + -8.5799999999999983 0.0000000000000000 + -8.5200000000000031 0.0000000000000000 + -8.4600000000000009 0.0000000000000000 + -8.3999999999999986 0.0000000000000000 + -8.3400000000000034 0.0000000000000000 + -8.2800000000000011 0.0000000000000000 + -8.2199999999999989 0.0000000000000000 + -8.1600000000000037 0.0000000000000000 + -8.1000000000000014 0.0000000000000000 + -8.0399999999999991 0.0000000000000000 + -7.9800000000000040 0.0000000000000000 + -7.9200000000000017 0.0000000000000000 + -7.8599999999999994 0.0000000000000000 + -7.8000000000000043 0.0000000000000000 + -7.7400000000000020 0.0000000000000000 + -7.6799999999999997 0.0000000000000000 + -7.6200000000000045 0.0000000000000000 + -7.5600000000000023 0.0000000000000000 + -7.5000000000000000 0.0000000000000000 + -7.4400000000000048 0.0000000000000000 + -7.3800000000000026 0.0000000000000000 + -7.3200000000000003 0.0000000000000000 + -7.2599999999999980 0.0000000000000000 + -7.2000000000000028 0.0000000000000000 + -7.1400000000000006 0.0000000000000000 + -7.0799999999999983 0.0000000000000000 + -7.0200000000000031 0.0000000000000000 + -6.9600000000000009 0.0000000000000000 + -6.8999999999999986 0.0000000000000000 + -6.8400000000000034 0.0000000000000000 + -6.7800000000000011 0.0000000000000000 + -6.7199999999999989 0.0000000000000000 + -6.6600000000000037 0.0000000000000000 + -6.6000000000000014 0.0000000000000000 + -6.5399999999999991 0.0000000000000000 + -6.4800000000000040 0.0000000000000000 + -6.4200000000000017 0.0000000000000000 + -6.3599999999999994 0.0000000000000000 + -6.3000000000000043 0.0000000000000000 + -6.2400000000000020 0.0000000000000000 + -6.1799999999999997 0.0000000000000000 + -6.1200000000000045 0.0000000000000000 + -6.0600000000000023 0.0000000000000000 + -6.0000000000000000 0.0000000000000000 + -5.9400000000000048 0.0000000000000000 + -5.8800000000000026 0.0000000000000000 + -5.8200000000000003 0.0000000000000000 + -5.7600000000000051 0.0000000000000000 + -5.7000000000000028 0.0000000000000000 + -5.6400000000000006 0.0000000000000000 + -5.5799999999999983 0.0000000000000000 + -5.5200000000000031 0.0000000000000000 + -5.4600000000000009 0.0000000000000000 + -5.3999999999999986 0.0000000000000000 + -5.3400000000000034 0.0000000000000000 + -5.2800000000000011 0.0000000000000000 + -5.2199999999999989 0.0000000000000000 + -5.1600000000000037 0.0000000000000000 + -5.1000000000000014 0.0000000000000000 + -5.0399999999999991 0.0000000000000000 + -4.9800000000000040 0.0000000000000000 + -4.9200000000000017 0.0000000000000000 + -4.8599999999999994 0.0000000000000000 + -4.8000000000000043 0.0000000000000000 + -4.7400000000000020 0.0000000000000000 + -4.6799999999999997 0.0000000000000000 + -4.6200000000000045 0.0000000000000000 + -4.5600000000000023 0.0000000000000000 + -4.5000000000000000 0.0000000000000000 + -4.4400000000000048 0.0000000000000000 + -4.3800000000000026 0.0000000000000000 + -4.3200000000000003 0.0000000000000000 + -4.2600000000000051 0.0000000000000000 + -4.2000000000000028 0.0000000000000000 + -4.1400000000000006 0.0000000000000000 + -4.0799999999999983 0.0000000000000000 + -4.0200000000000031 0.0000000000000000 + -3.9600000000000009 0.0000000000000000 + -3.8999999999999986 0.0000000000000000 + -3.8400000000000034 0.0000000000000000 + -3.7800000000000011 0.0000000000000000 + -3.7199999999999989 0.0000000000000000 + -3.6600000000000037 0.0000000000000000 + -3.6000000000000014 0.0000000000000000 + -3.5399999999999991 0.0000000000000000 + -3.4800000000000040 0.0000000000000000 + -3.4200000000000017 0.0000000000000000 + -3.3599999999999994 0.0000000000000000 + -3.3000000000000043 0.0000000000000000 + -3.2400000000000020 0.0000000000000000 + -3.1799999999999997 0.0000000000000000 + -3.1200000000000045 0.0000000000000000 + -3.0600000000000023 0.0000000000000000 + -3.0000000000000000 0.0000000000000000 + -2.9400000000000048 0.0000000000000000 + -2.8800000000000026 0.0000000000000000 + -2.8200000000000003 0.0000000000000000 + -2.7600000000000051 0.0000000000000000 + -2.7000000000000028 0.0000000000000000 + -2.6400000000000006 0.0000000000000000 + -2.5799999999999983 0.0000000000000000 + -2.5200000000000031 0.0000000000000000 + -2.4600000000000009 0.0000000000000000 + -2.3999999999999986 0.0000000000000000 + -2.3400000000000034 0.0000000000000000 + -2.2800000000000011 0.0000000000000000 + -2.2199999999999989 0.0000000000000000 + -2.1600000000000037 0.0000000000000000 + -2.1000000000000014 0.0000000000000000 + -2.0399999999999991 0.0000000000000000 + -1.9800000000000040 0.0000000000000000 + -1.9200000000000017 0.0000000000000000 + -1.8599999999999994 0.0000000000000000 + -1.8000000000000043 0.0000000000000000 + -1.7400000000000020 0.0000000000000000 + -1.6799999999999997 0.0000000000000000 + -1.6200000000000045 0.0000000000000000 + -1.5600000000000023 0.0000000000000000 + -1.5000000000000000 0.0000000000000000 + -1.4400000000000048 0.0000000000000000 + -1.3800000000000026 0.0000000000000000 + -1.3200000000000003 0.0000000000000000 + -1.2600000000000051 0.0000000000000000 + -1.2000000000000028 0.0000000000000000 + -1.1400000000000006 0.0000000000000000 + -1.0799999999999983 0.0000000000000000 + -1.0200000000000031 0.0000000000000000 + -0.96000000000000085 0.0000000000000000 + -0.89999999999999858 0.0000000000000000 + -0.84000000000000341 0.0000000000000000 + -0.78000000000000114 0.0000000000000000 + -0.71999999999999886 0.0000000000000000 + -0.66000000000000369 0.0000000000000000 + -0.60000000000000142 0.0000000000000000 + -0.53999999999999915 0.0000000000000000 + -0.48000000000000398 0.0000000000000000 + -0.42000000000000171 0.0000000000000000 + -0.35999999999999943 0.0000000000000000 + -0.30000000000000426 0.0000000000000000 + -0.24000000000000199 0.0000000000000000 + -0.17999999999999972 0.0000000000000000 + -0.12000000000000455 0.0000000000000000 + -6.0000000000002274E-002 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 + 5.9999999999995168E-002 0.0000000000000000 + 0.11999999999999744 0.0000000000000000 + 0.17999999999999972 0.0000000000000000 + 0.23999999999999488 0.0000000000000000 + 0.29999999999999716 0.0000000000000000 + 0.35999999999999943 0.0000000000000000 + 0.42000000000000171 0.0000000000000000 + 0.47999999999999687 0.0000000000000000 + 0.53999999999999915 0.0000000000000000 + 0.60000000000000142 0.0000000000000000 + 0.65999999999999659 0.0000000000000000 + 0.71999999999999886 0.0000000000000000 + 0.78000000000000114 0.0000000000000000 + 0.83999999999999631 0.0000000000000000 + 0.89999999999999858 0.0000000000000000 + 0.96000000000000085 0.0000000000000000 + 1.0199999999999960 0.0000000000000000 + 1.0799999999999983 0.0000000000000000 + 1.1400000000000006 0.0000000000000000 + 1.1999999999999957 0.0000000000000000 + 1.2599999999999980 0.0000000000000000 + 1.3200000000000003 0.0000000000000000 + 1.3799999999999955 0.0000000000000000 + 1.4399999999999977 0.0000000000000000 + 1.5000000000000000 0.0000000000000000 + 1.5599999999999952 0.0000000000000000 + 1.6199999999999974 0.0000000000000000 + 1.6799999999999997 0.0000000000000000 + 1.7399999999999949 0.0000000000000000 + 1.7999999999999972 0.0000000000000000 + 1.8599999999999994 0.0000000000000000 + 1.9200000000000017 0.0000000000000000 + 1.9799999999999969 0.0000000000000000 + 2.0399999999999991 0.0000000000000000 + 2.1000000000000014 0.0000000000000000 + 2.1599999999999966 0.0000000000000000 + 2.2199999999999989 0.0000000000000000 + 2.2800000000000011 0.0000000000000000 + 2.3399999999999963 0.0000000000000000 + 2.3999999999999986 0.0000000000000000 + 2.4600000000000009 0.0000000000000000 + 2.5199999999999960 0.0000000000000000 + 2.5799999999999983 0.0000000000000000 + 2.6400000000000006 0.0000000000000000 + 2.6999999999999957 0.0000000000000000 + 2.7599999999999980 0.0000000000000000 + 2.8200000000000003 0.0000000000000000 + 2.8799999999999955 0.0000000000000000 + 2.9399999999999977 0.0000000000000000 + 3.0000000000000000 0.0000000000000000 + 3.0599999999999952 0.0000000000000000 + 3.1199999999999974 0.0000000000000000 + 3.1799999999999997 0.0000000000000000 + 3.2399999999999949 0.0000000000000000 + 3.2999999999999972 0.0000000000000000 + 3.3599999999999994 0.0000000000000000 + 3.4199999999999946 0.0000000000000000 + 3.4799999999999969 0.0000000000000000 + 3.5399999999999991 0.0000000000000000 + 3.6000000000000014 0.0000000000000000 + 3.6599999999999966 0.0000000000000000 + 3.7199999999999989 0.0000000000000000 + 3.7800000000000011 0.0000000000000000 + 3.8399999999999963 0.0000000000000000 + 3.8999999999999986 0.0000000000000000 + 3.9600000000000009 0.0000000000000000 + 4.0199999999999960 0.0000000000000000 + 4.0799999999999983 0.0000000000000000 + 4.1400000000000006 0.0000000000000000 + 4.1999999999999957 0.0000000000000000 + 4.2599999999999980 0.0000000000000000 + 4.3200000000000003 0.0000000000000000 + 4.3799999999999955 0.0000000000000000 + 4.4399999999999977 0.0000000000000000 + 4.5000000000000000 0.0000000000000000 + 4.5599999999999952 0.0000000000000000 + 4.6199999999999974 0.0000000000000000 + 4.6799999999999997 0.0000000000000000 + 4.7399999999999949 0.0000000000000000 + 4.7999999999999972 0.0000000000000000 + 4.8599999999999994 0.0000000000000000 + 4.9199999999999946 0.0000000000000000 + 4.9799999999999969 0.0000000000000000 + 5.0399999999999991 0.0000000000000000 + 5.1000000000000014 0.0000000000000000 + 5.1599999999999966 0.0000000000000000 + 5.2199999999999989 0.0000000000000000 + 5.2800000000000011 0.0000000000000000 + 5.3399999999999963 0.0000000000000000 + 5.3999999999999986 0.0000000000000000 + 5.4600000000000009 0.0000000000000000 + 5.5199999999999960 0.0000000000000000 + 5.5799999999999983 0.0000000000000000 + 5.6400000000000006 0.0000000000000000 + 5.6999999999999957 0.0000000000000000 + 5.7599999999999980 0.0000000000000000 + 5.8200000000000003 0.0000000000000000 + 5.8799999999999955 0.0000000000000000 + 5.9399999999999977 0.0000000000000000 + 6.0000000000000000 0.0000000000000000 + 6.0599999999999952 0.0000000000000000 + 6.1199999999999974 0.0000000000000000 + 6.1799999999999997 0.0000000000000000 + 6.2399999999999949 0.0000000000000000 + 6.2999999999999972 0.0000000000000000 + 6.3599999999999994 0.0000000000000000 + 6.4199999999999946 0.0000000000000000 + 6.4799999999999969 0.0000000000000000 + 6.5399999999999991 0.0000000000000000 + 6.6000000000000014 0.0000000000000000 + 6.6599999999999966 0.0000000000000000 + 6.7199999999999989 0.0000000000000000 + 6.7800000000000011 0.0000000000000000 + 6.8399999999999963 0.0000000000000000 + 6.8999999999999986 0.0000000000000000 + 6.9600000000000009 0.0000000000000000 + 7.0199999999999960 0.0000000000000000 + 7.0799999999999983 0.0000000000000000 + 7.1400000000000006 0.0000000000000000 + 7.1999999999999957 0.0000000000000000 + 7.2599999999999980 0.0000000000000000 + 7.3200000000000003 0.0000000000000000 + 7.3799999999999955 0.0000000000000000 + 7.4399999999999977 0.0000000000000000 + 7.5000000000000000 0.0000000000000000 + 7.5599999999999952 0.0000000000000000 + 7.6199999999999974 0.0000000000000000 + 7.6799999999999997 0.0000000000000000 + 7.7399999999999949 0.0000000000000000 + 7.7999999999999972 0.0000000000000000 + 7.8599999999999994 0.0000000000000000 + 7.9199999999999946 0.0000000000000000 + 7.9799999999999969 0.0000000000000000 + 8.0399999999999991 0.0000000000000000 + 8.1000000000000014 0.0000000000000000 + 8.1599999999999966 0.0000000000000000 + 8.2199999999999989 0.0000000000000000 + 8.2800000000000011 0.0000000000000000 + 8.3399999999999963 0.0000000000000000 + 8.3999999999999986 0.0000000000000000 + 8.4600000000000009 0.0000000000000000 + 8.5199999999999960 0.0000000000000000 + 8.5799999999999983 0.0000000000000000 + 8.6400000000000006 0.0000000000000000 + 8.6999999999999957 0.0000000000000000 + 8.7599999999999980 0.0000000000000000 + 8.8200000000000003 0.0000000000000000 + 8.8799999999999955 0.0000000000000000 + 8.9399999999999977 0.0000000000000000 + 9.0000000000000000 0.0000000000000000 + 9.0599999999999952 0.0000000000000000 + 9.1199999999999974 0.0000000000000000 + 9.1799999999999997 0.0000000000000000 + 9.2399999999999949 0.0000000000000000 + 9.2999999999999972 0.0000000000000000 + 9.3599999999999994 0.0000000000000000 + 9.4199999999999946 0.0000000000000000 + 9.4799999999999969 0.0000000000000000 + 9.5399999999999991 0.0000000000000000 + 9.5999999999999943 0.0000000000000000 + 9.6599999999999966 0.0000000000000000 + 9.7199999999999989 0.0000000000000000 + 9.7800000000000011 0.0000000000000000 + 9.8399999999999963 0.0000000000000000 + 9.8999999999999986 0.0000000000000000 + 9.9600000000000009 0.0000000000000000 + 10.019999999999996 0.0000000000000000 + 10.079999999999998 0.0000000000000000 + 10.140000000000001 0.0000000000000000 + 10.199999999999996 0.0000000000000000 + 10.259999999999998 0.0000000000000000 + 10.320000000000000 0.0000000000000000 + 10.379999999999995 0.0000000000000000 + 10.439999999999998 0.0000000000000000 + 10.500000000000000 0.0000000000000000 + 10.559999999999995 0.0000000000000000 + 10.619999999999997 0.0000000000000000 + 10.680000000000000 0.0000000000000000 + 10.739999999999995 0.0000000000000000 + 10.799999999999997 0.0000000000000000 + 10.859999999999999 0.0000000000000000 + 10.919999999999995 0.0000000000000000 + 10.979999999999997 0.0000000000000000 + 11.039999999999999 0.0000000000000000 + 11.099999999999994 0.0000000000000000 + 11.159999999999997 0.0000000000000000 + 11.219999999999999 0.0000000000000000 + 11.280000000000001 0.0000000000000000 + 11.339999999999996 0.0000000000000000 + 11.399999999999999 0.0000000000000000 + 11.460000000000001 0.0000000000000000 + 11.519999999999996 0.0000000000000000 + 11.579999999999998 0.0000000000000000 + 11.640000000000001 0.0000000000000000 + 11.699999999999996 0.0000000000000000 + 11.759999999999998 0.0000000000000000 + 11.820000000000000 0.0000000000000000 + 11.879999999999995 0.0000000000000000 + 11.939999999999998 0.0000000000000000 + 12.000000000000000 0.0000000000000000 + 12.059999999999995 0.0000000000000000 + 12.119999999999997 0.0000000000000000 + 12.180000000000000 0.0000000000000000 + 12.239999999999995 0.0000000000000000 + 12.299999999999997 0.0000000000000000 + 12.359999999999999 0.0000000000000000 + 12.419999999999995 0.0000000000000000 + 12.479999999999997 0.0000000000000000 + 12.539999999999999 0.0000000000000000 + 12.599999999999994 0.0000000000000000 + 12.659999999999997 0.0000000000000000 + 12.719999999999999 0.0000000000000000 + 12.780000000000001 0.0000000000000000 + 12.839999999999996 0.0000000000000000 + 12.899999999999999 0.0000000000000000 + 12.960000000000001 0.0000000000000000 + 13.019999999999996 0.0000000000000000 + 13.079999999999998 0.0000000000000000 + 13.140000000000001 0.0000000000000000 + 13.199999999999996 0.0000000000000000 + 13.259999999999998 0.0000000000000000 + 13.320000000000000 0.0000000000000000 + 13.379999999999995 0.0000000000000000 + 13.439999999999998 0.0000000000000000 + 13.500000000000000 0.0000000000000000 + 13.559999999999995 0.0000000000000000 + 13.619999999999997 0.0000000000000000 + 13.680000000000000 0.0000000000000000 + 13.739999999999995 0.0000000000000000 + 13.799999999999997 0.0000000000000000 + 13.859999999999999 0.0000000000000000 + 13.919999999999995 0.0000000000000000 + 13.979999999999997 0.0000000000000000 + 14.039999999999999 0.0000000000000000 + 14.099999999999994 0.0000000000000000 + 14.159999999999997 0.0000000000000000 + 14.219999999999999 0.0000000000000000 + 14.280000000000001 0.0000000000000000 + 14.339999999999996 0.0000000000000000 + 14.399999999999999 0.0000000000000000 + 14.460000000000001 0.0000000000000000 + 14.519999999999996 0.0000000000000000 + 14.579999999999998 0.0000000000000000 + 14.640000000000001 0.0000000000000000 + 14.699999999999996 0.0000000000000000 + 14.759999999999998 0.0000000000000000 + 14.820000000000000 0.0000000000000000 + 14.879999999999995 0.0000000000000000 + 14.939999999999998 0.0000000000000000 + 15.000000000000000 0.0000000000000000 + 15.059999999999995 0.0000000000000000 + 15.119999999999997 0.0000000000000000 + 15.180000000000000 0.0000000000000000 + 15.239999999999995 0.0000000000000000 + 15.299999999999997 0.0000000000000000 + 15.359999999999999 0.0000000000000000 + 15.419999999999995 0.0000000000000000 + 15.479999999999997 0.0000000000000000 + 15.539999999999999 -1.6181395570366952E-040 + 15.599999999999994 -5.2342064428317742E-040 + 15.659999999999997 -1.1014530232203039E-039 + 15.719999999999999 -1.8866303396574425E-039 + 15.780000000000001 -2.8429598880172197E-039 + 15.839999999999996 -3.7992897183542585E-039 + 15.899999999999999 -4.9036302592274776E-039 + 15.960000000000001 -6.1589501672468121E-039 + 16.019999999999996 -7.1840615830925036E-039 + 16.079999999999998 -7.1867272624710444E-039 + 16.140000000000001 -6.2966594980236854E-039 + 16.200000000000003 -4.7079327175220709E-039 + 16.259999999999991 -2.5459556422345408E-039 + 16.319999999999993 3.5205765568813153E-040 + 16.379999999999995 3.9682368672931863E-039 + 16.439999999999998 8.2001169756250162E-039 + 16.500000000000000 1.2858391185381855E-038 + 16.560000000000002 1.7089880482242040E-038 + 16.620000000000005 2.0578857551593770E-038 + 16.679999999999993 2.1902568679003029E-038 + 16.739999999999995 2.0164462392665438E-038 + 16.799999999999997 1.5316398067962193E-038 + 16.859999999999999 5.7491150622311640E-039 + 16.920000000000002 -8.5782105875163376E-039 + 16.980000000000004 -2.5940724677126329E-038 + 17.039999999999992 -4.5169286085267820E-038 + 17.099999999999994 -6.3584741136486372E-038 + 17.159999999999997 -8.1630339708083018E-038 + 17.219999999999999 -9.6357544214987664E-038 + 17.280000000000001 -9.1741203603943593E-038 + 17.340000000000003 -7.1745179912174126E-038 + 17.399999999999991 -4.2336385174254231E-038 + 17.459999999999994 -3.3505258840012657E-040 + 17.519999999999996 5.1654893161832599E-038 + 17.579999999999998 1.0966792447302352E-037 + 17.640000000000001 1.6552576125836149E-037 + 17.700000000000003 2.0562359613803489E-037 + 17.759999999999991 2.1642559725064617E-037 + 17.819999999999993 1.9412206585945005E-037 + 17.879999999999995 1.3566140989016925E-037 + 17.939999999999998 2.6870467596717909E-038 + 18.000000000000000 -1.2753501309302122E-037 + 18.060000000000002 -3.1483361122764023E-037 + 18.120000000000005 -5.3288168814064291E-037 + 18.179999999999993 -7.4909785834885196E-037 + 18.239999999999995 -9.2266589875239869E-037 + 18.299999999999997 -1.0366954744082223E-036 + 18.359999999999999 -1.0722171184059878E-036 + 18.420000000000002 -9.9697147150664522E-037 + 18.480000000000004 -7.9006767861038063E-037 + 18.539999999999992 -4.6876823968855020E-037 + 18.599999999999994 -5.6660213976286636E-038 + 18.659999999999997 4.2623725508706905E-037 + 18.719999999999999 9.6105030334594478E-037 + 18.780000000000001 1.4780894839670441E-036 + 18.840000000000003 1.9264824462753508E-036 + 18.899999999999991 2.1700228756813097E-036 + 18.959999999999994 2.2137138467405901E-036 + 19.019999999999996 1.9946108023758264E-036 + 19.079999999999998 1.5087566850777861E-036 + 19.140000000000001 6.7767350931482024E-037 + 19.200000000000003 -4.0626414681969865E-037 + 19.259999999999991 -1.6562635923247469E-036 + 19.319999999999993 -3.0442067158840631E-036 + 19.379999999999995 -4.4299979526371178E-036 + 19.439999999999998 -5.4337306106198389E-036 + 19.500000000000000 -5.8822036552828685E-036 + 19.560000000000002 -5.6630006815932210E-036 + 19.620000000000005 -4.6519187106054387E-036 + 19.679999999999993 -2.8293429552302597E-036 + 19.739999999999995 -1.5395068217752023E-037 + 19.799999999999997 3.4726653211456253E-036 + 19.859999999999999 7.7103291780030360E-036 + 19.920000000000002 1.2261621435742382E-035 + 19.980000000000004 1.6506531830947334E-035 + 20.039999999999992 1.9895819199855972E-035 + 20.099999999999994 2.1880881190972826E-035 + 20.159999999999997 2.1840664236338652E-035 + 20.219999999999999 1.9578632562000918E-035 + 20.280000000000001 1.4628042031564578E-035 + 20.340000000000003 6.7746246184373628E-036 + 20.399999999999991 -4.0671467822400800E-036 + 20.459999999999994 -1.7156951498503278E-035 + 20.519999999999996 -3.1724123049964817E-035 + 20.579999999999998 -4.6787462172434862E-035 + 20.640000000000001 -6.0899812797910842E-035 + 20.700000000000003 -7.2537908636155519E-035 + 20.759999999999991 -8.0052435816176873E-035 + 20.819999999999993 -8.1714120035368542E-035 + 20.879999999999995 -7.6005249090346779E-035 + 20.939999999999998 -6.1678409657218802E-035 + 21.000000000000000 -3.7918786585717916E-035 + 21.060000000000002 -4.3494112486830667E-036 + 21.120000000000005 3.8720871607350625E-035 + 21.179999999999993 8.9862153436835541E-035 + 21.239999999999995 1.4686227725687522E-034 + 21.299999999999997 2.0653079279069115E-034 + 21.359999999999999 2.6465941301116153E-034 + 21.420000000000002 3.1616842798494404E-034 + 21.480000000000004 3.5559048173350323E-034 + 21.539999999999992 3.7720842549050610E-034 + 21.599999999999994 3.7533806107760708E-034 + 21.659999999999997 3.4471147454067261E-034 + 21.719999999999999 2.8106713639453693E-034 + 21.780000000000001 1.8194087158511990E-034 + 21.840000000000003 4.7055482817651473E-035 + 21.899999999999991 -1.2131472678990359E-034 + 21.959999999999994 -3.1774389982905288E-034 + 22.019999999999996 -5.3345690364318323E-034 + 22.079999999999998 -7.5622815030527607E-034 + 22.140000000000001 -9.7051763945871747E-034 + 22.200000000000003 -1.1579071423172107E-033 + 22.259999999999991 -1.2980230891662098E-033 + 22.319999999999993 -1.3693584651271989E-033 + 22.379999999999995 -1.3509009959851411E-033 + 22.439999999999998 -1.2238276578711500E-033 + 22.500000000000000 -9.7339960449944708E-034 + 22.560000000000002 -5.9100439741057089E-034 + 22.619999999999990 -7.6270008524134055E-035 + 22.679999999999993 5.6108030060053288E-034 + 22.739999999999995 1.2997012819634179E-033 + 22.799999999999997 2.1056483950145797E-033 + 22.859999999999999 2.9321758417024694E-033 + 22.920000000000002 3.7204401819249598E-033 + 22.980000000000004 4.4013439555153331E-033 + 23.039999999999992 4.8985255518412256E-033 + 23.099999999999994 5.1326182181591718E-033 + 23.159999999999997 5.0266601590370435E-033 + 23.219999999999999 4.5126048347669096E-033 + 23.280000000000001 3.5384352552272711E-033 + 23.340000000000003 2.0757237016240619E-033 + 23.399999999999991 1.2703259603630101E-034 + 23.459999999999994 -2.2674421120815756E-033 + 23.519999999999996 -5.0246231716229049E-033 + 23.579999999999998 -8.0154559941142113E-033 + 23.640000000000001 -1.1064606726915964E-032 + 23.700000000000003 -1.3953652890469628E-032 + 23.759999999999991 -1.6428216572363067E-032 + 23.819999999999993 -1.8209382038647716E-032 + 23.879999999999995 -1.9009466971265256E-032 + 23.939999999999998 -1.8551896709638077E-032 + 24.000000000000000 -1.6594435125087495E-032 + 24.060000000000002 -1.2955016045839015E-032 + 24.119999999999990 -7.5385187559984896E-033 + 24.179999999999993 -3.6277849656114483E-034 + 24.239999999999995 8.4182662377160561E-033 + 24.299999999999997 1.8496665575257454E-032 + 24.359999999999999 2.9400250072948326E-032 + 24.420000000000002 4.0492491677125239E-032 + 24.480000000000004 5.0984646168199022E-032 + 24.539999999999992 5.9961821937713939E-032 + 24.599999999999994 6.6424025519249791E-032 + 24.659999999999997 6.9342299433956610E-032 + 24.719999999999999 6.7728943426238611E-032 + 24.780000000000001 6.0719748648930025E-032 + 24.840000000000003 4.7664402594420679E-032 + 24.899999999999991 2.8220416788582653E-032 + 24.959999999999994 2.4442268484209670E-033 + 25.019999999999996 -2.9127815271344959E-032 + 25.079999999999998 -6.5416582574693722E-032 + 25.140000000000001 -1.0476391433405426E-031 + 25.200000000000003 -1.4493114407179487E-031 + 25.259999999999991 -1.8313987705721770E-031 + 25.319999999999993 -2.1616076800346035E-031 + 25.379999999999995 -2.4045390756540601E-031 + 25.439999999999998 -2.5236131282316244E-031 + 25.500000000000000 -2.4834848113706233E-031 + 25.560000000000002 -2.2528757922210118E-031 + 25.619999999999990 -1.8077044297634325E-031 + 25.679999999999993 -1.1343496349320018E-031 + 25.739999999999995 -2.3284113374101541E-032 + 25.799999999999997 8.8026903167130146E-032 + 25.859999999999999 2.1696258209026136E-031 + 25.920000000000002 3.5796687920821577E-031 + 25.980000000000004 5.0343833578469432E-031 + 26.039999999999992 6.4384689936644432E-031 + 26.099999999999994 7.6801240809755321E-031 + 26.159999999999997 8.6355874676325553E-031 + 26.219999999999999 9.1754675265128283E-031 + 26.280000000000001 9.1727783924532922E-031 + 26.340000000000003 8.5124649527024642E-031 + 26.399999999999991 7.1020406561780688E-031 + 26.459999999999994 4.8828240323828859E-031 + 26.519999999999996 1.8410962628206977E-031 + 26.579999999999998 -1.9816158111872103E-031 + 26.640000000000001 -6.4800297525817160E-031 + 26.700000000000003 -1.1479318993742840E-030 + 26.759999999999991 -1.6733010667388766E-030 + 26.819999999999993 -2.1925448824057466E-030 + 26.879999999999995 -2.6679575475210395E-030 + 26.939999999999998 -3.0570557981299687E-030 + 27.000000000000000 -3.3145495212123083E-030 + 27.060000000000002 -3.3949054634520067E-030 + 27.119999999999990 -3.2554467240036379E-030 + 27.179999999999993 -2.8598808732795536E-030 + 27.239999999999995 -2.1821024903072687E-030 + 27.299999999999997 -1.2100606143729331E-030 + 27.359999999999999 5.0556092715550638E-032 + 27.420000000000002 1.5731039031741508E-030 + 27.480000000000004 3.3075559234035302E-030 + 27.539999999999992 5.1791713927042341E-030 + 27.599999999999994 7.0885770541329157E-030 + 27.659999999999997 8.9135303516924483E-030 + 27.719999999999999 1.0512574789258215E-029 + 27.780000000000001 1.1730716273703015E-029 + 27.840000000000003 1.2407131550559221E-029 + 27.899999999999991 1.2384794714380082E-029 + 27.959999999999994 1.1521751768705366E-029 + 28.019999999999996 9.7036113629716037E-030 + 28.079999999999998 6.8566677226518827E-030 + 28.140000000000001 2.9608914500675790E-030 + 28.200000000000003 -1.9380701018108627E-030 + 28.259999999999991 -7.7188914207224322E-030 + 28.319999999999993 -1.4177586632775430E-029 + 28.379999999999995 -2.1024601765123193E-029 + 28.439999999999998 -2.7886953823238823E-029 + 28.500000000000000 -3.4316216707699232E-029 + 28.560000000000002 -3.9803009582631598E-029 + 28.619999999999990 -4.3798211717611283E-029 + 28.679999999999993 -4.5740890943180381E-029 + 28.739999999999995 -4.5092339811832006E-029 + 28.799999999999997 -4.1375262503221029E-029 + 28.859999999999999 -3.4216494332496176E-029 + 28.920000000000002 -2.3391243045024541E-029 + 28.980000000000004 -8.8662562259849391E-030 + 29.039999999999992 9.1609953359705870E-030 + 29.099999999999994 3.0230382713799501E-029 + 29.159999999999997 5.3597809173198263E-029 + 29.219999999999999 7.8227896414530085E-029 + 29.280000000000001 1.0280362628633351E-028 + 29.340000000000003 1.2575567252396375E-028 + 29.399999999999991 1.4531298241591806E-028 + 29.459999999999994 1.5957567879535720E-028 + 29.519999999999996 1.6660951869636433E-028 + 29.579999999999998 1.6456031767885181E-028 + 29.640000000000001 1.5178459191932114E-028 + 29.700000000000003 1.2699161536475595E-028 + 29.759999999999991 8.9389861937745869E-029 + 29.819999999999993 3.8829919369192331E-029 + 29.879999999999995 -2.4065758648896208E-029 + 29.939999999999998 -9.7796561177631208E-029 + 30.000000000000000 -1.7991154232127032E-028 + 30.060000000000002 -2.6698208201999085E-028 + 30.119999999999990 -3.5462898002775533E-028 + 30.179999999999993 -4.3761227874983646E-028 + 30.239999999999995 -5.0998941727954367E-028 + 30.299999999999997 -5.6534484769480173E-028 + 30.359999999999999 -5.9708939813509278E-028 + 30.420000000000002 -5.9882459848257461E-028 + 30.480000000000004 -5.6476124372365445E-028 + 30.539999999999992 -4.9017693629725121E-028 + 30.599999999999994 -3.7189265755456672E-028 + 30.659999999999997 -2.0874309132162230E-028 + 30.719999999999999 -2.0120575290467326E-030 + 30.780000000000001 2.4419881546231917E-028 + 30.840000000000003 5.2270130495459897E-028 + 30.899999999999991 8.2308477590193882E-028 + 30.959999999999994 1.1317452388934976E-027 + 31.019999999999996 1.4321047782407032E-027 + 31.079999999999998 1.7050428323894062E-027 + 31.140000000000001 1.9295506871160110E-027 + 31.200000000000003 2.0836099129577600E-027 + 31.259999999999991 2.1452825428043721E-027 + 31.319999999999993 2.0939881570352102E-027 + 31.379999999999995 1.9119256026717964E-027 + 31.439999999999998 1.5855844144509473E-027 + 31.500000000000000 1.1072746681309882E-027 + 31.560000000000002 4.7659341372520723E-028 + 31.619999999999990 -2.9826665969931001E-028 + 31.679999999999993 -1.1994658713195978E-027 + 31.739999999999995 -2.1988273549485761E-027 + 31.799999999999997 -3.2576041238627592E-027 + 31.859999999999999 -4.3267972402325626E-027 + 31.920000000000002 -5.3480989959772848E-027 + 31.980000000000004 -6.2555118901161438E-027 + 32.039999999999992 -6.9776728982014581E-027 + 32.099999999999994 -7.4408682910317497E-027 + 32.159999999999997 -7.5726968366883974E-027 + 32.219999999999999 -7.3062836372453435E-027 + 32.280000000000001 -6.5849137430472079E-027 + 32.340000000000003 -5.3669033345429201E-027 + 32.399999999999991 -3.6304821595284392E-027 + 32.459999999999994 -1.3784354025082710E-027 + 32.519999999999996 1.3577952954867557E-027 + 32.579999999999998 4.5148535429276294E-027 + 32.640000000000001 7.9953680553712216E-027 + 32.700000000000003 1.1667320099844325E-026 + 32.759999999999991 1.5365153875320375E-026 + 32.819999999999993 1.8892864011247370E-026 + 32.879999999999995 2.2029228856311860E-026 + 32.939999999999998 2.4535278287491007E-026 + 33.000000000000000 2.6163969468460486E-026 + 33.060000000000002 2.6671941440465249E-026 + 33.119999999999990 2.5833086516584879E-026 + 33.179999999999993 2.3453532446845302E-026 + 33.239999999999995 1.9387481401098540E-026 + 33.299999999999997 1.3553250945663173E-026 + 33.359999999999999 5.9486927117576160E-027 + 33.420000000000002 -3.3349044149765560E-027 + 33.480000000000004 -1.4101412670203551E-026 + 33.539999999999992 -2.6041973556202507E-026 + 33.599999999999994 -3.8731635344801338E-026 + 33.659999999999997 -5.1631461621239382E-026 + 33.719999999999999 -6.4096928231010223E-026 + 33.780000000000001 -7.5393302089605126E-026 + 33.840000000000003 -8.4718333656335275E-026 + 33.899999999999991 -9.1232427286699035E-026 + 33.959999999999994 -9.4095957860162698E-026 + 34.019999999999996 -9.2513090714558283E-026 + 34.079999999999998 -8.5780935525053296E-026 + 34.140000000000001 -7.3342435736358471E-026 + 34.200000000000003 -5.4840881802454010E-026 + 34.259999999999991 -3.0173579353605766E-026 + 34.319999999999993 4.5838694920662630E-028 + 34.379999999999995 3.6507393679230362E-026 + 34.439999999999998 7.7047105677916276E-026 + 34.500000000000000 1.2075430910818314E-025 + 34.560000000000002 1.6590821840443044E-025 + 34.619999999999990 2.1041034163646434E-025 + 34.679999999999993 2.5182739464566152E-025 + 34.739999999999995 2.8745924993784303E-025 + 34.799999999999997 3.1443258160188300E-025 + 34.859999999999999 3.2982008826947833E-025 + 34.920000000000002 3.3078319103982379E-025 + 34.980000000000004 3.1473531754406230E-025 + 35.039999999999992 2.7952053319099247E-025 + 35.099999999999994 2.2360109048644109E-025 + 35.159999999999997 1.4624551732303659E-025 + 35.219999999999999 4.7707492941425616E-026 + 35.280000000000001 -7.0615196367793213E-026 + 35.340000000000003 -2.0605391352120251E-025 + 35.399999999999991 -3.5458642041760844E-025 + 35.459999999999994 -5.1081016864894323E-025 + 35.519999999999996 -6.6798356483738170E-025 + 35.579999999999998 -8.1814344550073797E-025 + 35.640000000000001 -9.5230725264130238E-025 + 35.700000000000003 -1.0607631100093744E-024 + 35.759999999999991 -1.1334482072389001E-024 + 35.819999999999993 -1.1604104428281901E-024 + 35.879999999999995 -1.1323444792577519E-024 + 35.939999999999998 -1.0411852130108958E-024 + 36.000000000000000 -8.8073922738182345E-025 + 36.060000000000002 -6.4732671683478603E-025 + 36.119999999999990 -3.4040177227694506E-025 + 36.179999999999993 3.6884413741960994E-026 + 36.239999999999995 4.7721654170152315E-025 + 36.299999999999997 9.6878628050975176E-025 + 36.359999999999999 1.4951403015130987E-024 + 36.420000000000002 2.0352435580082628E-024 + 36.479999999999990 2.5637912239258643E-024 + 36.539999999999992 3.0517944588406984E-024 + 36.599999999999994 3.4674528509830019E-024 + 36.659999999999997 3.7773207172424094E-024 + 36.719999999999999 3.9477496662110232E-024 + 36.780000000000001 3.9465828913933157E-024 + 36.840000000000003 3.7450510264815477E-024 + 36.899999999999991 3.3198081361690742E-024 + 36.959999999999994 2.6550220339472648E-024 + 37.019999999999996 1.7444228167952536E-024 + 37.079999999999998 5.9319620691165114E-025 + 37.140000000000001 -7.8040144089563920E-025 + 37.200000000000003 -2.3438327381290518E-024 + 37.259999999999991 -4.0496002630155580E-024 + 37.319999999999993 -5.8352219590093861E-024 + 37.379999999999995 -7.6239571473788128E-024 + 37.439999999999998 -9.3263809668810741E-024 + 37.500000000000000 -1.0842838987700641E-023 + 37.560000000000002 -1.2066821555135158E-023 + 37.619999999999990 -1.2889207355651188E-023 + 37.679999999999993 -1.3203314689268502E-023 + 37.739999999999995 -1.2910621151233592E-023 + 37.799999999999997 -1.1926973063993913E-023 + 37.859999999999999 -1.0189048865771505E-023 + 37.920000000000002 -7.6607900537852916E-024 + 37.979999999999990 -4.3394774458361870E-024 + 38.039999999999992 -2.6109331183213448E-025 + 38.099999999999994 4.4954043310119360E-024 + 38.159999999999997 9.8052606087018549E-024 + 38.219999999999999 1.5496934265079955E-023 + 38.280000000000001 2.1353238834219035E-023 + 38.340000000000003 2.7114893764074831E-023 + 38.399999999999991 3.2486672107165048E-023 + 38.459999999999994 3.7146208413422193E-023 + 38.519999999999996 4.0755463019940024E-023 + 38.579999999999998 4.2974662333678938E-023 + 38.640000000000001 4.3478399329913310E-023 + 38.700000000000003 4.1973463257156244E-023 + 38.759999999999991 3.8217778397455418E-023 + 38.819999999999993 3.2039703469874971E-023 + 38.879999999999995 2.3356863682689316E-023 + 38.939999999999998 1.2193511859894135E-023 + 39.000000000000000 -1.3045803748484268E-024 + 39.060000000000002 -1.6858779315626584E-023 + 39.119999999999990 -3.4050804177285034E-023 + 39.179999999999993 -5.2321516766776680E-023 + 39.239999999999995 -7.0976056146230063E-023 + 39.299999999999997 -8.9196111275457014E-023 + 39.359999999999999 -1.0605963971306737E-022 + 39.420000000000002 -1.2056831603261310E-022 + 39.479999999999990 -1.3168247931228287E-022 + 39.539999999999992 -1.3836300218475243E-022 + 39.599999999999994 -1.3961935836645911E-022 + 39.659999999999997 -1.3456230693202629E-022 + 39.719999999999999 -1.2245972872577510E-022 + 39.780000000000001 -1.0279337409808619E-022 + 39.840000000000003 -7.5314234693009018E-023 + 39.899999999999991 -4.0093756742421861E-023 + 39.959999999999994 2.4318711409046100E-024 + 40.019999999999996 5.1427353172715351E-023 + 40.079999999999998 1.0563669606451498E-022 + 40.140000000000001 1.6337727329054286E-022 + 40.200000000000003 2.2255187833610596E-022 + 40.259999999999991 2.8068071785294450E-022 + 40.319999999999993 3.3495503174059601E-022 + 40.379999999999995 3.8231257358189263E-022 + 40.439999999999998 4.1953517756784347E-022 + 40.500000000000000 4.4336679084731331E-022 + 40.560000000000002 4.5065011876488254E-022 + 40.619999999999990 4.3847816406307108E-022 + 40.679999999999993 4.0435605373417980E-022 + 40.739999999999995 3.4636805754912264E-022 + 40.799999999999997 2.6334245538790456E-022 + 40.859999999999999 1.5500724227090521E-022 + 40.920000000000002 2.2128005302427972E-023 + 40.979999999999990 -1.3338026175611731E-022 + 41.039999999999992 -3.0837609024153906E-022 + 41.099999999999994 -4.9845849039888546E-022 + 41.159999999999997 -6.9798431673506679E-022 + 41.219999999999999 -9.0014401596409175E-022 + 41.280000000000001 -1.0971004158757616E-021 + 41.340000000000003 -1.2801934424380675E-021 + 41.399999999999991 -1.4402116632913831E-021 + 41.459999999999994 -1.5677290587599181E-021 + 41.519999999999996 -1.6535010483734241E-021 + 41.579999999999998 -1.6889111986307630E-021 + 41.640000000000001 -1.6664579356624630E-021 + 41.700000000000003 -1.5802642225238984E-021 + 41.759999999999991 -1.4265925039272656E-021 + 41.819999999999993 -1.2043431929863894E-021 + 41.879999999999995 -9.1551410270178627E-022 + 41.939999999999998 -5.6559345030220068E-022 + 42.000000000000000 -1.6386206549166665E-022 + 42.060000000000002 2.7642080685507985E-022 + 42.119999999999990 7.3797230352987775E-022 + 42.179999999999993 1.1996039178536991E-021 + 42.239999999999995 1.6365170404443651E-021 + 42.299999999999997 2.0207886500445199E-021 + 42.359999999999999 2.3220515162226740E-021 + 42.420000000000002 2.5083672799861665E-021 + 42.479999999999990 2.5472754141109190E-021 + 42.539999999999992 2.4070006456084800E-021 + 42.599999999999994 2.0577821923840538E-021 + 42.659999999999997 1.4732874599826009E-021 + 42.719999999999999 6.3205295460597373E-022 + 42.780000000000001 -4.8110736338909296E-022 + 42.840000000000003 -1.8737859881711517E-021 + 42.899999999999991 -3.5448476918187025E-021 + 42.959999999999994 -5.4835294098183245E-021 + 43.019999999999996 -7.6688718317138098E-021 + 43.079999999999998 -1.0069528458194391E-020 + 43.140000000000001 -1.2644035576844841E-020 + 43.200000000000003 -1.5341574801370405E-020 + 43.259999999999991 -1.8103265164310338E-020 + 43.319999999999993 -2.0863994765881180E-020 + 43.379999999999995 -2.3554776392924582E-020 + 43.439999999999998 -2.6105584279251874E-020 + 43.500000000000000 -2.8448602767821772E-020 + 43.560000000000002 -3.0521754616600303E-020 + 43.619999999999990 -3.2272424365915879E-020 + 43.679999999999993 -3.3661142266531378E-020 + 43.739999999999995 -3.4665061580035075E-020 + 43.799999999999997 -3.5281036517403203E-020 + 43.859999999999999 -3.5527998186042669E-020 + 43.920000000000002 -3.5448448462207393E-020 + 43.979999999999990 -3.5108756968340598E-020 + 44.039999999999992 -3.4598113793934374E-020 + 44.099999999999994 -3.4025842472220968E-020 + 44.159999999999997 -3.3516970658416352E-020 + 44.219999999999999 -3.3205916601060570E-020 + 44.280000000000001 -3.3228219868941459E-020 + 44.340000000000003 -3.3710356292677647E-020 + 44.399999999999991 -3.4757741400868977E-020 + 44.459999999999994 -3.6441062707142733E-020 + 44.519999999999996 -3.8781270160092502E-020 + 44.579999999999998 -4.1733484497529432E-020 + 44.640000000000001 -4.5170405967997115E-020 + 44.700000000000003 -4.8865459432135933E-020 + 44.759999999999991 -5.2476448058045846E-020 + 44.819999999999993 -5.5529903504578356E-020 + 44.879999999999995 -5.7407144890398295E-020 + 44.939999999999998 -5.7331884952108224E-020 + 45.000000000000000 -5.4359899071142765E-020 + 45.060000000000002 -4.7371428149435470E-020 + 45.119999999999990 -3.5065325107820142E-020 + 45.179999999999993 -1.5955606711710747E-020 + 45.239999999999995 1.1630438924253162E-020 + 45.299999999999997 4.9554218121311954E-020 + 45.359999999999999 9.9866964363965231E-020 + 45.420000000000002 1.6481470082995242E-019 + 45.479999999999990 2.4684507728431943E-019 + 45.539999999999992 3.4862278588546110E-019 + 45.599999999999994 4.7305113783855792E-019 + 45.659999999999997 6.2330690231701661E-019 + 45.719999999999999 8.0288932349098608E-019 + 45.780000000000001 1.0156869144701350E-018 + 45.840000000000003 1.2660631899292137E-018 + 45.899999999999991 1.5589686247133666E-018 + 45.959999999999994 1.9000780220586806E-018 + 46.019999999999996 2.2959555082642691E-018 + 46.079999999999998 2.7542540948363020E-018 + 46.140000000000001 3.2839434562260081E-018 + 46.200000000000003 3.8955681320640004E-018 + 46.259999999999991 4.6015497764894582E-018 + 46.319999999999993 5.4165051823067516E-018 + 46.379999999999995 6.3576052245693879E-018 + 46.439999999999998 7.4449546233049452E-018 + 46.500000000000000 8.7019972572774612E-018 + 46.560000000000002 1.0155934925576038E-017 + 46.619999999999990 1.1838160507156280E-017 + 46.679999999999993 1.3784704899297877E-017 + 46.739999999999995 1.6036683370785417E-017 + 46.799999999999997 1.8640751608786746E-017 + 46.859999999999999 2.1649521160716835E-017 + 46.920000000000002 2.5122035603985866E-017 + 46.979999999999990 2.9124159581538116E-017 + 47.039999999999992 3.3729038261976602E-017 + 47.099999999999994 3.9017521270887477E-017 + 47.159999999999997 4.5078566803820233E-017 + 47.219999999999999 5.2009716281954920E-017 + 47.280000000000001 5.9917572473733410E-017 + 47.340000000000003 6.8918298603265972E-017 + 47.399999999999991 7.9138239428692374E-017 + 47.459999999999994 9.0714516101554052E-017 + 47.519999999999996 1.0379587717040770E-016 + 47.579999999999998 1.1854347394570800E-016 + 47.640000000000001 1.3513192049982154E-016 + 47.700000000000003 1.5375033090495448E-016 + 47.759999999999991 1.7460380529382556E-016 + 47.819999999999993 1.9791466645420581E-016 + 47.879999999999995 2.2392406928463673E-016 + 47.939999999999998 2.5289370308903926E-016 + 48.000000000000000 2.8510747515630532E-016 + 48.060000000000002 3.2087321049915824E-016 + 48.119999999999990 3.6052448548895529E-016 + 48.179999999999993 4.0442177709354178E-016 + 48.239999999999995 4.5295422092214549E-016 + 48.299999999999997 5.0653988797934853E-016 + 48.359999999999999 5.6562620081770736E-016 + 48.420000000000002 6.3068938101573889E-016 + 48.479999999999990 7.0223303292050519E-016 + 48.539999999999992 7.8078485935920942E-016 + 48.599999999999994 8.6689308989766128E-016 + 48.659999999999997 9.6111927005762832E-016 + 48.719999999999999 1.0640307474683893E-015 + 48.780000000000001 1.1761892862581827E-015 + 48.840000000000003 1.2981375042641816E-015 + 48.899999999999991 1.4303811430762566E-015 + 48.959999999999994 1.5733680591800827E-015 + 49.019999999999996 1.7274621865484056E-015 + 49.079999999999998 1.8929125530056044E-015 + 49.140000000000001 2.0698161184999740E-015 + 49.200000000000003 2.2580737363191330E-015 + 49.259999999999991 2.4573377926477247E-015 + 49.319999999999993 2.6669517041108194E-015 + 49.379999999999995 2.8858787054637584E-015 + 49.439999999999998 3.1126182972433492E-015 + 49.500000000000000 3.3451110314191863E-015 + 49.560000000000002 3.5806244714877840E-015 + 49.619999999999990 3.8156250812259097E-015 + 49.679999999999993 4.0456276550636183E-015 + 49.739999999999995 4.2650232483934842E-015 + 49.799999999999997 4.4668816082352758E-015 + 49.859999999999999 4.6427202597361755E-015 + 49.920000000000002 4.7822434338563003E-015 + 49.979999999999990 4.8730423887717550E-015 + 50.039999999999992 4.9002476705920097E-015 + 50.099999999999994 4.8461410643337440E-015 + 50.159999999999997 4.6897044001964426E-015 + 50.219999999999999 4.4061057097543212E-015 + 50.280000000000001 3.9661132682919997E-015 + 50.340000000000003 3.3354391891909961E-015 + 50.399999999999991 2.4739879851941538E-015 + 50.459999999999994 1.3349855689364915E-015 + 50.519999999999996 -1.3597757025340940E-016 + 50.579999999999998 -2.0020370794328779E-015 + 50.640000000000001 -4.3363173352169816E-015 + 50.700000000000003 -7.2233218865961327E-015 + 50.759999999999991 -1.0760507683385728E-014 + 50.819999999999993 -1.5060089394018927E-014 + 50.879999999999995 -2.0251015703007260E-014 + 50.939999999999998 -2.6481259482832161E-014 + 51.000000000000000 -3.3920336886206333E-014 + 51.060000000000002 -4.2762153482309926E-014 + 51.119999999999990 -5.3228181842304323E-014 + 51.179999999999993 -6.5571086326452111E-014 + 51.239999999999995 -8.0078573489079331E-014 + 51.299999999999997 -9.7078003186398102E-014 + 51.359999999999999 -1.1694120144277824E-013 + 51.420000000000002 -1.4009005457700678E-013 + 51.479999999999990 -1.6700259110697950E-013 + 51.539999999999992 -1.9821984338249719E-013 + 51.599999999999994 -2.3435339512054618E-013 + 51.659999999999997 -2.7609366549015849E-013 + 51.719999999999999 -3.2421913224097596E-013 + 51.780000000000001 -3.7960663216342324E-013 + 51.840000000000003 -4.4324255236350199E-013 + 51.899999999999991 -5.1623496284746952E-013 + 51.959999999999994 -5.9982778778334744E-013 + 52.019999999999996 -6.9541476521206127E-013 + 52.079999999999998 -8.0455647008583655E-013 + 52.140000000000001 -9.2899796048231950E-013 + 52.200000000000003 -1.0706881056749254E-012 + 52.259999999999991 -1.2318004548873392E-012 + 52.319999999999993 -1.4147563205300927E-012 + 52.379999999999995 -1.6222501080281796E-012 + 52.439999999999998 -1.8572755712896622E-012 + 52.500000000000000 -2.1231556350808311E-012 + 52.560000000000002 -2.4235725702688874E-012 + 52.619999999999990 -2.7626027461343587E-012 + 52.679999999999993 -3.1447518205062417E-012 + 52.739999999999995 -3.5749944009411797E-012 + 52.799999999999997 -4.0588140794757423E-012 + 52.859999999999999 -4.6022468954263790E-012 + 52.920000000000002 -5.2119291238610598E-012 + 52.979999999999990 -5.8951414857425295E-012 + 53.039999999999992 -6.6598679127303371E-012 + 53.099999999999994 -7.5148411002710403E-012 + 53.159999999999997 -8.4696023780282435E-012 + 53.219999999999999 -9.5345571538647305E-012 + 53.280000000000001 -1.0721032473976073E-011 + 53.339999999999989 -1.2041336599136375E-011 + 53.399999999999991 -1.3508820644217602E-011 + 53.459999999999994 -1.5137926785123597E-011 + 53.519999999999996 -1.6944260211161832E-011 + 53.579999999999998 -1.8944632193776451E-011 + 53.640000000000001 -2.1157105595319390E-011 + 53.700000000000003 -2.3601051663747689E-011 + 53.759999999999991 -2.6297165565034075E-011 + 53.819999999999993 -2.9267507023319755E-011 + 53.879999999999995 -3.2535493083030898E-011 + 53.939999999999998 -3.6125900127128342E-011 + 54.000000000000000 -4.0064832278486328E-011 + 54.060000000000002 -4.4379666659442059E-011 + 54.119999999999990 -4.9098948031920871E-011 + 54.179999999999993 -5.4252293220507849E-011 + 54.239999999999995 -5.9870185879467093E-011 + 54.299999999999997 -6.5983767852642160E-011 + 54.359999999999999 -7.2624545561201136E-011 + 54.420000000000002 -7.9824035559994669E-011 + 54.479999999999990 -8.7613283979114340E-011 + 54.539999999999992 -9.6022320009248361E-011 + 54.599999999999994 -1.0507948164828877E-010 + 54.659999999999997 -1.1481060635659020E-010 + 54.719999999999999 -1.2523805301014750E-010 + 54.780000000000001 -1.3637955594743557E-010 + 54.839999999999989 -1.4824681086080926E-010 + 54.899999999999991 -1.6084389447688634E-010 + 54.959999999999994 -1.7416538865865725E-010 + 55.019999999999996 -1.8819411385989663E-010 + 55.079999999999998 -2.0289860607888731E-010 + 55.140000000000001 -2.1823007908872557E-010 + 55.200000000000003 -2.3411904767885797E-010 + 55.259999999999991 -2.5047122575490404E-010 + 55.319999999999993 -2.6716303838906160E-010 + 55.379999999999995 -2.8403619411378391E-010 + 55.439999999999998 -3.0089177108400929E-010 + 55.500000000000000 -3.1748315230200182E-010 + 55.560000000000002 -3.3350820683791734E-010 + 55.619999999999990 -3.4860015319273427E-010 + 55.679999999999993 -3.6231727504850453E-010 + 55.739999999999995 -3.7413133516396905E-010 + 55.799999999999997 -3.8341413532871272E-010 + 55.859999999999999 -3.8942268353655465E-010 + 55.920000000000002 -3.9128202122722699E-010 + 55.979999999999990 -3.8796594008089714E-010 + 56.039999999999992 -3.7827555916157504E-010 + 56.099999999999994 -3.6081462577222149E-010 + 56.159999999999997 -3.3396203325480754E-010 + 56.219999999999999 -2.9584104312663178E-010 + 56.280000000000001 -2.4428439280993137E-010 + 56.339999999999989 -1.7679519015868876E-010 + 56.399999999999991 -9.0503706715020432E-011 + 56.459999999999994 1.7881577717909010E-011 + 56.519999999999996 1.5212949631359553E-010 + 56.579999999999998 3.1654555594572816E-010 + 56.640000000000001 5.1604267359000006E-010 + 56.700000000000003 7.5621463476784999E-010 + 56.759999999999991 1.0434223914573138E-009 + 56.819999999999993 1.3848876981737660E-009 + 56.879999999999995 1.7887988175757722E-009 + 56.939999999999998 2.2644252068788583E-009 + 57.000000000000000 2.8222485197460538E-009 + 57.060000000000002 3.4741069786449602E-009 + 57.119999999999990 4.2333505728337135E-009 + 57.179999999999993 5.1150214399206082E-009 + 57.239999999999995 6.1360460946092384E-009 + 57.299999999999997 7.3154538559810704E-009 + 57.359999999999999 8.6746108593795887E-009 + 57.420000000000002 1.0237484459221231E-008 + 57.479999999999990 1.2030934490414065E-008 + 57.539999999999992 1.4085030395362714E-008 + 57.599999999999994 1.6433405402655170E-008 + 57.659999999999997 1.9113641566174940E-008 + 57.719999999999999 2.2167699093675144E-008 + 57.780000000000001 2.5642381323559387E-008 + 57.839999999999989 2.9589843913633072E-008 + 57.899999999999991 3.4068169985305473E-008 + 57.959999999999994 3.9141981242826821E-008 + 58.019999999999996 4.4883108151457452E-008 + 58.079999999999998 5.1371351016186932E-008 + 58.140000000000001 5.8695276233895290E-008 + 58.200000000000003 6.6953104116350878E-008 + 58.259999999999991 7.6253681657777686E-008 + 58.319999999999993 8.6717540914651318E-008 + 58.379999999999995 9.8478041328195998E-008 + 58.439999999999998 1.1168267444365502E-007 + 58.500000000000000 1.2649438110687123E-007 + 58.560000000000002 1.4309305280365867E-007 + 58.619999999999990 1.6167719625551106E-007 + 58.679999999999993 1.8246563123433765E-007 + 58.739999999999995 2.0569947249958484E-007 + 58.799999999999997 2.3164417531316238E-007 + 58.859999999999999 2.6059179587017598E-007 + 58.920000000000002 2.9286348114195983E-007 + 58.979999999999990 3.2881210066385661E-007 + 59.039999999999992 3.6882499153481119E-007 + 59.099999999999994 4.1332737335414872E-007 + 59.159999999999997 4.6278526393900516E-007 + 59.219999999999999 5.1770947487901733E-007 + 59.280000000000001 5.7865940029684351E-007 + 59.339999999999989 6.4624723606651791E-007 + 59.399999999999991 7.2114246938953231E-007 + 59.459999999999994 8.0407677933606498E-007 + 59.519999999999996 8.9584939373994161E-007 + 59.579999999999998 9.9733250782658053E-007 + 59.640000000000001 1.1094778533488265E-006 + 59.700000000000003 1.2333224900535227E-006 + 59.759999999999991 1.3699965914622642E-006 + 59.819999999999993 1.5207304816664180E-006 + 59.879999999999995 1.6868624829088542E-006 + 59.939999999999998 1.8698481024698954E-006 + 60.000000000000000 2.0712689282883227E-006 + 60.060000000000002 2.2928421649573289E-006 + 60.119999999999990 2.5364310037119535E-006 + 60.179999999999993 2.8040567974718739E-006 + 60.239999999999995 3.0979101407504373E-006 + 60.299999999999997 3.4203636793764460E-006 + 60.359999999999999 3.7739850837524905E-006 + 60.420000000000002 4.1615523094107871E-006 + 60.479999999999990 4.5860675820215455E-006 + 60.539999999999992 5.0507757429711939E-006 + 60.599999999999994 5.5591784055893261E-006 + 60.659999999999997 6.1150543641462997E-006 + 60.719999999999999 6.7224764245151058E-006 + 60.780000000000001 7.3858341612655747E-006 + 60.839999999999989 8.1098538922130526E-006 + 60.899999999999991 8.8996208526595923E-006 + 60.959999999999994 9.7606035679234473E-006 + 61.019999999999996 1.0698679225310668E-005 + 61.079999999999998 1.1720159142788081E-005 + 61.140000000000001 1.2831813709017806E-005 + 61.200000000000003 1.4040906597545677E-005 + 61.259999999999991 1.5355220614791583E-005 + 61.319999999999993 1.6783096226409428E-005 + 61.379999999999995 1.8333451055978408E-005 + 61.439999999999998 2.0015829719889055E-005 + 61.500000000000000 2.1840427837214584E-005 + 61.560000000000002 2.3818137260623987E-005 + 61.619999999999990 2.5960578848448925E-005 + 61.679999999999993 2.8280157026338842E-005 + 61.739999999999995 3.0790082203414799E-005 + 61.799999999999997 3.3504423846279020E-005 + 61.859999999999999 3.6438162921878495E-005 + 61.920000000000002 3.9607214981759718E-005 + 61.979999999999990 4.3028512782302679E-005 + 62.039999999999992 4.6720025942040230E-005 + 62.099999999999994 5.0700822939293281E-005 + 62.159999999999997 5.4991129311310780E-005 + 62.219999999999999 5.9612368619957974E-005 + 62.280000000000001 6.4587223559319301E-005 + 62.339999999999989 6.9939706228544404E-005 + 62.399999999999991 7.5695164438400857E-005 + 62.459999999999994 8.1880403074609506E-005 + 62.519999999999996 8.8523714191351369E-005 + 62.579999999999998 9.5654930788490990E-005 + 62.640000000000001 1.0330549377809139E-004 + 62.700000000000003 1.1150849959117848E-004 + 62.759999999999991 1.2029879505531186E-004 + 62.819999999999993 1.2971298219014557E-004 + 62.879999999999995 1.3978954310236682E-004 + 62.939999999999998 1.5056882029497454E-004 + 63.000000000000000 1.6209317217237540E-004 + 63.060000000000002 1.7440697107103112E-004 + 63.119999999999990 1.8755664715461870E-004 + 63.179999999999993 2.0159077498460877E-004 + 63.239999999999995 2.1656010852128091E-004 + 63.299999999999997 2.3251767000281339E-004 + 63.359999999999999 2.4951874182294905E-004 + 63.420000000000002 2.6762097745449732E-004 + 63.479999999999990 2.8688435189548183E-004 + 63.539999999999992 3.0737132646174514E-004 + 63.599999999999994 3.2914678977996012E-004 + 63.659999999999997 3.5227805374602584E-004 + 63.719999999999999 3.7683506181210834E-004 + 63.780000000000001 4.0289022887213607E-004 + 63.839999999999989 4.3051854622928290E-004 + 63.899999999999991 4.5979747605265695E-004 + 63.959999999999994 4.9080717301989507E-004 + 64.019999999999996 5.2363025094943720E-004 + 64.079999999999998 5.5835199017327812E-004 + 64.140000000000001 5.9506009179332827E-004 + 64.200000000000003 6.3384470328076994E-004 + 64.259999999999991 6.7479859982058014E-004 + 64.319999999999993 7.1801688058644917E-004 + 64.379999999999995 7.6359702393501594E-004 + 64.439999999999998 8.1163879461686390E-004 + 64.500000000000000 8.6224414487762711E-004 + 64.560000000000002 9.1551742318576987E-004 + 64.619999999999990 9.7156454334235338E-004 + 64.679999999999993 1.0304936692684999E-003 + 64.739999999999995 1.0924145401332852E-003 + 64.799999999999997 1.1574387070632330E-003 + 64.859999999999999 1.2256792130652860E-003 + 64.920000000000002 1.2972503595741753E-003 + 64.979999999999990 1.3722675650159853E-003 + 65.039999999999992 1.4508475019417576E-003 + 65.099999999999994 1.5331071439980287E-003 + 65.159999999999997 1.6191640426347306E-003 + 65.219999999999999 1.7091364099397813E-003 + 65.280000000000001 1.8031423049689097E-003 + 65.339999999999989 1.9012995753550585E-003 + 65.399999999999991 2.0037254962725769E-003 + 65.459999999999994 2.1105364077413109E-003 + 65.519999999999996 2.2218479283492008E-003 + 65.579999999999998 2.3377734851139846E-003 + 65.640000000000001 2.4584255350965254E-003 + 65.700000000000003 2.5839140446292028E-003 + 65.759999999999991 2.7143461759015172E-003 + 65.819999999999993 2.8498266647101127E-003 + 65.879999999999995 2.9904564462495072E-003 + 65.939999999999998 3.1363328605287428E-003 + 66.000000000000000 3.2875500663839749E-003 + 66.060000000000002 3.4441962336435880E-003 + 66.119999999999990 3.6063552789495981E-003 + 66.179999999999993 3.7741060517395100E-003 + 66.239999999999995 3.9475206487368276E-003 + 66.299999999999997 4.1266651919601317E-003 + 66.359999999999999 4.3115991178544226E-003 + 66.420000000000002 4.5023747375026266E-003 + 66.479999999999990 4.6990361504391717E-003 + 66.539999999999992 4.9016197085455359E-003 + 66.599999999999994 5.1101528453756321E-003 + 66.659999999999997 5.3246535848849690E-003 + 66.719999999999999 5.5451304923921424E-003 + 66.780000000000001 5.7715824279102965E-003 + 66.839999999999989 6.0039971766884612E-003 + 66.899999999999991 6.2423513917456569E-003 + 66.959999999999994 6.4866105044981267E-003 + 67.019999999999996 6.7367287888912995E-003 + 67.079999999999998 6.9926473560641966E-003 + 67.140000000000001 7.2542950222043122E-003 + 67.199999999999989 7.5215878178509386E-003 + 67.259999999999991 7.7944271873045586E-003 + 67.319999999999993 8.0727026116641978E-003 + 67.379999999999995 8.3562889144758092E-003 + 67.439999999999998 8.6450458483802572E-003 + 67.500000000000000 8.9388195784547986E-003 + 67.560000000000002 9.2374404632632277E-003 + 67.619999999999990 9.5407258311092733E-003 + 67.679999999999993 9.8484753991107538E-003 + 67.739999999999995 1.0160475721880509E-002 + 67.799999999999997 1.0476496961721931E-002 + 67.859999999999999 1.0796293892562684E-002 + 67.920000000000002 1.1119607145656742E-002 + 67.979999999999990 1.1446159724247611E-002 + 68.039999999999992 1.1775662345138110E-002 + 68.099999999999994 1.2107807859979013E-002 + 68.159999999999997 1.2442275711373204E-002 + 68.219999999999999 1.2778731182969322E-002 + 68.280000000000001 1.3116823018972320E-002 + 68.339999999999989 1.3456187193906817E-002 + 68.399999999999991 1.3796447454469531E-002 + 68.459999999999994 1.4137210963054203E-002 + 68.519999999999996 1.4478075135892955E-002 + 68.579999999999998 1.4818622169978059E-002 + 68.640000000000001 1.5158424335546341E-002 + 68.699999999999989 1.5497041156979127E-002 + 68.759999999999991 1.5834022693355730E-002 + 68.819999999999993 1.6168910933025006E-002 + 68.879999999999995 1.6501236914348766E-002 + 68.939999999999998 1.6830520425076219E-002 + 69.000000000000000 1.7156278969416315E-002 + 69.060000000000002 1.7478021092308820E-002 + 69.119999999999990 1.7795250888976925E-002 + 69.179999999999993 1.8107466780909152E-002 + 69.239999999999995 1.8414160994771896E-002 + 69.299999999999997 1.8714829976111895E-002 + 69.359999999999999 1.9008962411278689E-002 + 69.420000000000002 1.9296049312027580E-002 + 69.479999999999990 1.9575581301473351E-002 + 69.539999999999992 1.9847051125949717E-002 + 69.599999999999994 2.0109954938347920E-002 + 69.659999999999997 2.0363793594608368E-002 + 69.719999999999999 2.0608071558266952E-002 + 69.780000000000001 2.0842300832799514E-002 + 69.839999999999989 2.1066000913651795E-002 + 69.899999999999991 2.1278701287295931E-002 + 69.959999999999994 2.1479940189984906E-002 + 70.019999999999996 2.1669268573230000E-002 + 70.079999999999998 2.1846250235843689E-002 + 70.140000000000001 2.2010459550318936E-002 + 70.199999999999989 2.2161490747932628E-002 + 70.259999999999991 2.2298950065853401E-002 + 70.319999999999993 2.2422463333149879E-002 + 70.379999999999995 2.2531673720654743E-002 + 70.439999999999998 2.2626245946877722E-002 + 70.500000000000000 2.2705862152728393E-002 + 70.560000000000002 2.2770226785398456E-002 + 70.619999999999990 2.2819066516354687E-002 + 70.679999999999993 2.2852133288491984E-002 + 70.739999999999995 2.2869199043201963E-002 + 70.799999999999997 2.2870064636133721E-002 + 70.859999999999999 2.2854554454536203E-002 + 70.920000000000002 2.2822519416256678E-002 + 70.979999999999990 2.2773836706077740E-002 + 71.039999999999992 2.2708410084872590E-002 + 71.099999999999994 2.2626173199392162E-002 + 71.159999999999997 2.2527086057311217E-002 + 71.219999999999999 2.2411138045740100E-002 + 71.280000000000001 2.2278346226123673E-002 + 71.339999999999989 2.2128758051649357E-002 + 71.399999999999991 2.1962447850556718E-002 + 71.459999999999994 2.1779519764051271E-002 + 71.519999999999996 2.1580109842117119E-002 + 71.579999999999998 2.1364376731289554E-002 + 71.640000000000001 2.1132510905769671E-002 + 71.699999999999989 2.0884731182411787E-002 + 71.759999999999991 2.0621283535195468E-002 + 71.819999999999993 2.0342442372343547E-002 + 71.879999999999995 2.0048507095284177E-002 + 71.939999999999998 1.9739803323641492E-002 + 72.000000000000000 1.9416684342934441E-002 + 72.060000000000002 1.9079525617517048E-002 + 72.119999999999990 1.8728726756984667E-002 + 72.179999999999993 1.8364711230393092E-002 + 72.239999999999995 1.7987925083081748E-002 + 72.299999999999997 1.7598832394509305E-002 + 72.359999999999999 1.7197921445190823E-002 + 72.420000000000002 1.6785695438153891E-002 + 72.479999999999990 1.6362677482559242E-002 + 72.539999999999992 1.5929406551753116E-002 + 72.599999999999994 1.5486435869217784E-002 + 72.659999999999997 1.5034334807904726E-002 + 72.719999999999999 1.4573682994199590E-002 + 72.780000000000001 1.4105072341884019E-002 + 72.839999999999989 1.3629104271630575E-002 + 72.899999999999991 1.3146389489204555E-002 + 72.959999999999994 1.2657544353257378E-002 + 73.019999999999996 1.2163192399451486E-002 + 73.079999999999998 1.1663960217891635E-002 + 73.140000000000001 1.1160476478577333E-002 + 73.199999999999989 1.0653373707882838E-002 + 73.259999999999991 1.0143282115193443E-002 + 73.319999999999993 9.6308313705936576E-003 + 73.379999999999995 9.1166478338369928E-003 + 73.439999999999998 8.6013550945448630E-003 + 73.500000000000000 8.0855704292717139E-003 + 73.560000000000002 7.5699048903886748E-003 + 73.619999999999990 7.0549599843667595E-003 + 73.679999999999993 6.5413291010854076E-003 + 73.739999999999995 6.0295957065837989E-003 + 73.799999999999997 5.5203307017954581E-003 + 73.859999999999999 5.0140930156003733E-003 + 73.920000000000002 4.5114275344996903E-003 + 73.979999999999990 4.0128648287207167E-003 + 74.039999999999992 3.5189196472484446E-003 + 74.099999999999994 3.0300908051256788E-003 + 74.159999999999997 2.5468587311218366E-003 + 74.219999999999999 2.0696867259783272E-003 + 74.280000000000001 1.5990192144739112E-003 + 74.339999999999989 1.1352812580136273E-003 + 74.399999999999991 6.7887781458058466E-004 + 74.459999999999994 2.3019408001159107E-004 + 74.519999999999996 -2.1040600452107471E-004 + 74.579999999999998 -6.4257964722257361E-004 + 74.640000000000001 -1.0660049605003825E-003 + 74.699999999999989 -1.4803823027440188E-003 + 74.759999999999991 -1.8854337895869550E-003 + 74.819999999999993 -2.2809030669492482E-003 + 74.879999999999995 -2.6665564324666845E-003 + 74.939999999999998 -3.0421815772576416E-003 + 75.000000000000000 -3.4075880124546307E-003 + 75.060000000000002 -3.7626074735534511E-003 + 75.119999999999990 -4.1070926299388612E-003 + 75.179999999999993 -4.4409176643093124E-003 + 75.239999999999995 -4.7639774450718066E-003 + 75.299999999999997 -5.0761886397035320E-003 + 75.359999999999999 -5.3774865511813019E-003 + 75.420000000000002 -5.6678272267462956E-003 + 75.479999999999990 -5.9471856046555980E-003 + 75.539999999999992 -6.2155550430365580E-003 + 75.599999999999994 -6.4729491747015939E-003 + 75.659999999999997 -6.7193965116050117E-003 + 75.719999999999999 -6.9549443803403688E-003 + 75.780000000000001 -7.1796560040206609E-003 + 75.839999999999989 -7.3936097212173243E-003 + 75.899999999999991 -7.5968995616342502E-003 + 75.959999999999994 -7.7896342282540252E-003 + 76.019999999999996 -7.9719345791131341E-003 + 76.079999999999998 -8.1439363971603958E-003 + 76.140000000000001 -8.3057853063110629E-003 + 76.199999999999989 -8.4576400142972984E-003 + 76.259999999999991 -8.5996693144709448E-003 + 76.319999999999993 -8.7320510417058309E-003 + 76.379999999999995 -8.8549726886098072E-003 + 76.439999999999998 -8.9686311444180274E-003 + 76.500000000000000 -9.0732297720657312E-003 + 76.560000000000002 -9.1689792621470045E-003 + 76.619999999999990 -9.2560964086347754E-003 + 76.679999999999993 -9.3348035167654438E-003 + 76.739999999999995 -9.4053264447371415E-003 + 76.799999999999997 -9.4678987581497485E-003 + 76.859999999999999 -9.5227530443258365E-003 + 76.920000000000002 -9.5701274838238225E-003 + 76.979999999999990 -9.6102621710447943E-003 + 77.039999999999992 -9.6433975443128584E-003 + 77.099999999999994 -9.6697769139583757E-003 + 77.159999999999997 -9.6896440987405477E-003 + 77.219999999999999 -9.7032402277396467E-003 + 77.280000000000001 -9.7108093607103148E-003 + 77.339999999999989 -9.7125921205123943E-003 + 77.399999999999991 -9.7088295146464838E-003 + 77.459999999999994 -9.6997589053170411E-003 + 77.519999999999996 -9.6856164789388965E-003 + 77.579999999999998 -9.6666361966644462E-003 + 77.640000000000001 -9.6430488211283975E-003 + 77.699999999999989 -9.6150825713602773E-003 + 77.759999999999991 -9.5829604901184889E-003 + 77.819999999999993 -9.5469027908387395E-003 + 77.879999999999995 -9.5071262095063492E-003 + 77.939999999999998 -9.4638419127128139E-003 + 78.000000000000000 -9.4172589377867297E-003 + 78.060000000000002 -9.3675784619844365E-003 + 78.119999999999990 -9.3149997786266953E-003 + 78.179999999999993 -9.2597170263775865E-003 + 78.239999999999995 -9.2019177962821014E-003 + 78.299999999999997 -9.1417860990041303E-003 + 78.359999999999999 -9.0795003732202853E-003 + 78.420000000000002 -9.0152337697863467E-003 + 78.479999999999990 -8.9491549372122652E-003 + 78.539999999999992 -8.8814253295009873E-003 + 78.599999999999994 -8.8122032984105647E-003 + 78.659999999999997 -8.7416406399786813E-003 + 78.719999999999999 -8.6698843379526443E-003 + 78.780000000000001 -8.5970763232335948E-003 + 78.839999999999989 -8.5233530051727919E-003 + 78.899999999999991 -8.4488467871098785E-003 + 78.959999999999994 -8.3736839694025442E-003 + 79.019999999999996 -8.2979843159558947E-003 + 79.079999999999998 -8.2218654713419100E-003 + 79.140000000000001 -8.1454395049039546E-003 + 79.199999999999989 -8.0688122527172949E-003 + 79.259999999999991 -7.9920862110315419E-003 + 79.319999999999993 -7.9153590374944505E-003 + 79.379999999999995 -7.8387229322251784E-003 + 79.439999999999998 -7.7622670259404163E-003 + 79.500000000000000 -7.6860749584811748E-003 + 79.560000000000002 -7.6102265334340681E-003 + 79.619999999999990 -7.5347970314295076E-003 + 79.679999999999993 -7.4598573108388671E-003 + 79.739999999999995 -7.3854753347134122E-003 + 79.799999999999997 -7.3117142179998278E-003 + 79.859999999999999 -7.2386340743741274E-003 + 79.920000000000002 -7.1662901754359024E-003 + 79.979999999999990 -7.0947339276704151E-003 + 80.039999999999992 -7.0240145373470795E-003 + 80.099999999999994 -6.9541768892012286E-003 + 80.159999999999997 -6.8852623150423720E-003 + 80.219999999999999 -6.8173090619528809E-003 + 80.280000000000001 -6.7503520898509342E-003 + 80.340000000000003 -6.6844227899069270E-003 + 80.400000000000006 -6.6195504657613853E-003 + 80.460000000000008 -6.5557601418739899E-003 + 80.519999999999982 -6.4930748352557983E-003 + 80.579999999999984 -6.4315137008535235E-003 + 80.639999999999986 -6.3710938475833572E-003 + 80.699999999999989 -6.3118299336440030E-003 + 80.759999999999991 -6.2537332407854550E-003 + 80.819999999999993 -6.1968126194196791E-003 + 80.879999999999995 -6.1410743057134544E-003 + 80.939999999999998 -6.0865223158765060E-003 + 81.000000000000000 -6.0331582201510452E-003 + 81.060000000000002 -5.9809809315654969E-003 + 81.120000000000005 -5.9299876844468250E-003 + 81.180000000000007 -5.8801728669652456E-003 + 81.240000000000009 -5.8315293383689112E-003 + 81.299999999999983 -5.7840474103120643E-003 + 81.359999999999985 -5.7377163562313434E-003 + 81.419999999999987 -5.6925220399050161E-003 + 81.479999999999990 -5.6484494962007002E-003 + 81.539999999999992 -5.6054816975329930E-003 + 81.599999999999994 -5.5636000816696868E-003 + 81.659999999999997 -5.5227838378334509E-003 + 81.719999999999999 -5.4830114395203232E-003 + 81.780000000000001 -5.4442597437276931E-003 + 81.840000000000003 -5.4065031478115581E-003 + 81.900000000000006 -5.3697165444200551E-003 + 81.960000000000008 -5.3338722893976481E-003 + 82.019999999999982 -5.2989415501242254E-003 + 82.079999999999984 -5.2648949154045499E-003 + 82.139999999999986 -5.2317021053867700E-003 + 82.199999999999989 -5.1993312841408061E-003 + 82.259999999999991 -5.1677509859984396E-003 + 82.319999999999993 -5.1369272495554435E-003 + 82.379999999999995 -5.1068266418371547E-003 + 82.439999999999998 -5.0774149142383696E-003 + 82.500000000000000 -5.0486572559690565E-003 + 82.560000000000002 -5.0205192012039799E-003 + 82.620000000000005 -4.9929652422463456E-003 + 82.680000000000007 -4.9659590731636356E-003 + 82.740000000000009 -4.9394650450225348E-003 + 82.799999999999983 -4.9134478974469159E-003 + 82.859999999999985 -4.8878712850078578E-003 + 82.919999999999987 -4.8626997407959921E-003 + 82.979999999999990 -4.8378979374700979E-003 + 83.039999999999992 -4.8134301640552785E-003 + 83.099999999999994 -4.7892619873714758E-003 + 83.159999999999997 -4.7653584677289397E-003 + 83.219999999999999 -4.7416860235270850E-003 + 83.280000000000001 -4.7182109653909482E-003 + 83.340000000000003 -4.6949009105218785E-003 + 83.400000000000006 -4.6717235994067473E-003 + 83.460000000000008 -4.6486482205770957E-003 + 83.519999999999982 -4.6256439245001332E-003 + 83.579999999999984 -4.6026819672992927E-003 + 83.639999999999986 -4.5797329854336136E-003 + 83.699999999999989 -4.5567700200646018E-003 + 83.759999999999991 -4.5337667522892889E-003 + 83.819999999999993 -4.5106973906345023E-003 + 83.879999999999995 -4.4875378118418279E-003 + 83.939999999999998 -4.4642652657838084E-003 + 84.000000000000000 -4.4408572623529149E-003 + 84.060000000000002 -4.4172930625361716E-003 + 84.120000000000005 -4.3935534300022653E-003 + 84.180000000000007 -4.3696194600300886E-003 + 84.240000000000009 -4.3454743011926917E-003 + 84.299999999999983 -4.3211024791765563E-003 + 84.359999999999985 -4.2964888922483067E-003 + 84.419999999999987 -4.2716202046102344E-003 + 84.479999999999990 -4.2464841313544907E-003 + 84.539999999999992 -4.2210698254781112E-003 + 84.599999999999994 -4.1953674423940573E-003 + 84.659999999999997 -4.1693688552459840E-003 + 84.719999999999999 -4.1430664778596121E-003 + 84.780000000000001 -4.1164542210105305E-003 + 84.840000000000003 -4.0895265091006093E-003 + 84.900000000000006 -4.0622796509678597E-003 + 84.960000000000008 -4.0347100656584521E-003 + 85.019999999999982 -4.0068160486079222E-003 + 85.079999999999984 -3.9785961572740697E-003 + 85.139999999999986 -3.9500503033820383E-003 + 85.199999999999989 -3.9211785087101859E-003 + 85.259999999999991 -3.8919825971502711E-003 + 85.319999999999993 -3.8624644148744667E-003 + 85.379999999999995 -3.8326267980378225E-003 + 85.439999999999998 -3.8024729469408039E-003 + 85.500000000000000 -3.7720069873672852E-003 + 85.560000000000002 -3.7412334444961916E-003 + 85.620000000000005 -3.7101570871372995E-003 + 85.680000000000007 -3.6787832002753151E-003 + 85.740000000000009 -3.6471177551803129E-003 + 85.799999999999983 -3.6151668980834275E-003 + 85.859999999999985 -3.5829366598825051E-003 + 85.919999999999987 -3.5504336064642152E-003 + 85.979999999999990 -3.5176644477269152E-003 + 86.039999999999992 -3.4846357945185463E-003 + 86.099999999999994 -3.4513543677565589E-003 + 86.159999999999997 -3.4178275207263640E-003 + 86.219999999999999 -3.3840617267558771E-003 + 86.280000000000001 -3.3500637892914806E-003 + 86.340000000000003 -3.3158405364143010E-003 + 86.400000000000006 -3.2813989535418610E-003 + 86.460000000000008 -3.2467450430413666E-003 + 86.519999999999982 -3.2118857075450441E-003 + 86.579999999999984 -3.1768271672627129E-003 + 86.639999999999986 -3.1415753324098030E-003 + 86.699999999999989 -3.1061367319076419E-003 + 86.759999999999991 -3.0705166882663390E-003 + 86.819999999999993 -3.0347208840802663E-003 + 86.879999999999995 -2.9987550610565857E-003 + 86.939999999999998 -2.9626242197454983E-003 + 87.000000000000000 -2.9263336350549467E-003 + 87.060000000000002 -2.8898881269059759E-003 + 87.120000000000005 -2.8532926293008561E-003 + 87.180000000000007 -2.8165517558184001E-003 + 87.240000000000009 -2.7796702504956799E-003 + 87.299999999999983 -2.7426522733546180E-003 + 87.359999999999985 -2.7055023232348237E-003 + 87.419999999999987 -2.6682250745402787E-003 + 87.479999999999990 -2.6308247348858040E-003 + 87.539999999999992 -2.5933059077756946E-003 + 87.599999999999994 -2.5556731102517401E-003 + 87.659999999999997 -2.5179308537410807E-003 + 87.719999999999999 -2.4800842344956048E-003 + 87.780000000000001 -2.4421379889591390E-003 + 87.840000000000003 -2.4040975164192806E-003 + 87.900000000000006 -2.3659682660911508E-003 + 87.960000000000008 -2.3277560239186165E-003 + 88.019999999999982 -2.2894669702746462E-003 + 88.079999999999984 -2.2511077529767435E-003 + 88.139999999999986 -2.2126851447945794E-003 + 88.199999999999989 -2.1742065221206012E-003 + 88.259999999999991 -2.1356799767891454E-003 + 88.319999999999993 -2.0971137380936403E-003 + 88.379999999999995 -2.0585164156070260E-003 + 88.439999999999998 -2.0198976952404153E-003 + 88.500000000000000 -1.9812672174527755E-003 + 88.560000000000002 -1.9426358590742155E-003 + 88.620000000000005 -1.9040147787318560E-003 + 88.680000000000007 -1.8654158838589999E-003 + 88.740000000000009 -1.8268516291684938E-003 + 88.799999999999983 -1.7883352319428033E-003 + 88.859999999999985 -1.7498803955119709E-003 + 88.919999999999987 -1.7115015520109550E-003 + 88.979999999999990 -1.6732138532608485E-003 + 89.039999999999992 -1.6350329898124055E-003 + 89.099999999999994 -1.5969753300311485E-003 + 89.159999999999997 -1.5590577092114309E-003 + 89.219999999999999 -1.5212977382620507E-003 + 89.280000000000001 -1.4837133700777078E-003 + 89.340000000000003 -1.4463231990216028E-003 + 89.400000000000006 -1.4091464085427018E-003 + 89.460000000000008 -1.3722024449421366E-003 + 89.519999999999982 -1.3355112652182453E-003 + 89.579999999999984 -1.2990931681618344E-003 + 89.639999999999986 -1.2629688970996525E-003 + 89.699999999999989 -1.2271593815798979E-003 + 89.759999999999991 -1.1916860990569390E-003 + 89.819999999999993 -1.1565702495288409E-003 + 89.879999999999995 -1.1218335583794547E-003 + 89.939999999999998 -1.0874977392605109E-003 + 90.000000000000000 -1.0535846853230227E-003 + 90.060000000000002 -1.0201159994519305E-003 + 90.120000000000005 -9.8711337957575187E-004 + 90.180000000000007 -9.5459833409998907E-004 + 90.240000000000009 -9.2259220397448083E-004 + 90.299999999999983 -8.9111589580479422E-004 + 90.359999999999985 -8.6019007381832660E-004 + 90.419999999999987 -8.2983503616273786E-004 + 90.479999999999990 -8.0007044712402916E-004 + 90.539999999999992 -7.7091555269276401E-004 + 90.599999999999994 -7.4238904966682185E-004 + 90.659999999999997 -7.1450887600323109E-004 + 90.719999999999999 -6.8729231027020953E-004 + 90.780000000000001 -6.6075603702357938E-004 + 90.840000000000003 -6.3491574740328271E-004 + 90.900000000000006 -6.0978643723098673E-004 + 90.960000000000008 -5.8538221602857726E-004 + 91.019999999999982 -5.6171623838187357E-004 + 91.079999999999984 -5.3880071962261657E-004 + 91.139999999999986 -5.1664697623625682E-004 + 91.199999999999989 -4.9526521980475865E-004 + 91.259999999999991 -4.7466465438769672E-004 + 91.319999999999993 -4.5485337554191784E-004 + 91.379999999999995 -4.3583834156430627E-004 + 91.439999999999998 -4.1762543715346401E-004 + 91.500000000000000 -4.0021927672830417E-004 + 91.560000000000002 -3.8362346173456658E-004 + 91.620000000000005 -3.6784024781497067E-004 + 91.680000000000007 -3.5287080642493803E-004 + 91.739999999999981 -3.3871512916427938E-004 + 91.799999999999983 -3.2537187580188043E-004 + 91.859999999999985 -3.1283865127549357E-004 + 91.919999999999987 -3.0111182072125150E-004 + 91.979999999999990 -2.9018668968356135E-004 + 92.039999999999992 -2.8005732657956776E-004 + 92.099999999999994 -2.7071683310448205E-004 + 92.159999999999997 -2.6215710127037550E-004 + 92.219999999999999 -2.5436903193621079E-004 + 92.280000000000001 -2.4734255192050171E-004 + 92.340000000000003 -2.4106652875588273E-004 + 92.400000000000006 -2.3552894668566780E-004 + 92.460000000000008 -2.3071688526206242E-004 + 92.519999999999982 -2.2661653664165758E-004 + 92.579999999999984 -2.2321324735018492E-004 + 92.639999999999986 -2.2049162241775396E-004 + 92.699999999999989 -2.1843549842215146E-004 + 92.759999999999991 -2.1702797135107489E-004 + 92.819999999999993 -2.1625156231162715E-004 + 92.879999999999995 -2.1608815627773722E-004 + 92.939999999999998 -2.1651912492778863E-004 + 93.000000000000000 -2.1752531274084520E-004 + 93.060000000000002 -2.1908709339217206E-004 + 93.120000000000005 -2.2118452491417639E-004 + 93.180000000000007 -2.2379725428003282E-004 + 93.239999999999981 -2.2690471028266916E-004 + 93.299999999999983 -2.3048602684526398E-004 + 93.359999999999985 -2.3452016799033407E-004 + 93.419999999999987 -2.3898600670982351E-004 + 93.479999999999990 -2.4386229644940034E-004 + 93.539999999999992 -2.4912779301333276E-004 + 93.599999999999994 -2.5476122967487460E-004 + 93.659999999999997 -2.6074143091432570E-004 + 93.719999999999999 -2.6704735296389424E-004 + 93.780000000000001 -2.7365810438184971E-004 + 93.840000000000003 -2.8055301347361535E-004 + 93.900000000000006 -2.8771163627677569E-004 + 93.960000000000008 -2.9511386577883475E-004 + 94.019999999999982 -3.0273994866922369E-004 + 94.079999999999984 -3.1057047406470229E-004 + 94.139999999999986 -3.1858654516003554E-004 + 94.199999999999989 -3.2676967876267397E-004 + 94.259999999999991 -3.3510188944824366E-004 + 94.319999999999993 -3.4356575276938079E-004 + 94.379999999999995 -3.5214436842622880E-004 + 94.439999999999998 -3.6082144257662031E-004 + 94.500000000000000 -3.6958128072233862E-004 + 94.560000000000002 -3.7840877768766774E-004 + 94.620000000000005 -3.8728944653254057E-004 + 94.680000000000007 -3.9620948218457240E-004 + 94.739999999999981 -4.0515573025762410E-004 + 94.799999999999983 -4.1411569067723502E-004 + 94.859999999999985 -4.2307751391210558E-004 + 94.919999999999987 -4.3203010769762433E-004 + 94.979999999999990 -4.4096300187688195E-004 + 95.039999999999992 -4.4986643961526421E-004 + 95.099999999999994 -4.5873144484375524E-004 + 95.159999999999997 -4.6754966643050620E-004 + 95.219999999999999 -4.7631358436330202E-004 + 95.280000000000001 -4.8501634706533416E-004 + 95.340000000000003 -4.9365185207533716E-004 + 95.400000000000006 -5.0221473015347811E-004 + 95.460000000000008 -5.1070030813423427E-004 + 95.519999999999982 -5.1910469776495025E-004 + 95.579999999999984 -5.2742464984583803E-004 + 95.639999999999986 -5.3565767740001817E-004 + 95.699999999999989 -5.4380179768822321E-004 + 95.759999999999991 -5.5185585503815624E-004 + 95.819999999999993 -5.5981921765835101E-004 + 95.879999999999995 -5.6769184420526000E-004 + 95.939999999999998 -5.7547434127681396E-004 + 96.000000000000000 -5.8316781426059276E-004 + 96.060000000000002 -5.9077384928925129E-004 + 96.120000000000005 -5.9829457338314736E-004 + 96.180000000000007 -6.0573247563023799E-004 + 96.239999999999981 -6.1309060079123550E-004 + 96.299999999999983 -6.2037234189327032E-004 + 96.359999999999985 -6.2758153372435767E-004 + 96.419999999999987 -6.3472221993509683E-004 + 96.479999999999990 -6.4179897761142309E-004 + 96.539999999999992 -6.4881652692002126E-004 + 96.599999999999994 -6.5577990262106285E-004 + 96.659999999999997 -6.6269440062035050E-004 + 96.719999999999999 -6.6956552737729277E-004 + 96.780000000000001 -6.7639885715621258E-004 + 96.840000000000003 -6.8320021231174947E-004 + 96.900000000000006 -6.8997537149772441E-004 + 96.960000000000008 -6.9673031964411771E-004 + 97.019999999999982 -7.0347090908654117E-004 + 97.079999999999984 -7.1020299934407044E-004 + 97.139999999999986 -7.1693243063096848E-004 + 97.199999999999989 -7.2366489793428265E-004 + 97.259999999999991 -7.3040596861586368E-004 + 97.319999999999993 -7.3716103379301468E-004 + 97.379999999999995 -7.4393530571437551E-004 + 97.439999999999998 -7.5073363077569899E-004 + 97.500000000000000 -7.5756078361233778E-004 + 97.560000000000002 -7.6442109076341712E-004 + 97.620000000000005 -7.7131868196166087E-004 + 97.680000000000007 -7.7825721673308880E-004 + 97.739999999999981 -7.8524001235661691E-004 + 97.799999999999983 -7.9227001418835240E-004 + 97.859999999999985 -7.9934968023126756E-004 + 97.919999999999987 -8.0648103958480880E-004 + 97.979999999999990 -8.1366570108245564E-004 + 98.039999999999992 -8.2090466504565647E-004 + 98.099999999999994 -8.2819845181345832E-004 + 98.159999999999997 -8.3554706592009356E-004 + 98.219999999999999 -8.4294996327908384E-004 + 98.280000000000001 -8.5040602173773309E-004 + 98.340000000000003 -8.5791350979265359E-004 + 98.400000000000006 -8.6547016629702337E-004 + 98.460000000000008 -8.7307317259603591E-004 + 98.519999999999982 -8.8071909698264486E-004 + 98.579999999999984 -8.8840389967963847E-004 + 98.639999999999986 -8.9612302567941159E-004 + 98.699999999999989 -9.0387122470564395E-004 + 98.759999999999991 -9.1164268670479063E-004 + 98.819999999999993 -9.1943118449928246E-004 + 98.879999999999995 -9.2722959162233739E-004 + 98.939999999999998 -9.3503055145970537E-004 + 99.000000000000000 -9.4282591980491800E-004 + 99.060000000000002 -9.5060696301875404E-004 + 99.120000000000005 -9.5836454810814900E-004 + 99.180000000000007 -9.6608886195946966E-004 + 99.239999999999981 -9.7376963107563444E-004 + 99.299999999999983 -9.8139606730881287E-004 + 99.359999999999985 -9.8895685526085545E-004 + 99.419999999999987 -9.9644024777665241E-004 + 99.479999999999990 -1.0038340993197992E-003 + 99.539999999999992 -1.0111257084140105E-003 + 99.599999999999994 -1.0183022543578584E-003 + 99.659999999999997 -1.0253504370824190E-003 + 99.719999999999999 -1.0322566379815288E-003 + 99.780000000000001 -1.0390069734942551E-003 + 99.840000000000003 -1.0455874452492287E-003 + 99.900000000000006 -1.0519837730538220E-003 + 99.960000000000008 -1.0581817069595871E-003 + 100.01999999999998 -1.0641667284337140E-003 + 100.07999999999998 -1.0699241552215371E-003 + 100.13999999999999 -1.0754393942990325E-003 + 100.19999999999999 -1.0806978542722031E-003 + 100.25999999999999 -1.0856850037587553E-003 + 100.31999999999999 -1.0903863212406201E-003 + 100.38000000000000 -1.0947873648695203E-003 + 100.44000000000000 -1.0988737878930592E-003 + 100.50000000000000 -1.1026314285271003E-003 + 100.56000000000000 -1.1060464717321020E-003 + 100.62000000000000 -1.1091051007390633E-003 + 100.68000000000001 -1.1117939291608464E-003 + 100.73999999999998 -1.1140999409147447E-003 + 100.79999999999998 -1.1160103868237752E-003 + 100.85999999999999 -1.1175129724521481E-003 + 100.91999999999999 -1.1185958462588419E-003 + 100.97999999999999 -1.1192476024295395E-003 + 101.03999999999999 -1.1194574971121266E-003 + 101.09999999999999 -1.1192152798522794E-003 + 101.16000000000000 -1.1185111788820513E-003 + 101.22000000000000 -1.1173362995481036E-003 + 101.28000000000000 -1.1156822074101771E-003 + 101.34000000000000 -1.1135410145806169E-003 + 101.40000000000001 -1.1109059230562900E-003 + 101.46000000000001 -1.1077705548380500E-003 + 101.51999999999998 -1.1041295342974202E-003 + 101.57999999999998 -1.0999780988798012E-003 + 101.63999999999999 -1.0953123088972517E-003 + 101.69999999999999 -1.0901290078311004E-003 + 101.75999999999999 -1.0844259017769378E-003 + 101.81999999999999 -1.0782016424449557E-003 + 101.88000000000000 -1.0714557431027588E-003 + 101.94000000000000 -1.0641885553067992E-003 + 102.00000000000000 -1.0564012417700252E-003 + 102.06000000000000 -1.0480960674524487E-003 + 102.12000000000000 -1.0392760764808165E-003 + 102.18000000000001 -1.0299452867558847E-003 + 102.23999999999998 -1.0201086482751370E-003 + 102.29999999999998 -1.0097719629072772E-003 + 102.35999999999999 -9.9894200460521189E-004 + 102.41999999999999 -9.8762635331159604E-004 + 102.47999999999999 -9.7583364876913342E-004 + 102.53999999999999 -9.6357337188274152E-004 + 102.59999999999999 -9.5085590888786798E-004 + 102.66000000000000 -9.3769247349207688E-004 + 102.72000000000000 -9.2409510881435498E-004 + 102.78000000000000 -9.1007681032780432E-004 + 102.84000000000000 -8.9565129309032243E-004 + 102.90000000000001 -8.8083319583968488E-004 + 102.96000000000001 -8.6563785283043674E-004 + 103.01999999999998 -8.5008135364800707E-004 + 103.07999999999998 -8.3418064865883055E-004 + 103.13999999999999 -8.1795327453425748E-004 + 103.19999999999999 -8.0141749781400401E-004 + 103.25999999999999 -7.8459228030318959E-004 + 103.31999999999999 -7.6749714164428984E-004 + 103.38000000000000 -7.5015218140078960E-004 + 103.44000000000000 -7.3257809786970161E-004 + 103.50000000000000 -7.1479604367439946E-004 + 103.56000000000000 -6.9682760832479322E-004 + 103.62000000000000 -6.7869485288790882E-004 + 103.68000000000001 -6.6042010850106056E-004 + 103.73999999999998 -6.4202614840365316E-004 + 103.79999999999998 -6.2353597489549727E-004 + 103.85999999999999 -6.0497281107328141E-004 + 103.91999999999999 -5.8636007629500825E-004 + 103.97999999999999 -5.6772139780661098E-004 + 104.03999999999999 -5.4908046414010175E-004 + 104.09999999999999 -5.3046101752720351E-004 + 104.16000000000000 -5.1188683516613875E-004 + 104.22000000000000 -4.9338165836534541E-004 + 104.28000000000000 -4.7496918069114694E-004 + 104.34000000000000 -4.5667295751109009E-004 + 104.40000000000001 -4.3851638127948120E-004 + 104.46000000000001 -4.2052256770396435E-004 + 104.51999999999998 -4.0271442151837379E-004 + 104.57999999999998 -3.8511450015926539E-004 + 104.63999999999999 -3.6774495308488053E-004 + 104.69999999999999 -3.5062755805079877E-004 + 104.75999999999999 -3.3378353514529997E-004 + 104.81999999999999 -3.1723362316090790E-004 + 104.88000000000000 -3.0099800181197079E-004 + 104.94000000000000 -2.8509622484423105E-004 + 105.00000000000000 -2.6954715042168859E-004 + 105.06000000000000 -2.5436899774094936E-004 + 105.12000000000000 -2.3957923977314491E-004 + 105.18000000000001 -2.2519457483851220E-004 + 105.23999999999998 -2.1123090843309093E-004 + 105.29999999999998 -1.9770333346406100E-004 + 105.35999999999999 -1.8462610102423159E-004 + 105.41999999999999 -1.7201257231194093E-004 + 105.47999999999999 -1.5987517164060811E-004 + 105.53999999999999 -1.4822545130557417E-004 + 105.59999999999999 -1.3707396909979800E-004 + 105.66000000000000 -1.2643030718090869E-004 + 105.72000000000000 -1.1630304362945327E-004 + 105.78000000000000 -1.0669977295292019E-004 + 105.84000000000000 -9.7627026631785053E-005 + 105.90000000000001 -8.9090289108398099E-005 + 105.96000000000001 -8.1093994079088717E-005 + 106.01999999999998 -7.3641507643890935E-005 + 106.07999999999998 -6.6735127637642497E-005 + 106.13999999999999 -6.0376107614759327E-005 + 106.19999999999999 -5.4564605664067552E-005 + 106.25999999999999 -4.9299752690122541E-005 + 106.31999999999999 -4.4579609809660296E-005 + 106.38000000000000 -4.0401211114145244E-005 + 106.44000000000000 -3.6760566803152326E-005 + 106.50000000000000 -3.3652692870963358E-005 + 106.56000000000000 -3.1071606413266195E-005 + 106.62000000000000 -2.9010340784500542E-005 + 106.68000000000001 -2.7460986662542776E-005 + 106.73999999999998 -2.6414697424722515E-005 + 106.79999999999998 -2.5861722502775979E-005 + 106.85999999999999 -2.5791411467252249E-005 + 106.91999999999999 -2.6192235684370006E-005 + 106.97999999999999 -2.7051846739738928E-005 + 107.03999999999999 -2.8357075898406497E-005 + 107.09999999999999 -3.0093975497453741E-005 + 107.16000000000000 -3.2247851010542165E-005 + 107.22000000000000 -3.4803305984928691E-005 + 107.28000000000000 -3.7744265702112408E-005 + 107.34000000000000 -4.1054040826897273E-005 + 107.40000000000001 -4.4715347494337654E-005 + 107.46000000000001 -4.8710366301169890E-005 + 107.51999999999998 -5.3020793651054453E-005 + 107.57999999999998 -5.7627878648161494E-005 + 107.63999999999999 -6.2512477011954839E-005 + 107.69999999999999 -6.7655106161348499E-005 + 107.75999999999999 -7.3035966521063915E-005 + 107.81999999999999 -7.8635015840780343E-005 + 107.88000000000000 -8.4432006863769407E-005 + 107.94000000000000 -9.0406536652385685E-005 + 108.00000000000000 -9.6538063221975198E-005 + 108.06000000000000 -1.0280598721745304E-004 + 108.12000000000000 -1.0918968455806544E-004 + 108.18000000000001 -1.1566854405272687E-004 + 108.23999999999998 -1.2222200491332735E-004 + 108.29999999999998 -1.2882962784840649E-004 + 108.35999999999999 -1.3547111280276620E-004 + 108.41999999999999 -1.4212635404817515E-004 + 108.47999999999999 -1.4877546387277380E-004 + 108.53999999999999 -1.5539887770703217E-004 + 108.59999999999999 -1.6197732305982260E-004 + 108.66000000000000 -1.6849187050214950E-004 + 108.72000000000000 -1.7492403592812248E-004 + 108.78000000000000 -1.8125578820683087E-004 + 108.84000000000000 -1.8746954074389243E-004 + 108.90000000000001 -1.9354825791058914E-004 + 108.96000000000001 -1.9947546696655577E-004 + 109.01999999999998 -2.0523529697534976E-004 + 109.07999999999998 -2.1081247227646685E-004 + 109.13999999999999 -2.1619241100328336E-004 + 109.19999999999999 -2.2136118410585352E-004 + 109.25999999999999 -2.2630559731567711E-004 + 109.31999999999999 -2.3101320133865345E-004 + 109.38000000000000 -2.3547229711706755E-004 + 109.44000000000000 -2.3967198886416024E-004 + 109.50000000000000 -2.4360214771711327E-004 + 109.56000000000000 -2.4725349239686451E-004 + 109.62000000000000 -2.5061758443371016E-004 + 109.68000000000001 -2.5368679757728577E-004 + 109.73999999999998 -2.5645438335746381E-004 + 109.79999999999998 -2.5891446216212189E-004 + 109.85999999999999 -2.6106202684394113E-004 + 109.91999999999999 -2.6289294379346745E-004 + 109.97999999999999 -2.6440389001472178E-004 + 110.03999999999999 -2.6559248997932690E-004 + 110.09999999999999 -2.6645717886068310E-004 + 110.16000000000000 -2.6699723208690974E-004 + 110.22000000000000 -2.6721283753718833E-004 + 110.28000000000000 -2.6710496732298614E-004 + 110.34000000000000 -2.6667546776578142E-004 + 110.40000000000001 -2.6592694142278043E-004 + 110.46000000000001 -2.6486287808315283E-004 + 110.51999999999998 -2.6348748543612502E-004 + 110.57999999999998 -2.6180576222364525E-004 + 110.63999999999999 -2.5982352016685545E-004 + 110.69999999999999 -2.5754726232007024E-004 + 110.75999999999999 -2.5498422727601613E-004 + 110.81999999999999 -2.5214235527049316E-004 + 110.88000000000000 -2.4903026386993899E-004 + 110.94000000000000 -2.4565718330358751E-004 + 111.00000000000000 -2.4203297554445429E-004 + 111.06000000000000 -2.3816808326428357E-004 + 111.12000000000000 -2.3407348994450281E-004 + 111.18000000000001 -2.2976066225133162E-004 + 111.23999999999998 -2.2524152132651849E-004 + 111.29999999999998 -2.2052843283426767E-004 + 111.35999999999999 -2.1563412806602299E-004 + 111.41999999999999 -2.1057168201503822E-004 + 111.47999999999999 -2.0535445928043474E-004 + 111.53999999999999 -1.9999611162040224E-004 + 111.59999999999999 -1.9451049246676559E-004 + 111.66000000000000 -1.8891166532863853E-004 + 111.72000000000000 -1.8321384794959701E-004 + 111.78000000000000 -1.7743138037513582E-004 + 111.84000000000000 -1.7157870919634347E-004 + 111.90000000000001 -1.6567034602124541E-004 + 111.96000000000001 -1.5972083911252821E-004 + 112.01999999999998 -1.5374473637871236E-004 + 112.07999999999998 -1.4775658398416606E-004 + 112.13999999999999 -1.4177085975721924E-004 + 112.19999999999999 -1.3580197952013981E-004 + 112.25999999999999 -1.2986424930879143E-004 + 112.31999999999999 -1.2397182008905017E-004 + 112.38000000000000 -1.1813869209609150E-004 + 112.44000000000000 -1.1237867405851178E-004 + 112.50000000000000 -1.0670530650703736E-004 + 112.56000000000000 -1.0113191390807044E-004 + 112.62000000000000 -9.5671557590124517E-005 + 112.68000000000001 -9.0336973426346186E-005 + 112.73999999999998 -8.5140582808829139E-005 + 112.79999999999998 -8.0094489011606689E-005 + 112.85999999999999 -7.5210437619245115E-005 + 112.91999999999999 -7.0499830966652926E-005 + 112.97999999999999 -6.5973717075121083E-005 + 113.03999999999999 -6.1642765884192740E-005 + 113.09999999999999 -5.7517307929932649E-005 + 113.16000000000000 -5.3607300692244694E-005 + 113.22000000000000 -4.9922360390338199E-005 + 113.28000000000000 -4.6471746966681362E-005 + 113.34000000000000 -4.3264394274220265E-005 + 113.40000000000001 -4.0308905023823347E-005 + 113.46000000000001 -3.7613567970254569E-005 + 113.51999999999998 -3.5186352842966038E-005 + 113.57999999999998 -3.3034954137606688E-005 + 113.63999999999999 -3.1166785249847472E-005 + 113.69999999999999 -2.9588982558816280E-005 + 113.75999999999999 -2.8308447820684199E-005 + 113.81999999999999 -2.7331838765600117E-005 + 113.88000000000000 -2.6665606916336089E-005 + 113.94000000000000 -2.6315996625953773E-005 + 114.00000000000000 -2.6289078826301452E-005 + 114.06000000000000 -2.6590754480468151E-005 + 114.12000000000000 -2.7226795273556288E-005 + 114.18000000000001 -2.8202845231235272E-005 + 114.23999999999998 -2.9524456631186450E-005 + 114.29999999999998 -3.1197104258451732E-005 + 114.35999999999999 -3.3226184909695422E-005 + 114.41999999999999 -3.5617087954050376E-005 + 114.47999999999999 -3.8375168445731401E-005 + 114.53999999999999 -4.1505790147670610E-005 + 114.59999999999999 -4.5014297725641327E-005 + 114.66000000000000 -4.8906136662619964E-005 + 114.72000000000000 -5.3186739516862659E-005 + 114.78000000000000 -5.7861633054906287E-005 + 114.84000000000000 -6.2936412748492565E-005 + 114.90000000000001 -6.8416737853969076E-005 + 114.96000000000001 -7.4308393517552495E-005 + 115.01999999999998 -8.0617220109031185E-005 + 115.07999999999998 -8.7349181725384517E-005 + 115.13999999999999 -9.4510326265223864E-005 + 115.19999999999999 -1.0210678145119683E-004 + 115.25999999999999 -1.1014477492361088E-004 + 115.31999999999999 -1.1863060994716422E-004 + 115.38000000000000 -1.2757064229872311E-004 + 115.44000000000000 -1.3697126723443367E-004 + 115.50000000000000 -1.4683891762796867E-004 + 115.56000000000000 -1.5717998576978218E-004 + 115.62000000000000 -1.6800082508347300E-004 + 115.68000000000001 -1.7930777393556486E-004 + 115.73999999999998 -1.9110703102256368E-004 + 115.79999999999998 -2.0340468598156378E-004 + 115.85999999999999 -2.1620667236532432E-004 + 115.91999999999999 -2.2951867203421168E-004 + 115.97999999999999 -2.4334617108624193E-004 + 116.03999999999999 -2.5769435581524260E-004 + 116.09999999999999 -2.7256810464356914E-004 + 116.16000000000000 -2.8797188870084380E-004 + 116.22000000000000 -3.0390979471001198E-004 + 116.28000000000000 -3.2038548210524539E-004 + 116.34000000000000 -3.3740208649006846E-004 + 116.40000000000001 -3.5496216854157719E-004 + 116.46000000000001 -3.7306775283653783E-004 + 116.51999999999998 -3.9172012221014242E-004 + 116.57999999999998 -4.1091997708660015E-004 + 116.63999999999999 -4.3066718879968804E-004 + 116.69999999999999 -4.5096074597033545E-004 + 116.75999999999999 -4.7179892366950660E-004 + 116.81999999999999 -4.9317890461372544E-004 + 116.88000000000000 -5.1509697011200358E-004 + 116.94000000000000 -5.3754836152806421E-004 + 117.00000000000000 -5.6052720431285755E-004 + 117.06000000000000 -5.8402649088913627E-004 + 117.12000000000000 -6.0803792779537695E-004 + 117.18000000000001 -6.3255210272635020E-004 + 117.23999999999998 -6.5755816705374858E-004 + 117.29999999999998 -6.8304408893995528E-004 + 117.35999999999999 -7.0899636494455888E-004 + 117.41999999999999 -7.3540011068496422E-004 + 117.47999999999999 -7.6223904923379570E-004 + 117.53999999999999 -7.8949541400204605E-004 + 117.59999999999999 -8.1714984918406723E-004 + 117.66000000000000 -8.4518163392376588E-004 + 117.72000000000000 -8.7356850737992044E-004 + 117.78000000000000 -9.0228676847615681E-004 + 117.84000000000000 -9.3131094471133713E-004 + 117.90000000000001 -9.6061428262170093E-004 + 117.96000000000001 -9.9016844828768110E-004 + 118.01999999999998 -1.0199435044660780E-003 + 118.07999999999998 -1.0499080327138661E-003 + 118.13999999999999 -1.0800291432516457E-003 + 118.19999999999999 -1.1102725258022562E-003 + 118.25999999999999 -1.1406023962991741E-003 + 118.31999999999999 -1.1709815179944615E-003 + 118.38000000000000 -1.2013714523823331E-003 + 118.44000000000000 -1.2317321943252279E-003 + 118.50000000000000 -1.2620226443274115E-003 + 118.56000000000000 -1.2922004176362527E-003 + 118.62000000000000 -1.3222221091756235E-003 + 118.68000000000001 -1.3520429940425383E-003 + 118.73999999999998 -1.3816176343103758E-003 + 118.79999999999998 -1.4108994094807585E-003 + 118.85999999999999 -1.4398410526679064E-003 + 118.91999999999999 -1.4683943506602435E-003 + 118.97999999999999 -1.4965105661293918E-003 + 119.03999999999999 -1.5241403851604931E-003 + 119.09999999999999 -1.5512338865304714E-003 + 119.16000000000000 -1.5777407609808432E-003 + 119.22000000000000 -1.6036106934406151E-003 + 119.28000000000000 -1.6287929222624264E-003 + 119.34000000000000 -1.6532368458377427E-003 + 119.40000000000001 -1.6768917848395354E-003 + 119.46000000000001 -1.6997073459360202E-003 + 119.51999999999998 -1.7216333953041080E-003 + 119.57999999999998 -1.7426202798044420E-003 + 119.63999999999999 -1.7626189797514170E-003 + 119.69999999999999 -1.7815809170068705E-003 + 119.75999999999999 -1.7994585874808729E-003 + 119.81999999999999 -1.8162052527753423E-003 + 119.88000000000000 -1.8317753040852720E-003 + 119.94000000000000 -1.8461242572566110E-003 + 120.00000000000000 -1.8592089035931634E-003 + 120.06000000000000 -1.8709874297062493E-003 + 120.12000000000000 -1.8814196749689558E-003 + 120.18000000000001 -1.8904669558079997E-003 + 120.23999999999998 -1.8980924827057099E-003 + 120.29999999999998 -1.9042612583057791E-003 + 120.35999999999999 -1.9089402649634481E-003 + 120.41999999999999 -1.9120984128284946E-003 + 120.47999999999999 -1.9137068905574540E-003 + 120.53999999999999 -1.9137391043660362E-003 + 120.59999999999999 -1.9121710097034046E-003 + 120.66000000000000 -1.9089808598900496E-003 + 120.72000000000000 -1.9041491285785627E-003 + 120.78000000000000 -1.8976594719861358E-003 + 120.84000000000000 -1.8894976398647495E-003 + 120.90000000000001 -1.8796524564735442E-003 + 120.95999999999998 -1.8681152432031148E-003 + 121.01999999999998 -1.8548804663483503E-003 + 121.07999999999998 -1.8399453138988379E-003 + 121.13999999999999 -1.8233100513478993E-003 + 121.19999999999999 -1.8049776902430703E-003 + 121.25999999999999 -1.7849541443078665E-003 + 121.31999999999999 -1.7632483932174543E-003 + 121.38000000000000 -1.7398722821996100E-003 + 121.44000000000000 -1.7148407877058836E-003 + 121.50000000000000 -1.6881716441534817E-003 + 121.56000000000000 -1.6598855691851246E-003 + 121.62000000000000 -1.6300061640734617E-003 + 121.68000000000001 -1.5985597796682181E-003 + 121.73999999999998 -1.5655756724079438E-003 + 121.79999999999998 -1.5310858926631194E-003 + 121.85999999999999 -1.4951251119561277E-003 + 121.91999999999999 -1.4577306279991683E-003 + 121.97999999999999 -1.4189424268825292E-003 + 122.03999999999999 -1.3788028418315927E-003 + 122.09999999999999 -1.3373567780955331E-003 + 122.16000000000000 -1.2946511805338610E-003 + 122.22000000000000 -1.2507356996312429E-003 + 122.28000000000000 -1.2056617264744720E-003 + 122.34000000000000 -1.1594828721684346E-003 + 122.40000000000001 -1.1122544737011155E-003 + 122.45999999999998 -1.0640339029938538E-003 + 122.51999999999998 -1.0148799591866290E-003 + 122.57999999999998 -9.6485319176444514E-004 + 122.63999999999999 -9.1401535831700574E-004 + 122.69999999999999 -8.6242961226862909E-004 + 122.75999999999999 -8.1016023623887697E-004 + 122.81999999999999 -7.5727259295882378E-004 + 122.88000000000000 -7.0383260113960960E-004 + 122.94000000000000 -6.4990728923598772E-004 + 123.00000000000000 -5.9556409354343367E-004 + 123.06000000000000 -5.4087082162384507E-004 + 123.12000000000000 -4.8589559590283692E-004 + 123.18000000000001 -4.3070676866277031E-004 + 123.23999999999998 -3.7537256830082205E-004 + 123.29999999999998 -3.1996122302908962E-004 + 123.35999999999999 -2.6454055412381022E-004 + 123.41999999999999 -2.0917812817346210E-004 + 123.47999999999999 -1.5394080637939260E-004 + 123.53999999999999 -9.8894806523098014E-005 + 123.59999999999999 -4.4105599970056504E-005 + 123.66000000000000 1.0362355242814745E-005 + 123.72000000000000 6.4445743070391077E-005 + 123.78000000000000 1.1808226595442673E-004 + 123.84000000000000 1.7121103412469726E-004 + 123.90000000000001 2.2377256870605576E-004 + 123.95999999999998 2.7570891677410482E-004 + 124.01999999999998 3.2696369467954446E-004 + 124.07999999999998 3.7748228904888243E-004 + 124.13999999999999 4.2721184761169544E-004 + 124.19999999999999 4.7610145357548472E-004 + 124.25999999999999 5.2410209524841726E-004 + 124.31999999999999 5.7116686203260135E-004 + 124.38000000000000 6.1725087517912444E-004 + 124.44000000000000 6.6231158097041810E-004 + 124.50000000000000 7.0630844454480516E-004 + 124.56000000000000 7.4920335932972303E-004 + 124.62000000000000 7.9096048793771947E-004 + 124.68000000000001 8.3154632343653044E-004 + 124.73999999999998 8.7092980127171521E-004 + 124.79999999999998 9.0908224571324876E-004 + 124.85999999999999 9.4597748211000998E-004 + 124.91999999999999 9.8159153232350296E-004 + 124.97999999999999 1.0159031596399296E-003 + 125.03999999999999 1.0488932027459554E-003 + 125.09999999999999 1.0805453731593416E-003 + 125.16000000000000 1.1108453339181243E-003 + 125.22000000000000 1.1397812896672588E-003 + 125.28000000000000 1.1673437767552525E-003 + 125.34000000000000 1.1935256947834894E-003 + 125.40000000000001 1.2183221628203672E-003 + 125.45999999999998 1.2417305183304965E-003 + 125.51999999999998 1.2637501716408427E-003 + 125.57999999999998 1.2843827537939642E-003 + 125.63999999999999 1.3036319656911475E-003 + 125.69999999999999 1.3215035581786866E-003 + 125.75999999999999 1.3380051879778975E-003 + 125.81999999999999 1.3531462760913166E-003 + 125.88000000000000 1.3669380569717091E-003 + 125.94000000000000 1.3793937469588379E-003 + 126.00000000000000 1.3905280220620250E-003 + 126.06000000000000 1.4003572098556700E-003 + 126.12000000000000 1.4088990684052673E-003 + 126.18000000000001 1.4161728760132772E-003 + 126.23999999999998 1.4221992599544155E-003 + 126.29999999999998 1.4269999763432482E-003 + 126.35999999999999 1.4305980698482183E-003 + 126.41999999999999 1.4330176326067929E-003 + 126.47999999999999 1.4342837839655693E-003 + 126.53999999999999 1.4344223814680495E-003 + 126.59999999999999 1.4334603329286648E-003 + 126.66000000000000 1.4314251972220927E-003 + 126.72000000000000 1.4283451688843676E-003 + 126.78000000000000 1.4242489141574584E-003 + 126.84000000000000 1.4191657902379415E-003 + 126.90000000000001 1.4131255506513321E-003 + 126.95999999999998 1.4061580859387102E-003 + 127.01999999999998 1.3982938422714792E-003 + 127.07999999999998 1.3895632470430515E-003 + 127.13999999999999 1.3799968000425536E-003 + 127.19999999999999 1.3696253266445354E-003 + 127.25999999999999 1.3584793314529641E-003 + 127.31999999999999 1.3465895316696203E-003 + 127.38000000000000 1.3339862696222756E-003 + 127.44000000000000 1.3206996191478071E-003 + 127.50000000000000 1.3067596020524617E-003 + 127.56000000000000 1.2921957792315023E-003 + 127.62000000000000 1.2770372018882569E-003 + 127.68000000000001 1.2613126982231593E-003 + 127.73999999999998 1.2450504657598111E-003 + 127.79999999999998 1.2282782019169751E-003 + 127.85999999999999 1.2110230573855276E-003 + 127.91999999999999 1.1933115378522155E-003 + 127.97999999999999 1.1751695817503606E-003 + 128.03999999999999 1.1566224344334612E-003 + 128.09999999999999 1.1376946010387594E-003 + 128.16000000000000 1.1184097946318563E-003 + 128.22000000000000 1.0987911137883904E-003 + 128.28000000000000 1.0788609630237001E-003 + 128.34000000000000 1.0586409473583049E-003 + 128.40000000000001 1.0381518963867241E-003 + 128.45999999999998 1.0174137997897631E-003 + 128.51999999999998 9.9644593374087660E-004 + 128.57999999999998 9.7526687145807684E-004 + 128.63999999999999 9.5389430511343219E-004 + 128.69999999999999 9.3234513483714146E-004 + 128.75999999999999 9.1063548766553341E-004 + 128.81999999999999 8.8878079380633451E-004 + 128.88000000000000 8.6679587593002140E-004 + 128.94000000000000 8.4469458837625115E-004 + 129.00000000000000 8.2249028260923793E-004 + 129.06000000000000 8.0019552536746748E-004 + 129.12000000000000 7.7782228030579274E-004 + 129.18000000000001 7.5538188530699271E-004 + 129.23999999999998 7.3288509003880168E-004 + 129.29999999999998 7.1034209746439288E-004 + 129.35999999999999 6.8776249250631488E-004 + 129.41999999999999 6.6515547024032016E-004 + 129.47999999999999 6.4252969083953974E-004 + 129.53999999999999 6.1989342850994719E-004 + 129.59999999999999 5.9725443166803842E-004 + 129.66000000000000 5.7462014541211223E-004 + 129.72000000000000 5.5199774895732816E-004 + 129.78000000000000 5.2939399602872994E-004 + 129.84000000000000 5.0681545475455853E-004 + 129.90000000000001 4.8426848738776919E-004 + 129.95999999999998 4.6175918898802711E-004 + 130.01999999999998 4.3929355325893123E-004 + 130.07999999999998 4.1687747915312046E-004 + 130.13999999999999 3.9451677396010637E-004 + 130.19999999999999 3.7221723786977048E-004 + 130.25999999999999 3.4998474718688909E-004 + 130.31999999999999 3.2782513606716449E-004 + 130.38000000000000 3.0574439078948556E-004 + 130.44000000000000 2.8374860690838835E-004 + 130.50000000000000 2.6184400880704711E-004 + 130.56000000000000 2.4003705039271712E-004 + 130.62000000000000 2.1833435016996652E-004 + 130.68000000000001 1.9674280430005290E-004 + 130.73999999999998 1.7526952074491985E-004 + 130.79999999999998 1.5392193791193278E-004 + 130.85999999999999 1.3270771200002009E-004 + 130.91999999999999 1.1163487391578950E-004 + 130.97999999999999 9.0711750387203268E-005 + 131.03999999999999 6.9947004702089656E-005 + 131.09999999999999 4.9349661537753584E-005 + 131.16000000000000 2.8929083807861611E-005 + 131.22000000000000 8.6950102577515241E-006 + 131.28000000000000 -1.1342444468411902E-005 + 131.34000000000000 -3.1172787062777012E-005 + 131.40000000000001 -5.0785172215311099E-005 + 131.45999999999998 -7.0168347322624610E-005 + 131.51999999999998 -8.9310712340627915E-005 + 131.57999999999998 -1.0820031393382963E-004 + 131.63999999999999 -1.2682483724909559E-004 + 131.69999999999999 -1.4517164523367867E-004 + 131.75999999999999 -1.6322778805515911E-004 + 131.81999999999999 -1.8098003180210724E-004 + 131.88000000000000 -1.9841485756678928E-004 + 131.94000000000000 -2.1551854660989623E-004 + 132.00000000000000 -2.3227711210398072E-004 + 132.06000000000000 -2.4867641858572416E-004 + 132.12000000000000 -2.6470216827713627E-004 + 132.18000000000001 -2.8033996796637248E-004 + 132.23999999999998 -2.9557528628317638E-004 + 132.29999999999998 -3.1039358034747473E-004 + 132.35999999999999 -3.2478024054127325E-004 + 132.41999999999999 -3.3872071120487162E-004 + 132.47999999999999 -3.5220049466898535E-004 + 132.53999999999999 -3.6520513038237391E-004 + 132.59999999999999 -3.7772029962041193E-004 + 132.66000000000000 -3.8973187870018698E-004 + 132.72000000000000 -4.0122591680734386E-004 + 132.78000000000000 -4.1218869686545246E-004 + 132.84000000000000 -4.2260677832904267E-004 + 132.90000000000001 -4.3246704968228207E-004 + 132.95999999999998 -4.4175678928915564E-004 + 133.01999999999998 -4.5046363696627938E-004 + 133.07999999999998 -4.5857568918411117E-004 + 133.13999999999999 -4.6608147832869244E-004 + 133.19999999999999 -4.7297011403590693E-004 + 133.25999999999999 -4.7923115507636629E-004 + 133.31999999999999 -4.8485482969801120E-004 + 133.38000000000000 -4.8983193431131129E-004 + 133.44000000000000 -4.9415385104533630E-004 + 133.50000000000000 -4.9781267561413564E-004 + 133.56000000000000 -5.0080119995118510E-004 + 133.62000000000000 -5.0311292477185740E-004 + 133.68000000000001 -5.0474199467092046E-004 + 133.73999999999998 -5.0568343228363710E-004 + 133.79999999999998 -5.0593306874397359E-004 + 133.85999999999999 -5.0548745378523182E-004 + 133.91999999999999 -5.0434400143663184E-004 + 133.97999999999999 -5.0250094432234831E-004 + 134.03999999999999 -4.9995739350999898E-004 + 134.09999999999999 -4.9671341611933221E-004 + 134.16000000000000 -4.9276983078844010E-004 + 134.22000000000000 -4.8812842753889350E-004 + 134.28000000000000 -4.8279191185636276E-004 + 134.34000000000000 -4.7676384566584849E-004 + 134.40000000000001 -4.7004865530680533E-004 + 134.45999999999998 -4.6265169396922634E-004 + 134.51999999999998 -4.5457918452685591E-004 + 134.57999999999998 -4.4583818769021927E-004 + 134.63999999999999 -4.3643663920682946E-004 + 134.69999999999999 -4.2638333645079454E-004 + 134.75999999999999 -4.1568781177023619E-004 + 134.81999999999999 -4.0436046527193571E-004 + 134.88000000000000 -3.9241247811700684E-004 + 134.94000000000000 -3.7985577528355661E-004 + 135.00000000000000 -3.6670307260526069E-004 + 135.06000000000000 -3.5296784562209219E-004 + 135.12000000000000 -3.3866428244051506E-004 + 135.18000000000001 -3.2380726883927074E-004 + 135.23999999999998 -3.0841244672986679E-004 + 135.29999999999998 -2.9249613066315738E-004 + 135.35999999999999 -2.7607525403405229E-004 + 135.41999999999999 -2.5916745270065949E-004 + 135.47999999999999 -2.4179098831518848E-004 + 135.53999999999999 -2.2396468551817109E-004 + 135.59999999999999 -2.0570800908682301E-004 + 135.66000000000000 -1.8704088848411950E-004 + 135.72000000000000 -1.6798380734426069E-004 + 135.78000000000000 -1.4855775649840386E-004 + 135.84000000000000 -1.2878414888416414E-004 + 135.90000000000001 -1.0868482201988161E-004 + 135.95999999999998 -8.8282007148125021E-005 + 136.01999999999998 -6.7598291378088851E-005 + 136.07999999999998 -4.6656587731718398E-005 + 136.13999999999999 -2.5480110932390118E-005 + 136.19999999999999 -4.0923501926523328E-006 + 136.25999999999999 1.7482971124430684E-005 + 136.31999999999999 3.9221913122475604E-005 + 136.38000000000000 6.1100312126461309E-005 + 136.44000000000000 8.3093873878166158E-005 + 136.50000000000000 1.0517814747559628E-004 + 136.56000000000000 1.2732854193976873E-004 + 136.62000000000000 1.4952039966467098E-004 + 136.68000000000001 1.7172898852040107E-004 + 136.73999999999998 1.9392951712661919E-004 + 136.79999999999998 2.1609723723592508E-004 + 136.85999999999999 2.3820735130055672E-004 + 136.91999999999999 2.6023515508412869E-004 + 136.97999999999999 2.8215599837962135E-004 + 137.03999999999999 3.0394531003546298E-004 + 137.09999999999999 3.2557868292549912E-004 + 137.16000000000000 3.4703187328718077E-004 + 137.22000000000000 3.6828082161251068E-004 + 137.28000000000000 3.8930170476988405E-004 + 137.34000000000000 4.1007090060019306E-004 + 137.40000000000001 4.3056516459915418E-004 + 137.45999999999998 4.5076149862525951E-004 + 137.51999999999998 4.7063721307732368E-004 + 137.57999999999998 4.9017009359373016E-004 + 137.63999999999999 5.0933824790022533E-004 + 137.69999999999999 5.2812024537453686E-004 + 137.75999999999999 5.4649516307325090E-004 + 137.81999999999999 5.6444249983811736E-004 + 137.88000000000000 5.8194243991354798E-004 + 137.94000000000000 5.9897553529742289E-004 + 138.00000000000000 6.1552309186789782E-004 + 138.06000000000000 6.3156685714423066E-004 + 138.12000000000000 6.4708942714347640E-004 + 138.18000000000001 6.6207396718548372E-004 + 138.23999999999998 6.7650436084255926E-004 + 138.29999999999998 6.9036525111654105E-004 + 138.35999999999999 7.0364203729273442E-004 + 138.41999999999999 7.1632082781567029E-004 + 138.47999999999999 7.2838863211068493E-004 + 138.53999999999999 7.3983314720541329E-004 + 138.59999999999999 7.5064311348560454E-004 + 138.66000000000000 7.6080794404995210E-004 + 138.72000000000000 7.7031808279632208E-004 + 138.78000000000000 7.7916482700774239E-004 + 138.84000000000000 7.8734047443996375E-004 + 138.90000000000001 7.9483824325075837E-004 + 138.95999999999998 8.0165236130805837E-004 + 139.01999999999998 8.0777808019841810E-004 + 139.07999999999998 8.1321173153639189E-004 + 139.13999999999999 8.1795054799340186E-004 + 139.19999999999999 8.2199286679703488E-004 + 139.25999999999999 8.2533821851461201E-004 + 139.31999999999999 8.2798703773090680E-004 + 139.38000000000000 8.2994097045885362E-004 + 139.44000000000000 8.3120260032431875E-004 + 139.50000000000000 8.3177560765459774E-004 + 139.56000000000000 8.3166475754738211E-004 + 139.62000000000000 8.3087587438292817E-004 + 139.68000000000001 8.2941581135692675E-004 + 139.73999999999998 8.2729226484123247E-004 + 139.79999999999998 8.2451414419496894E-004 + 139.85999999999999 8.2109123611327816E-004 + 139.91999999999999 8.1703427397855524E-004 + 139.97999999999999 8.1235498825162566E-004 + 140.03999999999999 8.0706593059570297E-004 + 140.09999999999999 8.0118063459570527E-004 + 140.16000000000000 7.9471340089927293E-004 + 140.22000000000000 7.8767948323976277E-004 + 140.28000000000000 7.8009488605491027E-004 + 140.34000000000000 7.7197642518166078E-004 + 140.40000000000001 7.6334156113786183E-004 + 140.45999999999998 7.5420862655033215E-004 + 140.51999999999998 7.4459655311194365E-004 + 140.57999999999998 7.3452489748887279E-004 + 140.63999999999999 7.2401373695486564E-004 + 140.69999999999999 7.1308376898757608E-004 + 140.75999999999999 7.0175616928273116E-004 + 140.81999999999999 6.9005248373563773E-004 + 140.88000000000000 6.7799463428292860E-004 + 140.94000000000000 6.6560490822673653E-004 + 141.00000000000000 6.5290577155802804E-004 + 141.06000000000000 6.3991998454892847E-004 + 141.12000000000000 6.2667038115964146E-004 + 141.18000000000001 6.1317986177209676E-004 + 141.23999999999998 5.9947146127285321E-004 + 141.29999999999998 5.8556808647120201E-004 + 141.35999999999999 5.7149264278887339E-004 + 141.41999999999999 5.5726784212380013E-004 + 141.47999999999999 5.4291621512718869E-004 + 141.53999999999999 5.2846000323927963E-004 + 141.59999999999999 5.1392127170644616E-004 + 141.66000000000000 4.9932163201566349E-004 + 141.72000000000000 4.8468232424332772E-004 + 141.78000000000000 4.7002409315341449E-004 + 141.84000000000000 4.5536718698975401E-004 + 141.90000000000001 4.4073128103578924E-004 + 141.95999999999998 4.2613543587373279E-004 + 142.01999999999998 4.1159812335039565E-004 + 142.07999999999998 3.9713709017294207E-004 + 142.13999999999999 3.8276934070540652E-004 + 142.19999999999999 3.6851112252730701E-004 + 142.25999999999999 3.5437787032845656E-004 + 142.31999999999999 3.4038424541902126E-004 + 142.38000000000000 3.2654399480893959E-004 + 142.44000000000000 3.1287002471893364E-004 + 142.50000000000000 2.9937431874720543E-004 + 142.56000000000000 2.8606793916259316E-004 + 142.62000000000000 2.7296105571301179E-004 + 142.68000000000001 2.6006285421973670E-004 + 142.73999999999998 2.4738154646582975E-004 + 142.79999999999998 2.3492440672743408E-004 + 142.85999999999999 2.2269769029768690E-004 + 142.91999999999999 2.1070667377429153E-004 + 142.97999999999999 1.9895568853130682E-004 + 143.03999999999999 1.8744803409010568E-004 + 143.09999999999999 1.7618604395890292E-004 + 143.16000000000000 1.6517107400455916E-004 + 143.22000000000000 1.5440353101224804E-004 + 143.28000000000000 1.4388286034670470E-004 + 143.34000000000000 1.3360761690112979E-004 + 143.40000000000001 1.2357544004575166E-004 + 143.45999999999998 1.1378312874219391E-004 + 143.51999999999998 1.0422663133307793E-004 + 143.57999999999998 9.4901106284705028E-005 + 143.63999999999999 8.5800953496609710E-005 + 143.69999999999999 7.6919855008696588E-005 + 143.75999999999999 6.8250804221238451E-005 + 143.81999999999999 5.9786154949010931E-005 + 143.88000000000000 5.1517667896830807E-005 + 143.94000000000000 4.3436521467966825E-005 + 144.00000000000000 3.5533401020747988E-005 + 144.06000000000000 2.7798496022606172E-005 + 144.12000000000000 2.0221565436981676E-005 + 144.18000000000001 1.2791977683505738E-005 + 144.23999999999998 5.4987529862605026E-006 + 144.29999999999998 -1.6693930527793917E-006 + 144.35999999999999 -8.7239991141403498E-006 + 144.41999999999999 -1.5676815017321393E-005 + 144.47999999999999 -2.2539748569832791E-005 + 144.53999999999999 -2.9324815240870941E-005 + 144.59999999999999 -3.6044091950456664E-005 + 144.66000000000000 -4.2709659378677677E-005 + 144.72000000000000 -4.9333555038515091E-005 + 144.78000000000000 -5.5927721224532389E-005 + 144.84000000000000 -6.2503949860460436E-005 + 144.90000000000001 -6.9073843554819564E-005 + 144.95999999999998 -7.5648748690678943E-005 + 145.01999999999998 -8.2239727034650998E-005 + 145.07999999999998 -8.8857522339688206E-005 + 145.13999999999999 -9.5512478666942295E-005 + 145.19999999999999 -1.0221454333773861E-004 + 145.25999999999999 -1.0897322167141045E-004 + 145.31999999999999 -1.1579752243265020E-004 + 145.38000000000000 -1.2269593764616978E-004 + 145.44000000000000 -1.2967643121447457E-004 + 145.50000000000000 -1.3674640478517248E-004 + 145.56000000000000 -1.4391263786195851E-004 + 145.62000000000000 -1.5118131514636735E-004 + 145.68000000000001 -1.5855801160078736E-004 + 145.73999999999998 -1.6604759912533848E-004 + 145.79999999999998 -1.7365430669437099E-004 + 145.85999999999999 -1.8138169151292222E-004 + 145.91999999999999 -1.8923259953283696E-004 + 145.97999999999999 -1.9720919954405964E-004 + 146.03999999999999 -2.0531292965456492E-004 + 146.09999999999999 -2.1354453765118505E-004 + 146.16000000000000 -2.2190406761052369E-004 + 146.22000000000000 -2.3039082120139342E-004 + 146.28000000000000 -2.3900343481570902E-004 + 146.34000000000000 -2.4773982384586069E-004 + 146.40000000000001 -2.5659722666877930E-004 + 146.45999999999998 -2.6557220126007582E-004 + 146.51999999999998 -2.7466060729042262E-004 + 146.57999999999998 -2.8385768428452194E-004 + 146.63999999999999 -2.9315801855876186E-004 + 146.69999999999999 -3.0255557878312942E-004 + 146.75999999999999 -3.1204372766345501E-004 + 146.81999999999999 -3.2161520227123934E-004 + 146.88000000000000 -3.3126226323438945E-004 + 146.94000000000000 -3.4097659360987257E-004 + 147.00000000000000 -3.5074938101027761E-004 + 147.06000000000000 -3.6057138003822329E-004 + 147.12000000000000 -3.7043284886266448E-004 + 147.18000000000001 -3.8032366076172269E-004 + 147.23999999999998 -3.9023331290523430E-004 + 147.29999999999998 -4.0015102711785821E-004 + 147.35999999999999 -4.1006568589422817E-004 + 147.41999999999999 -4.1996591014501888E-004 + 147.47999999999999 -4.2984010908444413E-004 + 147.53999999999999 -4.3967656222928397E-004 + 147.59999999999999 -4.4946338931101001E-004 + 147.66000000000000 -4.5918859269007402E-004 + 147.72000000000000 -4.6884015266828458E-004 + 147.78000000000000 -4.7840596008031212E-004 + 147.84000000000000 -4.8787391914728925E-004 + 147.90000000000001 -4.9723193212192250E-004 + 147.95999999999998 -5.0646801803399979E-004 + 148.01999999999998 -5.1557022788378056E-004 + 148.07999999999998 -5.2452673202151988E-004 + 148.13999999999999 -5.3332585268548295E-004 + 148.19999999999999 -5.4195607383145398E-004 + 148.25999999999999 -5.5040601209026968E-004 + 148.31999999999999 -5.5866456230976565E-004 + 148.38000000000000 -5.6672085860633788E-004 + 148.44000000000000 -5.7456424059191841E-004 + 148.50000000000000 -5.8218446108224923E-004 + 148.56000000000000 -5.8957147745351715E-004 + 148.62000000000000 -5.9671560509794836E-004 + 148.68000000000001 -6.0360765253605962E-004 + 148.73999999999998 -6.1023869212617054E-004 + 148.79999999999998 -6.1660023229209325E-004 + 148.85999999999999 -6.2268417671747505E-004 + 148.91999999999999 -6.2848281201973886E-004 + 148.97999999999999 -6.3398896639155222E-004 + 149.03999999999999 -6.3919584458519156E-004 + 149.09999999999999 -6.4409705075716317E-004 + 149.16000000000000 -6.4868675083286712E-004 + 149.22000000000000 -6.5295934930233331E-004 + 149.28000000000000 -6.5690984495607658E-004 + 149.34000000000000 -6.6053362351575046E-004 + 149.40000000000001 -6.6382640107810862E-004 + 149.45999999999998 -6.6678438905230352E-004 + 149.51999999999998 -6.6940422499730135E-004 + 149.57999999999998 -6.7168291744195416E-004 + 149.63999999999999 -6.7361780927000837E-004 + 149.69999999999999 -6.7520678296561078E-004 + 149.75999999999999 -6.7644795905352317E-004 + 149.81999999999999 -6.7734002756149499E-004 + 149.88000000000000 -6.7788184011035549E-004 + 149.94000000000000 -6.7807270755213033E-004 + 150.00000000000000 -6.7791236416444006E-004 + 150.06000000000000 -6.7740074713456893E-004 + 150.12000000000000 -6.7653825982382963E-004 + 150.18000000000001 -6.7532564030540164E-004 + 150.23999999999998 -6.7376381037854798E-004 + 150.29999999999998 -6.7185403777399286E-004 + 150.35999999999999 -6.6959790073165177E-004 + 150.41999999999999 -6.6699718606331711E-004 + 150.47999999999999 -6.6405396314407768E-004 + 150.53999999999999 -6.6077044180153218E-004 + 150.59999999999999 -6.5714914546726822E-004 + 150.66000000000000 -6.5319273224507288E-004 + 150.72000000000000 -6.4890402074586375E-004 + 150.78000000000000 -6.4428606033582845E-004 + 150.84000000000000 -6.3934209658820845E-004 + 150.90000000000001 -6.3407548973202403E-004 + 150.95999999999998 -6.2848972211832063E-004 + 151.01999999999998 -6.2258853638017366E-004 + 151.07999999999998 -6.1637570013299168E-004 + 151.13999999999999 -6.0985531196175045E-004 + 151.19999999999999 -6.0303146058501291E-004 + 151.25999999999999 -5.9590843844522135E-004 + 151.31999999999999 -5.8849072839057550E-004 + 151.38000000000000 -5.8078292554588501E-004 + 151.44000000000000 -5.7278975965930831E-004 + 151.50000000000000 -5.6451622221764071E-004 + 151.56000000000000 -5.5596739364429033E-004 + 151.62000000000000 -5.4714853757475317E-004 + 151.68000000000001 -5.3806503395088215E-004 + 151.73999999999998 -5.2872249653193246E-004 + 151.79999999999998 -5.1912670207739380E-004 + 151.85999999999999 -5.0928350620760168E-004 + 151.91999999999999 -4.9919911116671828E-004 + 151.97999999999999 -4.8887982859778631E-004 + 152.03999999999999 -4.7833216037046039E-004 + 152.09999999999999 -4.6756291907144539E-004 + 152.16000000000000 -4.5657903634174166E-004 + 152.22000000000000 -4.4538773008785340E-004 + 152.28000000000000 -4.3399652358170308E-004 + 152.34000000000000 -4.2241310461987207E-004 + 152.40000000000001 -4.1064543836048984E-004 + 152.45999999999998 -3.9870179938666933E-004 + 152.51999999999998 -3.8659073797530817E-004 + 152.57999999999998 -3.7432113446008418E-004 + 152.63999999999999 -3.6190212390012014E-004 + 152.69999999999999 -3.4934318933032302E-004 + 152.75999999999999 -3.3665410005902794E-004 + 152.81999999999999 -3.2384493692507279E-004 + 152.88000000000000 -3.1092614450011782E-004 + 152.94000000000000 -2.9790843435050711E-004 + 153.00000000000000 -2.8480290314460556E-004 + 153.06000000000000 -2.7162093185342096E-004 + 153.12000000000000 -2.5837420145344774E-004 + 153.17999999999998 -2.4507475418318223E-004 + 153.23999999999998 -2.3173487798801193E-004 + 153.29999999999998 -2.1836719436380694E-004 + 153.35999999999999 -2.0498460139584313E-004 + 153.41999999999999 -1.9160026434991478E-004 + 153.47999999999999 -1.7822758310498599E-004 + 153.53999999999999 -1.6488022779096329E-004 + 153.59999999999999 -1.5157208041594597E-004 + 153.66000000000000 -1.3831724130043292E-004 + 153.72000000000000 -1.2512995718083023E-004 + 153.78000000000000 -1.1202467017164334E-004 + 153.84000000000000 -9.9015957610119795E-005 + 153.90000000000001 -8.6118536828627847E-005 + 153.95999999999998 -7.3347220504491119E-005 + 154.01999999999998 -6.0716922931385077E-005 + 154.07999999999998 -4.8242610039240270E-005 + 154.13999999999999 -3.5939302522995142E-005 + 154.19999999999999 -2.3822018525022936E-005 + 154.25999999999999 -1.1905792971356805E-005 + 154.31999999999999 -2.0561272729860473E-007 + 154.38000000000000 1.1263604604306392E-005 + 154.44000000000000 2.2487028416303087E-005 + 154.50000000000000 3.3449975582537855E-005 + 154.56000000000000 4.4137926974042936E-005 + 154.62000000000000 5.4536571092377213E-005 + 154.67999999999998 6.4631849397610717E-005 + 154.73999999999998 7.4409991219667000E-005 + 154.79999999999998 8.3857555573851593E-005 + 154.85999999999999 9.2961468605537681E-005 + 154.91999999999999 1.0170906796305773E-004 + 154.97999999999999 1.1008811470186970E-004 + 155.03999999999999 1.1808686651345864E-004 + 155.09999999999999 1.2569408353269054E-004 + 155.16000000000000 1.3289904144386604E-004 + 155.22000000000000 1.3969159338579894E-004 + 155.28000000000000 1.4606216652090739E-004 + 155.34000000000000 1.5200179145023645E-004 + 155.40000000000001 1.5750213111943010E-004 + 155.45999999999998 1.6255547314189184E-004 + 155.51999999999998 1.6715478252808208E-004 + 155.57999999999998 1.7129371093031924E-004 + 155.63999999999999 1.7496659051013252E-004 + 155.69999999999999 1.7816849238576872E-004 + 155.75999999999999 1.8089520690755460E-004 + 155.81999999999999 1.8314331059567871E-004 + 155.88000000000000 1.8491013373327504E-004 + 155.94000000000000 1.8619382010075908E-004 + 156.00000000000000 1.8699331384702545E-004 + 156.06000000000000 1.8730841120501762E-004 + 156.12000000000000 1.8713974366135728E-004 + 156.17999999999998 1.8648878967151086E-004 + 156.23999999999998 1.8535790271928315E-004 + 156.29999999999998 1.8375030434599875E-004 + 156.35999999999999 1.8167008414703297E-004 + 156.41999999999999 1.7912219230984053E-004 + 156.47999999999999 1.7611242925161770E-004 + 156.53999999999999 1.7264744795528260E-004 + 156.59999999999999 1.6873474255940746E-004 + 156.66000000000000 1.6438260525691639E-004 + 156.72000000000000 1.5960013939300986E-004 + 156.78000000000000 1.5439726400171130E-004 + 156.84000000000000 1.4878462192299927E-004 + 156.90000000000001 1.4277360967744195E-004 + 156.95999999999998 1.3637636778887239E-004 + 157.01999999999998 1.2960572335079981E-004 + 157.07999999999998 1.2247520965321553E-004 + 157.13999999999999 1.1499899845908250E-004 + 157.19999999999999 1.0719192204391542E-004 + 157.25999999999999 9.9069427040705176E-005 + 157.31999999999999 9.0647545751958465E-005 + 157.38000000000000 8.1942887525706108E-005 + 157.44000000000000 7.2972592618690860E-005 + 157.50000000000000 6.3754315243472832E-005 + 157.56000000000000 5.4306204408173308E-005 + 157.62000000000000 4.4646856859943594E-005 + 157.67999999999998 3.4795285156236001E-005 + 157.73999999999998 2.4770896768732821E-005 + 157.79999999999998 1.4593451378697644E-005 + 157.85999999999999 4.2830316038885832E-006 + 157.91999999999999 -6.1399854942305223E-006 + 157.97999999999999 -1.6654979487802844E-005 + 158.03999999999999 -2.7241105210457031E-005 + 158.09999999999999 -3.7877345051450855E-005 + 158.16000000000000 -4.8542532087905946E-005 + 158.22000000000000 -5.9215399463461280E-005 + 158.28000000000000 -6.9874608905535750E-005 + 158.34000000000000 -8.0498803476901495E-005 + 158.40000000000001 -9.1066637689360449E-005 + 158.45999999999998 -1.0155682133582946E-004 + 158.51999999999998 -1.1194816552538683E-004 + 158.57999999999998 -1.2221961489635024E-004 + 158.63999999999999 -1.3235030693729038E-004 + 158.69999999999999 -1.4231959072956280E-004 + 158.75999999999999 -1.5210708196356315E-004 + 158.81999999999999 -1.6169270020872928E-004 + 158.88000000000000 -1.7105668427698858E-004 + 158.94000000000000 -1.8017963985185982E-004 + 159.00000000000000 -1.8904259564646119E-004 + 159.06000000000000 -1.9762699848837646E-004 + 159.12000000000000 -2.0591477008248830E-004 + 159.17999999999998 -2.1388828611855788E-004 + 159.23999999999998 -2.2153043560545094E-004 + 159.29999999999998 -2.2882465891465483E-004 + 159.35999999999999 -2.3575494807442565E-004 + 159.41999999999999 -2.4230587650956594E-004 + 159.47999999999999 -2.4846261352474568E-004 + 159.53999999999999 -2.5421099346451686E-004 + 159.59999999999999 -2.5953745159176963E-004 + 159.66000000000000 -2.6442915101621787E-004 + 159.72000000000000 -2.6887396414345722E-004 + 159.78000000000000 -2.7286049981628850E-004 + 159.84000000000000 -2.7637809307603768E-004 + 159.90000000000001 -2.7941692983870776E-004 + 159.95999999999998 -2.8196794425450721E-004 + 160.01999999999998 -2.8402294500546118E-004 + 160.07999999999998 -2.8557456637407153E-004 + 160.13999999999999 -2.8661632359742192E-004 + 160.19999999999999 -2.8714259778305537E-004 + 160.25999999999999 -2.8714863247485643E-004 + 160.31999999999999 -2.8663060581312917E-004 + 160.38000000000000 -2.8558551228999524E-004 + 160.44000000000000 -2.8401128913251061E-004 + 160.50000000000000 -2.8190672292983319E-004 + 160.56000000000000 -2.7927151120409819E-004 + 160.62000000000000 -2.7610622424607020E-004 + 160.67999999999998 -2.7241226389541640E-004 + 160.73999999999998 -2.6819192914516812E-004 + 160.79999999999998 -2.6344837622310362E-004 + 160.85999999999999 -2.5818554785892567E-004 + 160.91999999999999 -2.5240829495173651E-004 + 160.97999999999999 -2.4612223967576143E-004 + 161.03999999999999 -2.3933384454741610E-004 + 161.09999999999999 -2.3205039540494249E-004 + 161.16000000000000 -2.2427995426724628E-004 + 161.22000000000000 -2.1603134524236320E-004 + 161.28000000000000 -2.0731421115449366E-004 + 161.34000000000000 -1.9813887982344976E-004 + 161.40000000000001 -1.8851644441311889E-004 + 161.45999999999998 -1.7845867985135782E-004 + 161.51999999999998 -1.6797806421045141E-004 + 161.57999999999998 -1.5708775384952131E-004 + 161.63999999999999 -1.4580150121636904E-004 + 161.69999999999999 -1.3413370937144883E-004 + 161.75999999999999 -1.2209934644499430E-004 + 161.81999999999999 -1.0971394766477432E-004 + 161.88000000000000 -9.6993573779898497E-005 + 161.94000000000000 -8.3954813022949694E-005 + 162.00000000000000 -7.0614670328820133E-005 + 162.06000000000000 -5.6990642960409626E-005 + 162.12000000000000 -4.3100616605732487E-005 + 162.17999999999998 -2.8962838458886276E-005 + 162.23999999999998 -1.4595911116599883E-005 + 162.29999999999998 -1.8752419949166505E-008 + 162.35999999999999 1.4749466664951071E-005 + 162.41999999999999 2.9689352163410053E-005 + 162.47999999999999 4.4781303144538067E-005 + 162.53999999999999 6.0005579202930035E-005 + 162.59999999999999 7.5342306858611083E-005 + 162.66000000000000 9.0771524210462272E-005 + 162.72000000000000 1.0627323917825953E-004 + 162.78000000000000 1.2182742943121677E-004 + 162.84000000000000 1.3741407337479337E-004 + 162.90000000000001 1.5301318417003452E-004 + 162.95999999999998 1.6860485472290241E-004 + 163.01999999999998 1.8416926780805772E-004 + 163.07999999999998 1.9968670648521492E-004 + 163.13999999999999 2.1513757725960157E-004 + 163.19999999999999 2.3050247245959388E-004 + 163.25999999999999 2.4576215305650341E-004 + 163.31999999999999 2.6089756520003977E-004 + 163.38000000000000 2.7588993090839299E-004 + 163.44000000000000 2.9072067815283419E-004 + 163.50000000000000 3.0537154441884218E-004 + 163.56000000000000 3.1982457724567088E-004 + 163.62000000000000 3.3406215896310233E-004 + 163.67999999999998 3.4806707476081036E-004 + 163.73999999999998 3.6182252065909579E-004 + 163.79999999999998 3.7531203533894449E-004 + 163.85999999999999 3.8851970505020451E-004 + 163.91999999999999 4.0143008758941053E-004 + 163.97999999999999 4.1402816418731391E-004 + 164.03999999999999 4.2629948055895070E-004 + 164.09999999999999 4.3823009646648119E-004 + 164.16000000000000 4.4980661723483889E-004 + 164.22000000000000 4.6101615026359260E-004 + 164.28000000000000 4.7184635579132484E-004 + 164.34000000000000 4.8228545699677164E-004 + 164.40000000000001 4.9232220151462466E-004 + 164.45999999999998 5.0194588733376154E-004 + 164.51999999999998 5.1114635958751002E-004 + 164.57999999999998 5.1991402653372651E-004 + 164.63999999999999 5.2823983369251542E-004 + 164.69999999999999 5.3611527616182115E-004 + 164.75999999999999 5.4353238527898092E-004 + 164.81999999999999 5.5048380122790287E-004 + 164.88000000000000 5.5696277280449849E-004 + 164.94000000000000 5.6296299695610889E-004 + 165.00000000000000 5.6847880540399250E-004 + 165.06000000000000 5.7350512109071176E-004 + 165.12000000000000 5.7803753192354340E-004 + 165.17999999999998 5.8207219187264429E-004 + 165.23999999999998 5.8560575968036430E-004 + 165.29999999999998 5.8863552185275004E-004 + 165.35999999999999 5.9115945585640401E-004 + 165.41999999999999 5.9317608637701085E-004 + 165.47999999999999 5.9468444593230698E-004 + 165.53999999999999 5.9568422912815891E-004 + 165.59999999999999 5.9617575150048489E-004 + 165.66000000000000 5.9615983285035278E-004 + 165.72000000000000 5.9563784272040940E-004 + 165.78000000000000 5.9461172444780816E-004 + 165.84000000000000 5.9308400684763380E-004 + 165.90000000000001 5.9105772961254310E-004 + 165.95999999999998 5.8853645930558149E-004 + 166.01999999999998 5.8552427025017817E-004 + 166.07999999999998 5.8202577962827146E-004 + 166.13999999999999 5.7804613711788121E-004 + 166.19999999999999 5.7359098541159305E-004 + 166.25999999999999 5.6866636261330799E-004 + 166.31999999999999 5.6327891821753321E-004 + 166.38000000000000 5.5743564831322266E-004 + 166.44000000000000 5.5114400417999505E-004 + 166.50000000000000 5.4441194106755230E-004 + 166.56000000000000 5.3724788781585797E-004 + 166.62000000000000 5.2966054470980769E-004 + 166.67999999999998 5.2165916190794175E-004 + 166.73999999999998 5.1325331326622576E-004 + 166.79999999999998 5.0445300588906861E-004 + 166.85999999999999 4.9526868296719646E-004 + 166.91999999999999 4.8571110198205973E-004 + 166.97999999999999 4.7579143422593167E-004 + 167.03999999999999 4.6552119004302785E-004 + 167.09999999999999 4.5491224260906979E-004 + 167.16000000000000 4.4397671846900863E-004 + 167.22000000000000 4.3272716565983171E-004 + 167.28000000000000 4.2117634127871806E-004 + 167.34000000000000 4.0933736617659752E-004 + 167.40000000000001 3.9722351933465583E-004 + 167.45999999999998 3.8484839048338415E-004 + 167.51999999999998 3.7222568024525163E-004 + 167.57999999999998 3.5936933203471630E-004 + 167.63999999999999 3.4629337563099578E-004 + 167.69999999999999 3.3301198863651545E-004 + 167.75999999999999 3.1953942850450752E-004 + 167.81999999999999 3.0589005095259909E-004 + 167.88000000000000 2.9207821020212250E-004 + 167.94000000000000 2.7811831237801202E-004 + 168.00000000000000 2.6402478836219358E-004 + 168.06000000000000 2.4981202987855425E-004 + 168.12000000000000 2.3549442002195091E-004 + 168.17999999999998 2.2108630704735209E-004 + 168.23999999999998 2.0660196383694260E-004 + 168.29999999999998 1.9205558883644928E-004 + 168.35999999999999 1.7746129854091293E-004 + 168.41999999999999 1.6283306306794312E-004 + 168.47999999999999 1.4818475881890386E-004 + 168.53999999999999 1.3353010527534278E-004 + 168.59999999999999 1.1888263976597530E-004 + 168.66000000000000 1.0425567742247078E-004 + 168.72000000000000 8.9662340827532981E-005 + 168.78000000000000 7.5115488902921526E-005 + 168.84000000000000 6.0627690558091416E-005 + 168.90000000000001 4.6211257478805890E-005 + 168.95999999999998 3.1878166207470268E-005 + 169.01999999999998 1.7640074606637370E-005 + 169.07999999999998 3.5082815884214519E-006 + 169.13999999999999 -1.0506270082487093E-005 + 169.19999999999999 -2.4393008093122006E-005 + 169.25999999999999 -3.8141745667386886E-005 + 169.31999999999999 -5.1742676273519952E-005 + 169.38000000000000 -6.5186398158384364E-005 + 169.44000000000000 -7.8463910240188952E-005 + 169.50000000000000 -9.1566612263442810E-005 + 169.56000000000000 -1.0448631831777032E-004 + 169.62000000000000 -1.1721525994639128E-004 + 169.67999999999998 -1.2974608383065268E-004 + 169.73999999999998 -1.4207183301348319E-004 + 169.79999999999998 -1.5418601009097973E-004 + 169.85999999999999 -1.6608249972891934E-004 + 169.91999999999999 -1.7775562585593021E-004 + 169.97999999999999 -1.8920013130185889E-004 + 170.03999999999999 -2.0041116308114988E-004 + 170.09999999999999 -2.1138428899732819E-004 + 170.16000000000000 -2.2211546099270760E-004 + 170.22000000000000 -2.3260105813837116E-004 + 170.28000000000000 -2.4283781797658423E-004 + 170.34000000000000 -2.5282289586956688E-004 + 170.40000000000001 -2.6255376065193673E-004 + 170.45999999999998 -2.7202824998214653E-004 + 170.51999999999998 -2.8124459590635003E-004 + 170.57999999999998 -2.9020130582269488E-004 + 170.63999999999999 -2.9889729298913990E-004 + 170.69999999999999 -3.0733173468630294E-004 + 170.75999999999999 -3.1550414013560557E-004 + 170.81999999999999 -3.2341429441207876E-004 + 170.88000000000000 -3.3106230593467557E-004 + 170.94000000000000 -3.3844857337676321E-004 + 171.00000000000000 -3.4557368234756957E-004 + 171.06000000000000 -3.5243856544440143E-004 + 171.12000000000000 -3.5904437374015258E-004 + 171.17999999999998 -3.6539248321229242E-004 + 171.23999999999998 -3.7148443991469408E-004 + 171.29999999999998 -3.7732204138298382E-004 + 171.35999999999999 -3.8290726458015969E-004 + 171.41999999999999 -3.8824219293267809E-004 + 171.47999999999999 -3.9332912670942365E-004 + 171.53999999999999 -3.9817041608877551E-004 + 171.59999999999999 -4.0276860150573326E-004 + 171.66000000000000 -4.0712630022730147E-004 + 171.72000000000000 -4.1124625745759521E-004 + 171.78000000000000 -4.1513122226791328E-004 + 171.84000000000000 -4.1878415727599551E-004 + 171.90000000000001 -4.2220803149336053E-004 + 171.95999999999998 -4.2540590551545641E-004 + 172.01999999999998 -4.2838095319952958E-004 + 172.07999999999998 -4.3113639635484411E-004 + 172.13999999999999 -4.3367555423891373E-004 + 172.19999999999999 -4.3600183696764546E-004 + 172.25999999999999 -4.3811870762544932E-004 + 172.31999999999999 -4.4002976361181726E-004 + 172.38000000000000 -4.4173860524715595E-004 + 172.44000000000000 -4.4324892562453685E-004 + 172.50000000000000 -4.4456445155797953E-004 + 172.56000000000000 -4.4568903842684665E-004 + 172.62000000000000 -4.4662649938973973E-004 + 172.67999999999998 -4.4738068774052110E-004 + 172.73999999999998 -4.4795552472015534E-004 + 172.79999999999998 -4.4835494269962288E-004 + 172.85999999999999 -4.4858286451148865E-004 + 172.91999999999999 -4.4864331355256318E-004 + 172.97999999999999 -4.4854024527736156E-004 + 173.03999999999999 -4.4827765575145700E-004 + 173.09999999999999 -4.4785957372071281E-004 + 173.16000000000000 -4.4729010021950016E-004 + 173.22000000000000 -4.4657326186813316E-004 + 173.28000000000000 -4.4571315565923911E-004 + 173.34000000000000 -4.4471393078872410E-004 + 173.40000000000001 -4.4357977888313967E-004 + 173.45999999999998 -4.4231491138232933E-004 + 173.51999999999998 -4.4092352977866361E-004 + 173.57999999999998 -4.3940989815911168E-004 + 173.63999999999999 -4.3777837778505356E-004 + 173.69999999999999 -4.3603323871160349E-004 + 173.75999999999999 -4.3417886079615388E-004 + 173.81999999999999 -4.3221962077635932E-004 + 173.88000000000000 -4.3015988784307521E-004 + 173.94000000000000 -4.2800405708573453E-004 + 174.00000000000000 -4.2575655112126983E-004 + 174.06000000000000 -4.2342176007514724E-004 + 174.12000000000000 -4.2100414078100512E-004 + 174.17999999999998 -4.1850809055321060E-004 + 174.23999999999998 -4.1593804513085850E-004 + 174.29999999999998 -4.1329842861622572E-004 + 174.35999999999999 -4.1059361504952542E-004 + 174.41999999999999 -4.0782803493325225E-004 + 174.47999999999999 -4.0500601592559745E-004 + 174.53999999999999 -4.0213188958202817E-004 + 174.59999999999999 -3.9920997358674619E-004 + 174.66000000000000 -3.9624448919327651E-004 + 174.72000000000000 -3.9323962455146673E-004 + 174.78000000000000 -3.9019950127970257E-004 + 174.84000000000000 -3.8712813383511648E-004 + 174.90000000000001 -3.8402946981248100E-004 + 174.95999999999998 -3.8090734409203106E-004 + 175.01999999999998 -3.7776547149307089E-004 + 175.07999999999998 -3.7460749357224942E-004 + 175.13999999999999 -3.7143691052958906E-004 + 175.19999999999999 -3.6825703445321717E-004 + 175.25999999999999 -3.6507115776247053E-004 + 175.31999999999999 -3.6188236409054325E-004 + 175.38000000000000 -3.5869355342759210E-004 + 175.44000000000000 -3.5550755856702073E-004 + 175.50000000000000 -3.5232700633061484E-004 + 175.56000000000000 -3.4915434120763638E-004 + 175.62000000000000 -3.4599184769358159E-004 + 175.67999999999998 -3.4284164813707020E-004 + 175.73999999999998 -3.3970560895477207E-004 + 175.79999999999998 -3.3658545461783126E-004 + 175.85999999999999 -3.3348267215998345E-004 + 175.91999999999999 -3.3039855912158809E-004 + 175.97999999999999 -3.2733409757147069E-004 + 176.03999999999999 -3.2429012450337715E-004 + 176.09999999999999 -3.2126720818830424E-004 + 176.16000000000000 -3.1826566606028064E-004 + 176.22000000000000 -3.1528560759497856E-004 + 176.28000000000000 -3.1232683549589310E-004 + 176.34000000000000 -3.0938902128609385E-004 + 176.40000000000001 -3.0647153343643592E-004 + 176.45999999999998 -3.0357351126055843E-004 + 176.51999999999998 -3.0069390853053503E-004 + 176.57999999999998 -2.9783145770292279E-004 + 176.63999999999999 -2.9498470638564511E-004 + 176.69999999999999 -2.9215190728162850E-004 + 176.75999999999999 -2.8933114023613172E-004 + 176.81999999999999 -2.8652032637360714E-004 + 176.88000000000000 -2.8371714202133171E-004 + 176.94000000000000 -2.8091909189095727E-004 + 177.00000000000000 -2.7812343391561147E-004 + 177.06000000000000 -2.7532731488016059E-004 + 177.12000000000000 -2.7252761731574426E-004 + 177.17999999999998 -2.6972111526474447E-004 + 177.23999999999998 -2.6690441089181292E-004 + 177.29999999999998 -2.6407392529673152E-004 + 177.35999999999999 -2.6122599117696686E-004 + 177.41999999999999 -2.5835681308574560E-004 + 177.47999999999999 -2.5546251034060298E-004 + 177.53999999999999 -2.5253911596219078E-004 + 177.59999999999999 -2.4958259661245566E-004 + 177.66000000000000 -2.4658890855758307E-004 + 177.72000000000000 -2.4355399619184086E-004 + 177.78000000000000 -2.4047378619516813E-004 + 177.84000000000000 -2.3734423589912159E-004 + 177.90000000000001 -2.3416133241765686E-004 + 177.95999999999998 -2.3092111608443900E-004 + 178.01999999999998 -2.2761970228931902E-004 + 178.07999999999998 -2.2425331960581888E-004 + 178.13999999999999 -2.2081827653943253E-004 + 178.19999999999999 -2.1731100090435716E-004 + 178.25999999999999 -2.1372806839720990E-004 + 178.31999999999999 -2.1006624525971243E-004 + 178.38000000000000 -2.0632245865728733E-004 + 178.44000000000000 -2.0249384516188990E-004 + 178.50000000000000 -1.9857777134728164E-004 + 178.56000000000000 -1.9457189624683580E-004 + 178.62000000000000 -1.9047413439189504E-004 + 178.67999999999998 -1.8628272105458812E-004 + 178.73999999999998 -1.8199621161909001E-004 + 178.79999999999998 -1.7761352760854287E-004 + 178.85999999999999 -1.7313395404688873E-004 + 178.91999999999999 -1.6855716041005181E-004 + 178.97999999999999 -1.6388323145841323E-004 + 179.03999999999999 -1.5911264960800296E-004 + 179.09999999999999 -1.5424635815687598E-004 + 179.16000000000000 -1.4928569627830292E-004 + 179.22000000000000 -1.4423246236355583E-004 + 179.28000000000000 -1.3908892688711575E-004 + 179.34000000000000 -1.3385780389379458E-004 + 179.40000000000001 -1.2854226525364567E-004 + 179.45999999999998 -1.2314598573289390E-004 + 179.51999999999998 -1.1767307852713106E-004 + 179.57999999999998 -1.1212819053798267E-004 + 179.63999999999999 -1.0651642936997456E-004 + 179.69999999999999 -1.0084341906236392E-004 + 179.75999999999999 -9.5115291473054798E-005 + 179.81999999999999 -8.9338680859114738E-005 + 179.88000000000000 -8.3520747352401820E-005 + 179.94000000000000 -7.7669157349375409E-005 + 180.00000000000000 -7.1792080578198092E-005 + 180.06000000000000 -6.5898209273743081E-005 + 180.12000000000000 -5.9996707625660677E-005 + 180.17999999999998 -5.4097238147206918E-005 + 180.23999999999998 -4.8209919915220962E-005 + 180.29999999999998 -4.2345343850070475E-005 + 180.35999999999999 -3.6514521045316949E-005 + 180.41999999999999 -3.0728875524759924E-005 + 180.47999999999999 -2.5000227694357582E-005 + 180.53999999999999 -1.9340762569605512E-005 + 180.59999999999999 -1.3763014059639368E-005 + 180.66000000000000 -8.2798346266203254E-006 + 180.72000000000000 -2.9043646552375494E-006 + 180.78000000000000 2.3499792848957528E-006 + 180.84000000000000 7.4695528266791851E-006 + 180.90000000000001 1.2440502496362889E-005 + 180.95999999999998 1.7248798967684555E-005 + 181.01999999999998 2.1880275888205409E-005 + 181.07999999999998 2.6320652732221367E-005 + 181.13999999999999 3.0555590011138052E-005 + 181.19999999999999 3.4570712058483333E-005 + 181.25999999999999 3.8351662067630021E-005 + 181.31999999999999 4.1884128393243805E-005 + 181.38000000000000 4.5153891502415868E-005 + 181.44000000000000 4.8146880029358084E-005 + 181.50000000000000 5.0849198240655507E-005 + 181.56000000000000 5.3247177069131405E-005 + 181.62000000000000 5.5327419325942256E-005 + 181.67999999999998 5.7076832690915928E-005 + 181.73999999999998 5.8482694502106628E-005 + 181.79999999999998 5.9532666107210038E-005 + 181.85999999999999 6.0214858973014872E-005 + 181.91999999999999 6.0517851750234799E-005 + 181.97999999999999 6.0430758201885698E-005 + 182.03999999999999 5.9943269145169292E-005 + 182.09999999999999 5.9045675218624497E-005 + 182.16000000000000 5.7728927388571800E-005 + 182.22000000000000 5.5984665531102381E-005 + 182.28000000000000 5.3805267537234876E-005 + 182.34000000000000 5.1183896552077778E-005 + 182.39999999999998 4.8114524396339185E-005 + 182.45999999999998 4.4591994494859754E-005 + 182.51999999999998 4.0612017605639233E-005 + 182.57999999999998 3.6171240728638205E-005 + 182.63999999999999 3.1267256993504640E-005 + 182.69999999999999 2.5898638232473722E-005 + 182.75999999999999 2.0064953405064162E-005 + 182.81999999999999 1.3766790724616863E-005 + 182.88000000000000 7.0057663951888427E-006 + 182.94000000000000 -2.1543230863041229E-007 + 183.00000000000000 -7.8930826255254813E-006 + 183.06000000000000 -1.6022379758445692E-005 + 183.12000000000000 -2.4597429058225132E-005 + 183.17999999999998 -3.3611259007646413E-005 + 183.23999999999998 -4.3055806277221908E-005 + 183.29999999999998 -5.2921938314682223E-005 + 183.35999999999999 -6.3199378785189659E-005 + 183.41999999999999 -7.3876790615264821E-005 + 183.47999999999999 -8.4941731451369321E-005 + 183.53999999999999 -9.6380667185072999E-005 + 183.59999999999999 -1.0817897211921971E-004 + 183.66000000000000 -1.2032098076867594E-004 + 183.72000000000000 -1.3278993700457833E-004 + 183.78000000000000 -1.4556808915352086E-004 + 183.84000000000000 -1.5863668835760085E-004 + 183.89999999999998 -1.7197599070153767E-004 + 183.95999999999998 -1.8556532710239078E-004 + 184.01999999999998 -1.9938314773219242E-004 + 184.07999999999998 -2.1340701266006070E-004 + 184.13999999999999 -2.2761372937713775E-004 + 184.19999999999999 -2.4197934636360853E-004 + 184.25999999999999 -2.5647917156300718E-004 + 184.31999999999999 -2.7108787796864477E-004 + 184.38000000000000 -2.8577958366536279E-004 + 184.44000000000000 -3.0052779131854143E-004 + 184.50000000000000 -3.1530553426282988E-004 + 184.56000000000000 -3.3008541562587593E-004 + 184.62000000000000 -3.4483961322213621E-004 + 184.67999999999998 -3.5954002949679231E-004 + 184.73999999999998 -3.7415821109239186E-004 + 184.79999999999998 -3.8866549432383101E-004 + 184.85999999999999 -4.0303308093089064E-004 + 184.91999999999999 -4.1723205029632799E-004 + 184.97999999999999 -4.3123342051901853E-004 + 185.03999999999999 -4.4500825092074565E-004 + 185.09999999999999 -4.5852762609942954E-004 + 185.16000000000000 -4.7176284805546968E-004 + 185.22000000000000 -4.8468541920553638E-004 + 185.28000000000000 -4.9726714302110583E-004 + 185.34000000000000 -5.0948019762903128E-004 + 185.39999999999998 -5.2129712747854789E-004 + 185.45999999999998 -5.3269099217507511E-004 + 185.51999999999998 -5.4363549318410835E-004 + 185.57999999999998 -5.5410488320692375E-004 + 185.63999999999999 -5.6407408434712501E-004 + 185.69999999999999 -5.7351884486604352E-004 + 185.75999999999999 -5.8241563179507532E-004 + 185.81999999999999 -5.9074181955083040E-004 + 185.88000000000000 -5.9847570676211498E-004 + 185.94000000000000 -6.0559649512074390E-004 + 186.00000000000000 -6.1208441973009632E-004 + 186.06000000000000 -6.1792079492986184E-004 + 186.12000000000000 -6.2308795122087424E-004 + 186.17999999999998 -6.2756938654354101E-004 + 186.23999999999998 -6.3134984130087317E-004 + 186.29999999999998 -6.3441517066690448E-004 + 186.35999999999999 -6.3675250528967824E-004 + 186.41999999999999 -6.3835033365883709E-004 + 186.47999999999999 -6.3919833972754406E-004 + 186.53999999999999 -6.3928764402936379E-004 + 186.59999999999999 -6.3861066981960198E-004 + 186.66000000000000 -6.3716121369011196E-004 + 186.72000000000000 -6.3493450718345667E-004 + 186.78000000000000 -6.3192715367787794E-004 + 186.84000000000000 -6.2813719999622322E-004 + 186.89999999999998 -6.2356413319270411E-004 + 186.95999999999998 -6.1820884145811822E-004 + 187.01999999999998 -6.1207362018962034E-004 + 187.07999999999998 -6.0516218521912044E-004 + 187.13999999999999 -5.9747968234146593E-004 + 187.19999999999999 -5.8903268724160983E-004 + 187.25999999999999 -5.7982911451611829E-004 + 187.31999999999999 -5.6987820068172266E-004 + 187.38000000000000 -5.5919065704310156E-004 + 187.44000000000000 -5.4777840880304096E-004 + 187.50000000000000 -5.3565467657848789E-004 + 187.56000000000000 -5.2283402900621205E-004 + 187.62000000000000 -5.0933211160637880E-004 + 187.67999999999998 -4.9516588063371113E-004 + 187.73999999999998 -4.8035331029046144E-004 + 187.79999999999998 -4.6491360292342127E-004 + 187.85999999999999 -4.4886691972299326E-004 + 187.91999999999999 -4.3223439945691268E-004 + 187.97999999999999 -4.1503816560436394E-004 + 188.03999999999999 -3.9730120320818224E-004 + 188.09999999999999 -3.7904736029695810E-004 + 188.16000000000000 -3.6030125095742936E-004 + 188.22000000000000 -3.4108822756641571E-004 + 188.28000000000000 -3.2143420866214724E-004 + 188.34000000000000 -3.0136584440135542E-004 + 188.39999999999998 -2.8091020033042216E-004 + 188.45999999999998 -2.6009493862405917E-004 + 188.51999999999998 -2.3894812585294889E-004 + 188.57999999999998 -2.1749809611063098E-004 + 188.63999999999999 -1.9577354163555812E-004 + 188.69999999999999 -1.7380339653326018E-004 + 188.75999999999999 -1.5161670571977519E-004 + 188.81999999999999 -1.2924262479784888E-004 + 188.88000000000000 -1.0671030142879223E-004 + 188.94000000000000 -8.4048872524332833E-005 + 189.00000000000000 -6.1287291248343772E-005 + 189.06000000000000 -3.8454392907061888E-005 + 189.12000000000000 -1.5578698569888905E-005 + 189.17999999999998 7.3115841371646013E-006 + 189.23999999999998 3.0188597820664984E-005 + 189.29999999999998 5.3024966185251264E-005 + 189.35999999999999 7.5793821579240591E-005 + 189.41999999999999 9.8468816241787695E-005 + 189.47999999999999 1.2102423131611788E-004 + 189.53999999999999 1.4343496535029147E-004 + 189.59999999999999 1.6567662664630111E-004 + 189.66000000000000 1.8772558107552230E-004 + 189.72000000000000 2.0955890966443583E-004 + 189.78000000000000 2.3115454752562810E-004 + 189.84000000000000 2.5249126384093649E-004 + 189.89999999999998 2.7354870360951373E-004 + 189.95999999999998 2.9430742296027607E-004 + 190.01999999999998 3.1474893796983245E-004 + 190.07999999999998 3.3485569751943252E-004 + 190.13999999999999 3.5461117601523067E-004 + 190.19999999999999 3.7399985835948795E-004 + 190.25999999999999 3.9300734626444904E-004 + 190.31999999999999 4.1162014696153920E-004 + 190.38000000000000 4.2982593141255499E-004 + 190.44000000000000 4.4761345933732900E-004 + 190.50000000000000 4.6497259070288425E-004 + 190.56000000000000 4.8189422300613956E-004 + 190.62000000000000 4.9837030422238636E-004 + 190.67999999999998 5.1439387455893529E-004 + 190.73999999999998 5.2995907227253603E-004 + 190.79999999999998 5.4506101868938121E-004 + 190.85999999999999 5.5969582763165573E-004 + 190.91999999999999 5.7386067662145302E-004 + 190.97999999999999 5.8755372085204818E-004 + 191.03999999999999 6.0077394530602983E-004 + 191.09999999999999 6.1352136589055517E-004 + 191.16000000000000 6.2579689340851250E-004 + 191.22000000000000 6.3760218704523252E-004 + 191.28000000000000 6.4893988148765757E-004 + 191.34000000000000 6.5981329733594827E-004 + 191.39999999999998 6.7022655302978560E-004 + 191.45999999999998 6.8018464830558534E-004 + 191.51999999999998 6.8969300276260710E-004 + 191.57999999999998 6.9875793148434532E-004 + 191.63999999999999 7.0738627064437199E-004 + 191.69999999999999 7.1558541126330903E-004 + 191.75999999999999 7.2336329129447084E-004 + 191.81999999999999 7.3072840365052949E-004 + 191.88000000000000 7.3768957722003688E-004 + 191.94000000000000 7.4425614496264030E-004 + 192.00000000000000 7.5043764417456749E-004 + 192.06000000000000 7.5624395823209076E-004 + 192.12000000000000 7.6168521374241896E-004 + 192.17999999999998 7.6677176914924979E-004 + 192.23999999999998 7.7151407200971910E-004 + 192.29999999999998 7.7592263267641458E-004 + 192.35999999999999 7.8000817126525101E-004 + 192.41999999999999 7.8378123937790822E-004 + 192.47999999999999 7.8725252341528692E-004 + 192.53999999999999 7.9043251815232160E-004 + 192.59999999999999 7.9333161612940356E-004 + 192.66000000000000 7.9596014687712024E-004 + 192.72000000000000 7.9832821519067816E-004 + 192.78000000000000 8.0044578268504644E-004 + 192.84000000000000 8.0232249236107992E-004 + 192.89999999999998 8.0396770098947105E-004 + 192.95999999999998 8.0539060834074281E-004 + 193.01999999999998 8.0659995797387630E-004 + 193.07999999999998 8.0760426361336298E-004 + 193.13999999999999 8.0841153781121124E-004 + 193.19999999999999 8.0902953123451835E-004 + 193.25999999999999 8.0946553437887296E-004 + 193.31999999999999 8.0972641574565132E-004 + 193.38000000000000 8.0981863557563055E-004 + 193.44000000000000 8.0974810138159583E-004 + 193.50000000000000 8.0952040762139355E-004 + 193.56000000000000 8.0914061071926256E-004 + 193.62000000000000 8.0861328243848180E-004 + 193.67999999999998 8.0794257382481121E-004 + 193.73999999999998 8.0713219769911295E-004 + 193.79999999999998 8.0618521334030902E-004 + 193.85999999999999 8.0510436322905085E-004 + 193.91999999999999 8.0389186357124353E-004 + 193.97999999999999 8.0254947746791899E-004 + 194.03999999999999 8.0107854892479526E-004 + 194.09999999999999 7.9947999425675827E-004 + 194.16000000000000 7.9775421964576937E-004 + 194.22000000000000 7.9590126420407367E-004 + 194.28000000000000 7.9392082425287379E-004 + 194.34000000000000 7.9181223082388022E-004 + 194.39999999999998 7.8957440559803283E-004 + 194.45999999999998 7.8720602991799141E-004 + 194.51999999999998 7.8470541363172600E-004 + 194.57999999999998 7.8207071060997500E-004 + 194.63999999999999 7.7929977128100294E-004 + 194.69999999999999 7.7639027709540680E-004 + 194.75999999999999 7.7333970527513479E-004 + 194.81999999999999 7.7014536590072592E-004 + 194.88000000000000 7.6680448480252934E-004 + 194.94000000000000 7.6331414024523520E-004 + 195.00000000000000 7.5967135030671794E-004 + 195.06000000000000 7.5587318792390648E-004 + 195.12000000000000 7.5191654692289124E-004 + 195.17999999999998 7.4779837216796424E-004 + 195.23999999999998 7.4351560036748656E-004 + 195.29999999999998 7.3906529610034489E-004 + 195.35999999999999 7.3444459973907481E-004 + 195.41999999999999 7.2965064082789117E-004 + 195.47999999999999 7.2468084494240056E-004 + 195.53999999999999 7.1953272688732826E-004 + 195.59999999999999 7.1420401526442608E-004 + 195.66000000000000 7.0869262968547805E-004 + 195.72000000000000 7.0299682798300876E-004 + 195.78000000000000 6.9711505297752688E-004 + 195.84000000000000 6.9104617273349413E-004 + 195.89999999999998 6.8478938425821617E-004 + 195.95999999999998 6.7834415632165006E-004 + 196.01999999999998 6.7171041924314124E-004 + 196.07999999999998 6.6488847958853727E-004 + 196.13999999999999 6.5787904772038569E-004 + 196.19999999999999 6.5068334694004927E-004 + 196.25999999999999 6.4330293134964563E-004 + 196.31999999999999 6.3573991779948308E-004 + 196.38000000000000 6.2799684727368396E-004 + 196.44000000000000 6.2007672487495596E-004 + 196.50000000000000 6.1198295606957047E-004 + 196.56000000000000 6.0371957313857627E-004 + 196.62000000000000 5.9529086787886421E-004 + 196.67999999999998 5.8670186727936250E-004 + 196.73999999999998 5.7795788607786563E-004 + 196.79999999999998 5.6906484995461622E-004 + 196.85999999999999 5.6002906433010881E-004 + 196.91999999999999 5.5085741081826707E-004 + 196.97999999999999 5.4155716867886289E-004 + 197.03999999999999 5.3213614904109891E-004 + 197.09999999999999 5.2260254650825049E-004 + 197.16000000000000 5.1296514822327013E-004 + 197.22000000000000 5.0323312776812080E-004 + 197.28000000000000 4.9341604510598480E-004 + 197.34000000000000 4.8352390123264019E-004 + 197.39999999999998 4.7356714760302425E-004 + 197.45999999999998 4.6355656833414364E-004 + 197.51999999999998 4.5350332947567435E-004 + 197.57999999999998 4.4341887555011885E-004 + 197.63999999999999 4.3331498617966697E-004 + 197.69999999999999 4.2320371237191372E-004 + 197.75999999999999 4.1309734448091885E-004 + 197.81999999999999 4.0300843891581694E-004 + 197.88000000000000 3.9294966937493837E-004 + 197.94000000000000 3.8293391730104872E-004 + 198.00000000000000 3.7297414248651801E-004 + 198.06000000000000 3.6308345186156839E-004 + 198.12000000000000 3.5327490178331002E-004 + 198.17999999999998 3.4356172674932303E-004 + 198.23999999999998 3.3395708542376492E-004 + 198.29999999999998 3.2447406477390575E-004 + 198.35999999999999 3.1512571744198812E-004 + 198.41999999999999 3.0592498315240222E-004 + 198.47999999999999 2.9688465329935675E-004 + 198.53999999999999 2.8801739152356769E-004 + 198.59999999999999 2.7933559871713069E-004 + 198.66000000000000 2.7085147381226195E-004 + 198.72000000000000 2.6257695551763440E-004 + 198.78000000000000 2.5452361907573299E-004 + 198.84000000000000 2.4670279454062677E-004 + 198.89999999999998 2.3912536211353618E-004 + 198.95999999999998 2.3180186644995620E-004 + 199.01999999999998 2.2474237368784878E-004 + 199.07999999999998 2.1795654816593476E-004 + 199.13999999999999 2.1145354935870009E-004 + 199.19999999999999 2.0524202561003572E-004 + 199.25999999999999 1.9933006701256138E-004 + 199.31999999999999 1.9372525544111241E-004 + 199.38000000000000 1.8843453730194192E-004 + 199.44000000000000 1.8346428257117001E-004 + 199.50000000000000 1.7882026651096100E-004 + 199.56000000000000 1.7450756773629544E-004 + 199.62000000000000 1.7053063320965619E-004 + 199.67999999999998 1.6689324616162685E-004 + 199.73999999999998 1.6359848624877829E-004 + 199.79999999999998 1.6064875792634790E-004 + 199.85999999999999 1.5804574240031128E-004 + 199.91999999999999 1.5579043280440988E-004 + 199.97999999999999 1.5388309770005294E-004 + 200.03999999999999 1.5232329092848668E-004 + 200.09999999999999 1.5110987555862898E-004 + 200.16000000000000 1.5024096956517025E-004 + 200.22000000000000 1.4971401576215339E-004 + 200.28000000000000 1.4952572467378687E-004 + 200.34000000000000 1.4967213569628003E-004 + 200.39999999999998 1.5014860888256404E-004 + 200.45999999999998 1.5094983828099325E-004 + 200.51999999999998 1.5206987292558363E-004 + 200.57999999999998 1.5350209814028422E-004 + 200.63999999999999 1.5523926643812229E-004 + 200.69999999999999 1.5727357349087554E-004 + 200.75999999999999 1.5959659761611894E-004 + 200.81999999999999 1.6219935799486414E-004 + 200.88000000000000 1.6507233864170473E-004 + 200.94000000000000 1.6820548293315619E-004 + 201.00000000000000 1.7158828273270321E-004 + 201.06000000000000 1.7520970734755738E-004 + 201.12000000000000 1.7905831605642748E-004 + 201.17999999999998 1.8312224441157553E-004 + 201.23999999999998 1.8738921826872318E-004 + 201.29999999999998 1.9184661128233998E-004 + 201.35999999999999 1.9648144284854075E-004 + 201.41999999999999 2.0128048057737555E-004 + 201.47999999999999 2.0623016637172511E-004 + 201.53999999999999 2.1131672297097906E-004 + 201.59999999999999 2.1652615148882572E-004 + 201.66000000000000 2.2184429427553746E-004 + 201.72000000000000 2.2725679617733509E-004 + 201.78000000000000 2.3274922689704367E-004 + 201.84000000000000 2.3830706329555819E-004 + 201.89999999999998 2.4391570405352318E-004 + 201.95999999999998 2.4956055388119109E-004 + 202.01999999999998 2.5522701372243878E-004 + 202.07999999999998 2.6090050544163229E-004 + 202.13999999999999 2.6656656878557868E-004 + 202.19999999999999 2.7221077384890357E-004 + 202.25999999999999 2.7781885829346998E-004 + 202.31999999999999 2.8337668647544019E-004 + 202.38000000000000 2.8887035961105018E-004 + 202.44000000000000 2.9428610625393381E-004 + 202.50000000000000 2.9961042968609358E-004 + 202.56000000000000 3.0483006664757143E-004 + 202.62000000000000 3.0993204762007006E-004 + 202.67999999999998 3.1490366046458011E-004 + 202.73999999999998 3.1973257520008887E-004 + 202.79999999999998 3.2440676510390694E-004 + 202.85999999999999 3.2891449999901341E-004 + 202.91999999999999 3.3324451026094711E-004 + 202.97999999999999 3.3738586733123054E-004 + 203.03999999999999 3.4132808555749388E-004 + 203.09999999999999 3.4506106947332967E-004 + 203.16000000000000 3.4857518524752311E-004 + 203.22000000000000 3.5186124227037105E-004 + 203.28000000000000 3.5491047687384039E-004 + 203.34000000000000 3.5771468107960366E-004 + 203.39999999999998 3.6026609837315813E-004 + 203.45999999999998 3.6255739675921750E-004 + 203.51999999999998 3.6458186638274826E-004 + 203.57999999999998 3.6633323866752215E-004 + 203.63999999999999 3.6780583005352295E-004 + 203.69999999999999 3.6899442992244837E-004 + 203.75999999999999 3.6989434662415278E-004 + 203.81999999999999 3.7050150037897856E-004 + 203.88000000000000 3.7081229306683923E-004 + 203.94000000000000 3.7082371417149798E-004 + 204.00000000000000 3.7053327557568650E-004 + 204.06000000000000 3.6993906022099779E-004 + 204.12000000000000 3.6903969811758012E-004 + 204.17999999999998 3.6783433816646921E-004 + 204.23999999999998 3.6632268803904033E-004 + 204.29999999999998 3.6450498679978000E-004 + 204.35999999999999 3.6238201723167964E-004 + 204.41999999999999 3.5995508124373371E-004 + 204.47999999999999 3.5722598345256821E-004 + 204.53999999999999 3.5419705415406822E-004 + 204.59999999999999 3.5087111268210030E-004 + 204.66000000000000 3.4725149513898187E-004 + 204.72000000000000 3.4334198107239530E-004 + 204.78000000000000 3.3914685171859633E-004 + 204.84000000000000 3.3467081200732820E-004 + 204.89999999999998 3.2991904520915171E-004 + 204.95999999999998 3.2489717958534290E-004 + 205.01999999999998 3.1961123583911503E-004 + 205.07999999999998 3.1406768799103915E-004 + 205.13999999999999 3.0827338288463868E-004 + 205.19999999999999 3.0223551967938360E-004 + 205.25999999999999 2.9596172899844621E-004 + 205.31999999999999 2.8945994075760061E-004 + 205.38000000000000 2.8273844271763858E-004 + 205.44000000000000 2.7580579634662591E-004 + 205.50000000000000 2.6867088343358680E-004 + 205.56000000000000 2.6134283864870362E-004 + 205.62000000000000 2.5383106121563140E-004 + 205.67999999999998 2.4614514279797258E-004 + 205.73999999999998 2.3829487388996804E-004 + 205.79999999999998 2.3029022906289920E-004 + 205.85999999999999 2.2214134738279197E-004 + 205.91999999999999 2.1385849916266171E-004 + 205.97999999999999 2.0545202607869211E-004 + 206.03999999999999 1.9693242015197333E-004 + 206.09999999999999 1.8831020549471962E-004 + 206.16000000000000 1.7959595200393454E-004 + 206.22000000000000 1.7080026992253100E-004 + 206.28000000000000 1.6193376816354239E-004 + 206.34000000000000 1.5300706830616485E-004 + 206.39999999999998 1.4403073436927870E-004 + 206.45999999999998 1.3501528081110112E-004 + 206.51999999999998 1.2597117959851038E-004 + 206.57999999999998 1.1690878137809684E-004 + 206.63999999999999 1.0783831615946645E-004 + 206.69999999999999 9.8769913784664258E-005 + 206.75999999999999 8.9713495602109725E-005 + 206.81999999999999 8.0678844903144141E-005 + 206.88000000000000 7.1675521692243245E-005 + 206.94000000000000 6.2712864782050703E-005 + 207.00000000000000 5.3799989814710329E-005 + 207.06000000000000 4.4945745337629164E-005 + 207.12000000000000 3.6158717856212829E-005 + 207.17999999999998 2.7447199156451459E-005 + 207.23999999999998 1.8819187285854167E-005 + 207.29999999999998 1.0282382965842040E-005 + 207.35999999999999 1.8441486678252476E-006 + 207.41999999999999 -6.4884773058283380E-006 + 207.47999999999999 -1.4708778751905859E-005 + 207.53999999999999 -2.2810401194458941E-005 + 207.59999999999999 -3.0787318197740125E-005 + 207.66000000000000 -3.8633879538628541E-005 + 207.72000000000000 -4.6344780333436352E-005 + 207.78000000000000 -5.3915091921974930E-005 + 207.84000000000000 -6.1340250908367331E-005 + 207.89999999999998 -6.8616074879743704E-005 + 207.95999999999998 -7.5738751511343646E-005 + 208.01999999999998 -8.2704859582427535E-005 + 208.07999999999998 -8.9511340371183404E-005 + 208.13999999999999 -9.6155527068664812E-005 + 208.19999999999999 -1.0263512694948584E-004 + 208.25999999999999 -1.0894820342612516E-004 + 208.31999999999999 -1.1509320557382858E-004 + 208.38000000000000 -1.2106892541743741E-004 + 208.44000000000000 -1.2687450432286219E-004 + 208.50000000000000 -1.3250941971417059E-004 + 208.56000000000000 -1.3797346815101017E-004 + 208.62000000000000 -1.4326676119067984E-004 + 208.68000000000001 -1.4838972362392556E-004 + 208.74000000000001 -1.5334304506954037E-004 + 208.80000000000001 -1.5812771421783688E-004 + 208.86000000000001 -1.6274496035398661E-004 + 208.92000000000002 -1.6719626616230302E-004 + 208.98000000000002 -1.7148336010879101E-004 + 209.03999999999996 -1.7560818696278402E-004 + 209.09999999999997 -1.7957293489397698E-004 + 209.15999999999997 -1.8337993471573798E-004 + 209.21999999999997 -1.8703176108528623E-004 + 209.27999999999997 -1.9053115621320228E-004 + 209.33999999999997 -1.9388100676333720E-004 + 209.39999999999998 -1.9708436808717330E-004 + 209.45999999999998 -2.0014443402020086E-004 + 209.51999999999998 -2.0306451394691918E-004 + 209.57999999999998 -2.0584803853841867E-004 + 209.63999999999999 -2.0849852122504654E-004 + 209.69999999999999 -2.1101955645629107E-004 + 209.75999999999999 -2.1341479622520742E-004 + 209.81999999999999 -2.1568795680441309E-004 + 209.88000000000000 -2.1784277240852635E-004 + 209.94000000000000 -2.1988301847338822E-004 + 210.00000000000000 -2.2181243601403607E-004 + 210.06000000000000 -2.2363479605888166E-004 + 210.12000000000000 -2.2535382289626070E-004 + 210.18000000000001 -2.2697319620650872E-004 + 210.24000000000001 -2.2849658665786190E-004 + 210.30000000000001 -2.2992756981132185E-004 + 210.36000000000001 -2.3126968077685089E-004 + 210.42000000000002 -2.3252635338441054E-004 + 210.48000000000002 -2.3370092852714982E-004 + 210.53999999999996 -2.3479664931690342E-004 + 210.59999999999997 -2.3581668229287871E-004 + 210.65999999999997 -2.3676402733753885E-004 + 210.71999999999997 -2.3764158157908182E-004 + 210.77999999999997 -2.3845215568169404E-004 + 210.83999999999997 -2.3919839483338700E-004 + 210.89999999999998 -2.3988283257765552E-004 + 210.95999999999998 -2.4050783362594968E-004 + 211.01999999999998 -2.4107567276517939E-004 + 211.07999999999998 -2.4158842849475573E-004 + 211.13999999999999 -2.4204811770905108E-004 + 211.19999999999999 -2.4245657025179337E-004 + 211.25999999999999 -2.4281547307151996E-004 + 211.31999999999999 -2.4312640043739773E-004 + 211.38000000000000 -2.4339080285499398E-004 + 211.44000000000000 -2.4360998154602286E-004 + 211.50000000000000 -2.4378505014706391E-004 + 211.56000000000000 -2.4391701577319608E-004 + 211.62000000000000 -2.4400679382021112E-004 + 211.68000000000001 -2.4405509973822741E-004 + 211.74000000000001 -2.4406251573258305E-004 + 211.80000000000001 -2.4402949533639331E-004 + 211.86000000000001 -2.4395636415269910E-004 + 211.92000000000002 -2.4384328896819057E-004 + 211.98000000000002 -2.4369031754638282E-004 + 212.03999999999996 -2.4349737860912530E-004 + 212.09999999999997 -2.4326427192650544E-004 + 212.15999999999997 -2.4299070281712468E-004 + 212.21999999999997 -2.4267626937082791E-004 + 212.27999999999997 -2.4232051699633672E-004 + 212.33999999999997 -2.4192286728283720E-004 + 212.39999999999998 -2.4148271275672539E-004 + 212.45999999999998 -2.4099942494734770E-004 + 212.51999999999998 -2.4047226393999829E-004 + 212.57999999999998 -2.3990048373901963E-004 + 212.63999999999999 -2.3928336693828295E-004 + 212.69999999999999 -2.3862008123863240E-004 + 212.75999999999999 -2.3790986865863969E-004 + 212.81999999999999 -2.3715191479448407E-004 + 212.88000000000000 -2.3634542245668910E-004 + 212.94000000000000 -2.3548955443642382E-004 + 213.00000000000000 -2.3458349928733154E-004 + 213.06000000000000 -2.3362644928573488E-004 + 213.12000000000000 -2.3261759658249479E-004 + 213.18000000000001 -2.3155615114443901E-004 + 213.24000000000001 -2.3044133860195348E-004 + 213.30000000000001 -2.2927241304548292E-004 + 213.36000000000001 -2.2804863933958844E-004 + 213.42000000000002 -2.2676934305299794E-004 + 213.48000000000002 -2.2543393322561883E-004 + 213.53999999999996 -2.2404183503836668E-004 + 213.59999999999997 -2.2259257378052860E-004 + 213.65999999999997 -2.2108574894782402E-004 + 213.71999999999997 -2.1952105029086530E-004 + 213.77999999999997 -2.1789826607432865E-004 + 213.83999999999997 -2.1621729280712064E-004 + 213.89999999999998 -2.1447813530181911E-004 + 213.95999999999998 -2.1268089531850827E-004 + 214.01999999999998 -2.1082579154214172E-004 + 214.07999999999998 -2.0891315729840374E-004 + 214.13999999999999 -2.0694342738424818E-004 + 214.19999999999999 -2.0491715954774691E-004 + 214.25999999999999 -2.0283497156529286E-004 + 214.31999999999999 -2.0069762330728801E-004 + 214.38000000000000 -1.9850595045147880E-004 + 214.44000000000000 -1.9626088445115058E-004 + 214.50000000000000 -1.9396343375471600E-004 + 214.56000000000000 -1.9161468664236869E-004 + 214.62000000000000 -1.8921582875241582E-004 + 214.68000000000001 -1.8676813662380133E-004 + 214.74000000000001 -1.8427294381792217E-004 + 214.80000000000001 -1.8173167010527010E-004 + 214.86000000000001 -1.7914581175118010E-004 + 214.92000000000002 -1.7651692741995156E-004 + 214.98000000000002 -1.7384667494086775E-004 + 215.03999999999996 -1.7113676830993408E-004 + 215.09999999999997 -1.6838897261234770E-004 + 215.15999999999997 -1.6560514540604214E-004 + 215.21999999999997 -1.6278719443507751E-004 + 215.27999999999997 -1.5993706382504705E-004 + 215.33999999999997 -1.5705677552789752E-004 + 215.39999999999998 -1.5414839835814392E-004 + 215.45999999999998 -1.5121400890384865E-004 + 215.51999999999998 -1.4825576365655829E-004 + 215.57999999999998 -1.4527581090392920E-004 + 215.63999999999999 -1.4227633887576915E-004 + 215.69999999999999 -1.3925956363005179E-004 + 215.75999999999999 -1.3622768133245399E-004 + 215.81999999999999 -1.3318293066082537E-004 + 215.88000000000000 -1.3012751492699103E-004 + 215.94000000000000 -1.2706363970181936E-004 + 216.00000000000000 -1.2399347490724640E-004 + 216.06000000000000 -1.2091918431864209E-004 + 216.12000000000000 -1.1784288339251683E-004 + 216.18000000000001 -1.1476665051659689E-004 + 216.24000000000001 -1.1169251842362632E-004 + 216.30000000000001 -1.0862244998014935E-004 + 216.36000000000001 -1.0555836462169396E-004 + 216.42000000000002 -1.0250210210170180E-004 + 216.48000000000002 -9.9455437186491669E-005 + 216.53999999999996 -9.6420069580515695E-005 + 216.59999999999997 -9.3397632152495051E-005 + 216.65999999999997 -9.0389668682103305E-005 + 216.71999999999997 -8.7397657215534087E-005 + 216.77999999999997 -8.4422998608652894E-005 + 216.83999999999997 -8.1467008773679629E-005 + 216.89999999999998 -7.8530925657185161E-005 + 216.95999999999998 -7.5615913624105474E-005 + 217.01999999999998 -7.2723043461290029E-005 + 217.07999999999998 -6.9853324082150422E-005 + 217.13999999999999 -6.7007660016208249E-005 + 217.19999999999999 -6.4186879511147734E-005 + 217.25999999999999 -6.1391716897830063E-005 + 217.31999999999999 -5.8622819819434922E-005 + 217.38000000000000 -5.5880725526135379E-005 + 217.44000000000000 -5.3165886914124212E-005 + 217.50000000000000 -5.0478656272034390E-005 + 217.56000000000000 -4.7819283304497724E-005 + 217.62000000000000 -4.5187924967578889E-005 + 217.68000000000001 -4.2584644874258083E-005 + 217.74000000000001 -4.0009414472036501E-005 + 217.80000000000001 -3.7462119402941210E-005 + 217.86000000000001 -3.4942569440554984E-005 + 217.92000000000002 -3.2450491865564679E-005 + 217.98000000000002 -2.9985553396607007E-005 + 218.03999999999996 -2.7547360320612698E-005 + 218.09999999999997 -2.5135469233668952E-005 + 218.15999999999997 -2.2749388594979686E-005 + 218.21999999999997 -2.0388587970047042E-005 + 218.27999999999997 -1.8052501368361120E-005 + 218.33999999999997 -1.5740535085342359E-005 + 218.39999999999998 -1.3452067313192369E-005 + 218.45999999999998 -1.1186455154130488E-005 + 218.51999999999998 -8.9430358044941544E-006 + 218.57999999999998 -6.7211298576106778E-006 + 218.63999999999999 -4.5200441797291329E-006 + 218.69999999999999 -2.3390741362462312E-006 + 218.75999999999999 -1.7750900308767716E-007 + 218.81999999999999 1.9653647940599503E-006 + 218.88000000000000 4.0902592355591697E-006 + 218.94000000000000 6.1978805782525531E-006 + 219.00000000000000 8.2889207054212299E-006 + 219.06000000000000 1.0364052880541034E-005 + 219.12000000000000 1.2423927185384821E-005 + 219.18000000000001 1.4469160963412297E-005 + 219.24000000000001 1.6500332710951307E-005 + 219.30000000000001 1.8517978732236806E-005 + 219.36000000000001 2.0522587348411536E-005 + 219.42000000000002 2.2514589684292591E-005 + 219.48000000000002 2.4494362010106251E-005 + 219.53999999999996 2.6462215545513443E-005 + 219.59999999999997 2.8418398557818094E-005 + 219.65999999999997 3.0363088979222770E-005 + 219.71999999999997 3.2296395377337251E-005 + 219.77999999999997 3.4218348068214255E-005 + 219.83999999999997 3.6128905633782800E-005 + 219.89999999999998 3.8027947116669130E-005 + 219.95999999999998 3.9915272280030404E-005 + 220.01999999999998 4.1790599043210468E-005 + 220.07999999999998 4.3653560740215461E-005 + 220.13999999999999 4.5503709252333067E-005 + 220.19999999999999 4.7340508397598513E-005 + 220.25999999999999 4.9163336580680458E-005 + 220.31999999999999 5.0971492281206796E-005 + 220.38000000000000 5.2764190468757843E-005 + 220.44000000000000 5.4540564196039954E-005 + 220.50000000000000 5.6299674869599939E-005 + 220.56000000000000 5.8040511335268927E-005 + 220.62000000000000 5.9761983940859547E-005 + 220.68000000000001 6.1462949148776666E-005 + 220.74000000000001 6.3142204832630051E-005 + 220.80000000000001 6.4798492277168911E-005 + 220.86000000000001 6.6430498447910170E-005 + 220.92000000000002 6.8036878747425233E-005 + 220.98000000000002 6.9616226561334979E-005 + 221.03999999999996 7.1167109442257901E-005 + 221.09999999999997 7.2688065994628036E-005 + 221.15999999999997 7.4177581917806129E-005 + 221.21999999999997 7.5634124307688967E-005 + 221.27999999999997 7.7056135725666101E-005 + 221.33999999999997 7.8442020868290540E-005 + 221.39999999999998 7.9790171895930182E-005 + 221.45999999999998 8.1098953654517214E-005 + 221.51999999999998 8.2366731097219674E-005 + 221.57999999999998 8.3591847795947777E-005 + 221.63999999999999 8.4772661424220401E-005 + 221.69999999999999 8.5907528489411890E-005 + 221.75999999999999 8.6994836749109902E-005 + 221.81999999999999 8.8032991875283161E-005 + 221.88000000000000 8.9020431302397292E-005 + 221.94000000000000 8.9955652389108923E-005 + 222.00000000000000 9.0837184851038134E-005 + 222.06000000000000 9.1663633707565935E-005 + 222.12000000000000 9.2433663110683470E-005 + 222.18000000000001 9.3146027885457702E-005 + 222.24000000000001 9.3799542790476249E-005 + 222.30000000000001 9.4393106655466836E-005 + 222.36000000000001 9.4925695055411965E-005 + 222.42000000000002 9.5396387908116320E-005 + 222.48000000000002 9.5804322724861110E-005 + 222.53999999999996 9.6148736451340410E-005 + 222.59999999999997 9.6428946868730767E-005 + 222.65999999999997 9.6644359568609471E-005 + 222.71999999999997 9.6794451966209936E-005 + 222.77999999999997 9.6878793099443192E-005 + 222.83999999999997 9.6897048743549945E-005 + 222.89999999999998 9.6848971586416645E-005 + 222.95999999999998 9.6734404846562442E-005 + 223.01999999999998 9.6553284335106900E-005 + 223.07999999999998 9.6305653580621217E-005 + 223.13999999999999 9.5991639060884421E-005 + 223.19999999999999 9.5611483071532486E-005 + 223.25999999999999 9.5165529976298064E-005 + 223.31999999999999 9.4654232689451873E-005 + 223.38000000000000 9.4078136959427865E-005 + 223.44000000000000 9.3437907359582753E-005 + 223.50000000000000 9.2734289843499635E-005 + 223.56000000000000 9.1968143938685865E-005 + 223.62000000000000 9.1140418672910466E-005 + 223.68000000000001 9.0252144839309860E-005 + 223.74000000000001 8.9304436857016989E-005 + 223.80000000000001 8.8298493548716789E-005 + 223.86000000000001 8.7235585690774553E-005 + 223.92000000000002 8.6117040524791844E-005 + 223.98000000000002 8.4944248961420197E-005 + 224.03999999999996 8.3718653562239986E-005 + 224.09999999999997 8.2441739102174610E-005 + 224.15999999999997 8.1115035686989671E-005 + 224.21999999999997 7.9740106974007349E-005 + 224.27999999999997 7.8318544327443624E-005 + 224.33999999999997 7.6851966151906281E-005 + 224.39999999999998 7.5342005293299718E-005 + 224.45999999999998 7.3790313624191839E-005 + 224.51999999999998 7.2198543014276924E-005 + 224.57999999999998 7.0568358895604905E-005 + 224.63999999999999 6.8901432721113997E-005 + 224.69999999999999 6.7199422776637380E-005 + 224.75999999999999 6.5463989658769031E-005 + 224.81999999999999 6.3696786333194001E-005 + 224.88000000000000 6.1899457420451043E-005 + 224.94000000000000 6.0073634304331050E-005 + 225.00000000000000 5.8220935251642266E-005 + 225.06000000000000 5.6342960730644511E-005 + 225.12000000000000 5.4441295378625689E-005 + 225.18000000000001 5.2517488176246245E-005 + 225.24000000000001 5.0573080999647323E-005 + 225.30000000000001 4.8609572189944875E-005 + 225.36000000000001 4.6628431914018217E-005 + 225.42000000000002 4.4631092153822537E-005 + 225.48000000000002 4.2618946313223743E-005 + 225.53999999999996 4.0593336523226287E-005 + 225.59999999999997 3.8555558046949578E-005 + 225.65999999999997 3.6506854912346379E-005 + 225.71999999999997 3.4448415184750986E-005 + 225.77999999999997 3.2381369780216349E-005 + 225.83999999999997 3.0306802391683679E-005 + 225.89999999999998 2.8225738036311903E-005 + 225.95999999999998 2.6139150715798513E-005 + 226.01999999999998 2.4047974690624275E-005 + 226.07999999999998 2.1953103946594914E-005 + 226.13999999999999 1.9855401703543851E-005 + 226.19999999999999 1.7755705614541259E-005 + 226.25999999999999 1.5654834596783715E-005 + 226.31999999999999 1.3553599576357375E-005 + 226.38000000000000 1.1452805137943764E-005 + 226.44000000000000 9.3532571654972408E-006 + 226.50000000000000 7.2557667446369287E-006 + 226.56000000000000 5.1611528042136540E-006 + 226.62000000000000 3.0702415013845923E-006 + 226.68000000000001 9.8386742002236675E-007 + 226.74000000000001 -1.0971268853870895E-006 + 226.80000000000001 -3.1718934969418132E-006 + 226.86000000000001 -5.2395828249841957E-006 + 226.92000000000002 -7.2993426308956878E-006 + 226.98000000000002 -9.3503259502229251E-006 + 227.03999999999996 -1.1391684149495912E-005 + 227.09999999999997 -1.3422573650665748E-005 + 227.15999999999997 -1.5442153305880559E-005 + 227.21999999999997 -1.7449577295597148E-005 + 227.27999999999997 -1.9443999101606958E-005 + 227.33999999999997 -2.1424557270779164E-005 + 227.39999999999998 -2.3390381576346263E-005 + 227.45999999999998 -2.5340574016666395E-005 + 227.51999999999998 -2.7274211206144974E-005 + 227.57999999999998 -2.9190332082233907E-005 + 227.63999999999999 -3.1087939103385092E-005 + 227.69999999999999 -3.2965987864992648E-005 + 227.75999999999999 -3.4823385542733144E-005 + 227.81999999999999 -3.6658988242548829E-005 + 227.88000000000000 -3.8471607359702528E-005 + 227.94000000000000 -4.0259996255667340E-005 + 228.00000000000000 -4.2022863659797005E-005 + 228.06000000000000 -4.3758882940018208E-005 + 228.12000000000000 -4.5466684106162481E-005 + 228.18000000000001 -4.7144861536716399E-005 + 228.24000000000001 -4.8791983168775546E-005 + 228.30000000000001 -5.0406598843467678E-005 + 228.36000000000001 -5.1987232819480358E-005 + 228.42000000000002 -5.3532406112249483E-005 + 228.48000000000002 -5.5040632385848990E-005 + 228.53999999999996 -5.6510422305355127E-005 + 228.59999999999997 -5.7940286890044454E-005 + 228.65999999999997 -5.9328738084968535E-005 + 228.71999999999997 -6.0674297248756637E-005 + 228.77999999999997 -6.1975490945526449E-005 + 228.83999999999997 -6.3230859339230420E-005 + 228.89999999999998 -6.4438947884844721E-005 + 228.95999999999998 -6.5598324607196311E-005 + 229.01999999999998 -6.6707558628407364E-005 + 229.07999999999998 -6.7765240184913922E-005 + 229.13999999999999 -6.8769982348367830E-005 + 229.19999999999999 -6.9720420392845728E-005 + 229.25999999999999 -7.0615207687965283E-005 + 229.31999999999999 -7.1453024783008662E-005 + 229.38000000000000 -7.2232591877714994E-005 + 229.44000000000000 -7.2952654974470563E-005 + 229.50000000000000 -7.3612006751310285E-005 + 229.56000000000000 -7.4209477757239878E-005 + 229.62000000000000 -7.4743966898925670E-005 + 229.68000000000001 -7.5214417512697553E-005 + 229.74000000000001 -7.5619846977663618E-005 + 229.80000000000001 -7.5959343510302880E-005 + 229.86000000000001 -7.6232064250561019E-005 + 229.92000000000002 -7.6437259145272136E-005 + 229.97999999999996 -7.6574262054640224E-005 + 230.03999999999996 -7.6642505777359626E-005 + 230.09999999999997 -7.6641523214579112E-005 + 230.15999999999997 -7.6570950417855209E-005 + 230.21999999999997 -7.6430521068377816E-005 + 230.27999999999997 -7.6220073754312592E-005 + 230.33999999999997 -7.5939548546679941E-005 + 230.39999999999998 -7.5588990032190894E-005 + 230.45999999999998 -7.5168545980392498E-005 + 230.51999999999998 -7.4678456822440599E-005 + 230.57999999999998 -7.4119045540496680E-005 + 230.63999999999999 -7.3490728726723444E-005 + 230.69999999999999 -7.2794011296795254E-005 + 230.75999999999999 -7.2029471984767700E-005 + 230.81999999999999 -7.1197784741163073E-005 + 230.88000000000000 -7.0299682874889596E-005 + 230.94000000000000 -6.9335986984353146E-005 + 231.00000000000000 -6.8307602084801634E-005 + 231.06000000000000 -6.7215509689981043E-005 + 231.12000000000000 -6.6060780048788733E-005 + 231.18000000000001 -6.4844575881022954E-005 + 231.24000000000001 -6.3568143894658733E-005 + 231.30000000000001 -6.2232829927879970E-005 + 231.36000000000001 -6.0840081953218836E-005 + 231.42000000000002 -5.9391434416197257E-005 + 231.47999999999996 -5.7888533793275368E-005 + 231.53999999999996 -5.6333117319930454E-005 + 231.59999999999997 -5.4727012292203361E-005 + 231.65999999999997 -5.3072131503556833E-005 + 231.71999999999997 -5.1370474876091389E-005 + 231.77999999999997 -4.9624117529938199E-005 + 231.83999999999997 -4.7835194322520754E-005 + 231.89999999999998 -4.6005900329111595E-005 + 231.95999999999998 -4.4138481472156316E-005 + 232.01999999999998 -4.2235214868402623E-005 + 232.07999999999998 -4.0298417698560723E-005 + 232.13999999999999 -3.8330426986824960E-005 + 232.19999999999999 -3.6333605497736354E-005 + 232.25999999999999 -3.4310323263188274E-005 + 232.31999999999999 -3.2262965509950321E-005 + 232.38000000000000 -3.0193924993948699E-005 + 232.44000000000000 -2.8105597474397894E-005 + 232.50000000000000 -2.6000386905183288E-005 + 232.56000000000000 -2.3880700031296150E-005 + 232.62000000000000 -2.1748947494183344E-005 + 232.68000000000001 -1.9607538872645457E-005 + 232.74000000000001 -1.7458887797645828E-005 + 232.80000000000001 -1.5305405656184523E-005 + 232.86000000000001 -1.3149502421002535E-005 + 232.92000000000002 -1.0993583203214594E-005 + 232.97999999999996 -8.8400427292396107E-006 + 233.03999999999996 -6.6912666089862062E-006 + 233.09999999999997 -4.5496234174082726E-006 + 233.15999999999997 -2.4174606462181079E-006 + 233.21999999999997 -2.9710270437067125E-007 + 233.27999999999997 1.8091568302648618E-006 + 233.33999999999997 3.8990579555698182E-006 + 233.39999999999998 5.9703798144343402E-006 + 233.45999999999998 8.0209477510161434E-006 + 233.51999999999998 1.0048635193600774E-005 + 233.57999999999998 1.2051369201819091E-005 + 233.63999999999999 1.4027137166804531E-005 + 233.69999999999999 1.5973987672115925E-005 + 233.75999999999999 1.7890039088937677E-005 + 233.81999999999999 1.9773476445191668E-005 + 233.88000000000000 2.1622561964667194E-005 + 233.94000000000000 2.3435631098233265E-005 + 234.00000000000000 2.5211096349868638E-005 + 234.06000000000000 2.6947446774037513E-005 + 234.12000000000000 2.8643249621129377E-005 + 234.18000000000001 3.0297144265580237E-005 + 234.24000000000001 3.1907847694998443E-005 + 234.30000000000001 3.3474142310220139E-005 + 234.36000000000001 3.4994879223326886E-005 + 234.42000000000002 3.6468977772410771E-005 + 234.47999999999996 3.7895419007077572E-005 + 234.53999999999996 3.9273239244313462E-005 + 234.59999999999997 4.0601533641675052E-005 + 234.65999999999997 4.1879457724379277E-005 + 234.71999999999997 4.3106220097615166E-005 + 234.77999999999997 4.4281087885556625E-005 + 234.83999999999997 4.5403390803420751E-005 + 234.89999999999998 4.6472527989837647E-005 + 234.95999999999998 4.7487951235729841E-005 + 235.01999999999998 4.8449195470060781E-005 + 235.07999999999998 4.9355859547417865E-005 + 235.13999999999999 5.0207626993443549E-005 + 235.19999999999999 5.1004253591863290E-005 + 235.25999999999999 5.1745582606454271E-005 + 235.31999999999999 5.2431535318852634E-005 + 235.38000000000000 5.3062109929046688E-005 + 235.44000000000000 5.3637386747193097E-005 + 235.50000000000000 5.4157520742053079E-005 + 235.56000000000000 5.4622733643273065E-005 + 235.62000000000000 5.5033321666711672E-005 + 235.68000000000001 5.5389630026759185E-005 + 235.74000000000001 5.5692067822482549E-005 + 235.80000000000001 5.5941090681645866E-005 + 235.86000000000001 5.6137210094369495E-005 + 235.92000000000002 5.6280972690977998E-005 + 235.97999999999996 5.6372972921579288E-005 + 236.03999999999996 5.6413845407931740E-005 + 236.09999999999997 5.6404276368409322E-005 + 236.15999999999997 5.6344978325257091E-005 + 236.21999999999997 5.6236715194332375E-005 + 236.27999999999997 5.6080307103261067E-005 + 236.33999999999997 5.5876609890525688E-005 + 236.39999999999998 5.5626538724812440E-005 + 236.45999999999998 5.5331058754348313E-005 + 236.51999999999998 5.4991184868066414E-005 + 236.57999999999998 5.4607995693268464E-005 + 236.63999999999999 5.4182610542348724E-005 + 236.69999999999999 5.3716218455958305E-005 + 236.75999999999999 5.3210046285336614E-005 + 236.81999999999999 5.2665383234740964E-005 + 236.88000000000000 5.2083560363244328E-005 + 236.94000000000000 5.1465956164488077E-005 + 237.00000000000000 5.0814004217725553E-005 + 237.06000000000000 5.0129172534207150E-005 + 237.12000000000000 4.9412978940739981E-005 + 237.18000000000001 4.8666973308355981E-005 + 237.24000000000001 4.7892751136983377E-005 + 237.30000000000001 4.7091945294238868E-005 + 237.36000000000001 4.6266229133253157E-005 + 237.42000000000002 4.5417306037758011E-005 + 237.47999999999996 4.4546915977023726E-005 + 237.53999999999996 4.3656828293969840E-005 + 237.59999999999997 4.2748853462513564E-005 + 237.65999999999997 4.1824824034472993E-005 + 237.71999999999997 4.0886611376410789E-005 + 237.77999999999997 3.9936111598304997E-005 + 237.83999999999997 3.8975254446251834E-005 + 237.89999999999998 3.8005995843125138E-005 + 237.95999999999998 3.7030329019159495E-005 + 238.01999999999998 3.6050281435667680E-005 + 238.07999999999998 3.5067910115635716E-005 + 238.13999999999999 3.4085316865593771E-005 + 238.19999999999999 3.3104645818436896E-005 + 238.25999999999999 3.2128079984977437E-005 + 238.31999999999999 3.1157850055179553E-005 + 238.38000000000000 3.0196228614931707E-005 + 238.44000000000000 2.9245541924152941E-005 + 238.50000000000000 2.8308160424181766E-005 + 238.56000000000000 2.7386498502276932E-005 + 238.62000000000000 2.6483012869890307E-005 + 238.68000000000001 2.5600195317693062E-005 + 238.74000000000001 2.4740575792709390E-005 + 238.80000000000001 2.3906706796997152E-005 + 238.86000000000001 2.3101164872741552E-005 + 238.92000000000002 2.2326544969497487E-005 + 238.97999999999996 2.1585451526006977E-005 + 239.03999999999996 2.0880495271668969E-005 + 239.09999999999997 2.0214293370611072E-005 + 239.15999999999997 1.9589460642544581E-005 + 239.21999999999997 1.9008618404644080E-005 + 239.27999999999997 1.8474390216642378E-005 + 239.33999999999997 1.7989401304343258E-005 + 239.39999999999998 1.7556285955364564E-005 + 239.45999999999998 1.7177684631982967E-005 + 239.51999999999998 1.6856253019670322E-005 + 239.57999999999998 1.6594661789718231E-005 + 239.63999999999999 1.6395599842853544E-005 + 239.69999999999999 1.6261773887770923E-005 + 239.75999999999999 1.6195906527435593E-005 + 239.81999999999999 1.6200739589616598E-005 + 239.88000000000000 1.6279031099390293E-005 + 239.94000000000000 1.6433548439288636E-005 + 240.00000000000000 1.6667062008921037E-005 + 240.06000000000000 1.6982345730058298E-005 + 240.12000000000000 1.7382167596445230E-005 + 240.18000000000001 1.7869282923339919E-005 + 240.24000000000001 1.8446427846438622E-005 + 240.30000000000001 1.9116315583540065E-005 + 240.36000000000001 1.9881629395993384E-005 + 240.42000000000002 2.0745017990757801E-005 + 240.47999999999996 2.1709087288544650E-005 + 240.53999999999996 2.2776399493894213E-005 + 240.59999999999997 2.3949469386508825E-005 + 240.65999999999997 2.5230751872241043E-005 + 240.71999999999997 2.6622644217032632E-005 + 240.77999999999997 2.8127475711103925E-005 + 240.83999999999997 2.9747508101340768E-005 + 240.89999999999998 3.1484919720551446E-005 + 240.95999999999998 3.3341813530493539E-005 + 241.01999999999998 3.5320194283159724E-005 + 241.07999999999998 3.7421968030772986E-005 + 241.13999999999999 3.9648940279215434E-005 + 241.19999999999999 4.2002803772765510E-005 + 241.25999999999999 4.4485125663964062E-005 + 241.31999999999999 4.7097358593377289E-005 + 241.38000000000000 4.9840812209519364E-005 + 241.44000000000000 5.2716669287087226E-005 + 241.50000000000000 5.5725965297188278E-005 + 241.56000000000000 5.8869589519804814E-005 + 241.62000000000000 6.2148279305759512E-005 + 241.68000000000001 6.5562611763601698E-005 + 241.74000000000001 6.9113011161069994E-005 + 241.80000000000001 7.2799712550384926E-005 + 241.86000000000001 7.6622792060583339E-005 + 241.92000000000002 8.0582133020017915E-005 + 241.97999999999996 8.4677419619691902E-005 + 242.03999999999996 8.8908143891179282E-005 + 242.09999999999997 9.3273569243318077E-005 + 242.15999999999997 9.7772754149748670E-005 + 242.21999999999997 1.0240452253668455E-004 + 242.27999999999997 1.0716746084393009E-004 + 242.33999999999997 1.1205991844263411E-004 + 242.39999999999998 1.1707997653028030E-004 + 242.45999999999998 1.2222548841910865E-004 + 242.51999999999998 1.2749403338039661E-004 + 242.57999999999998 1.3288294721176567E-004 + 242.63999999999999 1.3838929307920773E-004 + 242.69999999999999 1.4400990314053933E-004 + 242.75999999999999 1.4974134636861646E-004 + 242.81999999999999 1.5557991798536005E-004 + 242.88000000000000 1.6152169820456274E-004 + 242.94000000000000 1.6756249182908379E-004 + 243.00000000000000 1.7369785588809656E-004 + 243.06000000000000 1.7992310626034532E-004 + 243.12000000000000 1.8623331925575975E-004 + 243.18000000000001 1.9262330281139402E-004 + 243.24000000000001 1.9908760802622198E-004 + 243.30000000000001 2.0562053672762496E-004 + 243.36000000000001 2.1221615030492819E-004 + 243.42000000000002 2.1886823449035641E-004 + 243.47999999999996 2.2557032719015366E-004 + 243.53999999999996 2.3231571517032896E-004 + 243.59999999999997 2.3909742833099382E-004 + 243.65999999999997 2.4590827516048845E-004 + 243.71999999999997 2.5274081668917033E-004 + 243.77999999999997 2.5958739098178989E-004 + 243.83999999999997 2.6644014966150926E-004 + 243.89999999999998 2.7329102587570359E-004 + 243.95999999999998 2.8013176517539866E-004 + 244.01999999999998 2.8695395037635482E-004 + 244.07999999999998 2.9374901886482647E-004 + 244.13999999999999 3.0050824609500636E-004 + 244.19999999999999 3.0722278092602416E-004 + 244.25999999999999 3.1388366629727326E-004 + 244.31999999999999 3.2048186997368875E-004 + 244.38000000000000 3.2700823880494782E-004 + 244.44000000000000 3.3345356161333314E-004 + 244.50000000000000 3.3980858396344215E-004 + 244.56000000000000 3.4606399556235236E-004 + 244.62000000000000 3.5221042470367136E-004 + 244.68000000000001 3.5823856370847262E-004 + 244.74000000000001 3.6413905991497031E-004 + 244.80000000000001 3.6990260409745080E-004 + 244.86000000000001 3.7551996269106152E-004 + 244.92000000000002 3.8098187658933071E-004 + 244.97999999999996 3.8627925753396969E-004 + 245.03999999999996 3.9140301364362938E-004 + 245.09999999999997 3.9634423382698823E-004 + 245.15999999999997 4.0109413624751084E-004 + 245.21999999999997 4.0564405598692233E-004 + 245.27999999999997 4.0998549528712628E-004 + 245.33999999999997 4.1411014451334788E-004 + 245.39999999999998 4.1800989021132984E-004 + 245.45999999999998 4.2167684324350622E-004 + 245.51999999999998 4.2510329580009966E-004 + 245.57999999999998 4.2828184631585906E-004 + 245.63999999999999 4.3120530246456147E-004 + 245.69999999999999 4.3386681738799879E-004 + 245.75999999999999 4.3625980566782188E-004 + 245.81999999999999 4.3837804099564135E-004 + 245.88000000000000 4.4021559664046597E-004 + 245.94000000000000 4.4176693534238228E-004 + 246.00000000000000 4.4302693074936810E-004 + 246.06000000000000 4.4399080264518763E-004 + 246.12000000000000 4.4465419703958441E-004 + 246.18000000000001 4.4501323957612095E-004 + 246.24000000000001 4.4506450513058819E-004 + 246.30000000000001 4.4480493794660627E-004 + 246.36000000000001 4.4423201514193504E-004 + 246.42000000000002 4.4334364443336275E-004 + 246.47999999999996 4.4213821924981911E-004 + 246.53999999999996 4.4061458166333277E-004 + 246.59999999999997 4.3877208742820295E-004 + 246.65999999999997 4.3661049569770427E-004 + 246.71999999999997 4.3413007957264651E-004 + 246.77999999999997 4.3133155203024998E-004 + 246.83999999999997 4.2821609676843358E-004 + 246.89999999999998 4.2478538239858069E-004 + 246.95999999999998 4.2104148406651212E-004 + 247.01999999999998 4.1698702640632739E-004 + 247.07999999999998 4.1262499536327845E-004 + 247.13999999999999 4.0795895766129650E-004 + 247.19999999999999 4.0299290330600245E-004 + 247.25999999999999 3.9773127498729321E-004 + 247.31999999999999 3.9217897958615956E-004 + 247.38000000000000 3.8634144558928531E-004 + 247.44000000000000 3.8022448429530880E-004 + 247.50000000000000 3.7383441485575129E-004 + 247.56000000000000 3.6717794797810958E-004 + 247.62000000000000 3.6026220892314026E-004 + 247.68000000000001 3.5309471202579177E-004 + 247.74000000000001 3.4568341475147498E-004 + 247.80000000000001 3.3803659935434486E-004 + 247.86000000000001 3.3016283854643504E-004 + 247.92000000000002 3.2207108730039543E-004 + 247.97999999999996 3.1377057602318060E-004 + 248.03999999999996 3.0527083188028662E-004 + 248.09999999999997 2.9658161621251290E-004 + 248.15999999999997 2.8771295089714680E-004 + 248.21999999999997 2.7867498950172938E-004 + 248.27999999999997 2.6947818817307030E-004 + 248.33999999999997 2.6013314215326996E-004 + 248.39999999999998 2.5065057959603717E-004 + 248.45999999999998 2.4104139669926819E-004 + 248.51999999999998 2.3131662126993130E-004 + 248.57999999999998 2.2148737569844694E-004 + 248.63999999999999 2.1156482219120140E-004 + 248.69999999999999 2.0156021788588340E-004 + 248.75999999999999 1.9148486713048510E-004 + 248.81999999999999 1.8135003675318279E-004 + 248.88000000000000 1.7116704302194547E-004 + 248.94000000000000 1.6094715814550994E-004 + 249.00000000000000 1.5070159926392380E-004 + 249.06000000000000 1.4044153202562393E-004 + 249.12000000000000 1.3017803375441503E-004 + 249.18000000000001 1.1992206518734842E-004 + 249.24000000000001 1.0968444680335153E-004 + 249.30000000000001 9.9475906245708975E-005 + 249.36000000000001 8.9306971975511526E-005 + 249.42000000000002 7.9188001867466117E-005 + 249.47999999999996 6.9129165945132061E-005 + 249.53999999999996 5.9140420031494300E-005 + 249.59999999999997 4.9231491966887100E-005 + 249.65999999999997 3.9411860681601692E-005 + 249.71999999999997 2.9690754496089963E-005 + 249.77999999999997 2.0077119436541784E-005 + 249.83999999999997 1.0579616381710149E-005 + 249.89999999999998 1.2066045107428867E-006 + 249.95999999999998 -8.0338644343620556E-006 + 250.01999999999998 -1.7134052069795018E-005 + 250.07999999999998 -2.6086540586127891E-005 + 250.13999999999999 -3.4884249291449659E-005 + 250.19999999999999 -4.3520415159395445E-005 + 250.25999999999999 -5.1988608030547777E-005 + 250.31999999999999 -6.0282719915823302E-005 + 250.38000000000000 -6.8396973309356519E-005 + 250.44000000000000 -7.6325911004040121E-005 + 250.50000000000000 -8.4064401770357001E-005 + 250.56000000000000 -9.1607625999496210E-005 + 250.62000000000000 -9.8951084458349773E-005 + 250.68000000000001 -1.0609060581923265E-004 + 250.74000000000001 -1.1302233729780712E-004 + 250.80000000000001 -1.1974275078034663E-004 + 250.86000000000001 -1.2624865541374316E-004 + 250.92000000000002 -1.3253719155530716E-004 + 250.97999999999996 -1.3860584223909729E-004 + 251.03999999999996 -1.4445241444611991E-004 + 251.09999999999997 -1.5007506065061249E-004 + 251.15999999999997 -1.5547228207483439E-004 + 251.21999999999997 -1.6064291889739276E-004 + 251.27999999999997 -1.6558613284295209E-004 + 251.33999999999997 -1.7030140728758173E-004 + 251.39999999999998 -1.7478854532114899E-004 + 251.45999999999998 -1.7904767126483229E-004 + 251.51999999999998 -1.8307917615270337E-004 + 251.57999999999998 -1.8688373419059663E-004 + 251.63999999999999 -1.9046229233293823E-004 + 251.69999999999999 -1.9381604773335433E-004 + 251.75999999999999 -1.9694642440640968E-004 + 251.81999999999999 -1.9985508193044559E-004 + 251.88000000000000 -2.0254392172400877E-004 + 251.94000000000000 -2.0501503533319353E-004 diff --git a/seisflows/tests/test_data/test_solver/001/traces/obs/AA.S000001.BXY.semd b/seisflows/tests/test_data/test_solver/001/traces/obs/AA.S000001.BXY.semd new file mode 100644 index 00000000..6e7a57fa --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/traces/obs/AA.S000001.BXY.semd @@ -0,0 +1,5000 @@ + -48.000000000000000 0.0000000000000000 + -47.939999999999998 0.0000000000000000 + -47.880000000000003 0.0000000000000000 + -47.820000000000000 0.0000000000000000 + -47.759999999999998 0.0000000000000000 + -47.700000000000003 0.0000000000000000 + -47.640000000000001 0.0000000000000000 + -47.579999999999998 0.0000000000000000 + -47.520000000000003 0.0000000000000000 + -47.460000000000001 0.0000000000000000 + -47.399999999999999 0.0000000000000000 + -47.340000000000003 0.0000000000000000 + -47.280000000000001 0.0000000000000000 + -47.219999999999999 0.0000000000000000 + -47.159999999999997 0.0000000000000000 + -47.100000000000001 0.0000000000000000 + -47.039999999999999 0.0000000000000000 + -46.979999999999997 0.0000000000000000 + -46.920000000000002 0.0000000000000000 + -46.859999999999999 0.0000000000000000 + -46.799999999999997 0.0000000000000000 + -46.740000000000002 0.0000000000000000 + -46.680000000000000 0.0000000000000000 + -46.619999999999997 0.0000000000000000 + -46.560000000000002 0.0000000000000000 + -46.500000000000000 0.0000000000000000 + -46.439999999999998 0.0000000000000000 + -46.380000000000003 0.0000000000000000 + -46.320000000000000 0.0000000000000000 + -46.259999999999998 0.0000000000000000 + -46.200000000000003 0.0000000000000000 + -46.140000000000001 0.0000000000000000 + -46.079999999999998 0.0000000000000000 + -46.020000000000003 0.0000000000000000 + -45.960000000000001 0.0000000000000000 + -45.899999999999999 0.0000000000000000 + -45.840000000000003 0.0000000000000000 + -45.780000000000001 0.0000000000000000 + -45.719999999999999 0.0000000000000000 + -45.659999999999997 0.0000000000000000 + -45.600000000000001 0.0000000000000000 + -45.539999999999999 0.0000000000000000 + -45.479999999999997 0.0000000000000000 + -45.420000000000002 0.0000000000000000 + -45.359999999999999 0.0000000000000000 + -45.299999999999997 0.0000000000000000 + -45.240000000000002 0.0000000000000000 + -45.180000000000000 0.0000000000000000 + -45.119999999999997 0.0000000000000000 + -45.060000000000002 0.0000000000000000 + -45.000000000000000 0.0000000000000000 + -44.939999999999998 0.0000000000000000 + -44.880000000000003 0.0000000000000000 + -44.820000000000000 0.0000000000000000 + -44.759999999999998 0.0000000000000000 + -44.700000000000003 0.0000000000000000 + -44.640000000000001 0.0000000000000000 + -44.579999999999998 0.0000000000000000 + -44.520000000000003 0.0000000000000000 + -44.460000000000001 0.0000000000000000 + -44.399999999999999 0.0000000000000000 + -44.340000000000003 0.0000000000000000 + -44.280000000000001 0.0000000000000000 + -44.219999999999999 0.0000000000000000 + -44.159999999999997 0.0000000000000000 + -44.100000000000001 0.0000000000000000 + -44.039999999999999 0.0000000000000000 + -43.980000000000004 0.0000000000000000 + -43.920000000000002 0.0000000000000000 + -43.859999999999999 0.0000000000000000 + -43.799999999999997 0.0000000000000000 + -43.740000000000002 0.0000000000000000 + -43.680000000000000 0.0000000000000000 + -43.619999999999997 0.0000000000000000 + -43.560000000000002 0.0000000000000000 + -43.500000000000000 0.0000000000000000 + -43.439999999999998 0.0000000000000000 + -43.380000000000003 0.0000000000000000 + -43.320000000000000 0.0000000000000000 + -43.259999999999998 0.0000000000000000 + -43.200000000000003 0.0000000000000000 + -43.140000000000001 0.0000000000000000 + -43.079999999999998 0.0000000000000000 + -43.020000000000003 0.0000000000000000 + -42.960000000000001 0.0000000000000000 + -42.899999999999999 0.0000000000000000 + -42.840000000000003 0.0000000000000000 + -42.780000000000001 0.0000000000000000 + -42.719999999999999 0.0000000000000000 + -42.659999999999997 0.0000000000000000 + -42.600000000000001 0.0000000000000000 + -42.539999999999999 0.0000000000000000 + -42.480000000000004 0.0000000000000000 + -42.420000000000002 0.0000000000000000 + -42.359999999999999 0.0000000000000000 + -42.299999999999997 0.0000000000000000 + -42.240000000000002 0.0000000000000000 + -42.180000000000000 0.0000000000000000 + -42.119999999999997 0.0000000000000000 + -42.060000000000002 0.0000000000000000 + -42.000000000000000 0.0000000000000000 + -41.939999999999998 0.0000000000000000 + -41.880000000000003 0.0000000000000000 + -41.820000000000000 0.0000000000000000 + -41.759999999999998 0.0000000000000000 + -41.700000000000003 0.0000000000000000 + -41.640000000000001 0.0000000000000000 + -41.579999999999998 0.0000000000000000 + -41.520000000000003 0.0000000000000000 + -41.460000000000001 0.0000000000000000 + -41.399999999999999 0.0000000000000000 + -41.340000000000003 0.0000000000000000 + -41.280000000000001 0.0000000000000000 + -41.219999999999999 0.0000000000000000 + -41.159999999999997 0.0000000000000000 + -41.100000000000001 0.0000000000000000 + -41.039999999999999 0.0000000000000000 + -40.980000000000004 0.0000000000000000 + -40.920000000000002 0.0000000000000000 + -40.859999999999999 0.0000000000000000 + -40.799999999999997 0.0000000000000000 + -40.740000000000002 0.0000000000000000 + -40.680000000000000 0.0000000000000000 + -40.619999999999997 0.0000000000000000 + -40.560000000000002 0.0000000000000000 + -40.500000000000000 0.0000000000000000 + -40.439999999999998 0.0000000000000000 + -40.380000000000003 0.0000000000000000 + -40.320000000000000 0.0000000000000000 + -40.259999999999998 0.0000000000000000 + -40.200000000000003 0.0000000000000000 + -40.140000000000001 0.0000000000000000 + -40.079999999999998 0.0000000000000000 + -40.020000000000003 0.0000000000000000 + -39.960000000000001 0.0000000000000000 + -39.899999999999999 0.0000000000000000 + -39.840000000000003 0.0000000000000000 + -39.780000000000001 0.0000000000000000 + -39.719999999999999 0.0000000000000000 + -39.659999999999997 0.0000000000000000 + -39.600000000000001 0.0000000000000000 + -39.539999999999999 0.0000000000000000 + -39.480000000000004 0.0000000000000000 + -39.420000000000002 0.0000000000000000 + -39.359999999999999 0.0000000000000000 + -39.299999999999997 0.0000000000000000 + -39.240000000000002 0.0000000000000000 + -39.180000000000000 0.0000000000000000 + -39.120000000000005 0.0000000000000000 + -39.060000000000002 0.0000000000000000 + -39.000000000000000 0.0000000000000000 + -38.939999999999998 0.0000000000000000 + -38.880000000000003 0.0000000000000000 + -38.820000000000000 0.0000000000000000 + -38.759999999999998 0.0000000000000000 + -38.700000000000003 0.0000000000000000 + -38.640000000000001 0.0000000000000000 + -38.579999999999998 0.0000000000000000 + -38.519999999999996 0.0000000000000000 + -38.460000000000001 0.0000000000000000 + -38.399999999999999 0.0000000000000000 + -38.340000000000003 0.0000000000000000 + -38.280000000000001 0.0000000000000000 + -38.219999999999999 0.0000000000000000 + -38.159999999999997 0.0000000000000000 + -38.100000000000001 0.0000000000000000 + -38.039999999999999 0.0000000000000000 + -37.980000000000004 0.0000000000000000 + -37.920000000000002 0.0000000000000000 + -37.859999999999999 0.0000000000000000 + -37.799999999999997 0.0000000000000000 + -37.740000000000002 0.0000000000000000 + -37.680000000000000 0.0000000000000000 + -37.620000000000005 0.0000000000000000 + -37.560000000000002 0.0000000000000000 + -37.500000000000000 0.0000000000000000 + -37.439999999999998 0.0000000000000000 + -37.380000000000003 0.0000000000000000 + -37.320000000000000 0.0000000000000000 + -37.259999999999998 0.0000000000000000 + -37.200000000000003 0.0000000000000000 + -37.140000000000001 0.0000000000000000 + -37.079999999999998 0.0000000000000000 + -37.019999999999996 0.0000000000000000 + -36.960000000000001 0.0000000000000000 + -36.899999999999999 0.0000000000000000 + -36.840000000000003 0.0000000000000000 + -36.780000000000001 0.0000000000000000 + -36.719999999999999 0.0000000000000000 + -36.659999999999997 0.0000000000000000 + -36.600000000000001 0.0000000000000000 + -36.539999999999999 0.0000000000000000 + -36.480000000000004 0.0000000000000000 + -36.420000000000002 0.0000000000000000 + -36.359999999999999 0.0000000000000000 + -36.299999999999997 0.0000000000000000 + -36.240000000000002 0.0000000000000000 + -36.180000000000000 0.0000000000000000 + -36.120000000000005 0.0000000000000000 + -36.060000000000002 0.0000000000000000 + -36.000000000000000 0.0000000000000000 + -35.939999999999998 0.0000000000000000 + -35.880000000000003 0.0000000000000000 + -35.820000000000000 0.0000000000000000 + -35.759999999999998 0.0000000000000000 + -35.700000000000003 0.0000000000000000 + -35.640000000000001 0.0000000000000000 + -35.579999999999998 0.0000000000000000 + -35.519999999999996 0.0000000000000000 + -35.460000000000001 0.0000000000000000 + -35.399999999999999 0.0000000000000000 + -35.340000000000003 0.0000000000000000 + -35.280000000000001 0.0000000000000000 + -35.219999999999999 0.0000000000000000 + -35.159999999999997 0.0000000000000000 + -35.100000000000001 0.0000000000000000 + -35.039999999999999 0.0000000000000000 + -34.980000000000004 0.0000000000000000 + -34.920000000000002 0.0000000000000000 + -34.859999999999999 0.0000000000000000 + -34.799999999999997 0.0000000000000000 + -34.740000000000002 0.0000000000000000 + -34.680000000000000 0.0000000000000000 + -34.620000000000005 0.0000000000000000 + -34.560000000000002 0.0000000000000000 + -34.500000000000000 0.0000000000000000 + -34.439999999999998 0.0000000000000000 + -34.380000000000003 0.0000000000000000 + -34.320000000000000 0.0000000000000000 + -34.259999999999998 0.0000000000000000 + -34.200000000000003 0.0000000000000000 + -34.140000000000001 0.0000000000000000 + -34.079999999999998 0.0000000000000000 + -34.020000000000003 0.0000000000000000 + -33.960000000000001 0.0000000000000000 + -33.899999999999999 0.0000000000000000 + -33.840000000000003 0.0000000000000000 + -33.780000000000001 0.0000000000000000 + -33.719999999999999 0.0000000000000000 + -33.659999999999997 0.0000000000000000 + -33.600000000000001 0.0000000000000000 + -33.539999999999999 0.0000000000000000 + -33.480000000000004 0.0000000000000000 + -33.420000000000002 0.0000000000000000 + -33.359999999999999 0.0000000000000000 + -33.299999999999997 0.0000000000000000 + -33.240000000000002 0.0000000000000000 + -33.180000000000000 0.0000000000000000 + -33.120000000000005 0.0000000000000000 + -33.060000000000002 0.0000000000000000 + -33.000000000000000 0.0000000000000000 + -32.939999999999998 0.0000000000000000 + -32.880000000000003 0.0000000000000000 + -32.820000000000000 0.0000000000000000 + -32.759999999999998 0.0000000000000000 + -32.700000000000003 0.0000000000000000 + -32.640000000000001 0.0000000000000000 + -32.579999999999998 0.0000000000000000 + -32.520000000000003 0.0000000000000000 + -32.460000000000001 0.0000000000000000 + -32.399999999999999 0.0000000000000000 + -32.340000000000003 0.0000000000000000 + -32.280000000000001 0.0000000000000000 + -32.219999999999999 0.0000000000000000 + -32.159999999999997 0.0000000000000000 + -32.100000000000001 0.0000000000000000 + -32.039999999999999 0.0000000000000000 + -31.980000000000000 0.0000000000000000 + -31.920000000000002 0.0000000000000000 + -31.859999999999999 0.0000000000000000 + -31.800000000000001 0.0000000000000000 + -31.740000000000002 0.0000000000000000 + -31.680000000000000 0.0000000000000000 + -31.620000000000001 0.0000000000000000 + -31.560000000000002 0.0000000000000000 + -31.500000000000000 0.0000000000000000 + -31.440000000000001 0.0000000000000000 + -31.379999999999999 0.0000000000000000 + -31.320000000000000 0.0000000000000000 + -31.260000000000002 0.0000000000000000 + -31.199999999999999 0.0000000000000000 + -31.140000000000001 0.0000000000000000 + -31.080000000000002 0.0000000000000000 + -31.020000000000000 0.0000000000000000 + -30.960000000000001 0.0000000000000000 + -30.900000000000002 0.0000000000000000 + -30.840000000000000 0.0000000000000000 + -30.780000000000001 0.0000000000000000 + -30.719999999999999 0.0000000000000000 + -30.660000000000000 0.0000000000000000 + -30.600000000000001 0.0000000000000000 + -30.539999999999999 0.0000000000000000 + -30.480000000000000 0.0000000000000000 + -30.420000000000002 0.0000000000000000 + -30.359999999999999 0.0000000000000000 + -30.300000000000001 0.0000000000000000 + -30.240000000000002 0.0000000000000000 + -30.180000000000000 0.0000000000000000 + -30.120000000000001 0.0000000000000000 + -30.060000000000002 0.0000000000000000 + -30.000000000000000 0.0000000000000000 + -29.940000000000001 0.0000000000000000 + -29.879999999999999 0.0000000000000000 + -29.820000000000000 0.0000000000000000 + -29.760000000000002 0.0000000000000000 + -29.699999999999999 0.0000000000000000 + -29.640000000000001 0.0000000000000000 + -29.580000000000002 0.0000000000000000 + -29.520000000000000 0.0000000000000000 + -29.460000000000001 0.0000000000000000 + -29.400000000000002 0.0000000000000000 + -29.340000000000000 0.0000000000000000 + -29.280000000000001 0.0000000000000000 + -29.220000000000002 0.0000000000000000 + -29.160000000000000 0.0000000000000000 + -29.100000000000001 0.0000000000000000 + -29.039999999999999 0.0000000000000000 + -28.980000000000000 0.0000000000000000 + -28.920000000000002 0.0000000000000000 + -28.859999999999999 0.0000000000000000 + -28.800000000000001 0.0000000000000000 + -28.740000000000002 0.0000000000000000 + -28.680000000000000 0.0000000000000000 + -28.620000000000001 0.0000000000000000 + -28.560000000000002 0.0000000000000000 + -28.500000000000000 0.0000000000000000 + -28.440000000000001 0.0000000000000000 + -28.379999999999999 0.0000000000000000 + -28.320000000000000 0.0000000000000000 + -28.260000000000002 0.0000000000000000 + -28.199999999999999 0.0000000000000000 + -28.140000000000001 0.0000000000000000 + -28.080000000000002 0.0000000000000000 + -28.020000000000000 0.0000000000000000 + -27.960000000000001 0.0000000000000000 + -27.900000000000002 0.0000000000000000 + -27.840000000000000 0.0000000000000000 + -27.780000000000001 0.0000000000000000 + -27.720000000000002 0.0000000000000000 + -27.660000000000000 0.0000000000000000 + -27.600000000000001 0.0000000000000000 + -27.539999999999999 0.0000000000000000 + -27.480000000000000 0.0000000000000000 + -27.420000000000002 0.0000000000000000 + -27.359999999999999 0.0000000000000000 + -27.300000000000001 0.0000000000000000 + -27.240000000000002 0.0000000000000000 + -27.180000000000000 0.0000000000000000 + -27.120000000000001 0.0000000000000000 + -27.060000000000002 0.0000000000000000 + -27.000000000000000 0.0000000000000000 + -26.940000000000001 0.0000000000000000 + -26.880000000000003 0.0000000000000000 + -26.820000000000000 0.0000000000000000 + -26.760000000000002 0.0000000000000000 + -26.699999999999999 0.0000000000000000 + -26.640000000000001 0.0000000000000000 + -26.580000000000002 0.0000000000000000 + -26.520000000000000 0.0000000000000000 + -26.460000000000001 0.0000000000000000 + -26.400000000000002 0.0000000000000000 + -26.340000000000000 0.0000000000000000 + -26.280000000000001 0.0000000000000000 + -26.220000000000002 0.0000000000000000 + -26.160000000000000 0.0000000000000000 + -26.100000000000001 0.0000000000000000 + -26.039999999999999 0.0000000000000000 + -25.980000000000000 0.0000000000000000 + -25.920000000000002 0.0000000000000000 + -25.859999999999999 0.0000000000000000 + -25.800000000000001 0.0000000000000000 + -25.740000000000002 0.0000000000000000 + -25.680000000000000 0.0000000000000000 + -25.620000000000001 0.0000000000000000 + -25.560000000000002 0.0000000000000000 + -25.500000000000000 0.0000000000000000 + -25.440000000000001 0.0000000000000000 + -25.380000000000003 0.0000000000000000 + -25.320000000000000 0.0000000000000000 + -25.260000000000002 0.0000000000000000 + -25.199999999999999 0.0000000000000000 + -25.140000000000001 0.0000000000000000 + -25.080000000000002 0.0000000000000000 + -25.020000000000000 0.0000000000000000 + -24.960000000000001 0.0000000000000000 + -24.900000000000002 0.0000000000000000 + -24.840000000000000 0.0000000000000000 + -24.780000000000001 0.0000000000000000 + -24.720000000000002 0.0000000000000000 + -24.660000000000000 0.0000000000000000 + -24.600000000000001 0.0000000000000000 + -24.539999999999999 0.0000000000000000 + -24.480000000000000 0.0000000000000000 + -24.420000000000002 0.0000000000000000 + -24.359999999999999 0.0000000000000000 + -24.300000000000001 0.0000000000000000 + -24.240000000000002 0.0000000000000000 + -24.180000000000000 0.0000000000000000 + -24.120000000000001 0.0000000000000000 + -24.060000000000002 0.0000000000000000 + -24.000000000000000 0.0000000000000000 + -23.940000000000001 0.0000000000000000 + -23.880000000000003 0.0000000000000000 + -23.820000000000000 0.0000000000000000 + -23.760000000000002 0.0000000000000000 + -23.699999999999999 0.0000000000000000 + -23.640000000000001 0.0000000000000000 + -23.580000000000002 0.0000000000000000 + -23.520000000000000 0.0000000000000000 + -23.460000000000001 0.0000000000000000 + -23.400000000000002 0.0000000000000000 + -23.340000000000000 0.0000000000000000 + -23.280000000000001 0.0000000000000000 + -23.220000000000002 0.0000000000000000 + -23.160000000000000 0.0000000000000000 + -23.100000000000001 0.0000000000000000 + -23.039999999999999 0.0000000000000000 + -22.980000000000000 0.0000000000000000 + -22.920000000000002 0.0000000000000000 + -22.859999999999999 0.0000000000000000 + -22.800000000000001 0.0000000000000000 + -22.740000000000002 0.0000000000000000 + -22.680000000000000 0.0000000000000000 + -22.620000000000001 0.0000000000000000 + -22.560000000000002 0.0000000000000000 + -22.500000000000000 0.0000000000000000 + -22.440000000000001 0.0000000000000000 + -22.380000000000003 0.0000000000000000 + -22.320000000000000 0.0000000000000000 + -22.260000000000002 0.0000000000000000 + -22.199999999999999 0.0000000000000000 + -22.140000000000001 0.0000000000000000 + -22.080000000000002 0.0000000000000000 + -22.020000000000000 0.0000000000000000 + -21.960000000000001 0.0000000000000000 + -21.900000000000002 0.0000000000000000 + -21.840000000000000 0.0000000000000000 + -21.780000000000001 0.0000000000000000 + -21.720000000000002 0.0000000000000000 + -21.660000000000000 0.0000000000000000 + -21.600000000000001 0.0000000000000000 + -21.540000000000003 0.0000000000000000 + -21.480000000000000 0.0000000000000000 + -21.420000000000002 0.0000000000000000 + -21.359999999999999 0.0000000000000000 + -21.300000000000001 0.0000000000000000 + -21.240000000000002 0.0000000000000000 + -21.180000000000000 0.0000000000000000 + -21.120000000000001 0.0000000000000000 + -21.060000000000002 0.0000000000000000 + -21.000000000000000 0.0000000000000000 + -20.940000000000001 0.0000000000000000 + -20.880000000000003 0.0000000000000000 + -20.820000000000000 0.0000000000000000 + -20.760000000000002 0.0000000000000000 + -20.699999999999999 0.0000000000000000 + -20.640000000000001 0.0000000000000000 + -20.580000000000002 0.0000000000000000 + -20.520000000000000 0.0000000000000000 + -20.460000000000001 0.0000000000000000 + -20.400000000000002 0.0000000000000000 + -20.340000000000000 0.0000000000000000 + -20.280000000000001 0.0000000000000000 + -20.220000000000002 0.0000000000000000 + -20.160000000000000 0.0000000000000000 + -20.100000000000001 0.0000000000000000 + -20.040000000000003 0.0000000000000000 + -19.980000000000000 0.0000000000000000 + -19.920000000000002 0.0000000000000000 + -19.859999999999999 0.0000000000000000 + -19.800000000000001 0.0000000000000000 + -19.740000000000002 0.0000000000000000 + -19.680000000000000 0.0000000000000000 + -19.620000000000001 0.0000000000000000 + -19.560000000000002 0.0000000000000000 + -19.500000000000000 0.0000000000000000 + -19.440000000000001 0.0000000000000000 + -19.380000000000003 0.0000000000000000 + -19.320000000000000 0.0000000000000000 + -19.260000000000002 0.0000000000000000 + -19.200000000000003 0.0000000000000000 + -19.140000000000001 0.0000000000000000 + -19.080000000000002 0.0000000000000000 + -19.020000000000000 0.0000000000000000 + -18.960000000000001 0.0000000000000000 + -18.900000000000002 0.0000000000000000 + -18.840000000000000 0.0000000000000000 + -18.780000000000001 0.0000000000000000 + -18.720000000000002 0.0000000000000000 + -18.660000000000000 0.0000000000000000 + -18.600000000000001 0.0000000000000000 + -18.540000000000003 0.0000000000000000 + -18.480000000000000 0.0000000000000000 + -18.420000000000002 0.0000000000000000 + -18.359999999999999 0.0000000000000000 + -18.300000000000001 0.0000000000000000 + -18.240000000000002 0.0000000000000000 + -18.180000000000000 0.0000000000000000 + -18.120000000000001 0.0000000000000000 + -18.060000000000002 0.0000000000000000 + -18.000000000000000 -6.9725324661856352E-042 + -17.940000000000001 -1.8747784136691519E-041 + -17.880000000000003 -3.6323508611036401E-041 + -17.820000000000000 -6.0817321513631915E-041 + -17.760000000000002 -8.5879017464412533E-041 + -17.700000000000003 -1.1219941371097092E-040 + -17.640000000000001 -1.4004017334760973E-040 + -17.580000000000002 -1.6970081715804012E-040 + -17.520000000000000 -2.0151063739235560E-040 + -17.460000000000001 -2.2817446950849153E-040 + -17.400000000000002 -2.4600889439045130E-040 + -17.340000000000000 -2.5890085307681133E-040 + -17.280000000000001 -2.6647114378368475E-040 + -17.220000000000002 -2.6867014964212001E-040 + -17.160000000000000 -2.5270127351805851E-040 + -17.100000000000001 -2.1392655806570985E-040 + -17.040000000000003 -1.5196003019768625E-040 + -16.980000000000000 -5.7506217427392974E-041 + -16.920000000000002 4.9014920111878777E-041 + -16.859999999999999 1.6575039374706603E-040 + -16.800000000000001 3.4317336517499882E-040 + -16.740000000000002 5.6250871980998259E-040 + -16.680000000000000 8.2528212199111092E-040 + -16.620000000000001 1.1323833793202360E-039 + -16.560000000000002 1.4964713459883731E-039 + -16.500000000000000 1.9143692723534327E-039 + -16.440000000000001 2.3418855140671270E-039 + -16.380000000000003 2.6353757618245855E-039 + -16.320000000000000 2.8365760832121341E-039 + -16.260000000000002 2.8039781630071801E-039 + -16.200000000000003 2.5359024336452897E-039 + -16.140000000000001 2.0047514486134100E-039 + -16.080000000000002 1.1798246159756321E-039 + -16.020000000000000 3.1554588440050686E-041 + -15.960000000000001 -1.2934374055775686E-039 + -15.899999999999999 -2.7790612992177203E-039 + -15.840000000000003 -4.4226758644861976E-039 + -15.780000000000001 -6.2071685144352837E-039 + -15.719999999999999 -8.0388116944738870E-039 + -15.660000000000004 -9.8737620964193889E-039 + -15.600000000000001 -1.1595688194795709E-038 + -15.539999999999999 -1.4425910825541963E-038 + -15.480000000000004 -1.8549935625951453E-038 + -15.420000000000002 -2.3597132655177723E-038 + -15.359999999999999 -2.9792284937211482E-038 + -15.300000000000004 -3.7242100215770614E-038 + -15.240000000000002 -4.6327864294242612E-038 + -15.180000000000000 -5.6433903025855629E-038 + -15.120000000000005 -6.7569875636323586E-038 + -15.060000000000002 -8.0175845043190344E-038 + -15.000000000000000 -9.1469269620026871E-038 + -14.939999999999998 -1.0109540764818529E-037 + -14.880000000000003 -1.0971625290417896E-037 + -14.820000000000000 -1.1837710330668345E-037 + -14.759999999999998 -1.2722008488207495E-037 + -14.700000000000003 -1.3669526668485240E-037 + -14.640000000000001 -1.4771609476733504E-037 + -14.579999999999998 -1.6024861143672125E-037 + -14.520000000000003 -1.7520043071698515E-037 + -14.460000000000001 -1.9510050148025590E-037 + -14.399999999999999 -2.2116198597885978E-037 + -14.340000000000003 -2.5451470831159657E-037 + -14.280000000000001 -2.9634684170983123E-037 + -14.219999999999999 -3.4769859383591946E-037 + -14.160000000000004 -4.1016549769743632E-037 + -14.100000000000001 -4.7975199376380936E-037 + -14.039999999999999 -5.5023982419725646E-037 + -13.980000000000004 -6.2184503730785291E-037 + -13.920000000000002 -6.9414163700563266E-037 + -13.859999999999999 -7.6740611372369046E-037 + -13.800000000000004 -8.3780344000176871E-037 + -13.740000000000002 -9.0487104471044591E-037 + -13.680000000000000 -9.4839539246355612E-037 + -13.620000000000005 -9.9689666918800893E-037 + -13.560000000000002 -1.0434116812882768E-036 + -13.500000000000000 -1.1125714979434910E-036 + -13.439999999999998 -1.2078233244053369E-036 + -13.380000000000003 -1.3236772929341292E-036 + -13.320000000000000 -1.4607742462865373E-036 + -13.259999999999998 -1.6119206481334546E-036 + -13.200000000000003 -1.7797115892054329E-036 + -13.140000000000001 -1.9579248298960865E-036 + -13.079999999999998 -2.1499652584698600E-036 + -13.020000000000003 -2.3723518440709335E-036 + -12.960000000000001 -2.6362587668856962E-036 + -12.899999999999999 -2.9534234549646099E-036 + -12.840000000000003 -3.3051515276780366E-036 + -12.780000000000001 -3.7405688965026735E-036 + -12.719999999999999 -4.2753617976912543E-036 + -12.660000000000004 -4.8673426091263623E-036 + -12.600000000000001 -5.5327744564008426E-036 + -12.539999999999999 -6.2606495698463711E-036 + -12.480000000000004 -7.0093308740481592E-036 + -12.420000000000002 -7.8010525400499188E-036 + -12.359999999999999 -8.6270446491555643E-036 + -12.300000000000004 -9.4666584392155469E-036 + -12.240000000000002 -1.0292123215544382E-035 + -12.180000000000000 -1.1072866779305415E-035 + -12.120000000000005 -1.1751949619645122E-035 + -12.060000000000002 -1.2148210357253628E-035 + -12.000000000000000 -1.2178526679846659E-035 + -11.940000000000005 -1.1784041948560586E-035 + -11.880000000000003 -1.0960252057485255E-035 + -11.820000000000000 -9.6274798506685171E-036 + -11.759999999999998 -7.8624514149045030E-036 + -11.700000000000003 -5.7935678671176900E-036 + -11.640000000000001 -3.5871056342194050E-036 + -11.579999999999998 -1.5184293512490425E-036 + -11.520000000000003 6.5374456572106327E-038 + -11.460000000000001 8.5716399001564312E-037 + -11.399999999999999 4.9383531886224469E-037 + -11.340000000000003 -1.3834556288777505E-036 + -11.280000000000001 -5.1061262205642739E-036 + -11.219999999999999 -1.1031500984694666E-035 + -11.160000000000004 -1.9336488426974165E-035 + -11.100000000000001 -3.0130756907086802E-035 + -11.039999999999999 -4.2943470064740507E-035 + -10.980000000000004 -5.7114249105296638E-035 + -10.920000000000002 -7.1582331253824868E-035 + -10.859999999999999 -8.4895411576914717E-035 + -10.800000000000004 -9.5263454597166830E-035 + -10.740000000000002 -1.0056769760981038E-034 + -10.680000000000000 -9.8473137709096577E-035 + -10.620000000000005 -8.6599684463242415E-035 + -10.560000000000002 -6.2762558495934821E-035 + -10.500000000000000 -2.5276808922145671E-035 + -10.440000000000005 2.6710349573141617E-035 + -10.380000000000003 9.2736600579937163E-035 + -10.320000000000000 1.7068757138117970E-034 + -10.259999999999998 2.5634278807900417E-034 + -10.200000000000003 3.4304127288424615E-034 + -10.140000000000001 4.2153623915427296E-034 + -10.079999999999998 4.8000941816995805E-034 + -10.020000000000003 5.0440677169997523E-034 + -9.9600000000000009 4.7911442321990332E-034 + -9.8999999999999986 3.8806445285734016E-034 + -9.8400000000000034 2.1628654354270954E-034 + -9.7800000000000011 -4.8088975445072683E-035 + -9.7199999999999989 -4.1145065698061918E-034 + -9.6600000000000037 -8.7211894746613294E-034 + -9.6000000000000014 -1.4176204939284673E-033 + -9.5399999999999991 -2.0222116610678512E-033 + -9.4800000000000040 -2.6449480464772948E-033 + -9.4200000000000017 -3.2286985405911210E-033 + -9.3599999999999994 -3.7005694597897360E-033 + -9.3000000000000043 -3.9741284877929810E-033 + -9.2400000000000020 -3.9538327850607876E-033 + -9.1799999999999997 -3.5419132443727209E-033 + -9.1200000000000045 -2.6478038330565233E-033 + -9.0600000000000023 -1.2000061804231845E-033 + -9.0000000000000000 8.4012577491633537E-034 + -8.9400000000000048 3.4634449772442465E-033 + -8.8800000000000026 6.5981138606286767E-033 + -8.8200000000000003 1.0096299971743152E-032 + -8.7599999999999980 1.3724336289932879E-032 + -8.7000000000000028 1.7158445855159857E-032 + -8.6400000000000006 1.9988231835839675E-032 + -8.5799999999999983 2.1729963141783179E-032 + -8.5200000000000031 2.1851383622849639E-032 + -8.4600000000000009 1.9809059284601601E-032 + -8.3999999999999986 1.5098414985265847E-032 + -8.3400000000000034 7.3153076920118875E-033 + -8.2800000000000011 -3.7733946339268710E-033 + -8.2199999999999989 -1.8154482737628789E-032 + -8.1600000000000037 -3.5494163664897198E-032 + -8.1000000000000014 -5.5072448015407812E-032 + -8.0399999999999991 -7.5734909535855400E-032 + -7.9800000000000040 -9.5871447120941910E-032 + -7.9200000000000017 -1.1343184224861109E-031 + -7.8599999999999994 -1.2598716256876549E-031 + -7.8000000000000043 -1.3084428845258977E-031 + -7.7400000000000020 -1.2521786411012683E-031 + -7.6799999999999997 -1.0646008065299138E-031 + -7.6200000000000045 -7.2343110178384583E-032 + -7.5600000000000023 -2.1383325134207391E-032 + -7.5000000000000000 4.6810631331770745E-032 + -7.4400000000000048 1.3119056944609258E-031 + -7.3800000000000026 2.2895338334393531E-031 + -7.3200000000000003 3.3529392911249130E-031 + -7.2599999999999980 4.4326634911883036E-031 + -7.2000000000000028 5.4379403396758986E-031 + -7.1400000000000006 6.2586746842447341E-031 + -7.0799999999999983 6.7696127795043651E-031 + -7.0200000000000031 6.8369226356646847E-031 + -6.9600000000000009 6.3272533580814957E-031 + -6.8999999999999986 5.1191453721692662E-031 + -6.8400000000000034 3.1164391959704897E-031 + -6.7800000000000011 2.6308906260559199E-032 + -6.7199999999999989 -3.4414855540655806E-031 + -6.6600000000000037 -7.9276255733724139E-031 + -6.6000000000000014 -1.3042560030446727E-030 + -6.5399999999999991 -1.8540942687566373E-030 + -6.4800000000000040 -2.4080396512662633E-030 + -6.4200000000000017 -2.9223614448648701E-030 + -6.3599999999999994 -3.3448487917140881E-030 + -6.3000000000000043 -3.6167384628860453E-030 + -6.2400000000000020 -3.6756345450551371E-030 + -6.1799999999999997 -3.4594370150357253E-030 + -6.1200000000000045 -2.9112221752124066E-030 + -6.0600000000000023 -1.9849461570068138E-030 + -6.0000000000000000 -6.5174095808250975E-031 + -5.9400000000000048 1.0935086616854582E-030 + -5.8800000000000026 3.2257195245700628E-030 + -5.8200000000000003 5.6837883638333671E-030 + -5.7600000000000051 8.3659493842057930E-030 + -5.7000000000000028 1.1126921534948954E-029 + -5.6400000000000006 1.3777474562746220E-029 + -5.5799999999999983 1.6087009379335553E-029 + -5.5200000000000031 1.7789720456577632E-029 + -5.4600000000000009 1.8594766008084739E-029 + -5.3999999999999986 1.8200750433909158E-029 + -5.3400000000000034 1.6314594655242007E-029 + -5.2800000000000011 1.2674626241631005E-029 + -5.2199999999999989 7.0773929925163757E-030 + -5.1600000000000037 -5.9261177421554108E-031 + -5.1000000000000014 -1.0331579373157107E-029 + -5.0399999999999991 -2.1984972544506269E-029 + -4.9800000000000040 -3.5218162917288533E-029 + -4.9200000000000017 -4.9491607034577950E-029 + -4.8599999999999994 -6.4043357941824073E-029 + -4.8000000000000043 -7.7882114961262491E-029 + -4.7400000000000020 -8.9794043280334150E-029 + -4.6799999999999997 -9.8366750650911032E-029 + -4.6200000000000045 -1.0203342349681234E-028 + -4.5600000000000023 -9.9139821467541879E-029 + -4.5000000000000000 -8.8035814011635821E-029 + -4.4400000000000048 -6.7192103589516956E-029 + -4.3800000000000026 -3.5341076335417106E-029 + -4.3200000000000003 8.3613139675833687E-030 + -4.2600000000000051 6.4158008997449065E-029 + -4.2000000000000028 1.3150621758014011E-028 + -4.1400000000000006 2.0889668777484673E-028 + -4.0799999999999983 2.9369167690750360E-028 + -4.0200000000000031 3.8199869428841907E-028 + -3.9600000000000009 4.6860026681127411E-028 + -3.8999999999999986 5.4696110518810017E-028 + -3.8400000000000034 6.0933542522313099E-028 + -3.7800000000000011 6.4699499056292610E-028 + -3.7199999999999989 6.5059676322193349E-028 + -3.6600000000000037 6.1070263897989240E-028 + -3.6000000000000014 5.1845625929578396E-028 + -3.5399999999999991 3.6641041777624516E-028 + -3.4800000000000040 1.4948606632466653E-028 + -3.4200000000000017 -1.3397333523111821E-028 + -3.3599999999999994 -4.8110555695903370E-028 + -3.3000000000000043 -8.8346411836676031E-028 + -3.2400000000000020 -1.3260740239129720E-027 + -3.1799999999999997 -1.7867160297229210E-027 + -3.1200000000000045 -2.2355596339893090E-027 + -3.0600000000000023 -2.6352699338984965E-027 + -3.0000000000000000 -2.9417125795978292E-027 + -2.9400000000000048 -3.1053679354776458E-027 + -2.8800000000000026 -3.0735406825728054E-027 + -2.8200000000000003 -2.7934107515740436E-027 + -2.7600000000000051 -2.2159185659453739E-027 + -2.7000000000000028 -1.3004094722804165E-027 + -2.6400000000000006 -1.9884022312648553E-029 + -2.5799999999999983 1.6333966213030092E-027 + -2.5200000000000031 3.6422868816381582E-027 + -2.4600000000000009 5.9595508762007961E-027 + -2.3999999999999986 8.5035882639030563E-027 + -2.3400000000000034 1.1155675308047904E-026 + -2.2800000000000011 1.3759339652177753E-026 + -2.2199999999999989 1.6122469734588306E-026 + -2.1600000000000037 1.8022728101593032E-026 + -2.1000000000000014 1.9216697740388146E-026 + -2.0399999999999991 1.9453029989804859E-026 + -1.9800000000000040 1.8489611049584274E-026 + -1.9200000000000017 1.6114441703060109E-026 + -1.8599999999999994 1.2169574310465722E-026 + -1.8000000000000043 6.5770347816860928E-027 + -1.7400000000000020 -6.3478780435595751E-028 + -1.6799999999999997 -9.3062034373722586E-027 + -1.6200000000000045 -1.9125041871780269E-026 + -1.5600000000000023 -2.9611824826474605E-026 + -1.5000000000000000 -4.0114006562996337E-026 + -1.4400000000000048 -4.9812040442147757E-026 + -1.3800000000000026 -5.7739716661780682E-026 + -1.3200000000000003 -6.2820722770475919E-026 + -1.2600000000000051 -6.3922613085441086E-026 + -1.2000000000000028 -5.9928282002918086E-026 + -1.1400000000000006 -4.9823625638131479E-026 + -1.0799999999999983 -3.2798590581017208E-026 + -1.0200000000000031 -8.3568869947143625E-027 + -0.96000000000000085 2.3572072462717284E-026 + -0.89999999999999858 6.2527196905304350E-026 + -0.84000000000000341 1.0742555402653033E-025 + -0.78000000000000114 1.5649907105094730E-025 + -0.71999999999999886 2.0726931861570740E-025 + -0.66000000000000369 2.5657200304053408E-025 + -0.60000000000000142 3.0064099977789883E-025 + -0.53999999999999915 3.3525997491216605E-025 + -0.48000000000000398 3.5598569395782395E-025 + -0.42000000000000171 3.5844294677258965E-025 + -0.35999999999999943 3.3868509235376336E-025 + -0.30000000000000426 2.9360709908166979E-025 + -0.24000000000000199 2.2139110046561499E-025 + -0.17999999999999972 1.2195708092915033E-025 + -0.12000000000000455 -2.6161660137231650E-027 + -6.0000000000002274E-002 -1.4774110038243653E-025 + 0.0000000000000000 -3.0608699418155126E-025 + 5.9999999999995168E-002 -4.6750879183771792E-025 + 0.11999999999999744 -6.1918434547650827E-025 + 0.17999999999999972 -7.4600076961273505E-025 + 0.23999999999999488 -8.3121994270501082E-025 + 0.29999999999999716 -8.5743909201910803E-025 + 0.35999999999999943 -8.0784330078038567E-025 + 0.42000000000000171 -6.6772127902150013E-025 + 0.47999999999999687 -4.2619212072047643E-025 + 0.53999999999999915 -7.8057775575456307E-026 + 0.60000000000000142 3.7433402154005038E-025 + 0.65999999999999659 9.1935664776408709E-025 + 0.71999999999999886 1.5346688596353239E-024 + 0.78000000000000114 2.1862601140032686E-024 + 0.83999999999999631 2.8281664127195810E-024 + 0.89999999999999858 3.4030416897564030E-024 + 0.96000000000000085 3.8437472376444400E-024 + 1.0199999999999960 4.0760812066398697E-024 + 1.0799999999999983 4.0227152965680486E-024 + 1.1400000000000006 3.6083265974734737E-024 + 1.1999999999999957 2.7658185274146276E-024 + 1.2599999999999980 1.4434228673472634E-024 + 1.3200000000000003 -3.8765259557650398E-025 + 1.3799999999999955 -2.7254780988427472E-024 + 1.4399999999999977 -5.5301146062952290E-024 + 1.5000000000000000 -8.7174636507548526E-024 + 1.5599999999999952 -1.2154980911723151E-023 + 1.6199999999999974 -1.5660027911304866E-023 + 1.6799999999999997 -1.9001624061951243E-023 + 1.7399999999999949 -2.1906297139791809E-023 + 1.7999999999999972 -2.4068586517148837E-023 + 1.8599999999999994 -2.5166546457401367E-023 + 1.9200000000000017 -2.4882327283740021E-023 + 1.9799999999999969 -2.2927557879398214E-023 + 2.0399999999999991 -1.9072847660543509E-023 + 2.1000000000000014 -1.3180289560286456E-023 + 2.1599999999999966 -5.2373746403535042E-024 + 2.2199999999999989 4.6097414734046614E-024 + 2.2800000000000011 1.6026071323981098E-023 + 2.3399999999999963 2.8463542195641549E-023 + 2.3999999999999986 4.1145612321388870E-023 + 2.4600000000000009 5.3063881411725457E-023 + 2.5199999999999960 6.2989498690941980E-023 + 2.5799999999999983 6.9501889201016067E-023 + 2.6400000000000006 7.1036676021752090E-023 + 2.6999999999999957 6.5953731511033492E-023 + 2.7599999999999980 5.2624917842305995E-023 + 2.8200000000000003 2.9540049417463026E-023 + 2.8799999999999955 -4.5723629205677444E-024 + 2.9399999999999977 -5.0614721127140654E-023 + 3.0000000000000000 -1.0898678149709177E-022 + 3.0599999999999952 -1.7945786186689359E-022 + 3.1199999999999974 -2.6105434593964610E-022 + 3.1799999999999997 -3.5197385756880962E-022 + 3.2399999999999949 -4.4953751552272001E-022 + 3.2999999999999972 -5.5019198191479480E-022 + 3.3599999999999994 -6.4957191334037201E-022 + 3.4199999999999946 -7.4263177631156659E-022 + 3.4799999999999969 -8.2385375770783137E-022 + 3.5399999999999991 -8.8753388400049295E-022 + 3.6000000000000014 -9.2814447773034427E-022 + 3.6599999999999966 -9.4076626412763269E-022 + 3.7199999999999989 -9.2157698080102492E-022 + 3.7800000000000011 -8.6837541397228649E-022 + 3.8399999999999963 -7.8111784569751798E-022 + 3.8999999999999986 -6.6243216645147319E-022 + 3.9600000000000009 -5.1807588522953168E-022 + 4.0199999999999960 -3.5729552266869637E-022 + 4.0799999999999983 -1.9304612988096636E-022 + 4.1400000000000006 -4.2031804135583243E-023 + 4.1999999999999957 7.5475094308195655E-023 + 4.2599999999999980 1.3606277131201826E-022 + 4.3200000000000003 1.1388235619782739E-022 + 4.3799999999999955 -1.8370949521386483E-023 + 4.4399999999999977 -2.8820120330099958E-022 + 4.5000000000000000 -7.2181012771904475E-022 + 4.5599999999999952 -1.3423927217732842E-021 + 4.6199999999999974 -2.1682962748115746E-021 + 4.6799999999999997 -3.2111407988574542E-021 + 4.7399999999999949 -4.4739952272836107E-021 + 4.7999999999999972 -5.9497424362085857E-021 + 4.8599999999999994 -7.6197672874244525E-021 + 4.9199999999999946 -9.4531094758508636E-021 + 4.9799999999999969 -1.1406206127164183E-020 + 5.0399999999999991 -1.3423377570384387E-020 + 5.1000000000000014 -1.5438132556983160E-020 + 5.1599999999999966 -1.7375382925172982E-020 + 5.2199999999999989 -1.9154583775698398E-020 + 5.2800000000000011 -2.0693803561749791E-020 + 5.3399999999999963 -2.1914615523439335E-020 + 5.3999999999999986 -2.2747665263981859E-020 + 5.4600000000000009 -2.3138738300028974E-020 + 5.5199999999999960 -2.3054998806085147E-020 + 5.5799999999999983 -2.2491080181952579E-020 + 5.6400000000000006 -2.1474654047729841E-020 + 5.6999999999999957 -2.0071010424797706E-020 + 5.7599999999999980 -1.8386242033776710E-020 + 5.8200000000000003 -1.6568565938964719E-020 + 5.8799999999999955 -1.4807383740618874E-020 + 5.9399999999999977 -1.3329720137111630E-020 + 6.0000000000000000 -1.2393847576368014E-020 + 6.0599999999999952 -1.2279930331442566E-020 + 6.1199999999999974 -1.3277653046850828E-020 + 6.1799999999999997 -1.5671132551728500E-020 + 6.2399999999999949 -1.9721425008974790E-020 + 6.2999999999999972 -2.5647179369892577E-020 + 6.3599999999999994 -3.3604259937379380E-020 + 6.4199999999999946 -4.3665132851069319E-020 + 6.4799999999999969 -5.5799297452286805E-020 + 6.5399999999999991 -6.9855528425366605E-020 + 6.6000000000000014 -8.5547589757688932E-020 + 6.6599999999999966 -1.0244417437658035E-019 + 6.7199999999999989 -1.1996434880286317E-019 + 6.7800000000000011 -1.3737922212271902E-019 + 6.8399999999999963 -1.5382055702158409E-019 + 6.8999999999999986 -1.6829642725838186E-019 + 6.9600000000000009 -1.7971367220536612E-019 + 7.0199999999999960 -1.8690675598733503E-019 + 7.0799999999999983 -1.8867146436077183E-019 + 7.1400000000000006 -1.8380205915011222E-019 + 7.1999999999999957 -1.7112895000052879E-019 + 7.2599999999999980 -1.4955525632971609E-019 + 7.3200000000000003 -1.1808794341649681E-019 + 7.3799999999999955 -7.5860811155862950E-020 + 7.4399999999999977 -2.2145869398077132E-020 + 7.5000000000000000 4.3650531110871553E-020 + 7.5599999999999952 1.2201093678743114E-019 + 7.6199999999999974 2.1335033243959553E-019 + 7.6799999999999997 3.1808322326395519E-019 + 7.7399999999999949 4.3671600481041683E-019 + 7.7999999999999972 5.6996354795598828E-019 + 7.8599999999999994 7.1889156379448903E-019 + 7.9199999999999946 8.8507734859771844E-019 + 7.9799999999999969 1.0707919086506897E-018 + 8.0399999999999991 1.2791949676430772E-018 + 8.1000000000000014 1.5145374714733010E-018 + 8.1599999999999966 1.7823656186179811E-018 + 8.2199999999999989 2.0897215112418973E-018 + 8.2800000000000011 2.4453281413638517E-018 + 8.3399999999999963 2.8597566299867459E-018 + 8.3999999999999986 3.3455740180290879E-018 + 8.4600000000000009 3.9174475136577087E-018 + 8.5199999999999960 4.5922393199466554E-018 + 8.5799999999999983 5.3890437976947855E-018 + 8.6400000000000006 6.3292214521138401E-018 + 8.6999999999999957 7.4363954141555383E-018 + 8.7599999999999980 8.7364414530521833E-018 + 8.8200000000000003 1.0257474448027128E-017 + 8.8799999999999955 1.2029857662518364E-017 + 8.9399999999999977 1.4086255121965779E-017 + 9.0000000000000000 1.6461728920020788E-017 + 9.0599999999999952 1.9193941696418564E-017 + 9.1199999999999974 2.2323436052990807E-017 + 9.1799999999999997 2.5894081700157767E-017 + 9.2399999999999949 2.9953648918598435E-017 + 9.2999999999999972 3.4554578396947567E-017 + 9.3599999999999994 3.9754947916349910E-017 + 9.4199999999999946 4.5619577470634546E-017 + 9.4799999999999969 5.2221422693457559E-017 + 9.5399999999999991 5.9643107227929345E-017 + 9.5999999999999943 6.7978673786777092E-017 + 9.6599999999999966 7.7335466008902912E-017 + 9.7199999999999989 8.7836188762359500E-017 + 9.7800000000000011 9.9621029977011969E-017 + 9.8399999999999963 1.1284985704756572E-016 + 9.8999999999999986 1.2770447752449173E-016 + 9.9600000000000009 1.4439078863114989E-016 + 10.019999999999996 1.6314092519784455E-016 + 10.079999999999998 1.8421526633893460E-016 + 10.140000000000001 2.0790428929442664E-016 + 10.199999999999996 2.3453034823734008E-016 + 10.259999999999998 2.6444918178822292E-016 + 10.320000000000000 2.9805125139974833E-016 + 10.379999999999995 3.3576304514486306E-016 + 10.439999999999998 3.7804815478368836E-016 + 10.500000000000000 4.2540815415016669E-016 + 10.559999999999995 4.7838406895701924E-016 + 10.619999999999997 5.3755724728171213E-016 + 10.680000000000000 6.0355105036072176E-016 + 10.739999999999995 6.7703239639330491E-016 + 10.799999999999997 7.5871339285959400E-016 + 10.859999999999999 8.4935408695316235E-016 + 10.919999999999995 9.4976570270374821E-016 + 10.979999999999997 1.0608137696421323E-015 + 11.039999999999999 1.1834217128917500E-015 + 11.099999999999994 1.3185753853470034E-015 + 11.159999999999997 1.4673277412591973E-015 + 11.219999999999999 1.6308030142826419E-015 + 11.280000000000001 1.8102009076766614E-015 + 11.339999999999996 2.0068001389503994E-015 + 11.399999999999999 2.2219622787902608E-015 + 11.460000000000001 2.4571303925540386E-015 + 11.519999999999996 2.7138286915125820E-015 + 11.579999999999998 2.9936583929569671E-015 + 11.640000000000001 3.2982882695259590E-015 + 11.699999999999996 3.6294417783248410E-015 + 11.759999999999998 3.9888794498290873E-015 + 11.820000000000000 4.3783707303186573E-015 + 11.879999999999995 4.7996628473526986E-015 + 11.939999999999998 5.2544372011387057E-015 + 12.000000000000000 5.7442543689382471E-015 + 12.059999999999995 6.2704923336927070E-015 + 12.119999999999997 6.8342661718279954E-015 + 12.180000000000000 7.4363374860542023E-015 + 12.239999999999995 8.0770050427057045E-015 + 12.299999999999997 8.7559739689993783E-015 + 12.359999999999999 9.4722145745040220E-015 + 12.419999999999995 1.0223789208360318E-014 + 12.479999999999997 1.1007661159308257E-014 + 12.539999999999999 1.1819472546734129E-014 + 12.599999999999994 1.2653294479210849E-014 + 12.659999999999997 1.3501334984509390E-014 + 12.719999999999999 1.4353620286271001E-014 + 12.780000000000001 1.5197628529722138E-014 + 12.839999999999996 1.6017859385864690E-014 + 12.899999999999999 1.6795368861895465E-014 + 12.960000000000001 1.7507235703270568E-014 + 13.019999999999996 1.8125937032492436E-014 + 13.079999999999998 1.8618663546622501E-014 + 13.140000000000001 1.8946544261099768E-014 + 13.199999999999996 1.9063729544342923E-014 + 13.259999999999998 1.8916402108528837E-014 + 13.320000000000000 1.8441601438562983E-014 + 13.379999999999995 1.7565932816567914E-014 + 13.439999999999998 1.6204067788152157E-014 + 13.500000000000000 1.4257086403254169E-014 + 13.559999999999995 1.1610542314796365E-014 + 13.619999999999997 8.1323070524319686E-015 + 13.680000000000000 3.6701299852975547E-015 + 13.739999999999995 -1.9511528141208122E-015 + 13.799999999999997 -8.9326751914617110E-015 + 13.859999999999999 -1.7505117404815221E-014 + 13.919999999999995 -2.7932654551898511E-014 + 13.979999999999997 -4.0517461159745958E-014 + 14.039999999999999 -5.5604595702177332E-014 + 14.099999999999994 -7.3587719779675717E-014 + 14.159999999999997 -9.4915389575505236E-014 + 14.219999999999999 -1.2009806015448389E-013 + 14.280000000000001 -1.4971593857878616E-013 + 14.339999999999996 -1.8442771890603906E-013 + 14.399999999999999 -2.2498041913441402E-013 + 14.460000000000001 -2.7222038165235061E-013 + 14.519999999999996 -3.2710513606845937E-013 + 14.579999999999998 -3.9071684834024658E-013 + 14.640000000000001 -4.6427739029854217E-013 + 14.699999999999996 -5.4916493488194355E-013 + 14.759999999999998 -6.4693164103099421E-013 + 14.820000000000000 -7.5932438605565101E-013 + 14.879999999999995 -8.8830713270306870E-013 + 14.939999999999998 -1.0360846899617192E-012 + 15.000000000000000 -1.2051307839123789E-012 + 15.059999999999995 -1.3982173072880112E-012 + 15.119999999999997 -1.6184468104442621E-012 + 15.180000000000000 -1.8692894563773748E-012 + 15.239999999999995 -2.1546207876698948E-012 + 15.299999999999997 -2.4787674854270899E-012 + 15.359999999999999 -2.8465519353174348E-012 + 15.419999999999995 -3.2633458991767064E-012 + 15.479999999999997 -3.7351257544725999E-012 + 15.539999999999999 -4.2685350824993845E-012 + 15.599999999999994 -4.8709509328277908E-012 + 15.659999999999997 -5.5505557539550192E-012 + 15.719999999999999 -6.3164190192511801E-012 + 15.780000000000001 -7.1785798413919738E-012 + 15.839999999999996 -8.1481427448668883E-012 + 15.899999999999999 -9.2373757249996477E-012 + 15.960000000000001 -1.0459819364491785E-011 + 16.019999999999996 -1.1830402866358420E-011 + 16.079999999999998 -1.3365569332790738E-011 + 16.140000000000001 -1.5083409699897654E-011 + 16.200000000000003 -1.7003805631770578E-011 + 16.259999999999991 -1.9148585416018431E-011 + 16.319999999999993 -2.1541686204271388E-011 + 16.379999999999995 -2.4209329313252897E-011 + 16.439999999999998 -2.7180202974406668E-011 + 16.500000000000000 -3.0485660293631900E-011 + 16.560000000000002 -3.4159917416530790E-011 + 16.620000000000005 -3.8240278486131061E-011 + 16.679999999999993 -4.2767359081991621E-011 + 16.739999999999995 -4.7785312813897254E-011 + 16.799999999999997 -5.3342097086539929E-011 + 16.859999999999999 -5.9489697127087234E-011 + 16.920000000000002 -6.6284405853106708E-011 + 16.980000000000004 -7.3787083969487331E-011 + 17.039999999999992 -8.2063406622773349E-011 + 17.099999999999994 -9.1184142817469075E-011 + 17.159999999999997 -1.0122541392690148E-010 + 17.219999999999999 -1.1226895592473957E-010 + 17.280000000000001 -1.2440234105964037E-010 + 17.340000000000003 -1.3771922606356560E-010 + 17.399999999999991 -1.5231949267216483E-010 + 17.459999999999994 -1.6830948642598795E-010 + 17.519999999999996 -1.8580209096352632E-010 + 17.579999999999998 -2.0491681042657803E-010 + 17.640000000000001 -2.2577972903109275E-010 + 17.700000000000003 -2.4852351835036436E-010 + 17.759999999999991 -2.7328712742893073E-010 + 17.819999999999993 -3.0021562337114533E-010 + 17.879999999999995 -3.2945967379369167E-010 + 17.939999999999998 -3.6117490601115741E-010 + 18.000000000000000 -3.9552120088085105E-010 + 18.060000000000002 -4.3266156830129522E-010 + 18.120000000000005 -4.7276092956059963E-010 + 18.179999999999993 -5.1598439261036904E-010 + 18.239999999999995 -5.6249543148220714E-010 + 18.299999999999997 -6.1245332747965547E-010 + 18.359999999999999 -6.6601043012224169E-010 + 18.420000000000002 -7.2330860702486829E-010 + 18.480000000000004 -7.8447538923186272E-010 + 18.539999999999992 -8.4961895916340372E-010 + 18.599999999999994 -9.1882262620027634E-010 + 18.659999999999997 -9.9213845158377043E-010 + 18.719999999999999 -1.0695793435193875E-009 + 18.780000000000001 -1.1511105352537031E-009 + 18.840000000000003 -1.2366391470107586E-009 + 18.899999999999991 -1.3260027110349885E-009 + 18.959999999999994 -1.4189555823117764E-009 + 19.019999999999996 -1.5151535427065312E-009 + 19.079999999999998 -1.6141359057472996E-009 + 19.140000000000001 -1.7153061682719625E-009 + 19.200000000000003 -1.8179077429573488E-009 + 19.259999999999991 -1.9209993946532035E-009 + 19.319999999999993 -2.0234247931261604E-009 + 19.379999999999995 -2.1237791440718749E-009 + 19.439999999999998 -2.2203717909054565E-009 + 19.500000000000000 -2.3111827881160888E-009 + 19.560000000000002 -2.3938151194545270E-009 + 19.620000000000005 -2.4654414448512442E-009 + 19.679999999999993 -2.5227410732879779E-009 + 19.739999999999995 -2.5618332724606972E-009 + 19.799999999999997 -2.5782001945335932E-009 + 19.859999999999999 -2.5665997777492470E-009 + 19.920000000000002 -2.5209708756731477E-009 + 19.980000000000004 -2.4343259282487644E-009 + 20.039999999999992 -2.2986305676223709E-009 + 20.099999999999994 -2.1046677051038827E-009 + 20.159999999999997 -1.8418932209398749E-009 + 20.219999999999999 -1.4982654372921353E-009 + 20.280000000000001 -1.0600633716833106E-009 + 20.340000000000003 -5.1168182295183483E-010 + 20.399999999999991 1.6459986276174402E-010 + 20.459999999999994 9.8886141813117251E-010 + 20.519999999999996 1.9838262073748584E-009 + 20.579999999999998 3.1751693621012546E-009 + 20.640000000000001 4.5918596559399515E-009 + 20.700000000000003 6.2665366182773318E-009 + 20.759999999999991 8.2359287385378936E-009 + 20.819999999999993 1.0541299384828604E-008 + 20.879999999999995 1.3228974553203675E-008 + 20.939999999999998 1.6350887090312760E-008 + 21.000000000000000 1.9965185195852089E-008 + 21.060000000000002 2.4136916021997233E-008 + 21.120000000000005 2.8938766731286269E-008 + 21.179999999999993 3.4451874166578508E-008 + 21.239999999999995 4.0766709689602828E-008 + 21.299999999999997 4.7984069051730513E-008 + 21.359999999999999 5.6216130932539653E-008 + 21.420000000000002 6.5587655695394843E-008 + 21.480000000000004 7.6237228231147221E-008 + 21.539999999999992 8.8318695856866090E-008 + 21.599999999999994 1.0200268127748239E-007 + 21.659999999999997 1.1747826224597170E-007 + 21.719999999999999 1.3495476956066801E-007 + 21.780000000000001 1.5466381292465928E-007 + 21.840000000000003 1.7686141018722619E-007 + 21.899999999999991 2.0183040425057742E-007 + 21.959999999999994 2.2988296642756863E-007 + 22.019999999999996 2.6136341441725944E-007 + 22.079999999999998 2.9665120425204659E-007 + 22.140000000000001 3.3616426106559700E-007 + 22.200000000000003 3.8036253632667815E-007 + 22.259999999999991 4.2975180327637803E-007 + 22.319999999999993 4.8488803956146249E-007 + 22.379999999999995 5.4638175384011984E-007 + 22.439999999999998 6.1490293697763599E-007 + 22.500000000000000 6.9118649572162641E-007 + 22.560000000000002 7.7603783703148548E-007 + 22.619999999999990 8.7033894531028255E-007 + 22.679999999999993 9.7505552113395879E-007 + 22.739999999999995 1.0912436118925219E-006 + 22.799999999999997 1.2200577411890066E-006 + 22.859999999999999 1.3627588720142818E-006 + 22.920000000000002 1.5207240413752692E-006 + 22.980000000000004 1.6954552345932474E-006 + 23.039999999999992 1.8885901844270492E-006 + 23.099999999999994 2.1019134356925886E-006 + 23.159999999999997 2.3373682432558407E-006 + 23.219999999999999 2.5970690803194442E-006 + 23.280000000000001 2.8833159267866234E-006 + 23.340000000000003 3.1986082194617278E-006 + 23.399999999999991 3.5456609686266118E-006 + 23.459999999999994 3.9274212064151748E-006 + 23.519999999999996 4.3470859700133145E-006 + 23.579999999999998 4.8081210624600458E-006 + 23.640000000000001 5.3142815908732855E-006 + 23.700000000000003 5.8696332160330689E-006 + 23.759999999999991 6.4785760305648284E-006 + 23.819999999999993 7.1458680101168493E-006 + 23.879999999999995 7.8766500085544282E-006 + 23.939999999999998 8.6764761472831257E-006 + 24.000000000000000 9.5513393042269970E-006 + 24.060000000000002 1.0507705626614559E-005 + 24.119999999999990 1.1552542294079787E-005 + 24.179999999999993 1.2693357480649303E-005 + 24.239999999999995 1.3938232902045710E-005 + 24.299999999999997 1.5295865471545998E-005 + 24.359999999999999 1.6775602427893982E-005 + 24.420000000000002 1.8387491516597024E-005 + 24.480000000000004 2.0142315552938737E-005 + 24.539999999999992 2.2051648992417925E-005 + 24.599999999999994 2.4127902071072063E-005 + 24.659999999999997 2.6384375866952061E-005 + 24.719999999999999 2.8835311032188395E-005 + 24.780000000000001 3.1495952074814788E-005 + 24.840000000000003 3.4382600538068063E-005 + 24.899999999999991 3.7512672882480532E-005 + 24.959999999999994 4.0904773853750279E-005 + 25.019999999999996 4.4578758595245803E-005 + 25.079999999999998 4.8555808183648482E-005 + 25.140000000000001 5.2858487922288165E-005 + 25.200000000000003 5.7510833264451420E-005 + 25.259999999999991 6.2538421503985066E-005 + 25.319999999999993 6.7968458366906358E-005 + 25.379999999999995 7.3829851824839764E-005 + 25.439999999999998 8.0153303385975227E-005 + 25.500000000000000 8.6971392817255996E-005 + 25.560000000000002 9.4318656264068859E-005 + 25.619999999999990 1.0223168997176991E-004 + 25.679999999999993 1.1074926115034030E-004 + 25.739999999999995 1.1991236352693299E-004 + 25.799999999999997 1.2976433327215739E-004 + 25.859999999999999 1.4035098458403859E-004 + 25.920000000000002 1.5172061657005997E-004 + 25.980000000000004 1.6392422526736636E-004 + 26.039999999999992 1.7701553649450357E-004 + 26.099999999999994 1.9105111100394936E-004 + 26.159999999999997 2.0609047010577888E-004 + 26.219999999999999 2.2219618463733328E-004 + 26.280000000000001 2.3943399152445097E-004 + 26.340000000000003 2.5787288938199912E-004 + 26.399999999999991 2.7758524689312287E-004 + 26.459999999999994 2.9864683222637892E-004 + 26.519999999999996 3.2113703803370735E-004 + 26.579999999999998 3.4513886713917339E-004 + 26.640000000000001 3.7073904622592205E-004 + 26.700000000000003 3.9802820075839562E-004 + 26.759999999999991 4.2710079099327086E-004 + 26.819999999999993 4.5805525969476484E-004 + 26.879999999999995 4.9099415116421322E-004 + 26.939999999999998 5.2602415663220616E-004 + 27.000000000000000 5.6325608580586788E-004 + 27.060000000000002 6.0280503219673702E-004 + 27.119999999999990 6.4479034266579430E-004 + 27.179999999999993 6.8933565059600015E-004 + 27.239999999999995 7.3656905981500230E-004 + 27.299999999999997 7.8662288099150247E-004 + 27.359999999999999 8.3963375726478213E-004 + 27.420000000000002 8.9574276773768402E-004 + 27.480000000000004 9.5509534322776879E-004 + 27.539999999999992 1.0178410059254633E-003 + 27.599999999999994 1.0841337108322569E-003 + 27.659999999999997 1.1541314519446860E-003 + 27.719999999999999 1.2279962675269796E-003 + 27.780000000000001 1.3058941949316452E-003 + 27.840000000000003 1.3879950872791177E-003 + 27.899999999999991 1.4744726429868913E-003 + 27.959999999999994 1.5655039204459430E-003 + 28.019999999999996 1.6612694462591390E-003 + 28.079999999999998 1.7619528005644387E-003 + 28.140000000000001 1.8677406297147299E-003 + 28.200000000000003 1.9788221803129723E-003 + 28.259999999999991 2.0953890209348099E-003 + 28.319999999999993 2.2176351297080771E-003 + 28.379999999999995 2.3457558832665733E-003 + 28.439999999999998 2.4799480689935453E-003 + 28.500000000000000 2.6204102580378178E-003 + 28.560000000000002 2.7673410209758265E-003 + 28.619999999999990 2.9209390860511280E-003 + 28.679999999999993 3.0814035687257353E-003 + 28.739999999999995 3.2489325241471505E-003 + 28.799999999999997 3.4237227871942756E-003 + 28.859999999999999 3.6059697587796425E-003 + 28.920000000000002 3.7958663974629564E-003 + 28.980000000000004 3.9936031187424005E-003 + 29.039999999999992 4.1993664605526988E-003 + 29.099999999999994 4.4133390205171137E-003 + 29.159999999999997 4.6356988300700055E-003 + 29.219999999999999 4.8666187239170908E-003 + 29.280000000000001 5.1062647946989084E-003 + 29.340000000000003 5.3547965406527485E-003 + 29.399999999999991 5.6123671530430609E-003 + 29.459999999999994 5.8791197202205363E-003 + 29.519999999999996 6.1551892885206459E-003 + 29.579999999999998 6.4407009349105974E-003 + 29.640000000000001 6.7357692228156999E-003 + 29.700000000000003 7.0404970425198129E-003 + 29.759999999999991 7.3549752383308452E-003 + 29.819999999999993 7.6792809486405092E-003 + 29.879999999999995 8.0134783519292419E-003 + 29.939999999999998 8.3576166142059847E-003 + 30.000000000000000 8.7117293962956435E-003 + 30.060000000000002 9.0758332682864280E-003 + 30.119999999999990 9.4499288091979897E-003 + 30.179999999999993 9.8339990182590310E-003 + 30.239999999999995 1.0228007112981932E-002 + 30.299999999999997 1.0631895449635947E-002 + 30.359999999999999 1.1045588485306750E-002 + 30.420000000000002 1.1468988770594922E-002 + 30.480000000000004 1.1901977480424743E-002 + 30.539999999999992 1.2344413594412408E-002 + 30.599999999999994 1.2796131070881305E-002 + 30.659999999999997 1.3256944037424853E-002 + 30.719999999999999 1.3726639537358852E-002 + 30.780000000000001 1.4204980832654750E-002 + 30.840000000000003 1.4691704814238100E-002 + 30.899999999999991 1.5186525255443832E-002 + 30.959999999999994 1.5689127504580090E-002 + 31.019999999999996 1.6199172363888226E-002 + 31.079999999999998 1.6716294622995693E-002 + 31.140000000000001 1.7240101781291511E-002 + 31.200000000000003 1.7770172975110902E-002 + 31.259999999999991 1.8306061489399467E-002 + 31.319999999999993 1.8847295132499307E-002 + 31.379999999999995 1.9393374575055938E-002 + 31.439999999999998 1.9943772401323147E-002 + 31.500000000000000 2.0497937022755260E-002 + 31.560000000000002 2.1055290116640799E-002 + 31.619999999999990 2.1615229457858740E-002 + 31.679999999999993 2.2177121717194603E-002 + 31.739999999999995 2.2740318014855643E-002 + 31.799999999999997 2.3304142180588006E-002 + 31.859999999999999 2.3867893462275705E-002 + 31.920000000000002 2.4430846706687874E-002 + 31.980000000000004 2.4992263812433548E-002 + 32.039999999999992 2.5551381085960487E-002 + 32.099999999999994 2.6107416361741881E-002 + 32.159999999999997 2.6659572905176447E-002 + 32.219999999999999 2.7207033239577818E-002 + 32.280000000000001 2.7748965844695470E-002 + 32.340000000000003 2.8284527825603825E-002 + 32.399999999999991 2.8812863027743892E-002 + 32.459999999999994 2.9333103684681498E-002 + 32.519999999999996 2.9844374782438093E-002 + 32.579999999999998 3.0345792477994099E-002 + 32.640000000000001 3.0836470062860600E-002 + 32.700000000000003 3.1315518023552980E-002 + 32.759999999999991 3.1782041186151917E-002 + 32.819999999999993 3.2235150227853025E-002 + 32.879999999999995 3.2673953440613586E-002 + 32.939999999999998 3.3097564418186010E-002 + 33.000000000000000 3.3505106755139472E-002 + 33.060000000000002 3.3895713028870310E-002 + 33.119999999999990 3.4268524438117155E-002 + 33.179999999999993 3.4622688937367016E-002 + 33.239999999999995 3.4957384432854073E-002 + 33.299999999999997 3.5271794236614813E-002 + 33.359999999999999 3.5565127196192640E-002 + 33.420000000000002 3.5836612044674004E-002 + 33.480000000000004 3.6085499558826048E-002 + 33.539999999999992 3.6311070562902212E-002 + 33.599999999999994 3.6512631473188610E-002 + 33.659999999999997 3.6689523184475575E-002 + 33.719999999999999 3.6841107707431896E-002 + 33.780000000000001 3.6966795546120756E-002 + 33.840000000000003 3.7066020160549606E-002 + 33.899999999999991 3.7138259826946983E-002 + 33.959999999999994 3.7183027061936810E-002 + 34.019999999999996 3.7199885841649127E-002 + 34.079999999999998 3.7188430681785838E-002 + 34.140000000000001 3.7148305007834254E-002 + 34.200000000000003 3.7079203201098351E-002 + 34.259999999999991 3.6980861964777643E-002 + 34.319999999999993 3.6853058200988997E-002 + 34.379999999999995 3.6695631855399979E-002 + 34.439999999999998 3.6508460233406231E-002 + 34.500000000000000 3.6291477491810609E-002 + 34.560000000000002 3.6044671991898800E-002 + 34.619999999999990 3.5768075709671637E-002 + 34.679999999999993 3.5461777740846370E-002 + 34.739999999999995 3.5125918941050445E-002 + 34.799999999999997 3.4760695427444852E-002 + 34.859999999999999 3.4366342433131906E-002 + 34.920000000000002 3.3943165541826734E-002 + 34.980000000000004 3.3491508735700504E-002 + 35.039999999999992 3.3011773568324909E-002 + 35.099999999999994 3.2504414188096603E-002 + 35.159999999999997 3.1969927524602364E-002 + 35.219999999999999 3.1408863259093651E-002 + 35.280000000000001 3.0821823067549242E-002 + 35.340000000000003 3.0209449395079527E-002 + 35.399999999999991 2.9572431662065100E-002 + 35.459999999999994 2.8911505444493099E-002 + 35.519999999999996 2.8227447562819270E-002 + 35.579999999999998 2.7521076650221427E-002 + 35.640000000000001 2.6793247915600140E-002 + 35.700000000000003 2.6044856344539805E-002 + 35.759999999999991 2.5276832502613093E-002 + 35.819999999999993 2.4490139310972794E-002 + 35.879999999999995 2.3685769097133207E-002 + 35.939999999999998 2.2864744113137318E-002 + 36.000000000000000 2.2028113574453681E-002 + 36.060000000000002 2.1176951000190708E-002 + 36.119999999999990 2.0312349192861616E-002 + 36.179999999999993 1.9435423456852785E-002 + 36.239999999999995 1.8547301634932390E-002 + 36.299999999999997 1.7649127994583139E-002 + 36.359999999999999 1.6742058401679371E-002 + 36.420000000000002 1.5827254735139774E-002 + 36.479999999999990 1.4905886630163812E-002 + 36.539999999999992 1.3979128472745786E-002 + 36.599999999999994 1.3048154223330409E-002 + 36.659999999999997 1.2114134969113148E-002 + 36.719999999999999 1.1178239083767564E-002 + 36.780000000000001 1.0241626339784260E-002 + 36.840000000000003 9.3054469193326848E-003 + 36.899999999999991 8.3708404897847033E-003 + 36.959999999999994 7.4389318685466159E-003 + 37.019999999999996 6.5108293360463532E-003 + 37.079999999999998 5.5876211265465251E-003 + 37.140000000000001 4.6703749642150374E-003 + 37.200000000000003 3.7601356189648368E-003 + 37.259999999999991 2.8579223652254039E-003 + 37.319999999999993 1.9647269231965921E-003 + 37.379999999999995 1.0815120737560590E-003 + 37.439999999999998 2.0921022745060895E-004 + 37.500000000000000 -6.5127914505981230E-004 + 37.560000000000002 -1.4990901552814791E-003 + 37.619999999999990 -2.3333924973219372E-003 + 37.679999999999993 -3.1533919680601674E-003 + 37.739999999999995 -3.9583325645309716E-003 + 37.799999999999997 -4.7474965212904617E-003 + 37.859999999999999 -5.5202063625758337E-003 + 37.920000000000002 -6.2758245125713414E-003 + 37.979999999999990 -7.0137555260445985E-003 + 38.039999999999992 -7.7334437213506680E-003 + 38.099999999999994 -8.4343770290436666E-003 + 38.159999999999997 -9.1160856841863043E-003 + 38.219999999999999 -9.7781417559962124E-003 + 38.280000000000001 -1.0420160207973383E-002 + 38.340000000000003 -1.1041796697129732E-002 + 38.399999999999991 -1.1642751687354257E-002 + 38.459999999999994 -1.2222767165936925E-002 + 38.519999999999996 -1.2781624198720731E-002 + 38.579999999999998 -1.3319147048988216E-002 + 38.640000000000001 -1.3835199380792159E-002 + 38.700000000000003 -1.4329685041621165E-002 + 38.759999999999991 -1.4802545607388903E-002 + 38.819999999999993 -1.5253761372250577E-002 + 38.879999999999995 -1.5683349224603387E-002 + 38.939999999999998 -1.6091362803026268E-002 + 39.000000000000000 -1.6477889742184337E-002 + 39.060000000000002 -1.6843049488706935E-002 + 39.119999999999990 -1.7186996039711348E-002 + 39.179999999999993 -1.7509914880052470E-002 + 39.239999999999995 -1.7812017712864486E-002 + 39.299999999999997 -1.8093549118841420E-002 + 39.359999999999999 -1.8354775928152368E-002 + 39.420000000000002 -1.8595993271397434E-002 + 39.479999999999990 -1.8817520705707576E-002 + 39.539999999999992 -1.9019697296136520E-002 + 39.599999999999994 -1.9202885283883371E-002 + 39.659999999999997 -1.9367465532219769E-002 + 39.719999999999999 -1.9513834923576594E-002 + 39.780000000000001 -1.9642410296362611E-002 + 39.840000000000003 -1.9753622116281358E-002 + 39.899999999999991 -1.9847913562559820E-002 + 39.959999999999994 -1.9925738653946777E-002 + 40.019999999999996 -1.9987562282074014E-002 + 40.079999999999998 -2.0033858850126079E-002 + 40.140000000000001 -2.0065110895671510E-002 + 40.200000000000003 -2.0081806502658565E-002 + 40.259999999999991 -2.0084436892349334E-002 + 40.319999999999993 -2.0073498866575158E-002 + 40.379999999999995 -2.0049491168074127E-002 + 40.439999999999998 -2.0012914338897906E-002 + 40.500000000000000 -1.9964267113124524E-002 + 40.560000000000002 -1.9904048508818530E-002 + 40.619999999999990 -1.9832755076282217E-002 + 40.679999999999993 -1.9750878621295407E-002 + 40.739999999999995 -1.9658908343602035E-002 + 40.799999999999997 -1.9557329056912924E-002 + 40.859999999999999 -1.9446617518970779E-002 + 40.920000000000002 -1.9327246250787460E-002 + 40.979999999999990 -1.9199679982804273E-002 + 41.039999999999992 -1.9064374912703443E-002 + 41.099999999999994 -1.8921778274662411E-002 + 41.159999999999997 -1.8772329963741136E-002 + 41.219999999999999 -1.8616459444570445E-002 + 41.280000000000001 -1.8454583999061466E-002 + 41.340000000000003 -1.8287115690218379E-002 + 41.399999999999991 -1.8114451915846375E-002 + 41.459999999999994 -1.7936979597854716E-002 + 41.519999999999996 -1.7755075051093340E-002 + 41.579999999999998 -1.7569104891002687E-002 + 41.640000000000001 -1.7379420152694815E-002 + 41.700000000000003 -1.7186363418499641E-002 + 41.759999999999991 -1.6990263553225075E-002 + 41.819999999999993 -1.6791439850929742E-002 + 41.879999999999995 -1.6590197645082464E-002 + 41.939999999999998 -1.6386832988698870E-002 + 42.000000000000000 -1.6181628358844187E-002 + 42.060000000000002 -1.5974857497724371E-002 + 42.119999999999990 -1.5766777807325116E-002 + 42.179999999999993 -1.5557640522007195E-002 + 42.239999999999995 -1.5347684593912912E-002 + 42.299999999999997 -1.5137136750601811E-002 + 42.359999999999999 -1.4926214206816474E-002 + 42.420000000000002 -1.4715124948057309E-002 + 42.479999999999990 -1.4504064658617652E-002 + 42.539999999999992 -1.4293221371629819E-002 + 42.599999999999994 -1.4082772351885703E-002 + 42.659999999999997 -1.3872886294612634E-002 + 42.719999999999999 -1.3663723461247099E-002 + 42.780000000000001 -1.3455434328340536E-002 + 42.840000000000003 -1.3248162173105213E-002 + 42.899999999999991 -1.3042040929880086E-002 + 42.959999999999994 -1.2837198347858975E-002 + 43.019999999999996 -1.2633754134832717E-002 + 43.079999999999998 -1.2431821131593633E-002 + 43.140000000000001 -1.2231504332337322E-002 + 43.200000000000003 -1.2032902945806539E-002 + 43.259999999999991 -1.1836110707620293E-002 + 43.319999999999993 -1.1641214043559861E-002 + 43.379999999999995 -1.1448294062146400E-002 + 43.439999999999998 -1.1257425548592943E-002 + 43.500000000000000 -1.1068679896570044E-002 + 43.560000000000002 -1.0882121869944939E-002 + 43.619999999999990 -1.0697811727330345E-002 + 43.679999999999993 -1.0515805411695320E-002 + 43.739999999999995 -1.0336154847413717E-002 + 43.799999999999997 -1.0158907342675536E-002 + 43.859999999999999 -9.9841057703823708E-003 + 43.920000000000002 -9.8117901619483583E-003 + 43.979999999999990 -9.6419972160735681E-003 + 44.039999999999992 -9.4747580626613308E-003 + 44.099999999999994 -9.3101025663773988E-003 + 44.159999999999997 -9.1480555961650604E-003 + 44.219999999999999 -8.9886416973068498E-003 + 44.280000000000001 -8.8318791748170696E-003 + 44.340000000000003 -8.6777864215614644E-003 + 44.399999999999991 -8.5263780059486715E-003 + 44.459999999999994 -8.3776653254706238E-003 + 44.519999999999996 -8.2316576297328733E-003 + 44.579999999999998 -8.0883623011564591E-003 + 44.640000000000001 -7.9477832956684584E-003 + 44.700000000000003 -7.8099226099675040E-003 + 44.759999999999991 -7.6747807305811138E-003 + 44.819999999999993 -7.5423551612921660E-003 + 44.879999999999995 -7.4126414619205879E-003 + 44.939999999999998 -7.2856339859409883E-003 + 45.000000000000000 -7.1613235404578094E-003 + 45.060000000000002 -7.0396994958033567E-003 + 45.119999999999990 -6.9207494681214413E-003 + 45.179999999999993 -6.8044595236444729E-003 + 45.239999999999995 -6.6908130594050697E-003 + 45.299999999999997 -6.5797916961151965E-003 + 45.359999999999999 -6.4713760840491566E-003 + 45.420000000000002 -6.3655443906211031E-003 + 45.479999999999990 -6.2622733872448625E-003 + 45.539999999999992 -6.1615378991521971E-003 + 45.599999999999994 -6.0633114632937342E-003 + 45.659999999999997 -5.9675660549205912E-003 + 45.719999999999999 -5.8742713269231911E-003 + 45.780000000000001 -5.7833957798174617E-003 + 45.840000000000003 -5.6949066895083033E-003 + 45.899999999999991 -5.6087699091848598E-003 + 45.959999999999994 -5.5249493523102230E-003 + 46.019999999999996 -5.4434081512570827E-003 + 46.079999999999998 -5.3641075298422845E-003 + 46.140000000000001 -5.2870075056977717E-003 + 46.200000000000003 -5.2120673400785668E-003 + 46.259999999999991 -5.1392441105256332E-003 + 46.319999999999993 -5.0684938803780824E-003 + 46.379999999999995 -4.9997725771851820E-003 + 46.439999999999998 -4.9330340553549006E-003 + 46.500000000000000 -4.8682313325525634E-003 + 46.560000000000002 -4.8053164171818581E-003 + 46.619999999999990 -4.7442411524564031E-003 + 46.679999999999993 -4.6849549773857833E-003 + 46.739999999999995 -4.6274084075802191E-003 + 46.799999999999997 -4.5715496563032264E-003 + 46.859999999999999 -4.5173269110872945E-003 + 46.920000000000002 -4.4646880444783078E-003 + 46.979999999999990 -4.4135793996357359E-003 + 47.039999999999992 -4.3639478843116725E-003 + 47.099999999999994 -4.3157397568903706E-003 + 47.159999999999997 -4.2689004008200290E-003 + 47.219999999999999 -4.2233753382099363E-003 + 47.280000000000001 -4.1791103685703893E-003 + 47.340000000000003 -4.1360496666938834E-003 + 47.399999999999991 -4.0941392126369689E-003 + 47.459999999999994 -4.0533238611829220E-003 + 47.519999999999996 -4.0135492538138258E-003 + 47.579999999999998 -3.9747601118087878E-003 + 47.640000000000001 -3.9369026100304245E-003 + 47.700000000000003 -3.8999222502813331E-003 + 47.759999999999991 -3.8637657307381773E-003 + 47.819999999999993 -3.8283800277823759E-003 + 47.879999999999995 -3.7937123898329770E-003 + 47.939999999999998 -3.7597109054332352E-003 + 48.000000000000000 -3.7263245215451903E-003 + 48.060000000000002 -3.6935025501113740E-003 + 48.119999999999990 -3.6611956567927369E-003 + 48.179999999999993 -3.6293552180118511E-003 + 48.239999999999995 -3.5979339777764728E-003 + 48.299999999999997 -3.5668851286865099E-003 + 48.359999999999999 -3.5361636841819721E-003 + 48.420000000000002 -3.5057256503629604E-003 + 48.479999999999990 -3.4755283627831411E-003 + 48.539999999999992 -3.4455303037915271E-003 + 48.599999999999994 -3.4156918380222091E-003 + 48.659999999999997 -3.3859746571374208E-003 + 48.719999999999999 -3.3563416181024803E-003 + 48.780000000000001 -3.3267577709807650E-003 + 48.840000000000003 -3.2971893957914633E-003 + 48.899999999999991 -3.2676047074847486E-003 + 48.959999999999994 -3.2379738899821291E-003 + 49.019999999999996 -3.2082682567923216E-003 + 49.079999999999998 -3.1784612759968370E-003 + 49.140000000000001 -3.1485283625778430E-003 + 49.200000000000003 -3.1184470729558465E-003 + 49.259999999999991 -3.0881964284890039E-003 + 49.319999999999993 -3.0577572709712037E-003 + 49.379999999999995 -3.0271129783063029E-003 + 49.439999999999998 -2.9962484411562942E-003 + 49.500000000000000 -2.9651506035412714E-003 + 49.560000000000002 -2.9338084706112479E-003 + 49.619999999999990 -2.9022130765027840E-003 + 49.679999999999993 -2.8703571234289177E-003 + 49.739999999999995 -2.8382352546689328E-003 + 49.799999999999997 -2.8058444410441110E-003 + 49.859999999999999 -2.7731832381782538E-003 + 49.920000000000002 -2.7402520600929353E-003 + 49.979999999999990 -2.7070533129715333E-003 + 50.039999999999992 -2.6735913920314992E-003 + 50.099999999999994 -2.6398723466622216E-003 + 50.159999999999997 -2.6059036995790740E-003 + 50.219999999999999 -2.5716950362949667E-003 + 50.280000000000001 -2.5372575344821324E-003 + 50.340000000000003 -2.5026038426263762E-003 + 50.399999999999991 -2.4677486310120075E-003 + 50.459999999999994 -2.4327075907274393E-003 + 50.519999999999996 -2.3974980528818236E-003 + 50.579999999999998 -2.3621386813329399E-003 + 50.640000000000001 -2.3266495558447895E-003 + 50.700000000000003 -2.2910520772989476E-003 + 50.759999999999991 -2.2553685538432046E-003 + 50.819999999999993 -2.2196225412633749E-003 + 50.879999999999995 -2.1838387503854968E-003 + 50.939999999999998 -2.1480430319900812E-003 + 51.000000000000000 -2.1122616117055064E-003 + 51.060000000000002 -2.0765216427008418E-003 + 51.119999999999990 -2.0408513579423769E-003 + 51.179999999999993 -2.0052793485126714E-003 + 51.239999999999995 -1.9698350424201434E-003 + 51.299999999999997 -1.9345476710391717E-003 + 51.359999999999999 -1.8994476123559802E-003 + 51.420000000000002 -1.8645653791929768E-003 + 51.479999999999990 -1.8299317130511053E-003 + 51.539999999999992 -1.7955774027658960E-003 + 51.599999999999994 -1.7615333763120735E-003 + 51.659999999999997 -1.7278307524757480E-003 + 51.719999999999999 -1.6945003614493254E-003 + 51.780000000000001 -1.6615732433820176E-003 + 51.840000000000003 -1.6290799557938758E-003 + 51.899999999999991 -1.5970507847964336E-003 + 51.959999999999994 -1.5655156450388209E-003 + 52.019999999999996 -1.5345042422170204E-003 + 52.079999999999998 -1.5040454202544494E-003 + 52.140000000000001 -1.4741677016993351E-003 + 52.200000000000003 -1.4448989430936670E-003 + 52.259999999999991 -1.4162659925160889E-003 + 52.319999999999993 -1.3882953770308789E-003 + 52.379999999999995 -1.3610122839982576E-003 + 52.439999999999998 -1.3344413301352401E-003 + 52.500000000000000 -1.3086060287100017E-003 + 52.560000000000002 -1.2835287660844948E-003 + 52.619999999999990 -1.2592309765113239E-003 + 52.679999999999993 -1.2357329128739501E-003 + 52.739999999999995 -1.2130536643718678E-003 + 52.799999999999997 -1.1912111442411370E-003 + 52.859999999999999 -1.1702217736651766E-003 + 52.920000000000002 -1.1501008025762767E-003 + 52.979999999999990 -1.1308622892944910E-003 + 53.039999999999992 -1.1125186323077769E-003 + 53.099999999999994 -1.0950810528313234E-003 + 53.159999999999997 -1.0785593155167950E-003 + 53.219999999999999 -1.0629616546242303E-003 + 53.280000000000001 -1.0482946888129853E-003 + 53.339999999999989 -1.0345636455226846E-003 + 53.399999999999991 -1.0217722949539378E-003 + 53.459999999999994 -1.0099227117284400E-003 + 53.519999999999996 -9.9901558596631325E-004 + 53.579999999999998 -9.8904985553427936E-004 + 53.640000000000001 -9.8002304410155900E-004 + 53.700000000000003 -9.7193093286220000E-004 + 53.759999999999991 -9.6476767889810305E-004 + 53.819999999999993 -9.5852605166772480E-004 + 53.879999999999995 -9.5319712387733127E-004 + 53.939999999999998 -9.4877042835838081E-004 + 54.000000000000000 -9.4523391286862430E-004 + 54.060000000000002 -9.4257414175228640E-004 + 54.119999999999990 -9.4077599968320723E-004 + 54.179999999999993 -9.3982290228379205E-004 + 54.239999999999995 -9.3969686431682119E-004 + 54.299999999999997 -9.4037846562248237E-004 + 54.359999999999999 -9.4184692997093011E-004 + 54.420000000000002 -9.4408001294565835E-004 + 54.479999999999990 -9.4705422965780006E-004 + 54.539999999999992 -9.5074473149396024E-004 + 54.599999999999994 -9.5512556041395149E-004 + 54.659999999999997 -9.6016951581134793E-004 + 54.719999999999999 -9.6584830344809960E-004 + 54.780000000000001 -9.7213248218991073E-004 + 54.839999999999989 -9.7899165437416837E-004 + 54.899999999999991 -9.8639442305612488E-004 + 54.959999999999994 -9.9430859470660596E-004 + 55.019999999999996 -1.0027011872291336E-003 + 55.079999999999998 -1.0115381502827493E-003 + 55.140000000000001 -1.0207850837000659E-003 + 55.200000000000003 -1.0304069511586644E-003 + 55.259999999999991 -1.0403682200550162E-003 + 55.319999999999993 -1.0506328611786478E-003 + 55.379999999999995 -1.0611643475301590E-003 + 55.439999999999998 -1.0719261161540200E-003 + 55.500000000000000 -1.0828811677943298E-003 + 55.560000000000002 -1.0939925326824867E-003 + 55.619999999999990 -1.1052230270516491E-003 + 55.679999999999993 -1.1165355905729678E-003 + 55.739999999999995 -1.1278932389025384E-003 + 55.799999999999997 -1.1392591121749886E-003 + 55.859999999999999 -1.1505964840052311E-003 + 55.920000000000002 -1.1618690182509618E-003 + 55.979999999999990 -1.1730407834552004E-003 + 56.039999999999992 -1.1840760890296366E-003 + 56.099999999999994 -1.1949400418805524E-003 + 56.159999999999997 -1.2055982468558765E-003 + 56.219999999999999 -1.2160167432932333E-003 + 56.280000000000001 -1.2261626078848434E-003 + 56.339999999999989 -1.2360034969786569E-003 + 56.399999999999991 -1.2455080405455422E-003 + 56.459999999999994 -1.2546455953085620E-003 + 56.519999999999996 -1.2633867669716321E-003 + 56.579999999999998 -1.2717030198011701E-003 + 56.640000000000001 -1.2795669592065148E-003 + 56.700000000000003 -1.2869522039348727E-003 + 56.759999999999991 -1.2938337888803377E-003 + 56.819999999999993 -1.3001878263446300E-003 + 56.879999999999995 -1.3059918677476919E-003 + 56.939999999999998 -1.3112243680347415E-003 + 57.000000000000000 -1.3158655368965913E-003 + 57.060000000000002 -1.3198965696314792E-003 + 57.119999999999990 -1.3233002648331174E-003 + 57.179999999999993 -1.3260606349319221E-003 + 57.239999999999995 -1.3281631082174142E-003 + 57.299999999999997 -1.3295945366651066E-003 + 57.359999999999999 -1.3303429160408896E-003 + 57.420000000000002 -1.3303979095712017E-003 + 57.479999999999990 -1.3297503562687660E-003 + 57.539999999999992 -1.3283925593983975E-003 + 57.599999999999994 -1.3263180020220533E-003 + 57.659999999999997 -1.3235217570446935E-003 + 57.719999999999999 -1.3200000595017874E-003 + 57.780000000000001 -1.3157506203323255E-003 + 57.839999999999989 -1.3107721730763759E-003 + 57.899999999999991 -1.3050649857798875E-003 + 57.959999999999994 -1.2986304824350802E-003 + 58.019999999999996 -1.2914712630917491E-003 + 58.079999999999998 -1.2835913210489894E-003 + 58.140000000000001 -1.2749955294021071E-003 + 58.200000000000003 -1.2656902909352838E-003 + 58.259999999999991 -1.2556828916903918E-003 + 58.319999999999993 -1.2449816976592303E-003 + 58.379999999999995 -1.2335962616237045E-003 + 58.439999999999998 -1.2215368004556424E-003 + 58.500000000000000 -1.2088149700121018E-003 + 58.560000000000002 -1.1954431124259828E-003 + 58.619999999999990 -1.1814345019592865E-003 + 58.679999999999993 -1.1668033937035985E-003 + 58.739999999999995 -1.1515649310239059E-003 + 58.799999999999997 -1.1357348681279062E-003 + 58.859999999999999 -1.1193298980610100E-003 + 58.920000000000002 -1.1023674593566403E-003 + 58.979999999999990 -1.0848656103497718E-003 + 59.039999999999992 -1.0668432286973649E-003 + 59.099999999999994 -1.0483197794009425E-003 + 59.159999999999997 -1.0293153248685143E-003 + 59.219999999999999 -1.0098507039086174E-003 + 59.280000000000001 -9.8994726881260209E-004 + 59.339999999999989 -9.6962666805241397E-004 + 59.399999999999991 -9.4891140116994328E-004 + 59.459999999999994 -9.2782433638567685E-004 + 59.519999999999996 -9.0638881662579351E-004 + 59.579999999999998 -8.8462866699636150E-004 + 59.640000000000001 -8.6256801519405985E-004 + 59.700000000000003 -8.4023144793513298E-004 + 59.759999999999991 -8.1764406112998635E-004 + 59.819999999999993 -7.9483115820172447E-004 + 59.879999999999995 -7.7181849342024451E-004 + 59.939999999999998 -7.4863206432296313E-004 + 60.000000000000000 -7.2529823197126824E-004 + 60.060000000000002 -7.0184370079474792E-004 + 60.119999999999990 -6.7829536363018747E-004 + 60.179999999999993 -6.5468052751706696E-004 + 60.239999999999995 -6.3102660561027289E-004 + 60.299999999999997 -6.0736138011358162E-004 + 60.359999999999999 -5.8371273768541081E-004 + 60.420000000000002 -5.6010882009947577E-004 + 60.479999999999990 -5.3657796005875233E-004 + 60.539999999999992 -5.1314852169933429E-004 + 60.599999999999994 -4.8984915320836688E-004 + 60.659999999999997 -4.6670843698430755E-004 + 60.719999999999999 -4.4375512024275206E-004 + 60.780000000000001 -4.2101784922196861E-004 + 60.839999999999989 -3.9852538192794348E-004 + 60.899999999999991 -3.7630634727538388E-004 + 60.959999999999994 -3.5438935370988520E-004 + 61.019999999999996 -3.3280281973550505E-004 + 61.079999999999998 -3.1157510575536738E-004 + 61.140000000000001 -2.9073436608414939E-004 + 61.200000000000003 -2.7030847850479577E-004 + 61.259999999999991 -2.5032513784732549E-004 + 61.319999999999993 -2.3081172063721666E-004 + 61.379999999999995 -2.1179524762715075E-004 + 61.439999999999998 -1.9330241864040906E-004 + 61.500000000000000 -1.7535948566986870E-004 + 61.560000000000002 -1.5799225636856096E-004 + 61.619999999999990 -1.4122603430242900E-004 + 61.679999999999993 -1.2508558390116845E-004 + 61.739999999999995 -1.0959506280965441E-004 + 61.799999999999997 -9.4778000489399665E-005 + 61.859999999999999 -8.0657206397815177E-005 + 61.920000000000002 -6.7254743886527169E-005 + 61.979999999999990 -5.4591894548314268E-005 + 62.039999999999992 -4.2689072967750776E-005 + 62.099999999999994 -3.1565809954813688E-005 + 62.159999999999997 -2.1240674375685767E-005 + 62.219999999999999 -1.1731245286816822E-005 + 62.280000000000001 -3.0540617604391124E-006 + 62.339999999999989 4.7754216288485967E-006 + 62.399999999999991 1.1742885562664322E-005 + 62.459999999999994 1.7835150258471201E-005 + 62.519999999999996 2.3040265424112481E-005 + 62.579999999999998 2.7347498346055795E-005 + 62.640000000000001 3.0747391979785431E-005 + 62.700000000000003 3.3231803826089100E-005 + 62.759999999999991 3.4793900010479450E-005 + 62.819999999999993 3.5428221379373451E-005 + 62.879999999999995 3.5130687238000161E-005 + 62.939999999999998 3.3898613327598730E-005 + 63.000000000000000 3.1730747077870686E-005 + 63.060000000000002 2.8627267893320573E-005 + 63.119999999999990 2.4589812076059655E-005 + 63.179999999999993 1.9621464019840605E-005 + 63.239999999999995 1.3726777813273959E-005 + 63.299999999999997 6.9117595410330014E-006 + 63.359999999999999 -8.1613305612909477E-007 + 63.420000000000002 -9.4480011532911314E-006 + 63.479999999999990 -1.8973527748482457E-005 + 63.539999999999992 -2.9381000628995840E-005 + 63.599999999999994 -4.0657337583218372E-005 + 63.659999999999997 -5.2788113321059700E-005 + 63.719999999999999 -6.5757611861083312E-005 + 63.780000000000001 -7.9548843691245859E-005 + 63.839999999999989 -9.4143618308885249E-005 + 63.899999999999991 -1.0952255210666590E-004 + 63.959999999999994 -1.2566516206642502E-004 + 64.019999999999996 -1.4254988732985993E-004 + 64.079999999999998 -1.6015410557594813E-004 + 64.140000000000001 -1.7845430220022484E-004 + 64.200000000000003 -1.9742597500815791E-004 + 64.259999999999991 -2.1704380889997946E-004 + 64.319999999999993 -2.3728167304683546E-004 + 64.379999999999995 -2.5811274420157397E-004 + 64.439999999999998 -2.7950941852101054E-004 + 64.500000000000000 -3.0144356655079053E-004 + 64.560000000000002 -3.2388652596419815E-004 + 64.619999999999990 -3.4680912382888124E-004 + 64.679999999999993 -3.7018178415255308E-004 + 64.739999999999995 -3.9397463006044919E-004 + 64.799999999999997 -4.1815756679007272E-004 + 64.859999999999999 -4.4270031189625110E-004 + 64.920000000000002 -4.6757247023530347E-004 + 64.979999999999990 -4.9274367716154084E-004 + 65.039999999999992 -5.1818358479067343E-004 + 65.099999999999994 -5.4386209713473905E-004 + 65.159999999999997 -5.6974924098026312E-004 + 65.219999999999999 -5.9581546683719659E-004 + 65.280000000000001 -6.2203147283069701E-004 + 65.339999999999989 -6.4836843393206343E-004 + 65.399999999999991 -6.7479797903785945E-004 + 65.459999999999994 -7.0129243162143527E-004 + 65.519999999999996 -7.2782457213811528E-004 + 65.579999999999998 -7.5436782734602864E-004 + 65.640000000000001 -7.8089636158231942E-004 + 65.700000000000003 -8.0738504849784754E-004 + 65.759999999999991 -8.3380945169057267E-004 + 65.819999999999993 -8.6014596555310067E-004 + 65.879999999999995 -8.8637180429780723E-004 + 65.939999999999998 -9.1246487240668605E-004 + 66.000000000000000 -9.3840394959421032E-004 + 66.060000000000002 -9.6416872715602165E-004 + 66.119999999999990 -9.8973962939288666E-004 + 66.179999999999993 -1.0150979899213441E-003 + 66.239999999999995 -1.0402258927486286E-003 + 66.299999999999997 -1.0651063507573777E-003 + 66.359999999999999 -1.0897233263151699E-003 + 66.420000000000002 -1.1140614077964624E-003 + 66.479999999999990 -1.1381059775589335E-003 + 66.539999999999992 -1.1618433104553963E-003 + 66.599999999999994 -1.1852605365359991E-003 + 66.659999999999997 -1.2083453895085684E-003 + 66.719999999999999 -1.2310862909499509E-003 + 66.780000000000001 -1.2534723891032898E-003 + 66.839999999999989 -1.2754935855783991E-003 + 66.899999999999991 -1.2971402812257085E-003 + 66.959999999999994 -1.3184035150894380E-003 + 67.019999999999996 -1.3392748774346170E-003 + 67.079999999999998 -1.3597462958960650E-003 + 67.140000000000001 -1.3798102885711047E-003 + 67.199999999999989 -1.3994598521889030E-003 + 67.259999999999991 -1.4186881114079881E-003 + 67.319999999999993 -1.4374886400724323E-003 + 67.379999999999995 -1.4558550122882475E-003 + 67.439999999999998 -1.4737813218372523E-003 + 67.500000000000000 -1.4912617114669819E-003 + 67.560000000000002 -1.5082903889089858E-003 + 67.619999999999990 -1.5248617092255055E-003 + 67.679999999999993 -1.5409697300247203E-003 + 67.739999999999995 -1.5566088155848988E-003 + 67.799999999999997 -1.5717732008430584E-003 + 67.859999999999999 -1.5864569656240731E-003 + 67.920000000000002 -1.6006539878104737E-003 + 67.979999999999990 -1.6143579840341643E-003 + 68.039999999999992 -1.6275625389962690E-003 + 68.099999999999994 -1.6402610791136903E-003 + 68.159999999999997 -1.6524466751237051E-003 + 68.219999999999999 -1.6641122687776810E-003 + 68.280000000000001 -1.6752505563694333E-003 + 68.339999999999989 -1.6858540490586960E-003 + 68.399999999999991 -1.6959148551079525E-003 + 68.459999999999994 -1.7054250562367050E-003 + 68.519999999999996 -1.7143765764648250E-003 + 68.579999999999998 -1.7227609243938987E-003 + 68.640000000000001 -1.7305696694378421E-003 + 68.699999999999989 -1.7377941184565041E-003 + 68.759999999999991 -1.7444256915440256E-003 + 68.819999999999993 -1.7504555120261801E-003 + 68.879999999999995 -1.7558749506040063E-003 + 68.939999999999998 -1.7606751290451695E-003 + 69.000000000000000 -1.7648473174014774E-003 + 69.060000000000002 -1.7683828282707456E-003 + 69.119999999999990 -1.7712731553956352E-003 + 69.179999999999993 -1.7735099436572187E-003 + 69.239999999999995 -1.7750849937402747E-003 + 69.299999999999997 -1.7759904103114487E-003 + 69.359999999999999 -1.7762186251353285E-003 + 69.420000000000002 -1.7757623434139923E-003 + 69.479999999999990 -1.7746148755243365E-003 + 69.539999999999992 -1.7727698773163153E-003 + 69.599999999999994 -1.7702216467925165E-003 + 69.659999999999997 -1.7669649200057081E-003 + 69.719999999999999 -1.7629953915046449E-003 + 69.780000000000001 -1.7583092724872773E-003 + 69.839999999999989 -1.7529038048060888E-003 + 69.899999999999991 -1.7467768082510390E-003 + 69.959999999999994 -1.7399272818833804E-003 + 70.019999999999996 -1.7323552374782834E-003 + 70.079999999999998 -1.7240614854448946E-003 + 70.140000000000001 -1.7150481812426592E-003 + 70.199999999999989 -1.7053185130026286E-003 + 70.259999999999991 -1.6948767315788384E-003 + 70.319999999999993 -1.6837285384345452E-003 + 70.379999999999995 -1.6718807290739518E-003 + 70.439999999999998 -1.6593411941589491E-003 + 70.500000000000000 -1.6461192820706040E-003 + 70.560000000000002 -1.6322255036369956E-003 + 70.619999999999990 -1.6176716827945989E-003 + 70.679999999999993 -1.6024707500668202E-003 + 70.739999999999995 -1.5866370082038863E-003 + 70.799999999999997 -1.5701861367172980E-003 + 70.859999999999999 -1.5531348580363222E-003 + 70.920000000000002 -1.5355011247595652E-003 + 70.979999999999990 -1.5173042950063485E-003 + 71.039999999999992 -1.4985647388512844E-003 + 71.099999999999994 -1.4793039272412494E-003 + 71.159999999999997 -1.4595447161217876E-003 + 71.219999999999999 -1.4393108534247062E-003 + 71.280000000000001 -1.4186272526887386E-003 + 71.339999999999989 -1.3975198223021468E-003 + 71.399999999999991 -1.3760153644188896E-003 + 71.459999999999994 -1.3541415921602927E-003 + 71.519999999999996 -1.3319272177195610E-003 + 71.579999999999998 -1.3094015967916770E-003 + 71.640000000000001 -1.2865948189036865E-003 + 71.699999999999989 -1.2635377745204926E-003 + 71.759999999999991 -1.2402615895043788E-003 + 71.819999999999993 -1.2167982489440748E-003 + 71.879999999999995 -1.1931798869685294E-003 + 71.939999999999998 -1.1694390186144043E-003 + 72.000000000000000 -1.1456084871441714E-003 + 72.060000000000002 -1.1217210170625411E-003 + 72.119999999999990 -1.0978096693030994E-003 + 72.179999999999993 -1.0739074852823282E-003 + 72.239999999999995 -1.0500473380376009E-003 + 72.299999999999997 -1.0262618759424936E-003 + 72.359999999999999 -1.0025836359161273E-003 + 72.420000000000002 -9.7904451970206360E-004 + 72.479999999999990 -9.5567628656055776E-004 + 72.539999999999992 -9.3251009603180371E-004 + 72.599999999999994 -9.0957645403625526E-004 + 72.659999999999997 -8.8690533320915548E-004 + 72.719999999999999 -8.6452589013430588E-004 + 72.780000000000001 -8.4246650579443460E-004 + 72.839999999999989 -8.2075459636428232E-004 + 72.899999999999991 -7.9941676202919566E-004 + 72.959999999999994 -7.7847849340214096E-004 + 73.019999999999996 -7.5796432139004692E-004 + 73.079999999999998 -7.3789747718088752E-004 + 73.140000000000001 -7.1830018614834202E-004 + 73.199999999999989 -6.9919326466162906E-004 + 73.259999999999991 -6.8059636724035781E-004 + 73.319999999999993 -6.6252784174802371E-004 + 73.379999999999995 -6.4500465451097246E-004 + 73.439999999999998 -6.2804239144034790E-004 + 73.500000000000000 -6.1165523964564936E-004 + 73.560000000000002 -5.9585594374577896E-004 + 73.619999999999990 -5.8065575702115780E-004 + 73.679999999999993 -5.6606454844049150E-004 + 73.739999999999995 -5.5209065149403470E-004 + 73.799999999999997 -5.3874103228996229E-004 + 73.859999999999999 -5.2602106344909623E-004 + 73.920000000000002 -5.1393471485065476E-004 + 73.979999999999990 -5.0248437941902721E-004 + 74.039999999999992 -4.9167106462288718E-004 + 74.099999999999994 -4.8149441891675362E-004 + 74.159999999999997 -4.7195248125905787E-004 + 74.219999999999999 -4.6304198228469724E-004 + 74.280000000000001 -4.5475827384961815E-004 + 74.339999999999989 -4.4709535000400614E-004 + 74.399999999999991 -4.4004584828936341E-004 + 74.459999999999994 -4.3360118302168422E-004 + 74.519999999999996 -4.2775155212095570E-004 + 74.579999999999998 -4.2248590485432629E-004 + 74.640000000000001 -4.1779205610762582E-004 + 74.699999999999989 -4.1365680414470735E-004 + 74.759999999999991 -4.1006581244324775E-004 + 74.819999999999993 -4.0700380605749903E-004 + 74.879999999999995 -4.0445460726748950E-004 + 74.939999999999998 -4.0240114759134484E-004 + 75.000000000000000 -4.0082555914112663E-004 + 75.060000000000002 -3.9970916951564001E-004 + 75.119999999999990 -3.9903267786109908E-004 + 75.179999999999993 -3.9877610578961653E-004 + 75.239999999999995 -3.9891895377413802E-004 + 75.299999999999997 -3.9944021377132533E-004 + 75.359999999999999 -4.0031848157640808E-004 + 75.420000000000002 -4.0153191031980391E-004 + 75.479999999999990 -4.0305841911133567E-004 + 75.539999999999992 -4.0487571813118545E-004 + 75.599999999999994 -4.0696134553216821E-004 + 75.659999999999997 -4.0929276303591230E-004 + 75.719999999999999 -4.1184744024834219E-004 + 75.780000000000001 -4.1460291304042720E-004 + 75.839999999999989 -4.1753683551422474E-004 + 75.899999999999991 -4.2062710403789383E-004 + 75.959999999999994 -4.2385186216917204E-004 + 76.019999999999996 -4.2718959566679184E-004 + 76.079999999999998 -4.3061923424823743E-004 + 76.140000000000001 -4.3412011594299769E-004 + 76.199999999999989 -4.3767212840265212E-004 + 76.259999999999991 -4.4125573143750452E-004 + 76.319999999999993 -4.4485199474394288E-004 + 76.379999999999995 -4.4844262365577173E-004 + 76.439999999999998 -4.5201008654869131E-004 + 76.500000000000000 -4.5553757605448932E-004 + 76.560000000000002 -4.5900913450583417E-004 + 76.619999999999990 -4.6240953900384139E-004 + 76.679999999999993 -4.6572457461725416E-004 + 76.739999999999995 -4.6894087814998019E-004 + 76.799999999999997 -4.7204598079096872E-004 + 76.859999999999999 -4.7502851654483876E-004 + 76.920000000000002 -4.7787805500232376E-004 + 76.979999999999990 -4.8058524753977482E-004 + 77.039999999999992 -4.8314187571779600E-004 + 77.099999999999994 -4.8554078096303102E-004 + 77.159999999999997 -4.8777599264857713E-004 + 77.219999999999999 -4.8984258166378831E-004 + 77.280000000000001 -4.9173695430598243E-004 + 77.339999999999989 -4.9345654440552270E-004 + 77.399999999999991 -4.9500006358122210E-004 + 77.459999999999994 -4.9636738877912841E-004 + 77.519999999999996 -4.9755951638721842E-004 + 77.579999999999998 -4.9857870128350735E-004 + 77.640000000000001 -4.9942827232629476E-004 + 77.699999999999989 -5.0011269500619402E-004 + 77.759999999999991 -5.0063751881117182E-004 + 77.819999999999993 -5.0100942643210703E-004 + 77.879999999999995 -5.0123605941888416E-004 + 77.939999999999998 -5.0132610644896929E-004 + 78.000000000000000 -5.0128926066966026E-004 + 78.060000000000002 -5.0113606739814469E-004 + 78.119999999999990 -5.0087804227368993E-004 + 78.179999999999993 -5.0052758320631588E-004 + 78.239999999999995 -5.0009784858547773E-004 + 78.299999999999997 -4.9960285459199562E-004 + 78.359999999999999 -4.9905730615832028E-004 + 78.420000000000002 -4.9847666258357446E-004 + 78.479999999999990 -4.9787705675089660E-004 + 78.539999999999992 -4.9727517780506672E-004 + 78.599999999999994 -4.9668835969931798E-004 + 78.659999999999997 -4.9613433285953937E-004 + 78.719999999999999 -4.9563133902421675E-004 + 78.780000000000001 -4.9519801375467706E-004 + 78.839999999999989 -4.9485335439559876E-004 + 78.899999999999991 -4.9461651804874021E-004 + 78.959999999999994 -4.9450692471182970E-004 + 79.019999999999996 -4.9454403306289755E-004 + 79.079999999999998 -4.9474740956358197E-004 + 79.140000000000001 -4.9513655546751679E-004 + 79.199999999999989 -4.9573084430617272E-004 + 79.259999999999991 -4.9654943909641471E-004 + 79.319999999999993 -4.9761126687530139E-004 + 79.379999999999995 -4.9893492143807247E-004 + 79.439999999999998 -5.0053856888987393E-004 + 79.500000000000000 -5.0243992421619514E-004 + 79.560000000000002 -5.0465610332965649E-004 + 79.619999999999990 -5.0720362492808510E-004 + 79.679999999999993 -5.1009835120372101E-004 + 79.739999999999995 -5.1335535521673673E-004 + 79.799999999999997 -5.1698897098986145E-004 + 79.859999999999999 -5.2101260059053255E-004 + 79.920000000000002 -5.2543877509038460E-004 + 79.979999999999990 -5.3027905403079322E-004 + 80.039999999999992 -5.3554384042730607E-004 + 80.099999999999994 -5.4124266977493803E-004 + 80.159999999999997 -5.4738377366144299E-004 + 80.219999999999999 -5.5397423085914944E-004 + 80.280000000000001 -5.6101992988779378E-004 + 80.340000000000003 -5.6852550438877495E-004 + 80.400000000000006 -5.7649415094146320E-004 + 80.460000000000008 -5.8492778732662225E-004 + 80.519999999999982 -5.9382691884332715E-004 + 80.579999999999984 -6.0319067150279616E-004 + 80.639999999999986 -6.1301662767841497E-004 + 80.699999999999989 -6.2330087371802536E-004 + 80.759999999999991 -6.3403810022200058E-004 + 80.819999999999993 -6.4522127436081051E-004 + 80.879999999999995 -6.5684195365709537E-004 + 80.939999999999998 -6.6889018279945645E-004 + 81.000000000000000 -6.8135433579032004E-004 + 81.060000000000002 -6.9422125296099630E-004 + 81.120000000000005 -7.0747622006785832E-004 + 81.180000000000007 -7.2110303517584364E-004 + 81.240000000000009 -7.3508376701410174E-004 + 81.299999999999983 -7.4939915572405473E-004 + 81.359999999999985 -7.6402832704200820E-004 + 81.419999999999987 -7.7894903543470131E-004 + 81.479999999999990 -7.9413748488165587E-004 + 81.539999999999992 -8.0956862367942526E-004 + 81.599999999999994 -8.2521590600887580E-004 + 81.659999999999997 -8.4105173866190887E-004 + 81.719999999999999 -8.5704700994074256E-004 + 81.780000000000001 -8.7317161080060991E-004 + 81.840000000000003 -8.8939433618838058E-004 + 81.900000000000006 -9.0568278257676055E-004 + 81.960000000000008 -9.2200371962766964E-004 + 82.019999999999982 -9.3832304845556890E-004 + 82.079999999999984 -9.5460569937857423E-004 + 82.139999999999986 -9.7081594976406783E-004 + 82.199999999999989 -9.8691735836998486E-004 + 82.259999999999991 -1.0028729219926733E-003 + 82.319999999999993 -1.0186451889489469E-003 + 82.379999999999995 -1.0341960828664032E-003 + 82.439999999999998 -1.0494874356119701E-003 + 82.500000000000000 -1.0644805980486432E-003 + 82.560000000000002 -1.0791367701609208E-003 + 82.620000000000005 -1.0934170344176434E-003 + 82.680000000000007 -1.1072826231077718E-003 + 82.740000000000009 -1.1206947139188778E-003 + 82.799999999999983 -1.1336147576059374E-003 + 82.859999999999985 -1.1460042406236846E-003 + 82.919999999999987 -1.1578254734125599E-003 + 82.979999999999990 -1.1690408542053587E-003 + 83.039999999999992 -1.1796135601684641E-003 + 83.099999999999994 -1.1895074826155231E-003 + 83.159999999999997 -1.1986870330564733E-003 + 83.219999999999999 -1.2071179801828797E-003 + 83.280000000000001 -1.2147668619838642E-003 + 83.340000000000003 -1.2216010749156376E-003 + 83.400000000000006 -1.2275895359812219E-003 + 83.460000000000008 -1.2327024030858542E-003 + 83.519999999999982 -1.2369110282432773E-003 + 83.579999999999984 -1.2401882147217034E-003 + 83.639999999999986 -1.2425083760575879E-003 + 83.699999999999989 -1.2438473653186960E-003 + 83.759999999999991 -1.2441828411821885E-003 + 83.819999999999993 -1.2434938072012152E-003 + 83.879999999999995 -1.2417614448472717E-003 + 83.939999999999998 -1.2389683957643081E-003 + 84.000000000000000 -1.2350991533432003E-003 + 84.060000000000002 -1.2301402943940914E-003 + 84.120000000000005 -1.2240800482694969E-003 + 84.180000000000007 -1.2169088432430833E-003 + 84.240000000000009 -1.2086189807339665E-003 + 84.299999999999983 -1.1992047877159879E-003 + 84.359999999999985 -1.1886626770795873E-003 + 84.419999999999987 -1.1769911992608115E-003 + 84.479999999999990 -1.1641908373073821E-003 + 84.539999999999992 -1.1502643521049761E-003 + 84.599999999999994 -1.1352166307477608E-003 + 84.659999999999997 -1.1190548067622299E-003 + 84.719999999999999 -1.1017881847414195E-003 + 84.780000000000001 -1.0834279739461107E-003 + 84.840000000000003 -1.0639877997354694E-003 + 84.900000000000006 -1.0434833757465688E-003 + 84.960000000000008 -1.0219323224668155E-003 + 85.019999999999982 -9.9935468510785981E-004 + 85.079999999999984 -9.7577221399651373E-004 + 85.139999999999986 -9.5120880313044370E-004 + 85.199999999999989 -9.2569038004518169E-004 + 85.259999999999991 -8.9924457481367767E-004 + 85.319999999999993 -8.7190084455805728E-004 + 85.379999999999995 -8.4369062165870132E-004 + 85.439999999999998 -8.1464676862962743E-004 + 85.500000000000000 -7.8480395762405637E-004 + 85.560000000000002 -7.5419828422390253E-004 + 85.620000000000005 -7.2286736529981197E-004 + 85.680000000000007 -6.9085024426533107E-004 + 85.740000000000009 -6.5818722075312397E-004 + 85.799999999999983 -6.2491984724381410E-004 + 85.859999999999985 -5.9109090409615022E-004 + 85.919999999999987 -5.5674411082479972E-004 + 85.979999999999990 -5.2192425147454453E-004 + 86.039999999999992 -4.8667700534736261E-004 + 86.099999999999994 -4.5104878275038990E-004 + 86.159999999999997 -4.1508676381669832E-004 + 86.219999999999999 -3.7883864302292505E-004 + 86.280000000000001 -3.4235268770336445E-004 + 86.340000000000003 -3.0567752429635126E-004 + 86.400000000000006 -2.6886207631729496E-004 + 86.460000000000008 -2.3195547810579876E-004 + 86.519999999999982 -1.9500692152200604E-004 + 86.579999999999984 -1.5806558951245869E-004 + 86.639999999999986 -1.2118053110942940E-004 + 86.699999999999989 -8.4400567903412954E-005 + 86.759999999999991 -4.7774172338537782E-005 + 86.819999999999993 -1.1349376141923211E-005 + 86.879999999999995 2.4826330208637746E-005 + 86.939999999999998 6.0706120304416099E-005 + 87.000000000000000 9.6243935169239552E-005 + 87.060000000000002 1.3139454249367396E-004 + 87.120000000000005 1.6611368839808090E-004 + 87.180000000000007 2.0035816257513140E-004 + 87.240000000000009 2.3408589350957477E-004 + 87.299999999999983 2.6725605610626899E-004 + 87.359999999999985 2.9982910915641843E-004 + 87.419999999999987 3.3176695481902305E-004 + 87.479999999999990 3.6303293122520161E-004 + 87.539999999999992 3.9359193115119396E-004 + 87.599999999999994 4.2341048793383303E-004 + 87.659999999999997 4.5245675964002412E-004 + 87.719999999999999 4.8070067478213292E-004 + 87.780000000000001 5.0811388708646172E-004 + 87.840000000000003 5.3466991257498204E-004 + 87.900000000000006 5.6034407425972765E-004 + 87.960000000000008 5.8511363992819697E-004 + 88.019999999999982 6.0895776660578453E-004 + 88.079999999999984 6.3185755120728098E-004 + 88.139999999999986 6.5379610745317277E-004 + 88.199999999999989 6.7475838336546960E-004 + 88.259999999999991 6.9473145825816479E-004 + 88.319999999999993 7.1370440372237032E-004 + 88.379999999999995 7.3166817996041429E-004 + 88.439999999999998 7.4861585877842348E-004 + 88.500000000000000 7.6454250654301088E-004 + 88.560000000000002 7.7944519416921546E-004 + 88.620000000000005 7.9332290772993956E-004 + 88.680000000000007 8.0617671213918868E-004 + 88.740000000000009 8.1800956504925464E-004 + 88.799999999999983 8.2882637091197459E-004 + 88.859999999999985 8.3863391161735222E-004 + 88.919999999999987 8.4744086213099418E-004 + 88.979999999999990 8.5525760943791734E-004 + 89.039999999999992 8.6209640990462144E-004 + 89.099999999999994 8.6797109968036979E-004 + 89.159999999999997 8.7289726167734112E-004 + 89.219999999999999 8.7689200404428974E-004 + 89.280000000000001 8.7997390538310587E-004 + 89.340000000000003 8.8216295058506967E-004 + 89.400000000000006 8.8348052389538689E-004 + 89.460000000000008 8.8394937013664906E-004 + 89.519999999999982 8.8359324527798554E-004 + 89.579999999999984 8.8243723562377496E-004 + 89.639999999999986 8.8050729207355294E-004 + 89.699999999999989 8.7783049735481859E-004 + 89.759999999999991 8.7443476068878897E-004 + 89.819999999999993 8.7034887708094071E-004 + 89.879999999999995 8.6560245375608125E-004 + 89.939999999999998 8.6022564889923258E-004 + 90.000000000000000 8.5424943586436366E-004 + 90.060000000000002 8.4770530307148428E-004 + 90.120000000000005 8.4062518890518090E-004 + 90.180000000000007 8.3304153275949610E-004 + 90.240000000000009 8.2498700579423381E-004 + 90.299999999999983 8.1649477849974651E-004 + 90.359999999999985 8.0759809830625254E-004 + 90.419999999999987 7.9833049959193443E-004 + 90.479999999999990 7.8872543412370660E-004 + 90.539999999999992 7.7881644586097866E-004 + 90.599999999999994 7.6863704316481229E-004 + 90.659999999999997 7.5822063403956736E-004 + 90.719999999999999 7.4760038388650154E-004 + 90.780000000000001 7.3680921504816325E-004 + 90.840000000000003 7.2587977054400948E-004 + 90.900000000000006 7.1484433022626004E-004 + 90.960000000000008 7.0373478209012196E-004 + 91.019999999999982 6.9258244032394209E-004 + 91.079999999999984 6.8141826340793429E-004 + 91.139999999999986 6.7027258588743413E-004 + 91.199999999999989 6.5917514398708204E-004 + 91.259999999999991 6.4815512165758546E-004 + 91.319999999999993 6.3724095692330954E-004 + 91.379999999999995 6.2646047706140971E-004 + 91.439999999999998 6.1584085261372776E-004 + 91.500000000000000 6.0540843747484594E-004 + 91.560000000000002 5.9518884701281716E-004 + 91.620000000000005 5.8520695304138258E-004 + 91.680000000000007 5.7548680654516057E-004 + 91.739999999999981 5.6605163365481463E-004 + 91.799999999999983 5.5692382539110168E-004 + 91.859999999999985 5.4812497663380680E-004 + 91.919999999999987 5.3967569799689909E-004 + 91.979999999999990 5.3159576684760315E-004 + 92.039999999999992 5.2390404781280911E-004 + 92.099999999999994 5.1661852137368201E-004 + 92.159999999999997 5.0975620796565619E-004 + 92.219999999999999 5.0333320365481850E-004 + 92.280000000000001 4.9736456848973026E-004 + 92.340000000000003 4.9186456487894381E-004 + 92.400000000000006 4.8684632653378242E-004 + 92.460000000000008 4.8232215506851573E-004 + 92.519999999999982 4.7830332295941308E-004 + 92.579999999999984 4.7480018880884193E-004 + 92.639999999999986 4.7182208061577989E-004 + 92.699999999999989 4.6937734322723888E-004 + 92.759999999999991 4.6747337820462397E-004 + 92.819999999999993 4.6611663947433631E-004 + 92.879999999999995 4.6531254180784420E-004 + 92.939999999999998 4.6506553993186752E-004 + 93.000000000000000 4.6537916712895990E-004 + 93.060000000000002 4.6625587577194401E-004 + 93.120000000000005 4.6769718902427642E-004 + 93.180000000000007 4.6970377282571388E-004 + 93.239999999999981 4.7227520050107768E-004 + 93.299999999999983 4.7541013237112291E-004 + 93.359999999999985 4.7910634145321664E-004 + 93.419999999999987 4.8336060126877393E-004 + 93.479999999999990 4.8816883099637119E-004 + 93.539999999999992 4.9352596225097408E-004 + 93.599999999999994 4.9942608728304361E-004 + 93.659999999999997 5.0586243396049627E-004 + 93.719999999999999 5.1282732976877065E-004 + 93.780000000000001 5.2031231398310459E-004 + 93.840000000000003 5.2830803436947191E-004 + 93.900000000000006 5.3680429224229882E-004 + 93.960000000000008 5.4579022787425244E-004 + 94.019999999999982 5.5525402884397065E-004 + 94.079999999999984 5.6518323039279276E-004 + 94.139999999999986 5.7556455838209944E-004 + 94.199999999999989 5.8638400073126901E-004 + 94.259999999999991 5.9762688246760114E-004 + 94.319999999999993 6.0927781781117227E-004 + 94.379999999999995 6.2132070206703251E-004 + 94.439999999999998 6.3373885755221902E-004 + 94.500000000000000 6.4651496327049554E-004 + 94.560000000000002 6.5963117882153477E-004 + 94.620000000000005 6.7306892500582430E-004 + 94.680000000000007 6.8680933618646954E-004 + 94.739999999999981 7.0083295253872691E-004 + 94.799999999999983 7.1511982624084675E-004 + 94.859999999999985 7.2964972871919563E-004 + 94.919999999999987 7.4440188711599189E-004 + 94.979999999999990 7.5935528748769009E-004 + 95.039999999999992 7.7448870779180459E-004 + 95.099999999999994 7.8978049383689967E-004 + 95.159999999999997 8.0520880787757546E-004 + 95.219999999999999 8.2075171753247429E-004 + 95.280000000000001 8.3638698645734978E-004 + 95.340000000000003 8.5209233172880853E-004 + 95.400000000000006 8.6784533581336801E-004 + 95.460000000000008 8.8362343132910822E-004 + 95.519999999999982 8.9940421342314550E-004 + 95.579999999999984 9.1516503412545573E-004 + 95.639999999999986 9.3088339261464281E-004 + 95.699999999999989 9.4653680764828787E-004 + 95.759999999999991 9.6210289960101981E-004 + 95.819999999999993 9.7755932857012274E-004 + 95.879999999999995 9.9288412052684922E-004 + 95.939999999999998 1.0080551763242537E-003 + 96.000000000000000 1.0230507901999863E-003 + 96.060000000000002 1.0378496265944699E-003 + 96.120000000000005 1.0524304277757860E-003 + 96.180000000000007 1.0667723933135208E-003 + 96.239999999999981 1.0808549337518246E-003 + 96.299999999999983 1.0946581333839606E-003 + 96.359999999999985 1.1081621898720510E-003 + 96.419999999999987 1.1213478363275063E-003 + 96.479999999999990 1.1341964293220524E-003 + 96.539999999999992 1.1466896683028892E-003 + 96.599999999999994 1.1588098405441801E-003 + 96.659999999999997 1.1705396675126137E-003 + 96.719999999999999 1.1818625368041214E-003 + 96.780000000000001 1.1927623666597026E-003 + 96.840000000000003 1.2032233659613270E-003 + 96.900000000000006 1.2132308304891959E-003 + 96.960000000000008 1.2227704428529054E-003 + 97.019999999999982 1.2318283874990846E-003 + 97.079999999999984 1.2403916250723099E-003 + 97.139999999999986 1.2484477036611462E-003 + 97.199999999999989 1.2559847137034942E-003 + 97.259999999999991 1.2629917461564036E-003 + 97.319999999999993 1.2694582621856161E-003 + 97.379999999999995 1.2753746182407337E-003 + 97.439999999999998 1.2807318894676740E-003 + 97.500000000000000 1.2855215993925024E-003 + 97.560000000000002 1.2897361814013391E-003 + 97.620000000000005 1.2933688603186874E-003 + 97.680000000000007 1.2964136819591946E-003 + 97.739999999999981 1.2988652346119570E-003 + 97.799999999999983 1.3007187903863425E-003 + 97.859999999999985 1.3019706761924074E-003 + 97.919999999999987 1.3026177490491851E-003 + 97.979999999999990 1.3026576021636922E-003 + 98.039999999999992 1.3020885762159626E-003 + 98.099999999999994 1.3009098164918791E-003 + 98.159999999999997 1.2991210040723396E-003 + 98.219999999999999 1.2967226489643295E-003 + 98.280000000000001 1.2937159614950162E-003 + 98.340000000000003 1.2901028778278005E-003 + 98.400000000000006 1.2858858935820183E-003 + 98.460000000000008 1.2810682963522208E-003 + 98.519999999999982 1.2756540057490026E-003 + 98.579999999999984 1.2696475643966293E-003 + 98.639999999999986 1.2630539191468147E-003 + 98.699999999999989 1.2558790435624274E-003 + 98.759999999999991 1.2481292313710024E-003 + 98.819999999999993 1.2398114207247798E-003 + 98.879999999999995 1.2309331841397078E-003 + 98.939999999999998 1.2215025859457647E-003 + 99.000000000000000 1.2115280832290427E-003 + 99.060000000000002 1.2010188408288079E-003 + 99.120000000000005 1.1899842661143320E-003 + 99.180000000000007 1.1784344258141063E-003 + 99.239999999999981 1.1663797412799879E-003 + 99.299999999999983 1.1538309424038765E-003 + 99.359999999999985 1.1407992765698519E-003 + 99.419999999999987 1.1272961809538787E-003 + 99.479999999999990 1.1133334307985056E-003 + 99.539999999999992 1.0989232538919445E-003 + 99.599999999999994 1.0840778437128441E-003 + 99.659999999999997 1.0688100983885411E-003 + 99.719999999999999 1.0531325746150253E-003 + 99.780000000000001 1.0370583167227223E-003 + 99.840000000000003 1.0206004519209019E-003 + 99.900000000000006 1.0037723291217860E-003 + 99.960000000000008 9.8658720611659334E-004 + 100.01999999999998 9.6905849763775638E-004 + 100.07999999999998 9.5119967747111177E-004 + 100.13999999999999 9.3302418447883094E-004 + 100.19999999999999 9.1454550349886598E-004 + 100.25999999999999 8.9577687668545192E-004 + 100.31999999999999 8.7673162224187983E-004 + 100.38000000000000 8.5742287568554940E-004 + 100.44000000000000 8.3786366272654313E-004 + 100.50000000000000 8.1806674293607225E-004 + 100.56000000000000 7.9804486278574869E-004 + 100.62000000000000 7.7781036396326728E-004 + 100.68000000000001 7.5737545040932498E-004 + 100.73999999999998 7.3675204760316926E-004 + 100.79999999999998 7.1595180382567208E-004 + 100.85999999999999 6.9498614194969958E-004 + 100.91999999999999 6.7386615415333893E-004 + 100.97999999999999 6.5260261186256068E-004 + 101.03999999999999 6.3120602020258845E-004 + 101.09999999999999 6.0968662915322411E-004 + 101.16000000000000 5.8805425039031771E-004 + 101.22000000000000 5.6631841812814984E-004 + 101.28000000000000 5.4448831324876675E-004 + 101.34000000000000 5.2257288688306591E-004 + 101.40000000000001 5.0058052764761379E-004 + 101.46000000000001 4.7851951374481953E-004 + 101.51999999999998 4.5639759566992174E-004 + 101.57999999999998 4.3422226258229711E-004 + 101.63999999999999 4.1200060124069535E-004 + 101.69999999999999 3.8973935704441373E-004 + 101.75999999999999 3.6744495912666045E-004 + 101.81999999999999 3.4512341520682218E-004 + 101.88000000000000 3.2278048047712103E-004 + 101.94000000000000 3.0042153508040651E-004 + 102.00000000000000 2.7805166859462961E-004 + 102.06000000000000 2.5567567603212256E-004 + 102.12000000000000 2.3329811293770251E-004 + 102.18000000000001 2.1092325976372153E-004 + 102.23999999999998 1.8855517151291487E-004 + 102.29999999999998 1.6619773408113299E-004 + 102.35999999999999 1.4385464452342761E-004 + 102.41999999999999 1.2152945793723706E-004 + 102.47999999999999 9.9225591854111415E-005 + 102.53999999999999 7.6946398947703166E-005 + 102.59999999999999 5.4695107692272001E-005 + 102.66000000000000 3.2474902105500910E-005 + 102.72000000000000 1.0288935428342703E-005 + 102.78000000000000 -1.1859690650700793E-005 + 102.84000000000000 -3.3967864563886135E-005 + 102.90000000000001 -5.6032480809228337E-005 + 102.96000000000001 -7.8050422585157920E-005 + 103.01999999999998 -1.0001851984442989E-004 + 103.07999999999998 -1.2193359983342785E-004 + 103.13999999999999 -1.4379242524412145E-004 + 103.19999999999999 -1.6559166489700408E-004 + 103.25999999999999 -1.8732791309106325E-004 + 103.31999999999999 -2.0899766006689631E-004 + 103.38000000000000 -2.3059727955153565E-004 + 103.44000000000000 -2.5212299460026919E-004 + 103.50000000000000 -2.7357089543761571E-004 + 103.56000000000000 -2.9493684666768842E-004 + 103.62000000000000 -3.1621661922042658E-004 + 103.68000000000001 -3.3740571196703723E-004 + 103.73999999999998 -3.5849938229159375E-004 + 103.79999999999998 -3.7949275542772172E-004 + 103.85999999999999 -4.0038060469255388E-004 + 103.91999999999999 -4.2115753139965786E-004 + 103.97999999999999 -4.4181783579549466E-004 + 104.03999999999999 -4.6235559057274122E-004 + 104.09999999999999 -4.8276461347165342E-004 + 104.16000000000000 -5.0303842589361674E-004 + 104.22000000000000 -5.2317030065275475E-004 + 104.28000000000000 -5.4315333386486685E-004 + 104.34000000000000 -5.6298032541297969E-004 + 104.40000000000001 -5.8264386220758949E-004 + 104.46000000000001 -6.0213622176076640E-004 + 104.51999999999998 -6.2144958463882535E-004 + 104.57999999999998 -6.4057577698329107E-004 + 104.63999999999999 -6.5950654424805659E-004 + 104.69999999999999 -6.7823339077084991E-004 + 104.75999999999999 -6.9674757294343114E-004 + 104.81999999999999 -7.1504025841240694E-004 + 104.88000000000000 -7.3310238218598535E-004 + 104.94000000000000 -7.5092472178002283E-004 + 105.00000000000000 -7.6849800275180990E-004 + 105.06000000000000 -7.8581269176748183E-004 + 105.12000000000000 -8.0285922516487107E-004 + 105.18000000000001 -8.1962787276732138E-004 + 105.23999999999998 -8.3610888007508758E-004 + 105.29999999999998 -8.5229240106686943E-004 + 105.35999999999999 -8.6816845218582708E-004 + 105.41999999999999 -8.8372708074362853E-004 + 105.47999999999999 -8.9895833659405216E-004 + 105.53999999999999 -9.1385213375860515E-004 + 105.59999999999999 -9.2839848002768664E-004 + 105.66000000000000 -9.4258733164026792E-004 + 105.72000000000000 -9.5640880825067327E-004 + 105.78000000000000 -9.6985305507597537E-004 + 105.84000000000000 -9.8291010684310536E-004 + 105.90000000000001 -9.9557032796108698E-004 + 105.96000000000001 -1.0078240974316205E-003 + 106.01999999999998 -1.0196617640865721E-003 + 106.07999999999998 -1.0310740055197939E-003 + 106.13999999999999 -1.0420515810120551E-003 + 106.19999999999999 -1.0525855571861715E-003 + 106.25999999999999 -1.0626671463248873E-003 + 106.31999999999999 -1.0722876107045079E-003 + 106.38000000000000 -1.0814385714131853E-003 + 106.44000000000000 -1.0901118499092809E-003 + 106.50000000000000 -1.0982998529155883E-003 + 106.56000000000000 -1.1059949671959530E-003 + 106.62000000000000 -1.1131898519703754E-003 + 106.68000000000001 -1.1198777171143842E-003 + 106.73999999999998 -1.1260519268888488E-003 + 106.79999999999998 -1.1317062461220415E-003 + 106.85999999999999 -1.1368348568518462E-003 + 106.91999999999999 -1.1414320261494641E-003 + 106.97999999999999 -1.1454927451331786E-003 + 107.03999999999999 -1.1490121875264900E-003 + 107.09999999999999 -1.1519857085612369E-003 + 107.16000000000000 -1.1544092825071168E-003 + 107.22000000000000 -1.1562793180859927E-003 + 107.28000000000000 -1.1575922302838723E-003 + 107.34000000000000 -1.1583450676584928E-003 + 107.40000000000001 -1.1585350635847269E-003 + 107.46000000000001 -1.1581600792688312E-003 + 107.51999999999998 -1.1572182978396828E-003 + 107.57999999999998 -1.1557081033364311E-003 + 107.63999999999999 -1.1536284332742464E-003 + 107.69999999999999 -1.1509786222989504E-003 + 107.75999999999999 -1.1477584512730255E-003 + 107.81999999999999 -1.1439680143799753E-003 + 107.88000000000000 -1.1396078430403055E-003 + 107.94000000000000 -1.1346791382090945E-003 + 108.00000000000000 -1.1291830716950273E-003 + 108.06000000000000 -1.1231217318577638E-003 + 108.12000000000000 -1.1164974865817449E-003 + 108.18000000000001 -1.1093131448742170E-003 + 108.23999999999998 -1.1015718587202741E-003 + 108.29999999999998 -1.0932771513508539E-003 + 108.35999999999999 -1.0844331777861943E-003 + 108.41999999999999 -1.0750443902629758E-003 + 108.47999999999999 -1.0651156505275753E-003 + 108.53999999999999 -1.0546523537547071E-003 + 108.59999999999999 -1.0436600978199805E-003 + 108.66000000000000 -1.0321449762682553E-003 + 108.72000000000000 -1.0201135261817833E-003 + 108.78000000000000 -1.0075727055956429E-003 + 108.84000000000000 -9.9452969886818887E-004 + 108.90000000000001 -9.8099235804379619E-004 + 108.96000000000001 -9.6696888909105925E-004 + 109.01999999999998 -9.5246781849462432E-004 + 109.07999999999998 -9.3749818782944800E-004 + 109.13999999999999 -9.2206936462372853E-004 + 109.19999999999999 -9.0619135793168666E-004 + 109.25999999999999 -8.8987454391866176E-004 + 109.31999999999999 -8.7312976969225486E-004 + 109.38000000000000 -8.5596832265844339E-004 + 109.44000000000000 -8.3840206192143524E-004 + 109.50000000000000 -8.2044315374072763E-004 + 109.56000000000000 -8.0210433447615618E-004 + 109.62000000000000 -7.8339881003486821E-004 + 109.68000000000001 -7.6434028677406843E-004 + 109.73999999999998 -7.4494289652553346E-004 + 109.79999999999998 -7.2522125260968888E-004 + 109.85999999999999 -7.0519039590717040E-004 + 109.91999999999999 -6.8486585029417393E-004 + 109.97999999999999 -6.6426375734282702E-004 + 110.03999999999999 -6.4340047524794649E-004 + 110.09999999999999 -6.2229296323096004E-004 + 110.16000000000000 -6.0095866766835546E-004 + 110.22000000000000 -5.7941548896006700E-004 + 110.28000000000000 -5.5768174820203622E-004 + 110.34000000000000 -5.3577625997033732E-004 + 110.40000000000001 -5.1371832284186026E-004 + 110.46000000000001 -4.9152754506690791E-004 + 110.51999999999998 -4.6922413074620956E-004 + 110.57999999999998 -4.4682863262282270E-004 + 110.63999999999999 -4.2436203631900711E-004 + 110.69999999999999 -4.0184574108586174E-004 + 110.75999999999999 -3.7930143487892906E-004 + 110.81999999999999 -3.5675129265034898E-004 + 110.88000000000000 -3.3421773512920061E-004 + 110.94000000000000 -3.1172349549847799E-004 + 111.00000000000000 -2.8929164426420086E-004 + 111.06000000000000 -2.6694545217412159E-004 + 111.12000000000000 -2.4470844826508640E-004 + 111.18000000000001 -2.2260435271682292E-004 + 111.23999999999998 -2.0065708481635899E-004 + 111.29999999999998 -1.7889066732189291E-004 + 111.35999999999999 -1.5732924144442071E-004 + 111.41999999999999 -1.3599700467388807E-004 + 111.47999999999999 -1.1491821442473430E-004 + 111.53999999999999 -9.4117119425906495E-005 + 111.59999999999999 -7.3617921048241321E-005 + 111.66000000000000 -5.3444725752499986E-005 + 111.72000000000000 -3.3621517102833923E-005 + 111.78000000000000 -1.4172102502364016E-005 + 111.84000000000000 4.8799490880684274E-006 + 111.90000000000001 2.3511336361910902E-005 + 111.96000000000001 4.1699097264293247E-005 + 112.01999999999998 5.9420649284221505E-005 + 112.07999999999998 7.6653839206469127E-005 + 112.13999999999999 9.3377016876056444E-005 + 112.19999999999999 1.0956906810203694E-004 + 112.25999999999999 1.2520945212530089E-004 + 112.31999999999999 1.4027829157393527E-004 + 112.38000000000000 1.5475637337272700E-004 + 112.44000000000000 1.6862525439179243E-004 + 112.50000000000000 1.8186725630605190E-004 + 112.56000000000000 1.9446551940089832E-004 + 112.62000000000000 2.0640403638569647E-004 + 112.68000000000001 2.1766772553743769E-004 + 112.73999999999998 2.2824243321855833E-004 + 112.79999999999998 2.3811502435723905E-004 + 112.85999999999999 2.4727333417671571E-004 + 112.91999999999999 2.5570628796850404E-004 + 112.97999999999999 2.6340387456212178E-004 + 113.03999999999999 2.7035725518362330E-004 + 113.09999999999999 2.7655866419290287E-004 + 113.16000000000000 2.8200160874717597E-004 + 113.22000000000000 2.8668073626475195E-004 + 113.28000000000000 2.9059197956212221E-004 + 113.34000000000000 2.9373250958499562E-004 + 113.40000000000001 2.9610078148245328E-004 + 113.46000000000001 2.9769654979584472E-004 + 113.51999999999998 2.9852087625568534E-004 + 113.57999999999998 2.9857611884946949E-004 + 113.63999999999999 2.9786595338508081E-004 + 113.69999999999999 2.9639540763029234E-004 + 113.75999999999999 2.9417082678182726E-004 + 113.81999999999999 2.9119980163783111E-004 + 113.88000000000000 2.8749125768118321E-004 + 113.94000000000000 2.8305543358432024E-004 + 114.00000000000000 2.7790378177646656E-004 + 114.06000000000000 2.7204902085914943E-004 + 114.12000000000000 2.6550508283381801E-004 + 114.18000000000001 2.5828712082332395E-004 + 114.23999999999998 2.5041145432034705E-004 + 114.29999999999998 2.4189550643002457E-004 + 114.35999999999999 2.3275781723029818E-004 + 114.41999999999999 2.2301800975088208E-004 + 114.47999999999999 2.1269675619905507E-004 + 114.53999999999999 2.0181569017527074E-004 + 114.59999999999999 1.9039741906950574E-004 + 114.66000000000000 1.7846542934942363E-004 + 114.72000000000000 1.6604404663613187E-004 + 114.78000000000000 1.5315842167480391E-004 + 114.84000000000000 1.3983441744999664E-004 + 114.90000000000001 1.2609858074619907E-004 + 114.96000000000001 1.1197807921365228E-004 + 115.01999999999998 9.7500635420584407E-005 + 115.07999999999998 8.2694474422191112E-005 + 115.13999999999999 6.7588236073999627E-005 + 115.19999999999999 5.2210942418783287E-005 + 115.25999999999999 3.6591909010648711E-005 + 115.31999999999999 2.0760694321223049E-005 + 115.38000000000000 4.7470247899544338E-006 + 115.44000000000000 -1.1419236553677454E-005 + 115.50000000000000 -2.7708187833212115E-005 + 115.56000000000000 -4.4089923951158269E-005 + 115.62000000000000 -6.0534613819072251E-005 + 115.68000000000001 -7.7012534262109163E-005 + 115.73999999999998 -9.3494170987506214E-005 + 115.79999999999998 -1.0995024753452630E-004 + 115.85999999999999 -1.2635177505112915E-004 + 115.91999999999999 -1.4267015720581696E-004 + 115.97999999999999 -1.5887722429129512E-004 + 116.03999999999999 -1.7494527080614354E-004 + 116.09999999999999 -1.9084716931101124E-004 + 116.16000000000000 -2.0655641292902200E-004 + 116.22000000000000 -2.2204712413418973E-004 + 116.28000000000000 -2.3729419130847656E-004 + 116.34000000000000 -2.5227328375524561E-004 + 116.40000000000001 -2.6696088531290719E-004 + 116.46000000000001 -2.8133440738448422E-004 + 116.51999999999998 -2.9537215250785922E-004 + 116.57999999999998 -3.0905340623056784E-004 + 116.63999999999999 -3.2235849249165582E-004 + 116.69999999999999 -3.3526872543952112E-004 + 116.75999999999999 -3.4776652007030410E-004 + 116.81999999999999 -3.5983539322249019E-004 + 116.88000000000000 -3.7146000806868347E-004 + 116.94000000000000 -3.8262615977593571E-004 + 117.00000000000000 -3.9332078325184918E-004 + 117.06000000000000 -4.0353193884993160E-004 + 117.12000000000000 -4.1324893742842808E-004 + 117.18000000000001 -4.2246229869235066E-004 + 117.23999999999998 -4.3116367637326570E-004 + 117.29999999999998 -4.3934597325880748E-004 + 117.35999999999999 -4.4700330305590764E-004 + 117.41999999999999 -4.5413098222812248E-004 + 117.47999999999999 -4.6072555640446318E-004 + 117.53999999999999 -4.6678479888364894E-004 + 117.59999999999999 -4.7230765312084082E-004 + 117.66000000000000 -4.7729424685772341E-004 + 117.72000000000000 -4.8174597274457847E-004 + 117.78000000000000 -4.8566526783696206E-004 + 117.84000000000000 -4.8905580286106936E-004 + 117.90000000000001 -4.9192237163385552E-004 + 117.96000000000001 -4.9427085409159822E-004 + 118.01999999999998 -4.9610814900083347E-004 + 118.07999999999998 -4.9744221551363478E-004 + 118.13999999999999 -4.9828190355852568E-004 + 118.19999999999999 -4.9863714809052770E-004 + 118.25999999999999 -4.9851871546069914E-004 + 118.31999999999999 -4.9793814857311861E-004 + 118.38000000000000 -4.9690788738174002E-004 + 118.44000000000000 -4.9544102549519743E-004 + 118.50000000000000 -4.9355152662169791E-004 + 118.56000000000000 -4.9125380319653574E-004 + 118.62000000000000 -4.8856295749730985E-004 + 118.68000000000001 -4.8549467891635179E-004 + 118.73999999999998 -4.8206503512258203E-004 + 118.79999999999998 -4.7829067636535850E-004 + 118.85999999999999 -4.7418860357583927E-004 + 118.91999999999999 -4.6977605981189506E-004 + 118.97999999999999 -4.6507061785143629E-004 + 119.03999999999999 -4.6009014368047623E-004 + 119.09999999999999 -4.5485258090950025E-004 + 119.16000000000000 -4.4937606665956288E-004 + 119.22000000000000 -4.4367873695124371E-004 + 119.28000000000000 -4.3777878592231767E-004 + 119.34000000000000 -4.3169435412666738E-004 + 119.40000000000001 -4.2544344842438564E-004 + 119.46000000000001 -4.1904392895171332E-004 + 119.51999999999998 -4.1251348338743456E-004 + 119.57999999999998 -4.0586956608594515E-004 + 119.63999999999999 -3.9912928410779043E-004 + 119.69999999999999 -3.9230947616262103E-004 + 119.75999999999999 -3.8542654651360880E-004 + 119.81999999999999 -3.7849647701909629E-004 + 119.88000000000000 -3.7153483821077810E-004 + 119.94000000000000 -3.6455663454031752E-004 + 120.00000000000000 -3.5757642956500072E-004 + 120.06000000000000 -3.5060813606873340E-004 + 120.12000000000000 -3.4366518053834333E-004 + 120.18000000000001 -3.3676027370723349E-004 + 120.23999999999998 -3.2990556100733528E-004 + 120.29999999999998 -3.2311244832005417E-004 + 120.35999999999999 -3.1639169780397944E-004 + 120.41999999999999 -3.0975335914331233E-004 + 120.47999999999999 -3.0320672374271039E-004 + 120.53999999999999 -2.9676038518306808E-004 + 120.59999999999999 -2.9042217712202417E-004 + 120.66000000000000 -2.8419918493407175E-004 + 120.72000000000000 -2.7809766466134207E-004 + 120.78000000000000 -2.7212324802370079E-004 + 120.84000000000000 -2.6628068212220966E-004 + 120.90000000000001 -2.6057404516679258E-004 + 120.95999999999998 -2.5500666545201316E-004 + 121.01999999999998 -2.4958113426571185E-004 + 121.07999999999998 -2.4429935284692053E-004 + 121.13999999999999 -2.3916251343498933E-004 + 121.19999999999999 -2.3417114127861828E-004 + 121.25999999999999 -2.2932515633443986E-004 + 121.31999999999999 -2.2462380686989056E-004 + 121.38000000000000 -2.2006577861368874E-004 + 121.44000000000000 -2.1564912082047780E-004 + 121.50000000000000 -2.1137134953380169E-004 + 121.56000000000000 -2.0722948210808619E-004 + 121.62000000000000 -2.0321999861792295E-004 + 121.68000000000001 -1.9933888546822063E-004 + 121.73999999999998 -1.9558168786537960E-004 + 121.79999999999998 -1.9194349767061078E-004 + 121.85999999999999 -1.8841899159513262E-004 + 121.91999999999999 -1.8500247478327078E-004 + 121.97999999999999 -1.8168790294826511E-004 + 122.03999999999999 -1.7846888557289939E-004 + 122.09999999999999 -1.7533875623633869E-004 + 122.16000000000000 -1.7229057154392375E-004 + 122.22000000000000 -1.6931714201293238E-004 + 122.28000000000000 -1.6641108306692502E-004 + 122.34000000000000 -1.6356483872586336E-004 + 122.40000000000001 -1.6077071860014840E-004 + 122.45999999999998 -1.5802092208924880E-004 + 122.51999999999998 -1.5530755080185360E-004 + 122.57999999999998 -1.5262266851013800E-004 + 122.63999999999999 -1.4995831412100867E-004 + 122.69999999999999 -1.4730653276358470E-004 + 122.75999999999999 -1.4465937015774674E-004 + 122.81999999999999 -1.4200892539388340E-004 + 122.88000000000000 -1.3934736640666158E-004 + 122.94000000000000 -1.3666692551582532E-004 + 123.00000000000000 -1.3395993908678160E-004 + 123.06000000000000 -1.3121883771205378E-004 + 123.12000000000000 -1.2843617179440997E-004 + 123.18000000000001 -1.2560462645457964E-004 + 123.23999999999998 -1.2271701979941409E-004 + 123.29999999999998 -1.1976634775596875E-004 + 123.35999999999999 -1.1674572377623509E-004 + 123.41999999999999 -1.1364846810102069E-004 + 123.47999999999999 -1.1046805908668364E-004 + 123.53999999999999 -1.0719816174791731E-004 + 123.59999999999999 -1.0383264781908976E-004 + 123.66000000000000 -1.0036557910523415E-004 + 123.72000000000000 -9.6791225328708277E-005 + 123.78000000000000 -9.3104071055272609E-005 + 123.84000000000000 -8.9298807770489316E-005 + 123.90000000000001 -8.5370353893147552E-005 + 123.95999999999998 -8.1313844363315905E-005 + 124.01999999999998 -7.7124619753914694E-005 + 124.07999999999998 -7.2798259360712991E-005 + 124.13999999999999 -6.8330547183967954E-005 + 124.19999999999999 -6.3717493138086274E-005 + 124.25999999999999 -5.8955315741415314E-005 + 124.31999999999999 -5.4040451460935453E-005 + 124.38000000000000 -4.8969548275691915E-005 + 124.44000000000000 -4.3739465564361567E-005 + 124.50000000000000 -3.8347275328123267E-005 + 124.56000000000000 -3.2790264526730696E-005 + 124.62000000000000 -2.7065931551516910E-005 + 124.68000000000001 -2.1171991325467164E-005 + 124.73999999999998 -1.5106377310356730E-005 + 124.79999999999998 -8.8672461995999729E-006 + 124.85999999999999 -2.4529751377478195E-006 + 124.91999999999999 4.1378299315780117E-006 + 124.97999999999999 1.0906330066425475E-005 + 125.03999999999999 1.7853452927790806E-005 + 125.09999999999999 2.4979889995634542E-005 + 125.16000000000000 3.2286096725590823E-005 + 125.22000000000000 3.9772278377923297E-005 + 125.28000000000000 4.7438396196276066E-005 + 125.34000000000000 5.5284166954453864E-005 + 125.40000000000001 6.3309059262036088E-005 + 125.45999999999998 7.1512276928550677E-005 + 125.51999999999998 7.9892762091399644E-005 + 125.57999999999998 8.8449214333806664E-005 + 125.63999999999999 9.7180031629115574E-005 + 125.69999999999999 1.0608335742540943E-004 + 125.75999999999999 1.1515700548051893E-004 + 125.81999999999999 1.2439854865017730E-004 + 125.88000000000000 1.3380520229770189E-004 + 125.94000000000000 1.4337388394935490E-004 + 126.00000000000000 1.5310116300937607E-004 + 126.06000000000000 1.6298328540431662E-004 + 126.12000000000000 1.7301612344509314E-004 + 126.18000000000001 1.8319516356139388E-004 + 126.23999999999998 1.9351553146648384E-004 + 126.29999999999998 2.0397196772472954E-004 + 126.35999999999999 2.1455880618427746E-004 + 126.41999999999999 2.2526999548019472E-004 + 126.47999999999999 2.3609903622047958E-004 + 126.53999999999999 2.4703902963082492E-004 + 126.59999999999999 2.5808272048262519E-004 + 126.66000000000000 2.6922235402341053E-004 + 126.72000000000000 2.8044982860039869E-004 + 126.78000000000000 2.9175660338149082E-004 + 126.84000000000000 3.0313375687800854E-004 + 126.90000000000001 3.1457192981000046E-004 + 126.95999999999998 3.2606136716786479E-004 + 127.01999999999998 3.3759197015043561E-004 + 127.07999999999998 3.4915319076378768E-004 + 127.13999999999999 3.6073410791384315E-004 + 127.19999999999999 3.7232347967422296E-004 + 127.25999999999999 3.8390959515646945E-004 + 127.31999999999999 3.9548045310931962E-004 + 127.38000000000000 4.0702370815507902E-004 + 127.44000000000000 4.1852658564296019E-004 + 127.50000000000000 4.2997607482411499E-004 + 127.56000000000000 4.4135877839353169E-004 + 127.62000000000000 4.5266101812218163E-004 + 127.68000000000001 4.6386880604155309E-004 + 127.73999999999998 4.7496790624405720E-004 + 127.79999999999998 4.8594385028992800E-004 + 127.85999999999999 4.9678186057114241E-004 + 127.91999999999999 5.0746701433372512E-004 + 127.97999999999999 5.1798426579109224E-004 + 128.03999999999999 5.2831840547012412E-004 + 128.09999999999999 5.3845403107295308E-004 + 128.16000000000000 5.4837569016272258E-004 + 128.22000000000000 5.5806792935298019E-004 + 128.28000000000000 5.6751519158526934E-004 + 128.34000000000000 5.7670205490879410E-004 + 128.40000000000001 5.8561299931012814E-004 + 128.45999999999998 5.9423266524278879E-004 + 128.51999999999998 6.0254581006651204E-004 + 128.57999999999998 6.1053724615108029E-004 + 128.63999999999999 6.1819194692435536E-004 + 128.69999999999999 6.2549522558806700E-004 + 128.75999999999999 6.3243257504224932E-004 + 128.81999999999999 6.3898978154101611E-004 + 128.88000000000000 6.4515285968470089E-004 + 128.94000000000000 6.5090836081918709E-004 + 129.00000000000000 6.5624302706430646E-004 + 129.06000000000000 6.6114415052705860E-004 + 129.12000000000000 6.6559938213930664E-004 + 129.18000000000001 6.6959707139229525E-004 + 129.23999999999998 6.7312584942678672E-004 + 129.29999999999998 6.7617504056467672E-004 + 129.35999999999999 6.7873457620460081E-004 + 129.41999999999999 6.8079499176090514E-004 + 129.47999999999999 6.8234757407132024E-004 + 129.53999999999999 6.8338430985774730E-004 + 129.59999999999999 6.8389780895146532E-004 + 129.66000000000000 6.8388158336509127E-004 + 129.72000000000000 6.8332978636748555E-004 + 129.78000000000000 6.8223752409355104E-004 + 129.84000000000000 6.8060069472284821E-004 + 129.90000000000001 6.7841601564423357E-004 + 129.95999999999998 6.7568119384822916E-004 + 130.01999999999998 6.7239481663944225E-004 + 130.07999999999998 6.6855630379939965E-004 + 130.13999999999999 6.6416615198793081E-004 + 130.19999999999999 6.5922567992342457E-004 + 130.25999999999999 6.5373735731666664E-004 + 130.31999999999999 6.4770450051577133E-004 + 130.38000000000000 6.4113144458666997E-004 + 130.44000000000000 6.3402356398511344E-004 + 130.50000000000000 6.2638718789535916E-004 + 130.56000000000000 6.1822970540901395E-004 + 130.62000000000000 6.0955952256090565E-004 + 130.68000000000001 6.0038597980208283E-004 + 130.73999999999998 5.9071936677063249E-004 + 130.79999999999998 5.8057120508537121E-004 + 130.85999999999999 5.6995369927157001E-004 + 130.91999999999999 5.5888016269421735E-004 + 130.97999999999999 5.4736478223633056E-004 + 131.03999999999999 5.3542264214338591E-004 + 131.09999999999999 5.2306990140460648E-004 + 131.16000000000000 5.1032331587182850E-004 + 131.22000000000000 4.9720060998357976E-004 + 131.28000000000000 4.8372034549458908E-004 + 131.34000000000000 4.6990184986622709E-004 + 131.40000000000001 4.5576518483644222E-004 + 131.45999999999998 4.4133114544194792E-004 + 131.51999999999998 4.2662113822884262E-004 + 131.57999999999998 4.1165731528199729E-004 + 131.63999999999999 3.9646230961528956E-004 + 131.69999999999999 3.8105942886431976E-004 + 131.75999999999999 3.6547246304146437E-004 + 131.81999999999999 3.4972562421689118E-004 + 131.88000000000000 3.3384357153843752E-004 + 131.94000000000000 3.1785126958588060E-004 + 132.00000000000000 3.0177404276770782E-004 + 132.06000000000000 2.8563746779469820E-004 + 132.12000000000000 2.6946722042199171E-004 + 132.18000000000001 2.5328915734498873E-004 + 132.23999999999998 2.3712916042743339E-004 + 132.29999999999998 2.2101311109388224E-004 + 132.35999999999999 2.0496680103771457E-004 + 132.41999999999999 1.8901590449868123E-004 + 132.47999999999999 1.7318586908964903E-004 + 132.53999999999999 1.5750189811061086E-004 + 132.59999999999999 1.4198885564985160E-004 + 132.66000000000000 1.2667124463195846E-004 + 132.72000000000000 1.1157312551761790E-004 + 132.78000000000000 9.6718060279528010E-005 + 132.84000000000000 8.2129078079856029E-005 + 132.90000000000001 6.7828602567881701E-005 + 132.95999999999998 5.3838419184298209E-005 + 133.01999999999998 4.0179613336730006E-005 + 133.07999999999998 2.6872530194432960E-005 + 133.13999999999999 1.3936713277984389E-005 + 133.19999999999999 1.3908656945084730E-006 + 133.25999999999999 -1.0747194485927194E-005 + 133.31999999999999 -2.2460591459922792E-005 + 133.38000000000000 -3.3733422222227196E-005 + 133.44000000000000 -4.4550809317084363E-005 + 133.50000000000000 -5.4898941338370753E-005 + 133.56000000000000 -6.4765104157262141E-005 + 133.62000000000000 -7.4137711720302009E-005 + 133.68000000000001 -8.3006343155803263E-005 + 133.73999999999998 -9.1361778045094831E-005 + 133.79999999999998 -9.9195998046613549E-005 + 133.85999999999999 -1.0650220010059804E-004 + 133.91999999999999 -1.1327486686859313E-004 + 133.97999999999999 -1.1950965891462743E-004 + 134.03999999999999 -1.2520354184170760E-004 + 134.09999999999999 -1.3035469201409076E-004 + 134.16000000000000 -1.3496254542673925E-004 + 134.22000000000000 -1.3902775494431039E-004 + 134.28000000000000 -1.4255220822668543E-004 + 134.34000000000000 -1.4553896923359580E-004 + 134.40000000000001 -1.4799229731240517E-004 + 134.45999999999998 -1.4991762605874053E-004 + 134.51999999999998 -1.5132150547067402E-004 + 134.57999999999998 -1.5221162966932560E-004 + 134.63999999999999 -1.5259678798778322E-004 + 134.69999999999999 -1.5248679285762771E-004 + 134.75999999999999 -1.5189253909020730E-004 + 134.81999999999999 -1.5082591315067741E-004 + 134.88000000000000 -1.4929976819360829E-004 + 134.94000000000000 -1.4732789145737349E-004 + 135.00000000000000 -1.4492497537952538E-004 + 135.06000000000000 -1.4210657904577587E-004 + 135.12000000000000 -1.3888907700763053E-004 + 135.18000000000001 -1.3528958829972314E-004 + 135.23999999999998 -1.3132599899986976E-004 + 135.29999999999998 -1.2701683919553989E-004 + 135.35999999999999 -1.2238126442235133E-004 + 135.41999999999999 -1.1743901258543177E-004 + 135.47999999999999 -1.1221034717190544E-004 + 135.53999999999999 -1.0671595707429983E-004 + 135.59999999999999 -1.0097695400120509E-004 + 135.66000000000000 -9.5014816912970058E-005 + 135.72000000000000 -8.8851271255703737E-005 + 135.78000000000000 -8.2508320331058381E-005 + 135.84000000000000 -7.6008116796247541E-005 + 135.90000000000001 -6.9372957611542498E-005 + 135.95999999999998 -6.2625192690527072E-005 + 136.01999999999998 -5.5787201687107228E-005 + 136.07999999999998 -4.8881318304450474E-005 + 136.13999999999999 -4.1929794118795907E-005 + 136.19999999999999 -3.4954747232504853E-005 + 136.25999999999999 -2.7978097393510244E-005 + 136.31999999999999 -2.1021554532293085E-005 + 136.38000000000000 -1.4106528337871220E-005 + 136.44000000000000 -7.2541323531630179E-006 + 136.50000000000000 -4.8510076872397394E-007 + 136.56000000000000 6.1802156450205808E-006 + 136.62000000000000 1.2721901105158241E-005 + 136.68000000000001 1.9120507314354662E-005 + 136.73999999999998 2.5357083499946257E-005 + 136.79999999999998 3.1413203692820673E-005 + 136.85999999999999 3.7270991681380975E-005 + 136.91999999999999 4.2913146434258125E-005 + 136.97999999999999 4.8322961965732253E-005 + 137.03999999999999 5.3484346478483374E-005 + 137.09999999999999 5.8381852476362201E-005 + 137.16000000000000 6.3000681724208687E-005 + 137.22000000000000 6.7326713956193088E-005 + 137.28000000000000 7.1346513053827508E-005 + 137.34000000000000 7.5047350274310331E-005 + 137.40000000000001 7.8417213406356000E-005 + 137.45999999999998 8.1444834074398566E-005 + 137.51999999999998 8.4119673550609817E-005 + 137.57999999999998 8.6431978129152760E-005 + 137.63999999999999 8.8372741469688870E-005 + 137.69999999999999 8.9933749423960722E-005 + 137.75999999999999 9.1107562569648045E-005 + 137.81999999999999 9.1887538330977353E-005 + 137.88000000000000 9.2267807020217298E-005 + 137.94000000000000 9.2243300896169747E-005 + 138.00000000000000 9.1809711056840254E-005 + 138.06000000000000 9.0963498088583904E-005 + 138.12000000000000 8.9701870251527037E-005 + 138.18000000000001 8.8022767260428794E-005 + 138.23999999999998 8.5924859160802153E-005 + 138.29999999999998 8.3407496824832410E-005 + 138.35999999999999 8.0470710993353080E-005 + 138.41999999999999 7.7115170009795436E-005 + 138.47999999999999 7.3342186048263686E-005 + 138.53999999999999 6.9153674894715438E-005 + 138.59999999999999 6.4552136135826124E-005 + 138.66000000000000 5.9540641917464153E-005 + 138.72000000000000 5.4122805912784750E-005 + 138.78000000000000 4.8302780736596954E-005 + 138.84000000000000 4.2085238398852730E-005 + 138.90000000000001 3.5475369971258174E-005 + 138.95999999999998 2.8478838806845069E-005 + 139.01999999999998 2.1101808908308026E-005 + 139.07999999999998 1.3350906951584346E-005 + 139.13999999999999 5.2332311328838755E-006 + 139.19999999999999 -3.2437014439621873E-006 + 139.25999999999999 -1.2071920077100790E-005 + 139.31999999999999 -2.1243046199353716E-005 + 139.38000000000000 -3.0748311576516457E-005 + 139.44000000000000 -4.0578574479301176E-005 + 139.50000000000000 -5.0724331506555270E-005 + 139.56000000000000 -6.1175755380174084E-005 + 139.62000000000000 -7.1922707065529668E-005 + 139.68000000000001 -8.2954776306744818E-005 + 139.73999999999998 -9.4261282215976578E-005 + 139.79999999999998 -1.0583131241836759E-004 + 139.85999999999999 -1.1765375717719224E-004 + 139.91999999999999 -1.2971729009940238E-004 + 139.97999999999999 -1.4201041412027277E-004 + 140.03999999999999 -1.5452149892408279E-004 + 140.09999999999999 -1.6723874789070496E-004 + 140.16000000000000 -1.8015023439164283E-004 + 140.22000000000000 -1.9324393088062663E-004 + 140.28000000000000 -2.0650767458797815E-004 + 140.34000000000000 -2.1992921718254035E-004 + 140.40000000000001 -2.3349619037917857E-004 + 140.45999999999998 -2.4719614570789880E-004 + 140.51999999999998 -2.6101655028678113E-004 + 140.57999999999998 -2.7494476591456376E-004 + 140.63999999999999 -2.8896808710378221E-004 + 140.69999999999999 -3.0307373890154472E-004 + 140.75999999999999 -3.1724882555781163E-004 + 140.81999999999999 -3.3148045440616492E-004 + 140.88000000000000 -3.4575563257157276E-004 + 140.94000000000000 -3.6006130895079513E-004 + 141.00000000000000 -3.7438436568734869E-004 + 141.06000000000000 -3.8871164615667626E-004 + 141.12000000000000 -4.0303004134527331E-004 + 141.18000000000001 -4.1732629311026510E-004 + 141.23999999999998 -4.3158721805484907E-004 + 141.29999999999998 -4.4579951915802574E-004 + 141.35999999999999 -4.5994995034967891E-004 + 141.41999999999999 -4.7402528198771859E-004 + 141.47999999999999 -4.8801220960909865E-004 + 141.53999999999999 -5.0189751642964976E-004 + 141.59999999999999 -5.1566800204383520E-004 + 141.66000000000000 -5.2931036148239205E-004 + 141.72000000000000 -5.4281152830397124E-004 + 141.78000000000000 -5.5615826297187047E-004 + 141.84000000000000 -5.6933755247163891E-004 + 141.90000000000001 -5.8233626635026013E-004 + 141.95999999999998 -5.9514148001509233E-004 + 142.01999999999998 -6.0774018392011433E-004 + 142.07999999999998 -6.2011953317910398E-004 + 142.13999999999999 -6.3226666922607227E-004 + 142.19999999999999 -6.4416890051571579E-004 + 142.25999999999999 -6.5581352812057916E-004 + 142.31999999999999 -6.6718796942091016E-004 + 142.38000000000000 -6.7827974595626491E-004 + 142.44000000000000 -6.8907642148939661E-004 + 142.50000000000000 -6.9956568898508684E-004 + 142.56000000000000 -7.0973530057344804E-004 + 142.62000000000000 -7.1957321382327716E-004 + 142.68000000000001 -7.2906746048927206E-004 + 142.73999999999998 -7.3820611386675417E-004 + 142.79999999999998 -7.4697751361700094E-004 + 142.85999999999999 -7.5537021293245075E-004 + 142.91999999999999 -7.6337284442643222E-004 + 142.97999999999999 -7.7097423948067521E-004 + 143.03999999999999 -7.7816356306937542E-004 + 143.09999999999999 -7.8493015193364045E-004 + 143.16000000000000 -7.9126365199895131E-004 + 143.22000000000000 -7.9715409637859792E-004 + 143.28000000000000 -8.0259179465259564E-004 + 143.34000000000000 -8.0756728732055800E-004 + 143.40000000000001 -8.1207175689021016E-004 + 143.45999999999998 -8.1609664118460041E-004 + 143.51999999999998 -8.1963373886412261E-004 + 143.57999999999998 -8.2267550375509399E-004 + 143.63999999999999 -8.2521471438984720E-004 + 143.69999999999999 -8.2724470531325733E-004 + 143.75999999999999 -8.2875926885985407E-004 + 143.81999999999999 -8.2975278388148772E-004 + 143.88000000000000 -8.3022014653923507E-004 + 143.94000000000000 -8.3015687140650682E-004 + 144.00000000000000 -8.2955888627952328E-004 + 144.06000000000000 -8.2842287438268430E-004 + 144.12000000000000 -8.2674611655226041E-004 + 144.18000000000001 -8.2452647608070515E-004 + 144.23999999999998 -8.2176254242460737E-004 + 144.29999999999998 -8.1845350140189973E-004 + 144.35999999999999 -8.1459930542226262E-004 + 144.41999999999999 -8.1020062617802107E-004 + 144.47999999999999 -8.0525879096903798E-004 + 144.53999999999999 -7.9977594631202892E-004 + 144.59999999999999 -7.9375498984381155E-004 + 144.66000000000000 -7.8719962857475554E-004 + 144.72000000000000 -7.8011444132427611E-004 + 144.78000000000000 -7.7250466374936876E-004 + 144.84000000000000 -7.6437647901672449E-004 + 144.90000000000001 -7.5573676983089523E-004 + 144.95999999999998 -7.4659327973560982E-004 + 145.01999999999998 -7.3695456198116197E-004 + 145.07999999999998 -7.2682995159344165E-004 + 145.13999999999999 -7.1622948750890995E-004 + 145.19999999999999 -7.0516399485017161E-004 + 145.25999999999999 -6.9364503191964889E-004 + 145.31999999999999 -6.8168488646921965E-004 + 145.38000000000000 -6.6929652938215974E-004 + 145.44000000000000 -6.5649359726640709E-004 + 145.50000000000000 -6.4329027603238047E-004 + 145.56000000000000 -6.2970148552894949E-004 + 145.62000000000000 -6.1574253136214945E-004 + 145.68000000000001 -6.0142949686622124E-004 + 145.73999999999998 -5.8677881339946891E-004 + 145.79999999999998 -5.7180742752973462E-004 + 145.85999999999999 -5.5653280304212085E-004 + 145.91999999999999 -5.4097273419761451E-004 + 145.97999999999999 -5.2514545290010639E-004 + 146.03999999999999 -5.0906954547505240E-004 + 146.09999999999999 -4.9276377571017959E-004 + 146.16000000000000 -4.7624723404796716E-004 + 146.22000000000000 -4.5953926467058598E-004 + 146.28000000000000 -4.4265929416424914E-004 + 146.34000000000000 -4.2562687535406833E-004 + 146.40000000000001 -4.0846166692560712E-004 + 146.45999999999998 -3.9118331550113864E-004 + 146.51999999999998 -3.7381139159103454E-004 + 146.57999999999998 -3.5636544485380173E-004 + 146.63999999999999 -3.3886480730911282E-004 + 146.69999999999999 -3.2132872230742542E-004 + 146.75999999999999 -3.0377615549897504E-004 + 146.81999999999999 -2.8622581716513464E-004 + 146.88000000000000 -2.6869606173894676E-004 + 146.94000000000000 -2.5120491444732021E-004 + 147.00000000000000 -2.3377005486548011E-004 + 147.06000000000000 -2.1640866840054245E-004 + 147.12000000000000 -1.9913752153034604E-004 + 147.18000000000001 -1.8197288786486623E-004 + 147.23999999999998 -1.6493051315978407E-004 + 147.29999999999998 -1.4802560665753441E-004 + 147.35999999999999 -1.3127281867721411E-004 + 147.41999999999999 -1.1468619637988739E-004 + 147.47999999999999 -9.8279204620191788E-005 + 147.53999999999999 -8.2064685429526985E-005 + 147.59999999999999 -6.6054841025300443E-005 + 147.66000000000000 -5.0261252292361711E-005 + 147.72000000000000 -3.4694835991542299E-005 + 147.78000000000000 -1.9365869717554060E-005 + 147.84000000000000 -4.2839732664821407E-006 + 147.90000000000001 1.0541876504700671E-005 + 147.95999999999998 2.5103347937984915E-005 + 148.01999999999998 3.9392748657589534E-005 + 148.07999999999998 5.3403011117597325E-005 + 148.13999999999999 6.7127689109340564E-005 + 148.19999999999999 8.0560932402180788E-005 + 148.25999999999999 9.3697482986923169E-005 + 148.31999999999999 1.0653263954208826E-004 + 148.38000000000000 1.1906225223183440E-004 + 148.44000000000000 1.3128270880511807E-004 + 148.50000000000000 1.4319087340079243E-004 + 148.56000000000000 1.5478411952039278E-004 + 148.62000000000000 1.6606024786819946E-004 + 148.68000000000001 1.7701752251603542E-004 + 148.73999999999998 1.8765457775995226E-004 + 148.79999999999998 1.9797044367211270E-004 + 148.85999999999999 2.0796445762491777E-004 + 148.91999999999999 2.1763632106775423E-004 + 148.97999999999999 2.2698599770590812E-004 + 149.03999999999999 2.3601370486056619E-004 + 149.09999999999999 2.4471984379604471E-004 + 149.16000000000000 2.5310508685649590E-004 + 149.22000000000000 2.6117021639534318E-004 + 149.28000000000000 2.6891616113121277E-004 + 149.34000000000000 2.7634393708936636E-004 + 149.40000000000001 2.8345469924044196E-004 + 149.45999999999998 2.9024959180272533E-004 + 149.51999999999998 2.9672987381265144E-004 + 149.57999999999998 3.0289675938671083E-004 + 149.63999999999999 3.0875155341440253E-004 + 149.69999999999999 3.1429547400753621E-004 + 149.75999999999999 3.1952977308457740E-004 + 149.81999999999999 3.2445568922314635E-004 + 149.88000000000000 3.2907445593378964E-004 + 149.94000000000000 3.3338721763853966E-004 + 150.00000000000000 3.3739515322627384E-004 + 150.06000000000000 3.4109938257190686E-004 + 150.12000000000000 3.4450099812821422E-004 + 150.18000000000001 3.4760112577527459E-004 + 150.23999999999998 3.5040076832508520E-004 + 150.29999999999998 3.5290099728682746E-004 + 150.35999999999999 3.5510281597927421E-004 + 150.41999999999999 3.5700720288350070E-004 + 150.47999999999999 3.5861517506348330E-004 + 150.53999999999999 3.5992770408816810E-004 + 150.59999999999999 3.6094577041546514E-004 + 150.66000000000000 3.6167037171804477E-004 + 150.72000000000000 3.6210250395379509E-004 + 150.78000000000000 3.6224318383976334E-004 + 150.84000000000000 3.6209344926938148E-004 + 150.90000000000001 3.6165446215848048E-004 + 150.95999999999998 3.6092737422398398E-004 + 151.01999999999998 3.5991344265104874E-004 + 151.07999999999998 3.5861402332546227E-004 + 151.13999999999999 3.5703068128465710E-004 + 151.19999999999999 3.5516499992620113E-004 + 151.25999999999999 3.5301879972401946E-004 + 151.31999999999999 3.5059407613307909E-004 + 151.38000000000000 3.4789303234136445E-004 + 151.44000000000000 3.4491804149718497E-004 + 151.50000000000000 3.4167177886043729E-004 + 151.56000000000000 3.3815710281166175E-004 + 151.62000000000000 3.3437715594893076E-004 + 151.68000000000001 3.3033530933546313E-004 + 151.73999999999998 3.2603525332988508E-004 + 151.79999999999998 3.2148092289598882E-004 + 151.85999999999999 3.1667652217093469E-004 + 151.91999999999999 3.1162648141252238E-004 + 151.97999999999999 3.0633553823804802E-004 + 152.03999999999999 3.0080867293869138E-004 + 152.09999999999999 2.9505111317348621E-004 + 152.16000000000000 2.8906835815249954E-004 + 152.22000000000000 2.8286610709759056E-004 + 152.28000000000000 2.7645035174613219E-004 + 152.34000000000000 2.6982724717387565E-004 + 152.40000000000001 2.6300322553467762E-004 + 152.45999999999998 2.5598494363144946E-004 + 152.51999999999998 2.4877919188484441E-004 + 152.57999999999998 2.4139302358695827E-004 + 152.63999999999999 2.3383368077668963E-004 + 152.69999999999999 2.2610856954176573E-004 + 152.75999999999999 2.1822527034899404E-004 + 152.81999999999999 2.1019153461717533E-004 + 152.88000000000000 2.0201523049143179E-004 + 152.94000000000000 1.9370437439870057E-004 + 153.00000000000000 1.8526709409950003E-004 + 153.06000000000000 1.7671159884893355E-004 + 153.12000000000000 1.6804618633956995E-004 + 153.17999999999998 1.5927920905307264E-004 + 153.23999999999998 1.5041904979124635E-004 + 153.29999999999998 1.4147411571317691E-004 + 153.35999999999999 1.3245282003905481E-004 + 153.41999999999999 1.2336351888160845E-004 + 153.47999999999999 1.1421455623537350E-004 + 153.53999999999999 1.0501422310555918E-004 + 153.59999999999999 9.5770736447088519E-005 + 153.66000000000000 8.6492205033146532E-005 + 153.72000000000000 7.7186658467442073E-005 + 153.78000000000000 6.7862002456033107E-005 + 153.84000000000000 5.8526015451964247E-005 + 153.90000000000001 4.9186332364011441E-005 + 153.95999999999998 3.9850448973964106E-005 + 154.01999999999998 3.0525690774305815E-005 + 154.07999999999998 2.1219221631435628E-005 + 154.13999999999999 1.1938020721147374E-005 + 154.19999999999999 2.6888906742610535E-006 + 154.25999999999999 -6.5215592425757585E-006 + 154.31999999999999 -1.5686919651560551E-005 + 154.38000000000000 -2.4800980513523181E-005 + 154.44000000000000 -3.3857742861194119E-005 + 154.50000000000000 -4.2851413693653932E-005 + 154.56000000000000 -5.1776408300523505E-005 + 154.62000000000000 -6.0627357293574759E-005 + 154.67999999999998 -6.9399101803301199E-005 + 154.73999999999998 -7.8086698255826962E-005 + 154.79999999999998 -8.6685400869896008E-005 + 154.85999999999999 -9.5190684056001596E-005 + 154.91999999999999 -1.0359821309400454E-004 + 154.97999999999999 -1.1190385636723365E-004 + 155.03999999999999 -1.2010367224820164E-004 + 155.09999999999999 -1.2819389798753906E-004 + 155.16000000000000 -1.3617096731871348E-004 + 155.22000000000000 -1.4403146924181994E-004 + 155.28000000000000 -1.5177217689891581E-004 + 155.34000000000000 -1.5939000806901391E-004 + 155.40000000000001 -1.6688204539091339E-004 + 155.45999999999998 -1.7424551500024732E-004 + 155.51999999999998 -1.8147779618515178E-004 + 155.57999999999998 -1.8857637396483325E-004 + 155.63999999999999 -1.9553890005134821E-004 + 155.69999999999999 -2.0236310307560686E-004 + 155.75999999999999 -2.0904683830265370E-004 + 155.81999999999999 -2.1558808561771269E-004 + 155.88000000000000 -2.2198490428806364E-004 + 155.94000000000000 -2.2823541150689925E-004 + 156.00000000000000 -2.3433784461677210E-004 + 156.06000000000000 -2.4029051230645585E-004 + 156.12000000000000 -2.4609177266584085E-004 + 156.17999999999998 -2.5174006694213101E-004 + 156.23999999999998 -2.5723384030136906E-004 + 156.29999999999998 -2.6257162133063561E-004 + 156.35999999999999 -2.6775200195166713E-004 + 156.41999999999999 -2.7277358091561669E-004 + 156.47999999999999 -2.7763501507080586E-004 + 156.53999999999999 -2.8233498596142673E-004 + 156.59999999999999 -2.8687228548994893E-004 + 156.66000000000000 -2.9124563056924036E-004 + 156.72000000000000 -2.9545386874325983E-004 + 156.78000000000000 -2.9949582844744237E-004 + 156.84000000000000 -3.0337047521268373E-004 + 156.90000000000001 -3.0707668741981832E-004 + 156.95999999999998 -3.1061347202264271E-004 + 157.01999999999998 -3.1397986179193218E-004 + 157.07999999999998 -3.1717491976035900E-004 + 157.13999999999999 -3.2019781943182056E-004 + 157.19999999999999 -3.2304774327940317E-004 + 157.25999999999999 -3.2572392894196755E-004 + 157.31999999999999 -3.2822571474554560E-004 + 157.38000000000000 -3.3055250920024167E-004 + 157.44000000000000 -3.3270376659177666E-004 + 157.50000000000000 -3.3467903374956700E-004 + 157.56000000000000 -3.3647793609849354E-004 + 157.62000000000000 -3.3810023680270378E-004 + 157.67999999999998 -3.3954577521177375E-004 + 157.73999999999998 -3.4081455054581260E-004 + 157.79999999999998 -3.4190664987738368E-004 + 157.85999999999999 -3.4282230295915728E-004 + 157.91999999999999 -3.4356193143166366E-004 + 157.97999999999999 -3.4412604246081670E-004 + 158.03999999999999 -3.4451538890144652E-004 + 158.09999999999999 -3.4473083166198680E-004 + 158.16000000000000 -3.4477346327877330E-004 + 158.22000000000000 -3.4464450184120760E-004 + 158.28000000000000 -3.4434538938426661E-004 + 158.34000000000000 -3.4387774050092412E-004 + 158.40000000000001 -3.4324337038691951E-004 + 158.45999999999998 -3.4244419782953651E-004 + 158.51999999999998 -3.4148239685927336E-004 + 158.57999999999998 -3.4036031352738385E-004 + 158.63999999999999 -3.3908044791408653E-004 + 158.69999999999999 -3.3764542916644400E-004 + 158.75999999999999 -3.3605811523082708E-004 + 158.81999999999999 -3.3432148205022222E-004 + 158.88000000000000 -3.3243862354682681E-004 + 158.94000000000000 -3.3041288119517155E-004 + 159.00000000000000 -3.2824770097110353E-004 + 159.06000000000000 -3.2594666021869533E-004 + 159.12000000000000 -3.2351351637301514E-004 + 159.17999999999998 -3.2095212712477598E-004 + 159.23999999999998 -3.1826653833834427E-004 + 159.29999999999998 -3.1546092991409271E-004 + 159.35999999999999 -3.1253963437418965E-004 + 159.41999999999999 -3.0950701532640301E-004 + 159.47999999999999 -3.0636766365082764E-004 + 159.53999999999999 -3.0312622472640835E-004 + 159.59999999999999 -2.9978738003289760E-004 + 159.66000000000000 -2.9635598075485650E-004 + 159.72000000000000 -2.9283685455039099E-004 + 159.78000000000000 -2.8923488532492327E-004 + 159.84000000000000 -2.8555501648829039E-004 + 159.90000000000001 -2.8180215711104265E-004 + 159.95999999999998 -2.7798115630820131E-004 + 160.01999999999998 -2.7409687069086309E-004 + 160.07999999999998 -2.7015403134972424E-004 + 160.13999999999999 -2.6615731946128099E-004 + 160.19999999999999 -2.6211134419892385E-004 + 160.25999999999999 -2.5802055056868231E-004 + 160.31999999999999 -2.5388927849524665E-004 + 160.38000000000000 -2.4972171758039512E-004 + 160.44000000000000 -2.4552194598034360E-004 + 160.50000000000000 -2.4129387324614508E-004 + 160.56000000000000 -2.3704121683960512E-004 + 160.62000000000000 -2.3276757883525977E-004 + 160.67999999999998 -2.2847635055849524E-004 + 160.73999999999998 -2.2417080341087991E-004 + 160.79999999999998 -2.1985399322368082E-004 + 160.85999999999999 -2.1552881957577982E-004 + 160.91999999999999 -2.1119802422056621E-004 + 160.97999999999999 -2.0686412597637995E-004 + 161.03999999999999 -2.0252950449600989E-004 + 161.09999999999999 -1.9819633940502699E-004 + 161.16000000000000 -1.9386665779906698E-004 + 161.22000000000000 -1.8954225321480249E-004 + 161.28000000000000 -1.8522477796565094E-004 + 161.34000000000000 -1.8091568080797325E-004 + 161.40000000000001 -1.7661621468943598E-004 + 161.45999999999998 -1.7232746311789476E-004 + 161.51999999999998 -1.6805034929061314E-004 + 161.57999999999998 -1.6378559070902036E-004 + 161.63999999999999 -1.5953376420343711E-004 + 161.69999999999999 -1.5529529736716879E-004 + 161.75999999999999 -1.5107046083195298E-004 + 161.81999999999999 -1.4685939883479933E-004 + 161.88000000000000 -1.4266215316057878E-004 + 161.94000000000000 -1.3847867677576391E-004 + 162.00000000000000 -1.3430881793974822E-004 + 162.06000000000000 -1.3015238818043994E-004 + 162.12000000000000 -1.2600916031631047E-004 + 162.17999999999998 -1.2187890775549842E-004 + 162.23999999999998 -1.1776139446576756E-004 + 162.29999999999998 -1.1365642872405021E-004 + 162.35999999999999 -1.0956385878934868E-004 + 162.41999999999999 -1.0548363292884259E-004 + 162.47999999999999 -1.0141577564736200E-004 + 162.53999999999999 -9.7360461059433270E-005 + 162.59999999999999 -9.3317976267929943E-005 + 162.66000000000000 -8.9288775077486042E-005 + 162.72000000000000 -8.5273499477811645E-005 + 162.78000000000000 -8.1272968084363843E-005 + 162.84000000000000 -7.7288218013087410E-005 + 162.90000000000001 -7.3320488235321580E-005 + 162.95999999999998 -6.9371261141395885E-005 + 163.01999999999998 -6.5442248757315908E-005 + 163.07999999999998 -6.1535409082625521E-005 + 163.13999999999999 -5.7652952375439684E-005 + 163.19999999999999 -5.3797353356829176E-005 + 163.25999999999999 -4.9971337978066608E-005 + 163.31999999999999 -4.6177904790489698E-005 + 163.38000000000000 -4.2420315969987917E-005 + 163.44000000000000 -3.8702103362406196E-005 + 163.50000000000000 -3.5027078863023081E-005 + 163.56000000000000 -3.1399324383043262E-005 + 163.62000000000000 -2.7823213772254958E-005 + 163.67999999999998 -2.4303395974431109E-005 + 163.73999999999998 -2.0844803206739860E-005 + 163.79999999999998 -1.7452649521743429E-005 + 163.85999999999999 -1.4132441047011221E-005 + 163.91999999999999 -1.0889954857711624E-005 + 163.97999999999999 -7.7312544926792642E-006 + 164.03999999999999 -4.6626670966167869E-006 + 164.09999999999999 -1.6907841272899382E-006 + 164.16000000000000 1.1775544191637487E-006 + 164.22000000000000 3.9352744656256772E-006 + 164.28000000000000 6.5750843146024153E-006 + 164.34000000000000 9.0895021240902611E-006 + 164.40000000000001 1.1470870890275160E-005 + 164.45999999999998 1.3711389526865712E-005 + 164.51999999999998 1.5803145221248612E-005 + 164.57999999999998 1.7738127499387189E-005 + 164.63999999999999 1.9508279811014887E-005 + 164.69999999999999 2.1105505658253840E-005 + 164.75999999999999 2.2521722509908832E-005 + 164.81999999999999 2.3748865872350000E-005 + 164.88000000000000 2.4778944863314311E-005 + 164.94000000000000 2.5604041769225852E-005 + 165.00000000000000 2.6216351574970990E-005 + 165.06000000000000 2.6608203888609534E-005 + 165.12000000000000 2.6772070975662288E-005 + 165.17999999999998 2.6700604180370110E-005 + 165.23999999999998 2.6386639511071321E-005 + 165.29999999999998 2.5823217147832732E-005 + 165.35999999999999 2.5003597346682776E-005 + 165.41999999999999 2.3921277883534854E-005 + 165.47999999999999 2.2570017459456372E-005 + 165.53999999999999 2.0943830912021045E-005 + 165.59999999999999 1.9037033511361896E-005 + 165.66000000000000 1.6844248163288554E-005 + 165.72000000000000 1.4360424112114092E-005 + 165.78000000000000 1.1580858937411308E-005 + 165.84000000000000 8.5012235608671965E-006 + 165.90000000000001 5.1175707099720816E-006 + 165.95999999999998 1.4263705788047319E-006 + 166.01999999999998 -2.5754676963058465E-006 + 166.07999999999998 -6.8905920053842932E-006 + 166.13999999999999 -1.1521181953867130E-005 + 166.19999999999999 -1.6468937660779135E-005 + 166.25999999999999 -2.1735056823510870E-005 + 166.31999999999999 -2.7320242793488483E-005 + 166.38000000000000 -3.3224691526249633E-005 + 166.44000000000000 -3.9448076213108929E-005 + 166.50000000000000 -4.5989571180912107E-005 + 166.56000000000000 -5.2847833327207807E-005 + 166.62000000000000 -6.0021022979076717E-005 + 166.67999999999998 -6.7506791859230761E-005 + 166.73999999999998 -7.5302314290994629E-005 + 166.79999999999998 -8.3404270476407740E-005 + 166.85999999999999 -9.1808870683291374E-005 + 166.91999999999999 -1.0051187797542447E-004 + 166.97999999999999 -1.0950857312396962E-004 + 167.03999999999999 -1.1879381647453708E-004 + 167.09999999999999 -1.2836203298216830E-004 + 167.16000000000000 -1.3820722187077333E-004 + 167.22000000000000 -1.4832292972016093E-004 + 167.28000000000000 -1.5870232652477498E-004 + 167.34000000000000 -1.6933814638452342E-004 + 167.40000000000001 -1.8022273013045367E-004 + 167.45999999999998 -1.9134802984587524E-004 + 167.51999999999998 -2.0270561064102217E-004 + 167.57999999999998 -2.1428666053181477E-004 + 167.63999999999999 -2.2608196086315824E-004 + 167.69999999999999 -2.3808197168928279E-004 + 167.75999999999999 -2.5027676488611149E-004 + 167.81999999999999 -2.6265606480696719E-004 + 167.88000000000000 -2.7520928200947139E-004 + 167.94000000000000 -2.8792543623639387E-004 + 168.00000000000000 -3.0079332428423043E-004 + 168.06000000000000 -3.1380140967912867E-004 + 168.12000000000000 -3.2693785667754289E-004 + 168.17999999999998 -3.4019058094436367E-004 + 168.23999999999998 -3.5354718952249162E-004 + 168.29999999999998 -3.6699505082164063E-004 + 168.35999999999999 -3.8052134254831056E-004 + 168.41999999999999 -3.9411295333469315E-004 + 168.47999999999999 -4.0775660677297578E-004 + 168.53999999999999 -4.2143885630790230E-004 + 168.59999999999999 -4.3514596627349471E-004 + 168.66000000000000 -4.4886407051287602E-004 + 168.72000000000000 -4.6257909267263873E-004 + 168.78000000000000 -4.7627679145557770E-004 + 168.84000000000000 -4.8994281154832750E-004 + 168.90000000000001 -5.0356257766220273E-004 + 168.95999999999998 -5.1712135144827136E-004 + 169.01999999999998 -5.3060429534785029E-004 + 169.07999999999998 -5.4399638836007255E-004 + 169.13999999999999 -5.5728249138175569E-004 + 169.19999999999999 -5.7044727211641639E-004 + 169.25999999999999 -5.8347525227578682E-004 + 169.31999999999999 -5.9635092872499171E-004 + 169.38000000000000 -6.0905860611564942E-004 + 169.44000000000000 -6.2158245257092830E-004 + 169.50000000000000 -6.3390648160684929E-004 + 169.56000000000000 -6.4601469815637330E-004 + 169.62000000000000 -6.5789097051361148E-004 + 169.67999999999998 -6.6951906379396093E-004 + 169.73999999999998 -6.8088277128582303E-004 + 169.79999999999998 -6.9196573782544831E-004 + 169.85999999999999 -7.0275157308492570E-004 + 169.91999999999999 -7.1322399783890799E-004 + 169.97999999999999 -7.2336661565617526E-004 + 170.03999999999999 -7.3316311377897398E-004 + 170.09999999999999 -7.4259721205893303E-004 + 170.16000000000000 -7.5165272862984147E-004 + 170.22000000000000 -7.6031354523488457E-004 + 170.28000000000000 -7.6856366260435029E-004 + 170.34000000000000 -7.7638721942935827E-004 + 170.40000000000001 -7.8376850326695449E-004 + 170.45999999999998 -7.9069195300574186E-004 + 170.51999999999998 -7.9714221203590742E-004 + 170.57999999999998 -8.0310414903490184E-004 + 170.63999999999999 -8.0856283833126582E-004 + 170.69999999999999 -8.1350359070166578E-004 + 170.75999999999999 -8.1791208451705466E-004 + 170.81999999999999 -8.2177423462998314E-004 + 170.88000000000000 -8.2507632221114069E-004 + 170.94000000000000 -8.2780500216558621E-004 + 171.00000000000000 -8.2994733093524572E-004 + 171.06000000000000 -8.3149073790718007E-004 + 171.12000000000000 -8.3242318155529673E-004 + 171.17999999999998 -8.3273319716839099E-004 + 171.23999999999998 -8.3240978920145732E-004 + 171.29999999999998 -8.3144266497594860E-004 + 171.35999999999999 -8.2982198008828539E-004 + 171.41999999999999 -8.2753876438323461E-004 + 171.47999999999999 -8.2458468700855189E-004 + 171.53999999999999 -8.2095222074949562E-004 + 171.59999999999999 -8.1663462774674337E-004 + 171.66000000000000 -8.1162594928543179E-004 + 171.72000000000000 -8.0592114051569372E-004 + 171.78000000000000 -7.9951597821232981E-004 + 171.84000000000000 -7.9240718076130162E-004 + 171.90000000000001 -7.8459240169286427E-004 + 171.95999999999998 -7.7607030368508241E-004 + 172.01999999999998 -7.6684045329705156E-004 + 172.07999999999998 -7.5690339898654212E-004 + 172.13999999999999 -7.4626076849123246E-004 + 172.19999999999999 -7.3491508602937887E-004 + 172.25999999999999 -7.2287000534633473E-004 + 172.31999999999999 -7.1013013990117008E-004 + 172.38000000000000 -6.9670121066200150E-004 + 172.44000000000000 -6.8258992800595132E-004 + 172.50000000000000 -6.6780416637210710E-004 + 172.56000000000000 -6.5235283915374511E-004 + 172.62000000000000 -6.3624590945539046E-004 + 172.67999999999998 -6.1949455411585406E-004 + 172.73999999999998 -6.0211092403324087E-004 + 172.79999999999998 -5.8410826528362749E-004 + 172.85999999999999 -5.6550100735993096E-004 + 172.91999999999999 -5.4630463979040572E-004 + 172.97999999999999 -5.2653568741900980E-004 + 173.03999999999999 -5.0621175403633577E-004 + 173.09999999999999 -4.8535141198080209E-004 + 173.16000000000000 -4.6397437447655775E-004 + 173.22000000000000 -4.4210122431255960E-004 + 173.28000000000000 -4.1975353765837656E-004 + 173.34000000000000 -3.9695377486308441E-004 + 173.40000000000001 -3.7372528373828205E-004 + 173.45999999999998 -3.5009219743406159E-004 + 173.51999999999998 -3.2607948330196475E-004 + 173.57999999999998 -3.0171278359260230E-004 + 173.63999999999999 -2.7701842721048338E-004 + 173.69999999999999 -2.5202339228135116E-004 + 173.75999999999999 -2.2675524310850106E-004 + 173.81999999999999 -2.0124205282970838E-004 + 173.88000000000000 -1.7551236375618393E-004 + 173.94000000000000 -1.4959518128827075E-004 + 174.00000000000000 -1.2351987660313548E-004 + 174.06000000000000 -9.7316140893873487E-005 + 174.12000000000000 -7.1013939465570800E-005 + 174.17999999999998 -4.4643465428718521E-005 + 174.23999999999998 -1.8235082742154620E-005 + 174.29999999999998 8.1807298850667667E-006 + 174.35999999999999 3.4573431385324742E-005 + 174.41999999999999 6.0912463213724331E-005 + 174.47999999999999 8.7167319238348038E-005 + 174.53999999999999 1.1330760456654437E-004 + 174.59999999999999 1.3930306931244030E-004 + 174.66000000000000 1.6512366247639458E-004 + 174.72000000000000 1.9073962066400681E-004 + 174.78000000000000 2.1612148931634395E-004 + 174.84000000000000 2.4124017846448566E-004 + 174.90000000000001 2.6606706101145743E-004 + 174.95999999999998 2.9057390549338348E-004 + 175.01999999999998 3.1473307913828543E-004 + 175.07999999999998 3.3851753145110327E-004 + 175.13999999999999 3.6190079987213778E-004 + 175.19999999999999 3.8485704705500990E-004 + 175.25999999999999 4.0736120619151348E-004 + 175.31999999999999 4.2938889117163427E-004 + 175.38000000000000 4.5091655386520288E-004 + 175.44000000000000 4.7192144382461078E-004 + 175.50000000000000 4.9238159088631011E-004 + 175.56000000000000 5.1227594603674251E-004 + 175.62000000000000 5.3158434832782197E-004 + 175.67999999999998 5.5028746987737485E-004 + 175.73999999999998 5.6836699846296568E-004 + 175.79999999999998 5.8580549881325503E-004 + 175.85999999999999 6.0258650597427681E-004 + 175.91999999999999 6.1869450429660852E-004 + 175.97999999999999 6.3411485843198768E-004 + 176.03999999999999 6.4883397720158227E-004 + 176.09999999999999 6.6283923359890782E-004 + 176.16000000000000 6.7611896871517044E-004 + 176.22000000000000 6.8866240227512092E-004 + 176.28000000000000 7.0045976485396679E-004 + 176.34000000000000 7.1150222758841820E-004 + 176.40000000000001 7.2178191374129368E-004 + 176.45999999999998 7.3129190120987237E-004 + 176.51999999999998 7.4002624434567875E-004 + 176.57999999999998 7.4797991092757574E-004 + 176.63999999999999 7.5514891264032743E-004 + 176.69999999999999 7.6153002888027584E-004 + 176.75999999999999 7.6712112122052499E-004 + 176.81999999999999 7.7192094524440504E-004 + 176.88000000000000 7.7592911767554245E-004 + 176.94000000000000 7.7914628119768394E-004 + 177.00000000000000 7.8157386143013364E-004 + 177.06000000000000 7.8321425797400767E-004 + 177.12000000000000 7.8407066435508494E-004 + 177.17999999999998 7.8414719847134105E-004 + 177.23999999999998 7.8344879263704146E-004 + 177.29999999999998 7.8198106684752270E-004 + 177.35999999999999 7.7975046843505079E-004 + 177.41999999999999 7.7676427901744835E-004 + 177.47999999999999 7.7303040131162051E-004 + 177.53999999999999 7.6855755661817918E-004 + 177.59999999999999 7.6335502080728446E-004 + 177.66000000000000 7.5743275572576229E-004 + 177.72000000000000 7.5080135685741465E-004 + 177.78000000000000 7.4347204583175279E-004 + 177.84000000000000 7.3545662723862931E-004 + 177.90000000000001 7.2676755960360045E-004 + 177.95999999999998 7.1741781178662515E-004 + 178.01999999999998 7.0742089534510638E-004 + 178.07999999999998 6.9679088007166461E-004 + 178.13999999999999 6.8554246032337689E-004 + 178.19999999999999 6.7369068322905960E-004 + 178.25999999999999 6.6125133166411866E-004 + 178.31999999999999 6.4824055492330502E-004 + 178.38000000000000 6.3467497706466420E-004 + 178.44000000000000 6.2057178723483048E-004 + 178.50000000000000 6.0594859446745902E-004 + 178.56000000000000 5.9082338695214749E-004 + 178.62000000000000 5.7521459200019821E-004 + 178.67999999999998 5.5914106995085542E-004 + 178.73999999999998 5.4262199391229521E-004 + 178.79999999999998 5.2567686298096380E-004 + 178.85999999999999 5.0832545864814887E-004 + 178.91999999999999 4.9058798317658573E-004 + 178.97999999999999 4.7248473552580022E-004 + 179.03999999999999 4.5403626788528221E-004 + 179.09999999999999 4.3526339847254416E-004 + 179.16000000000000 4.1618704245087923E-004 + 179.22000000000000 3.9682832454393746E-004 + 179.28000000000000 3.7720848728436870E-004 + 179.34000000000000 3.5734887189471605E-004 + 179.40000000000001 3.3727089611299151E-004 + 179.45999999999998 3.1699606120706334E-004 + 179.51999999999998 2.9654592854043850E-004 + 179.57999999999998 2.7594207691326861E-004 + 179.63999999999999 2.5520610441491547E-004 + 179.69999999999999 2.3435956675893523E-004 + 179.75999999999999 2.1342397277086689E-004 + 179.81999999999999 1.9242074534735223E-004 + 179.88000000000000 1.7137124759305779E-004 + 179.94000000000000 1.5029668527494103E-004 + 180.00000000000000 1.2921810894914231E-004 + 180.06000000000000 1.0815638922293990E-004 + 180.12000000000000 8.7132187434393735E-005 + 180.17999999999998 6.6165910435753576E-005 + 180.23999999999998 4.5277702359859482E-005 + 180.29999999999998 2.4487396452788426E-005 + 180.35999999999999 3.8144994896817970E-006 + 180.41999999999999 -1.6721841366934238E-005 + 180.47999999999999 -3.7102862491010129E-005 + 180.53999999999999 -5.7310202750671651E-005 + 180.59999999999999 -7.7325940001620293E-005 + 180.66000000000000 -9.7132607064219739E-005 + 180.72000000000000 -1.1671321061322259E-004 + 180.78000000000000 -1.3605125664436138E-004 + 180.84000000000000 -1.5513076879290506E-004 + 180.90000000000001 -1.7393631510478246E-004 + 180.95999999999998 -1.9245298617079953E-004 + 181.01999999999998 -2.1066648180399154E-004 + 181.07999999999998 -2.2856304541070364E-004 + 181.13999999999999 -2.4612953117443385E-004 + 181.19999999999999 -2.6335345628684134E-004 + 181.25999999999999 -2.8022284893729042E-004 + 181.31999999999999 -2.9672644425726111E-004 + 181.38000000000000 -3.1285355355235368E-004 + 181.44000000000000 -3.2859414415759822E-004 + 181.50000000000000 -3.4393881467807962E-004 + 181.56000000000000 -3.5887879471460698E-004 + 181.62000000000000 -3.7340597508360576E-004 + 181.67999999999998 -3.8751279037075502E-004 + 181.73999999999998 -4.0119239243579271E-004 + 181.79999999999998 -4.1443851031914002E-004 + 181.85999999999999 -4.2724546458239142E-004 + 181.91999999999999 -4.3960819547235344E-004 + 181.97999999999999 -4.5152225579031795E-004 + 182.03999999999999 -4.6298373238483061E-004 + 182.09999999999999 -4.7398934083888605E-004 + 182.16000000000000 -4.8453631316703835E-004 + 182.22000000000000 -4.9462247933992399E-004 + 182.28000000000000 -5.0424601677644164E-004 + 182.34000000000000 -5.1340587725317525E-004 + 182.39999999999998 -5.2210135217996051E-004 + 182.45999999999998 -5.3033219080349128E-004 + 182.51999999999998 -5.3809862080590200E-004 + 182.57999999999998 -5.4540136776812730E-004 + 182.63999999999999 -5.5224149726899180E-004 + 182.69999999999999 -5.5862032709853252E-004 + 182.75999999999999 -5.6453974329870326E-004 + 182.81999999999999 -5.7000176119870367E-004 + 182.88000000000000 -5.7500878054595242E-004 + 182.94000000000000 -5.7956343373340212E-004 + 183.00000000000000 -5.8366858533999899E-004 + 183.06000000000000 -5.8732731732753524E-004 + 183.12000000000000 -5.9054275463890226E-004 + 183.17999999999998 -5.9331834847160423E-004 + 183.23999999999998 -5.9565753488067391E-004 + 183.29999999999998 -5.9756396751944559E-004 + 183.35999999999999 -5.9904127863876920E-004 + 183.41999999999999 -6.0009325645521590E-004 + 183.47999999999999 -6.0072375777330022E-004 + 183.53999999999999 -6.0093663195159017E-004 + 183.59999999999999 -6.0073569177360002E-004 + 183.66000000000000 -6.0012486575215915E-004 + 183.72000000000000 -5.9910805117479508E-004 + 183.78000000000000 -5.9768917745292897E-004 + 183.84000000000000 -5.9587207825199820E-004 + 183.89999999999998 -5.9366060204878938E-004 + 183.95999999999998 -5.9105852739914139E-004 + 184.01999999999998 -5.8806959341583371E-004 + 184.07999999999998 -5.8469738201484967E-004 + 184.13999999999999 -5.8094561599081492E-004 + 184.19999999999999 -5.7681778801927850E-004 + 184.25999999999999 -5.7231729462333303E-004 + 184.31999999999999 -5.6744754939650030E-004 + 184.38000000000000 -5.6221182651053369E-004 + 184.44000000000000 -5.5661341885490255E-004 + 184.50000000000000 -5.5065542348963761E-004 + 184.56000000000000 -5.4434098819103696E-004 + 184.62000000000000 -5.3767317544039129E-004 + 184.67999999999998 -5.3065512076961327E-004 + 184.73999999999998 -5.2328992300451041E-004 + 184.79999999999998 -5.1558065294673972E-004 + 184.85999999999999 -5.0753049653037060E-004 + 184.91999999999999 -4.9914266473087229E-004 + 184.97999999999999 -4.9042056408938196E-004 + 185.03999999999999 -4.8136760913200321E-004 + 185.09999999999999 -4.7198745568512201E-004 + 185.16000000000000 -4.6228384673379166E-004 + 185.22000000000000 -4.5226077803479990E-004 + 185.28000000000000 -4.4192240903871281E-004 + 185.34000000000000 -4.3127316754902178E-004 + 185.39999999999998 -4.2031773192354962E-004 + 185.45999999999998 -4.0906101345755951E-004 + 185.51999999999998 -3.9750824015856521E-004 + 185.57999999999998 -3.8566493308293039E-004 + 185.63999999999999 -3.7353694614473975E-004 + 185.69999999999999 -3.6113043050583896E-004 + 185.75999999999999 -3.4845193729465498E-004 + 185.81999999999999 -3.3550836308927798E-004 + 185.88000000000000 -3.2230707203772293E-004 + 185.94000000000000 -3.0885577636515714E-004 + 186.00000000000000 -2.9516266259526806E-004 + 186.06000000000000 -2.8123634225027053E-004 + 186.12000000000000 -2.6708591462847628E-004 + 186.17999999999998 -2.5272092918692034E-004 + 186.23999999999998 -2.3815146881455025E-004 + 186.29999999999998 -2.2338807813357267E-004 + 186.35999999999999 -2.0844183194241095E-004 + 186.41999999999999 -1.9332430184187138E-004 + 186.47999999999999 -1.7804754909268966E-004 + 186.53999999999999 -1.6262414739704872E-004 + 186.59999999999999 -1.4706715691761756E-004 + 186.66000000000000 -1.3139011449984537E-004 + 186.72000000000000 -1.1560701648827835E-004 + 186.78000000000000 -9.9732302248275507E-005 + 186.84000000000000 -8.3780821969341334E-005 + 186.89999999999998 -6.7767832842883163E-005 + 186.95999999999998 -5.1708968793991522E-005 + 187.01999999999998 -3.5620197116175522E-005 + 187.07999999999998 -1.9517806419188394E-005 + 187.13999999999999 -3.4183707138250831E-006 + 187.19999999999999 1.2661280723398990E-005 + 187.25999999999999 2.8704103849120199E-005 + 187.31999999999999 4.4692859281476497E-005 + 187.38000000000000 6.0610159596765759E-005 + 187.44000000000000 7.6438510778627594E-005 + 187.50000000000000 9.2160321450828465E-005 + 187.56000000000000 1.0775797435687500E-004 + 187.62000000000000 1.2321384072275051E-004 + 187.67999999999998 1.3851034369172330E-004 + 187.73999999999998 1.5362998633091160E-004 + 187.79999999999998 1.6855536419556937E-004 + 187.85999999999999 1.8326923128300610E-004 + 187.91999999999999 1.9775458813617029E-004 + 187.97999999999999 2.1199461626029758E-004 + 188.03999999999999 2.2597280296799443E-004 + 188.09999999999999 2.3967295563251053E-004 + 188.16000000000000 2.5307922490142948E-004 + 188.22000000000000 2.6617613732580580E-004 + 188.28000000000000 2.7894865146425196E-004 + 188.34000000000000 2.9138218677689698E-004 + 188.39999999999998 3.0346267268598922E-004 + 188.45999999999998 3.1517654424872412E-004 + 188.51999999999998 3.2651078212329686E-004 + 188.57999999999998 3.3745294482502884E-004 + 188.63999999999999 3.4799119800413644E-004 + 188.69999999999999 3.5811433136694471E-004 + 188.75999999999999 3.6781182171852000E-004 + 188.81999999999999 3.7707381607207852E-004 + 188.88000000000000 3.8589114638869475E-004 + 188.94000000000000 3.9425535150377491E-004 + 189.00000000000000 4.0215866610745501E-004 + 189.06000000000000 4.0959414655201780E-004 + 189.12000000000000 4.1655549240417721E-004 + 189.17999999999998 4.2303721344687261E-004 + 189.23999999999998 4.2903456659730370E-004 + 189.29999999999998 4.3454351077212324E-004 + 189.35999999999999 4.3956076845826851E-004 + 189.41999999999999 4.4408379504127886E-004 + 189.47999999999999 4.4811072877690887E-004 + 189.53999999999999 4.5164044638387177E-004 + 189.59999999999999 4.5467249624177861E-004 + 189.66000000000000 4.5720708985785168E-004 + 189.72000000000000 4.5924506601758625E-004 + 189.78000000000000 4.6078791383594956E-004 + 189.84000000000000 4.6183771794703645E-004 + 189.89999999999998 4.6239715205681411E-004 + 189.95999999999998 4.6246950217898770E-004 + 190.01999999999998 4.6205854693717605E-004 + 190.07999999999998 4.6116861368829357E-004 + 190.13999999999999 4.5980457686808842E-004 + 190.19999999999999 4.5797175981571539E-004 + 190.25999999999999 4.5567595298990856E-004 + 190.31999999999999 4.5292341921603714E-004 + 190.38000000000000 4.4972087979115066E-004 + 190.44000000000000 4.4607543103197822E-004 + 190.50000000000000 4.4199456055943852E-004 + 190.56000000000000 4.3748610299567140E-004 + 190.62000000000000 4.3255826190701451E-004 + 190.67999999999998 4.2721951663402560E-004 + 190.73999999999998 4.2147867291806223E-004 + 190.79999999999998 4.1534473429637414E-004 + 190.85999999999999 4.0882697893450756E-004 + 190.91999999999999 4.0193483390106089E-004 + 190.97999999999999 3.9467797114473631E-004 + 191.03999999999999 3.8706615431014955E-004 + 191.09999999999999 3.7910934016480385E-004 + 191.16000000000000 3.7081755959441774E-004 + 191.22000000000000 3.6220090417461330E-004 + 191.28000000000000 3.5326962237543458E-004 + 191.34000000000000 3.4403396310397303E-004 + 191.39999999999998 3.3450430099941171E-004 + 191.45999999999998 3.2469101742988745E-004 + 191.51999999999998 3.1460463122826151E-004 + 191.57999999999998 3.0425559960148442E-004 + 191.63999999999999 2.9365446273046144E-004 + 191.69999999999999 2.8281181100712821E-004 + 191.75999999999999 2.7173833623250461E-004 + 191.81999999999999 2.6044468392321974E-004 + 191.88000000000000 2.4894158325026132E-004 + 191.94000000000000 2.3723981925481789E-004 + 192.00000000000000 2.2535019350192732E-004 + 192.06000000000000 2.1328352313520734E-004 + 192.12000000000000 2.0105068078610022E-004 + 192.17999999999998 1.8866256241677608E-004 + 192.23999999999998 1.7613007926874867E-004 + 192.29999999999998 1.6346414719901195E-004 + 192.35999999999999 1.5067569699641072E-004 + 192.41999999999999 1.3777568739442632E-004 + 192.47999999999999 1.2477508143093527E-004 + 192.53999999999999 1.1168483412306840E-004 + 192.59999999999999 9.8515926250126120E-005 + 192.66000000000000 8.5279330937960976E-005 + 192.72000000000000 7.1986034591023566E-005 + 192.78000000000000 5.8647020399274761E-005 + 192.84000000000000 4.5273296675943440E-005 + 192.89999999999998 3.1875862025170052E-005 + 192.95999999999998 1.8465726588992084E-005 + 193.01999999999998 5.0539149870334318E-006 + 193.07999999999998 -8.3485543241726828E-006 + 193.13999999999999 -2.1730658170742791E-005 + 193.19999999999999 -3.5081374804400832E-005 + 193.25999999999999 -4.8389703545894279E-005 + 193.31999999999999 -6.1644657929278666E-005 + 193.38000000000000 -7.4835277952984533E-005 + 193.44000000000000 -8.7950657152617150E-005 + 193.50000000000000 -1.0097993189922746E-004 + 193.56000000000000 -1.1391230583619288E-004 + 193.62000000000000 -1.2673707083236306E-004 + 193.67999999999998 -1.3944361295783163E-004 + 193.73999999999998 -1.5202143348508375E-004 + 193.79999999999998 -1.6446014220303982E-004 + 193.85999999999999 -1.7674952082878247E-004 + 193.91999999999999 -1.8887947982763838E-004 + 193.97999999999999 -2.0084012170737577E-004 + 194.03999999999999 -2.1262175618892240E-004 + 194.09999999999999 -2.2421488694921335E-004 + 194.16000000000000 -2.3561023484247425E-004 + 194.22000000000000 -2.4679875118397798E-004 + 194.28000000000000 -2.5777168238061415E-004 + 194.34000000000000 -2.6852049702784668E-004 + 194.39999999999998 -2.7903699133913570E-004 + 194.45999999999998 -2.8931326231557201E-004 + 194.51999999999998 -2.9934172840318971E-004 + 194.57999999999998 -3.0911507478161444E-004 + 194.63999999999999 -3.1862640896324469E-004 + 194.69999999999999 -3.2786920588669533E-004 + 194.75999999999999 -3.3683723798573408E-004 + 194.81999999999999 -3.4552473125252673E-004 + 194.88000000000000 -3.5392623813050258E-004 + 194.94000000000000 -3.6203677865763082E-004 + 195.00000000000000 -3.6985175098073049E-004 + 195.06000000000000 -3.7736696392629991E-004 + 195.12000000000000 -3.8457867079490107E-004 + 195.17999999999998 -3.9148351540982873E-004 + 195.23999999999998 -3.9807860030310703E-004 + 195.29999999999998 -4.0436148798876409E-004 + 195.35999999999999 -4.1033011690347977E-004 + 195.41999999999999 -4.1598295957461623E-004 + 195.47999999999999 -4.2131885073494051E-004 + 195.53999999999999 -4.2633706381903371E-004 + 195.59999999999999 -4.3103731590487008E-004 + 195.66000000000000 -4.3541981453078921E-004 + 195.72000000000000 -4.3948513210916078E-004 + 195.78000000000000 -4.4323427619877504E-004 + 195.84000000000000 -4.4666869789052434E-004 + 195.89999999999998 -4.4979018863391859E-004 + 195.95999999999998 -4.5260098771671039E-004 + 196.01999999999998 -4.5510364175478462E-004 + 196.07999999999998 -4.5730107884926850E-004 + 196.13999999999999 -4.5919656531935360E-004 + 196.19999999999999 -4.6079365448190669E-004 + 196.25999999999999 -4.6209618951427027E-004 + 196.31999999999999 -4.6310831632791856E-004 + 196.38000000000000 -4.6383442579560021E-004 + 196.44000000000000 -4.6427901995768953E-004 + 196.50000000000000 -4.6444689896496305E-004 + 196.56000000000000 -4.6434302840685579E-004 + 196.62000000000000 -4.6397247609716001E-004 + 196.67999999999998 -4.6334047489381250E-004 + 196.73999999999998 -4.6245230810194687E-004 + 196.79999999999998 -4.6131341310316857E-004 + 196.85999999999999 -4.5992928401860007E-004 + 196.91999999999999 -4.5830542232341690E-004 + 196.97999999999999 -4.5644743232818764E-004 + 197.03999999999999 -4.5436085678856811E-004 + 197.09999999999999 -4.5205129685004593E-004 + 197.16000000000000 -4.4952434172193767E-004 + 197.22000000000000 -4.4678550697834797E-004 + 197.28000000000000 -4.4384032800287500E-004 + 197.34000000000000 -4.4069424747144757E-004 + 197.39999999999998 -4.3735262282006094E-004 + 197.45999999999998 -4.3382071104916325E-004 + 197.51999999999998 -4.3010369862864716E-004 + 197.57999999999998 -4.2620660267458791E-004 + 197.63999999999999 -4.2213426624591562E-004 + 197.69999999999999 -4.1789147814327946E-004 + 197.75999999999999 -4.1348275354145505E-004 + 197.81999999999999 -4.0891245089968553E-004 + 197.88000000000000 -4.0418479310286510E-004 + 197.94000000000000 -3.9930372366564005E-004 + 198.00000000000000 -3.9427305492698391E-004 + 198.06000000000000 -3.8909635797474529E-004 + 198.12000000000000 -3.8377703657168104E-004 + 198.17999999999998 -3.7831831433033920E-004 + 198.23999999999998 -3.7272317284004489E-004 + 198.29999999999998 -3.6699449455948602E-004 + 198.35999999999999 -3.6113496249528968E-004 + 198.41999999999999 -3.5514714828790360E-004 + 198.47999999999999 -3.4903349550602088E-004 + 198.53999999999999 -3.4279633338950635E-004 + 198.59999999999999 -3.3643783206840320E-004 + 198.66000000000000 -3.2996015631396255E-004 + 198.72000000000000 -3.2336539971299772E-004 + 198.78000000000000 -3.1665556799793872E-004 + 198.84000000000000 -3.0983261016654827E-004 + 198.89999999999998 -3.0289856209660289E-004 + 198.95999999999998 -2.9585529382729066E-004 + 199.01999999999998 -2.8870476713212766E-004 + 199.07999999999998 -2.8144895274121747E-004 + 199.13999999999999 -2.7408976986696400E-004 + 199.19999999999999 -2.6662922215973505E-004 + 199.25999999999999 -2.5906937180689908E-004 + 199.31999999999999 -2.5141230114753216E-004 + 199.38000000000000 -2.4366018051031609E-004 + 199.44000000000000 -2.3581524544340107E-004 + 199.50000000000000 -2.2787982604520728E-004 + 199.56000000000000 -2.1985636224888485E-004 + 199.62000000000000 -2.1174743066544309E-004 + 199.67999999999998 -2.0355570866348205E-004 + 199.73999999999998 -1.9528405471155890E-004 + 199.79999999999998 -1.8693548285398848E-004 + 199.85999999999999 -1.7851317891439067E-004 + 199.91999999999999 -1.7002050844560195E-004 + 199.97999999999999 -1.6146100010980805E-004 + 200.03999999999999 -1.5283839895280680E-004 + 200.09999999999999 -1.4415667245534200E-004 + 200.16000000000000 -1.3541995542552254E-004 + 200.22000000000000 -1.2663258732629733E-004 + 200.28000000000000 -1.1779913438011602E-004 + 200.34000000000000 -1.0892432798362839E-004 + 200.39999999999998 -1.0001310618828197E-004 + 200.45999999999998 -9.1070577564065063E-005 + 200.51999999999998 -8.2102029669994659E-005 + 200.57999999999998 -7.3112910534139610E-005 + 200.63999999999999 -6.4108815930221598E-005 + 200.69999999999999 -5.5095470597650800E-005 + 200.75999999999999 -4.6078730840208666E-005 + 200.81999999999999 -3.7064557611003754E-005 + 200.88000000000000 -2.8058996040918467E-005 + 200.94000000000000 -1.9068169153347478E-005 + 201.00000000000000 -1.0098256244334285E-005 + 201.06000000000000 -1.1554735057113994E-006 + 201.12000000000000 7.7539402018870366E-006 + 201.17999999999998 1.6623742878984270E-005 + 201.23999999999998 2.5447707821050174E-005 + 201.29999999999998 3.4219647148264778E-005 + 201.35999999999999 4.2933417294182157E-005 + 201.41999999999999 5.1582945001344770E-005 + 201.47999999999999 6.0162240316266199E-005 + 201.53999999999999 6.8665422494348501E-005 + 201.59999999999999 7.7086723146185457E-005 + 201.66000000000000 8.5420500389869750E-005 + 201.72000000000000 9.3661285190462564E-005 + 201.78000000000000 1.0180373262227787E-004 + 201.84000000000000 1.0984270246117366E-004 + 201.89999999999998 1.1777322352411339E-004 + 201.95999999999998 1.2559052252765772E-004 + 202.01999999999998 1.3329003272260625E-004 + 202.07999999999998 1.4086741842921844E-004 + 202.13999999999999 1.4831854178925450E-004 + 202.19999999999999 1.5563954158468270E-004 + 202.25999999999999 1.6282677483533647E-004 + 202.31999999999999 1.6987687650180496E-004 + 202.38000000000000 1.7678669530374924E-004 + 202.44000000000000 1.8355338826610363E-004 + 202.50000000000000 1.9017435281717208E-004 + 202.56000000000000 1.9664728896403056E-004 + 202.62000000000000 2.0297013560769696E-004 + 202.67999999999998 2.0914114216848340E-004 + 202.73999999999998 2.1515880634408559E-004 + 202.79999999999998 2.2102191774548826E-004 + 202.85999999999999 2.2672948604533232E-004 + 202.91999999999999 2.3228082392776767E-004 + 202.97999999999999 2.3767545690455392E-004 + 203.03999999999999 2.4291315911858911E-004 + 203.09999999999999 2.4799389010778209E-004 + 203.16000000000000 2.5291788944712339E-004 + 203.22000000000000 2.5768548745792110E-004 + 203.28000000000000 2.6229725842051625E-004 + 203.34000000000000 2.6675388598808655E-004 + 203.39999999999998 2.7105621132291272E-004 + 203.45999999999998 2.7520520763320717E-004 + 203.51999999999998 2.7920193034337674E-004 + 203.57999999999998 2.8304757562210058E-004 + 203.63999999999999 2.8674332438231821E-004 + 203.69999999999999 2.9029052341603817E-004 + 203.75999999999999 2.9369048671319822E-004 + 203.81999999999999 2.9694460725977035E-004 + 203.88000000000000 3.0005429273268663E-004 + 203.94000000000000 3.0302094739670463E-004 + 204.00000000000000 3.0584600569682433E-004 + 204.06000000000000 3.0853084832082461E-004 + 204.12000000000000 3.1107684650548824E-004 + 204.17999999999998 3.1348531519996358E-004 + 204.23999999999998 3.1575757689600444E-004 + 204.29999999999998 3.1789483562871628E-004 + 204.35999999999999 3.1989819502468151E-004 + 204.41999999999999 3.2176867154256922E-004 + 204.47999999999999 3.2350717854292909E-004 + 204.53999999999999 3.2511452619585776E-004 + 204.59999999999999 3.2659132451891314E-004 + 204.66000000000000 3.2793807716681656E-004 + 204.72000000000000 3.2915513671540010E-004 + 204.78000000000000 3.3024263359639617E-004 + 204.84000000000000 3.3120058712910410E-004 + 204.89999999999998 3.3202881703941269E-004 + 204.95999999999998 3.3272697707470699E-004 + 205.01999999999998 3.3329451665615307E-004 + 205.07999999999998 3.3373075396665258E-004 + 205.13999999999999 3.3403478330485070E-004 + 205.19999999999999 3.3420560046146567E-004 + 205.25999999999999 3.3424197483991120E-004 + 205.31999999999999 3.3414259188356934E-004 + 205.38000000000000 3.3390595516417752E-004 + 205.44000000000000 3.3353041366962212E-004 + 205.50000000000000 3.3301421872125537E-004 + 205.56000000000000 3.3235552610412218E-004 + 205.62000000000000 3.3155231819338943E-004 + 205.67999999999998 3.3060256025864936E-004 + 205.73999999999998 3.2950402087605321E-004 + 205.79999999999998 3.2825444636489984E-004 + 205.85999999999999 3.2685151447339701E-004 + 205.91999999999999 3.2529282629297304E-004 + 205.97999999999999 3.2357596114222087E-004 + 206.03999999999999 3.2169838884568556E-004 + 206.09999999999999 3.1965762233459471E-004 + 206.16000000000000 3.1745117221651975E-004 + 206.22000000000000 3.1507647986921594E-004 + 206.28000000000000 3.1253114626462271E-004 + 206.34000000000000 3.0981271039699499E-004 + 206.39999999999998 3.0691885881597726E-004 + 206.45999999999998 3.0384734052000081E-004 + 206.51999999999998 3.0059603652804218E-004 + 206.57999999999998 2.9716297594521560E-004 + 206.63999999999999 2.9354631933152509E-004 + 206.69999999999999 2.8974439527606815E-004 + 206.75999999999999 2.8575577725534202E-004 + 206.81999999999999 2.8157925376731002E-004 + 206.88000000000000 2.7721380016024585E-004 + 206.94000000000000 2.7265869330340785E-004 + 207.00000000000000 2.6791343706873179E-004 + 207.06000000000000 2.6297786845107387E-004 + 207.12000000000000 2.5785208599380109E-004 + 207.17999999999998 2.5253653485219599E-004 + 207.23999999999998 2.4703196355030789E-004 + 207.29999999999998 2.4133950054716058E-004 + 207.35999999999999 2.3546060432618125E-004 + 207.41999999999999 2.2939713671110839E-004 + 207.47999999999999 2.2315133440013358E-004 + 207.53999999999999 2.1672583340615639E-004 + 207.59999999999999 2.1012371659475613E-004 + 207.66000000000000 2.0334845780921724E-004 + 207.72000000000000 1.9640401709889130E-004 + 207.78000000000000 1.8929477669078759E-004 + 207.84000000000000 1.8202560810465565E-004 + 207.89999999999998 1.7460181505167619E-004 + 207.95999999999998 1.6702922841182010E-004 + 208.01999999999998 1.5931410698216556E-004 + 208.07999999999998 1.5146324776092206E-004 + 208.13999999999999 1.4348389878357103E-004 + 208.19999999999999 1.3538378997484648E-004 + 208.25999999999999 1.2717113041771355E-004 + 208.31999999999999 1.1885460628762228E-004 + 208.38000000000000 1.1044335898961211E-004 + 208.44000000000000 1.0194699713969876E-004 + 208.50000000000000 9.3375559945771871E-005 + 208.56000000000000 8.4739519724107639E-005 + 208.62000000000000 7.6049782951252446E-005 + 208.68000000000001 6.7317631018537288E-005 + 208.74000000000001 5.8554752774527251E-005 + 208.80000000000001 4.9773204102205419E-005 + 208.86000000000001 4.0985376493614762E-005 + 208.92000000000002 3.2203991797314784E-005 + 208.98000000000002 2.3442072011774948E-005 + 209.03999999999996 1.4712912117493636E-005 + 209.09999999999997 6.0300536376624386E-006 + 209.15999999999997 -2.5927506498727599E-006 + 209.21999999999997 -1.1141568128095809E-005 + 209.27999999999997 -1.9602308283483119E-005 + 209.33999999999997 -2.7960780378727330E-005 + 209.39999999999998 -3.6202718392645769E-005 + 209.45999999999998 -4.4313812174717793E-005 + 209.51999999999998 -5.2279758007957765E-005 + 209.57999999999998 -6.0086283311929994E-005 + 209.63999999999999 -6.7719216946883370E-005 + 209.69999999999999 -7.5164484656787739E-005 + 209.75999999999999 -8.2408176426755923E-005 + 209.81999999999999 -8.9436573786091667E-005 + 209.88000000000000 -9.6236200546315575E-005 + 209.94000000000000 -1.0279384812821821E-004 + 210.00000000000000 -1.0909661435040940E-004 + 210.06000000000000 -1.1513193885643006E-004 + 210.12000000000000 -1.2088765127667217E-004 + 210.18000000000001 -1.2635200173417776E-004 + 210.24000000000001 -1.3151369858110387E-004 + 210.30000000000001 -1.3636193195855798E-004 + 210.36000000000001 -1.4088643333685466E-004 + 210.42000000000002 -1.4507750458935594E-004 + 210.48000000000002 -1.4892604471806409E-004 + 210.53999999999996 -1.5242360781606601E-004 + 210.59999999999997 -1.5556241050178891E-004 + 210.65999999999997 -1.5833539280081440E-004 + 210.71999999999997 -1.6073622163729744E-004 + 210.77999999999997 -1.6275935602493783E-004 + 210.83999999999997 -1.6440001665768113E-004 + 210.89999999999998 -1.6565428294924918E-004 + 210.95999999999998 -1.6651902585343293E-004 + 211.01999999999998 -1.6699201845779801E-004 + 211.07999999999998 -1.6707189422726835E-004 + 211.13999999999999 -1.6675816933209666E-004 + 211.19999999999999 -1.6605120376438803E-004 + 211.25999999999999 -1.6495229887175737E-004 + 211.31999999999999 -1.6346362227684903E-004 + 211.38000000000000 -1.6158821835960533E-004 + 211.44000000000000 -1.5933003805177083E-004 + 211.50000000000000 -1.5669387609482981E-004 + 211.56000000000000 -1.5368541770999634E-004 + 211.62000000000000 -1.5031117533020354E-004 + 211.68000000000001 -1.4657852291927818E-004 + 211.74000000000001 -1.4249565739223526E-004 + 211.80000000000001 -1.3807156325609958E-004 + 211.86000000000001 -1.3331603235300062E-004 + 211.92000000000002 -1.2823962643160149E-004 + 211.98000000000002 -1.2285362801224626E-004 + 212.03999999999996 -1.1717005441096005E-004 + 212.09999999999997 -1.1120160072266529E-004 + 212.15999999999997 -1.0496162637780414E-004 + 212.21999999999997 -9.8464096507011852E-005 + 212.27999999999997 -9.1723556961697319E-005 + 212.33999999999997 -8.4755095590840444E-005 + 212.39999999999998 -7.7574291843944708E-005 + 212.45999999999998 -7.0197172405388162E-005 + 212.51999999999998 -6.2640169615363553E-005 + 212.57999999999998 -5.4920046881346986E-005 + 212.63999999999999 -4.7053884347620515E-005 + 212.69999999999999 -3.9058989494988507E-005 + 212.75999999999999 -3.0952869651206894E-005 + 212.81999999999999 -2.2753169747883502E-005 + 212.88000000000000 -1.4477617704429145E-005 + 212.94000000000000 -6.1439815155753005E-006 + 213.00000000000000 2.2300037652539191E-006 + 213.06000000000000 1.0626665805055179E-005 + 213.12000000000000 1.9028456712340948E-005 + 213.18000000000001 2.7417999293932381E-005 + 213.24000000000001 3.5778129041110637E-005 + 213.30000000000001 4.4091958857781778E-005 + 213.36000000000001 5.2342925296661267E-005 + 213.42000000000002 6.0514816824011590E-005 + 213.48000000000002 6.8591841203565892E-005 + 213.53999999999996 7.6558661714005809E-005 + 213.59999999999997 8.4400431747792335E-005 + 213.65999999999997 9.2102846277365669E-005 + 213.71999999999997 9.9652185589107762E-005 + 213.77999999999997 1.0703535026371870E-004 + 213.83999999999997 1.1423990599685838E-004 + 213.89999999999998 1.2125408353922429E-004 + 213.95999999999998 1.2806686456644746E-004 + 214.01999999999998 1.3466794434795212E-004 + 214.07999999999998 1.4104781491097122E-004 + 214.13999999999999 1.4719775097181661E-004 + 214.19999999999999 1.5310983679766039E-004 + 214.25999999999999 1.5877697339966145E-004 + 214.31999999999999 1.6419291796746841E-004 + 214.38000000000000 1.6935225454386193E-004 + 214.44000000000000 1.7425041815937673E-004 + 214.50000000000000 1.7888370342290880E-004 + 214.56000000000000 1.8324926720672722E-004 + 214.62000000000000 1.8734510392875203E-004 + 214.68000000000001 1.9117007004310427E-004 + 214.74000000000001 1.9472385675860059E-004 + 214.80000000000001 1.9800697153967198E-004 + 214.86000000000001 2.0102077433728239E-004 + 214.92000000000002 2.0376741057279260E-004 + 214.98000000000002 2.0624980613827959E-004 + 215.03999999999996 2.0847169107666264E-004 + 215.09999999999997 2.1043751379105037E-004 + 215.15999999999997 2.1215245721084585E-004 + 215.21999999999997 2.1362239872916352E-004 + 215.27999999999997 2.1485387269524629E-004 + 215.33999999999997 2.1585404016424224E-004 + 215.39999999999998 2.1663062948343924E-004 + 215.45999999999998 2.1719194993690904E-004 + 215.51999999999998 2.1754680802372168E-004 + 215.57999999999998 2.1770445737356373E-004 + 215.63999999999999 2.1767460230114272E-004 + 215.69999999999999 2.1746730077565262E-004 + 215.75999999999999 2.1709293768831301E-004 + 215.81999999999999 2.1656218346394497E-004 + 215.88000000000000 2.1588596379991677E-004 + 215.94000000000000 2.1507540010582172E-004 + 216.00000000000000 2.1414172662352857E-004 + 216.06000000000000 2.1309633563817578E-004 + 216.12000000000000 2.1195064519493977E-004 + 216.18000000000001 2.1071609833754325E-004 + 216.24000000000001 2.0940415152004025E-004 + 216.30000000000001 2.0802613547126752E-004 + 216.36000000000001 2.0659333043074188E-004 + 216.42000000000002 2.0511681007210123E-004 + 216.48000000000002 2.0360753634841909E-004 + 216.53999999999996 2.0207619814604643E-004 + 216.59999999999997 2.0053318663647510E-004 + 216.65999999999997 1.9898862843973557E-004 + 216.71999999999997 1.9745229035006217E-004 + 216.77999999999997 1.9593354726481216E-004 + 216.83999999999997 1.9444136554072020E-004 + 216.89999999999998 1.9298427327086500E-004 + 216.95999999999998 1.9157028232965804E-004 + 217.01999999999998 1.9020695658020014E-004 + 217.07999999999998 1.8890128024898122E-004 + 217.13999999999999 1.8765972451670901E-004 + 217.19999999999999 1.8648817390627117E-004 + 217.25999999999999 1.8539199073031108E-004 + 217.31999999999999 1.8437588784139607E-004 + 217.38000000000000 1.8344403321317695E-004 + 217.44000000000000 1.8259996377738782E-004 + 217.50000000000000 1.8184661588098721E-004 + 217.56000000000000 1.8118637120980254E-004 + 217.62000000000000 1.8062099126916822E-004 + 217.68000000000001 1.8015163251111041E-004 + 217.74000000000001 1.7977886308073818E-004 + 217.80000000000001 1.7950268060875431E-004 + 217.86000000000001 1.7932252575071075E-004 + 217.92000000000002 1.7923723097987125E-004 + 217.98000000000002 1.7924508517505806E-004 + 218.03999999999996 1.7934385883823132E-004 + 218.09999999999997 1.7953075321197788E-004 + 218.15999999999997 1.7980248731292524E-004 + 218.21999999999997 1.8015530571644872E-004 + 218.27999999999997 1.8058491013482909E-004 + 218.33999999999997 1.8108660983816942E-004 + 218.39999999999998 1.8165528754636277E-004 + 218.45999999999998 1.8228542135502964E-004 + 218.51999999999998 1.8297110574193244E-004 + 218.57999999999998 1.8370611970083023E-004 + 218.63999999999999 1.8448395930470082E-004 + 218.69999999999999 1.8529782268159327E-004 + 218.75999999999999 1.8614069487654967E-004 + 218.81999999999999 1.8700537049607473E-004 + 218.88000000000000 1.8788447002333767E-004 + 218.94000000000000 1.8877048848372070E-004 + 219.00000000000000 1.8965583357046396E-004 + 219.06000000000000 1.9053288771803733E-004 + 219.12000000000000 1.9139395937347445E-004 + 219.18000000000001 1.9223141090688313E-004 + 219.24000000000001 1.9303761002535514E-004 + 219.30000000000001 1.9380498814929563E-004 + 219.36000000000001 1.9452610358662359E-004 + 219.42000000000002 1.9519359781248861E-004 + 219.48000000000002 1.9580030486454538E-004 + 219.53999999999996 1.9633921660729608E-004 + 219.59999999999997 1.9680353097200923E-004 + 219.65999999999997 1.9718668156382287E-004 + 219.71999999999997 1.9748234288061164E-004 + 219.77999999999997 1.9768449191357183E-004 + 219.83999999999997 1.9778737973497328E-004 + 219.89999999999998 1.9778560284226945E-004 + 219.95999999999998 1.9767409469289050E-004 + 220.01999999999998 1.9744813904044796E-004 + 220.07999999999998 1.9710341066301411E-004 + 220.13999999999999 1.9663599749797221E-004 + 220.19999999999999 1.9604236972091231E-004 + 220.25999999999999 1.9531943652521388E-004 + 220.31999999999999 1.9446452371602184E-004 + 220.38000000000000 1.9347542693022688E-004 + 220.44000000000000 1.9235036946427128E-004 + 220.50000000000000 1.9108800124511858E-004 + 220.56000000000000 1.8968746913951157E-004 + 220.62000000000000 1.8814834524315854E-004 + 220.68000000000001 1.8647066810957092E-004 + 220.74000000000001 1.8465493091258849E-004 + 220.80000000000001 1.8270205081084316E-004 + 220.86000000000001 1.8061341886746549E-004 + 220.92000000000002 1.7839082196826730E-004 + 220.98000000000002 1.7603652623195468E-004 + 221.03999999999996 1.7355318583153051E-004 + 221.09999999999997 1.7094387098938235E-004 + 221.15999999999997 1.6821204630567343E-004 + 221.21999999999997 1.6536154514032380E-004 + 221.27999999999997 1.6239658752498028E-004 + 221.33999999999997 1.5932172522639513E-004 + 221.39999999999998 1.5614184710557191E-004 + 221.45999999999998 1.5286213783403911E-004 + 221.51999999999998 1.4948806076096506E-004 + 221.57999999999998 1.4602536054936639E-004 + 221.63999999999999 1.4248003549700123E-004 + 221.69999999999999 1.3885826441138315E-004 + 221.75999999999999 1.3516642876662812E-004 + 221.81999999999999 1.3141110936086813E-004 + 221.88000000000000 1.2759901349428162E-004 + 221.94000000000000 1.2373697068777833E-004 + 222.00000000000000 1.1983193236463644E-004 + 222.06000000000000 1.1589091177676907E-004 + 222.12000000000000 1.1192099318155372E-004 + 222.18000000000001 1.0792930989333615E-004 + 222.24000000000001 1.0392299466741137E-004 + 222.30000000000001 9.9909204299489105E-005 + 222.36000000000001 9.5895052611344049E-005 + 222.42000000000002 9.1887618062055131E-005 + 222.48000000000002 8.7893907860226049E-005 + 222.53999999999996 8.3920860529959000E-005 + 222.59999999999997 7.9975280087465935E-005 + 222.65999999999997 7.6063865160986465E-005 + 222.71999999999997 7.2193129391736479E-005 + 222.77999999999997 6.8369423374267307E-005 + 222.83999999999997 6.4598896473481800E-005 + 222.89999999999998 6.0887464476507754E-005 + 222.95999999999998 5.7240801193890143E-005 + 223.01999999999998 5.3664321150739757E-005 + 223.07999999999998 5.0163163783508383E-005 + 223.13999999999999 4.6742151365555338E-005 + 223.19999999999999 4.3405809566934495E-005 + 223.25999999999999 4.0158333187696797E-005 + 223.31999999999999 3.7003585056967328E-005 + 223.38000000000000 3.3945083121213804E-005 + 223.44000000000000 3.0986007886318021E-005 + 223.50000000000000 2.8129183136620440E-005 + 223.56000000000000 2.5377079870552518E-005 + 223.62000000000000 2.2731819659202825E-005 + 223.68000000000001 2.0195171393646260E-005 + 223.74000000000001 1.7768552957197310E-005 + 223.80000000000001 1.5453032300499029E-005 + 223.86000000000001 1.3249332740292965E-005 + 223.92000000000002 1.1157833457991581E-005 + 223.98000000000002 9.1785744930095700E-006 + 224.03999999999996 7.3112600058632361E-006 + 224.09999999999997 5.5552613424657442E-006 + 224.15999999999997 3.9096235500659694E-006 + 224.21999999999997 2.3730703463432194E-006 + 224.27999999999997 9.4400858439307961E-007 + 224.33999999999997 -3.7946133867287765E-007 + 224.39999999999998 -1.5995405213207881E-006 + 224.45999999999998 -2.7187189940955487E-006 + 224.51999999999998 -3.7397680050745474E-006 + 224.57999999999998 -4.6657266787018537E-006 + 224.63999999999999 -5.4998906310297368E-006 + 224.69999999999999 -6.2457963093068780E-006 + 224.75999999999999 -6.9072077515531841E-006 + 224.81999999999999 -7.4881021044703755E-006 + 224.88000000000000 -7.9926494990242815E-006 + 224.94000000000000 -8.4252026246200735E-006 + 225.00000000000000 -8.7902771141139388E-006 + 225.06000000000000 -9.0925339957322544E-006 + 225.12000000000000 -9.3367655363555883E-006 + 225.18000000000001 -9.5278788429930868E-006 + 225.24000000000001 -9.6708763894920904E-006 + 225.30000000000001 -9.7708448416461803E-006 + 225.36000000000001 -9.8329348690537642E-006 + 225.42000000000002 -9.8623489696249558E-006 + 225.48000000000002 -9.8643241341160209E-006 + 225.53999999999996 -9.8441167686793384E-006 + 225.59999999999997 -9.8069897889468762E-006 + 225.65999999999997 -9.7581959564340088E-006 + 225.71999999999997 -9.7029621128639108E-006 + 225.77999999999997 -9.6464771417813420E-006 + 225.83999999999997 -9.5938792674580195E-006 + 225.89999999999998 -9.5502379095737147E-006 + 225.95999999999998 -9.5205452842409530E-006 + 226.01999999999998 -9.5097029725038516E-006 + 226.07999999999998 -9.5225089558091378E-006 + 226.13999999999999 -9.5636485037565542E-006 + 226.19999999999999 -9.6376831138432756E-006 + 226.25999999999999 -9.7490437007246264E-006 + 226.31999999999999 -9.9020194862644555E-006 + 226.38000000000000 -1.0100752981673458E-005 + 226.44000000000000 -1.0349227961098478E-005 + 226.50000000000000 -1.0651273395290361E-005 + 226.56000000000000 -1.1010546575566906E-005 + 226.62000000000000 -1.1430533597940646E-005 + 226.68000000000001 -1.1914541925929043E-005 + 226.74000000000001 -1.2465694259247527E-005 + 226.80000000000001 -1.3086924150500852E-005 + 226.86000000000001 -1.3780969128185830E-005 + 226.92000000000002 -1.4550365632208190E-005 + 226.98000000000002 -1.5397442251511022E-005 + 227.03999999999996 -1.6324312745608946E-005 + 227.09999999999997 -1.7332874367647136E-005 + 227.15999999999997 -1.8424796674317419E-005 + 227.21999999999997 -1.9601520285983249E-005 + 227.27999999999997 -2.0864249304171422E-005 + 227.33999999999997 -2.2213949197692735E-005 + 227.39999999999998 -2.3651347422169465E-005 + 227.45999999999998 -2.5176923551458018E-005 + 227.51999999999998 -2.6790911328441763E-005 + 227.57999999999998 -2.8493304506532910E-005 + 227.63999999999999 -3.0283851685626183E-005 + 227.69999999999999 -3.2162058939220300E-005 + 227.75999999999999 -3.4127191270467808E-005 + 227.81999999999999 -3.6178283492584745E-005 + 227.88000000000000 -3.8314134842444556E-005 + 227.94000000000000 -4.0533319614431533E-005 + 228.00000000000000 -4.2834190776324809E-005 + 228.06000000000000 -4.5214884523554666E-005 + 228.12000000000000 -4.7673329354842968E-005 + 228.18000000000001 -5.0207240656877878E-005 + 228.24000000000001 -5.2814135810270093E-005 + 228.30000000000001 -5.5491330938813477E-005 + 228.36000000000001 -5.8235964834228084E-005 + 228.42000000000002 -6.1044977863741702E-005 + 228.48000000000002 -6.3915144682036195E-005 + 228.53999999999996 -6.6843042847344566E-005 + 228.59999999999997 -6.9825101851979734E-005 + 228.65999999999997 -7.2857588954369456E-005 + 228.71999999999997 -7.5936605213357578E-005 + 228.77999999999997 -7.9058118267230035E-005 + 228.83999999999997 -8.2217966413955211E-005 + 228.89999999999998 -8.5411840544853229E-005 + 228.95999999999998 -8.8635339600960316E-005 + 229.01999999999998 -9.1883952712904404E-005 + 229.07999999999998 -9.5153056077555700E-005 + 229.13999999999999 -9.8437958621374846E-005 + 229.19999999999999 -1.0173390276054901E-004 + 229.25999999999999 -1.0503607000468119E-004 + 229.31999999999999 -1.0833960144302515E-004 + 229.38000000000000 -1.1163959134683767E-004 + 229.44000000000000 -1.1493112251196740E-004 + 229.50000000000000 -1.1820929734756201E-004 + 229.56000000000000 -1.2146919339446927E-004 + 229.62000000000000 -1.2470592290480742E-004 + 229.68000000000001 -1.2791463615351278E-004 + 229.74000000000001 -1.3109052432776441E-004 + 229.80000000000001 -1.3422883749352339E-004 + 229.86000000000001 -1.3732491748958724E-004 + 229.92000000000002 -1.4037417046224748E-004 + 229.97999999999996 -1.4337212428672499E-004 + 230.03999999999996 -1.4631439401859917E-004 + 230.09999999999997 -1.4919674421506581E-004 + 230.15999999999997 -1.5201506631506886E-004 + 230.21999999999997 -1.5476541661280072E-004 + 230.27999999999997 -1.5744398587855130E-004 + 230.33999999999997 -1.6004712423070333E-004 + 230.39999999999998 -1.6257139663739532E-004 + 230.45999999999998 -1.6501352790029573E-004 + 230.51999999999998 -1.6737042134928789E-004 + 230.57999999999998 -1.6963917596399421E-004 + 230.63999999999999 -1.7181709486664064E-004 + 230.69999999999999 -1.7390165773296785E-004 + 230.75999999999999 -1.7589055447982962E-004 + 230.81999999999999 -1.7778167613383453E-004 + 230.88000000000000 -1.7957311225792887E-004 + 230.94000000000000 -1.8126312606251698E-004 + 231.00000000000000 -1.8285019154303726E-004 + 231.06000000000000 -1.8433296276802939E-004 + 231.12000000000000 -1.8571030292642741E-004 + 231.18000000000001 -1.8698124767607438E-004 + 231.24000000000001 -1.8814500799409963E-004 + 231.30000000000001 -1.8920098980861023E-004 + 231.36000000000001 -1.9014877398313790E-004 + 231.42000000000002 -1.9098811237558652E-004 + 231.47999999999996 -1.9171894437201235E-004 + 231.53999999999996 -1.9234135291292938E-004 + 231.59999999999997 -1.9285561170746983E-004 + 231.65999999999997 -1.9326213507970229E-004 + 231.71999999999997 -1.9356148607676185E-004 + 231.77999999999997 -1.9375439249510567E-004 + 231.83999999999997 -1.9384170832069275E-004 + 231.89999999999998 -1.9382440019054901E-004 + 231.95999999999998 -1.9370357913403512E-004 + 232.01999999999998 -1.9348045527491393E-004 + 232.07999999999998 -1.9315631519304486E-004 + 232.13999999999999 -1.9273256276929426E-004 + 232.19999999999999 -1.9221065303994125E-004 + 232.25999999999999 -1.9159213522232287E-004 + 232.31999999999999 -1.9087858528488651E-004 + 232.38000000000000 -1.9007162824746055E-004 + 232.44000000000000 -1.8917292140589121E-004 + 232.50000000000000 -1.8818417059643757E-004 + 232.56000000000000 -1.8710708121869583E-004 + 232.62000000000000 -1.8594339443672936E-004 + 232.68000000000001 -1.8469484363566469E-004 + 232.74000000000001 -1.8336319138097809E-004 + 232.80000000000001 -1.8195018174538285E-004 + 232.86000000000001 -1.8045757892488578E-004 + 232.92000000000002 -1.7888715805269980E-004 + 232.97999999999996 -1.7724069100785118E-004 + 233.03999999999996 -1.7551994397070782E-004 + 233.09999999999997 -1.7372669390633836E-004 + 233.15999999999997 -1.7186273496563542E-004 + 233.21999999999997 -1.6992985535393564E-004 + 233.27999999999997 -1.6792985049057731E-004 + 233.33999999999997 -1.6586452940045186E-004 + 233.39999999999998 -1.6373568112205592E-004 + 233.45999999999998 -1.6154511686865942E-004 + 233.51999999999998 -1.5929465570121263E-004 + 233.57999999999998 -1.5698610443473264E-004 + 233.63999999999999 -1.5462130042708094E-004 + 233.69999999999999 -1.5220205984239018E-004 + 233.75999999999999 -1.4973020202929498E-004 + 233.81999999999999 -1.4720754919216180E-004 + 233.88000000000000 -1.4463594058341679E-004 + 233.94000000000000 -1.4201721000831101E-004 + 234.00000000000000 -1.3935319075667431E-004 + 234.06000000000000 -1.3664571736303615E-004 + 234.12000000000000 -1.3389663398718539E-004 + 234.18000000000001 -1.3110781017440913E-004 + 234.24000000000001 -1.2828110524615337E-004 + 234.30000000000001 -1.2541838233320792E-004 + 234.36000000000001 -1.2252153465385358E-004 + 234.42000000000002 -1.1959246330299532E-004 + 234.47999999999996 -1.1663307834640331E-004 + 234.53999999999996 -1.1364531142547209E-004 + 234.59999999999997 -1.1063110824715629E-004 + 234.65999999999997 -1.0759243251595890E-004 + 234.71999999999997 -1.0453126929705929E-004 + 234.77999999999997 -1.0144962253847162E-004 + 234.83999999999997 -9.8349496938790386E-005 + 234.89999999999998 -9.5232918838825269E-005 + 234.95999999999998 -9.2101938820656067E-005 + 235.01999999999998 -8.8958602562224886E-005 + 235.07999999999998 -8.5804973135758696E-005 + 235.13999999999999 -8.2643103089467655E-005 + 235.19999999999999 -7.9475051018784067E-005 + 235.25999999999999 -7.6302857870019246E-005 + 235.31999999999999 -7.3128565495220456E-005 + 235.38000000000000 -6.9954179190948675E-005 + 235.44000000000000 -6.6781688400372686E-005 + 235.50000000000000 -6.3613039169614115E-005 + 235.56000000000000 -6.0450148291715305E-005 + 235.62000000000000 -5.7294891318911450E-005 + 235.68000000000001 -5.4149078027591434E-005 + 235.74000000000001 -5.1014475480372560E-005 + 235.80000000000001 -4.7892781217053038E-005 + 235.86000000000001 -4.4785639192628757E-005 + 235.92000000000002 -4.1694620607061087E-005 + 235.97999999999996 -3.8621234317163534E-005 + 236.03999999999996 -3.5566918947680650E-005 + 236.09999999999997 -3.2533040978747788E-005 + 236.15999999999997 -2.9520900473949453E-005 + 236.21999999999997 -2.6531736549387955E-005 + 236.27999999999997 -2.3566715929344170E-005 + 236.33999999999997 -2.0626950760886313E-005 + 236.39999999999998 -1.7713484100422917E-005 + 236.45999999999998 -1.4827304008478417E-005 + 236.51999999999998 -1.1969341947934459E-005 + 236.57999999999998 -9.1404724148236541E-006 + 236.63999999999999 -6.3415153163049482E-006 + 236.69999999999999 -3.5732361609199238E-006 + 236.75999999999999 -8.3634595816635557E-007 + 236.81999999999999 1.8684976305735803E-006 + 236.88000000000000 4.5406903680417903E-006 + 236.94000000000000 7.1796834612959051E-006 + 237.00000000000000 9.7849827820009740E-006 + 237.06000000000000 1.2356145450356141E-005 + 237.12000000000000 1.4892780325038735E-005 + 237.18000000000001 1.7394552207369989E-005 + 237.24000000000001 1.9861166636217701E-005 + 237.30000000000001 2.2292378169038730E-005 + 237.36000000000001 2.4687977964204348E-005 + 237.42000000000002 2.7047791209941471E-005 + 237.47999999999996 2.9371671902185376E-005 + 237.53999999999996 3.1659500559500726E-005 + 237.59999999999997 3.3911167494006364E-005 + 237.65999999999997 3.6126573760489138E-005 + 237.71999999999997 3.8305612995842840E-005 + 237.77999999999997 4.0448185310749631E-005 + 237.83999999999997 4.2554170748224580E-005 + 237.89999999999998 4.4623432749892855E-005 + 237.95999999999998 4.6655820111840268E-005 + 238.01999999999998 4.8651151420472473E-005 + 238.07999999999998 5.0609219470539374E-005 + 238.13999999999999 5.2529786514282798E-005 + 238.19999999999999 5.4412588487589693E-005 + 238.25999999999999 5.6257338407297675E-005 + 238.31999999999999 5.8063710472972137E-005 + 238.38000000000000 5.9831354913765854E-005 + 238.44000000000000 6.1559915814050122E-005 + 238.50000000000000 6.3248983775847205E-005 + 238.56000000000000 6.4898132470355839E-005 + 238.62000000000000 6.6506927682916288E-005 + 238.68000000000001 6.8074898764402731E-005 + 238.74000000000001 6.9601553888909578E-005 + 238.80000000000001 7.1086388162703819E-005 + 238.86000000000001 7.2528861416801653E-005 + 238.92000000000002 7.3928402837946636E-005 + 238.97999999999996 7.5284422506644938E-005 + 239.03999999999996 7.6596304730212672E-005 + 239.09999999999997 7.7863391789418314E-005 + 239.15999999999997 7.9085000056356157E-005 + 239.21999999999997 8.0260426730475155E-005 + 239.27999999999997 8.1388913330066417E-005 + 239.33999999999997 8.2469700941509438E-005 + 239.39999999999998 8.3501985684011231E-005 + 239.45999999999998 8.4484957095797052E-005 + 239.51999999999998 8.5417767633584016E-005 + 239.57999999999998 8.6299557676373175E-005 + 239.63999999999999 8.7129456384305034E-005 + 239.69999999999999 8.7906590513177048E-005 + 239.75999999999999 8.8630075473885087E-005 + 239.81999999999999 8.9299040200472508E-005 + 239.88000000000000 8.9912614489054925E-005 + 239.94000000000000 9.0469941905234585E-005 + 240.00000000000000 9.0970178473139646E-005 + 240.06000000000000 9.1412506820293766E-005 + 240.12000000000000 9.1796129175136123E-005 + 240.18000000000001 9.2120278936714905E-005 + 240.24000000000001 9.2384220426407692E-005 + 240.30000000000001 9.2587230560609368E-005 + 240.36000000000001 9.2728638151338302E-005 + 240.42000000000002 9.2807807119741939E-005 + 240.47999999999996 9.2824125285219676E-005 + 240.53999999999996 9.2777014589333196E-005 + 240.59999999999997 9.2665942468249813E-005 + 240.65999999999997 9.2490418733980829E-005 + 240.71999999999997 9.2249986528408095E-005 + 240.77999999999997 9.1944220527280925E-005 + 240.83999999999997 9.1572740410924652E-005 + 240.89999999999998 9.1135210207186402E-005 + 240.95999999999998 9.0631322795041490E-005 + 241.01999999999998 9.0060820917442857E-005 + 241.07999999999998 8.9423484896308816E-005 + 241.13999999999999 8.8719130231461929E-005 + 241.19999999999999 8.7947614203977544E-005 + 241.25999999999999 8.7108854845294683E-005 + 241.31999999999999 8.6202802487642607E-005 + 241.38000000000000 8.5229450737269333E-005 + 241.44000000000000 8.4188844966468201E-005 + 241.50000000000000 8.3081082244002379E-005 + 241.56000000000000 8.1906337580484601E-005 + 241.62000000000000 8.0664818737731934E-005 + 241.68000000000001 7.9356812290649705E-005 + 241.74000000000001 7.7982674596877233E-005 + 241.80000000000001 7.6542835037323739E-005 + 241.86000000000001 7.5037795122257390E-005 + 241.92000000000002 7.3468142155379436E-005 + 241.97999999999996 7.1834551472048586E-005 + 242.03999999999996 7.0137787538824392E-005 + 242.09999999999997 6.8378712112912124E-005 + 242.15999999999997 6.6558270723831843E-005 + 242.21999999999997 6.4677514440727733E-005 + 242.27999999999997 6.2737588467026768E-005 + 242.33999999999997 6.0739726761505789E-005 + 242.39999999999998 5.8685264698533848E-005 + 242.45999999999998 5.6575631820414780E-005 + 242.51999999999998 5.4412346898053164E-005 + 242.57999999999998 5.2197021953455664E-005 + 242.63999999999999 4.9931356122614640E-005 + 242.69999999999999 4.7617133873762385E-005 + 242.75999999999999 4.5256224899230812E-005 + 242.81999999999999 4.2850591841389914E-005 + 242.88000000000000 4.0402269430524519E-005 + 242.94000000000000 3.7913374647153051E-005 + 243.00000000000000 3.5386113957140175E-005 + 243.06000000000000 3.2822769155430582E-005 + 243.12000000000000 3.0225707323877759E-005 + 243.18000000000001 2.7597376504091376E-005 + 243.24000000000001 2.4940302352817135E-005 + 243.30000000000001 2.2257087679896998E-005 + 243.36000000000001 1.9550413790913908E-005 + 243.42000000000002 1.6823035368451635E-005 + 243.47999999999996 1.4077778206127518E-005 + 243.53999999999996 1.1317532957257184E-005 + 243.59999999999997 8.5452510376586497E-006 + 243.65999999999997 5.7639406199094687E-006 + 243.71999999999997 2.9766566754163416E-006 + 243.77999999999997 1.8649579529874855E-007 + 243.83999999999997 -2.6034116359205879E-006 + 243.89999999999998 -5.3899096526033184E-006 + 243.95999999999998 -8.1698234198005677E-006 + 244.01999999999998 -1.0939969961251454E-005 + 244.07999999999998 -1.3697165409443041E-005 + 244.13999999999999 -1.6438230299389098E-005 + 244.19999999999999 -1.9160003090644941E-005 + 244.25999999999999 -2.1859339056760971E-005 + 244.31999999999999 -2.4533129515054565E-005 + 244.38000000000000 -2.7178300454822124E-005 + 244.44000000000000 -2.9791824144585841E-005 + 244.50000000000000 -3.2370718943416834E-005 + 244.56000000000000 -3.4912071415119404E-005 + 244.62000000000000 -3.7413026158567915E-005 + 244.68000000000001 -3.9870805185052221E-005 + 244.74000000000001 -4.2282709879160940E-005 + 244.80000000000001 -4.4646134373096376E-005 + 244.86000000000001 -4.6958557464995904E-005 + 244.92000000000002 -4.9217563788788292E-005 + 244.97999999999996 -5.1420842217284743E-005 + 245.03999999999996 -5.3566186194571292E-005 + 245.09999999999997 -5.5651512335879572E-005 + 245.15999999999997 -5.7674851395006034E-005 + 245.21999999999997 -5.9634349359960461E-005 + 245.27999999999997 -6.1528280196193448E-005 + 245.33999999999997 -6.3355044575056583E-005 + 245.39999999999998 -6.5113174638152990E-005 + 245.45999999999998 -6.6801310444531830E-005 + 245.51999999999998 -6.8418235082846088E-005 + 245.57999999999998 -6.9962858144683858E-005 + 245.63999999999999 -7.1434208581643271E-005 + 245.69999999999999 -7.2831458537979404E-005 + 245.75999999999999 -7.4153890539946981E-005 + 245.81999999999999 -7.5400925593335934E-005 + 245.88000000000000 -7.6572136658231143E-005 + 245.94000000000000 -7.7667198656067277E-005 + 246.00000000000000 -7.8685934876448671E-005 + 246.06000000000000 -7.9628314227542279E-005 + 246.12000000000000 -8.0494426606166942E-005 + 246.18000000000001 -8.1284515776520238E-005 + 246.24000000000001 -8.1998952582756961E-005 + 246.30000000000001 -8.2638252354237378E-005 + 246.36000000000001 -8.3203057410916552E-005 + 246.42000000000002 -8.3694140008061231E-005 + 246.47999999999996 -8.4112411123878170E-005 + 246.53999999999996 -8.4458887336168244E-005 + 246.59999999999997 -8.4734704827017367E-005 + 246.65999999999997 -8.4941092823152632E-005 + 246.71999999999997 -8.5079386538537929E-005 + 246.77999999999997 -8.5151009937258941E-005 + 246.83999999999997 -8.5157456488967921E-005 + 246.89999999999998 -8.5100290991640799E-005 + 246.95999999999998 -8.4981132694425318E-005 + 247.01999999999998 -8.4801663922348945E-005 + 247.07999999999998 -8.4563603585645925E-005 + 247.13999999999999 -8.4268718256578508E-005 + 247.19999999999999 -8.3918815583825863E-005 + 247.25999999999999 -8.3515724013730793E-005 + 247.31999999999999 -8.3061310794299635E-005 + 247.38000000000000 -8.2557485302758147E-005 + 247.44000000000000 -8.2006165890730827E-005 + 247.50000000000000 -8.1409323023836879E-005 + 247.56000000000000 -8.0768957434206064E-005 + 247.62000000000000 -8.0087096021528112E-005 + 247.68000000000001 -7.9365787100748778E-005 + 247.74000000000001 -7.8607112328715626E-005 + 247.80000000000001 -7.7813189537308884E-005 + 247.86000000000001 -7.6986133519293411E-005 + 247.92000000000002 -7.6128105804792133E-005 + 247.97999999999996 -7.5241252828875139E-005 + 248.03999999999996 -7.4327743338489268E-005 + 248.09999999999997 -7.3389748656570451E-005 + 248.15999999999997 -7.2429426321253765E-005 + 248.21999999999997 -7.1448916443089735E-005 + 248.27999999999997 -7.0450343555330985E-005 + 248.33999999999997 -6.9435793829298169E-005 + 248.39999999999998 -6.8407342032272741E-005 + 248.45999999999998 -6.7366999063030484E-005 + 248.51999999999998 -6.6316753703559925E-005 + 248.57999999999998 -6.5258542109455448E-005 + 248.63999999999999 -6.4194238906346802E-005 + 248.69999999999999 -6.3125676841126091E-005 + 248.75999999999999 -6.2054644994949105E-005 + 248.81999999999999 -6.0982854751212117E-005 + 248.88000000000000 -5.9911981477710597E-005 + 248.94000000000000 -5.8843625974516544E-005 + 249.00000000000000 -5.7779344525936592E-005 + 249.06000000000000 -5.6720627628531645E-005 + 249.12000000000000 -5.5668908173446510E-005 + 249.18000000000001 -5.4625565498994643E-005 + 249.24000000000001 -5.3591913277217980E-005 + 249.30000000000001 -5.2569207359429097E-005 + 249.36000000000001 -5.1558638424445190E-005 + 249.42000000000002 -5.0561345132732621E-005 + 249.47999999999996 -4.9578398856490687E-005 + 249.53999999999996 -4.8610804042300944E-005 + 249.59999999999997 -4.7659511627389596E-005 + 249.65999999999997 -4.6725407504281910E-005 + 249.71999999999997 -4.5809312565207842E-005 + 249.77999999999997 -4.4911984664677395E-005 + 249.83999999999997 -4.4034118720725991E-005 + 249.89999999999998 -4.3176342176167956E-005 + 249.95999999999998 -4.2339221978109866E-005 + 250.01999999999998 -4.1523252291169003E-005 + 250.07999999999998 -4.0728853988997438E-005 + 250.13999999999999 -3.9956384608907746E-005 + 250.19999999999999 -3.9206119379670995E-005 + 250.25999999999999 -3.8478270712292325E-005 + 250.31999999999999 -3.7772961974755730E-005 + 250.38000000000000 -3.7090250480377724E-005 + 250.44000000000000 -3.6430106457876506E-005 + 250.50000000000000 -3.5792433292810952E-005 + 250.56000000000000 -3.5177055475479617E-005 + 250.62000000000000 -3.4583721833017245E-005 + 250.68000000000001 -3.4012116801742566E-005 + 250.74000000000001 -3.3461864840060383E-005 + 250.80000000000001 -3.2932527142031722E-005 + 250.86000000000001 -3.2423617806277238E-005 + 250.92000000000002 -3.1934604372431803E-005 + 250.97999999999996 -3.1464924555535669E-005 + 251.03999999999996 -3.1013982918567091E-005 + 251.09999999999997 -3.0581167099720512E-005 + 251.15999999999997 -3.0165842063633716E-005 + 251.21999999999997 -2.9767372710505936E-005 + 251.27999999999997 -2.9385119263816116E-005 + 251.33999999999997 -2.9018444381323967E-005 + 251.39999999999998 -2.8666717091115959E-005 + 251.45999999999998 -2.8329304967914731E-005 + 251.51999999999998 -2.8005593340393921E-005 + 251.57999999999998 -2.7694966789003718E-005 + 251.63999999999999 -2.7396824334098916E-005 + 251.69999999999999 -2.7110573652348164E-005 + 251.75999999999999 -2.6835629505606852E-005 + 251.81999999999999 -2.6571418437286069E-005 + 251.88000000000000 -2.6317371261236789E-005 + 251.94000000000000 -2.6072938280192810E-005 diff --git a/seisflows/tests/test_data/test_solver/001/traces/syn/AA.S000000.BXY.semd b/seisflows/tests/test_data/test_solver/001/traces/syn/AA.S000000.BXY.semd new file mode 100644 index 00000000..db5872ec --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/traces/syn/AA.S000000.BXY.semd @@ -0,0 +1,5000 @@ + -48.000000000000000 0.0000000000000000 + -47.939999999999998 0.0000000000000000 + -47.880000000000003 0.0000000000000000 + -47.820000000000000 0.0000000000000000 + -47.759999999999998 0.0000000000000000 + -47.700000000000003 0.0000000000000000 + -47.640000000000001 0.0000000000000000 + -47.579999999999998 0.0000000000000000 + -47.520000000000003 0.0000000000000000 + -47.460000000000001 0.0000000000000000 + -47.399999999999999 0.0000000000000000 + -47.340000000000003 0.0000000000000000 + -47.280000000000001 0.0000000000000000 + -47.219999999999999 0.0000000000000000 + -47.159999999999997 0.0000000000000000 + -47.100000000000001 0.0000000000000000 + -47.039999999999999 0.0000000000000000 + -46.979999999999997 0.0000000000000000 + -46.920000000000002 0.0000000000000000 + -46.859999999999999 0.0000000000000000 + -46.799999999999997 0.0000000000000000 + -46.740000000000002 0.0000000000000000 + -46.680000000000000 0.0000000000000000 + -46.619999999999997 0.0000000000000000 + -46.560000000000002 0.0000000000000000 + -46.500000000000000 0.0000000000000000 + -46.439999999999998 0.0000000000000000 + -46.380000000000003 0.0000000000000000 + -46.320000000000000 0.0000000000000000 + -46.259999999999998 0.0000000000000000 + -46.200000000000003 0.0000000000000000 + -46.140000000000001 0.0000000000000000 + -46.079999999999998 0.0000000000000000 + -46.020000000000003 0.0000000000000000 + -45.960000000000001 0.0000000000000000 + -45.899999999999999 0.0000000000000000 + -45.840000000000003 0.0000000000000000 + -45.780000000000001 0.0000000000000000 + -45.719999999999999 0.0000000000000000 + -45.659999999999997 0.0000000000000000 + -45.600000000000001 0.0000000000000000 + -45.539999999999999 0.0000000000000000 + -45.479999999999997 0.0000000000000000 + -45.420000000000002 0.0000000000000000 + -45.359999999999999 0.0000000000000000 + -45.299999999999997 0.0000000000000000 + -45.240000000000002 0.0000000000000000 + -45.180000000000000 0.0000000000000000 + -45.119999999999997 0.0000000000000000 + -45.060000000000002 0.0000000000000000 + -45.000000000000000 0.0000000000000000 + -44.939999999999998 0.0000000000000000 + -44.880000000000003 0.0000000000000000 + -44.820000000000000 0.0000000000000000 + -44.759999999999998 0.0000000000000000 + -44.700000000000003 0.0000000000000000 + -44.640000000000001 0.0000000000000000 + -44.579999999999998 0.0000000000000000 + -44.520000000000003 0.0000000000000000 + -44.460000000000001 0.0000000000000000 + -44.399999999999999 0.0000000000000000 + -44.340000000000003 0.0000000000000000 + -44.280000000000001 0.0000000000000000 + -44.219999999999999 0.0000000000000000 + -44.159999999999997 0.0000000000000000 + -44.100000000000001 0.0000000000000000 + -44.039999999999999 0.0000000000000000 + -43.980000000000004 0.0000000000000000 + -43.920000000000002 0.0000000000000000 + -43.859999999999999 0.0000000000000000 + -43.799999999999997 0.0000000000000000 + -43.740000000000002 0.0000000000000000 + -43.680000000000000 0.0000000000000000 + -43.619999999999997 0.0000000000000000 + -43.560000000000002 0.0000000000000000 + -43.500000000000000 0.0000000000000000 + -43.439999999999998 0.0000000000000000 + -43.380000000000003 0.0000000000000000 + -43.320000000000000 0.0000000000000000 + -43.259999999999998 0.0000000000000000 + -43.200000000000003 0.0000000000000000 + -43.140000000000001 0.0000000000000000 + -43.079999999999998 0.0000000000000000 + -43.020000000000003 0.0000000000000000 + -42.960000000000001 0.0000000000000000 + -42.899999999999999 0.0000000000000000 + -42.840000000000003 0.0000000000000000 + -42.780000000000001 0.0000000000000000 + -42.719999999999999 0.0000000000000000 + -42.659999999999997 0.0000000000000000 + -42.600000000000001 0.0000000000000000 + -42.539999999999999 0.0000000000000000 + -42.480000000000004 0.0000000000000000 + -42.420000000000002 0.0000000000000000 + -42.359999999999999 0.0000000000000000 + -42.299999999999997 0.0000000000000000 + -42.240000000000002 0.0000000000000000 + -42.180000000000000 0.0000000000000000 + -42.119999999999997 0.0000000000000000 + -42.060000000000002 0.0000000000000000 + -42.000000000000000 0.0000000000000000 + -41.939999999999998 0.0000000000000000 + -41.880000000000003 0.0000000000000000 + -41.820000000000000 0.0000000000000000 + -41.759999999999998 0.0000000000000000 + -41.700000000000003 0.0000000000000000 + -41.640000000000001 0.0000000000000000 + -41.579999999999998 0.0000000000000000 + -41.520000000000003 0.0000000000000000 + -41.460000000000001 0.0000000000000000 + -41.399999999999999 0.0000000000000000 + -41.340000000000003 0.0000000000000000 + -41.280000000000001 0.0000000000000000 + -41.219999999999999 0.0000000000000000 + -41.159999999999997 0.0000000000000000 + -41.100000000000001 0.0000000000000000 + -41.039999999999999 0.0000000000000000 + -40.980000000000004 0.0000000000000000 + -40.920000000000002 0.0000000000000000 + -40.859999999999999 0.0000000000000000 + -40.799999999999997 0.0000000000000000 + -40.740000000000002 0.0000000000000000 + -40.680000000000000 0.0000000000000000 + -40.619999999999997 0.0000000000000000 + -40.560000000000002 0.0000000000000000 + -40.500000000000000 0.0000000000000000 + -40.439999999999998 0.0000000000000000 + -40.380000000000003 0.0000000000000000 + -40.320000000000000 0.0000000000000000 + -40.259999999999998 0.0000000000000000 + -40.200000000000003 0.0000000000000000 + -40.140000000000001 0.0000000000000000 + -40.079999999999998 0.0000000000000000 + -40.020000000000003 0.0000000000000000 + -39.960000000000001 0.0000000000000000 + -39.899999999999999 0.0000000000000000 + -39.840000000000003 0.0000000000000000 + -39.780000000000001 0.0000000000000000 + -39.719999999999999 0.0000000000000000 + -39.659999999999997 0.0000000000000000 + -39.600000000000001 0.0000000000000000 + -39.539999999999999 0.0000000000000000 + -39.480000000000004 0.0000000000000000 + -39.420000000000002 0.0000000000000000 + -39.359999999999999 0.0000000000000000 + -39.299999999999997 0.0000000000000000 + -39.240000000000002 0.0000000000000000 + -39.180000000000000 0.0000000000000000 + -39.120000000000005 0.0000000000000000 + -39.060000000000002 0.0000000000000000 + -39.000000000000000 0.0000000000000000 + -38.939999999999998 0.0000000000000000 + -38.880000000000003 0.0000000000000000 + -38.820000000000000 0.0000000000000000 + -38.759999999999998 0.0000000000000000 + -38.700000000000003 0.0000000000000000 + -38.640000000000001 0.0000000000000000 + -38.579999999999998 0.0000000000000000 + -38.519999999999996 0.0000000000000000 + -38.460000000000001 0.0000000000000000 + -38.399999999999999 0.0000000000000000 + -38.340000000000003 0.0000000000000000 + -38.280000000000001 0.0000000000000000 + -38.219999999999999 0.0000000000000000 + -38.159999999999997 0.0000000000000000 + -38.100000000000001 0.0000000000000000 + -38.039999999999999 0.0000000000000000 + -37.980000000000004 0.0000000000000000 + -37.920000000000002 0.0000000000000000 + -37.859999999999999 0.0000000000000000 + -37.799999999999997 0.0000000000000000 + -37.740000000000002 0.0000000000000000 + -37.680000000000000 0.0000000000000000 + -37.620000000000005 0.0000000000000000 + -37.560000000000002 0.0000000000000000 + -37.500000000000000 0.0000000000000000 + -37.439999999999998 0.0000000000000000 + -37.380000000000003 0.0000000000000000 + -37.320000000000000 0.0000000000000000 + -37.259999999999998 0.0000000000000000 + -37.200000000000003 0.0000000000000000 + -37.140000000000001 0.0000000000000000 + -37.079999999999998 0.0000000000000000 + -37.019999999999996 0.0000000000000000 + -36.960000000000001 0.0000000000000000 + -36.899999999999999 0.0000000000000000 + -36.840000000000003 0.0000000000000000 + -36.780000000000001 0.0000000000000000 + -36.719999999999999 0.0000000000000000 + -36.659999999999997 0.0000000000000000 + -36.600000000000001 0.0000000000000000 + -36.539999999999999 0.0000000000000000 + -36.480000000000004 0.0000000000000000 + -36.420000000000002 0.0000000000000000 + -36.359999999999999 0.0000000000000000 + -36.299999999999997 0.0000000000000000 + -36.240000000000002 0.0000000000000000 + -36.180000000000000 0.0000000000000000 + -36.120000000000005 0.0000000000000000 + -36.060000000000002 0.0000000000000000 + -36.000000000000000 0.0000000000000000 + -35.939999999999998 0.0000000000000000 + -35.880000000000003 0.0000000000000000 + -35.820000000000000 0.0000000000000000 + -35.759999999999998 0.0000000000000000 + -35.700000000000003 0.0000000000000000 + -35.640000000000001 0.0000000000000000 + -35.579999999999998 0.0000000000000000 + -35.519999999999996 0.0000000000000000 + -35.460000000000001 0.0000000000000000 + -35.399999999999999 0.0000000000000000 + -35.340000000000003 0.0000000000000000 + -35.280000000000001 0.0000000000000000 + -35.219999999999999 0.0000000000000000 + -35.159999999999997 0.0000000000000000 + -35.100000000000001 0.0000000000000000 + -35.039999999999999 0.0000000000000000 + -34.980000000000004 0.0000000000000000 + -34.920000000000002 0.0000000000000000 + -34.859999999999999 0.0000000000000000 + -34.799999999999997 0.0000000000000000 + -34.740000000000002 0.0000000000000000 + -34.680000000000000 0.0000000000000000 + -34.620000000000005 0.0000000000000000 + -34.560000000000002 0.0000000000000000 + -34.500000000000000 0.0000000000000000 + -34.439999999999998 0.0000000000000000 + -34.380000000000003 0.0000000000000000 + -34.320000000000000 0.0000000000000000 + -34.259999999999998 0.0000000000000000 + -34.200000000000003 0.0000000000000000 + -34.140000000000001 0.0000000000000000 + -34.079999999999998 0.0000000000000000 + -34.020000000000003 0.0000000000000000 + -33.960000000000001 0.0000000000000000 + -33.899999999999999 0.0000000000000000 + -33.840000000000003 0.0000000000000000 + -33.780000000000001 0.0000000000000000 + -33.719999999999999 0.0000000000000000 + -33.659999999999997 0.0000000000000000 + -33.600000000000001 0.0000000000000000 + -33.539999999999999 0.0000000000000000 + -33.480000000000004 0.0000000000000000 + -33.420000000000002 0.0000000000000000 + -33.359999999999999 0.0000000000000000 + -33.299999999999997 0.0000000000000000 + -33.240000000000002 0.0000000000000000 + -33.180000000000000 0.0000000000000000 + -33.120000000000005 0.0000000000000000 + -33.060000000000002 0.0000000000000000 + -33.000000000000000 0.0000000000000000 + -32.939999999999998 0.0000000000000000 + -32.880000000000003 0.0000000000000000 + -32.820000000000000 0.0000000000000000 + -32.759999999999998 0.0000000000000000 + -32.700000000000003 0.0000000000000000 + -32.640000000000001 0.0000000000000000 + -32.579999999999998 0.0000000000000000 + -32.520000000000003 0.0000000000000000 + -32.460000000000001 0.0000000000000000 + -32.399999999999999 0.0000000000000000 + -32.340000000000003 0.0000000000000000 + -32.280000000000001 0.0000000000000000 + -32.219999999999999 0.0000000000000000 + -32.159999999999997 0.0000000000000000 + -32.100000000000001 0.0000000000000000 + -32.039999999999999 0.0000000000000000 + -31.980000000000000 0.0000000000000000 + -31.920000000000002 0.0000000000000000 + -31.859999999999999 0.0000000000000000 + -31.800000000000001 0.0000000000000000 + -31.740000000000002 0.0000000000000000 + -31.680000000000000 0.0000000000000000 + -31.620000000000001 0.0000000000000000 + -31.560000000000002 0.0000000000000000 + -31.500000000000000 0.0000000000000000 + -31.440000000000001 0.0000000000000000 + -31.379999999999999 0.0000000000000000 + -31.320000000000000 0.0000000000000000 + -31.260000000000002 0.0000000000000000 + -31.199999999999999 0.0000000000000000 + -31.140000000000001 0.0000000000000000 + -31.080000000000002 0.0000000000000000 + -31.020000000000000 0.0000000000000000 + -30.960000000000001 0.0000000000000000 + -30.900000000000002 0.0000000000000000 + -30.840000000000000 0.0000000000000000 + -30.780000000000001 0.0000000000000000 + -30.719999999999999 0.0000000000000000 + -30.660000000000000 0.0000000000000000 + -30.600000000000001 0.0000000000000000 + -30.539999999999999 0.0000000000000000 + -30.480000000000000 0.0000000000000000 + -30.420000000000002 0.0000000000000000 + -30.359999999999999 0.0000000000000000 + -30.300000000000001 0.0000000000000000 + -30.240000000000002 0.0000000000000000 + -30.180000000000000 0.0000000000000000 + -30.120000000000001 0.0000000000000000 + -30.060000000000002 0.0000000000000000 + -30.000000000000000 0.0000000000000000 + -29.940000000000001 0.0000000000000000 + -29.879999999999999 0.0000000000000000 + -29.820000000000000 0.0000000000000000 + -29.760000000000002 0.0000000000000000 + -29.699999999999999 0.0000000000000000 + -29.640000000000001 0.0000000000000000 + -29.580000000000002 0.0000000000000000 + -29.520000000000000 0.0000000000000000 + -29.460000000000001 0.0000000000000000 + -29.400000000000002 0.0000000000000000 + -29.340000000000000 0.0000000000000000 + -29.280000000000001 0.0000000000000000 + -29.220000000000002 0.0000000000000000 + -29.160000000000000 0.0000000000000000 + -29.100000000000001 0.0000000000000000 + -29.039999999999999 0.0000000000000000 + -28.980000000000000 0.0000000000000000 + -28.920000000000002 0.0000000000000000 + -28.859999999999999 0.0000000000000000 + -28.800000000000001 0.0000000000000000 + -28.740000000000002 0.0000000000000000 + -28.680000000000000 0.0000000000000000 + -28.620000000000001 0.0000000000000000 + -28.560000000000002 0.0000000000000000 + -28.500000000000000 0.0000000000000000 + -28.440000000000001 0.0000000000000000 + -28.379999999999999 0.0000000000000000 + -28.320000000000000 0.0000000000000000 + -28.260000000000002 0.0000000000000000 + -28.199999999999999 0.0000000000000000 + -28.140000000000001 0.0000000000000000 + -28.080000000000002 0.0000000000000000 + -28.020000000000000 0.0000000000000000 + -27.960000000000001 0.0000000000000000 + -27.900000000000002 0.0000000000000000 + -27.840000000000000 0.0000000000000000 + -27.780000000000001 0.0000000000000000 + -27.720000000000002 0.0000000000000000 + -27.660000000000000 0.0000000000000000 + -27.600000000000001 0.0000000000000000 + -27.539999999999999 0.0000000000000000 + -27.480000000000000 0.0000000000000000 + -27.420000000000002 0.0000000000000000 + -27.359999999999999 0.0000000000000000 + -27.300000000000001 0.0000000000000000 + -27.240000000000002 0.0000000000000000 + -27.180000000000000 0.0000000000000000 + -27.120000000000001 0.0000000000000000 + -27.060000000000002 0.0000000000000000 + -27.000000000000000 0.0000000000000000 + -26.940000000000001 0.0000000000000000 + -26.880000000000003 0.0000000000000000 + -26.820000000000000 0.0000000000000000 + -26.760000000000002 0.0000000000000000 + -26.699999999999999 0.0000000000000000 + -26.640000000000001 0.0000000000000000 + -26.580000000000002 0.0000000000000000 + -26.520000000000000 0.0000000000000000 + -26.460000000000001 0.0000000000000000 + -26.400000000000002 0.0000000000000000 + -26.340000000000000 0.0000000000000000 + -26.280000000000001 0.0000000000000000 + -26.220000000000002 0.0000000000000000 + -26.160000000000000 0.0000000000000000 + -26.100000000000001 0.0000000000000000 + -26.039999999999999 0.0000000000000000 + -25.980000000000000 0.0000000000000000 + -25.920000000000002 0.0000000000000000 + -25.859999999999999 0.0000000000000000 + -25.800000000000001 0.0000000000000000 + -25.740000000000002 0.0000000000000000 + -25.680000000000000 0.0000000000000000 + -25.620000000000001 0.0000000000000000 + -25.560000000000002 0.0000000000000000 + -25.500000000000000 0.0000000000000000 + -25.440000000000001 0.0000000000000000 + -25.380000000000003 0.0000000000000000 + -25.320000000000000 0.0000000000000000 + -25.260000000000002 0.0000000000000000 + -25.199999999999999 0.0000000000000000 + -25.140000000000001 0.0000000000000000 + -25.080000000000002 0.0000000000000000 + -25.020000000000000 0.0000000000000000 + -24.960000000000001 0.0000000000000000 + -24.900000000000002 0.0000000000000000 + -24.840000000000000 0.0000000000000000 + -24.780000000000001 0.0000000000000000 + -24.720000000000002 0.0000000000000000 + -24.660000000000000 0.0000000000000000 + -24.600000000000001 0.0000000000000000 + -24.539999999999999 0.0000000000000000 + -24.480000000000000 0.0000000000000000 + -24.420000000000002 0.0000000000000000 + -24.359999999999999 0.0000000000000000 + -24.300000000000001 0.0000000000000000 + -24.240000000000002 0.0000000000000000 + -24.180000000000000 0.0000000000000000 + -24.120000000000001 0.0000000000000000 + -24.060000000000002 0.0000000000000000 + -24.000000000000000 0.0000000000000000 + -23.940000000000001 0.0000000000000000 + -23.880000000000003 0.0000000000000000 + -23.820000000000000 0.0000000000000000 + -23.760000000000002 0.0000000000000000 + -23.699999999999999 0.0000000000000000 + -23.640000000000001 0.0000000000000000 + -23.580000000000002 0.0000000000000000 + -23.520000000000000 0.0000000000000000 + -23.460000000000001 0.0000000000000000 + -23.400000000000002 0.0000000000000000 + -23.340000000000000 0.0000000000000000 + -23.280000000000001 0.0000000000000000 + -23.220000000000002 0.0000000000000000 + -23.160000000000000 0.0000000000000000 + -23.100000000000001 0.0000000000000000 + -23.039999999999999 0.0000000000000000 + -22.980000000000000 0.0000000000000000 + -22.920000000000002 0.0000000000000000 + -22.859999999999999 0.0000000000000000 + -22.800000000000001 0.0000000000000000 + -22.740000000000002 0.0000000000000000 + -22.680000000000000 0.0000000000000000 + -22.620000000000001 0.0000000000000000 + -22.560000000000002 0.0000000000000000 + -22.500000000000000 0.0000000000000000 + -22.440000000000001 0.0000000000000000 + -22.380000000000003 0.0000000000000000 + -22.320000000000000 0.0000000000000000 + -22.260000000000002 0.0000000000000000 + -22.199999999999999 0.0000000000000000 + -22.140000000000001 0.0000000000000000 + -22.080000000000002 0.0000000000000000 + -22.020000000000000 0.0000000000000000 + -21.960000000000001 0.0000000000000000 + -21.900000000000002 0.0000000000000000 + -21.840000000000000 0.0000000000000000 + -21.780000000000001 0.0000000000000000 + -21.720000000000002 0.0000000000000000 + -21.660000000000000 0.0000000000000000 + -21.600000000000001 0.0000000000000000 + -21.540000000000003 0.0000000000000000 + -21.480000000000000 0.0000000000000000 + -21.420000000000002 0.0000000000000000 + -21.359999999999999 0.0000000000000000 + -21.300000000000001 0.0000000000000000 + -21.240000000000002 0.0000000000000000 + -21.180000000000000 0.0000000000000000 + -21.120000000000001 0.0000000000000000 + -21.060000000000002 0.0000000000000000 + -21.000000000000000 0.0000000000000000 + -20.940000000000001 0.0000000000000000 + -20.880000000000003 0.0000000000000000 + -20.820000000000000 0.0000000000000000 + -20.760000000000002 0.0000000000000000 + -20.699999999999999 0.0000000000000000 + -20.640000000000001 0.0000000000000000 + -20.580000000000002 0.0000000000000000 + -20.520000000000000 0.0000000000000000 + -20.460000000000001 0.0000000000000000 + -20.400000000000002 0.0000000000000000 + -20.340000000000000 0.0000000000000000 + -20.280000000000001 0.0000000000000000 + -20.220000000000002 0.0000000000000000 + -20.160000000000000 0.0000000000000000 + -20.100000000000001 0.0000000000000000 + -20.040000000000003 0.0000000000000000 + -19.980000000000000 0.0000000000000000 + -19.920000000000002 0.0000000000000000 + -19.859999999999999 0.0000000000000000 + -19.800000000000001 0.0000000000000000 + -19.740000000000002 0.0000000000000000 + -19.680000000000000 0.0000000000000000 + -19.620000000000001 0.0000000000000000 + -19.560000000000002 0.0000000000000000 + -19.500000000000000 0.0000000000000000 + -19.440000000000001 0.0000000000000000 + -19.380000000000003 0.0000000000000000 + -19.320000000000000 0.0000000000000000 + -19.260000000000002 0.0000000000000000 + -19.200000000000003 0.0000000000000000 + -19.140000000000001 0.0000000000000000 + -19.080000000000002 0.0000000000000000 + -19.020000000000000 0.0000000000000000 + -18.960000000000001 0.0000000000000000 + -18.900000000000002 0.0000000000000000 + -18.840000000000000 0.0000000000000000 + -18.780000000000001 0.0000000000000000 + -18.720000000000002 0.0000000000000000 + -18.660000000000000 0.0000000000000000 + -18.600000000000001 0.0000000000000000 + -18.540000000000003 0.0000000000000000 + -18.480000000000000 0.0000000000000000 + -18.420000000000002 0.0000000000000000 + -18.359999999999999 0.0000000000000000 + -18.300000000000001 0.0000000000000000 + -18.240000000000002 0.0000000000000000 + -18.180000000000000 0.0000000000000000 + -18.120000000000001 0.0000000000000000 + -18.060000000000002 0.0000000000000000 + -18.000000000000000 0.0000000000000000 + -17.940000000000001 0.0000000000000000 + -17.880000000000003 0.0000000000000000 + -17.820000000000000 0.0000000000000000 + -17.760000000000002 0.0000000000000000 + -17.700000000000003 0.0000000000000000 + -17.640000000000001 0.0000000000000000 + -17.580000000000002 0.0000000000000000 + -17.520000000000000 0.0000000000000000 + -17.460000000000001 0.0000000000000000 + -17.400000000000002 0.0000000000000000 + -17.340000000000000 0.0000000000000000 + -17.280000000000001 0.0000000000000000 + -17.220000000000002 0.0000000000000000 + -17.160000000000000 0.0000000000000000 + -17.100000000000001 0.0000000000000000 + -17.040000000000003 0.0000000000000000 + -16.980000000000000 0.0000000000000000 + -16.920000000000002 0.0000000000000000 + -16.859999999999999 0.0000000000000000 + -16.800000000000001 0.0000000000000000 + -16.740000000000002 0.0000000000000000 + -16.680000000000000 0.0000000000000000 + -16.620000000000001 0.0000000000000000 + -16.560000000000002 0.0000000000000000 + -16.500000000000000 0.0000000000000000 + -16.440000000000001 0.0000000000000000 + -16.380000000000003 0.0000000000000000 + -16.320000000000000 0.0000000000000000 + -16.260000000000002 0.0000000000000000 + -16.200000000000003 0.0000000000000000 + -16.140000000000001 0.0000000000000000 + -16.080000000000002 0.0000000000000000 + -16.020000000000000 0.0000000000000000 + -15.960000000000001 0.0000000000000000 + -15.899999999999999 0.0000000000000000 + -15.840000000000003 0.0000000000000000 + -15.780000000000001 0.0000000000000000 + -15.719999999999999 0.0000000000000000 + -15.660000000000004 0.0000000000000000 + -15.600000000000001 0.0000000000000000 + -15.539999999999999 0.0000000000000000 + -15.480000000000004 0.0000000000000000 + -15.420000000000002 0.0000000000000000 + -15.359999999999999 0.0000000000000000 + -15.300000000000004 0.0000000000000000 + -15.240000000000002 0.0000000000000000 + -15.180000000000000 0.0000000000000000 + -15.120000000000005 0.0000000000000000 + -15.060000000000002 0.0000000000000000 + -15.000000000000000 0.0000000000000000 + -14.939999999999998 0.0000000000000000 + -14.880000000000003 0.0000000000000000 + -14.820000000000000 0.0000000000000000 + -14.759999999999998 0.0000000000000000 + -14.700000000000003 0.0000000000000000 + -14.640000000000001 0.0000000000000000 + -14.579999999999998 0.0000000000000000 + -14.520000000000003 0.0000000000000000 + -14.460000000000001 0.0000000000000000 + -14.399999999999999 0.0000000000000000 + -14.340000000000003 0.0000000000000000 + -14.280000000000001 0.0000000000000000 + -14.219999999999999 0.0000000000000000 + -14.160000000000004 0.0000000000000000 + -14.100000000000001 0.0000000000000000 + -14.039999999999999 0.0000000000000000 + -13.980000000000004 0.0000000000000000 + -13.920000000000002 0.0000000000000000 + -13.859999999999999 0.0000000000000000 + -13.800000000000004 0.0000000000000000 + -13.740000000000002 0.0000000000000000 + -13.680000000000000 0.0000000000000000 + -13.620000000000005 0.0000000000000000 + -13.560000000000002 0.0000000000000000 + -13.500000000000000 0.0000000000000000 + -13.439999999999998 0.0000000000000000 + -13.380000000000003 0.0000000000000000 + -13.320000000000000 0.0000000000000000 + -13.259999999999998 0.0000000000000000 + -13.200000000000003 0.0000000000000000 + -13.140000000000001 0.0000000000000000 + -13.079999999999998 0.0000000000000000 + -13.020000000000003 0.0000000000000000 + -12.960000000000001 0.0000000000000000 + -12.899999999999999 0.0000000000000000 + -12.840000000000003 0.0000000000000000 + -12.780000000000001 0.0000000000000000 + -12.719999999999999 0.0000000000000000 + -12.660000000000004 0.0000000000000000 + -12.600000000000001 0.0000000000000000 + -12.539999999999999 0.0000000000000000 + -12.480000000000004 0.0000000000000000 + -12.420000000000002 0.0000000000000000 + -12.359999999999999 0.0000000000000000 + -12.300000000000004 0.0000000000000000 + -12.240000000000002 0.0000000000000000 + -12.180000000000000 0.0000000000000000 + -12.120000000000005 0.0000000000000000 + -12.060000000000002 0.0000000000000000 + -12.000000000000000 0.0000000000000000 + -11.940000000000005 0.0000000000000000 + -11.880000000000003 0.0000000000000000 + -11.820000000000000 0.0000000000000000 + -11.759999999999998 0.0000000000000000 + -11.700000000000003 0.0000000000000000 + -11.640000000000001 0.0000000000000000 + -11.579999999999998 0.0000000000000000 + -11.520000000000003 0.0000000000000000 + -11.460000000000001 0.0000000000000000 + -11.399999999999999 0.0000000000000000 + -11.340000000000003 0.0000000000000000 + -11.280000000000001 0.0000000000000000 + -11.219999999999999 0.0000000000000000 + -11.160000000000004 0.0000000000000000 + -11.100000000000001 0.0000000000000000 + -11.039999999999999 0.0000000000000000 + -10.980000000000004 0.0000000000000000 + -10.920000000000002 0.0000000000000000 + -10.859999999999999 0.0000000000000000 + -10.800000000000004 0.0000000000000000 + -10.740000000000002 0.0000000000000000 + -10.680000000000000 0.0000000000000000 + -10.620000000000005 0.0000000000000000 + -10.560000000000002 0.0000000000000000 + -10.500000000000000 0.0000000000000000 + -10.440000000000005 0.0000000000000000 + -10.380000000000003 0.0000000000000000 + -10.320000000000000 0.0000000000000000 + -10.259999999999998 0.0000000000000000 + -10.200000000000003 0.0000000000000000 + -10.140000000000001 0.0000000000000000 + -10.079999999999998 0.0000000000000000 + -10.020000000000003 0.0000000000000000 + -9.9600000000000009 0.0000000000000000 + -9.8999999999999986 0.0000000000000000 + -9.8400000000000034 0.0000000000000000 + -9.7800000000000011 0.0000000000000000 + -9.7199999999999989 0.0000000000000000 + -9.6600000000000037 0.0000000000000000 + -9.6000000000000014 0.0000000000000000 + -9.5399999999999991 0.0000000000000000 + -9.4800000000000040 0.0000000000000000 + -9.4200000000000017 0.0000000000000000 + -9.3599999999999994 0.0000000000000000 + -9.3000000000000043 0.0000000000000000 + -9.2400000000000020 0.0000000000000000 + -9.1799999999999997 0.0000000000000000 + -9.1200000000000045 0.0000000000000000 + -9.0600000000000023 0.0000000000000000 + -9.0000000000000000 0.0000000000000000 + -8.9400000000000048 0.0000000000000000 + -8.8800000000000026 0.0000000000000000 + -8.8200000000000003 0.0000000000000000 + -8.7599999999999980 0.0000000000000000 + -8.7000000000000028 0.0000000000000000 + -8.6400000000000006 0.0000000000000000 + -8.5799999999999983 0.0000000000000000 + -8.5200000000000031 0.0000000000000000 + -8.4600000000000009 0.0000000000000000 + -8.3999999999999986 0.0000000000000000 + -8.3400000000000034 0.0000000000000000 + -8.2800000000000011 0.0000000000000000 + -8.2199999999999989 0.0000000000000000 + -8.1600000000000037 0.0000000000000000 + -8.1000000000000014 0.0000000000000000 + -8.0399999999999991 0.0000000000000000 + -7.9800000000000040 0.0000000000000000 + -7.9200000000000017 0.0000000000000000 + -7.8599999999999994 0.0000000000000000 + -7.8000000000000043 0.0000000000000000 + -7.7400000000000020 0.0000000000000000 + -7.6799999999999997 0.0000000000000000 + -7.6200000000000045 0.0000000000000000 + -7.5600000000000023 0.0000000000000000 + -7.5000000000000000 0.0000000000000000 + -7.4400000000000048 0.0000000000000000 + -7.3800000000000026 0.0000000000000000 + -7.3200000000000003 0.0000000000000000 + -7.2599999999999980 0.0000000000000000 + -7.2000000000000028 0.0000000000000000 + -7.1400000000000006 0.0000000000000000 + -7.0799999999999983 0.0000000000000000 + -7.0200000000000031 0.0000000000000000 + -6.9600000000000009 0.0000000000000000 + -6.8999999999999986 0.0000000000000000 + -6.8400000000000034 0.0000000000000000 + -6.7800000000000011 0.0000000000000000 + -6.7199999999999989 0.0000000000000000 + -6.6600000000000037 0.0000000000000000 + -6.6000000000000014 0.0000000000000000 + -6.5399999999999991 0.0000000000000000 + -6.4800000000000040 0.0000000000000000 + -6.4200000000000017 0.0000000000000000 + -6.3599999999999994 0.0000000000000000 + -6.3000000000000043 0.0000000000000000 + -6.2400000000000020 0.0000000000000000 + -6.1799999999999997 0.0000000000000000 + -6.1200000000000045 0.0000000000000000 + -6.0600000000000023 0.0000000000000000 + -6.0000000000000000 0.0000000000000000 + -5.9400000000000048 0.0000000000000000 + -5.8800000000000026 0.0000000000000000 + -5.8200000000000003 0.0000000000000000 + -5.7600000000000051 0.0000000000000000 + -5.7000000000000028 0.0000000000000000 + -5.6400000000000006 0.0000000000000000 + -5.5799999999999983 0.0000000000000000 + -5.5200000000000031 0.0000000000000000 + -5.4600000000000009 0.0000000000000000 + -5.3999999999999986 0.0000000000000000 + -5.3400000000000034 0.0000000000000000 + -5.2800000000000011 0.0000000000000000 + -5.2199999999999989 0.0000000000000000 + -5.1600000000000037 0.0000000000000000 + -5.1000000000000014 0.0000000000000000 + -5.0399999999999991 0.0000000000000000 + -4.9800000000000040 0.0000000000000000 + -4.9200000000000017 0.0000000000000000 + -4.8599999999999994 0.0000000000000000 + -4.8000000000000043 0.0000000000000000 + -4.7400000000000020 0.0000000000000000 + -4.6799999999999997 0.0000000000000000 + -4.6200000000000045 0.0000000000000000 + -4.5600000000000023 0.0000000000000000 + -4.5000000000000000 0.0000000000000000 + -4.4400000000000048 0.0000000000000000 + -4.3800000000000026 0.0000000000000000 + -4.3200000000000003 0.0000000000000000 + -4.2600000000000051 0.0000000000000000 + -4.2000000000000028 0.0000000000000000 + -4.1400000000000006 0.0000000000000000 + -4.0799999999999983 0.0000000000000000 + -4.0200000000000031 0.0000000000000000 + -3.9600000000000009 0.0000000000000000 + -3.8999999999999986 0.0000000000000000 + -3.8400000000000034 0.0000000000000000 + -3.7800000000000011 0.0000000000000000 + -3.7199999999999989 0.0000000000000000 + -3.6600000000000037 0.0000000000000000 + -3.6000000000000014 0.0000000000000000 + -3.5399999999999991 0.0000000000000000 + -3.4800000000000040 0.0000000000000000 + -3.4200000000000017 0.0000000000000000 + -3.3599999999999994 0.0000000000000000 + -3.3000000000000043 0.0000000000000000 + -3.2400000000000020 0.0000000000000000 + -3.1799999999999997 0.0000000000000000 + -3.1200000000000045 0.0000000000000000 + -3.0600000000000023 0.0000000000000000 + -3.0000000000000000 0.0000000000000000 + -2.9400000000000048 0.0000000000000000 + -2.8800000000000026 0.0000000000000000 + -2.8200000000000003 0.0000000000000000 + -2.7600000000000051 0.0000000000000000 + -2.7000000000000028 0.0000000000000000 + -2.6400000000000006 0.0000000000000000 + -2.5799999999999983 0.0000000000000000 + -2.5200000000000031 0.0000000000000000 + -2.4600000000000009 0.0000000000000000 + -2.3999999999999986 0.0000000000000000 + -2.3400000000000034 0.0000000000000000 + -2.2800000000000011 0.0000000000000000 + -2.2199999999999989 0.0000000000000000 + -2.1600000000000037 0.0000000000000000 + -2.1000000000000014 0.0000000000000000 + -2.0399999999999991 0.0000000000000000 + -1.9800000000000040 0.0000000000000000 + -1.9200000000000017 0.0000000000000000 + -1.8599999999999994 0.0000000000000000 + -1.8000000000000043 0.0000000000000000 + -1.7400000000000020 0.0000000000000000 + -1.6799999999999997 0.0000000000000000 + -1.6200000000000045 0.0000000000000000 + -1.5600000000000023 0.0000000000000000 + -1.5000000000000000 0.0000000000000000 + -1.4400000000000048 0.0000000000000000 + -1.3800000000000026 0.0000000000000000 + -1.3200000000000003 0.0000000000000000 + -1.2600000000000051 0.0000000000000000 + -1.2000000000000028 0.0000000000000000 + -1.1400000000000006 0.0000000000000000 + -1.0799999999999983 0.0000000000000000 + -1.0200000000000031 0.0000000000000000 + -0.96000000000000085 0.0000000000000000 + -0.89999999999999858 0.0000000000000000 + -0.84000000000000341 0.0000000000000000 + -0.78000000000000114 0.0000000000000000 + -0.71999999999999886 0.0000000000000000 + -0.66000000000000369 0.0000000000000000 + -0.60000000000000142 0.0000000000000000 + -0.53999999999999915 0.0000000000000000 + -0.48000000000000398 0.0000000000000000 + -0.42000000000000171 0.0000000000000000 + -0.35999999999999943 0.0000000000000000 + -0.30000000000000426 0.0000000000000000 + -0.24000000000000199 0.0000000000000000 + -0.17999999999999972 0.0000000000000000 + -0.12000000000000455 0.0000000000000000 + -6.0000000000002274E-002 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 + 5.9999999999995168E-002 0.0000000000000000 + 0.11999999999999744 0.0000000000000000 + 0.17999999999999972 0.0000000000000000 + 0.23999999999999488 0.0000000000000000 + 0.29999999999999716 0.0000000000000000 + 0.35999999999999943 0.0000000000000000 + 0.42000000000000171 0.0000000000000000 + 0.47999999999999687 0.0000000000000000 + 0.53999999999999915 0.0000000000000000 + 0.60000000000000142 0.0000000000000000 + 0.65999999999999659 0.0000000000000000 + 0.71999999999999886 0.0000000000000000 + 0.78000000000000114 0.0000000000000000 + 0.83999999999999631 0.0000000000000000 + 0.89999999999999858 0.0000000000000000 + 0.96000000000000085 0.0000000000000000 + 1.0199999999999960 0.0000000000000000 + 1.0799999999999983 0.0000000000000000 + 1.1400000000000006 0.0000000000000000 + 1.1999999999999957 0.0000000000000000 + 1.2599999999999980 0.0000000000000000 + 1.3200000000000003 0.0000000000000000 + 1.3799999999999955 0.0000000000000000 + 1.4399999999999977 0.0000000000000000 + 1.5000000000000000 0.0000000000000000 + 1.5599999999999952 0.0000000000000000 + 1.6199999999999974 0.0000000000000000 + 1.6799999999999997 0.0000000000000000 + 1.7399999999999949 0.0000000000000000 + 1.7999999999999972 0.0000000000000000 + 1.8599999999999994 0.0000000000000000 + 1.9200000000000017 0.0000000000000000 + 1.9799999999999969 0.0000000000000000 + 2.0399999999999991 0.0000000000000000 + 2.1000000000000014 0.0000000000000000 + 2.1599999999999966 0.0000000000000000 + 2.2199999999999989 0.0000000000000000 + 2.2800000000000011 0.0000000000000000 + 2.3399999999999963 0.0000000000000000 + 2.3999999999999986 0.0000000000000000 + 2.4600000000000009 0.0000000000000000 + 2.5199999999999960 0.0000000000000000 + 2.5799999999999983 0.0000000000000000 + 2.6400000000000006 0.0000000000000000 + 2.6999999999999957 0.0000000000000000 + 2.7599999999999980 0.0000000000000000 + 2.8200000000000003 0.0000000000000000 + 2.8799999999999955 0.0000000000000000 + 2.9399999999999977 0.0000000000000000 + 3.0000000000000000 0.0000000000000000 + 3.0599999999999952 0.0000000000000000 + 3.1199999999999974 0.0000000000000000 + 3.1799999999999997 0.0000000000000000 + 3.2399999999999949 0.0000000000000000 + 3.2999999999999972 0.0000000000000000 + 3.3599999999999994 0.0000000000000000 + 3.4199999999999946 0.0000000000000000 + 3.4799999999999969 0.0000000000000000 + 3.5399999999999991 0.0000000000000000 + 3.6000000000000014 0.0000000000000000 + 3.6599999999999966 0.0000000000000000 + 3.7199999999999989 0.0000000000000000 + 3.7800000000000011 0.0000000000000000 + 3.8399999999999963 0.0000000000000000 + 3.8999999999999986 0.0000000000000000 + 3.9600000000000009 0.0000000000000000 + 4.0199999999999960 0.0000000000000000 + 4.0799999999999983 0.0000000000000000 + 4.1400000000000006 0.0000000000000000 + 4.1999999999999957 0.0000000000000000 + 4.2599999999999980 0.0000000000000000 + 4.3200000000000003 0.0000000000000000 + 4.3799999999999955 0.0000000000000000 + 4.4399999999999977 0.0000000000000000 + 4.5000000000000000 0.0000000000000000 + 4.5599999999999952 0.0000000000000000 + 4.6199999999999974 0.0000000000000000 + 4.6799999999999997 0.0000000000000000 + 4.7399999999999949 0.0000000000000000 + 4.7999999999999972 0.0000000000000000 + 4.8599999999999994 0.0000000000000000 + 4.9199999999999946 0.0000000000000000 + 4.9799999999999969 0.0000000000000000 + 5.0399999999999991 0.0000000000000000 + 5.1000000000000014 0.0000000000000000 + 5.1599999999999966 0.0000000000000000 + 5.2199999999999989 0.0000000000000000 + 5.2800000000000011 0.0000000000000000 + 5.3399999999999963 0.0000000000000000 + 5.3999999999999986 0.0000000000000000 + 5.4600000000000009 0.0000000000000000 + 5.5199999999999960 0.0000000000000000 + 5.5799999999999983 0.0000000000000000 + 5.6400000000000006 0.0000000000000000 + 5.6999999999999957 0.0000000000000000 + 5.7599999999999980 0.0000000000000000 + 5.8200000000000003 0.0000000000000000 + 5.8799999999999955 0.0000000000000000 + 5.9399999999999977 0.0000000000000000 + 6.0000000000000000 0.0000000000000000 + 6.0599999999999952 0.0000000000000000 + 6.1199999999999974 0.0000000000000000 + 6.1799999999999997 0.0000000000000000 + 6.2399999999999949 0.0000000000000000 + 6.2999999999999972 0.0000000000000000 + 6.3599999999999994 0.0000000000000000 + 6.4199999999999946 0.0000000000000000 + 6.4799999999999969 0.0000000000000000 + 6.5399999999999991 0.0000000000000000 + 6.6000000000000014 0.0000000000000000 + 6.6599999999999966 0.0000000000000000 + 6.7199999999999989 0.0000000000000000 + 6.7800000000000011 0.0000000000000000 + 6.8399999999999963 0.0000000000000000 + 6.8999999999999986 0.0000000000000000 + 6.9600000000000009 0.0000000000000000 + 7.0199999999999960 0.0000000000000000 + 7.0799999999999983 0.0000000000000000 + 7.1400000000000006 0.0000000000000000 + 7.1999999999999957 0.0000000000000000 + 7.2599999999999980 0.0000000000000000 + 7.3200000000000003 0.0000000000000000 + 7.3799999999999955 0.0000000000000000 + 7.4399999999999977 0.0000000000000000 + 7.5000000000000000 0.0000000000000000 + 7.5599999999999952 0.0000000000000000 + 7.6199999999999974 0.0000000000000000 + 7.6799999999999997 0.0000000000000000 + 7.7399999999999949 0.0000000000000000 + 7.7999999999999972 0.0000000000000000 + 7.8599999999999994 0.0000000000000000 + 7.9199999999999946 0.0000000000000000 + 7.9799999999999969 0.0000000000000000 + 8.0399999999999991 0.0000000000000000 + 8.1000000000000014 0.0000000000000000 + 8.1599999999999966 0.0000000000000000 + 8.2199999999999989 0.0000000000000000 + 8.2800000000000011 0.0000000000000000 + 8.3399999999999963 0.0000000000000000 + 8.3999999999999986 0.0000000000000000 + 8.4600000000000009 0.0000000000000000 + 8.5199999999999960 0.0000000000000000 + 8.5799999999999983 0.0000000000000000 + 8.6400000000000006 0.0000000000000000 + 8.6999999999999957 0.0000000000000000 + 8.7599999999999980 0.0000000000000000 + 8.8200000000000003 0.0000000000000000 + 8.8799999999999955 0.0000000000000000 + 8.9399999999999977 0.0000000000000000 + 9.0000000000000000 0.0000000000000000 + 9.0599999999999952 0.0000000000000000 + 9.1199999999999974 0.0000000000000000 + 9.1799999999999997 0.0000000000000000 + 9.2399999999999949 0.0000000000000000 + 9.2999999999999972 0.0000000000000000 + 9.3599999999999994 0.0000000000000000 + 9.4199999999999946 0.0000000000000000 + 9.4799999999999969 0.0000000000000000 + 9.5399999999999991 0.0000000000000000 + 9.5999999999999943 0.0000000000000000 + 9.6599999999999966 0.0000000000000000 + 9.7199999999999989 0.0000000000000000 + 9.7800000000000011 0.0000000000000000 + 9.8399999999999963 0.0000000000000000 + 9.8999999999999986 0.0000000000000000 + 9.9600000000000009 0.0000000000000000 + 10.019999999999996 0.0000000000000000 + 10.079999999999998 0.0000000000000000 + 10.140000000000001 0.0000000000000000 + 10.199999999999996 0.0000000000000000 + 10.259999999999998 0.0000000000000000 + 10.320000000000000 0.0000000000000000 + 10.379999999999995 0.0000000000000000 + 10.439999999999998 0.0000000000000000 + 10.500000000000000 0.0000000000000000 + 10.559999999999995 0.0000000000000000 + 10.619999999999997 0.0000000000000000 + 10.680000000000000 0.0000000000000000 + 10.739999999999995 0.0000000000000000 + 10.799999999999997 0.0000000000000000 + 10.859999999999999 0.0000000000000000 + 10.919999999999995 0.0000000000000000 + 10.979999999999997 0.0000000000000000 + 11.039999999999999 0.0000000000000000 + 11.099999999999994 0.0000000000000000 + 11.159999999999997 0.0000000000000000 + 11.219999999999999 0.0000000000000000 + 11.280000000000001 0.0000000000000000 + 11.339999999999996 0.0000000000000000 + 11.399999999999999 0.0000000000000000 + 11.460000000000001 0.0000000000000000 + 11.519999999999996 0.0000000000000000 + 11.579999999999998 0.0000000000000000 + 11.640000000000001 0.0000000000000000 + 11.699999999999996 0.0000000000000000 + 11.759999999999998 0.0000000000000000 + 11.820000000000000 0.0000000000000000 + 11.879999999999995 0.0000000000000000 + 11.939999999999998 0.0000000000000000 + 12.000000000000000 0.0000000000000000 + 12.059999999999995 0.0000000000000000 + 12.119999999999997 0.0000000000000000 + 12.180000000000000 0.0000000000000000 + 12.239999999999995 0.0000000000000000 + 12.299999999999997 0.0000000000000000 + 12.359999999999999 0.0000000000000000 + 12.419999999999995 0.0000000000000000 + 12.479999999999997 0.0000000000000000 + 12.539999999999999 0.0000000000000000 + 12.599999999999994 0.0000000000000000 + 12.659999999999997 0.0000000000000000 + 12.719999999999999 0.0000000000000000 + 12.780000000000001 0.0000000000000000 + 12.839999999999996 0.0000000000000000 + 12.899999999999999 0.0000000000000000 + 12.960000000000001 0.0000000000000000 + 13.019999999999996 0.0000000000000000 + 13.079999999999998 0.0000000000000000 + 13.140000000000001 0.0000000000000000 + 13.199999999999996 0.0000000000000000 + 13.259999999999998 0.0000000000000000 + 13.320000000000000 0.0000000000000000 + 13.379999999999995 0.0000000000000000 + 13.439999999999998 0.0000000000000000 + 13.500000000000000 0.0000000000000000 + 13.559999999999995 0.0000000000000000 + 13.619999999999997 0.0000000000000000 + 13.680000000000000 0.0000000000000000 + 13.739999999999995 0.0000000000000000 + 13.799999999999997 0.0000000000000000 + 13.859999999999999 0.0000000000000000 + 13.919999999999995 0.0000000000000000 + 13.979999999999997 0.0000000000000000 + 14.039999999999999 0.0000000000000000 + 14.099999999999994 0.0000000000000000 + 14.159999999999997 0.0000000000000000 + 14.219999999999999 0.0000000000000000 + 14.280000000000001 0.0000000000000000 + 14.339999999999996 0.0000000000000000 + 14.399999999999999 0.0000000000000000 + 14.460000000000001 0.0000000000000000 + 14.519999999999996 0.0000000000000000 + 14.579999999999998 0.0000000000000000 + 14.640000000000001 0.0000000000000000 + 14.699999999999996 0.0000000000000000 + 14.759999999999998 0.0000000000000000 + 14.820000000000000 0.0000000000000000 + 14.879999999999995 0.0000000000000000 + 14.939999999999998 0.0000000000000000 + 15.000000000000000 0.0000000000000000 + 15.059999999999995 0.0000000000000000 + 15.119999999999997 0.0000000000000000 + 15.180000000000000 0.0000000000000000 + 15.239999999999995 0.0000000000000000 + 15.299999999999997 0.0000000000000000 + 15.359999999999999 0.0000000000000000 + 15.419999999999995 0.0000000000000000 + 15.479999999999997 0.0000000000000000 + 15.539999999999999 0.0000000000000000 + 15.599999999999994 0.0000000000000000 + 15.659999999999997 0.0000000000000000 + 15.719999999999999 0.0000000000000000 + 15.780000000000001 0.0000000000000000 + 15.839999999999996 0.0000000000000000 + 15.899999999999999 2.1717254238207618E-040 + 15.960000000000001 5.0733637930527816E-040 + 16.019999999999996 7.9750021622848015E-040 + 16.079999999999998 9.3429126300925848E-040 + 16.140000000000001 8.5330330481261314E-040 + 16.200000000000003 6.6974639969277435E-040 + 16.259999999999991 1.8980340640703421E-040 + 16.319999999999993 -5.1093285828812587E-040 + 16.379999999999995 -1.4798540307695322E-039 + 16.439999999999998 -2.7370091877958733E-039 + 16.500000000000000 -4.2704776701394543E-039 + 16.560000000000002 -5.8348906191463064E-039 + 16.620000000000005 -7.3882373705223727E-039 + 16.679999999999993 -8.6218427735818001E-039 + 16.739999999999995 -9.5554661029526862E-039 + 16.799999999999997 -9.9540071249274632E-039 + 16.859999999999999 -9.7186937164101394E-039 + 16.920000000000002 -8.8077266960528444E-039 + 16.980000000000004 -7.3105001871858755E-039 + 17.039999999999992 -2.8280678399219143E-039 + 17.099999999999994 3.2466006759154918E-039 + 17.159999999999997 9.5027434204846824E-039 + 17.219999999999999 1.5033202845504794E-038 + 17.280000000000001 1.9923631607194146E-038 + 17.340000000000003 2.4196609065043852E-038 + 17.399999999999991 2.7581940149978142E-038 + 17.459999999999994 2.8339862379034560E-038 + 17.519999999999996 2.5553520452568236E-038 + 17.579999999999998 1.8360111738329136E-038 + 17.640000000000001 8.1875087757036287E-039 + 17.700000000000003 -2.8961043783070687E-039 + 17.759999999999991 -1.3165254252558940E-038 + 17.819999999999993 -2.0721797630461015E-038 + 17.879999999999995 -2.4896769791660818E-038 + 17.939999999999998 -2.2698559232527538E-038 + 18.000000000000000 -1.3444925762113681E-038 + 18.060000000000002 4.4166472848849468E-039 + 18.120000000000005 3.2029884281126221E-038 + 18.179999999999993 6.2913631918002039E-038 + 18.239999999999995 9.8195527008798391E-038 + 18.299999999999997 1.3498895504591232E-037 + 18.359999999999999 1.5203577603930670E-037 + 18.420000000000002 1.4561740059032604E-037 + 18.480000000000004 1.1811578924978777E-037 + 18.539999999999992 6.8161639913232679E-038 + 18.599999999999994 -1.5069212996089696E-039 + 18.659999999999997 -8.4203412402865545E-038 + 18.719999999999999 -1.9157114595091904E-037 + 18.780000000000001 -3.1506196219756926E-037 + 18.840000000000003 -4.3862529453620788E-037 + 18.899999999999991 -5.4954079124248014E-037 + 18.959999999999994 -6.2742821135124397E-037 + 19.019999999999996 -6.6742070690122999E-037 + 19.079999999999998 -6.6747025680843153E-037 + 19.140000000000001 -6.2338774232459119E-037 + 19.200000000000003 -5.3426012191807472E-037 + 19.259999999999991 -3.8338950026161463E-037 + 19.319999999999993 -1.7347200317483121E-037 + 19.379999999999995 7.7761039740813464E-038 + 19.439999999999998 3.3548239669292359E-037 + 19.500000000000000 5.5834300644071946E-037 + 19.560000000000002 7.1145060564870350E-037 + 19.620000000000005 7.7255192686773213E-037 + 19.679999999999993 7.2772257135768569E-037 + 19.739999999999995 6.0432624393248416E-037 + 19.799999999999997 3.9092275010315991E-037 + 19.859999999999999 9.0225242728247125E-038 + 19.920000000000002 -3.0779637956375690E-037 + 19.980000000000004 -7.8476217548666821E-037 + 20.039999999999992 -1.2918011011467611E-036 + 20.099999999999994 -1.8340120372168738E-036 + 20.159999999999997 -2.3940694319366234E-036 + 20.219999999999999 -2.8545839859452457E-036 + 20.280000000000001 -3.1867598732172795E-036 + 20.340000000000003 -3.3240541166779362E-036 + 20.399999999999991 -3.2506108514271919E-036 + 20.459999999999994 -2.9533508024228246E-036 + 20.519999999999996 -2.4124542360792743E-036 + 20.579999999999998 -1.6129522578337284E-036 + 20.640000000000001 -5.1909774250577974E-037 + 20.700000000000003 9.2081813773571759E-037 + 20.759999999999991 2.6416429887426815E-036 + 20.819999999999993 4.6150312442064421E-036 + 20.879999999999995 6.7977522173629776E-036 + 20.939999999999998 9.2095044891036340E-036 + 21.000000000000000 1.1727418019219338E-035 + 21.060000000000002 1.4205897957372002E-035 + 21.120000000000005 1.6521093599558345E-035 + 21.179999999999993 1.8292997287938916E-035 + 21.239999999999995 1.9328242427822316E-035 + 21.299999999999997 1.9422008689798561E-035 + 21.359999999999999 1.8263856226180568E-035 + 21.420000000000002 1.5496473259364898E-035 + 21.480000000000004 1.0634790566726507E-035 + 21.539999999999992 3.3437574024276183E-036 + 21.599999999999994 -6.4492408388063636E-036 + 21.659999999999997 -1.8649206292953744E-035 + 21.719999999999999 -3.3020676211981588E-035 + 21.780000000000001 -4.9090902652645294E-035 + 21.840000000000003 -6.6075301261508711E-035 + 21.899999999999991 -8.2791196802178596E-035 + 21.959999999999994 -9.7638064939591433E-035 + 22.019999999999996 -1.0873317145128337E-034 + 22.079999999999998 -1.1372059075304146E-034 + 22.140000000000001 -1.1005004404263780E-034 + 22.200000000000003 -9.5165058037596821E-035 + 22.259999999999991 -6.6448685296349542E-035 + 22.319999999999993 -2.1679061553487164E-035 + 22.379999999999995 4.0857351995591273E-035 + 22.439999999999998 1.2167829943730747E-034 + 22.500000000000000 2.1984082653902608E-034 + 22.560000000000002 3.3262342706925155E-034 + 22.619999999999990 4.5517798378303503E-034 + 22.679999999999993 5.8024492689172900E-034 + 22.739999999999995 6.9803837310157333E-034 + 22.799999999999997 7.9669925444133707E-034 + 22.859999999999999 8.6206776286441256E-034 + 22.920000000000002 8.7858707791306410E-034 + 22.980000000000004 8.3009431658988513E-034 + 23.039999999999992 7.0107098322632289E-034 + 23.099999999999994 4.7801271176672018E-034 + 23.159999999999997 1.5117440909947389E-034 + 23.219999999999999 -2.8348177174964917E-034 + 23.280000000000001 -8.2245507699129143E-034 + 23.340000000000003 -1.4528663806030280E-033 + 23.399999999999991 -2.1507990762112409E-033 + 23.459999999999994 -2.8802048734992982E-033 + 23.519999999999996 -3.5924364635328365E-033 + 23.579999999999998 -4.2266890444316110E-033 + 23.640000000000001 -4.7114877959334526E-033 + 23.700000000000003 -4.9674753880201442E-033 + 23.759999999999991 -4.9116143443137761E-033 + 23.819999999999993 -4.4626635484311877E-033 + 23.879999999999995 -3.5480579724342103E-033 + 23.939999999999998 -2.1118969619717358E-033 + 24.000000000000000 -1.2370058122022022E-034 + 24.060000000000002 2.4125335839398722E-033 + 24.119999999999990 5.4496118282511110E-033 + 24.179999999999993 8.8895499326894315E-033 + 24.239999999999995 1.2577913476412064E-032 + 24.299999999999997 1.6301056144766185E-032 + 24.359999999999999 1.9787206099995056E-032 + 24.420000000000002 2.2712292176980731E-032 + 24.480000000000004 2.4711181446878490E-032 + 24.539999999999992 2.5394862565086409E-032 + 24.599999999999994 2.4373713419793132E-032 + 24.659999999999997 2.1286607496082617E-032 + 24.719999999999999 1.5835065813601140E-032 + 24.780000000000001 7.8211432806462637E-033 + 24.840000000000003 -2.8129040727546392E-033 + 24.899999999999991 -1.5945687346035996E-032 + 24.959999999999994 -3.1241562954065565E-032 + 25.019999999999996 -4.8122871191432521E-032 + 25.079999999999998 -6.5753289083678209E-032 + 25.140000000000001 -8.3036238616690219E-032 + 25.200000000000003 -9.8631964689508767E-032 + 25.259999999999991 -1.1099652999720672E-031 + 25.319999999999993 -1.1844488807090492E-031 + 25.379999999999995 -1.1923927624189752E-031 + 25.439999999999998 -1.1170228407876724E-031 + 25.500000000000000 -9.4351930053477434E-032 + 25.560000000000002 -6.6054777184314679E-032 + 25.619999999999990 -2.6189432488104436E-032 + 25.679999999999993 2.5188515314279415E-032 + 25.739999999999995 8.7191646483655543E-032 + 25.799999999999997 1.5796947605547524E-031 + 25.859999999999999 2.3461529956191563E-031 + 25.920000000000002 3.1312668335913186E-031 + 25.980000000000004 3.8843436697710078E-031 + 26.039999999999992 4.5451301228565092E-031 + 26.099999999999994 5.0458438558561130E-031 + 26.159999999999997 5.3141935550012524E-031 + 26.219999999999999 5.2773978541741330E-031 + 26.280000000000001 4.8671425390030111E-031 + 26.340000000000003 4.0253387493609692E-031 + 26.399999999999991 2.7104593464310683E-031 + 26.459999999999994 9.0414286397875870E-032 + 26.519999999999996 -1.3823364004151771E-031 + 26.579999999999998 -4.1022037692993516E-031 + 26.640000000000001 -7.1684670513247569E-031 + 26.700000000000003 -1.0450912775139571E-030 + 26.759999999999991 -1.3775398662220313E-030 + 26.819999999999993 -1.6925986207152208E-030 + 26.879999999999995 -1.9650383017261953E-030 + 26.939999999999998 -2.1669028814658724E-030 + 27.000000000000000 -2.2688005566755636E-030 + 27.060000000000002 -2.2415698494012661E-030 + 27.119999999999990 -2.0582898702290152E-030 + 27.179999999999993 -1.6965726020883005E-030 + 27.239999999999995 -1.1410423272898890E-030 + 27.299999999999997 -3.8587626897262979E-031 + 27.359999999999999 5.6274851474255747E-031 + 27.420000000000002 1.6844879639287257E-030 + 27.480000000000004 2.9431431611753782E-030 + 27.539999999999992 4.2856629866799391E-030 + 27.599999999999994 5.6420508024758218E-030 + 27.659999999999997 6.9263659474797424E-030 + 27.719999999999999 8.0389798394112301E-030 + 27.780000000000001 8.8702012502305057E-030 + 27.840000000000003 9.3053147070319811E-030 + 27.899999999999991 9.2309912253682107E-030 + 27.959999999999994 8.5429372230852969E-030 + 28.019999999999996 7.1545387394985724E-030 + 28.079999999999998 5.0061429271803222E-030 + 28.140000000000001 2.0745084665159334E-030 + 28.200000000000003 -1.6181517120044685E-030 + 28.259999999999991 -5.9961989680837782E-030 + 28.319999999999993 -1.0924386863269340E-029 + 28.379999999999995 -1.6204237708594204E-029 + 28.439999999999998 -2.1573708280917768E-029 + 28.500000000000000 -2.6710833699445351E-029 + 28.560000000000002 -3.1241898698016205E-029 + 28.619999999999990 -3.4754531173065071E-029 + 28.679999999999993 -3.6815860224917770E-029 + 28.739999999999995 -3.6995607150942258E-029 + 28.799999999999997 -3.4893601035643507E-029 + 28.859999999999999 -3.0170924083296635E-029 + 28.920000000000002 -2.2583386023137845E-029 + 28.980000000000004 -1.2015736103948547E-029 + 29.039999999999992 1.4853735870535952E-030 + 29.099999999999994 1.7681980405036619E-029 + 29.159999999999997 3.6121433909370526E-029 + 29.219999999999999 5.6121737180852211E-029 + 29.280000000000001 7.6768065011402319E-029 + 29.340000000000003 9.6922963274195501E-029 + 29.399999999999991 1.1525216717721970E-028 + 29.459999999999994 1.3026747025301966E-028 + 29.519999999999996 1.4038725768263014E-028 + 29.579999999999998 1.4401446844788794E-028 + 29.640000000000001 1.3963051815049162E-028 + 29.700000000000003 1.2590254430474181E-028 + 29.759999999999991 1.0180006641474993E-028 + 29.819999999999993 6.6715705799679645E-029 + 29.879999999999995 2.0583617824892760E-029 + 29.939999999999998 -3.6012010240447064E-029 + 30.000000000000000 -1.0174664706071697E-028 + 30.060000000000002 -1.7449222656921731E-028 + 30.119999999999990 -2.5128974731863639E-028 + 30.179999999999993 -3.2836605419914028E-028 + 30.239999999999995 -4.0120204767916092E-028 + 30.299999999999997 -4.6465785318556779E-028 + 30.359999999999999 -5.1315803622840301E-028 + 30.420000000000002 -5.4093707703504923E-028 + 30.480000000000004 -5.4234212821981568E-028 + 30.539999999999992 -5.1218537187273138E-028 + 30.599999999999994 -4.4613498548585849E-028 + 30.659999999999997 -3.4112890006002911E-028 + 30.719999999999999 -1.9579121006912850E-028 + 30.780000000000001 -1.0828175233574713E-029 + 30.840000000000003 2.1062363412206891E-028 + 30.899999999999991 4.6272475530524249E-028 + 30.959999999999994 7.3676615308918749E-028 + 31.019999999999996 1.0211367317731608E-027 + 31.079999999999998 1.3014515130813537E-027 + 31.140000000000001 1.5608612811682281E-027 + 31.200000000000003 1.7805597343404938E-027 + 31.259999999999991 1.9404944170165272E-027 + 31.319999999999993 2.0202778424711837E-027 + 31.379999999999995 2.0002820298586445E-027 + 31.439999999999998 1.8628888826014229E-027 + 31.500000000000000 1.5938535941928640E-027 + 31.560000000000002 1.1837232572125697E-027 + 31.619999999999990 6.2924191823315373E-028 + 31.679999999999993 -6.5337745022699657E-029 + 31.739999999999995 -8.8712949656264543E-028 + 31.799999999999997 -1.8137662509292994E-027 + 31.859999999999999 -2.8129306963569913E-027 + 31.920000000000002 -3.8423540819240739E-027 + 31.980000000000004 -4.8503645818476196E-027 + 32.039999999999992 -5.7770567285907638E-027 + 32.099999999999994 -6.5561185076895443E-027 + 32.159999999999997 -7.1173382104737574E-027 + 32.219999999999999 -7.3897661602158873E-027 + 32.280000000000001 -7.3054771757099978E-027 + 32.340000000000003 -6.8038323627083953E-027 + 32.399999999999991 -5.8360889097975552E-027 + 32.459999999999994 -4.3701778673073464E-027 + 32.519999999999996 -2.3954103462451463E-027 + 32.579999999999998 7.3149400002774124E-029 + 32.640000000000001 2.9909388411539252E-027 + 32.700000000000003 6.2810925940365657E-027 + 32.759999999999991 9.8328868956070419E-027 + 32.819999999999993 1.3501735469093244E-026 + 32.879999999999995 1.7111000582466065E-026 + 32.939999999999998 2.0455834028699687E-026 + 33.000000000000000 2.3309195769334825E-026 + 33.060000000000002 2.5430088875588284E-026 + 33.119999999999990 2.6573959775612661E-026 + 33.179999999999993 2.6505089937404246E-026 + 33.239999999999995 2.5010646785922684E-026 + 33.299999999999997 2.1915935792304567E-026 + 33.359999999999999 1.7100260871388739E-026 + 33.420000000000002 1.0512661458886984E-026 + 33.480000000000004 2.1866766249997736E-027 + 33.539999999999992 -7.7468118166554374E-027 + 33.599999999999994 -1.9049621982493431E-026 + 33.659999999999997 -3.1370243939755469E-026 + 33.719999999999999 -4.4242684583682339E-026 + 33.780000000000001 -5.7091078964307057E-026 + 33.840000000000003 -6.9240792677025622E-026 + 33.899999999999991 -7.9936507201964136E-026 + 33.959999999999994 -8.8367560856771920E-026 + 34.019999999999996 -9.3700394496977232E-026 + 34.079999999999998 -9.5117678580253145E-026 + 34.140000000000001 -9.1863179672101415E-026 + 34.200000000000003 -8.3291014487688824E-026 + 34.259999999999991 -6.8917559550279237E-026 + 34.319999999999993 -4.8473691526538292E-026 + 34.379999999999995 -2.1954899802551169E-026 + 34.439999999999998 1.0333701661763485E-026 + 34.500000000000000 4.7740700203223419E-026 + 34.560000000000002 8.9243001888839049E-026 + 34.619999999999990 1.3343518633851976E-025 + 34.679999999999993 1.7853633507369743E-025 + 34.739999999999995 2.2241696973557828E-025 + 34.799999999999997 2.6264795056637691E-025 + 34.859999999999999 2.9657267326301787E-025 + 34.920000000000002 3.2140239523854149E-025 + 34.980000000000004 3.3433406992109125E-025 + 35.039999999999992 3.3268829613266720E-025 + 35.099999999999994 3.1406373893840922E-025 + 35.159999999999997 2.7650310561815361E-025 + 35.219999999999999 2.1866441073149458E-025 + 35.280000000000001 1.3998957833958368E-025 + 35.340000000000003 4.0862120716085284E-026 + 35.399999999999991 -7.7256319466139692E-026 + 35.459999999999994 -2.1172007725484102E-025 + 35.519999999999996 -3.5863469724293392E-025 + 35.579999999999998 -5.1284316170510556E-025 + 35.640000000000001 -6.6797168087611475E-025 + 35.700000000000003 -8.1654279262372436E-025 + 35.759999999999991 -9.5016060165569212E-025 + 35.819999999999993 -1.0597711212612256E-024 + 35.879999999999995 -1.1359965882242482E-024 + 35.939999999999998 -1.1695398589454300E-024 + 36.000000000000000 -1.1516499292777855E-024 + 36.060000000000002 -1.0746357755837685E-024 + 36.119999999999990 -9.3241188853009071E-025 + 36.179999999999993 -7.2105371170858842E-025 + 36.239999999999995 -4.3933741296457646E-025 + 36.299999999999997 -8.9236153690870885E-026 + 36.359999999999999 3.2365823688080974E-025 + 36.420000000000002 7.8981990113188970E-025 + 36.479999999999990 1.2956128248368507E-024 + 36.539999999999992 1.8232832907070026E-024 + 36.599999999999994 2.3511475174184741E-024 + 36.659999999999997 2.8539979122294102E-024 + 36.719999999999999 3.3037407822728556E-024 + 36.780000000000001 3.6702728089365027E-024 + 36.840000000000003 3.9225910868220299E-024 + 36.899999999999991 4.0301204231730703E-024 + 36.959999999999994 3.9642308089670583E-024 + 37.019999999999996 3.6998981502011060E-024 + 37.079999999999998 3.2174583850419568E-024 + 37.140000000000001 2.5043799993083656E-024 + 37.200000000000003 1.5569804794356989E-024 + 37.259999999999991 3.8199196997553362E-025 + 37.319999999999993 -1.0021160208702094E-024 + 37.379999999999995 -2.5641594900920245E-024 + 37.439999999999998 -4.2597049593684899E-024 + 37.500000000000000 -6.0310705065844764E-024 + 37.560000000000002 -7.8079422381832069E-024 + 37.619999999999990 -9.5086734312613290E-024 + 37.679999999999993 -1.1042307666174052E-023 + 37.739999999999995 -1.2311345512415759E-023 + 37.799999999999997 -1.3215230547769973E-023 + 37.859999999999999 -1.3654511540159275E-023 + 37.920000000000002 -1.3535585024078060E-023 + 37.979999999999990 -1.2775886836790039E-023 + 38.039999999999992 -1.1309365469695667E-023 + 38.099999999999994 -9.0920189536291165E-024 + 38.159999999999997 -6.1072710183159688E-024 + 38.219999999999999 -2.3708889465138029E-024 + 38.280000000000001 2.0648150737457767E-024 + 38.340000000000003 7.1078281889125475E-024 + 38.399999999999991 1.2624595743067464E-023 + 38.459999999999994 1.8439787135438593E-023 + 38.519999999999996 2.4337900693161297E-023 + 38.579999999999998 3.0066920526935582E-023 + 38.640000000000001 3.5344132908215557E-023 + 38.700000000000003 3.9864188367959084E-023 + 38.759999999999991 4.3309328888970882E-023 + 38.819999999999993 4.5361686024634314E-023 + 38.879999999999995 4.5717356458101781E-023 + 38.939999999999998 4.4101916289509175E-023 + 39.000000000000000 4.0286884023970619E-023 + 39.060000000000002 3.4106542458494188E-023 + 39.119999999999990 2.5474431939427110E-023 + 39.179999999999993 1.4398775645221192E-023 + 39.239999999999995 9.9596397090392948E-025 + 39.299999999999997 -1.4498687399869563E-023 + 39.359999999999999 -3.1723827025561023E-023 + 39.420000000000002 -5.0189348984817203E-023 + 39.479999999999990 -6.9278804430112127E-023 + 39.539999999999992 -8.8257618231303272E-023 + 39.599999999999994 -1.0628743240789409E-022 + 39.659999999999997 -1.2244695474449445E-022 + 39.719999999999999 -1.3575918600823588E-022 + 39.780000000000001 -1.4522491763172258E-022 + 39.840000000000003 -1.4986176632710976E-022 + 39.899999999999991 -1.4874805258206227E-022 + 39.959999999999994 -1.4107029867664212E-022 + 40.019999999999996 -1.2617283760053023E-022 + 40.079999999999998 -1.0360787624939695E-022 + 40.140000000000001 -7.3183927637397308E-023 + 40.200000000000003 -3.5010582904268708E-023 + 40.259999999999991 1.0462936849940110E-023 + 40.319999999999993 6.2417562988331442E-023 + 40.379999999999995 1.1964510113843697E-022 + 40.439999999999998 1.8054196131391609E-022 + 40.500000000000000 2.4311815657792656E-022 + 40.560000000000002 3.0502308440868686E-022 + 40.619999999999990 3.6358955521733663E-022 + 40.679999999999993 4.1589677892534795E-022 + 40.739999999999995 4.5885259360735369E-022 + 40.799999999999997 4.8929433876164373E-022 + 40.859999999999999 5.0410685649513594E-022 + 40.920000000000002 5.0035591711824328E-022 + 40.979999999999990 4.7543349450562548E-022 + 41.039999999999992 4.2721109021920078E-022 + 41.099999999999994 3.5419656502020219E-022 + 41.159999999999997 2.5568811728418177E-022 + 41.219999999999999 1.3191968505672128E-022 + 41.280000000000001 -1.5809889922836910E-023 + 41.340000000000003 -1.8503142913489635E-022 + 41.399999999999991 -3.7203104296907647E-022 + 41.459999999999994 -5.7181515854827200E-022 + 41.519999999999996 -7.7812228847045524E-022 + 41.579999999999998 -9.8348824369037098E-022 + 41.640000000000001 -1.1793704995728845E-021 + 41.700000000000003 -1.3563365458497460E-021 + 41.759999999999991 -1.5043176712761069E-021 + 41.819999999999993 -1.6129298786323549E-021 + 41.879999999999995 -1.6718578664281826E-021 + 41.939999999999998 -1.6712975258853665E-021 + 42.000000000000000 -1.6024477538410381E-021 + 42.060000000000002 -1.4580388824689794E-021 + 42.119999999999990 -1.2328828612934350E-021 + 42.179999999999993 -9.2442376980251523E-022 + 42.239999999999995 -5.3326725026640873E-022 + 42.299999999999997 -6.3663438581989860E-023 + 42.359999999999999 4.7608691670147787E-022 + 42.420000000000002 1.0733290828160281E-021 + 42.479999999999990 1.7108851122053513E-021 + 42.539999999999992 2.3670476064333284E-021 + 42.599999999999994 3.0157605328653898E-021 + 42.659999999999997 3.6270111972244147E-021 + 42.719999999999999 4.1674459061594054E-021 + 42.780000000000001 4.6012208778187302E-021 + 42.840000000000003 4.8910851149291568E-021 + 42.899999999999991 4.9996860959444396E-021 + 42.959999999999994 4.8910684014148241E-021 + 43.019999999999996 4.5323397739067417E-021 + 43.079999999999998 3.8954394318485286E-021 + 43.140000000000001 2.9589609803688302E-021 + 43.200000000000003 1.7099428626003538E-021 + 43.259999999999991 1.4554860976000774E-022 + 43.319999999999993 -1.7254676556174214E-021 + 43.379999999999995 -3.8815937544876396E-021 + 43.439999999999998 -6.2878162215057931E-021 + 43.500000000000000 -8.8953705664824299E-021 + 43.560000000000002 -1.1642103651673089E-020 + 43.619999999999990 -1.4453502652609456E-020 + 43.679999999999993 -1.7244473047897391E-020 + 43.739999999999995 -1.9921863466172436E-020 + 43.799999999999997 -2.2387794888226470E-020 + 43.859999999999999 -2.4543710434694424E-020 + 43.920000000000002 -2.6295114980120607E-020 + 43.979999999999990 -2.7556892174667012E-020 + 44.039999999999992 -2.8259028492810912E-020 + 44.099999999999994 -2.8352587937727318E-020 + 44.159999999999997 -2.7815713144300303E-020 + 44.219999999999999 -2.6659362602102225E-020 + 44.280000000000001 -2.4932538975432487E-020 + 44.340000000000003 -2.2726729157430550E-020 + 44.399999999999991 -2.0179186805000998E-020 + 44.459999999999994 -1.7474882159369973E-020 + 44.519999999999996 -1.4846758864442135E-020 + 44.579999999999998 -1.2574109080793274E-020 + 44.640000000000001 -1.0978888163171989E-020 + 44.700000000000003 -1.0419868147219286E-020 + 44.759999999999991 -1.1284604316757712E-020 + 44.819999999999993 -1.3979249798978067E-020 + 44.879999999999995 -1.8916443692996619E-020 + 44.939999999999998 -2.6501414490249868E-020 + 45.000000000000000 -3.7116741461858321E-020 + 45.060000000000002 -5.1106295126862706E-020 + 45.119999999999990 -6.8758736513510437E-020 + 45.179999999999993 -9.0291264652708607E-020 + 45.239999999999995 -1.1583439563608098E-019 + 45.299999999999997 -1.4541823942542627E-019 + 45.359999999999999 -1.7896116972596087E-019 + 45.420000000000002 -2.1626135652310434E-019 + 45.479999999999990 -2.5699199164789748E-019 + 45.539999999999992 -3.0070053717598480E-019 + 45.599999999999994 -3.4681221337671074E-019 + 45.659999999999997 -3.9463814222866880E-019 + 45.719999999999999 -4.4338802920842760E-019 + 45.780000000000001 -4.9218698039854760E-019 + 45.840000000000003 -5.4009585337356492E-019 + 45.899999999999991 -5.8613454095729364E-019 + 45.959999999999994 -6.2930694650204286E-019 + 46.019999999999996 -6.6862611342701465E-019 + 46.079999999999998 -7.0313762846656303E-019 + 46.140000000000001 -7.3193983426379304E-019 + 46.200000000000003 -7.5419839503731989E-019 + 46.259999999999991 -7.6915217126476933E-019 + 46.319999999999993 -7.7610878024079755E-019 + 46.379999999999995 -7.7442682497252069E-019 + 46.439999999999998 -7.6348121558319425E-019 + 46.500000000000000 -7.4261082088034704E-019 + 46.560000000000002 -7.1104364856835728E-019 + 46.619999999999990 -6.6780005949273588E-019 + 46.679999999999993 -6.1156826094830052E-019 + 46.739999999999995 -5.4055363987884290E-019 + 46.799999999999997 -4.5230045612720093E-019 + 46.859999999999999 -3.4347907088342673E-019 + 46.920000000000002 -2.0965211238464746E-019 + 46.979999999999990 -4.5001671572709157E-020 + 47.039999999999992 1.5796787065323460E-019 + 47.099999999999994 4.0875983460482701E-019 + 47.159999999999997 7.1923828641378395E-019 + 47.219999999999999 1.1040139921743598E-018 + 47.280000000000001 1.5808532901314222E-018 + 47.340000000000003 2.1711229604159292E-018 + 47.399999999999991 2.9002485057577039E-018 + 47.459999999999994 3.7982210258725624E-018 + 47.519999999999996 4.9001229195398872E-018 + 47.579999999999998 6.2467115858877324E-018 + 47.640000000000001 7.8850221459828621E-018 + 47.700000000000003 9.8690713322011443E-018 + 47.759999999999991 1.2260585774886563E-017 + 47.819999999999993 1.5129862551443480E-017 + 47.879999999999995 1.8556703073472258E-017 + 47.939999999999998 2.2631510446939413E-017 + 48.000000000000000 2.7456470748054269E-017 + 48.060000000000002 3.3147027342506237E-017 + 48.119999999999990 3.9833443811049546E-017 + 48.179999999999993 4.7662733665505338E-017 + 48.239999999999995 5.6800718311599377E-017 + 48.299999999999997 6.7434485395302390E-017 + 48.359999999999999 7.9775217362918048E-017 + 48.420000000000002 9.4061285828852785E-017 + 48.479999999999990 1.1056176847097389E-016 + 48.539999999999992 1.2958048131829594E-016 + 48.599999999999994 1.5146034393245015E-016 + 48.659999999999997 1.7658827685445142E-016 + 48.719999999999999 2.0540064131126491E-016 + 48.780000000000001 2.3838903408348049E-016 + 48.840000000000003 2.7610654822129477E-016 + 48.899999999999991 3.1917534211892781E-016 + 48.959999999999994 3.6829373260090126E-016 + 49.019999999999996 4.2424413676987937E-016 + 49.079999999999998 4.8790202630352592E-016 + 49.140000000000001 5.6024513667940891E-016 + 49.200000000000003 6.4236341392324591E-016 + 49.259999999999991 7.3546959074536319E-016 + 49.319999999999993 8.4090991112606000E-016 + 49.379999999999995 9.6017647695265162E-016 + 49.439999999999998 1.0949192615686665E-015 + 49.500000000000000 1.2469594915502134E-015 + 49.560000000000002 1.4183038081350197E-015 + 49.619999999999990 1.6111576874400925E-015 + 49.679999999999993 1.8279420641026174E-015 + 49.739999999999995 2.0713075304997447E-015 + 49.799999999999997 2.3441524858642669E-015 + 49.859999999999999 2.6496365464423841E-015 + 49.920000000000002 2.9912011565540055E-015 + 49.979999999999990 3.3725837818147463E-015 + 50.039999999999992 3.7978359893598474E-015 + 50.099999999999994 4.2713386698191654E-015 + 50.159999999999997 4.7978155857898371E-015 + 50.219999999999999 5.3823473228051760E-015 + 50.280000000000001 6.0303825736708770E-015 + 50.340000000000003 6.7477418047587631E-015 + 50.399999999999991 7.5406195514072923E-015 + 50.459999999999994 8.4155822705553286E-015 + 50.519999999999996 9.3795544234010428E-015 + 50.579999999999998 1.0439794955195119E-014 + 50.640000000000001 1.1603864549843085E-014 + 50.700000000000003 1.2879580552540609E-014 + 50.759999999999991 1.4274944912738695E-014 + 50.819999999999993 1.5798063349050404E-014 + 50.879999999999995 1.7457029466760611E-014 + 50.939999999999998 1.9259781592785273E-014 + 51.000000000000000 2.1213928074803232E-014 + 51.060000000000002 2.3326535354217794E-014 + 51.119999999999990 2.5603864485631222E-014 + 51.179999999999993 2.8051047022593562E-014 + 51.239999999999995 3.0671718510791541E-014 + 51.299999999999997 3.3467548805053160E-014 + 51.359999999999999 3.6437720003372804E-014 + 51.420000000000002 3.9578293701036811E-014 + 51.479999999999990 4.2881465144805994E-014 + 51.539999999999992 4.6334678666339188E-014 + 51.599999999999994 4.9919639775661986E-014 + 51.659999999999997 5.3611116660542309E-014 + 51.719999999999999 5.7375563472959474E-014 + 51.780000000000001 6.1169532460843203E-014 + 51.840000000000003 6.4937854967040647E-014 + 51.899999999999991 6.8611472403933763E-014 + 51.959999999999994 7.2105060613356659E-014 + 52.019999999999996 7.5314114902256266E-014 + 52.079999999999998 7.8111821906016281E-014 + 52.140000000000001 8.0345274193393705E-014 + 52.200000000000003 8.1831249069351917E-014 + 52.259999999999991 8.2351363717261893E-014 + 52.319999999999993 8.1646536668012403E-014 + 52.379999999999995 7.9410663614260087E-014 + 52.439999999999998 7.5283434412739784E-014 + 52.500000000000000 6.8842197007556999E-014 + 52.560000000000002 5.9592552055961297E-014 + 52.619999999999990 4.6957992216609950E-014 + 52.679999999999993 3.0267963975683748E-014 + 52.739999999999995 8.7443503691182193E-015 + 52.799999999999997 -1.8513585288297743E-014 + 52.859999999999999 -5.2546483045404861E-014 + 52.920000000000002 -9.4554063051071239E-014 + 52.979999999999990 -1.4591677174827658E-013 + 53.039999999999992 -2.0822027051501087E-013 + 53.099999999999994 -2.8328262770313954E-013 + 53.159999999999997 -3.7318501606304353E-013 + 53.219999999999999 -4.8030613777447098E-013 + 53.280000000000001 -6.0735990390366261E-013 + 53.339999999999989 -7.5743910747044273E-013 + 53.399999999999991 -9.3406244683066148E-013 + 53.459999999999994 -1.1412282353621711E-012 + 53.519999999999996 -1.3834727178071483E-012 + 53.579999999999998 -1.6659378869155933E-012 + 53.640000000000001 -1.9944410665001884E-012 + 53.700000000000003 -2.3755598565581447E-012 + 53.759999999999991 -2.8167197409635785E-012 + 53.819999999999993 -3.3262930219486055E-012 + 53.879999999999995 -3.9137093021439365E-012 + 53.939999999999998 -4.5895775603088463E-012 + 54.000000000000000 -5.3658172498566044E-012 + 54.060000000000002 -6.2558131909368248E-012 + 54.119999999999990 -7.2745666817474301E-012 + 54.179999999999993 -8.4388811444280233E-012 + 54.239999999999995 -9.7675586104988639E-012 + 54.299999999999997 -1.1281608724551717E-011 + 54.359999999999999 -1.3004494160594111E-011 + 54.420000000000002 -1.4962382133561662E-011 + 54.479999999999990 -1.7184421407878419E-011 + 54.539999999999992 -1.9703068077592124E-011 + 54.599999999999994 -2.2554402476995888E-011 + 54.659999999999997 -2.5778512392476671E-011 + 54.719999999999999 -2.9419874480426233E-011 + 54.780000000000001 -3.3527812968396612E-011 + 54.839999999999989 -3.8156940629667988E-011 + 54.899999999999991 -4.3367700087700659E-011 + 54.959999999999994 -4.9226889247873939E-011 + 55.019999999999996 -5.5808278616707537E-011 + 55.079999999999998 -6.3193231932185661E-011 + 55.140000000000001 -7.1471436708407055E-011 + 55.200000000000003 -8.0741630777381581E-011 + 55.259999999999991 -9.1112389882329040E-011 + 55.319999999999993 -1.0270300704567277E-010 + 55.379999999999995 -1.1564439157025609E-010 + 55.439999999999998 -1.3008003955712468E-010 + 55.500000000000000 -1.4616711686891874E-010 + 55.560000000000002 -1.6407748323626446E-010 + 55.619999999999990 -1.8399892828507848E-010 + 55.679999999999993 -2.0613638466191541E-010 + 55.739999999999995 -2.3071319557967368E-010 + 55.799999999999997 -2.5797240376501190E-010 + 55.859999999999999 -2.8817831001503272E-010 + 55.920000000000002 -3.2161770881961694E-010 + 55.979999999999990 -3.5860169073559669E-010 + 56.039999999999992 -3.9946672754344375E-010 + 56.099999999999994 -4.4457676681031387E-010 + 56.159999999999997 -4.9432439697834186E-010 + 56.219999999999999 -5.4913252832636799E-010 + 56.280000000000001 -6.0945597371634519E-010 + 56.339999999999989 -6.7578296075822391E-010 + 56.399999999999991 -7.4863658926937238E-010 + 56.459999999999994 -8.2857605367315106E-010 + 56.519999999999996 -9.1619776179445931E-010 + 56.579999999999998 -1.0121366555055011E-009 + 56.640000000000001 -1.1170665879821492E-009 + 56.700000000000003 -1.2317009719325394E-009 + 56.759999999999991 -1.3567925515456823E-009 + 56.819999999999993 -1.4931335824473193E-009 + 56.879999999999995 -1.6415547701895473E-009 + 56.939999999999998 -1.8029227704163590E-009 + 57.000000000000000 -1.9781396395201906E-009 + 57.060000000000002 -2.1681382671827071E-009 + 57.119999999999990 -2.3738783094779016E-009 + 57.179999999999993 -2.5963410610679716E-009 + 57.239999999999995 -2.8365221946840956E-009 + 57.299999999999997 -3.0954233763069382E-009 + 57.359999999999999 -3.3740419277222856E-009 + 57.420000000000002 -3.6733576262255982E-009 + 57.479999999999990 -3.9943187283426496E-009 + 57.539999999999992 -4.3378221632844909E-009 + 57.599999999999994 -4.7046944475853332E-009 + 57.659999999999997 -5.0956655863478363E-009 + 57.719999999999999 -5.5113397170737991E-009 + 57.780000000000001 -5.9521623883258823E-009 + 57.839999999999989 -6.4183820653088882E-009 + 57.899999999999991 -6.9100028416515932E-009 + 57.959999999999994 -7.4267348726677133E-009 + 58.019999999999996 -7.9679341603117711E-009 + 58.079999999999998 -8.5325354492948295E-009 + 58.140000000000001 -9.1189743641148525E-009 + 58.200000000000003 -9.7251011813061948E-009 + 58.259999999999991 -1.0348078687651465E-008 + 58.319999999999993 -1.0984272099712053E-008 + 58.379999999999995 -1.1629122004991933E-008 + 58.439999999999998 -1.2276998227255255E-008 + 58.500000000000000 -1.2921042262361274E-008 + 58.560000000000002 -1.3552980531735958E-008 + 58.619999999999990 -1.4162925191170654E-008 + 58.679999999999993 -1.4739143720945684E-008 + 58.739999999999995 -1.5267807751149859E-008 + 58.799999999999997 -1.5732701312622940E-008 + 58.859999999999999 -1.6114909426820603E-008 + 58.920000000000002 -1.6392458956493684E-008 + 58.979999999999990 -1.6539930736081834E-008 + 59.039999999999992 -1.6528012991878736E-008 + 59.099999999999994 -1.6323022647226455E-008 + 59.159999999999997 -1.5886365533234026E-008 + 59.219999999999999 -1.5173938840912847E-008 + 59.280000000000001 -1.4135470003719510E-008 + 59.339999999999989 -1.2713788389963559E-008 + 59.399999999999991 -1.0844019812105225E-008 + 59.459999999999994 -8.4526903123427559E-009 + 59.519999999999996 -5.4567779094642217E-009 + 59.579999999999998 -1.7625873573441255E-009 + 59.640000000000001 2.7353814823154747E-009 + 59.700000000000003 8.1557578107749168E-009 + 59.759999999999991 1.4631732562863962E-008 + 59.819999999999993 2.2312633350569455E-008 + 59.879999999999995 3.1365573191715886E-008 + 59.939999999999998 4.1977391879826418E-008 + 60.000000000000000 5.4356696309859830E-008 + 60.060000000000002 6.8736070900111807E-008 + 60.119999999999990 8.5374557049368776E-008 + 60.179999999999993 1.0456019507042356E-007 + 60.239999999999995 1.2661311465537386E-007 + 60.299999999999997 1.5188855799154055E-007 + 60.359999999999999 1.8078044306178229E-007 + 60.420000000000002 2.1372478416840609E-007 + 60.479999999999990 2.5120412828799201E-007 + 60.539999999999992 2.9375171794212518E-007 + 60.599999999999994 3.4195635122263898E-007 + 60.659999999999997 3.9646732355759584E-007 + 60.719999999999999 4.5800039389367809E-007 + 60.780000000000001 5.2734345379383662E-007 + 60.839999999999989 6.0536329465181853E-007 + 60.899999999999991 6.9301203890529750E-007 + 60.959999999999994 7.9133560215485258E-007 + 61.019999999999996 9.0148148401022986E-007 + 61.079999999999998 1.0247070152366606E-006 + 61.140000000000001 1.1623892959018047E-006 + 61.200000000000003 1.3160353699712193E-006 + 61.259999999999991 1.4872932435115917E-006 + 61.319999999999993 1.6779629325024405E-006 + 61.379999999999995 1.8900088630973194E-006 + 61.439999999999998 2.1255745532306953E-006 + 61.500000000000000 2.3869947989606274E-006 + 61.560000000000002 2.6768133600082337E-006 + 61.619999999999990 2.9977966633811290E-006 + 61.679999999999993 3.3529534358938583E-006 + 61.739999999999995 3.7455522784043584E-006 + 61.799999999999997 4.1791401808897598E-006 + 61.859999999999999 4.6575651370740656E-006 + 61.920000000000002 5.1849985556047699E-006 + 61.979999999999990 5.7659566673492181E-006 + 62.039999999999992 6.4053270832147368E-006 + 62.099999999999994 7.1083950316519518E-006 + 62.159999999999997 7.8808721848262003E-006 + 62.219999999999999 8.7289231908321828E-006 + 62.280000000000001 9.6592003843879939E-006 + 62.339999999999989 1.0678874059164339E-005 + 62.399999999999991 1.1795669978391309E-005 + 62.459999999999994 1.3017902481719467E-005 + 62.519999999999996 1.4354513326822438E-005 + 62.579999999999998 1.5815111643622017E-005 + 62.640000000000001 1.7410019973127218E-005 + 62.700000000000003 1.9150311119164131E-005 + 62.759999999999991 2.1047861979342752E-005 + 62.819999999999993 2.3115395629926387E-005 + 62.879999999999995 2.5366532128527762E-005 + 62.939999999999998 2.7815843619617398E-005 + 63.000000000000000 3.0478908367993660E-005 + 63.060000000000002 3.3372362490755652E-005 + 63.119999999999990 3.6513955091406015E-005 + 63.179999999999993 3.9922630896676347E-005 + 63.239999999999995 4.3618557665995693E-005 + 63.299999999999997 4.7623215451387187E-005 + 63.359999999999999 5.1959461814895538E-005 + 63.420000000000002 5.6651597282843983E-005 + 63.479999999999990 6.1725425468258467E-005 + 63.539999999999992 6.7208326391131283E-005 + 63.599999999999994 7.3129357727587662E-005 + 63.659999999999997 7.9519288450141494E-005 + 63.719999999999999 8.6410700705087806E-005 + 63.780000000000001 9.3838052768749540E-005 + 63.839999999999989 1.0183777679563845E-004 + 63.899999999999991 1.1044835043398474E-004 + 63.959999999999994 1.1971037605409336E-004 + 64.019999999999996 1.2966662380190359E-004 + 64.079999999999998 1.4036218594800392E-004 + 64.140000000000001 1.5184451802265005E-004 + 64.200000000000003 1.6416350173376317E-004 + 64.259999999999991 1.7737153980184445E-004 + 64.319999999999993 1.9152367412947767E-004 + 64.379999999999995 2.0667760053655682E-004 + 64.439999999999998 2.2289377123759849E-004 + 64.500000000000000 2.4023546400076209E-004 + 64.560000000000002 2.5876890099786864E-004 + 64.619999999999990 2.7856318028354093E-004 + 64.679999999999993 2.9969054186062942E-004 + 64.739999999999995 3.2222627138436962E-004 + 64.799999999999997 3.4624877552044106E-004 + 64.859999999999999 3.7183973036827330E-004 + 64.920000000000002 3.9908396714932374E-004 + 64.979999999999990 4.2806966866175785E-004 + 65.039999999999992 4.5888839053065438E-004 + 65.099999999999994 4.9163491049902049E-004 + 65.159999999999997 5.2640747881492532E-004 + 65.219999999999999 5.6330759063287299E-004 + 65.280000000000001 6.0244024657334810E-004 + 65.339999999999989 6.4391385350353561E-004 + 65.399999999999991 6.8783995373150381E-004 + 65.459999999999994 7.3433356509632368E-004 + 65.519999999999996 7.8351281766215043E-004 + 65.579999999999998 8.3549916995239414E-004 + 65.640000000000001 8.9041720596490237E-004 + 65.700000000000003 9.4839471743951543E-004 + 65.759999999999991 1.0095621101453554E-003 + 65.819999999999993 1.0740529225319244E-003 + 65.879999999999995 1.1420033479673020E-003 + 65.939999999999998 1.2135520582708351E-003 + 66.000000000000000 1.2888402991938631E-003 + 66.060000000000002 1.3680113677812420E-003 + 66.119999999999990 1.4512106762907685E-003 + 66.179999999999993 1.5385855717845072E-003 + 66.239999999999995 1.6302849927785300E-003 + 66.299999999999997 1.7264589120541899E-003 + 66.359999999999999 1.8272587453032109E-003 + 66.420000000000002 1.9328364890077376E-003 + 66.479999999999990 2.0433445573761247E-003 + 66.539999999999992 2.1589355134765367E-003 + 66.599999999999994 2.2797618155647489E-003 + 66.659999999999997 2.4059753262070664E-003 + 66.719999999999999 2.5377271241137679E-003 + 66.780000000000001 2.6751660753913408E-003 + 66.839999999999989 2.8184403503363196E-003 + 66.899999999999991 2.9676948448407268E-003 + 66.959999999999994 3.1230724863881222E-003 + 67.019999999999996 3.2847123497263980E-003 + 67.079999999999998 3.4527502166583454E-003 + 67.140000000000001 3.6273174540931820E-003 + 67.199999999999989 3.8085403667943137E-003 + 67.259999999999991 3.9965403863779841E-003 + 67.319999999999993 4.1914328029583198E-003 + 67.379999999999995 4.3933262883830973E-003 + 67.439999999999998 4.6023226373139870E-003 + 67.500000000000000 4.8185159272976629E-003 + 67.560000000000002 5.0419922889491618E-003 + 67.619999999999990 5.2728279791730889E-003 + 67.679999999999993 5.5110901510354512E-003 + 67.739999999999995 5.7568363982463235E-003 + 67.799999999999997 6.0101136038820226E-003 + 67.859999999999999 6.2709561958494142E-003 + 67.920000000000002 6.5393868711165846E-003 + 67.979999999999990 6.8154165447581478E-003 + 68.039999999999992 7.0990418202576981E-003 + 68.099999999999994 7.3902461544100182E-003 + 68.159999999999997 7.6889983522488454E-003 + 68.219999999999999 7.9952521552622731E-003 + 68.280000000000001 8.3089457047542774E-003 + 68.339999999999989 8.6300011797463272E-003 + 68.399999999999991 8.9583238823870755E-003 + 68.459999999999994 9.2938028423935060E-003 + 68.519999999999996 9.6363070170331442E-003 + 68.579999999999998 9.9856902947259279E-003 + 68.640000000000001 1.0341786363580888E-002 + 68.699999999999989 1.0704411885928716E-002 + 68.759999999999991 1.1073361737097194E-002 + 68.819999999999993 1.1448412408604064E-002 + 68.879999999999995 1.1829322123898787E-002 + 68.939999999999998 1.2215828698038880E-002 + 69.000000000000000 1.2607647637701336E-002 + 69.060000000000002 1.3004477660791295E-002 + 69.119999999999990 1.3405994538108328E-002 + 69.179999999999993 1.3811856441666917E-002 + 69.239999999999995 1.4221698556632661E-002 + 69.299999999999997 1.4635138185049428E-002 + 69.359999999999999 1.5051773684778596E-002 + 69.420000000000002 1.5471180054845686E-002 + 69.479999999999990 1.5892914562154730E-002 + 69.539999999999992 1.6316520155378815E-002 + 69.599999999999994 1.6741513925910188E-002 + 69.659999999999997 1.7167399810947653E-002 + 69.719999999999999 1.7593662163902880E-002 + 69.780000000000001 1.8019770000971189E-002 + 69.839999999999989 1.8445174901257518E-002 + 69.899999999999991 1.8869313226564963E-002 + 69.959999999999994 1.9291606628713296E-002 + 70.019999999999996 1.9711464902583051E-002 + 70.079999999999998 2.0128282549723896E-002 + 70.140000000000001 2.0541442861725913E-002 + 70.199999999999989 2.0950320953100125E-002 + 70.259999999999991 2.1354276708508677E-002 + 70.319999999999993 2.1752667799403994E-002 + 70.379999999999995 2.2144841304945432E-002 + 70.439999999999998 2.2530141038610146E-002 + 70.500000000000000 2.2907901444167371E-002 + 70.560000000000002 2.3277457824908081E-002 + 70.619999999999990 2.3638143093806099E-002 + 70.679999999999993 2.3989288739430775E-002 + 70.739999999999995 2.4330229079529204E-002 + 70.799999999999997 2.4660297446896098E-002 + 70.859999999999999 2.4978836593416310E-002 + 70.920000000000002 2.5285191963387278E-002 + 70.979999999999990 2.5578715707187404E-002 + 71.039999999999992 2.5858770943932099E-002 + 71.099999999999994 2.6124729824124705E-002 + 71.159999999999997 2.6375976930360881E-002 + 71.219999999999999 2.6611912987554179E-002 + 71.280000000000001 2.6831949351525535E-002 + 71.339999999999989 2.7035516837540009E-002 + 71.399999999999991 2.7222067098745313E-002 + 71.459999999999994 2.7391067626642451E-002 + 71.519999999999996 2.7542009188735578E-002 + 71.579999999999998 2.7674406877586030E-002 + 71.640000000000001 2.7787798758646065E-002 + 71.699999999999989 2.7881746768465131E-002 + 71.759999999999991 2.7955843754301143E-002 + 71.819999999999993 2.8009707694433970E-002 + 71.879999999999995 2.8042988359734750E-002 + 71.939999999999998 2.8055365483006463E-002 + 72.000000000000000 2.8046548879722369E-002 + 72.060000000000002 2.8016285451465481E-002 + 72.119999999999990 2.7964352951497108E-002 + 72.179999999999993 2.7890564296774042E-002 + 72.239999999999995 2.7794765101429884E-002 + 72.299999999999997 2.7676842964138429E-002 + 72.359999999999999 2.7536716492145778E-002 + 72.420000000000002 2.7374344825596204E-002 + 72.479999999999990 2.7189724217472695E-002 + 72.539999999999992 2.6982885478120451E-002 + 72.599999999999994 2.6753903088585700E-002 + 72.659999999999997 2.6502885153193028E-002 + 72.719999999999999 2.6229978449183393E-002 + 72.780000000000001 2.5935371670749895E-002 + 72.839999999999989 2.5619286015921998E-002 + 72.899999999999991 2.5281985327495825E-002 + 72.959999999999994 2.4923766328688198E-002 + 73.019999999999996 2.4544963168317693E-002 + 73.079999999999998 2.4145947515227879E-002 + 73.140000000000001 2.3727124313019925E-002 + 73.199999999999989 2.3288935129935563E-002 + 73.259999999999991 2.2831853699045748E-002 + 73.319999999999993 2.2356387426777553E-002 + 73.379999999999995 2.1863072627387060E-002 + 73.439999999999998 2.1352478766661371E-002 + 73.500000000000000 2.0825203665015984E-002 + 73.560000000000002 2.0281872175568164E-002 + 73.619999999999990 1.9723134888941164E-002 + 73.679999999999993 1.9149669691212446E-002 + 73.739999999999995 1.8562174384374925E-002 + 73.799999999999997 1.7961371874442193E-002 + 73.859999999999999 1.7348005457862335E-002 + 73.920000000000002 1.6722831973296749E-002 + 73.979999999999990 1.6086628889280641E-002 + 74.039999999999992 1.5440190828003849E-002 + 74.099999999999994 1.4784319975513348E-002 + 74.159999999999997 1.4119833139725431E-002 + 74.219999999999999 1.3447557248834752E-002 + 74.280000000000001 1.2768326194006273E-002 + 74.339999999999989 1.2082978331034786E-002 + 74.399999999999991 1.1392357612917438E-002 + 74.459999999999994 1.0697310201420122E-002 + 74.519999999999996 9.9986823998081294E-003 + 74.579999999999998 9.2973182795999809E-003 + 74.640000000000001 8.5940586205940032E-003 + 74.699999999999989 7.8897402868006485E-003 + 74.759999999999991 7.1851918986701197E-003 + 74.819999999999993 6.4812346782321438E-003 + 74.879999999999995 5.7786792273020679E-003 + 74.939999999999998 5.0783247376743274E-003 + 75.000000000000000 4.3809570090778266E-003 + 75.060000000000002 3.6873463949835023E-003 + 75.119999999999990 2.9982478704085316E-003 + 75.179999999999993 2.3143985055633790E-003 + 75.239999999999995 1.6365163389324988E-003 + 75.299999999999997 9.6529923232750140E-004 + 75.359999999999999 3.0142377773699079E-004 + 75.420000000000002 -3.5445536356768165E-004 + 75.479999999999990 -1.0017073396061979E-003 + 75.539999999999992 -1.6397258273281382E-003 + 75.599999999999994 -2.2679286383199887E-003 + 75.659999999999997 -2.8857611208562791E-003 + 75.719999999999999 -3.4926932738404094E-003 + 75.780000000000001 -4.0882232003748254E-003 + 75.839999999999989 -4.6718765862393159E-003 + 75.899999999999991 -5.2432071020429103E-003 + 75.959999999999994 -5.8017967423587410E-003 + 76.019999999999996 -6.3472562927086376E-003 + 76.079999999999998 -6.8792258478076289E-003 + 76.140000000000001 -7.3973724791689755E-003 + 76.199999999999989 -7.9013949464262698E-003 + 76.259999999999991 -8.3910191030819124E-003 + 76.319999999999993 -8.8659996483428649E-003 + 76.379999999999995 -9.3261195822557357E-003 + 76.439999999999998 -9.7711923546820855E-003 + 76.500000000000000 -1.0201055707911294E-002 + 76.560000000000002 -1.0615578017927788E-002 + 76.619999999999990 -1.1014653500405416E-002 + 76.679999999999993 -1.1398201392614871E-002 + 76.739999999999995 -1.1766169706522663E-002 + 76.799999999999997 -1.2118530163554081E-002 + 76.859999999999999 -1.2455279624258807E-002 + 76.920000000000002 -1.2776437878318761E-002 + 76.979999999999990 -1.3082048128792255E-002 + 77.039999999999992 -1.3372176568823441E-002 + 77.099999999999994 -1.3646910207036612E-002 + 77.159999999999997 -1.3906357058172940E-002 + 77.219999999999999 -1.4150644254415033E-002 + 77.280000000000001 -1.4379918842881286E-002 + 77.339999999999989 -1.4594343822121453E-002 + 77.399999999999991 -1.4794100202754113E-002 + 77.459999999999994 -1.4979385612113854E-002 + 77.519999999999996 -1.5150410786226497E-002 + 77.579999999999998 -1.5307403286705684E-002 + 77.640000000000001 -1.5450601429235215E-002 + 77.699999999999989 -1.5580256889706233E-002 + 77.759999999999991 -1.5696631490358267E-002 + 77.819999999999993 -1.5799997413162542E-002 + 77.879999999999995 -1.5890636956324262E-002 + 77.939999999999998 -1.5968838915413064E-002 + 78.000000000000000 -1.6034902745831817E-002 + 78.060000000000002 -1.6089131529562182E-002 + 78.119999999999990 -1.6131835769285226E-002 + 78.179999999999993 -1.6163329574051508E-002 + 78.239999999999995 -1.6183930238506769E-002 + 78.299999999999997 -1.6193959585148677E-002 + 78.359999999999999 -1.6193742740256752E-002 + 78.420000000000002 -1.6183606796054593E-002 + 78.479999999999990 -1.6163877116900177E-002 + 78.539999999999992 -1.6134880907085956E-002 + 78.599999999999994 -1.6096945986908001E-002 + 78.659999999999997 -1.6050396736881734E-002 + 78.719999999999999 -1.5995558533264998E-002 + 78.780000000000001 -1.5932753772688643E-002 + 78.839999999999989 -1.5862303032653596E-002 + 78.899999999999991 -1.5784522404476333E-002 + 78.959999999999994 -1.5699724247957854E-002 + 79.019999999999996 -1.5608219381511886E-002 + 79.079999999999998 -1.5510311337756325E-002 + 79.140000000000001 -1.5406301259706129E-002 + 79.199999999999989 -1.5296484295961789E-002 + 79.259999999999991 -1.5181151122240331E-002 + 79.319999999999993 -1.5060585881983810E-002 + 79.379999999999995 -1.4935066934517526E-002 + 79.439999999999998 -1.4804868024624862E-002 + 79.500000000000000 -1.4670254846068775E-002 + 79.560000000000002 -1.4531488611928305E-002 + 79.619999999999990 -1.4388823454232504E-002 + 79.679999999999993 -1.4242506322297732E-002 + 79.739999999999995 -1.4092778050924104E-002 + 79.799999999999997 -1.3939873809939688E-002 + 79.859999999999999 -1.3784020765093918E-002 + 79.920000000000002 -1.3625440255451324E-002 + 79.979999999999990 -1.3464346435815363E-002 + 80.039999999999992 -1.3300945833537251E-002 + 80.099999999999994 -1.3135440447766954E-002 + 80.159999999999997 -1.2968024456546903E-002 + 80.219999999999999 -1.2798887122986985E-002 + 80.280000000000001 -1.2628209196686030E-002 + 80.340000000000003 -1.2456165887561804E-002 + 80.400000000000006 -1.2282925574941556E-002 + 80.460000000000008 -1.2108652078269288E-002 + 80.519999999999982 -1.1933502554334218E-002 + 80.579999999999984 -1.1757628697169412E-002 + 80.639999999999986 -1.1581174351470120E-002 + 80.699999999999989 -1.1404280724278256E-002 + 80.759999999999991 -1.1227082305264657E-002 + 80.819999999999993 -1.1049707172445440E-002 + 80.879999999999995 -1.0872279712108957E-002 + 80.939999999999998 -1.0694919388518903E-002 + 81.000000000000000 -1.0517738671365615E-002 + 81.060000000000002 -1.0340848498192994E-002 + 81.120000000000005 -1.0164352907988594E-002 + 81.180000000000007 -9.9883515309433686E-003 + 81.240000000000009 -9.8129402363085518E-003 + 81.299999999999983 -9.6382114160771127E-003 + 81.359999999999985 -9.4642534757522247E-003 + 81.419999999999987 -9.2911484044456462E-003 + 81.479999999999990 -9.1189782273613743E-003 + 81.539999999999992 -8.9478182513440668E-003 + 81.599999999999994 -8.7777418309762049E-003 + 81.659999999999997 -8.6088188630695645E-003 + 81.719999999999999 -8.4411165121178102E-003 + 81.780000000000001 -8.2746972643653674E-003 + 81.840000000000003 -8.1096224007815472E-003 + 81.900000000000006 -7.9459491999557819E-003 + 81.960000000000008 -7.7837322049314961E-003 + 82.019999999999982 -7.6230232598147925E-003 + 82.079999999999984 -7.4638721265190304E-003 + 82.139999999999986 -7.3063260825605488E-003 + 82.199999999999989 -7.1504296676728925E-003 + 82.259999999999991 -6.9962242873448455E-003 + 82.319999999999993 -6.8437506995151654E-003 + 82.379999999999995 -6.6930467319672414E-003 + 82.439999999999998 -6.5441475762334613E-003 + 82.500000000000000 -6.3970871499685064E-003 + 82.560000000000002 -6.2518968620861644E-003 + 82.620000000000005 -6.1086062480765150E-003 + 82.680000000000007 -5.9672431938050750E-003 + 82.740000000000009 -5.8278338250146808E-003 + 82.799999999999983 -5.6904018129018763E-003 + 82.859999999999985 -5.5549692660603551E-003 + 82.919999999999987 -5.4215577948248245E-003 + 82.979999999999990 -5.2901856141330892E-003 + 83.039999999999992 -5.1608699466222365E-003 + 83.099999999999994 -5.0336265811570385E-003 + 83.159999999999997 -4.9084693774811092E-003 + 83.219999999999999 -4.7854112334268263E-003 + 83.280000000000001 -4.6644632362386525E-003 + 83.340000000000003 -4.5456345838637740E-003 + 83.400000000000006 -4.4289336402791157E-003 + 83.460000000000008 -4.3143672010406715E-003 + 83.519999999999982 -4.2019405689300406E-003 + 83.579999999999984 -4.0916578321848508E-003 + 83.639999999999986 -3.9835214143811703E-003 + 83.699999999999989 -3.8775331106885775E-003 + 83.759999999999991 -3.7736926905324124E-003 + 83.819999999999993 -3.6719992380422591E-003 + 83.879999999999995 -3.5724503228783087E-003 + 83.939999999999998 -3.4750426469678502E-003 + 84.000000000000000 -3.3797710962449631E-003 + 84.060000000000002 -3.2866298934943750E-003 + 84.120000000000005 -3.1956121384589752E-003 + 84.180000000000007 -3.1067094619616886E-003 + 84.240000000000009 -3.0199123070063479E-003 + 84.299999999999983 -2.9352106174160885E-003 + 84.359999999999985 -2.8525928998621971E-003 + 84.419999999999987 -2.7720465780815980E-003 + 84.479999999999990 -2.6935580104864515E-003 + 84.539999999999992 -2.6171130278685902E-003 + 84.599999999999994 -2.5426963759224790E-003 + 84.659999999999997 -2.4702917697578216E-003 + 84.719999999999999 -2.3998822457457760E-003 + 84.780000000000001 -2.3314496143801693E-003 + 84.840000000000003 -2.2649754130437856E-003 + 84.900000000000006 -2.2004403389118388E-003 + 84.960000000000008 -2.1378240903083068E-003 + 85.019999999999982 -2.0771060186757025E-003 + 85.079999999999984 -2.0182645366216981E-003 + 85.139999999999986 -1.9612778383676127E-003 + 85.199999999999989 -1.9061231465920597E-003 + 85.259999999999991 -1.8527771001151062E-003 + 85.319999999999993 -1.8012161874715945E-003 + 85.379999999999995 -1.7514161337664215E-003 + 85.439999999999998 -1.7033522558894281E-003 + 85.500000000000000 -1.6569994519033870E-003 + 85.560000000000002 -1.6123320664906545E-003 + 85.620000000000005 -1.5693242247593940E-003 + 85.680000000000007 -1.5279496328170872E-003 + 85.740000000000009 -1.4881816762225264E-003 + 85.799999999999983 -1.4499932349405981E-003 + 85.859999999999985 -1.4133572224086263E-003 + 85.919999999999987 -1.3782463059712328E-003 + 85.979999999999990 -1.3446326286083764E-003 + 86.039999999999992 -1.3124883840537596E-003 + 86.099999999999994 -1.2817854240945929E-003 + 86.159999999999997 -1.2524956808252134E-003 + 86.219999999999999 -1.2245908431962192E-003 + 86.280000000000001 -1.1980424890295647E-003 + 86.340000000000003 -1.1728221650071432E-003 + 86.400000000000006 -1.1489012610538354E-003 + 86.460000000000008 -1.1262511942934290E-003 + 86.519999999999982 -1.1048433447989677E-003 + 86.579999999999984 -1.0846490595473640E-003 + 86.639999999999986 -1.0656397916666770E-003 + 86.699999999999989 -1.0477868286678954E-003 + 86.759999999999991 -1.0310616134493488E-003 + 86.819999999999993 -1.0154357288332677E-003 + 86.879999999999995 -1.0008807138675989E-003 + 86.939999999999998 -9.8736814183340176E-004 + 87.000000000000000 -9.7486983132614752E-004 + 87.060000000000002 -9.6335764472626931E-004 + 87.120000000000005 -9.5280364530101510E-004 + 87.180000000000007 -9.4317987280538465E-004 + 87.240000000000009 -9.3445863439813341E-004 + 87.299999999999983 -9.2661244397184025E-004 + 87.359999999999985 -9.1961382361784721E-004 + 87.419999999999987 -9.1343568485217203E-004 + 87.479999999999990 -9.0805091582675198E-004 + 87.539999999999992 -9.0343274974200060E-004 + 87.599999999999994 -8.9955462598024648E-004 + 87.659999999999997 -8.9639004809517330E-004 + 87.719999999999999 -8.9391285591381765E-004 + 87.780000000000001 -8.9209702169416763E-004 + 87.840000000000003 -8.9091687103631367E-004 + 87.900000000000006 -8.9034686709348314E-004 + 87.960000000000008 -8.9036170939483974E-004 + 88.019999999999982 -8.9093645668584815E-004 + 88.079999999999984 -8.9204635185094472E-004 + 88.139999999999986 -8.9366703424375270E-004 + 88.199999999999989 -8.9577424156479649E-004 + 88.259999999999991 -8.9834408994322748E-004 + 88.319999999999993 -9.0135316872805348E-004 + 88.379999999999995 -9.0477817370904212E-004 + 88.439999999999998 -9.0859621984194869E-004 + 88.500000000000000 -9.1278485983412299E-004 + 88.560000000000002 -9.1732182784081816E-004 + 88.620000000000005 -9.2218533302511059E-004 + 88.680000000000007 -9.2735392035713871E-004 + 88.740000000000009 -9.3280637243101853E-004 + 88.799999999999983 -9.3852202056478665E-004 + 88.859999999999985 -9.4448049503020404E-004 + 88.919999999999987 -9.5066165414965415E-004 + 88.979999999999990 -9.5704593177464627E-004 + 89.039999999999992 -9.6361407757588821E-004 + 89.099999999999994 -9.7034713200642563E-004 + 89.159999999999997 -9.7722671022189224E-004 + 89.219999999999999 -9.8423465833257450E-004 + 89.280000000000001 -9.9135331107689313E-004 + 89.340000000000003 -9.9856530809710434E-004 + 89.400000000000006 -1.0058538229705222E-003 + 89.460000000000008 -1.0132023255562748E-003 + 89.519999999999982 -1.0205948848004281E-003 + 89.579999999999984 -1.0280158581215117E-003 + 89.639999999999986 -1.0354500325389349E-003 + 89.699999999999989 -1.0428826103852436E-003 + 89.759999999999991 -1.0502993508663600E-003 + 89.819999999999993 -1.0576863553053177E-003 + 89.879999999999995 -1.0650301578055768E-003 + 89.939999999999998 -1.0723180784940501E-003 + 90.000000000000000 -1.0795373369590295E-003 + 90.060000000000002 -1.0866759586776241E-003 + 90.120000000000005 -1.0937222845444675E-003 + 90.180000000000007 -1.1006651148078141E-003 + 90.240000000000009 -1.1074937541209840E-003 + 90.299999999999983 -1.1141979619087240E-003 + 90.359999999999985 -1.1207679416827296E-003 + 90.419999999999987 -1.1271942488875488E-003 + 90.479999999999990 -1.1334679383690276E-003 + 90.539999999999992 -1.1395805212808846E-003 + 90.599999999999994 -1.1455239198412345E-003 + 90.659999999999997 -1.1512904832743521E-003 + 90.719999999999999 -1.1568730791293085E-003 + 90.780000000000001 -1.1622649144131351E-003 + 90.840000000000003 -1.1674597030137022E-003 + 90.900000000000006 -1.1724514772955166E-003 + 90.960000000000008 -1.1772347285415000E-003 + 91.019999999999982 -1.1818045196806816E-003 + 91.079999999999984 -1.1861561864313502E-003 + 91.139999999999986 -1.1902854222667833E-003 + 91.199999999999989 -1.1941883575303609E-003 + 91.259999999999991 -1.1978614955856239E-003 + 91.319999999999993 -1.2013016829846410E-003 + 91.379999999999995 -1.2045063863945439E-003 + 91.439999999999998 -1.2074732182746125E-003 + 91.500000000000000 -1.2102003142561507E-003 + 91.560000000000002 -1.2126860725512559E-003 + 91.620000000000005 -1.2149294139578784E-003 + 91.680000000000007 -1.2169296330384145E-003 + 91.739999999999981 -1.2186863236956121E-003 + 91.799999999999983 -1.2201996092021117E-003 + 91.859999999999985 -1.2214696964196574E-003 + 91.919999999999987 -1.2224972894276042E-003 + 91.979999999999990 -1.2232835329736924E-003 + 92.039999999999992 -1.2238299443294389E-003 + 92.099999999999994 -1.2241381742980292E-003 + 92.159999999999997 -1.2242104913803605E-003 + 92.219999999999999 -1.2240492037764352E-003 + 92.280000000000001 -1.2236570739468709E-003 + 92.340000000000003 -1.2230370066725242E-003 + 92.400000000000006 -1.2221925399381005E-003 + 92.460000000000008 -1.2211270353921439E-003 + 92.519999999999982 -1.2198442729906220E-003 + 92.579999999999984 -1.2183484658454561E-003 + 92.639999999999986 -1.2166437839298749E-003 + 92.699999999999989 -1.2147345814062054E-003 + 92.759999999999991 -1.2126257398156154E-003 + 92.819999999999993 -1.2103220991032425E-003 + 92.879999999999995 -1.2078288278696411E-003 + 92.939999999999998 -1.2051511655125420E-003 + 93.000000000000000 -1.2022947269514064E-003 + 93.060000000000002 -1.1992649612233815E-003 + 93.120000000000005 -1.1960679026927783E-003 + 93.180000000000007 -1.1927092932368546E-003 + 93.239999999999981 -1.1891952879726677E-003 + 93.299999999999983 -1.1855319795979627E-003 + 93.359999999999985 -1.1817257495334798E-003 + 93.419999999999987 -1.1777829273086425E-003 + 93.479999999999990 -1.1737099800859434E-003 + 93.539999999999992 -1.1695132849185151E-003 + 93.599999999999994 -1.1651994809387524E-003 + 93.659999999999997 -1.1607749956493380E-003 + 93.719999999999999 -1.1562463012455969E-003 + 93.780000000000001 -1.1516200264500057E-003 + 93.840000000000003 -1.1469026352465778E-003 + 93.900000000000006 -1.1421005309825729E-003 + 93.960000000000008 -1.1372201383554506E-003 + 94.019999999999982 -1.1322678138848347E-003 + 94.079999999999984 -1.1272499665338262E-003 + 94.139999999999986 -1.1221727165967618E-003 + 94.199999999999989 -1.1170423430254147E-003 + 94.259999999999991 -1.1118648953532813E-003 + 94.319999999999993 -1.1066466112870813E-003 + 94.379999999999995 -1.1013934327256288E-003 + 94.439999999999998 -1.0961113170375359E-003 + 94.500000000000000 -1.0908060223702931E-003 + 94.560000000000002 -1.0854833964894484E-003 + 94.620000000000005 -1.0801491173516530E-003 + 94.680000000000007 -1.0748087932712460E-003 + 94.739999999999981 -1.0694678548544446E-003 + 94.799999999999983 -1.0641317034075259E-003 + 94.859999999999985 -1.0588056653499350E-003 + 94.919999999999987 -1.0534948794289312E-003 + 94.979999999999990 -1.0482043462584382E-003 + 95.039999999999992 -1.0429390726933217E-003 + 95.099999999999994 -1.0377037275628755E-003 + 95.159999999999997 -1.0325030335571295E-003 + 95.219999999999999 -1.0273416966734314E-003 + 95.280000000000001 -1.0222240484995240E-003 + 95.340000000000003 -1.0171544374083235E-003 + 95.400000000000006 -1.0121372016286935E-003 + 95.460000000000008 -1.0071764235159847E-003 + 95.519999999999982 -1.0022762563522000E-003 + 95.579999999999984 -9.9744063813501471E-004 + 95.639999999999986 -9.9267352768763828E-004 + 95.699999999999989 -9.8797882337574544E-004 + 95.759999999999991 -9.8336041063941263E-004 + 95.819999999999993 -9.7882185988897009E-004 + 95.879999999999995 -9.7436694048633806E-004 + 95.939999999999998 -9.6999930498583035E-004 + 96.000000000000000 -9.6572264617905549E-004 + 96.060000000000002 -9.6154051623136374E-004 + 96.120000000000005 -9.5745643951579700E-004 + 96.180000000000007 -9.5347388209240849E-004 + 96.239999999999981 -9.4959635968264622E-004 + 96.299999999999983 -9.4582729434235940E-004 + 96.359999999999985 -9.4217014554875164E-004 + 96.419999999999987 -9.3862831952129478E-004 + 96.479999999999990 -9.3520519928655963E-004 + 96.539999999999992 -9.3190416912730190E-004 + 96.599999999999994 -9.2872853591080128E-004 + 96.659999999999997 -9.2568162373948045E-004 + 96.719999999999999 -9.2276676277969866E-004 + 96.780000000000001 -9.1998726982500873E-004 + 96.840000000000003 -9.1734645143168672E-004 + 96.900000000000006 -9.1484754015201892E-004 + 96.960000000000008 -9.1249380915457462E-004 + 97.019999999999982 -9.1028850018373350E-004 + 97.079999999999984 -9.0823484342503647E-004 + 97.139999999999986 -9.0633596007974539E-004 + 97.199999999999989 -9.0459500150158294E-004 + 97.259999999999991 -9.0301503800101148E-004 + 97.319999999999993 -9.0159908231814893E-004 + 97.379999999999995 -9.0035017119067119E-004 + 97.439999999999998 -8.9927115966982715E-004 + 97.500000000000000 -8.9836489760213739E-004 + 97.560000000000002 -8.9763414852553683E-004 + 97.620000000000005 -8.9708166652526400E-004 + 97.680000000000007 -8.9670994948150512E-004 + 97.739999999999981 -8.9652153266239895E-004 + 97.799999999999983 -8.9651865630591436E-004 + 97.859999999999985 -8.9670363666285796E-004 + 97.919999999999987 -8.9707857442118070E-004 + 97.979999999999990 -8.9764534185408267E-004 + 98.039999999999992 -8.9840563793846682E-004 + 98.099999999999994 -8.9936106025808617E-004 + 98.159999999999997 -9.0051286478576211E-004 + 98.219999999999999 -9.0186224801046375E-004 + 98.280000000000001 -9.0340997923475327E-004 + 98.340000000000003 -9.0515667668332966E-004 + 98.400000000000006 -9.0710268099557689E-004 + 98.460000000000008 -9.0924797585573451E-004 + 98.519999999999982 -9.1159234537818864E-004 + 98.579999999999984 -9.1413519078606311E-004 + 98.639999999999986 -9.1687562185358647E-004 + 98.699999999999989 -9.1981239224480358E-004 + 98.759999999999991 -9.2294398758591438E-004 + 98.819999999999993 -9.2626840750510242E-004 + 98.879999999999995 -9.2978353465695705E-004 + 98.939999999999998 -9.3348664057310961E-004 + 99.000000000000000 -9.3737476173887915E-004 + 99.060000000000002 -9.4144449842735738E-004 + 99.120000000000005 -9.4569206678807522E-004 + 99.180000000000007 -9.5011335187551455E-004 + 99.239999999999981 -9.5470371236937301E-004 + 99.299999999999983 -9.5945809801675005E-004 + 99.359999999999985 -9.6437095497479432E-004 + 99.419999999999987 -9.6943650746719127E-004 + 99.479999999999990 -9.7464830519054053E-004 + 99.539999999999992 -9.7999941998548330E-004 + 99.599999999999994 -9.8548257954131574E-004 + 99.659999999999997 -9.9108983778971468E-004 + 99.719999999999999 -9.9681277263729954E-004 + 99.780000000000001 -1.0026427172775156E-003 + 99.840000000000003 -1.0085701758266534E-003 + 99.900000000000006 -1.0145852500185264E-003 + 99.960000000000008 -1.0206777634499938E-003 + 100.01999999999998 -1.0268368682288039E-003 + 100.07999999999998 -1.0330511884549469E-003 + 100.13999999999999 -1.0393090704601256E-003 + 100.19999999999999 -1.0455984806527145E-003 + 100.25999999999999 -1.0519068454669382E-003 + 100.31999999999999 -1.0582210992138334E-003 + 100.38000000000000 -1.0645278143232933E-003 + 100.44000000000000 -1.0708132686456579E-003 + 100.50000000000000 -1.0770634698472248E-003 + 100.56000000000000 -1.0832639615728544E-003 + 100.62000000000000 -1.0893999891862468E-003 + 100.68000000000001 -1.0954564635561118E-003 + 100.73999999999998 -1.1014180076904299E-003 + 100.79999999999998 -1.1072689468850060E-003 + 100.85999999999999 -1.1129936178143817E-003 + 100.91999999999999 -1.1185757750366695E-003 + 100.97999999999999 -1.1239994016289852E-003 + 101.03999999999999 -1.1292480333171778E-003 + 101.09999999999999 -1.1343052199718200E-003 + 101.16000000000000 -1.1391544436021848E-003 + 101.22000000000000 -1.1437790540329334E-003 + 101.28000000000000 -1.1481625719554911E-003 + 101.34000000000000 -1.1522883575620568E-003 + 101.40000000000001 -1.1561400703197933E-003 + 101.46000000000001 -1.1597013328437783E-003 + 101.51999999999998 -1.1629560994695115E-003 + 101.57999999999998 -1.1658882733413948E-003 + 101.63999999999999 -1.1684823027819514E-003 + 101.69999999999999 -1.1707226661900794E-003 + 101.75999999999999 -1.1725943446252933E-003 + 101.81999999999999 -1.1740825456552318E-003 + 101.88000000000000 -1.1751729456402930E-003 + 101.94000000000000 -1.1758515953440832E-003 + 102.00000000000000 -1.1761051482892116E-003 + 102.06000000000000 -1.1759206869632461E-003 + 102.12000000000000 -1.1752858633666866E-003 + 102.18000000000001 -1.1741889633828345E-003 + 102.23999999999998 -1.1726190287495916E-003 + 102.29999999999998 -1.1705654717731914E-003 + 102.35999999999999 -1.1680187674154791E-003 + 102.41999999999999 -1.1649700154481623E-003 + 102.47999999999999 -1.1614111215821330E-003 + 102.53999999999999 -1.1573348366374788E-003 + 102.59999999999999 -1.1527347968398839E-003 + 102.66000000000000 -1.1476056866564425E-003 + 102.72000000000000 -1.1419428260913138E-003 + 102.78000000000000 -1.1357427780415222E-003 + 102.84000000000000 -1.1290028827495454E-003 + 102.90000000000001 -1.1217214986662079E-003 + 102.96000000000001 -1.1138980733914575E-003 + 103.01999999999998 -1.1055329159586332E-003 + 103.07999999999998 -1.0966275801985836E-003 + 103.13999999999999 -1.0871845004859948E-003 + 103.19999999999999 -1.0772070276950623E-003 + 103.25999999999999 -1.0666997308941878E-003 + 103.31999999999999 -1.0556680923966561E-003 + 103.38000000000000 -1.0441185716027965E-003 + 103.44000000000000 -1.0320587836724236E-003 + 103.50000000000000 -1.0194972162339221E-003 + 103.56000000000000 -1.0064433934415633E-003 + 103.62000000000000 -9.9290786590767142E-004 + 103.68000000000001 -9.7890213522977337E-004 + 103.73999999999998 -9.6443866074991092E-004 + 103.79999999999998 -9.4953085116050869E-004 + 103.85999999999999 -9.3419299641427556E-004 + 103.91999999999999 -9.1844037082185626E-004 + 103.97999999999999 -9.0228892010896645E-004 + 104.03999999999999 -8.8575561564625989E-004 + 104.09999999999999 -8.6885803441172837E-004 + 104.16000000000000 -8.5161470417956426E-004 + 104.22000000000000 -8.3404462313231109E-004 + 104.28000000000000 -8.1616751288709761E-004 + 104.34000000000000 -7.9800372142159958E-004 + 104.40000000000001 -7.7957413865593005E-004 + 104.46000000000001 -7.6090018059605993E-004 + 104.51999999999998 -7.4200369187722476E-004 + 104.57999999999998 -7.2290685773592183E-004 + 104.63999999999999 -7.0363234052218688E-004 + 104.69999999999999 -6.8420294621677645E-004 + 104.75999999999999 -6.6464181841522285E-004 + 104.81999999999999 -6.4497228578828437E-004 + 104.88000000000000 -6.2521775732183433E-004 + 104.94000000000000 -6.0540180901943682E-004 + 105.00000000000000 -5.8554794933494958E-004 + 105.06000000000000 -5.6567973715736654E-004 + 105.12000000000000 -5.4582057041621993E-004 + 105.18000000000001 -5.2599376102775372E-004 + 105.23999999999998 -5.0622244341622916E-004 + 105.29999999999998 -4.8652944944389668E-004 + 105.35999999999999 -4.6693734739626134E-004 + 105.41999999999999 -4.4746841182376294E-004 + 105.47999999999999 -4.2814448511375113E-004 + 105.53999999999999 -4.0898693715540213E-004 + 105.59999999999999 -3.9001670239151737E-004 + 105.66000000000000 -3.7125428442406254E-004 + 105.72000000000000 -3.5271950620958893E-004 + 105.78000000000000 -3.3443168474132473E-004 + 105.84000000000000 -3.1640949760800225E-004 + 105.90000000000001 -2.9867100426109969E-004 + 105.96000000000001 -2.8123351262440574E-004 + 106.01999999999998 -2.6411370644994841E-004 + 106.07999999999998 -2.4732747956040618E-004 + 106.13999999999999 -2.3088997042725371E-004 + 106.19999999999999 -2.1481555406679091E-004 + 106.25999999999999 -1.9911774141030279E-004 + 106.31999999999999 -1.8380924941881159E-004 + 106.38000000000000 -1.6890189639237764E-004 + 106.44000000000000 -1.5440663553198576E-004 + 106.50000000000000 -1.4033350531915059E-004 + 106.56000000000000 -1.2669164671498911E-004 + 106.62000000000000 -1.1348924155363518E-004 + 106.68000000000001 -1.0073357438620055E-004 + 106.73999999999998 -8.8431003196864086E-005 + 106.79999999999998 -7.6586926166196770E-005 + 106.85999999999999 -6.5205867870485638E-005 + 106.91999999999999 -5.4291430311768544E-005 + 106.97999999999999 -4.3846328528886522E-005 + 107.03999999999999 -3.3872425481466808E-005 + 107.09999999999999 -2.4370730052403600E-005 + 107.16000000000000 -1.5341431548893139E-005 + 107.22000000000000 -6.7839329798807227E-006 + 107.28000000000000 1.3031476632667434E-006 + 107.34000000000000 8.9219351322503127E-006 + 107.40000000000001 1.6075282640877694E-005 + 107.46000000000001 2.2766754001924162E-005 + 107.51999999999998 2.9000599782593051E-005 + 107.57999999999998 3.4781739051178821E-005 + 107.63999999999999 4.0115730132857329E-005 + 107.69999999999999 4.5008763581056674E-005 + 107.75999999999999 4.9467633198532262E-005 + 107.81999999999999 5.3499713778551005E-005 + 107.88000000000000 5.7112933850906548E-005 + 107.94000000000000 6.0315757217089908E-005 + 108.00000000000000 6.3117140264048137E-005 + 108.06000000000000 6.5526503700419193E-005 + 108.12000000000000 6.7553706105378725E-005 + 108.18000000000001 6.9208986287009006E-005 + 108.23999999999998 7.0502943258157953E-005 + 108.29999999999998 7.1446505347116306E-005 + 108.35999999999999 7.2050860514111264E-005 + 108.41999999999999 7.2327435270561524E-005 + 108.47999999999999 7.2287860243961535E-005 + 108.53999999999999 7.1943924147923442E-005 + 108.59999999999999 7.1307538919645536E-005 + 108.66000000000000 7.0390705915836618E-005 + 108.72000000000000 6.9205486398148049E-005 + 108.78000000000000 6.7763974930517225E-005 + 108.84000000000000 6.6078258001522381E-005 + 108.90000000000001 6.4160390275433711E-005 + 108.96000000000001 6.2022371871345793E-005 + 109.01999999999998 5.9676115071804505E-005 + 109.07999999999998 5.7133408494923749E-005 + 109.13999999999999 5.4405898989761775E-005 + 109.19999999999999 5.1505054817737794E-005 + 109.25999999999999 4.8442147893639631E-005 + 109.31999999999999 4.5228211199563197E-005 + 109.38000000000000 4.1874016357963065E-005 + 109.44000000000000 3.8390044982278641E-005 + 109.50000000000000 3.4786458898812154E-005 + 109.56000000000000 3.1073078267310133E-005 + 109.62000000000000 2.7259359507890455E-005 + 109.68000000000001 2.3354366854223889E-005 + 109.73999999999998 1.9366758148505449E-005 + 109.79999999999998 1.5304766368496761E-005 + 109.85999999999999 1.1176181294274731E-005 + 109.91999999999999 6.9883353291931178E-006 + 109.97999999999999 2.7480975908037461E-006 + 110.03999999999999 -1.5381521041284134E-006 + 110.09999999999999 -5.8645318989027768E-006 + 110.16000000000000 -1.0225659045807198E-005 + 110.22000000000000 -1.4616676777557929E-005 + 110.28000000000000 -1.9033255326001287E-005 + 110.34000000000000 -2.3471618540511873E-005 + 110.40000000000001 -2.7928554688172297E-005 + 110.46000000000001 -3.2401421624895232E-005 + 110.51999999999998 -3.6888164259828521E-005 + 110.57999999999998 -4.1387336821631108E-005 + 110.63999999999999 -4.5898091479096901E-005 + 110.69999999999999 -5.0420201636190521E-005 + 110.75999999999999 -5.4954055533390084E-005 + 110.81999999999999 -5.9500666871151754E-005 + 110.88000000000000 -6.4061659834250344E-005 + 110.94000000000000 -6.8639268397632520E-005 + 111.00000000000000 -7.3236333374712237E-005 + 111.06000000000000 -7.7856283264608392E-005 + 111.12000000000000 -8.2503123331007170E-005 + 111.18000000000001 -8.7181391745674017E-005 + 111.23999999999998 -9.1896197014384518E-005 + 111.29999999999998 -9.6653143271766559E-005 + 111.35999999999999 -1.0145834583195848E-004 + 111.41999999999999 -1.0631839179496928E-004 + 111.47999999999999 -1.1124035904290733E-004 + 111.53999999999999 -1.1623174849278695E-004 + 111.59999999999999 -1.2130049639340714E-004 + 111.66000000000000 -1.2645497716104180E-004 + 111.72000000000000 -1.3170394616009740E-004 + 111.78000000000000 -1.3705655352842108E-004 + 111.84000000000000 -1.4252230013557513E-004 + 111.90000000000001 -1.4811107850812104E-004 + 111.96000000000001 -1.5383305123444938E-004 + 112.01999999999998 -1.5969871516992130E-004 + 112.07999999999998 -1.6571881999641970E-004 + 112.13999999999999 -1.7190439084019594E-004 + 112.19999999999999 -1.7826662833526086E-004 + 112.25999999999999 -1.8481692068420658E-004 + 112.31999999999999 -1.9156681227881539E-004 + 112.38000000000000 -1.9852793183528799E-004 + 112.44000000000000 -2.0571198400144030E-004 + 112.50000000000000 -2.1313069122081451E-004 + 112.56000000000000 -2.2079576194127903E-004 + 112.62000000000000 -2.2871887550503255E-004 + 112.68000000000001 -2.3691155634347568E-004 + 112.73999999999998 -2.4538525834750673E-004 + 112.79999999999998 -2.5415123575837830E-004 + 112.85999999999999 -2.6322056536907089E-004 + 112.91999999999999 -2.7260404613296092E-004 + 112.97999999999999 -2.8231222357622676E-004 + 113.03999999999999 -2.9235527540825019E-004 + 113.09999999999999 -3.0274307098821158E-004 + 113.16000000000000 -3.1348502076006935E-004 + 113.22000000000000 -3.2459012992635590E-004 + 113.28000000000000 -3.3606688078048955E-004 + 113.34000000000000 -3.4792321766727541E-004 + 113.40000000000001 -3.6016652746452126E-004 + 113.46000000000001 -3.7280346208083865E-004 + 113.51999999999998 -3.8584015834350631E-004 + 113.57999999999998 -3.9928187171395598E-004 + 113.63999999999999 -4.1313320880319993E-004 + 113.69999999999999 -4.2739795806973004E-004 + 113.75999999999999 -4.4207902883423714E-004 + 113.81999999999999 -4.5717846240526548E-004 + 113.88000000000000 -4.7269740665729232E-004 + 113.94000000000000 -4.8863610971397139E-004 + 114.00000000000000 -5.0499383787893206E-004 + 114.06000000000000 -5.2176884222747346E-004 + 114.12000000000000 -5.3895840138445147E-004 + 114.18000000000001 -5.5655874820649521E-004 + 114.23999999999998 -5.7456507564351063E-004 + 114.29999999999998 -5.9297146271645367E-004 + 114.35999999999999 -6.1177091402867174E-004 + 114.41999999999999 -6.3095527687489909E-004 + 114.47999999999999 -6.5051529464707578E-004 + 114.53999999999999 -6.7044038791749783E-004 + 114.59999999999999 -6.9071892795191322E-004 + 114.66000000000000 -7.1133804040249510E-004 + 114.72000000000000 -7.3228359390373286E-004 + 114.78000000000000 -7.5354019105011868E-004 + 114.84000000000000 -7.7509109892481278E-004 + 114.90000000000001 -7.9691855268368568E-004 + 114.96000000000001 -8.1900342992683589E-004 + 115.01999999999998 -8.4132534410433224E-004 + 115.07999999999998 -8.6386278044426441E-004 + 115.13999999999999 -8.8659295295117854E-004 + 115.19999999999999 -9.0949192004976067E-004 + 115.25999999999999 -9.3253463426981880E-004 + 115.31999999999999 -9.5569490067479038E-004 + 115.38000000000000 -9.7894571292107325E-004 + 115.44000000000000 -1.0022588227285862E-003 + 115.50000000000000 -1.0256050215401002E-003 + 115.56000000000000 -1.0489542812560069E-003 + 115.62000000000000 -1.0722756634595979E-003 + 115.68000000000001 -1.0955372827727028E-003 + 115.73999999999998 -1.1187067483394979E-003 + 115.79999999999998 -1.1417506442227489E-003 + 115.85999999999999 -1.1646349753283852E-003 + 115.91999999999999 -1.1873251105680108E-003 + 115.97999999999999 -1.2097858851988180E-003 + 116.03999999999999 -1.2319815548080813E-003 + 116.09999999999999 -1.2538759570740940E-003 + 116.16000000000000 -1.2754326599240039E-003 + 116.22000000000000 -1.2966147482863491E-003 + 116.28000000000000 -1.3173853177756503E-003 + 116.34000000000000 -1.3377071739621978E-003 + 116.40000000000001 -1.3575431771745495E-003 + 116.46000000000001 -1.3768561105254335E-003 + 116.51999999999998 -1.3956090947106800E-003 + 116.57999999999998 -1.4137653488057119E-003 + 116.63999999999999 -1.4312885380786651E-003 + 116.69999999999999 -1.4481425788468627E-003 + 116.75999999999999 -1.4642920343746046E-003 + 116.81999999999999 -1.4797020481050682E-003 + 116.88000000000000 -1.4943383306640196E-003 + 116.94000000000000 -1.5081675226559360E-003 + 117.00000000000000 -1.5211570671494813E-003 + 117.06000000000000 -1.5332752864297904E-003 + 117.12000000000000 -1.5444917113052352E-003 + 117.18000000000001 -1.5547766983847174E-003 + 117.23999999999998 -1.5641020243734502E-003 + 117.29999999999998 -1.5724406252612330E-003 + 117.35999999999999 -1.5797667900270746E-003 + 117.41999999999999 -1.5860563211788463E-003 + 117.47999999999999 -1.5912865194193727E-003 + 117.53999999999999 -1.5954361791295354E-003 + 117.59999999999999 -1.5984857504497303E-003 + 117.66000000000000 -1.6004174741440645E-003 + 117.72000000000000 -1.6012153269669429E-003 + 117.78000000000000 -1.6008651455773012E-003 + 117.84000000000000 -1.5993545668457347E-003 + 117.90000000000001 -1.5966733209998752E-003 + 117.96000000000001 -1.5928129893344361E-003 + 118.01999999999998 -1.5877672089643032E-003 + 118.07999999999998 -1.5815315778599619E-003 + 118.13999999999999 -1.5741039382352266E-003 + 118.19999999999999 -1.5654838037436533E-003 + 118.25999999999999 -1.5556730890165021E-003 + 118.31999999999999 -1.5446756327192339E-003 + 118.38000000000000 -1.5324972457198436E-003 + 118.44000000000000 -1.5191461071946495E-003 + 118.50000000000000 -1.5046322616839186E-003 + 118.56000000000000 -1.4889677153974970E-003 + 118.62000000000000 -1.4721667452147153E-003 + 118.68000000000001 -1.4542453175228664E-003 + 118.73999999999998 -1.4352217846909663E-003 + 118.79999999999998 -1.4151161207208182E-003 + 118.85999999999999 -1.3939504320507577E-003 + 118.91999999999999 -1.3717485691671937E-003 + 118.97999999999999 -1.3485362837818305E-003 + 119.03999999999999 -1.3243410609022805E-003 + 119.09999999999999 -1.2991922098099667E-003 + 119.16000000000000 -1.2731205239921537E-003 + 119.22000000000000 -1.2461585094115748E-003 + 119.28000000000000 -1.2183401273604048E-003 + 119.34000000000000 -1.1897006416586272E-003 + 119.40000000000001 -1.1602767559796021E-003 + 119.46000000000001 -1.1301063690854546E-003 + 119.51999999999998 -1.0992285605235252E-003 + 119.57999999999998 -1.0676833195064738E-003 + 119.63999999999999 -1.0355115625053349E-003 + 119.69999999999999 -1.0027552695634414E-003 + 119.75999999999999 -9.6945709472188979E-004 + 119.81999999999999 -9.3566020120632693E-004 + 119.88000000000000 -9.0140853230962154E-004 + 119.94000000000000 -8.6674635789477398E-004 + 120.00000000000000 -8.3171821259313858E-004 + 120.06000000000000 -7.9636910816931455E-004 + 120.12000000000000 -7.6074417439557257E-004 + 120.18000000000001 -7.2488852761353200E-004 + 120.23999999999998 -6.8884729795128975E-004 + 120.29999999999998 -6.5266552351014211E-004 + 120.35999999999999 -6.1638786102830620E-004 + 120.41999999999999 -5.8005873716838259E-004 + 120.47999999999999 -5.4372208893114604E-004 + 120.53999999999999 -5.0742133668427191E-004 + 120.59999999999999 -4.7119928732362794E-004 + 120.66000000000000 -4.3509799876436999E-004 + 120.72000000000000 -3.9915874992482671E-004 + 120.78000000000000 -3.6342191576374630E-004 + 120.84000000000000 -3.2792693442198302E-004 + 120.90000000000001 -2.9271220285676132E-004 + 120.95999999999998 -2.5781507457414558E-004 + 121.01999999999998 -2.2327169025989065E-004 + 121.07999999999998 -1.8911704024916876E-004 + 121.13999999999999 -1.5538483908685919E-004 + 121.19999999999999 -1.2210754063525742E-004 + 121.25999999999999 -8.9316234381743855E-005 + 121.31999999999999 -5.7040594343066986E-005 + 121.38000000000000 -2.5308896652555639E-005 + 121.44000000000000 5.8520927872595966E-006 + 121.50000000000000 3.6417091135983614E-005 + 121.56000000000000 6.6362362711474366E-005 + 121.62000000000000 9.5665740171892215E-005 + 121.68000000000001 1.2430663774413200E-004 + 121.73999999999998 1.5226610502495889E-004 + 121.79999999999998 1.7952681748381654E-004 + 121.85999999999999 2.0607301605437292E-004 + 121.91999999999999 2.3189062781302838E-004 + 121.97999999999999 2.5696710818161577E-004 + 122.03999999999999 2.8129156224903436E-004 + 122.09999999999999 3.0485460853681221E-004 + 122.16000000000000 3.2764840113918577E-004 + 122.22000000000000 3.4966665134491078E-004 + 122.28000000000000 3.7090437071761955E-004 + 122.34000000000000 3.9135812734305419E-004 + 122.40000000000001 4.1102576919623240E-004 + 122.45999999999998 4.2990649160788854E-004 + 122.51999999999998 4.4800075985602071E-004 + 122.57999999999998 4.6531030624912380E-004 + 122.63999999999999 4.8183801733799183E-004 + 122.69999999999999 4.9758797766975436E-004 + 122.75999999999999 5.1256537105444225E-004 + 122.81999999999999 5.2677652163201716E-004 + 122.88000000000000 5.4022865977845205E-004 + 122.94000000000000 5.5293011599710578E-004 + 123.00000000000000 5.6489016846879704E-004 + 123.06000000000000 5.7611897866390103E-004 + 123.12000000000000 5.8662753642839437E-004 + 123.18000000000001 5.9642761598223209E-004 + 123.23999999999998 6.0553186552887283E-004 + 123.29999999999998 6.1395345708358722E-004 + 123.35999999999999 6.2170624797451980E-004 + 123.41999999999999 6.2880471940364620E-004 + 123.47999999999999 6.3526372544902719E-004 + 123.53999999999999 6.4109865142267567E-004 + 123.59999999999999 6.4632520827682992E-004 + 123.66000000000000 6.5095945909942048E-004 + 123.72000000000000 6.5501772954142427E-004 + 123.78000000000000 6.5851653743924821E-004 + 123.84000000000000 6.6147250299249398E-004 + 123.90000000000001 6.6390254010065492E-004 + 123.95999999999998 6.6582356359034915E-004 + 124.01999999999998 6.6725236784386367E-004 + 124.07999999999998 6.6820594188960478E-004 + 124.13999999999999 6.6870127033159799E-004 + 124.19999999999999 6.6875513485824777E-004 + 124.25999999999999 6.6838430399531346E-004 + 124.31999999999999 6.6760537674936829E-004 + 124.38000000000000 6.6643490903697279E-004 + 124.44000000000000 6.6488920742017055E-004 + 124.50000000000000 6.6298428246746232E-004 + 124.56000000000000 6.6073601614934259E-004 + 124.62000000000000 6.5816003366741345E-004 + 124.68000000000001 6.5527159575291425E-004 + 124.73999999999998 6.5208579103349820E-004 + 124.79999999999998 6.4861716561360637E-004 + 124.85999999999999 6.4488011137749318E-004 + 124.91999999999999 6.4088860897471023E-004 + 124.97999999999999 6.3665626296466804E-004 + 125.03999999999999 6.3219627876171707E-004 + 125.09999999999999 6.2752155930410414E-004 + 125.16000000000000 6.2264456938400988E-004 + 125.22000000000000 6.1757742576484267E-004 + 125.28000000000000 6.1233185332898563E-004 + 125.34000000000000 6.0691923113990532E-004 + 125.40000000000001 6.0135049535024829E-004 + 125.45999999999998 5.9563622050891763E-004 + 125.51999999999998 5.8978658229729276E-004 + 125.57999999999998 5.8381138450729216E-004 + 125.63999999999999 5.7772007621433258E-004 + 125.69999999999999 5.7152160110188080E-004 + 125.75999999999999 5.6522464109204037E-004 + 125.81999999999999 5.5883745874371442E-004 + 125.88000000000000 5.5236794895398809E-004 + 125.94000000000000 5.4582357450100013E-004 + 126.00000000000000 5.3921149670477003E-004 + 126.06000000000000 5.3253848500975625E-004 + 126.12000000000000 5.2581104581665662E-004 + 126.18000000000001 5.1903531876056909E-004 + 126.23999999999998 5.1221710855811424E-004 + 126.29999999999998 5.0536209915386283E-004 + 126.35999999999999 4.9847547665437327E-004 + 126.41999999999999 4.9156235475749461E-004 + 126.47999999999999 4.8462750281178272E-004 + 126.53999999999999 4.7767558535037754E-004 + 126.59999999999999 4.7071093997100543E-004 + 126.66000000000000 4.6373778302557980E-004 + 126.72000000000000 4.5676002980542707E-004 + 126.78000000000000 4.4978149094717171E-004 + 126.84000000000000 4.4280573913851455E-004 + 126.90000000000001 4.3583613595241262E-004 + 126.95999999999998 4.2887589204482533E-004 + 127.01999999999998 4.2192804231250736E-004 + 127.07999999999998 4.1499537644986123E-004 + 127.13999999999999 4.0808053812805048E-004 + 127.19999999999999 4.0118600916400337E-004 + 127.25999999999999 3.9431413503820414E-004 + 127.31999999999999 3.8746708665253867E-004 + 127.38000000000000 3.8064700391548633E-004 + 127.44000000000000 3.7385579643297331E-004 + 127.50000000000000 3.6709537713751968E-004 + 127.56000000000000 3.6036757545529680E-004 + 127.62000000000000 3.5367411582353837E-004 + 127.68000000000001 3.4701674953413616E-004 + 127.73999999999998 3.4039713923042503E-004 + 127.79999999999998 3.3381693464040697E-004 + 127.85999999999999 3.2727774650539277E-004 + 127.91999999999999 3.2078112193059709E-004 + 127.97999999999999 3.1432860885344043E-004 + 128.03999999999999 3.0792174704515556E-004 + 128.09999999999999 3.0156199773600752E-004 + 128.16000000000000 2.9525076746829849E-004 + 128.22000000000000 2.8898942180122071E-004 + 128.28000000000000 2.8277932530173578E-004 + 128.34000000000000 2.7662174019738565E-004 + 128.40000000000001 2.7051788958199017E-004 + 128.45999999999998 2.6446899135569970E-004 + 128.51999999999998 2.5847621538063184E-004 + 128.57999999999998 2.5254071052028030E-004 + 128.63999999999999 2.4666362228439322E-004 + 128.69999999999999 2.4084608054786966E-004 + 128.75999999999999 2.3508923578500858E-004 + 128.81999999999999 2.2939423309949953E-004 + 128.88000000000000 2.2376225392073564E-004 + 128.94000000000000 2.1819449861511708E-004 + 129.00000000000000 2.1269217725765935E-004 + 129.06000000000000 2.0725650057443846E-004 + 129.12000000000000 2.0188872064758151E-004 + 129.18000000000001 1.9659007062165440E-004 + 129.23999999999998 1.9136177897769639E-004 + 129.29999999999998 1.8620508850526120E-004 + 129.35999999999999 1.8112120061936201E-004 + 129.41999999999999 1.7611130211408682E-004 + 129.47999999999999 1.7117653221926696E-004 + 129.53999999999999 1.6631800960893847E-004 + 129.59999999999999 1.6153682853595341E-004 + 129.66000000000000 1.5683405924105126E-004 + 129.72000000000000 1.5221076454674691E-004 + 129.78000000000000 1.4766796576511342E-004 + 129.84000000000000 1.4320668772155730E-004 + 129.90000000000001 1.3882798181396751E-004 + 129.95999999999998 1.3453288505293440E-004 + 130.01999999999998 1.3032247251276328E-004 + 130.07999999999998 1.2619783043920233E-004 + 130.13999999999999 1.2216007425364095E-004 + 130.19999999999999 1.1821034393497918E-004 + 130.25999999999999 1.1434979916565246E-004 + 130.31999999999999 1.1057962057359373E-004 + 130.38000000000000 1.0690100523756860E-004 + 130.44000000000000 1.0331515429207160E-004 + 130.50000000000000 9.9823273515822766E-005 + 130.56000000000000 9.6426559832300677E-005 + 130.62000000000000 9.3126205888722740E-005 + 130.68000000000001 8.9923398061811946E-005 + 130.73999999999998 8.6819299014914903E-005 + 130.79999999999998 8.3815057470118369E-005 + 130.85999999999999 8.0911807288501237E-005 + 130.91999999999999 7.8110676817325298E-005 + 130.97999999999999 7.5412777128378063E-005 + 131.03999999999999 7.2819221720023399E-005 + 131.09999999999999 7.0331108701660250E-005 + 131.16000000000000 6.7949528701354353E-005 + 131.22000000000000 6.5675586552626643E-005 + 131.28000000000000 6.3510370818194896E-005 + 131.34000000000000 6.1454961261861788E-005 + 131.40000000000001 5.9510430445751503E-005 + 131.45999999999998 5.7677838082333204E-005 + 131.51999999999998 5.5958232478608923E-005 + 131.57999999999998 5.4352617355563498E-005 + 131.63999999999999 5.2861988146288868E-005 + 131.69999999999999 5.1487291318128431E-005 + 131.75999999999999 5.0229446534271672E-005 + 131.81999999999999 4.9089335281967985E-005 + 131.88000000000000 4.8067807883877430E-005 + 131.94000000000000 4.7165678866430823E-005 + 132.00000000000000 4.6383731871736337E-005 + 132.06000000000000 4.5722727249202015E-005 + 132.12000000000000 4.5183395838768384E-005 + 132.18000000000001 4.4766459050846799E-005 + 132.23999999999998 4.4472616304698868E-005 + 132.29999999999998 4.4302547890668276E-005 + 132.35999999999999 4.4256924075078153E-005 + 132.41999999999999 4.4336385324241363E-005 + 132.47999999999999 4.4541550413487580E-005 + 132.53999999999999 4.4873004968750646E-005 + 132.59999999999999 4.5331294552441273E-005 + 132.66000000000000 4.5916911090191192E-005 + 132.72000000000000 4.6630287604295610E-005 + 132.78000000000000 4.7471799572352637E-005 + 132.84000000000000 4.8441736369288529E-005 + 132.90000000000001 4.9540321720333720E-005 + 132.95999999999998 5.0767701570137966E-005 + 133.01999999999998 5.2123930107231958E-005 + 133.07999999999998 5.3609003334119637E-005 + 133.13999999999999 5.5222844664544425E-005 + 133.19999999999999 5.6965320781695343E-005 + 133.25999999999999 5.8836243584951590E-005 + 133.31999999999999 6.0835392991771777E-005 + 133.38000000000000 6.2962504520367688E-005 + 133.44000000000000 6.5217295554297991E-005 + 133.50000000000000 6.7599466199612146E-005 + 133.56000000000000 7.0108699629177116E-005 + 133.62000000000000 7.2744672341918976E-005 + 133.68000000000001 7.5507041533655957E-005 + 133.73999999999998 7.8395439643809663E-005 + 133.79999999999998 8.1409476116533046E-005 + 133.85999999999999 8.4548733314262142E-005 + 133.91999999999999 8.7812739987919023E-005 + 133.97999999999999 9.1200982996026965E-005 + 134.03999999999999 9.4712895667407345E-005 + 134.09999999999999 9.8347833101186763E-005 + 134.16000000000000 1.0210510199441312E-004 + 134.22000000000000 1.0598393051603616E-004 + 134.28000000000000 1.0998348550830880E-004 + 134.34000000000000 1.1410286924370893E-004 + 134.40000000000001 1.1834111463718960E-004 + 134.45999999999998 1.2269718660451402E-004 + 134.51999999999998 1.2717002929347025E-004 + 134.57999999999998 1.3175850068152193E-004 + 134.63999999999999 1.3646145497753803E-004 + 134.69999999999999 1.4127767485274807E-004 + 134.75999999999999 1.4620591602111709E-004 + 134.81999999999999 1.5124489865407263E-004 + 134.88000000000000 1.5639326840258063E-004 + 134.94000000000000 1.6164963839515042E-004 + 135.00000000000000 1.6701253259701894E-004 + 135.06000000000000 1.7248042419697846E-004 + 135.12000000000000 1.7805170788439938E-004 + 135.18000000000001 1.8372467847976273E-004 + 135.23999999999998 1.8949753620579995E-004 + 135.29999999999998 1.9536838333315321E-004 + 135.35999999999999 2.0133518095277953E-004 + 135.41999999999999 2.0739581695536740E-004 + 135.47999999999999 2.1354802221707389E-004 + 135.53999999999999 2.1978944096947742E-004 + 135.59999999999999 2.2611756980311020E-004 + 135.66000000000000 2.3252979302002084E-004 + 135.72000000000000 2.3902337171256450E-004 + 135.78000000000000 2.4559542385511494E-004 + 135.84000000000000 2.5224295792358487E-004 + 135.90000000000001 2.5896280422362238E-004 + 135.95999999999998 2.6575169654334351E-004 + 136.01999999999998 2.7260621240565475E-004 + 136.07999999999998 2.7952272739578974E-004 + 136.13999999999999 2.8649747133680176E-004 + 136.19999999999999 2.9352645646742696E-004 + 136.25999999999999 3.0060554606133923E-004 + 136.31999999999999 3.0773031858912940E-004 + 136.38000000000000 3.1489620005783445E-004 + 136.44000000000000 3.2209837789896363E-004 + 136.50000000000000 3.2933178876224842E-004 + 136.56000000000000 3.3659114511422339E-004 + 136.62000000000000 3.4387094355758176E-004 + 136.68000000000001 3.5116545488036614E-004 + 136.73999999999998 3.5846872316064012E-004 + 136.79999999999998 3.6577456543833138E-004 + 136.85999999999999 3.7307662807487864E-004 + 136.91999999999999 3.8036836859369145E-004 + 136.97999999999999 3.8764294910045984E-004 + 137.03999999999999 3.9489347003779721E-004 + 137.09999999999999 4.0211273900881106E-004 + 137.16000000000000 4.0929350244491811E-004 + 137.22000000000000 4.1642824013364050E-004 + 137.28000000000000 4.2350923104220888E-004 + 137.34000000000000 4.3052860985439139E-004 + 137.40000000000001 4.3747837227040953E-004 + 137.45999999999998 4.4435027069334549E-004 + 137.51999999999998 4.5113584310782192E-004 + 137.57999999999998 4.5782651376346796E-004 + 137.63999999999999 4.6441348591638178E-004 + 137.69999999999999 4.7088782570750169E-004 + 137.75999999999999 4.7724042742840596E-004 + 137.81999999999999 4.8346205162350814E-004 + 137.88000000000000 4.8954335491683426E-004 + 137.94000000000000 4.9547489529625801E-004 + 138.00000000000000 5.0124712421497090E-004 + 138.06000000000000 5.0685046704455547E-004 + 138.12000000000000 5.1227534827242573E-004 + 138.18000000000001 5.1751212863191396E-004 + 138.23999999999998 5.2255125643562393E-004 + 138.29999999999998 5.2738318401824853E-004 + 138.35999999999999 5.3199846362308372E-004 + 138.41999999999999 5.3638768438998711E-004 + 138.47999999999999 5.4054155354147846E-004 + 138.53999999999999 5.4445101605921640E-004 + 138.59999999999999 5.4810698485122219E-004 + 138.66000000000000 5.5150060819170025E-004 + 138.72000000000000 5.5462332430203549E-004 + 138.78000000000000 5.5746664211199374E-004 + 138.84000000000000 5.6002235443539474E-004 + 138.90000000000001 5.6228253210396841E-004 + 138.95999999999998 5.6423946860032121E-004 + 139.01999999999998 5.6588581028963272E-004 + 139.07999999999998 5.6721443701585657E-004 + 139.13999999999999 5.6821868055925381E-004 + 139.19999999999999 5.6889223459729427E-004 + 139.25999999999999 5.6922918985096013E-004 + 139.31999999999999 5.6922397323656306E-004 + 139.38000000000000 5.6887159131792560E-004 + 139.44000000000000 5.6816743164893964E-004 + 139.50000000000000 5.6710736705979355E-004 + 139.56000000000000 5.6568777207907173E-004 + 139.62000000000000 5.6390550611939180E-004 + 139.68000000000001 5.6175803614281399E-004 + 139.73999999999998 5.5924325418808113E-004 + 139.79999999999998 5.5635966076189147E-004 + 139.85999999999999 5.5310629526922350E-004 + 139.91999999999999 5.4948270177873767E-004 + 139.97999999999999 5.4548904889054539E-004 + 140.03999999999999 5.4112615649423918E-004 + 140.09999999999999 5.3639530620758680E-004 + 140.16000000000000 5.3129847479908756E-004 + 140.22000000000000 5.2583828470716511E-004 + 140.28000000000000 5.2001797783421497E-004 + 140.34000000000000 5.1384132918127600E-004 + 140.40000000000001 5.0731289038995751E-004 + 140.45999999999998 5.0043774344893681E-004 + 140.51999999999998 4.9322166643710500E-004 + 140.57999999999998 4.8567112186364794E-004 + 140.63999999999999 4.7779312355748793E-004 + 140.69999999999999 4.6959528780335369E-004 + 140.75999999999999 4.6108582144667606E-004 + 140.81999999999999 4.5227343192872662E-004 + 140.88000000000000 4.4316746263312772E-004 + 140.94000000000000 4.3377769507290439E-004 + 141.00000000000000 4.2411440062511317E-004 + 141.06000000000000 4.1418830425576979E-004 + 141.12000000000000 4.0401059996196921E-004 + 141.18000000000001 3.9359281744718737E-004 + 141.23999999999998 3.8294692017550410E-004 + 141.29999999999998 3.7208519849030619E-004 + 141.35999999999999 3.6102030128102913E-004 + 141.41999999999999 3.4976521789490924E-004 + 141.47999999999999 3.3833322723103348E-004 + 141.53999999999999 3.2673788881738353E-004 + 141.59999999999999 3.1499299736507431E-004 + 141.66000000000000 3.0311266925950060E-004 + 141.72000000000000 2.9111114539329683E-004 + 141.78000000000000 2.7900292520843594E-004 + 141.84000000000000 2.6680262476538175E-004 + 141.90000000000001 2.5452497498344338E-004 + 141.95999999999998 2.4218482765419905E-004 + 142.01999999999998 2.2979706565528731E-004 + 142.07999999999998 2.1737656865827886E-004 + 142.13999999999999 2.0493817641899730E-004 + 142.19999999999999 1.9249669883212542E-004 + 142.25999999999999 1.8006679027276321E-004 + 142.31999999999999 1.6766294752245634E-004 + 142.38000000000000 1.5529951615798082E-004 + 142.44000000000000 1.4299060515609701E-004 + 142.50000000000000 1.3075008477373912E-004 + 142.56000000000000 1.1859153966533255E-004 + 142.62000000000000 1.0652827552720830E-004 + 142.68000000000001 9.4573257401936765E-005 + 142.73999999999998 8.2739130258738713E-005 + 142.79999999999998 7.1038169557837748E-005 + 142.85999999999999 5.9482270485166116E-005 + 142.91999999999999 4.8082924888895131E-005 + 142.97999999999999 3.6851213814141621E-005 + 143.03999999999999 2.5797798743462038E-005 + 143.09999999999999 1.4932872533749554E-005 + 143.16000000000000 4.2661662991088901E-006 + 143.22000000000000 -6.1930870867508066E-006 + 143.28000000000000 -1.6436146868270482E-005 + 143.34000000000000 -2.6454799722843836E-005 + 143.40000000000001 -3.6241357264269615E-005 + 143.45999999999998 -4.5788678259876868E-005 + 143.51999999999998 -5.5090163386516491E-005 + 143.57999999999998 -6.4139767544819901E-005 + 143.63999999999999 -7.2932022424079709E-005 + 143.69999999999999 -8.1461985949684375E-005 + 143.75999999999999 -8.9725295534601347E-005 + 143.81999999999999 -9.7718130534814459E-005 + 143.88000000000000 -1.0543722839553366E-004 + 143.94000000000000 -1.1287984602856306E-004 + 144.00000000000000 -1.2004379352407464E-004 + 144.06000000000000 -1.2692740649471767E-004 + 144.12000000000000 -1.3352953943283267E-004 + 144.18000000000001 -1.3984954965507907E-004 + 144.23999999999998 -1.4588732021317990E-004 + 144.29999999999998 -1.5164323581340049E-004 + 144.35999999999999 -1.5711813615528782E-004 + 144.41999999999999 -1.6231337288290693E-004 + 144.47999999999999 -1.6723076799343483E-004 + 144.53999999999999 -1.7187259244508501E-004 + 144.59999999999999 -1.7624154860048532E-004 + 144.66000000000000 -1.8034078287513557E-004 + 144.72000000000000 -1.8417384192012887E-004 + 144.78000000000000 -1.8774465212697183E-004 + 144.84000000000000 -1.9105750024997779E-004 + 144.90000000000001 -1.9411700938245613E-004 + 144.95999999999998 -1.9692814105989694E-004 + 145.01999999999998 -1.9949611179892116E-004 + 145.07999999999998 -2.0182641378612163E-004 + 145.13999999999999 -2.0392478323664410E-004 + 145.19999999999999 -2.0579716890742621E-004 + 145.25999999999999 -2.0744972678804691E-004 + 145.31999999999999 -2.0888880425771491E-004 + 145.38000000000000 -2.1012089959256347E-004 + 145.44000000000000 -2.1115266812092587E-004 + 145.50000000000000 -2.1199088065708448E-004 + 145.56000000000000 -2.1264247274199253E-004 + 145.62000000000000 -2.1311445550841254E-004 + 145.68000000000001 -2.1341395377542422E-004 + 145.73999999999998 -2.1354815874478629E-004 + 145.79999999999998 -2.1352433502192132E-004 + 145.85999999999999 -2.1334978243535242E-004 + 145.91999999999999 -2.1303182740281643E-004 + 145.97999999999999 -2.1257782782148197E-004 + 146.03999999999999 -2.1199509720713357E-004 + 146.09999999999999 -2.1129094175124100E-004 + 146.16000000000000 -2.1047257772301186E-004 + 146.22000000000000 -2.0954718540739474E-004 + 146.28000000000000 -2.0852182212539508E-004 + 146.34000000000000 -2.0740345669938634E-004 + 146.40000000000001 -2.0619891068816907E-004 + 146.45999999999998 -2.0491489679817193E-004 + 146.51999999999998 -2.0355798287383770E-004 + 146.57999999999998 -2.0213456113469020E-004 + 146.63999999999999 -2.0065090287985871E-004 + 146.69999999999999 -1.9911308940221250E-004 + 146.75999999999999 -1.9752709007475749E-004 + 146.81999999999999 -1.9589867722348130E-004 + 146.88000000000000 -1.9423347499664969E-004 + 146.94000000000000 -1.9253695671331308E-004 + 147.00000000000000 -1.9081441372770174E-004 + 147.06000000000000 -1.8907095351473668E-004 + 147.12000000000000 -1.8731151950381430E-004 + 147.18000000000001 -1.8554082994597212E-004 + 147.23999999999998 -1.8376343989834316E-004 + 147.29999999999998 -1.8198367037345736E-004 + 147.35999999999999 -1.8020562426287659E-004 + 147.41999999999999 -1.7843318334934100E-004 + 147.47999999999999 -1.7666998101959470E-004 + 147.53999999999999 -1.7491942049162863E-004 + 147.59999999999999 -1.7318468363234133E-004 + 147.66000000000000 -1.7146868464387353E-004 + 147.72000000000000 -1.6977412842811537E-004 + 147.78000000000000 -1.6810349054428871E-004 + 147.84000000000000 -1.6645904277955487E-004 + 147.90000000000001 -1.6484283204932883E-004 + 147.95999999999998 -1.6325673508878568E-004 + 148.01999999999998 -1.6170243875919752E-004 + 148.07999999999998 -1.6018148550896554E-004 + 148.13999999999999 -1.5869524127502048E-004 + 148.19999999999999 -1.5724491339381156E-004 + 148.25999999999999 -1.5583158488414436E-004 + 148.31999999999999 -1.5445620063935688E-004 + 148.38000000000000 -1.5311954397172951E-004 + 148.44000000000000 -1.5182227598389985E-004 + 148.50000000000000 -1.5056493807048650E-004 + 148.56000000000000 -1.4934789822973249E-004 + 148.62000000000000 -1.4817139606272629E-004 + 148.68000000000001 -1.4703553394117684E-004 + 148.73999999999998 -1.4594025531321767E-004 + 148.79999999999998 -1.4488538140192901E-004 + 148.85999999999999 -1.4387058798169750E-004 + 148.91999999999999 -1.4289540811416711E-004 + 148.97999999999999 -1.4195927291873510E-004 + 149.03999999999999 -1.4106146826347205E-004 + 149.09999999999999 -1.4020121823380007E-004 + 149.16000000000000 -1.3937764856639329E-004 + 149.22000000000000 -1.3858978692556421E-004 + 149.28000000000000 -1.3783663226084450E-004 + 149.34000000000000 -1.3711709398456316E-004 + 149.40000000000001 -1.3643007003881640E-004 + 149.45999999999998 -1.3577443232978416E-004 + 149.51999999999998 -1.3514902360950768E-004 + 149.57999999999998 -1.3455265770760119E-004 + 149.63999999999999 -1.3398416185958289E-004 + 149.69999999999999 -1.3344235001212305E-004 + 149.75999999999999 -1.3292602730954650E-004 + 149.81999999999999 -1.3243401882222770E-004 + 149.88000000000000 -1.3196512068273074E-004 + 149.94000000000000 -1.3151814385759306E-004 + 150.00000000000000 -1.3109192065981781E-004 + 150.06000000000000 -1.3068527558019819E-004 + 150.12000000000000 -1.3029706568266455E-004 + 150.18000000000001 -1.2992612938825482E-004 + 150.23999999999998 -1.2957134184847676E-004 + 150.29999999999998 -1.2923157466407706E-004 + 150.35999999999999 -1.2890573631367560E-004 + 150.41999999999999 -1.2859273992606464E-004 + 150.47999999999999 -1.2829154279635378E-004 + 150.53999999999999 -1.2800109512330521E-004 + 150.59999999999999 -1.2772037506002566E-004 + 150.66000000000000 -1.2744839084012353E-004 + 150.72000000000000 -1.2718417364378535E-004 + 150.78000000000000 -1.2692676459849891E-004 + 150.84000000000000 -1.2667523341082265E-004 + 150.90000000000001 -1.2642863654179501E-004 + 150.95999999999998 -1.2618607386313802E-004 + 151.01999999999998 -1.2594668707008037E-004 + 151.07999999999998 -1.2570960355201064E-004 + 151.13999999999999 -1.2547402482670117E-004 + 151.19999999999999 -1.2523916419696497E-004 + 151.25999999999999 -1.2500427638020576E-004 + 151.31999999999999 -1.2476867642055261E-004 + 151.38000000000000 -1.2453173411798520E-004 + 151.44000000000000 -1.2429287357064824E-004 + 151.50000000000000 -1.2405156899526035E-004 + 151.56000000000000 -1.2380735370611044E-004 + 151.62000000000000 -1.2355983901389330E-004 + 151.68000000000001 -1.2330865936242859E-004 + 151.73999999999998 -1.2305352460657750E-004 + 151.79999999999998 -1.2279415545102688E-004 + 151.85999999999999 -1.2253033136709406E-004 + 151.91999999999999 -1.2226181200202275E-004 + 151.97999999999999 -1.2198839834835350E-004 + 152.03999999999999 -1.2170987090413024E-004 + 152.09999999999999 -1.2142601242091591E-004 + 152.16000000000000 -1.2113658446306653E-004 + 152.22000000000000 -1.2084134160273434E-004 + 152.28000000000000 -1.2054000041971410E-004 + 152.34000000000000 -1.2023228691782740E-004 + 152.40000000000001 -1.1991790755425410E-004 + 152.45999999999998 -1.1959656617291966E-004 + 152.51999999999998 -1.1926798311519997E-004 + 152.57999999999998 -1.1893185971905384E-004 + 152.63999999999999 -1.1858797008102958E-004 + 152.69999999999999 -1.1823608357579602E-004 + 152.75999999999999 -1.1787601883334101E-004 + 152.81999999999999 -1.1750764716432895E-004 + 152.88000000000000 -1.1713088065562707E-004 + 152.94000000000000 -1.1674567129058717E-004 + 153.00000000000000 -1.1635201554815406E-004 + 153.06000000000000 -1.1594994719535780E-004 + 153.12000000000000 -1.1553952881361587E-004 + 153.17999999999998 -1.1512083496097663E-004 + 153.23999999999998 -1.1469395247549668E-004 + 153.29999999999998 -1.1425897268340962E-004 + 153.35999999999999 -1.1381597155802856E-004 + 153.41999999999999 -1.1336502025805584E-004 + 153.47999999999999 -1.1290615036318592E-004 + 153.53999999999999 -1.1243938837821218E-004 + 153.59999999999999 -1.1196472919100187E-004 + 153.66000000000000 -1.1148214838175666E-004 + 153.72000000000000 -1.1099161296190584E-004 + 153.78000000000000 -1.1049305642142420E-004 + 153.84000000000000 -1.0998642776303077E-004 + 153.90000000000001 -1.0947165898792720E-004 + 153.95999999999998 -1.0894869727038915E-004 + 154.01999999999998 -1.0841749232250598E-004 + 154.07999999999998 -1.0787801771808980E-004 + 154.13999999999999 -1.0733024916973499E-004 + 154.19999999999999 -1.0677418968564668E-004 + 154.25999999999999 -1.0620986093295008E-004 + 154.31999999999999 -1.0563728370795187E-004 + 154.38000000000000 -1.0505649840828252E-004 + 154.44000000000000 -1.0446755652245123E-004 + 154.50000000000000 -1.0387050966660012E-004 + 154.56000000000000 -1.0326541853358448E-004 + 154.62000000000000 -1.0265233732778243E-004 + 154.67999999999998 -1.0203132878392492E-004 + 154.73999999999998 -1.0140244973312573E-004 + 154.79999999999998 -1.0076576867573988E-004 + 154.85999999999999 -1.0012135179344317E-004 + 154.91999999999999 -9.9469278584058416E-005 + 154.97999999999999 -9.8809637820106662E-005 + 155.03999999999999 -9.8142552247218194E-005 + 155.09999999999999 -9.7468154480205018E-005 + 155.16000000000000 -9.6786597057923641E-005 + 155.22000000000000 -9.6098065605526790E-005 + 155.28000000000000 -9.5402768941035214E-005 + 155.34000000000000 -9.4700941476674613E-005 + 155.40000000000001 -9.3992836600071558E-005 + 155.45999999999998 -9.3278742823753555E-005 + 155.51999999999998 -9.2558958134304092E-005 + 155.57999999999998 -9.1833792360580631E-005 + 155.63999999999999 -9.1103573512259925E-005 + 155.69999999999999 -9.0368632824960700E-005 + 155.75999999999999 -8.9629322052397993E-005 + 155.81999999999999 -8.8886001052193112E-005 + 155.88000000000000 -8.8139037239393688E-005 + 155.94000000000000 -8.7388811104254139E-005 + 156.00000000000000 -8.6635736530082163E-005 + 156.06000000000000 -8.5880228443142005E-005 + 156.12000000000000 -8.5122733010696387E-005 + 156.17999999999998 -8.4363747125761897E-005 + 156.23999999999998 -8.3603775661293217E-005 + 156.29999999999998 -8.2843374574772166E-005 + 156.35999999999999 -8.2083131394692605E-005 + 156.41999999999999 -8.1323672752969971E-005 + 156.47999999999999 -8.0565654240286389E-005 + 156.53999999999999 -7.9809770080188481E-005 + 156.59999999999999 -7.9056729115436277E-005 + 156.66000000000000 -7.8307265458890473E-005 + 156.72000000000000 -7.7562113289451022E-005 + 156.78000000000000 -7.6822018507780910E-005 + 156.84000000000000 -7.6087717245149183E-005 + 156.90000000000001 -7.5359949642615353E-005 + 156.95999999999998 -7.4639424616631042E-005 + 157.01999999999998 -7.3926831816248175E-005 + 157.07999999999998 -7.3222857121566713E-005 + 157.13999999999999 -7.2528147491582730E-005 + 157.19999999999999 -7.1843332198075251E-005 + 157.25999999999999 -7.1169016243874880E-005 + 157.31999999999999 -7.0505778469851166E-005 + 157.38000000000000 -6.9854183799958095E-005 + 157.44000000000000 -6.9214773853306418E-005 + 157.50000000000000 -6.8588068263005655E-005 + 157.56000000000000 -6.7974583396915300E-005 + 157.62000000000000 -6.7374807393732827E-005 + 157.67999999999998 -6.6789191443498072E-005 + 157.73999999999998 -6.6218180664764380E-005 + 157.79999999999998 -6.5662194945712414E-005 + 157.85999999999999 -6.5121617524077950E-005 + 157.91999999999999 -6.4596815117338077E-005 + 157.97999999999999 -6.4088108777294450E-005 + 158.03999999999999 -6.3595794416703959E-005 + 158.09999999999999 -6.3120124533512658E-005 + 158.16000000000000 -6.2661344325124743E-005 + 158.22000000000000 -6.2219643641086211E-005 + 158.28000000000000 -6.1795197523749202E-005 + 158.34000000000000 -6.1388148551167694E-005 + 158.40000000000001 -6.0998623508284399E-005 + 158.45999999999998 -6.0626726032246237E-005 + 158.51999999999998 -6.0272538969023276E-005 + 158.57999999999998 -5.9936124045875375E-005 + 158.63999999999999 -5.9617531496034909E-005 + 158.69999999999999 -5.9316783086078532E-005 + 158.75999999999999 -5.9033877068893670E-005 + 158.81999999999999 -5.8768780902263450E-005 + 158.88000000000000 -5.8521423597855500E-005 + 158.94000000000000 -5.8291699367693709E-005 + 159.00000000000000 -5.8079452812991934E-005 + 159.06000000000000 -5.7884485309059022E-005 + 159.12000000000000 -5.7706538460755780E-005 + 159.17999999999998 -5.7545304210697911E-005 + 159.23999999999998 -5.7400424251418819E-005 + 159.29999999999998 -5.7271487447671055E-005 + 159.35999999999999 -5.7158041646333006E-005 + 159.41999999999999 -5.7059600713282594E-005 + 159.47999999999999 -5.6975652576190320E-005 + 159.53999999999999 -5.6905669402134280E-005 + 159.59999999999999 -5.6849117078730890E-005 + 159.66000000000000 -5.6805465876804462E-005 + 159.72000000000000 -5.6774200721625860E-005 + 159.78000000000000 -5.6754823727138724E-005 + 159.84000000000000 -5.6746860346399390E-005 + 159.90000000000001 -5.6749862527863817E-005 + 159.95999999999998 -5.6763406472489387E-005 + 160.01999999999998 -5.6787089385632729E-005 + 160.07999999999998 -5.6820518824171736E-005 + 160.13999999999999 -5.6863312118857182E-005 + 160.19999999999999 -5.6915079507585269E-005 + 160.25999999999999 -5.6975427643075075E-005 + 160.31999999999999 -5.7043935290601975E-005 + 160.38000000000000 -5.7120159849435462E-005 + 160.44000000000000 -5.7203628202196359E-005 + 160.50000000000000 -5.7293832284533835E-005 + 160.56000000000000 -5.7390229076015052E-005 + 160.62000000000000 -5.7492248488601106E-005 + 160.67999999999998 -5.7599297384291572E-005 + 160.73999999999998 -5.7710759608007593E-005 + 160.79999999999998 -5.7826013282362398E-005 + 160.85999999999999 -5.7944445873343813E-005 + 160.91999999999999 -5.8065446577192693E-005 + 160.97999999999999 -5.8188441587412123E-005 + 161.03999999999999 -5.8312878393174556E-005 + 161.09999999999999 -5.8438249944856863E-005 + 161.16000000000000 -5.8564094548157908E-005 + 161.22000000000000 -5.8690001679355387E-005 + 161.28000000000000 -5.8815604257519901E-005 + 161.34000000000000 -5.8940584681317496E-005 + 161.40000000000001 -5.9064681569527402E-005 + 161.45999999999998 -5.9187662054124503E-005 + 161.51999999999998 -5.9309335556699964E-005 + 161.57999999999998 -5.9429553004654997E-005 + 161.63999999999999 -5.9548184479325655E-005 + 161.69999999999999 -5.9665130066783812E-005 + 161.75999999999999 -5.9780311118307956E-005 + 161.81999999999999 -5.9893667907833205E-005 + 161.88000000000000 -6.0005161836319545E-005 + 161.94000000000000 -6.0114785937503704E-005 + 162.00000000000000 -6.0222536955623798E-005 + 162.06000000000000 -6.0328445880162872E-005 + 162.12000000000000 -6.0432577621528875E-005 + 162.17999999999998 -6.0535017418546778E-005 + 162.23999999999998 -6.0635886297969387E-005 + 162.29999999999998 -6.0735331144487889E-005 + 162.35999999999999 -6.0833539259053636E-005 + 162.41999999999999 -6.0930724845448984E-005 + 162.47999999999999 -6.1027138722776088E-005 + 162.53999999999999 -6.1123052660820085E-005 + 162.59999999999999 -6.1218779461421483E-005 + 162.66000000000000 -6.1314646863249708E-005 + 162.72000000000000 -6.1411019907205494E-005 + 162.78000000000000 -6.1508270793671376E-005 + 162.84000000000000 -6.1606795744984167E-005 + 162.90000000000001 -6.1707007625703343E-005 + 162.95999999999998 -6.1809344564530951E-005 + 163.01999999999998 -6.1914256534999302E-005 + 163.07999999999998 -6.2022196831393452E-005 + 163.13999999999999 -6.2133640066919845E-005 + 163.19999999999999 -6.2249061937227719E-005 + 163.25999999999999 -6.2368957164673811E-005 + 163.31999999999999 -6.2493802176721397E-005 + 163.38000000000000 -6.2624072342711711E-005 + 163.44000000000000 -6.2760232353644506E-005 + 163.50000000000000 -6.2902726304718166E-005 + 163.56000000000000 -6.3051977114473131E-005 + 163.62000000000000 -6.3208367039855359E-005 + 163.67999999999998 -6.3372232184576133E-005 + 163.73999999999998 -6.3543855390195387E-005 + 163.79999999999998 -6.3723484735661224E-005 + 163.85999999999999 -6.3911296344835043E-005 + 163.91999999999999 -6.4107403800574007E-005 + 163.97999999999999 -6.4311869796088861E-005 + 164.03999999999999 -6.4524690289746852E-005 + 164.09999999999999 -6.4745812567213498E-005 + 164.16000000000000 -6.4975139508646965E-005 + 164.22000000000000 -6.5212513655158065E-005 + 164.28000000000000 -6.5457756475921394E-005 + 164.34000000000000 -6.5710649129343586E-005 + 164.40000000000001 -6.5970942891182958E-005 + 164.45999999999998 -6.6238367391018241E-005 + 164.51999999999998 -6.6512630517488402E-005 + 164.57999999999998 -6.6793418641314468E-005 + 164.63999999999999 -6.7080394687184250E-005 + 164.69999999999999 -6.7373195739194608E-005 + 164.75999999999999 -6.7671417455482762E-005 + 164.81999999999999 -6.7974630503576049E-005 + 164.88000000000000 -6.8282358770910544E-005 + 164.94000000000000 -6.8594073905820267E-005 + 165.00000000000000 -6.8909207533719566E-005 + 165.06000000000000 -6.9227128570353941E-005 + 165.12000000000000 -6.9547153216121380E-005 + 165.17999999999998 -6.9868539394494581E-005 + 165.23999999999998 -7.0190502982625064E-005 + 165.29999999999998 -7.0512211498332728E-005 + 165.35999999999999 -7.0832777696642194E-005 + 165.41999999999999 -7.1151303995339478E-005 + 165.47999999999999 -7.1466848066062494E-005 + 165.53999999999999 -7.1778474055197457E-005 + 165.59999999999999 -7.2085215404138752E-005 + 165.66000000000000 -7.2386130674568112E-005 + 165.72000000000000 -7.2680253596188457E-005 + 165.78000000000000 -7.2966648172952884E-005 + 165.84000000000000 -7.3244373253925413E-005 + 165.90000000000001 -7.3512510134032358E-005 + 165.95999999999998 -7.3770129421105201E-005 + 166.01999999999998 -7.4016328375574187E-005 + 166.07999999999998 -7.4250180699801858E-005 + 166.13999999999999 -7.4470779838354398E-005 + 166.19999999999999 -7.4677199402348478E-005 + 166.25999999999999 -7.4868527239623097E-005 + 166.31999999999999 -7.5043831977523895E-005 + 166.38000000000000 -7.5202187224947991E-005 + 166.44000000000000 -7.5342676529137695E-005 + 166.50000000000000 -7.5464383487781279E-005 + 166.56000000000000 -7.5566422495967561E-005 + 166.62000000000000 -7.5647919542245925E-005 + 166.67999999999998 -7.5708034039653367E-005 + 166.73999999999998 -7.5745976022819627E-005 + 166.79999999999998 -7.5761011457081115E-005 + 166.85999999999999 -7.5752441267868873E-005 + 166.91999999999999 -7.5719637445009142E-005 + 166.97999999999999 -7.5662042770453244E-005 + 167.03999999999999 -7.5579153094762605E-005 + 167.09999999999999 -7.5470530525708197E-005 + 167.16000000000000 -7.5335796287495749E-005 + 167.22000000000000 -7.5174635543536698E-005 + 167.28000000000000 -7.4986776103437095E-005 + 167.34000000000000 -7.4772003420392829E-005 + 167.40000000000001 -7.4530132101156517E-005 + 167.45999999999998 -7.4261037046663913E-005 + 167.51999999999998 -7.3964619743595945E-005 + 167.57999999999998 -7.3640836476850858E-005 + 167.63999999999999 -7.3289672630032492E-005 + 167.69999999999999 -7.2911165680740415E-005 + 167.75999999999999 -7.2505405752741964E-005 + 167.81999999999999 -7.2072546001407075E-005 + 167.88000000000000 -7.1612801537209196E-005 + 167.94000000000000 -7.1126444753669179E-005 + 168.00000000000000 -7.0613856669642853E-005 + 168.06000000000000 -7.0075473207334248E-005 + 168.12000000000000 -6.9511829044602275E-005 + 168.17999999999998 -6.8923548650709910E-005 + 168.23999999999998 -6.8311334862353047E-005 + 168.29999999999998 -6.7675990424332573E-005 + 168.35999999999999 -6.7018388963521982E-005 + 168.41999999999999 -6.6339491014485503E-005 + 168.47999999999999 -6.5640330150828620E-005 + 168.53999999999999 -6.4921999738495260E-005 + 168.59999999999999 -6.4185669503202358E-005 + 168.66000000000000 -6.3432554029665798E-005 + 168.72000000000000 -6.2663916194009405E-005 + 168.78000000000000 -6.1881065913740895E-005 + 168.84000000000000 -6.1085359057358948E-005 + 168.90000000000001 -6.0278175809430546E-005 + 168.95999999999998 -5.9460936840899877E-005 + 169.01999999999998 -5.8635095642767960E-005 + 169.07999999999998 -5.7802128650361699E-005 + 169.13999999999999 -5.6963534607148653E-005 + 169.19999999999999 -5.6120839040480185E-005 + 169.25999999999999 -5.5275574066714672E-005 + 169.31999999999999 -5.4429303905483180E-005 + 169.38000000000000 -5.3583585771979735E-005 + 169.44000000000000 -5.2739987334052614E-005 + 169.50000000000000 -5.1900072221586026E-005 + 169.56000000000000 -5.1065401954520544E-005 + 169.62000000000000 -5.0237526298711460E-005 + 169.67999999999998 -4.9417976660284823E-005 + 169.73999999999998 -4.8608264853361376E-005 + 169.79999999999998 -4.7809884435845628E-005 + 169.85999999999999 -4.7024295858140879E-005 + 169.91999999999999 -4.6252943802824526E-005 + 169.97999999999999 -4.5497239105253448E-005 + 170.03999999999999 -4.4758569688464175E-005 + 170.09999999999999 -4.4038286104649426E-005 + 170.16000000000000 -4.3337713893716740E-005 + 170.22000000000000 -4.2658144758007607E-005 + 170.28000000000000 -4.2000826825488763E-005 + 170.34000000000000 -4.1366970967140881E-005 + 170.40000000000001 -4.0757732742923096E-005 + 170.45999999999998 -4.0174223423298985E-005 + 170.51999999999998 -3.9617485491109131E-005 + 170.57999999999998 -3.9088487361569628E-005 + 170.63999999999999 -3.8588124578227864E-005 + 170.69999999999999 -3.8117197078280156E-005 + 170.75999999999999 -3.7676421101758948E-005 + 170.81999999999999 -3.7266416413908887E-005 + 170.88000000000000 -3.6887697566800798E-005 + 170.94000000000000 -3.6540686966665437E-005 + 171.00000000000000 -3.6225704972191490E-005 + 171.06000000000000 -3.5942985167003818E-005 + 171.12000000000000 -3.5692681879890059E-005 + 171.17999999999998 -3.5474867143603782E-005 + 171.23999999999998 -3.5289559584899909E-005 + 171.29999999999998 -3.5136715035513367E-005 + 171.35999999999999 -3.5016255472210815E-005 + 171.41999999999999 -3.4928056865424141E-005 + 171.47999999999999 -3.4871975638269032E-005 + 171.53999999999999 -3.4847843946304002E-005 + 171.59999999999999 -3.4855469463809709E-005 + 171.66000000000000 -3.4894644324738002E-005 + 171.72000000000000 -3.4965131526877993E-005 + 171.78000000000000 -3.5066667815551325E-005 + 171.84000000000000 -3.5198953998025689E-005 + 171.90000000000001 -3.5361649990381487E-005 + 171.95999999999998 -3.5554367757348959E-005 + 172.01999999999998 -3.5776663250181818E-005 + 172.07999999999998 -3.6028035170501197E-005 + 172.13999999999999 -3.6307924700743484E-005 + 172.19999999999999 -3.6615702783736778E-005 + 172.25999999999999 -3.6950690121863455E-005 + 172.31999999999999 -3.7312154635811457E-005 + 172.38000000000000 -3.7699319181162172E-005 + 172.44000000000000 -3.8111373182882750E-005 + 172.50000000000000 -3.8547483846979662E-005 + 172.56000000000000 -3.9006803046691304E-005 + 172.62000000000000 -3.9488491648178378E-005 + 172.67999999999998 -3.9991711991999623E-005 + 172.73999999999998 -4.0515659531904080E-005 + 172.79999999999998 -4.1059545767418510E-005 + 172.85999999999999 -4.1622622825987374E-005 + 172.91999999999999 -4.2204171529802140E-005 + 172.97999999999999 -4.2803513551199819E-005 + 173.03999999999999 -4.3419999196125436E-005 + 173.09999999999999 -4.4053014160213393E-005 + 173.16000000000000 -4.4701966059938769E-005 + 173.22000000000000 -4.5366288835611393E-005 + 173.28000000000000 -4.6045436818825181E-005 + 173.34000000000000 -4.6738871149554551E-005 + 173.40000000000001 -4.7446077348288655E-005 + 173.45999999999998 -4.8166549245287542E-005 + 173.51999999999998 -4.8899797395123137E-005 + 173.57999999999998 -4.9645351391778789E-005 + 173.63999999999999 -5.0402771756170929E-005 + 173.69999999999999 -5.1171637033664069E-005 + 173.75999999999999 -5.1951569315548363E-005 + 173.81999999999999 -5.2742232922014430E-005 + 173.88000000000000 -5.3543336088124547E-005 + 173.94000000000000 -5.4354648148671298E-005 + 174.00000000000000 -5.5175990381046880E-005 + 174.06000000000000 -5.6007252889563275E-005 + 174.12000000000000 -5.6848384171623301E-005 + 174.17999999999998 -5.7699395693760030E-005 + 174.23999999999998 -5.8560368916175815E-005 + 174.29999999999998 -5.9431441523954761E-005 + 174.35999999999999 -6.0312814945014115E-005 + 174.41999999999999 -6.1204744457174663E-005 + 174.47999999999999 -6.2107549398460692E-005 + 174.53999999999999 -6.3021599978504154E-005 + 174.59999999999999 -6.3947320663800922E-005 + 174.66000000000000 -6.4885195833475412E-005 + 174.72000000000000 -6.5835758353783777E-005 + 174.78000000000000 -6.6799604025767739E-005 + 174.84000000000000 -6.7777378084229884E-005 + 174.90000000000001 -6.8769795636121824E-005 + 174.95999999999998 -6.9777618182312326E-005 + 175.01999999999998 -7.0801664070277421E-005 + 175.07999999999998 -7.1842811919601776E-005 + 175.13999999999999 -7.2902009184745047E-005 + 175.19999999999999 -7.3980230803207350E-005 + 175.25999999999999 -7.5078522322559081E-005 + 175.31999999999999 -7.6197960705011396E-005 + 175.38000000000000 -7.7339670196183339E-005 + 175.44000000000000 -7.8504810940174149E-005 + 175.50000000000000 -7.9694563755608507E-005 + 175.56000000000000 -8.0910143465918923E-005 + 175.62000000000000 -8.2152774618767210E-005 + 175.67999999999998 -8.3423712088806544E-005 + 175.73999999999998 -8.4724217604734332E-005 + 175.79999999999998 -8.6055566719553666E-005 + 175.85999999999999 -8.7419053560380209E-005 + 175.91999999999999 -8.8815963404127913E-005 + 175.97999999999999 -9.0247596540946582E-005 + 176.03999999999999 -9.1715270391286264E-005 + 176.09999999999999 -9.3220276385718001E-005 + 176.16000000000000 -9.4763932306493874E-005 + 176.22000000000000 -9.6347524788433091E-005 + 176.28000000000000 -9.7972344733891664E-005 + 176.34000000000000 -9.9639636422223189E-005 + 176.40000000000001 -1.0135065022077709E-004 + 176.45999999999998 -1.0310657397137399E-004 + 176.51999999999998 -1.0490856387036004E-004 + 176.57999999999998 -1.0675772439015579E-004 + 176.63999999999999 -1.0865509825291257E-004 + 176.69999999999999 -1.1060167514084181E-004 + 176.75999999999999 -1.1259836684547036E-004 + 176.81999999999999 -1.1464603899720365E-004 + 176.88000000000000 -1.1674546863475720E-004 + 176.94000000000000 -1.1889739575099935E-004 + 177.00000000000000 -1.2110247622873565E-004 + 177.06000000000000 -1.2336132531168609E-004 + 177.12000000000000 -1.2567449940928724E-004 + 177.17999999999998 -1.2804252116792081E-004 + 177.23999999999998 -1.3046585454168076E-004 + 177.29999999999998 -1.3294491078052833E-004 + 177.35999999999999 -1.3548005621963273E-004 + 177.41999999999999 -1.3807161951146562E-004 + 177.47999999999999 -1.4071985332320239E-004 + 177.53999999999999 -1.4342497972457123E-004 + 177.59999999999999 -1.4618713458820504E-004 + 177.66000000000000 -1.4900634455497174E-004 + 177.72000000000000 -1.5188259661263781E-004 + 177.78000000000000 -1.5481575762194778E-004 + 177.84000000000000 -1.5780558934880217E-004 + 177.90000000000001 -1.6085175934418681E-004 + 177.95999999999998 -1.6395380700638508E-004 + 178.01999999999998 -1.6711118631815148E-004 + 178.07999999999998 -1.7032322600655703E-004 + 178.13999999999999 -1.7358918213560118E-004 + 178.19999999999999 -1.7690817836866709E-004 + 178.25999999999999 -1.8027930533246690E-004 + 178.31999999999999 -1.8370153818856683E-004 + 178.38000000000000 -1.8717383200465739E-004 + 178.44000000000000 -1.9069505265839853E-004 + 178.50000000000000 -1.9426404061265358E-004 + 178.56000000000000 -1.9787957769857296E-004 + 178.62000000000000 -2.0154043055460038E-004 + 178.67999999999998 -2.0524530133838597E-004 + 178.73999999999998 -2.0899286115070746E-004 + 178.79999999999998 -2.1278170817003460E-004 + 178.85999999999999 -2.1661039674160070E-004 + 178.91999999999999 -2.2047740818397415E-004 + 178.97999999999999 -2.2438112521851560E-004 + 179.03999999999999 -2.2831985119125764E-004 + 179.09999999999999 -2.3229174989725367E-004 + 179.16000000000000 -2.3629491266620139E-004 + 179.22000000000000 -2.4032730928644230E-004 + 179.28000000000000 -2.4438677487066825E-004 + 179.34000000000000 -2.4847102026702374E-004 + 179.40000000000001 -2.5257764566053071E-004 + 179.45999999999998 -2.5670412751330478E-004 + 179.51999999999998 -2.6084785573754103E-004 + 179.57999999999998 -2.6500610326179980E-004 + 179.63999999999999 -2.6917607429472840E-004 + 179.69999999999999 -2.7335488871968894E-004 + 179.75999999999999 -2.7753961931943443E-004 + 179.81999999999999 -2.8172722896540833E-004 + 179.88000000000000 -2.8591464159283226E-004 + 179.94000000000000 -2.9009875242064665E-004 + 180.00000000000000 -2.9427635288690188E-004 + 180.06000000000000 -2.9844424455922918E-004 + 180.12000000000000 -3.0259911290982821E-004 + 180.17999999999998 -3.0673760394868746E-004 + 180.23999999999998 -3.1085629802248942E-004 + 180.29999999999998 -3.1495169953045971E-004 + 180.35999999999999 -3.1902021200043434E-004 + 180.41999999999999 -3.2305819625474508E-004 + 180.47999999999999 -3.2706184815750323E-004 + 180.53999999999999 -3.3102736644433545E-004 + 180.59999999999999 -3.3495077931075822E-004 + 180.66000000000000 -3.3882809741862536E-004 + 180.72000000000000 -3.4265518543505395E-004 + 180.78000000000000 -3.4642781092453950E-004 + 180.84000000000000 -3.5014167235954054E-004 + 180.90000000000001 -3.5379238995689036E-004 + 180.95999999999998 -3.5737547837355995E-004 + 181.01999999999998 -3.6088638259221929E-004 + 181.07999999999998 -3.6432048302299959E-004 + 181.13999999999999 -3.6767300504578557E-004 + 181.19999999999999 -3.7093920619022845E-004 + 181.25999999999999 -3.7411423885268821E-004 + 181.31999999999999 -3.7719314454058036E-004 + 181.38000000000000 -3.8017093087150850E-004 + 181.44000000000000 -3.8304254636465420E-004 + 181.50000000000000 -3.8580289970125781E-004 + 181.56000000000000 -3.8844683526226661E-004 + 181.62000000000000 -3.9096922870507714E-004 + 181.67999999999998 -3.9336480689604260E-004 + 181.73999999999998 -3.9562835944587858E-004 + 181.79999999999998 -3.9775462385619473E-004 + 181.85999999999999 -3.9973833435649601E-004 + 181.91999999999999 -4.0157422845578356E-004 + 181.97999999999999 -4.0325701104133860E-004 + 182.03999999999999 -4.0478141735264143E-004 + 182.09999999999999 -4.0614216529176114E-004 + 182.16000000000000 -4.0733400315877145E-004 + 182.22000000000000 -4.0835166249402908E-004 + 182.28000000000000 -4.0918989341182522E-004 + 182.34000000000000 -4.0984344533131546E-004 + 182.39999999999998 -4.1030711139970917E-004 + 182.45999999999998 -4.1057567577359506E-004 + 182.51999999999998 -4.1064396491175117E-004 + 182.57999999999998 -4.1050684692837193E-004 + 182.63999999999999 -4.1015919836384559E-004 + 182.69999999999999 -4.0959598887164691E-004 + 182.75999999999999 -4.0881223132628629E-004 + 182.81999999999999 -4.0780314559953605E-004 + 182.88000000000000 -4.0656395382929466E-004 + 182.94000000000000 -4.0509005786034459E-004 + 183.00000000000000 -4.0337706279509433E-004 + 183.06000000000000 -4.0142071122707034E-004 + 183.12000000000000 -3.9921698648261758E-004 + 183.17999999999998 -3.9676210909627942E-004 + 183.23999999999998 -3.9405249653546952E-004 + 183.29999999999998 -3.9108485945653511E-004 + 183.35999999999999 -3.8785619940983007E-004 + 183.41999999999999 -3.8436372850246834E-004 + 183.47999999999999 -3.8060502850846442E-004 + 183.53999999999999 -3.7657794407844911E-004 + 183.59999999999999 -3.7228063319121399E-004 + 183.66000000000000 -3.6771152765220167E-004 + 183.72000000000000 -3.6286939872003863E-004 + 183.78000000000000 -3.5775336271968782E-004 + 183.84000000000000 -3.5236283222270313E-004 + 183.89999999999998 -3.4669758112246772E-004 + 183.95999999999998 -3.4075773881218284E-004 + 184.01999999999998 -3.3454382586726929E-004 + 184.07999999999998 -3.2805673317720717E-004 + 184.13999999999999 -3.2129778630287905E-004 + 184.19999999999999 -3.1426868039590344E-004 + 184.25999999999999 -3.0697159034279539E-004 + 184.31999999999999 -2.9940912021688353E-004 + 184.38000000000000 -2.9158433716009358E-004 + 184.44000000000000 -2.8350076418007280E-004 + 184.50000000000000 -2.7516241745126888E-004 + 184.56000000000000 -2.6657379010251221E-004 + 184.62000000000000 -2.5773981188373255E-004 + 184.67999999999998 -2.4866592697371932E-004 + 184.73999999999998 -2.3935801618764319E-004 + 184.79999999999998 -2.2982242093085923E-004 + 184.85999999999999 -2.2006593461720617E-004 + 184.91999999999999 -2.1009579315706898E-004 + 184.97999999999999 -1.9991963348042291E-004 + 185.03999999999999 -1.8954551715839608E-004 + 185.09999999999999 -1.7898191812273562E-004 + 185.16000000000000 -1.6823771593695247E-004 + 185.22000000000000 -1.5732215635360961E-004 + 185.28000000000000 -1.4624485642829378E-004 + 185.34000000000000 -1.3501580311976101E-004 + 185.39999999999998 -1.2364533747855151E-004 + 185.45999999999998 -1.1214412255461181E-004 + 185.51999999999998 -1.0052314140511530E-004 + 185.57999999999998 -8.8793681829491794E-005 + 185.63999999999999 -7.6967312204499934E-005 + 185.69999999999999 -6.5055845852525073E-005 + 185.75999999999999 -5.3071308186414831E-005 + 185.81999999999999 -4.1025960618483733E-005 + 185.88000000000000 -2.8932204702380901E-005 + 185.94000000000000 -1.6802584410027752E-005 + 186.00000000000000 -4.6497707474146377E-006 + 186.06000000000000 7.5135223795491502E-006 + 186.12000000000000 1.9674496783956211E-005 + 186.17999999999998 3.1820361790548228E-005 + 186.23999999999998 4.3938320138992042E-005 + 186.29999999999998 5.6015605424466241E-005 + 186.35999999999999 6.8039509817554726E-005 + 186.41999999999999 7.9997397423367314E-005 + 186.47999999999999 9.1876740165685997E-005 + 186.53999999999999 1.0366513139707445E-004 + 186.59999999999999 1.1535031800221695E-004 + 186.66000000000000 1.2692019299460330E-004 + 186.72000000000000 1.3836287062100419E-004 + 186.78000000000000 1.4966663802567452E-004 + 186.84000000000000 1.6082004623242137E-004 + 186.89999999999998 1.7181194058908829E-004 + 186.95999999999998 1.8263145778572214E-004 + 187.01999999999998 1.9326802130460025E-004 + 187.07999999999998 2.0371146912823303E-004 + 187.13999999999999 2.1395200244782767E-004 + 187.19999999999999 2.2398020351489250E-004 + 187.25999999999999 2.3378714474673625E-004 + 187.31999999999999 2.4336432811393423E-004 + 187.38000000000000 2.5270374173924675E-004 + 187.44000000000000 2.6179783266909250E-004 + 187.50000000000000 2.7063959503353181E-004 + 187.56000000000000 2.7922253508823216E-004 + 187.62000000000000 2.8754063223556943E-004 + 187.67999999999998 2.9558842004038936E-004 + 187.73999999999998 3.0336094030284283E-004 + 187.79999999999998 3.1085377260770762E-004 + 187.85999999999999 3.1806300681711810E-004 + 187.91999999999999 3.2498522026568798E-004 + 187.97999999999999 3.3161757742024137E-004 + 188.03999999999999 3.3795769917573375E-004 + 188.09999999999999 3.4400374454515394E-004 + 188.16000000000000 3.4975436614189748E-004 + 188.22000000000000 3.5520878278846445E-004 + 188.28000000000000 3.6036666977063840E-004 + 188.34000000000000 3.6522822345887781E-004 + 188.39999999999998 3.6979417645776388E-004 + 188.45999999999998 3.7406572042070310E-004 + 188.51999999999998 3.7804457225697755E-004 + 188.57999999999998 3.8173290566636436E-004 + 188.63999999999999 3.8513335277189152E-004 + 188.69999999999999 3.8824904145454771E-004 + 188.75999999999999 3.9108349289467361E-004 + 188.81999999999999 3.9364067649676622E-004 + 188.88000000000000 3.9592495850358420E-004 + 188.94000000000000 3.9794104339702145E-004 + 189.00000000000000 3.9969409287340382E-004 + 189.06000000000000 4.0118949113917467E-004 + 189.12000000000000 4.0243299760792854E-004 + 189.17999999999998 4.0343066626409845E-004 + 189.23999999999998 4.0418885457187614E-004 + 189.29999999999998 4.0471413156592848E-004 + 189.35999999999999 4.0501334199970223E-004 + 189.41999999999999 4.0509355165001151E-004 + 189.47999999999999 4.0496199703530980E-004 + 189.53999999999999 4.0462613904074414E-004 + 189.59999999999999 4.0409356323874623E-004 + 189.66000000000000 4.0337201005030221E-004 + 189.72000000000000 4.0246934015633260E-004 + 189.78000000000000 4.0139355187094342E-004 + 189.84000000000000 4.0015266822859803E-004 + 189.89999999999998 3.9875478520422561E-004 + 189.95999999999998 3.9720808426870732E-004 + 190.01999999999998 3.9552067288734850E-004 + 190.07999999999998 3.9370076629558583E-004 + 190.13999999999999 3.9175649679792560E-004 + 190.19999999999999 3.8969602141083174E-004 + 190.25999999999999 3.8752742807678521E-004 + 190.31999999999999 3.8525876360496765E-004 + 190.38000000000000 3.8289803727013246E-004 + 190.44000000000000 3.8045317338700717E-004 + 190.50000000000000 3.7793206731621791E-004 + 190.56000000000000 3.7534250843638292E-004 + 190.62000000000000 3.7269227030797987E-004 + 190.67999999999998 3.6998896449157972E-004 + 190.73999999999998 3.6724018222499140E-004 + 190.79999999999998 3.6445337844454864E-004 + 190.85999999999999 3.6163591697198474E-004 + 190.91999999999999 3.5879509260631327E-004 + 190.97999999999999 3.5593800083536783E-004 + 191.03999999999999 3.5307165885766151E-004 + 191.09999999999999 3.5020289044148512E-004 + 191.16000000000000 3.4733842178074617E-004 + 191.22000000000000 3.4448477217643357E-004 + 191.28000000000000 3.4164831458049442E-004 + 191.34000000000000 3.3883521359655570E-004 + 191.39999999999998 3.3605147866350567E-004 + 191.45999999999998 3.3330297526997643E-004 + 191.51999999999998 3.3059535365758069E-004 + 191.57999999999998 3.2793414410281247E-004 + 191.63999999999999 3.2532469342602145E-004 + 191.69999999999999 3.2277217325645511E-004 + 191.75999999999999 3.2028167717357704E-004 + 191.81999999999999 3.1785810684951932E-004 + 191.88000000000000 3.1550630404591969E-004 + 191.94000000000000 3.1323093194947891E-004 + 192.00000000000000 3.1103651562905686E-004 + 192.06000000000000 3.0892749367906623E-004 + 192.12000000000000 3.0690814751815920E-004 + 192.17999999999998 3.0498261122353964E-004 + 192.23999999999998 3.0315488744331413E-004 + 192.29999999999998 3.0142878300182019E-004 + 192.35999999999999 2.9980799017581680E-004 + 192.41999999999999 2.9829595662838595E-004 + 192.47999999999999 2.9689598368640819E-004 + 192.53999999999999 2.9561117341118438E-004 + 192.59999999999999 2.9444440609967650E-004 + 192.66000000000000 2.9339833228319640E-004 + 192.72000000000000 2.9247545573447636E-004 + 192.78000000000000 2.9167802404758691E-004 + 192.84000000000000 2.9100813985306309E-004 + 192.89999999999998 2.9046769406070646E-004 + 192.95999999999998 2.9005834866634096E-004 + 193.01999999999998 2.8978164516355975E-004 + 193.07999999999998 2.8963896044185077E-004 + 193.13999999999999 2.8963140012836218E-004 + 193.19999999999999 2.8976003186910010E-004 + 193.25999999999999 2.9002563852960540E-004 + 193.31999999999999 2.9042888726706756E-004 + 193.38000000000000 2.9097020368197969E-004 + 193.44000000000000 2.9164989447558729E-004 + 193.50000000000000 2.9246799002005452E-004 + 193.56000000000000 2.9342434220463678E-004 + 193.62000000000000 2.9451854153135509E-004 + 193.67999999999998 2.9574995956761665E-004 + 193.73999999999998 2.9711768939021463E-004 + 193.79999999999998 2.9862059137119554E-004 + 193.85999999999999 3.0025727737091601E-004 + 193.91999999999999 3.0202606099017770E-004 + 193.97999999999999 3.0392498588210665E-004 + 194.03999999999999 3.0595184060414548E-004 + 194.09999999999999 3.0810416468239312E-004 + 194.16000000000000 3.1037918668892859E-004 + 194.22000000000000 3.1277395494661763E-004 + 194.28000000000000 3.1528522640456724E-004 + 194.34000000000000 3.1790955913302071E-004 + 194.39999999999998 3.2064324995004050E-004 + 194.45999999999998 3.2348240953416021E-004 + 194.51999999999998 3.2642287229523852E-004 + 194.57999999999998 3.2946035110003658E-004 + 194.63999999999999 3.3259028363994401E-004 + 194.69999999999999 3.3580793912625580E-004 + 194.75999999999999 3.3910836032702860E-004 + 194.81999999999999 3.4248644739169110E-004 + 194.88000000000000 3.4593688815683099E-004 + 194.94000000000000 3.4945419344382901E-004 + 195.00000000000000 3.5303272069381905E-004 + 195.06000000000000 3.5666660852844893E-004 + 195.12000000000000 3.6034987690424913E-004 + 195.17999999999998 3.6407636500311884E-004 + 195.23999999999998 3.6783981745628952E-004 + 195.29999999999998 3.7163377260415265E-004 + 195.35999999999999 3.7545169155001154E-004 + 195.41999999999999 3.7928687980688913E-004 + 195.47999999999999 3.8313257595900749E-004 + 195.53999999999999 3.8698193005135874E-004 + 195.59999999999999 3.9082792276410162E-004 + 195.66000000000000 3.9466352259373463E-004 + 195.72000000000000 3.9848162945650321E-004 + 195.78000000000000 4.0227512894003791E-004 + 195.84000000000000 4.0603681590431180E-004 + 195.89999999999998 4.0975950786351084E-004 + 195.95999999999998 4.1343603523057723E-004 + 196.01999999999998 4.1705922462601468E-004 + 196.07999999999998 4.2062196104682625E-004 + 196.13999999999999 4.2411721469865242E-004 + 196.19999999999999 4.2753801963839327E-004 + 196.25999999999999 4.3087756999629395E-004 + 196.31999999999999 4.3412915091236952E-004 + 196.38000000000000 4.3728617898073149E-004 + 196.44000000000000 4.4034231302958211E-004 + 196.50000000000000 4.4329138494793335E-004 + 196.56000000000000 4.4612744135079472E-004 + 196.62000000000000 4.4884467860353968E-004 + 196.67999999999998 4.5143762264183572E-004 + 196.73999999999998 4.5390097669906448E-004 + 196.79999999999998 4.5622971062600037E-004 + 196.85999999999999 4.5841904513160180E-004 + 196.91999999999999 4.6046443359491003E-004 + 196.97999999999999 4.6236159483296766E-004 + 197.03999999999999 4.6410654432852284E-004 + 197.09999999999999 4.6569558631979059E-004 + 197.16000000000000 4.6712527124112986E-004 + 197.22000000000000 4.6839246388074218E-004 + 197.28000000000000 4.6949435503919920E-004 + 197.34000000000000 4.7042846162793884E-004 + 197.39999999999998 4.7119268150401777E-004 + 197.45999999999998 4.7178520153601667E-004 + 197.51999999999998 4.7220467690174933E-004 + 197.57999999999998 4.7245014496211037E-004 + 197.63999999999999 4.7252104271777067E-004 + 197.69999999999999 4.7241721053176014E-004 + 197.75999999999999 4.7213899114948788E-004 + 197.81999999999999 4.7168713602890774E-004 + 197.88000000000000 4.7106282694882388E-004 + 197.94000000000000 4.7026769882111281E-004 + 198.00000000000000 4.6930381235216326E-004 + 198.06000000000000 4.6817364190817126E-004 + 198.12000000000000 4.6688001999869609E-004 + 198.17999999999998 4.6542623498701017E-004 + 198.23999999999998 4.6381590212882197E-004 + 198.29999999999998 4.6205297115132821E-004 + 198.35999999999999 4.6014174983189271E-004 + 198.41999999999999 4.5808686952605784E-004 + 198.47999999999999 4.5589319867454889E-004 + 198.53999999999999 4.5356598431120569E-004 + 198.59999999999999 4.5111067380934221E-004 + 198.66000000000000 4.4853303532657444E-004 + 198.72000000000000 4.4583904117188151E-004 + 198.78000000000000 4.4303487480297477E-004 + 198.84000000000000 4.4012703522768471E-004 + 198.89999999999998 4.3712216367352788E-004 + 198.95999999999998 4.3402713763805901E-004 + 199.01999999999998 4.3084899229879224E-004 + 199.07999999999998 4.2759494473232747E-004 + 199.13999999999999 4.2427231436036072E-004 + 199.19999999999999 4.2088853351705086E-004 + 199.25999999999999 4.1745119012718277E-004 + 199.31999999999999 4.1396787535046052E-004 + 199.38000000000000 4.1044615196386344E-004 + 199.44000000000000 4.0689367891118516E-004 + 199.50000000000000 4.0331803306357467E-004 + 199.56000000000000 3.9972666705798729E-004 + 199.62000000000000 3.9612702942130526E-004 + 199.67999999999998 3.9252634644042152E-004 + 199.73999999999998 3.8893171079851057E-004 + 199.79999999999998 3.8535010084870321E-004 + 199.85999999999999 3.8178821851617828E-004 + 199.91999999999999 3.7825256213831206E-004 + 199.97999999999999 3.7474932718610770E-004 + 200.03999999999999 3.7128451376960308E-004 + 200.09999999999999 3.6786380092916816E-004 + 200.16000000000000 3.6449256975202443E-004 + 200.22000000000000 3.6117587264922744E-004 + 200.28000000000000 3.5791835901177044E-004 + 200.34000000000000 3.5472442810443818E-004 + 200.39999999999998 3.5159803022608531E-004 + 200.45999999999998 3.4854273792481492E-004 + 200.51999999999998 3.4556175011685284E-004 + 200.57999999999998 3.4265779182579635E-004 + 200.63999999999999 3.3983321177124095E-004 + 200.69999999999999 3.3708996221306969E-004 + 200.75999999999999 3.3442945940720848E-004 + 200.81999999999999 3.3185277791681917E-004 + 200.88000000000000 3.2936048512350376E-004 + 200.94000000000000 3.2695273480374583E-004 + 201.00000000000000 3.2462924054834947E-004 + 201.06000000000000 3.2238927374069728E-004 + 201.12000000000000 3.2023168087780675E-004 + 201.17999999999998 3.1815489260831904E-004 + 201.23999999999998 3.1615689520222458E-004 + 201.29999999999998 3.1423529231833594E-004 + 201.35999999999999 3.1238728923921165E-004 + 201.41999999999999 3.1060967631782270E-004 + 201.47999999999999 3.0889890831943149E-004 + 201.53999999999999 3.0725098799303299E-004 + 201.59999999999999 3.0566163886453575E-004 + 201.66000000000000 3.0412620970008048E-004 + 201.72000000000000 3.0263973661754046E-004 + 201.78000000000000 3.0119694519523832E-004 + 201.84000000000000 2.9979226726091593E-004 + 201.89999999999998 2.9841987797500934E-004 + 201.95999999999998 2.9707372480177304E-004 + 202.01999999999998 2.9574753161903592E-004 + 202.07999999999998 2.9443483947597918E-004 + 202.13999999999999 2.9312906664952237E-004 + 202.19999999999999 2.9182348466275825E-004 + 202.25999999999999 2.9051128077614536E-004 + 202.31999999999999 2.8918558504452462E-004 + 202.38000000000000 2.8783948837953117E-004 + 202.44000000000000 2.8646608710731472E-004 + 202.50000000000000 2.8505852334360254E-004 + 202.56000000000000 2.8360992956085395E-004 + 202.62000000000000 2.8211356949896357E-004 + 202.67999999999998 2.8056273644313357E-004 + 202.73999999999998 2.7895090283272175E-004 + 202.79999999999998 2.7727164102530233E-004 + 202.85999999999999 2.7551867836128353E-004 + 202.91999999999999 2.7368591247978755E-004 + 202.97999999999999 2.7176749174928877E-004 + 203.03999999999999 2.6975771965765196E-004 + 203.09999999999999 2.6765119338605743E-004 + 203.16000000000000 2.6544274504968531E-004 + 203.22000000000000 2.6312752154952247E-004 + 203.28000000000000 2.6070093320662222E-004 + 203.34000000000000 2.5815878656784653E-004 + 203.39999999999998 2.5549721837830772E-004 + 203.45999999999998 2.5271269851190640E-004 + 203.51999999999998 2.4980216391465369E-004 + 203.57999999999998 2.4676289661319757E-004 + 203.63999999999999 2.4359262401003293E-004 + 203.69999999999999 2.4028946145461858E-004 + 203.75999999999999 2.3685196246737503E-004 + 203.81999999999999 2.3327912908406896E-004 + 203.88000000000000 2.2957039616252803E-004 + 203.94000000000000 2.2572559873983489E-004 + 204.00000000000000 2.2174496865707234E-004 + 204.06000000000000 2.1762917639407255E-004 + 204.12000000000000 2.1337934563690585E-004 + 204.17999999999998 2.0899693131482867E-004 + 204.23999999999998 2.0448380784618991E-004 + 204.29999999999998 1.9984225845578768E-004 + 204.35999999999999 1.9507491663071377E-004 + 204.41999999999999 1.9018482626690413E-004 + 204.47999999999999 1.8517538033889462E-004 + 204.53999999999999 1.8005034007344300E-004 + 204.59999999999999 1.7481384519299055E-004 + 204.66000000000000 1.6947034665214947E-004 + 204.72000000000000 1.6402467528594148E-004 + 204.78000000000000 1.5848196263356680E-004 + 204.84000000000000 1.5284763962876923E-004 + 204.89999999999998 1.4712742772415507E-004 + 204.95999999999998 1.4132734419952555E-004 + 205.01999999999998 1.3545362979680008E-004 + 205.07999999999998 1.2951274952648474E-004 + 205.13999999999999 1.2351137156112207E-004 + 205.19999999999999 1.1745632545365499E-004 + 205.25999999999999 1.1135459522861293E-004 + 205.31999999999999 1.0521327555101261E-004 + 205.38000000000000 9.9039559955730870E-005 + 205.44000000000000 9.2840700080124377E-005 + 205.50000000000000 8.6624002510601809E-005 + 205.56000000000000 8.0396799504705801E-005 + 205.62000000000000 7.4166425979342208E-005 + 205.67999999999998 6.7940198855363887E-005 + 205.73999999999998 6.1725409974460382E-005 + 205.79999999999998 5.5529313707821991E-005 + 205.85999999999999 4.9359083366561599E-005 + 205.91999999999999 4.3221802994365173E-005 + 205.97999999999999 3.7124479270420184E-005 + 206.03999999999999 3.1073989934556588E-005 + 206.09999999999999 2.5077083881671700E-005 + 206.16000000000000 1.9140360192508022E-005 + 206.22000000000000 1.3270254448306517E-005 + 206.28000000000000 7.4730102518157311E-006 + 206.34000000000000 1.7546784240552359E-006 + 206.39999999999998 -3.8789103077435955E-006 + 206.45999999999998 -9.4221522106811918E-006 + 206.51999999999998 -1.4869685173362348E-005 + 206.57999999999998 -2.0216392809647742E-005 + 206.63999999999999 -2.5457432589276067E-005 + 206.69999999999999 -3.0588218200664886E-005 + 206.75999999999999 -3.5604448344268016E-005 + 206.81999999999999 -4.0502093946797674E-005 + 206.88000000000000 -4.5277400653753440E-005 + 206.94000000000000 -4.9926910954862375E-005 + 207.00000000000000 -5.4447436066138299E-005 + 207.06000000000000 -5.8836075139115216E-005 + 207.12000000000000 -6.3090220586246447E-005 + 207.17999999999998 -6.7207544043116556E-005 + 207.23999999999998 -7.1185993498838811E-005 + 207.29999999999998 -7.5023805434954073E-005 + 207.35999999999999 -7.8719507932089959E-005 + 207.41999999999999 -8.2271902387279455E-005 + 207.47999999999999 -8.5680077746881476E-005 + 207.53999999999999 -8.8943399005054493E-005 + 207.59999999999999 -9.2061513458362618E-005 + 207.66000000000000 -9.5034336026967643E-005 + 207.72000000000000 -9.7862049454221120E-005 + 207.78000000000000 -1.0054508358161950E-004 + 207.84000000000000 -1.0308412217209520E-004 + 207.89999999999998 -1.0548008982050750E-004 + 207.95999999999998 -1.0773412845643395E-004 + 208.01999999999998 -1.0984759153063927E-004 + 208.07999999999998 -1.1182205171813166E-004 + 208.13999999999999 -1.1365926732850736E-004 + 208.19999999999999 -1.1536115862537763E-004 + 208.25999999999999 -1.1692981244183754E-004 + 208.31999999999999 -1.1836750466032869E-004 + 208.38000000000000 -1.1967660671066146E-004 + 208.44000000000000 -1.2085967748104215E-004 + 208.50000000000000 -1.2191936995084632E-004 + 208.56000000000000 -1.2285848494605301E-004 + 208.62000000000000 -1.2367992916000154E-004 + 208.68000000000001 -1.2438672452056373E-004 + 208.74000000000001 -1.2498199643635365E-004 + 208.80000000000001 -1.2546896289109823E-004 + 208.86000000000001 -1.2585095275408770E-004 + 208.92000000000002 -1.2613134597023502E-004 + 208.98000000000002 -1.2631360133358381E-004 + 209.03999999999996 -1.2640126583999295E-004 + 209.09999999999997 -1.2639789399330288E-004 + 209.15999999999997 -1.2630712042213047E-004 + 209.21999999999997 -1.2613258825797547E-004 + 209.27999999999997 -1.2587796854212304E-004 + 209.33999999999997 -1.2554693449674987E-004 + 209.39999999999998 -1.2514316891589817E-004 + 209.45999999999998 -1.2467032898060327E-004 + 209.51999999999998 -1.2413208383791867E-004 + 209.57999999999998 -1.2353202245246232E-004 + 209.63999999999999 -1.2287377371326212E-004 + 209.69999999999999 -1.2216088991496752E-004 + 209.75999999999999 -1.2139688621485034E-004 + 209.81999999999999 -1.2058523715199696E-004 + 209.88000000000000 -1.1972937605711655E-004 + 209.94000000000000 -1.1883267257021223E-004 + 210.00000000000000 -1.1789843191956514E-004 + 210.06000000000000 -1.1692990714612322E-004 + 210.12000000000000 -1.1593026941971800E-004 + 210.18000000000001 -1.1490261292829628E-004 + 210.24000000000001 -1.1384995652235144E-004 + 210.30000000000001 -1.1277521448794192E-004 + 210.36000000000001 -1.1168119701310092E-004 + 210.42000000000002 -1.1057061632326354E-004 + 210.48000000000002 -1.0944608486040887E-004 + 210.53999999999996 -1.0831007735702259E-004 + 210.59999999999997 -1.0716496024558245E-004 + 210.65999999999997 -1.0601298827960466E-004 + 210.71999999999997 -1.0485628033905225E-004 + 210.77999999999997 -1.0369684839510191E-004 + 210.83999999999997 -1.0253660081087663E-004 + 210.89999999999998 -1.0137731561232690E-004 + 210.95999999999998 -1.0022067699925260E-004 + 211.01999999999998 -9.9068248050098278E-005 + 211.07999999999998 -9.7921512673292897E-005 + 211.13999999999999 -9.6781855457922646E-005 + 211.19999999999999 -9.5650558254195672E-005 + 211.25999999999999 -9.4528817888154894E-005 + 211.31999999999999 -9.3417741780626212E-005 + 211.38000000000000 -9.2318336833893967E-005 + 211.44000000000000 -9.1231520205289091E-005 + 211.50000000000000 -9.0158113120037629E-005 + 211.56000000000000 -8.9098852682635647E-005 + 211.62000000000000 -8.8054351801283195E-005 + 211.68000000000001 -8.7025147126794825E-005 + 211.74000000000001 -8.6011654906152014E-005 + 211.80000000000001 -8.5014201748360188E-005 + 211.86000000000001 -8.4033026897879689E-005 + 211.92000000000002 -8.3068260852968672E-005 + 211.98000000000002 -8.2119960083098110E-005 + 212.03999999999996 -8.1188094227155507E-005 + 212.09999999999997 -8.0272565337835349E-005 + 212.15999999999997 -7.9373228396986342E-005 + 212.21999999999997 -7.8489865349304380E-005 + 212.27999999999997 -7.7622230954186341E-005 + 212.33999999999997 -7.6770054054731542E-005 + 212.39999999999998 -7.5933019666910156E-005 + 212.45999999999998 -7.5110812413688911E-005 + 212.51999999999998 -7.4303098860967450E-005 + 212.57999999999998 -7.3509530434699179E-005 + 212.63999999999999 -7.2729772548356234E-005 + 212.69999999999999 -7.1963471087238760E-005 + 212.75999999999999 -7.1210269106751562E-005 + 212.81999999999999 -7.0469803847031479E-005 + 212.88000000000000 -6.9741712372855023E-005 + 212.94000000000000 -6.9025606650553357E-005 + 213.00000000000000 -6.8321095197360667E-005 + 213.06000000000000 -6.7627777542524718E-005 + 213.12000000000000 -6.6945225229165495E-005 + 213.18000000000001 -6.6273002437087377E-005 + 213.24000000000001 -6.5610650484457982E-005 + 213.30000000000001 -6.4957701422692750E-005 + 213.36000000000001 -6.4313663838943159E-005 + 213.42000000000002 -6.3678042549038561E-005 + 213.48000000000002 -6.3050328445569856E-005 + 213.53999999999996 -6.2430012181908081E-005 + 213.59999999999997 -6.1816578841618225E-005 + 213.65999999999997 -6.1209514095668654E-005 + 213.71999999999997 -6.0608318297410022E-005 + 213.77999999999997 -6.0012483877479603E-005 + 213.83999999999997 -5.9421537360098034E-005 + 213.89999999999998 -5.8834992362019564E-005 + 213.95999999999998 -5.8252414112460276E-005 + 214.01999999999998 -5.7673365581360338E-005 + 214.07999999999998 -5.7097442561327963E-005 + 214.13999999999999 -5.6524273497883151E-005 + 214.19999999999999 -5.5953502300443167E-005 + 214.25999999999999 -5.5384815739247218E-005 + 214.31999999999999 -5.4817923818047966E-005 + 214.38000000000000 -5.4252577584480889E-005 + 214.44000000000000 -5.3688548034729791E-005 + 214.50000000000000 -5.3125649837910632E-005 + 214.56000000000000 -5.2563718689347683E-005 + 214.62000000000000 -5.2002622922012930E-005 + 214.68000000000001 -5.1442257787514899E-005 + 214.74000000000001 -5.0882531414622395E-005 + 214.80000000000001 -5.0323372748623775E-005 + 214.86000000000001 -4.9764724310276361E-005 + 214.92000000000002 -4.9206540862613271E-005 + 214.98000000000002 -4.8648775362226199E-005 + 215.03999999999996 -4.8091390855961146E-005 + 215.09999999999997 -4.7534343093775269E-005 + 215.15999999999997 -4.6977592783238953E-005 + 215.21999999999997 -4.6421103409228576E-005 + 215.27999999999997 -4.5864833525952361E-005 + 215.33999999999997 -4.5308750905061893E-005 + 215.39999999999998 -4.4752837911607708E-005 + 215.45999999999998 -4.4197086402268299E-005 + 215.51999999999998 -4.3641517244856692E-005 + 215.57999999999998 -4.3086177342634434E-005 + 215.63999999999999 -4.2531152179543452E-005 + 215.69999999999999 -4.1976560217208756E-005 + 215.75999999999999 -4.1422572072587358E-005 + 215.81999999999999 -4.0869399095876082E-005 + 215.88000000000000 -4.0317312590094238E-005 + 215.94000000000000 -3.9766614262455142E-005 + 216.00000000000000 -3.9217659376327174E-005 + 216.06000000000000 -3.8670842285041736E-005 + 216.12000000000000 -3.8126578681523077E-005 + 216.18000000000001 -3.7585316079680950E-005 + 216.24000000000001 -3.7047508960148731E-005 + 216.30000000000001 -3.6513619759568204E-005 + 216.36000000000001 -3.5984101165420557E-005 + 216.42000000000002 -3.5459389020879618E-005 + 216.48000000000002 -3.4939902329698630E-005 + 216.53999999999996 -3.4426028830370680E-005 + 216.59999999999997 -3.3918124430094086E-005 + 216.65999999999997 -3.3416510524954783E-005 + 216.71999999999997 -3.2921474400744686E-005 + 216.77999999999997 -3.2433275254002790E-005 + 216.83999999999997 -3.1952132900536789E-005 + 216.89999999999998 -3.1478249805418686E-005 + 216.95999999999998 -3.1011806517229546E-005 + 217.01999999999998 -3.0552961485178023E-005 + 217.07999999999998 -3.0101872767235834E-005 + 217.13999999999999 -2.9658683522898885E-005 + 217.19999999999999 -2.9223531000509911E-005 + 217.25999999999999 -2.8796554010819849E-005 + 217.31999999999999 -2.8377885268459372E-005 + 217.38000000000000 -2.7967654331144726E-005 + 217.44000000000000 -2.7565981669518807E-005 + 217.50000000000000 -2.7172979876105186E-005 + 217.56000000000000 -2.6788747260287206E-005 + 217.62000000000000 -2.6413357465540840E-005 + 217.68000000000001 -2.6046864449433128E-005 + 217.74000000000001 -2.5689289395144903E-005 + 217.80000000000001 -2.5340623522963450E-005 + 217.86000000000001 -2.5000818430170811E-005 + 217.92000000000002 -2.4669788087912431E-005 + 217.98000000000002 -2.4347407680879363E-005 + 218.03999999999996 -2.4033514187348273E-005 + 218.09999999999997 -2.3727904497747031E-005 + 218.15999999999997 -2.3430341282613129E-005 + 218.21999999999997 -2.3140555129823761E-005 + 218.27999999999997 -2.2858246008390600E-005 + 218.33999999999997 -2.2583092916640670E-005 + 218.39999999999998 -2.2314748556186021E-005 + 218.45999999999998 -2.2052853527897463E-005 + 218.51999999999998 -2.1797035231424201E-005 + 218.57999999999998 -2.1546915918876770E-005 + 218.63999999999999 -2.1302111069562185E-005 + 218.69999999999999 -2.1062236263426415E-005 + 218.75999999999999 -2.0826913574758900E-005 + 218.81999999999999 -2.0595770269947315E-005 + 218.88000000000000 -2.0368441536739827E-005 + 218.94000000000000 -2.0144576284674527E-005 + 219.00000000000000 -1.9923840597755084E-005 + 219.06000000000000 -1.9705914700362811E-005 + 219.12000000000000 -1.9490501182204656E-005 + 219.18000000000001 -1.9277319942607759E-005 + 219.24000000000001 -1.9066112964582143E-005 + 219.30000000000001 -1.8856643760638002E-005 + 219.36000000000001 -1.8648696362621648E-005 + 219.42000000000002 -1.8442076084779729E-005 + 219.48000000000002 -1.8236604302620459E-005 + 219.53999999999996 -1.8032114935812386E-005 + 219.59999999999997 -1.7828455906047380E-005 + 219.65999999999997 -1.7625483663513762E-005 + 219.71999999999997 -1.7423056124331273E-005 + 219.77999999999997 -1.7221035394624301E-005 + 219.83999999999997 -1.7019278916779654E-005 + 219.89999999999998 -1.6817642816370075E-005 + 219.95999999999998 -1.6615973986856350E-005 + 220.01999999999998 -1.6414112219852872E-005 + 220.07999999999998 -1.6211892964339090E-005 + 220.13999999999999 -1.6009146490210945E-005 + 220.19999999999999 -1.5805700758629227E-005 + 220.25999999999999 -1.5601382124717514E-005 + 220.31999999999999 -1.5396021602002972E-005 + 220.38000000000000 -1.5189458478900922E-005 + 220.44000000000000 -1.4981543669066844E-005 + 220.50000000000000 -1.4772144788336668E-005 + 220.56000000000000 -1.4561142714706862E-005 + 220.62000000000000 -1.4348444109997681E-005 + 220.68000000000001 -1.4133971005778855E-005 + 220.74000000000001 -1.3917667119863385E-005 + 220.80000000000001 -1.3699496079158326E-005 + 220.86000000000001 -1.3479436278385925E-005 + 220.92000000000002 -1.3257478761452028E-005 + 220.98000000000002 -1.3033624944686931E-005 + 221.03999999999996 -1.2807880907839811E-005 + 221.09999999999997 -1.2580256526907794E-005 + 221.15999999999997 -1.2350759197679912E-005 + 221.21999999999997 -1.2119392398255060E-005 + 221.27999999999997 -1.1886155939733336E-005 + 221.33999999999997 -1.1651044169728885E-005 + 221.39999999999998 -1.1414047431682703E-005 + 221.45999999999998 -1.1175152180653689E-005 + 221.51999999999998 -1.0934346527651726E-005 + 221.57999999999998 -1.0691621771786906E-005 + 221.63999999999999 -1.0446975016244372E-005 + 221.69999999999999 -1.0200414267034355E-005 + 221.75999999999999 -9.9519623037429571E-006 + 221.81999999999999 -9.7016589755880464E-006 + 221.88000000000000 -9.4495631519413788E-006 + 221.94000000000000 -9.1957556625297179E-006 + 222.00000000000000 -8.9403394790485836E-006 + 222.06000000000000 -8.6834390265324708E-006 + 222.12000000000000 -8.4252010074895361E-006 + 222.18000000000001 -8.1657938227106247E-006 + 222.24000000000001 -7.9054051098746771E-006 + 222.30000000000001 -7.6442390229184420E-006 + 222.36000000000001 -7.3825198035925207E-006 + 222.42000000000002 -7.1204860252476371E-006 + 222.48000000000002 -6.8583942733648096E-006 + 222.53999999999996 -6.5965160768016402E-006 + 222.59999999999997 -6.3351413625432467E-006 + 222.65999999999997 -6.0745764601914692E-006 + 222.71999999999997 -5.8151464834501232E-006 + 222.77999999999997 -5.5571945516587385E-006 + 222.83999999999997 -5.3010839863549103E-006 + 222.89999999999998 -5.0471951965166483E-006 + 222.95999999999998 -4.7959252142082781E-006 + 223.01999999999998 -4.5476858431973647E-006 + 223.07999999999998 -4.3028991314418508E-006 + 223.13999999999999 -4.0619933550214519E-006 + 223.19999999999999 -3.8253973104512810E-006 + 223.25999999999999 -3.5935351641468108E-006 + 223.31999999999999 -3.3668188136761619E-006 + 223.38000000000000 -3.1456434549969771E-006 + 223.44000000000000 -2.9303815347967328E-006 + 223.50000000000000 -2.7213776961468640E-006 + 223.56000000000000 -2.5189456186479313E-006 + 223.62000000000000 -2.3233663122995543E-006 + 223.68000000000001 -2.1348868433701745E-006 + 223.74000000000001 -1.9537215941573091E-006 + 223.80000000000001 -1.7800546649558180E-006 + 223.86000000000001 -1.6140432117033114E-006 + 223.92000000000002 -1.4558212161405456E-006 + 223.98000000000002 -1.3055049483817008E-006 + 224.03999999999996 -1.1631972481953697E-006 + 224.09999999999997 -1.0289913141401561E-006 + 224.15999999999997 -9.0297474629215675E-007 + 224.21999999999997 -7.8523137346642928E-007 + 224.27999999999997 -6.7584228436023996E-007 + 224.33999999999997 -5.7488573845023817E-007 + 224.39999999999998 -4.8243517964169284E-007 + 224.45999999999998 -3.9855608663616476E-007 + 224.51999999999998 -3.2330261759262587E-007 + 224.57999999999998 -2.5671331489287493E-007 + 224.63999999999999 -1.9880642711591945E-007 + 224.69999999999999 -1.4957576872903265E-007 + 224.75999999999999 -1.0898763257407503E-007 + 224.81999999999999 -7.6977898097026158E-008 + 224.88000000000000 -5.3451302201039819E-008 + 224.94000000000000 -3.8281135580885121E-008 + 225.00000000000000 -3.1311341057744963E-008 + 225.06000000000000 -3.2358948866232566E-008 + 225.12000000000000 -4.1218573087509759E-008 + 225.18000000000001 -5.7667000731789280E-008 + 225.24000000000001 -8.1468664844611835E-008 + 225.30000000000001 -1.1238118619974018E-007 + 225.36000000000001 -1.5016110651498304E-007 + 225.42000000000002 -1.9456873872724423E-007 + 225.48000000000002 -2.4537245622801946E-007 + 225.53999999999996 -3.0235227055990088E-007 + 225.59999999999997 -3.6530257818088791E-007 + 225.65999999999997 -4.3403387633451603E-007 + 225.71999999999997 -5.0837318538869919E-007 + 225.77999999999997 -5.8816499171270707E-007 + 225.83999999999997 -6.7327024078399624E-007 + 225.89999999999998 -7.6356614943239635E-007 + 225.95999999999998 -8.5894474639454196E-007 + 226.01999999999998 -9.5931219081222565E-007 + 226.07999999999998 -1.0645874706291776E-006 + 226.13999999999999 -1.1747016506859637E-006 + 226.19999999999999 -1.2895962197051455E-006 + 226.25999999999999 -1.4092218415953063E-006 + 226.31999999999999 -1.5335374366586925E-006 + 226.38000000000000 -1.6625071336372986E-006 + 226.44000000000000 -1.7960988960111644E-006 + 226.50000000000000 -1.9342814412037010E-006 + 226.56000000000000 -2.0770206934177187E-006 + 226.62000000000000 -2.2242760816828068E-006 + 226.68000000000001 -2.3759965682902829E-006 + 226.74000000000001 -2.5321168583190521E-006 + 226.80000000000001 -2.6925524476032033E-006 + 226.86000000000001 -2.8571979510771167E-006 + 226.92000000000002 -3.0259228144628367E-006 + 226.98000000000002 -3.1985702004299544E-006 + 227.03999999999996 -3.3749567963130759E-006 + 227.09999999999997 -3.5548737464220963E-006 + 227.15999999999997 -3.7380883482387544E-006 + 227.21999999999997 -3.9243493025340417E-006 + 227.27999999999997 -4.1133894668123393E-006 + 227.33999999999997 -4.3049324388044054E-006 + 227.39999999999998 -4.4986985098767539E-006 + 227.45999999999998 -4.6944102538432350E-006 + 227.51999999999998 -4.8917981581585533E-006 + 227.57999999999998 -5.0906047297481839E-006 + 227.63999999999999 -5.2905892090360505E-006 + 227.69999999999999 -5.4915278493110012E-006 + 227.75999999999999 -5.6932145424309843E-006 + 227.81999999999999 -5.8954598069624639E-006 + 227.88000000000000 -6.0980878631661843E-006 + 227.94000000000000 -6.3009323435936856E-006 + 228.00000000000000 -6.5038323640044736E-006 + 228.06000000000000 -6.7066263429774560E-006 + 228.12000000000000 -6.9091484634325643E-006 + 228.18000000000001 -7.1112236115771039E-006 + 228.24000000000001 -7.3126646804923160E-006 + 228.30000000000001 -7.5132720991198071E-006 + 228.36000000000001 -7.7128341106938262E-006 + 228.42000000000002 -7.9111267967281897E-006 + 228.48000000000002 -8.1079193778283154E-006 + 228.53999999999996 -8.3029799867783343E-006 + 228.59999999999997 -8.4960835792953685E-006 + 228.65999999999997 -8.6870144208798210E-006 + 228.71999999999997 -8.8755784515382548E-006 + 228.77999999999997 -9.0616062451039058E-006 + 228.83999999999997 -9.2449614513908494E-006 + 228.89999999999998 -9.4255461201288339E-006 + 228.95999999999998 -9.6033003949385646E-006 + 229.01999999999998 -9.7782082967126235E-006 + 229.07999999999998 -9.9502954646271007E-006 + 229.13999999999999 -1.0119625532058940E-005 + 229.19999999999999 -1.0286300296941349E-005 + 229.25999999999999 -1.0450451762041338E-005 + 229.31999999999999 -1.0612238137190283E-005 + 229.38000000000000 -1.0771837785241181E-005 + 229.44000000000000 -1.0929444433705622E-005 + 229.50000000000000 -1.1085259302898777E-005 + 229.56000000000000 -1.1239488641595796E-005 + 229.62000000000000 -1.1392337444086154E-005 + 229.68000000000001 -1.1544006939049497E-005 + 229.74000000000001 -1.1694691625504996E-005 + 229.80000000000001 -1.1844577222221693E-005 + 229.86000000000001 -1.1993839106283363E-005 + 229.92000000000002 -1.2142642040311675E-005 + 229.97999999999996 -1.2291135677721933E-005 + 230.03999999999996 -1.2439456592524862E-005 + 230.09999999999997 -1.2587724757533559E-005 + 230.15999999999997 -1.2736041595353633E-005 + 230.21999999999997 -1.2884487046300813E-005 + 230.27999999999997 -1.3033118877747268E-005 + 230.33999999999997 -1.3181969298004226E-005 + 230.39999999999998 -1.3331042070424103E-005 + 230.45999999999998 -1.3480312996333180E-005 + 230.51999999999998 -1.3629727976982463E-005 + 230.57999999999998 -1.3779202678234953E-005 + 230.63999999999999 -1.3928625334334483E-005 + 230.69999999999999 -1.4077859073168563E-005 + 230.75999999999999 -1.4226742512618880E-005 + 230.81999999999999 -1.4375097312654185E-005 + 230.88000000000000 -1.4522728518453431E-005 + 230.94000000000000 -1.4669433675959872E-005 + 231.00000000000000 -1.4815004630763532E-005 + 231.06000000000000 -1.4959230426896541E-005 + 231.12000000000000 -1.5101902334675010E-005 + 231.18000000000001 -1.5242811743872119E-005 + 231.24000000000001 -1.5381752858243318E-005 + 231.30000000000001 -1.5518520647630280E-005 + 231.36000000000001 -1.5652909021826940E-005 + 231.42000000000002 -1.5784703133862515E-005 + 231.47999999999996 -1.5913680409963840E-005 + 231.53999999999996 -1.6039602172565704E-005 + 231.59999999999997 -1.6162213421339746E-005 + 231.65999999999997 -1.6281237062296706E-005 + 231.71999999999997 -1.6396372304157332E-005 + 231.77999999999997 -1.6507294956401727E-005 + 231.83999999999997 -1.6613659492538201E-005 + 231.89999999999998 -1.6715100952222834E-005 + 231.95999999999998 -1.6811246453952192E-005 + 232.01999999999998 -1.6901713089946547E-005 + 232.07999999999998 -1.6986119835200566E-005 + 232.13999999999999 -1.7064098218589127E-005 + 232.19999999999999 -1.7135296921021700E-005 + 232.25999999999999 -1.7199389835206717E-005 + 232.31999999999999 -1.7256086905793182E-005 + 232.38000000000000 -1.7305136291867821E-005 + 232.44000000000000 -1.7346321303180967E-005 + 232.50000000000000 -1.7379471703743822E-005 + 232.56000000000000 -1.7404456000314766E-005 + 232.62000000000000 -1.7421173983626427E-005 + 232.68000000000001 -1.7429560248622338E-005 + 232.74000000000001 -1.7429572224233992E-005 + 232.80000000000001 -1.7421183468761787E-005 + 232.86000000000001 -1.7404380094888623E-005 + 232.92000000000002 -1.7379149944780029E-005 + 232.97999999999996 -1.7345477013733320E-005 + 233.03999999999996 -1.7303340223937209E-005 + 233.09999999999997 -1.7252703200888785E-005 + 233.15999999999997 -1.7193520199298222E-005 + 233.21999999999997 -1.7125735341333207E-005 + 233.27999999999997 -1.7049278725791910E-005 + 233.33999999999997 -1.6964073314768839E-005 + 233.39999999999998 -1.6870035386849165E-005 + 233.45999999999998 -1.6767082245469103E-005 + 233.51999999999998 -1.6655132439753380E-005 + 233.57999999999998 -1.6534108565033294E-005 + 233.63999999999999 -1.6403942004369130E-005 + 233.69999999999999 -1.6264577067315189E-005 + 233.75999999999999 -1.6115966284575409E-005 + 233.81999999999999 -1.5958075498022146E-005 + 233.88000000000000 -1.5790882391346842E-005 + 233.94000000000000 -1.5614374414831523E-005 + 234.00000000000000 -1.5428554354647824E-005 + 234.06000000000000 -1.5233435600061052E-005 + 234.12000000000000 -1.5029040059909518E-005 + 234.18000000000001 -1.4815405589864381E-005 + 234.24000000000001 -1.4592583748187845E-005 + 234.30000000000001 -1.4360640484922993E-005 + 234.36000000000001 -1.4119661327690333E-005 + 234.42000000000002 -1.3869750807580703E-005 + 234.47999999999996 -1.3611038501269270E-005 + 234.53999999999996 -1.3343677708631600E-005 + 234.59999999999997 -1.3067849347552788E-005 + 234.65999999999997 -1.2783760134819908E-005 + 234.71999999999997 -1.2491643630078226E-005 + 234.77999999999997 -1.2191759095120630E-005 + 234.83999999999997 -1.1884389117707728E-005 + 234.89999999999998 -1.1569833993036917E-005 + 234.95999999999998 -1.1248410287067179E-005 + 235.01999999999998 -1.0920447586234650E-005 + 235.07999999999998 -1.0586283373796696E-005 + 235.13999999999999 -1.0246261442693966E-005 + 235.19999999999999 -9.9007291800243720E-006 + 235.25999999999999 -9.5500372545074505E-006 + 235.31999999999999 -9.1945414898025212E-006 + 235.38000000000000 -8.8346036142994523E-006 + 235.44000000000000 -8.4705952172526392E-006 + 235.50000000000000 -8.1029022874524794E-006 + 235.56000000000000 -7.7319316906072184E-006 + 235.62000000000000 -7.3581130853842944E-006 + 235.68000000000001 -6.9819053301180921E-006 + 235.74000000000001 -6.6038013289430695E-006 + 235.80000000000001 -6.2243267641512792E-006 + 235.86000000000001 -5.8440447391960196E-006 + 235.92000000000002 -5.4635501318763963E-006 + 235.97999999999996 -5.0834686062406882E-006 + 236.03999999999996 -4.7044478626029219E-006 + 236.09999999999997 -4.3271530624918568E-006 + 236.15999999999997 -3.9522559246137957E-006 + 236.21999999999997 -3.5804266875770374E-006 + 236.27999999999997 -3.2123236419950768E-006 + 236.33999999999997 -2.8485826360546686E-006 + 236.39999999999998 -2.4898119274403365E-006 + 236.45999999999998 -2.1365814380727625E-006 + 236.51999999999998 -1.7894211476496238E-006 + 236.57999999999998 -1.4488163931864831E-006 + 236.63999999999999 -1.1152065857011125E-006 + 236.69999999999999 -7.8898626655464642E-007 + 236.75999999999999 -4.7050732891954214E-007 + 236.81999999999999 -1.6008156520797020E-007 + 236.88000000000000 1.4201422647019224E-007 + 236.94000000000000 4.3553621396888369E-007 + 237.00000000000000 7.2026871504363578E-007 + 237.06000000000000 9.9602202246537125E-007 + 237.12000000000000 1.2626305300477824E-006 + 237.18000000000001 1.5199525489048824E-006 + 237.24000000000001 1.7678710920772505E-006 + 237.30000000000001 2.0062946207870979E-006 + 237.36000000000001 2.2351600929095443E-006 + 237.42000000000002 2.4544356518080220E-006 + 237.47999999999996 2.6641224557271518E-006 + 237.53999999999996 2.8642575876689344E-006 + 237.59999999999997 3.0549147056147579E-006 + 237.65999999999997 3.2362041177705446E-006 + 237.71999999999997 3.4082722686405778E-006 + 237.77999999999997 3.5712992188404108E-006 + 237.83999999999997 3.7254943333169858E-006 + 237.89999999999998 3.8710930952507227E-006 + 237.95999999999998 4.0083511609316578E-006 + 238.01999999999998 4.1375398430474529E-006 + 238.07999999999998 4.2589408002980588E-006 + 238.13999999999999 4.3728429661851318E-006 + 238.19999999999999 4.4795382736691919E-006 + 238.25999999999999 4.5793201791945236E-006 + 238.31999999999999 4.6724829224854882E-006 + 238.38000000000000 4.7593230507637907E-006 + 238.44000000000000 4.8401404327720660E-006 + 238.50000000000000 4.9152412021830143E-006 + 238.56000000000000 4.9849411118216542E-006 + 238.62000000000000 5.0495684941403425E-006 + 238.68000000000001 5.1094661613710262E-006 + 238.74000000000001 5.1649953674694319E-006 + 238.80000000000001 5.2165354371430305E-006 + 238.86000000000001 5.2644835823909931E-006 + 238.92000000000002 5.3092538088718716E-006 + 238.97999999999996 5.3512747075688002E-006 + 239.03999999999996 5.3909856071989279E-006 + 239.09999999999997 5.4288338190100801E-006 + 239.15999999999997 5.4652696506809626E-006 + 239.21999999999997 5.5007439231635171E-006 + 239.27999999999997 5.5357057122633016E-006 + 239.33999999999997 5.5706007809477066E-006 + 239.39999999999998 5.6058725305089661E-006 + 239.45999999999998 5.6419653354137177E-006 + 239.51999999999998 5.6793255815699104E-006 + 239.57999999999998 5.7184108764533475E-006 + 239.63999999999999 5.7596942476474026E-006 + 239.69999999999999 5.8036720051584977E-006 + 239.75999999999999 5.8508731668410610E-006 + 239.81999999999999 5.9018656929698466E-006 + 239.88000000000000 5.9572630743813920E-006 + 239.94000000000000 6.0177306962860332E-006 + 240.00000000000000 6.0839908474482355E-006 + 240.06000000000000 6.1568241171130469E-006 + 240.12000000000000 6.2370709627630042E-006 + 240.18000000000001 6.3256296953482261E-006 + 240.24000000000001 6.4234566880174353E-006 + 240.30000000000001 6.5315604869504729E-006 + 240.36000000000001 6.6510011231914763E-006 + 240.42000000000002 6.7828839887204234E-006 + 240.47999999999996 6.9283571397478531E-006 + 240.53999999999996 7.0886095197730138E-006 + 240.59999999999997 7.2648690054915085E-006 + 240.65999999999997 7.4584001475937653E-006 + 240.71999999999997 7.6705061774035226E-006 + 240.77999999999997 7.9025296976054462E-006 + 240.83999999999997 8.1558561436299206E-006 + 240.89999999999998 8.4319133188367423E-006 + 240.95999999999998 8.7321770216414288E-006 + 241.01999999999998 9.0581696452092610E-006 + 241.07999999999998 9.4114646010617972E-006 + 241.13999999999999 9.7936854862382534E-006 + 241.19999999999999 1.0206503018561176E-005 + 241.25999999999999 1.0651638558545647E-005 + 241.31999999999999 1.1130854472028449E-005 + 241.38000000000000 1.1645954289129663E-005 + 241.44000000000000 1.2198777925713654E-005 + 241.50000000000000 1.2791195486412807E-005 + 241.56000000000000 1.3425108136048507E-005 + 241.62000000000000 1.4102439222237699E-005 + 241.68000000000001 1.4825134332894310E-005 + 241.74000000000001 1.5595159148212281E-005 + 241.80000000000001 1.6414504536782019E-005 + 241.86000000000001 1.7285178970205898E-005 + 241.92000000000002 1.8209216892832770E-005 + 241.97999999999996 1.9188679140249517E-005 + 242.03999999999996 2.0225654197324087E-005 + 242.09999999999997 2.1322264936932171E-005 + 242.15999999999997 2.2480665802846617E-005 + 242.21999999999997 2.3703042429662797E-005 + 242.27999999999997 2.4991614362276935E-005 + 242.33999999999997 2.6348626653987859E-005 + 242.39999999999998 2.7776347968005009E-005 + 242.45999999999998 2.9277062780091721E-005 + 242.51999999999998 3.0853067196629843E-005 + 242.57999999999998 3.2506652787639309E-005 + 242.63999999999999 3.4240102194116800E-005 + 242.69999999999999 3.6055678001295263E-005 + 242.75999999999999 3.7955617225218017E-005 + 242.81999999999999 3.9942119028546681E-005 + 242.88000000000000 4.2017339456271016E-005 + 242.94000000000000 4.4183391355858074E-005 + 243.00000000000000 4.6442340464745982E-005 + 243.06000000000000 4.8796191147349507E-005 + 243.12000000000000 5.1246910001698782E-005 + 243.18000000000001 5.3796407059717129E-005 + 243.24000000000001 5.6446540667651357E-005 + 243.30000000000001 5.9199123747384444E-005 + 243.36000000000001 6.2055915165893359E-005 + 243.42000000000002 6.5018617478687871E-005 + 243.47999999999996 6.8088881438549295E-005 + 243.53999999999996 7.1268294002376178E-005 + 243.59999999999997 7.4558356801436771E-005 + 243.65999999999997 7.7960494518561306E-005 + 243.71999999999997 8.1476029412543531E-005 + 243.77999999999997 8.5106171430033060E-005 + 243.83999999999997 8.8851979548738665E-005 + 243.89999999999998 9.2714394089512129E-005 + 243.95999999999998 9.6694163559990089E-005 + 244.01999999999998 1.0079187084723393E-004 + 244.07999999999998 1.0500787738385519E-004 + 244.13999999999999 1.0934236352711132E-004 + 244.19999999999999 1.1379526397400826E-004 + 244.25999999999999 1.1836627839852575E-004 + 244.31999999999999 1.2305486949331626E-004 + 244.38000000000000 1.2786024535467788E-004 + 244.44000000000000 1.3278136233135852E-004 + 244.50000000000000 1.3781690469056063E-004 + 244.56000000000000 1.4296527696848365E-004 + 244.62000000000000 1.4822461900537557E-004 + 244.68000000000001 1.5359279871449057E-004 + 244.74000000000001 1.5906736796785038E-004 + 244.80000000000001 1.6464560790602667E-004 + 244.86000000000001 1.7032449299916026E-004 + 244.92000000000002 1.7610068918918947E-004 + 244.97999999999996 1.8197055266421525E-004 + 245.03999999999996 1.8793009641725506E-004 + 245.09999999999997 1.9397502430367711E-004 + 245.15999999999997 2.0010072143679579E-004 + 245.21999999999997 2.0630225809678790E-004 + 245.27999999999997 2.1257432570331896E-004 + 245.33999999999997 2.1891132832384716E-004 + 245.39999999999998 2.2530731847694764E-004 + 245.45999999999998 2.3175602608071315E-004 + 245.51999999999998 2.3825089255229733E-004 + 245.57999999999998 2.4478504780537399E-004 + 245.63999999999999 2.5135130105777514E-004 + 245.69999999999999 2.5794217104662260E-004 + 245.75999999999999 2.6454991760510214E-004 + 245.81999999999999 2.7116648577086124E-004 + 245.88000000000000 2.7778357126313698E-004 + 245.94000000000000 2.8439263569123767E-004 + 246.00000000000000 2.9098483684254517E-004 + 246.06000000000000 2.9755114736401624E-004 + 246.12000000000000 3.0408234101968786E-004 + 246.18000000000001 3.1056886871259405E-004 + 246.24000000000001 3.1700109571319287E-004 + 246.30000000000001 3.2336912680758440E-004 + 246.36000000000001 3.2966294097628809E-004 + 246.42000000000002 3.3587238651314817E-004 + 246.47999999999996 3.4198716572904413E-004 + 246.53999999999996 3.4799690017150368E-004 + 246.59999999999997 3.5389114250134688E-004 + 246.65999999999997 3.5965944827105078E-004 + 246.71999999999997 3.6529134601496615E-004 + 246.77999999999997 3.7077634137716641E-004 + 246.83999999999997 3.7610405450676210E-004 + 246.89999999999998 3.8126417405604749E-004 + 246.95999999999998 3.8624648677404721E-004 + 247.01999999999998 3.9104090755925583E-004 + 247.07999999999998 3.9563752878113000E-004 + 247.13999999999999 4.0002658149070357E-004 + 247.19999999999999 4.0419849164498030E-004 + 247.25999999999999 4.0814393646510731E-004 + 247.31999999999999 4.1185377597816747E-004 + 247.38000000000000 4.1531915495120637E-004 + 247.44000000000000 4.1853146359864649E-004 + 247.50000000000000 4.2148237722892847E-004 + 247.56000000000000 4.2416386131807413E-004 + 247.62000000000000 4.2656824568713562E-004 + 247.68000000000001 4.2868816549550108E-004 + 247.74000000000001 4.3051664928843989E-004 + 247.80000000000001 4.3204713255720248E-004 + 247.86000000000001 4.3327349108809827E-004 + 247.92000000000002 4.3419000936310555E-004 + 247.97999999999996 4.3479142106336957E-004 + 248.03999999999996 4.3507307203179504E-004 + 248.09999999999997 4.3503070389660429E-004 + 248.15999999999997 4.3466062798767040E-004 + 248.21999999999997 4.3395973342923286E-004 + 248.27999999999997 4.3292547873625113E-004 + 248.33999999999997 4.3155584433750890E-004 + 248.39999999999998 4.2984947275332487E-004 + 248.45999999999998 4.2780554057688882E-004 + 248.51999999999998 4.2542382134036326E-004 + 248.57999999999998 4.2270466983050143E-004 + 248.63999999999999 4.1964908196603039E-004 + 248.69999999999999 4.1625859700468221E-004 + 248.75999999999999 4.1253541327346304E-004 + 248.81999999999999 4.0848227937759522E-004 + 248.88000000000000 4.0410247810344295E-004 + 248.94000000000000 3.9940000300848301E-004 + 249.00000000000000 3.9437932487000393E-004 + 249.06000000000000 3.8904558889902359E-004 + 249.12000000000000 3.8340447497445409E-004 + 249.18000000000001 3.7746220607157762E-004 + 249.24000000000001 3.7122563962810925E-004 + 249.30000000000001 3.6470212046946622E-004 + 249.36000000000001 3.5789955862882886E-004 + 249.42000000000002 3.5082637732539233E-004 + 249.47999999999996 3.4349151239651988E-004 + 249.53999999999996 3.3590432521166531E-004 + 249.59999999999997 3.2807469875754058E-004 + 249.65999999999997 3.2001288359981598E-004 + 249.71999999999997 3.1172955778018105E-004 + 249.77999999999997 3.0323578645751555E-004 + 249.83999999999997 2.9454295218485707E-004 + 249.89999999999998 2.8566277193165396E-004 + 249.95999999999998 2.7660722435287200E-004 + 250.01999999999998 2.6738857929438836E-004 + 250.07999999999998 2.5801934270928799E-004 + 250.13999999999999 2.4851221070611976E-004 + 250.19999999999999 2.3888010201809020E-004 + 250.25999999999999 2.2913604254359835E-004 + 250.31999999999999 2.1929325907030174E-004 + 250.38000000000000 2.0936504460476759E-004 + 250.44000000000000 1.9936475868644014E-004 + 250.50000000000000 1.8930583750746891E-004 + 250.56000000000000 1.7920171463373645E-004 + 250.62000000000000 1.6906577640910946E-004 + 250.68000000000001 1.5891138545377607E-004 + 250.74000000000001 1.4875180923436314E-004 + 250.80000000000001 1.3860018393965922E-004 + 250.86000000000001 1.2846944771503392E-004 + 250.92000000000002 1.1837236962949143E-004 + 250.97999999999996 1.0832146682468124E-004 + 251.03999999999996 9.8328990259113734E-005 + 251.09999999999997 8.8406896518512944E-005 + 251.15999999999997 7.8566807744371328E-005 + 251.21999999999997 6.8820005340750705E-005 + 251.27999999999997 5.9177395964752881E-005 + 251.33999999999997 4.9649501286830857E-005 + 251.39999999999998 4.0246434510025312E-005 + 251.45999999999998 3.0977903639364879E-005 + 251.51999999999998 2.1853160631434358E-005 + 251.57999999999998 1.2881050818790642E-005 + 251.63999999999999 4.0699395818503102E-006 + 251.69999999999999 -4.5722422431520171E-006 + 251.75999999999999 -1.3038043497501211E-005 + 251.81999999999999 -2.1320489287154662E-005 + 251.88000000000000 -2.9413076118301164E-005 + 251.94000000000000 -3.7309800154508737E-005 diff --git a/seisflows/tests/test_data/test_solver/001/traces/syn/AA.S000001.BXY.semd b/seisflows/tests/test_data/test_solver/001/traces/syn/AA.S000001.BXY.semd new file mode 100644 index 00000000..04deb847 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/001/traces/syn/AA.S000001.BXY.semd @@ -0,0 +1,5000 @@ + -48.000000000000000 0.0000000000000000 + -47.939999999999998 0.0000000000000000 + -47.880000000000003 0.0000000000000000 + -47.820000000000000 0.0000000000000000 + -47.759999999999998 0.0000000000000000 + -47.700000000000003 0.0000000000000000 + -47.640000000000001 0.0000000000000000 + -47.579999999999998 0.0000000000000000 + -47.520000000000003 0.0000000000000000 + -47.460000000000001 0.0000000000000000 + -47.399999999999999 0.0000000000000000 + -47.340000000000003 0.0000000000000000 + -47.280000000000001 0.0000000000000000 + -47.219999999999999 0.0000000000000000 + -47.159999999999997 0.0000000000000000 + -47.100000000000001 0.0000000000000000 + -47.039999999999999 0.0000000000000000 + -46.979999999999997 0.0000000000000000 + -46.920000000000002 0.0000000000000000 + -46.859999999999999 0.0000000000000000 + -46.799999999999997 0.0000000000000000 + -46.740000000000002 0.0000000000000000 + -46.680000000000000 0.0000000000000000 + -46.619999999999997 0.0000000000000000 + -46.560000000000002 0.0000000000000000 + -46.500000000000000 0.0000000000000000 + -46.439999999999998 0.0000000000000000 + -46.380000000000003 0.0000000000000000 + -46.320000000000000 0.0000000000000000 + -46.259999999999998 0.0000000000000000 + -46.200000000000003 0.0000000000000000 + -46.140000000000001 0.0000000000000000 + -46.079999999999998 0.0000000000000000 + -46.020000000000003 0.0000000000000000 + -45.960000000000001 0.0000000000000000 + -45.899999999999999 0.0000000000000000 + -45.840000000000003 0.0000000000000000 + -45.780000000000001 0.0000000000000000 + -45.719999999999999 0.0000000000000000 + -45.659999999999997 0.0000000000000000 + -45.600000000000001 0.0000000000000000 + -45.539999999999999 0.0000000000000000 + -45.479999999999997 0.0000000000000000 + -45.420000000000002 0.0000000000000000 + -45.359999999999999 0.0000000000000000 + -45.299999999999997 0.0000000000000000 + -45.240000000000002 0.0000000000000000 + -45.180000000000000 0.0000000000000000 + -45.119999999999997 0.0000000000000000 + -45.060000000000002 0.0000000000000000 + -45.000000000000000 0.0000000000000000 + -44.939999999999998 0.0000000000000000 + -44.880000000000003 0.0000000000000000 + -44.820000000000000 0.0000000000000000 + -44.759999999999998 0.0000000000000000 + -44.700000000000003 0.0000000000000000 + -44.640000000000001 0.0000000000000000 + -44.579999999999998 0.0000000000000000 + -44.520000000000003 0.0000000000000000 + -44.460000000000001 0.0000000000000000 + -44.399999999999999 0.0000000000000000 + -44.340000000000003 0.0000000000000000 + -44.280000000000001 0.0000000000000000 + -44.219999999999999 0.0000000000000000 + -44.159999999999997 0.0000000000000000 + -44.100000000000001 0.0000000000000000 + -44.039999999999999 0.0000000000000000 + -43.980000000000004 0.0000000000000000 + -43.920000000000002 0.0000000000000000 + -43.859999999999999 0.0000000000000000 + -43.799999999999997 0.0000000000000000 + -43.740000000000002 0.0000000000000000 + -43.680000000000000 0.0000000000000000 + -43.619999999999997 0.0000000000000000 + -43.560000000000002 0.0000000000000000 + -43.500000000000000 0.0000000000000000 + -43.439999999999998 0.0000000000000000 + -43.380000000000003 0.0000000000000000 + -43.320000000000000 0.0000000000000000 + -43.259999999999998 0.0000000000000000 + -43.200000000000003 0.0000000000000000 + -43.140000000000001 0.0000000000000000 + -43.079999999999998 0.0000000000000000 + -43.020000000000003 0.0000000000000000 + -42.960000000000001 0.0000000000000000 + -42.899999999999999 0.0000000000000000 + -42.840000000000003 0.0000000000000000 + -42.780000000000001 0.0000000000000000 + -42.719999999999999 0.0000000000000000 + -42.659999999999997 0.0000000000000000 + -42.600000000000001 0.0000000000000000 + -42.539999999999999 0.0000000000000000 + -42.480000000000004 0.0000000000000000 + -42.420000000000002 0.0000000000000000 + -42.359999999999999 0.0000000000000000 + -42.299999999999997 0.0000000000000000 + -42.240000000000002 0.0000000000000000 + -42.180000000000000 0.0000000000000000 + -42.119999999999997 0.0000000000000000 + -42.060000000000002 0.0000000000000000 + -42.000000000000000 0.0000000000000000 + -41.939999999999998 0.0000000000000000 + -41.880000000000003 0.0000000000000000 + -41.820000000000000 0.0000000000000000 + -41.759999999999998 0.0000000000000000 + -41.700000000000003 0.0000000000000000 + -41.640000000000001 0.0000000000000000 + -41.579999999999998 0.0000000000000000 + -41.520000000000003 0.0000000000000000 + -41.460000000000001 0.0000000000000000 + -41.399999999999999 0.0000000000000000 + -41.340000000000003 0.0000000000000000 + -41.280000000000001 0.0000000000000000 + -41.219999999999999 0.0000000000000000 + -41.159999999999997 0.0000000000000000 + -41.100000000000001 0.0000000000000000 + -41.039999999999999 0.0000000000000000 + -40.980000000000004 0.0000000000000000 + -40.920000000000002 0.0000000000000000 + -40.859999999999999 0.0000000000000000 + -40.799999999999997 0.0000000000000000 + -40.740000000000002 0.0000000000000000 + -40.680000000000000 0.0000000000000000 + -40.619999999999997 0.0000000000000000 + -40.560000000000002 0.0000000000000000 + -40.500000000000000 0.0000000000000000 + -40.439999999999998 0.0000000000000000 + -40.380000000000003 0.0000000000000000 + -40.320000000000000 0.0000000000000000 + -40.259999999999998 0.0000000000000000 + -40.200000000000003 0.0000000000000000 + -40.140000000000001 0.0000000000000000 + -40.079999999999998 0.0000000000000000 + -40.020000000000003 0.0000000000000000 + -39.960000000000001 0.0000000000000000 + -39.899999999999999 0.0000000000000000 + -39.840000000000003 0.0000000000000000 + -39.780000000000001 0.0000000000000000 + -39.719999999999999 0.0000000000000000 + -39.659999999999997 0.0000000000000000 + -39.600000000000001 0.0000000000000000 + -39.539999999999999 0.0000000000000000 + -39.480000000000004 0.0000000000000000 + -39.420000000000002 0.0000000000000000 + -39.359999999999999 0.0000000000000000 + -39.299999999999997 0.0000000000000000 + -39.240000000000002 0.0000000000000000 + -39.180000000000000 0.0000000000000000 + -39.120000000000005 0.0000000000000000 + -39.060000000000002 0.0000000000000000 + -39.000000000000000 0.0000000000000000 + -38.939999999999998 0.0000000000000000 + -38.880000000000003 0.0000000000000000 + -38.820000000000000 0.0000000000000000 + -38.759999999999998 0.0000000000000000 + -38.700000000000003 0.0000000000000000 + -38.640000000000001 0.0000000000000000 + -38.579999999999998 0.0000000000000000 + -38.519999999999996 0.0000000000000000 + -38.460000000000001 0.0000000000000000 + -38.399999999999999 0.0000000000000000 + -38.340000000000003 0.0000000000000000 + -38.280000000000001 0.0000000000000000 + -38.219999999999999 0.0000000000000000 + -38.159999999999997 0.0000000000000000 + -38.100000000000001 0.0000000000000000 + -38.039999999999999 0.0000000000000000 + -37.980000000000004 0.0000000000000000 + -37.920000000000002 0.0000000000000000 + -37.859999999999999 0.0000000000000000 + -37.799999999999997 0.0000000000000000 + -37.740000000000002 0.0000000000000000 + -37.680000000000000 0.0000000000000000 + -37.620000000000005 0.0000000000000000 + -37.560000000000002 0.0000000000000000 + -37.500000000000000 0.0000000000000000 + -37.439999999999998 0.0000000000000000 + -37.380000000000003 0.0000000000000000 + -37.320000000000000 0.0000000000000000 + -37.259999999999998 0.0000000000000000 + -37.200000000000003 0.0000000000000000 + -37.140000000000001 0.0000000000000000 + -37.079999999999998 0.0000000000000000 + -37.019999999999996 0.0000000000000000 + -36.960000000000001 0.0000000000000000 + -36.899999999999999 0.0000000000000000 + -36.840000000000003 0.0000000000000000 + -36.780000000000001 0.0000000000000000 + -36.719999999999999 0.0000000000000000 + -36.659999999999997 0.0000000000000000 + -36.600000000000001 0.0000000000000000 + -36.539999999999999 0.0000000000000000 + -36.480000000000004 0.0000000000000000 + -36.420000000000002 0.0000000000000000 + -36.359999999999999 0.0000000000000000 + -36.299999999999997 0.0000000000000000 + -36.240000000000002 0.0000000000000000 + -36.180000000000000 0.0000000000000000 + -36.120000000000005 0.0000000000000000 + -36.060000000000002 0.0000000000000000 + -36.000000000000000 0.0000000000000000 + -35.939999999999998 0.0000000000000000 + -35.880000000000003 0.0000000000000000 + -35.820000000000000 0.0000000000000000 + -35.759999999999998 0.0000000000000000 + -35.700000000000003 0.0000000000000000 + -35.640000000000001 0.0000000000000000 + -35.579999999999998 0.0000000000000000 + -35.519999999999996 0.0000000000000000 + -35.460000000000001 0.0000000000000000 + -35.399999999999999 0.0000000000000000 + -35.340000000000003 0.0000000000000000 + -35.280000000000001 0.0000000000000000 + -35.219999999999999 0.0000000000000000 + -35.159999999999997 0.0000000000000000 + -35.100000000000001 0.0000000000000000 + -35.039999999999999 0.0000000000000000 + -34.980000000000004 0.0000000000000000 + -34.920000000000002 0.0000000000000000 + -34.859999999999999 0.0000000000000000 + -34.799999999999997 0.0000000000000000 + -34.740000000000002 0.0000000000000000 + -34.680000000000000 0.0000000000000000 + -34.620000000000005 0.0000000000000000 + -34.560000000000002 0.0000000000000000 + -34.500000000000000 0.0000000000000000 + -34.439999999999998 0.0000000000000000 + -34.380000000000003 0.0000000000000000 + -34.320000000000000 0.0000000000000000 + -34.259999999999998 0.0000000000000000 + -34.200000000000003 0.0000000000000000 + -34.140000000000001 0.0000000000000000 + -34.079999999999998 0.0000000000000000 + -34.020000000000003 0.0000000000000000 + -33.960000000000001 0.0000000000000000 + -33.899999999999999 0.0000000000000000 + -33.840000000000003 0.0000000000000000 + -33.780000000000001 0.0000000000000000 + -33.719999999999999 0.0000000000000000 + -33.659999999999997 0.0000000000000000 + -33.600000000000001 0.0000000000000000 + -33.539999999999999 0.0000000000000000 + -33.480000000000004 0.0000000000000000 + -33.420000000000002 0.0000000000000000 + -33.359999999999999 0.0000000000000000 + -33.299999999999997 0.0000000000000000 + -33.240000000000002 0.0000000000000000 + -33.180000000000000 0.0000000000000000 + -33.120000000000005 0.0000000000000000 + -33.060000000000002 0.0000000000000000 + -33.000000000000000 0.0000000000000000 + -32.939999999999998 0.0000000000000000 + -32.880000000000003 0.0000000000000000 + -32.820000000000000 0.0000000000000000 + -32.759999999999998 0.0000000000000000 + -32.700000000000003 0.0000000000000000 + -32.640000000000001 0.0000000000000000 + -32.579999999999998 0.0000000000000000 + -32.520000000000003 0.0000000000000000 + -32.460000000000001 0.0000000000000000 + -32.399999999999999 0.0000000000000000 + -32.340000000000003 0.0000000000000000 + -32.280000000000001 0.0000000000000000 + -32.219999999999999 0.0000000000000000 + -32.159999999999997 0.0000000000000000 + -32.100000000000001 0.0000000000000000 + -32.039999999999999 0.0000000000000000 + -31.980000000000000 0.0000000000000000 + -31.920000000000002 0.0000000000000000 + -31.859999999999999 0.0000000000000000 + -31.800000000000001 0.0000000000000000 + -31.740000000000002 0.0000000000000000 + -31.680000000000000 0.0000000000000000 + -31.620000000000001 0.0000000000000000 + -31.560000000000002 0.0000000000000000 + -31.500000000000000 0.0000000000000000 + -31.440000000000001 0.0000000000000000 + -31.379999999999999 0.0000000000000000 + -31.320000000000000 0.0000000000000000 + -31.260000000000002 0.0000000000000000 + -31.199999999999999 0.0000000000000000 + -31.140000000000001 0.0000000000000000 + -31.080000000000002 0.0000000000000000 + -31.020000000000000 0.0000000000000000 + -30.960000000000001 0.0000000000000000 + -30.900000000000002 0.0000000000000000 + -30.840000000000000 0.0000000000000000 + -30.780000000000001 0.0000000000000000 + -30.719999999999999 0.0000000000000000 + -30.660000000000000 0.0000000000000000 + -30.600000000000001 0.0000000000000000 + -30.539999999999999 0.0000000000000000 + -30.480000000000000 0.0000000000000000 + -30.420000000000002 0.0000000000000000 + -30.359999999999999 0.0000000000000000 + -30.300000000000001 0.0000000000000000 + -30.240000000000002 0.0000000000000000 + -30.180000000000000 0.0000000000000000 + -30.120000000000001 0.0000000000000000 + -30.060000000000002 0.0000000000000000 + -30.000000000000000 0.0000000000000000 + -29.940000000000001 0.0000000000000000 + -29.879999999999999 0.0000000000000000 + -29.820000000000000 0.0000000000000000 + -29.760000000000002 0.0000000000000000 + -29.699999999999999 0.0000000000000000 + -29.640000000000001 0.0000000000000000 + -29.580000000000002 0.0000000000000000 + -29.520000000000000 0.0000000000000000 + -29.460000000000001 0.0000000000000000 + -29.400000000000002 0.0000000000000000 + -29.340000000000000 0.0000000000000000 + -29.280000000000001 0.0000000000000000 + -29.220000000000002 0.0000000000000000 + -29.160000000000000 0.0000000000000000 + -29.100000000000001 0.0000000000000000 + -29.039999999999999 0.0000000000000000 + -28.980000000000000 0.0000000000000000 + -28.920000000000002 0.0000000000000000 + -28.859999999999999 0.0000000000000000 + -28.800000000000001 0.0000000000000000 + -28.740000000000002 0.0000000000000000 + -28.680000000000000 0.0000000000000000 + -28.620000000000001 0.0000000000000000 + -28.560000000000002 0.0000000000000000 + -28.500000000000000 0.0000000000000000 + -28.440000000000001 0.0000000000000000 + -28.379999999999999 0.0000000000000000 + -28.320000000000000 0.0000000000000000 + -28.260000000000002 0.0000000000000000 + -28.199999999999999 0.0000000000000000 + -28.140000000000001 0.0000000000000000 + -28.080000000000002 0.0000000000000000 + -28.020000000000000 0.0000000000000000 + -27.960000000000001 0.0000000000000000 + -27.900000000000002 0.0000000000000000 + -27.840000000000000 0.0000000000000000 + -27.780000000000001 0.0000000000000000 + -27.720000000000002 0.0000000000000000 + -27.660000000000000 0.0000000000000000 + -27.600000000000001 0.0000000000000000 + -27.539999999999999 0.0000000000000000 + -27.480000000000000 0.0000000000000000 + -27.420000000000002 0.0000000000000000 + -27.359999999999999 0.0000000000000000 + -27.300000000000001 0.0000000000000000 + -27.240000000000002 0.0000000000000000 + -27.180000000000000 0.0000000000000000 + -27.120000000000001 0.0000000000000000 + -27.060000000000002 0.0000000000000000 + -27.000000000000000 0.0000000000000000 + -26.940000000000001 0.0000000000000000 + -26.880000000000003 0.0000000000000000 + -26.820000000000000 0.0000000000000000 + -26.760000000000002 0.0000000000000000 + -26.699999999999999 0.0000000000000000 + -26.640000000000001 0.0000000000000000 + -26.580000000000002 0.0000000000000000 + -26.520000000000000 0.0000000000000000 + -26.460000000000001 0.0000000000000000 + -26.400000000000002 0.0000000000000000 + -26.340000000000000 0.0000000000000000 + -26.280000000000001 0.0000000000000000 + -26.220000000000002 0.0000000000000000 + -26.160000000000000 0.0000000000000000 + -26.100000000000001 0.0000000000000000 + -26.039999999999999 0.0000000000000000 + -25.980000000000000 0.0000000000000000 + -25.920000000000002 0.0000000000000000 + -25.859999999999999 0.0000000000000000 + -25.800000000000001 0.0000000000000000 + -25.740000000000002 0.0000000000000000 + -25.680000000000000 0.0000000000000000 + -25.620000000000001 0.0000000000000000 + -25.560000000000002 0.0000000000000000 + -25.500000000000000 0.0000000000000000 + -25.440000000000001 0.0000000000000000 + -25.380000000000003 0.0000000000000000 + -25.320000000000000 0.0000000000000000 + -25.260000000000002 0.0000000000000000 + -25.199999999999999 0.0000000000000000 + -25.140000000000001 0.0000000000000000 + -25.080000000000002 0.0000000000000000 + -25.020000000000000 0.0000000000000000 + -24.960000000000001 0.0000000000000000 + -24.900000000000002 0.0000000000000000 + -24.840000000000000 0.0000000000000000 + -24.780000000000001 0.0000000000000000 + -24.720000000000002 0.0000000000000000 + -24.660000000000000 0.0000000000000000 + -24.600000000000001 0.0000000000000000 + -24.539999999999999 0.0000000000000000 + -24.480000000000000 0.0000000000000000 + -24.420000000000002 0.0000000000000000 + -24.359999999999999 0.0000000000000000 + -24.300000000000001 0.0000000000000000 + -24.240000000000002 0.0000000000000000 + -24.180000000000000 0.0000000000000000 + -24.120000000000001 0.0000000000000000 + -24.060000000000002 0.0000000000000000 + -24.000000000000000 0.0000000000000000 + -23.940000000000001 0.0000000000000000 + -23.880000000000003 0.0000000000000000 + -23.820000000000000 0.0000000000000000 + -23.760000000000002 0.0000000000000000 + -23.699999999999999 0.0000000000000000 + -23.640000000000001 0.0000000000000000 + -23.580000000000002 0.0000000000000000 + -23.520000000000000 0.0000000000000000 + -23.460000000000001 0.0000000000000000 + -23.400000000000002 0.0000000000000000 + -23.340000000000000 0.0000000000000000 + -23.280000000000001 0.0000000000000000 + -23.220000000000002 0.0000000000000000 + -23.160000000000000 0.0000000000000000 + -23.100000000000001 0.0000000000000000 + -23.039999999999999 0.0000000000000000 + -22.980000000000000 0.0000000000000000 + -22.920000000000002 0.0000000000000000 + -22.859999999999999 0.0000000000000000 + -22.800000000000001 0.0000000000000000 + -22.740000000000002 0.0000000000000000 + -22.680000000000000 0.0000000000000000 + -22.620000000000001 0.0000000000000000 + -22.560000000000002 0.0000000000000000 + -22.500000000000000 0.0000000000000000 + -22.440000000000001 0.0000000000000000 + -22.380000000000003 0.0000000000000000 + -22.320000000000000 0.0000000000000000 + -22.260000000000002 0.0000000000000000 + -22.199999999999999 0.0000000000000000 + -22.140000000000001 0.0000000000000000 + -22.080000000000002 0.0000000000000000 + -22.020000000000000 0.0000000000000000 + -21.960000000000001 0.0000000000000000 + -21.900000000000002 0.0000000000000000 + -21.840000000000000 0.0000000000000000 + -21.780000000000001 0.0000000000000000 + -21.720000000000002 0.0000000000000000 + -21.660000000000000 0.0000000000000000 + -21.600000000000001 0.0000000000000000 + -21.540000000000003 0.0000000000000000 + -21.480000000000000 0.0000000000000000 + -21.420000000000002 0.0000000000000000 + -21.359999999999999 0.0000000000000000 + -21.300000000000001 0.0000000000000000 + -21.240000000000002 0.0000000000000000 + -21.180000000000000 0.0000000000000000 + -21.120000000000001 0.0000000000000000 + -21.060000000000002 0.0000000000000000 + -21.000000000000000 0.0000000000000000 + -20.940000000000001 0.0000000000000000 + -20.880000000000003 0.0000000000000000 + -20.820000000000000 0.0000000000000000 + -20.760000000000002 0.0000000000000000 + -20.699999999999999 0.0000000000000000 + -20.640000000000001 0.0000000000000000 + -20.580000000000002 0.0000000000000000 + -20.520000000000000 0.0000000000000000 + -20.460000000000001 0.0000000000000000 + -20.400000000000002 0.0000000000000000 + -20.340000000000000 0.0000000000000000 + -20.280000000000001 0.0000000000000000 + -20.220000000000002 0.0000000000000000 + -20.160000000000000 0.0000000000000000 + -20.100000000000001 0.0000000000000000 + -20.040000000000003 0.0000000000000000 + -19.980000000000000 0.0000000000000000 + -19.920000000000002 0.0000000000000000 + -19.859999999999999 0.0000000000000000 + -19.800000000000001 0.0000000000000000 + -19.740000000000002 0.0000000000000000 + -19.680000000000000 0.0000000000000000 + -19.620000000000001 0.0000000000000000 + -19.560000000000002 0.0000000000000000 + -19.500000000000000 0.0000000000000000 + -19.440000000000001 0.0000000000000000 + -19.380000000000003 0.0000000000000000 + -19.320000000000000 0.0000000000000000 + -19.260000000000002 0.0000000000000000 + -19.200000000000003 0.0000000000000000 + -19.140000000000001 0.0000000000000000 + -19.080000000000002 0.0000000000000000 + -19.020000000000000 0.0000000000000000 + -18.960000000000001 0.0000000000000000 + -18.900000000000002 0.0000000000000000 + -18.840000000000000 0.0000000000000000 + -18.780000000000001 0.0000000000000000 + -18.720000000000002 0.0000000000000000 + -18.660000000000000 0.0000000000000000 + -18.600000000000001 0.0000000000000000 + -18.540000000000003 0.0000000000000000 + -18.480000000000000 0.0000000000000000 + -18.420000000000002 0.0000000000000000 + -18.359999999999999 0.0000000000000000 + -18.300000000000001 0.0000000000000000 + -18.240000000000002 0.0000000000000000 + -18.180000000000000 0.0000000000000000 + -18.120000000000001 0.0000000000000000 + -18.060000000000002 0.0000000000000000 + -18.000000000000000 -3.1308649263890069E-042 + -17.940000000000001 -1.0263037953741761E-041 + -17.880000000000003 -2.2349445420469944E-041 + -17.820000000000000 -4.0459676614783112E-041 + -17.760000000000002 -6.5799426492963895E-041 + -17.700000000000003 -9.9688185155535990E-041 + -17.640000000000001 -1.3444508544407607E-040 + -17.580000000000002 -1.7113317647124486E-040 + -17.520000000000000 -2.1013966437059021E-040 + -17.460000000000001 -2.5653033767623574E-040 + -17.400000000000002 -2.8987652000682505E-040 + -17.340000000000000 -3.1787416235680941E-040 + -17.280000000000001 -3.3946279490243668E-040 + -17.220000000000002 -3.5387978536587156E-040 + -17.160000000000000 -3.4625287616225199E-040 + -17.100000000000001 -3.1423354170407092E-040 + -17.040000000000003 -2.5571334800151435E-040 + -16.980000000000000 -1.6888549076740800E-040 + -16.920000000000002 -5.2251463920661093E-041 + -16.859999999999999 8.5950784816347441E-041 + -16.800000000000001 2.6656859246235407E-040 + -16.740000000000002 4.8849818484092871E-040 + -16.680000000000000 7.6194881237229768E-040 + -16.620000000000001 1.0802047026887183E-039 + -16.560000000000002 1.4552822012158752E-039 + -16.500000000000000 1.8862263788127733E-039 + -16.440000000000001 2.3728702722763539E-039 + -16.380000000000003 2.9252541577122861E-039 + -16.320000000000000 3.2313214681493864E-039 + -16.260000000000002 3.3010071873299407E-039 + -16.200000000000003 3.1006129394663646E-039 + -16.140000000000001 2.7190934195372805E-039 + -16.080000000000002 2.1073820900018305E-039 + -16.020000000000000 1.2454618149807239E-039 + -15.960000000000001 1.0606283445063297E-040 + -15.899999999999999 -1.1457182790387601E-039 + -15.840000000000003 -2.5321024479319194E-039 + -15.780000000000001 -4.0064337636979705E-039 + -15.719999999999999 -5.5469717594390147E-039 + -15.660000000000004 -7.1219825985336849E-039 + -15.600000000000001 -8.7457478257409731E-039 + -15.539999999999999 -1.1148346483153797E-038 + -15.480000000000004 -1.4422144129116979E-038 + -15.420000000000002 -1.8604675104986876E-038 + -15.359999999999999 -2.3721147917685969E-038 + -15.300000000000004 -2.9965312864733778E-038 + -15.240000000000002 -3.7057553190220472E-038 + -15.180000000000000 -4.5349990292014577E-038 + -15.120000000000005 -5.4450012046931455E-038 + -15.060000000000002 -6.4587690749543990E-038 + -15.000000000000000 -7.6400082781232856E-038 + -14.939999999999998 -9.0405119015934503E-038 + -14.880000000000003 -1.0360417659068693E-037 + -14.820000000000000 -1.1638219042828468E-037 + -14.759999999999998 -1.2902273640623844E-037 + -14.700000000000003 -1.4139490225906910E-037 + -14.640000000000001 -1.5336053757945018E-037 + -14.579999999999998 -1.6565831782074271E-037 + -14.520000000000003 -1.7964758608461787E-037 + -14.460000000000001 -2.0103974276759187E-037 + -14.399999999999999 -2.2757405477368206E-037 + -14.340000000000003 -2.6002690605953881E-037 + -14.280000000000001 -2.9886618160816572E-037 + -14.219999999999999 -3.4493236594751686E-037 + -14.160000000000004 -3.9868987709807463E-037 + -14.100000000000001 -4.6105751185665227E-037 + -14.039999999999999 -5.3287361548321461E-037 + -13.980000000000004 -6.1533328448137348E-037 + -13.920000000000002 -7.0169304556106666E-037 + -13.859999999999999 -7.9369271244585872E-037 + -13.800000000000004 -8.6233657073422679E-037 + -13.740000000000002 -9.3502356529063216E-037 + -13.680000000000000 -9.9724082170286461E-037 + -13.620000000000005 -1.0488610849154676E-036 + -13.560000000000002 -1.0800082819294766E-036 + -13.500000000000000 -1.1248719217629116E-036 + -13.439999999999998 -1.1755970561356017E-036 + -13.380000000000003 -1.2161761654737549E-036 + -13.320000000000000 -1.2503463912396699E-036 + -13.259999999999998 -1.2757453976972276E-036 + -13.200000000000003 -1.3019741874692514E-036 + -13.140000000000001 -1.3359885001469437E-036 + -13.079999999999998 -1.3896197315761193E-036 + -13.020000000000003 -1.4711203161975661E-036 + -12.960000000000001 -1.5955377121289121E-036 + -12.899999999999999 -1.7620002759591218E-036 + -12.840000000000003 -1.9718814116504828E-036 + -12.780000000000001 -2.2259430904266864E-036 + -12.719999999999999 -2.5234821533355268E-036 + -12.660000000000004 -2.8599121296510366E-036 + -12.600000000000001 -3.2697688852078187E-036 + -12.539999999999999 -3.7471262008528478E-036 + -12.480000000000004 -4.3213314842653204E-036 + -12.420000000000002 -4.9498685741728902E-036 + -12.359999999999999 -5.4870853300699624E-036 + -12.300000000000004 -5.9305433480326557E-036 + -12.240000000000002 -6.2825049487213451E-036 + -12.180000000000000 -6.5548210676300906E-036 + -12.120000000000005 -6.7712541004462531E-036 + -12.060000000000002 -7.0692117735647333E-036 + -12.000000000000000 -7.4167920192486662E-036 + -11.940000000000005 -7.8235311039383150E-036 + -11.880000000000003 -8.2994139853129249E-036 + -11.820000000000000 -8.7410603411717586E-036 + -11.759999999999998 -9.0807201399642619E-036 + -11.700000000000003 -9.1980885737177466E-036 + -11.640000000000001 -9.1946340998046648E-036 + -11.579999999999998 -8.9658960097481266E-036 + -11.520000000000003 -8.1659636609094401E-036 + -11.460000000000001 -6.5751427481230432E-036 + -11.399999999999999 -4.1851308167820655E-036 + -11.340000000000003 -1.2832158144966133E-036 + -11.280000000000001 2.1119176646636842E-036 + -11.219999999999999 5.6274821010728943E-036 + -11.160000000000004 8.9504590722259078E-036 + -11.100000000000001 1.1647070933904212E-035 + -11.039999999999999 1.3217909027669220E-035 + -10.980000000000004 1.3122031041809055E-035 + -10.920000000000002 1.0550985322087208E-035 + -10.859999999999999 4.9891380633759613E-036 + -10.800000000000004 -3.8622354846574770E-036 + -10.740000000000002 -1.6047145768680771E-035 + -10.680000000000000 -3.0949248319874727E-035 + -10.620000000000005 -4.7753738895490436E-035 + -10.560000000000002 -6.4869691269537168E-035 + -10.500000000000000 -8.0287845964269502E-035 + -10.440000000000005 -9.1629701471819160E-035 + -10.380000000000003 -9.6366191588096167E-035 + -10.320000000000000 -9.2154299088964772E-035 + -10.259999999999998 -7.7235763048443609E-035 + -10.200000000000003 -5.0926302265622112E-035 + -10.140000000000001 -1.4133714072739103E-035 + -10.079999999999998 3.0292366768165371E-035 + -10.020000000000003 7.7168480085571777E-035 + -9.9600000000000009 1.1888953433128000E-034 + -9.8999999999999986 1.4564581716726615E-034 + -9.8400000000000034 1.4597181062174593E-034 + -9.7800000000000011 1.0782291658528005E-034 + -9.7199999999999989 2.0045972489235000E-035 + -9.6600000000000037 -1.2572928630183434E-034 + -9.6000000000000014 -3.3288702381838815E-034 + -9.5399999999999991 -5.9761004119693699E-034 + -9.4800000000000040 -9.0646908453050161E-034 + -9.4200000000000017 -1.2348922042683080E-033 + -9.3599999999999994 -1.5462521241107865E-033 + -9.3000000000000043 -1.7921616196103587E-033 + -9.2400000000000020 -1.9143878445485487E-033 + -9.1799999999999997 -1.8486213976826564E-033 + -9.1200000000000045 -1.5302748456021499E-033 + -9.0600000000000023 -9.0228475831430190E-034 + -9.0000000000000000 7.5340231053246468E-035 + -8.9400000000000048 1.4147500748052736E-033 + -8.8800000000000026 3.0890842227844142E-033 + -8.8200000000000003 5.0219895112360090E-033 + -8.7599999999999980 7.0791685802495864E-033 + -8.7000000000000028 9.0634479495118640E-033 + -8.6400000000000006 1.0714929136905524E-032 + -8.5799999999999983 1.1717704021694277E-032 + -8.5200000000000031 1.1714363744084512E-032 + -8.4600000000000009 1.0329137283355153E-032 + -8.3999999999999986 7.1998881439969020E-033 + -8.3400000000000034 2.0184455081298783E-033 + -8.2800000000000011 -5.4220473208410021E-033 + -8.2199999999999989 -1.5175233286146024E-032 + -8.1600000000000037 -2.7088301951203528E-032 + -8.1000000000000014 -4.0751734878398478E-032 + -8.0399999999999991 -5.5457123834457507E-032 + -7.9800000000000040 -7.0168791749474233E-032 + -7.9200000000000017 -8.3515302394227298E-032 + -7.8599999999999994 -9.3806979014971794E-032 + -7.8000000000000043 -9.9085214799873605E-032 + -7.7400000000000020 -9.7208424488337758E-032 + -7.6799999999999997 -8.5978261331027990E-032 + -7.6200000000000045 -6.3307704023547677E-032 + -7.5600000000000023 -2.7430236261287000E-032 + -7.5000000000000000 2.2853892720665062E-032 + -7.4400000000000048 8.7901974248477131E-032 + -7.3800000000000026 1.6693585059745304E-031 + -7.3200000000000003 2.5774815383032068E-031 + -7.2599999999999980 3.5643051782517682E-031 + -7.2000000000000028 4.5715051284480047E-031 + -7.1400000000000006 5.5201035898248186E-031 + -7.0799999999999983 6.3102442545240542E-031 + -7.0200000000000031 6.8225527447631215E-031 + -6.9600000000000009 6.9214936237526086E-031 + -6.8999999999999986 6.4611063720628104E-031 + -6.8400000000000034 5.2934433689908667E-031 + -6.7800000000000011 3.2799080538896154E-031 + -6.7199999999999989 3.0552936688762094E-032 + -6.6600000000000037 -3.7040445890989169E-031 + -6.6000000000000014 -8.7633505389767263E-031 + -6.5399999999999991 -1.4806591570660908E-030 + -6.4800000000000040 -2.1667101873958718E-030 + -6.4200000000000017 -2.9058496693246597E-030 + -6.3599999999999994 -3.6559696998457000E-030 + -6.3000000000000043 -4.3606301448738234E-030 + -6.2400000000000020 -4.9491106690135145E-030 + -6.1799999999999997 -5.3376635647962377E-030 + -6.1200000000000045 -5.4322390119888477E-030 + -6.0600000000000023 -5.1329159133638706E-030 + -6.0000000000000000 -4.3401924575142184E-030 + -5.9400000000000048 -2.9631830638803672E-030 + -5.8800000000000026 -9.2961777576170545E-031 + -5.8200000000000003 1.8026437606032277E-030 + -5.7600000000000051 5.2330751782647667E-030 + -5.7000000000000028 9.3056457207049226E-030 + -5.6400000000000006 1.3896646764984597E-029 + -5.5799999999999983 1.8804340818499539E-029 + -5.5200000000000031 2.3741788248806813E-029 + -5.4600000000000009 2.8334330130836539E-029 + -5.3999999999999986 3.2123236008781257E-029 + -5.3400000000000034 3.4576928926828229E-029 + -5.2800000000000011 3.5111066442801400E-029 + -5.2199999999999989 3.3118327974802785E-029 + -5.1600000000000037 2.8008357793693614E-029 + -5.1000000000000014 1.9257556901357700E-029 + -5.0399999999999991 6.4677705602110467E-030 + -4.9800000000000040 -1.0568149180673160E-029 + -4.9200000000000017 -3.1796759876786339E-029 + -4.8599999999999994 -5.6834406680770948E-029 + -4.8000000000000043 -8.4902567128171410E-029 + -4.7400000000000020 -1.1477392507053135E-028 + -4.6799999999999997 -1.4473593931849886E-028 + -4.6200000000000045 -1.7257893916367270E-028 + -4.5600000000000023 -1.9561608989123082E-028 + -4.5000000000000000 -2.1074217730207687E-028 + -4.4400000000000048 -2.1453759627290529E-028 + -4.3800000000000026 -2.0342213460726693E-028 + -4.3200000000000003 -1.7386134627782249E-028 + -4.2600000000000051 -1.2262562541389939E-028 + -4.2000000000000028 -4.7098218778030987E-029 + -4.1400000000000006 5.4375812620996957E-029 + -4.0799999999999983 1.8211229409131873E-028 + -4.0200000000000031 3.3470072445643316E-028 + -3.9600000000000009 5.0863112082696532E-028 + -3.8999999999999986 6.9796488069207183E-028 + -3.8400000000000034 8.9408489395643387E-028 + -3.7800000000000011 1.0855645150172377E-027 + -3.7199999999999989 1.2581985499817662E-027 + -3.6600000000000037 1.3952393748640753E-027 + -3.6000000000000014 1.4778805270324597E-027 + -3.5399999999999991 1.4860230152925910E-027 + -3.4800000000000040 1.3993519453965450E-027 + -3.4200000000000017 1.1987317981546737E-027 + -3.3599999999999994 8.6791502903590174E-028 + -3.3000000000000043 3.9552678647224708E-028 + -3.2400000000000020 -2.2273648330480615E-028 + -3.1799999999999997 -9.8179421456513129E-028 + -3.1200000000000045 -1.8648909162662153E-027 + -3.0600000000000023 -2.8414961829959518E-027 + -3.0000000000000000 -3.8656062823278275E-027 + -2.9400000000000048 -4.8746812497982796E-027 + -2.8800000000000026 -5.7894704424757107E-027 + -2.8200000000000003 -6.5149890479551472E-027 + -2.7600000000000051 -6.9428890623038900E-027 + -2.7000000000000028 -6.9554379919006416E-027 + -2.6400000000000006 -6.4312516459655705E-027 + -2.5799999999999983 -5.2528419989520058E-027 + -2.5200000000000031 -3.3159205370861512E-027 + -2.4600000000000009 -5.4025707855388408E-028 + -2.3999999999999986 3.1182842831682650E-027 + -2.3400000000000034 7.6550886382618318E-027 + -2.2800000000000011 1.3004275517882444E-026 + -2.2199999999999989 1.9027250900811705E-026 + -2.1600000000000037 2.5503460334192106E-026 + -2.1000000000000014 3.2124575798942897E-026 + -2.0399999999999991 3.8493436439053713E-026 + -1.9800000000000040 4.4129070255408507E-026 + -1.9200000000000017 4.8479015789104261E-026 + -1.8599999999999994 5.0939955163867815E-026 + -1.8000000000000043 5.0887365194045840E-026 + -1.7400000000000020 4.7714382731074119E-026 + -1.6799999999999997 4.0879548957522821E-026 + -1.6200000000000045 2.9962321052687883E-026 + -1.5600000000000023 1.4724541295631825E-026 + -1.5000000000000000 -4.8249967359185717E-027 + -1.4400000000000048 -2.8366399047454616E-026 + -1.3800000000000026 -5.5209552532177818E-026 + -1.3200000000000003 -8.4245229930650973E-026 + -1.2600000000000051 -1.1391229330173143E-025 + -1.2000000000000028 -1.4218708267499849E-025 + -1.1400000000000006 -1.6660129629885458E-025 + -1.0799999999999983 -1.8429393585174886E-025 + -1.0200000000000031 -1.9210237189577055E-025 + -0.96000000000000085 -1.8669577518365352E-025 + -0.89999999999999858 -1.6475259066060627E-025 + -0.84000000000000341 -1.2318095824878229E-025 + -0.78000000000000114 -5.9378109881820075E-026 + -0.71999999999999886 2.8478508583568687E-026 + -0.66000000000000369 1.4111982391250591E-025 + -0.60000000000000142 2.7786847451196374E-025 + -0.53999999999999915 4.3633508241100272E-025 + -0.48000000000000398 6.1215065511354522E-025 + -0.42000000000000171 7.9875966232778217E-025 + -0.35999999999999943 9.8730144333908270E-025 + -0.30000000000000426 1.1666072172394186E-024 + -0.24000000000000199 1.3233409866616013E-024 + -0.17999999999999972 1.4423078832860489E-024 + -0.12000000000000455 1.5069509603610036E-024 + -6.0000000000002274E-002 1.5000492939733100E-024 + 0.0000000000000000 1.4046213533119322E-024 + 5.9999999999995168E-002 1.2050267824770651E-024 + 0.11999999999999744 8.8824642481241212E-025 + 0.17999999999999972 4.4530289943907145E-025 + 0.23999999999999488 -1.2722910271552303E-025 + 0.29999999999999716 -8.2569434276798304E-025 + 0.35999999999999943 -1.6378986790728747E-024 + 0.42000000000000171 -2.5418206863825106E-024 + 0.47999999999999687 -3.5046173313569042E-024 + 0.53999999999999915 -4.4820464849840566E-024 + 0.60000000000000142 -5.4184439847543489E-024 + 0.65999999999999659 -6.2473871604219358E-024 + 0.71999999999999886 -6.8931718615372576E-024 + 0.78000000000000114 -7.2732109542533003E-024 + 0.83999999999999631 -7.3014314747715267E-024 + 0.89999999999999858 -6.8927205949250085E-024 + 0.96000000000000085 -5.9684024021133846E-024 + 1.0199999999999960 -4.4626891029102099E-024 + 1.0799999999999983 -2.3299529107046620E-024 + 1.1400000000000006 4.4739588445279896E-025 + 1.1999999999999957 3.8507432816254969E-024 + 1.2599999999999980 7.8172122220217961E-024 + 1.3200000000000003 1.2232212862142326E-023 + 1.3799999999999955 1.6923183730476957E-023 + 1.4399999999999977 2.1655162553418965E-023 + 1.5000000000000000 2.6128909564147098E-023 + 1.5599999999999952 2.9982274998864836E-023 + 1.6199999999999974 3.2795547701787153E-023 + 1.6799999999999997 3.4101415591114935E-023 + 1.7399999999999949 3.3400034565135713E-023 + 1.7999999999999972 3.0179598322372982E-023 + 1.8599999999999994 2.3942429786018040E-023 + 1.9200000000000017 1.4236426122692348E-023 + 1.9799999999999969 6.9120170087869867E-025 + 2.0399999999999991 -1.6942138089680226E-023 + 2.1000000000000014 -3.8749133860185215E-023 + 2.1599999999999966 -6.4610120253641951E-023 + 2.2199999999999989 -9.4161015561396534E-023 + 2.2800000000000011 -1.2675981731965571E-022 + 2.3399999999999963 -1.6146241904543059E-022 + 2.3999999999999986 -1.9701148084077844E-022 + 2.4600000000000009 -2.3184248627545807E-022 + 2.5199999999999960 -2.6411074390542420E-022 + 2.5799999999999983 -2.9174309233757935E-022 + 2.6400000000000006 -3.1251701528629161E-022 + 2.6999999999999957 -3.2416927909773476E-022 + 2.7599999999999980 -3.2453452740488320E-022 + 2.8200000000000003 -3.1171273166406013E-022 + 2.8799999999999955 -2.8426202853052325E-022 + 2.9399999999999977 -2.4141158959176250E-022 + 3.0000000000000000 -1.8328615129945917E-022 + 3.0599999999999952 -1.1113122303093879E-022 + 3.1199999999999974 -2.7525373310846566E-023 + 3.1799999999999997 6.3435849728637875E-023 + 3.2399999999999949 1.5600257686411030E-022 + 3.2999999999999972 2.4269867526383808E-022 + 3.3599999999999994 3.1433409282587780E-022 + 3.4199999999999946 3.6012035838536376E-022 + 3.4799999999999969 3.6790462320793178E-022 + 3.5399999999999991 3.2453451743932844E-022 + 3.6000000000000014 2.1636056761795761E-022 + 3.6599999999999966 2.9875680122072782E-023 + 3.7199999999999989 -2.4751871655304712E-022 + 3.7800000000000011 -6.2663617526999841E-022 + 3.8399999999999963 -1.1155540459813707E-021 + 3.8999999999999986 -1.7186231176252445E-021 + 3.9600000000000009 -2.4354952631039328E-021 + 4.0199999999999960 -3.2602352595365997E-021 + 4.0799999999999983 -4.1805795239980593E-021 + 4.1400000000000006 -5.1774320667234867E-021 + 4.1999999999999957 -6.2246706615466395E-021 + 4.2599999999999980 -7.2893414335019119E-021 + 4.3200000000000003 -8.3323156891396161E-021 + 4.3799999999999955 -9.3094642317590759E-021 + 4.4399999999999977 -1.0173384147120133E-020 + 4.5000000000000000 -1.0875693688187288E-020 + 4.5599999999999952 -1.1369866953584693E-020 + 4.6199999999999974 -1.1614551958217983E-020 + 4.6799999999999997 -1.1577271405265549E-020 + 4.7399999999999949 -1.1238363680927063E-020 + 4.7999999999999972 -1.0594974690365341E-020 + 4.8599999999999994 -9.6648713663045210E-021 + 4.9199999999999946 -8.4898260010392715E-021 + 4.9799999999999969 -7.1382781051186108E-021 + 5.0399999999999991 -5.7069707554631462E-021 + 5.1000000000000014 -4.3212836331539307E-021 + 5.1599999999999966 -3.1339868734229085E-021 + 5.2199999999999989 -2.3221653981083388E-021 + 5.2800000000000011 -2.0821743217188288E-021 + 5.3399999999999963 -2.6225277254137025E-021 + 5.3999999999999986 -4.1547400267481205E-021 + 5.4600000000000009 -6.8822709183818539E-021 + 5.5199999999999960 -1.0987843228398634E-020 + 5.5799999999999983 -1.6619554530626701E-020 + 5.6400000000000006 -2.3876334235770794E-020 + 5.6999999999999957 -3.2793455579241128E-020 + 5.7599999999999980 -4.3328854944304731E-020 + 5.8200000000000003 -5.5351235085720289E-020 + 5.8799999999999955 -6.8630821959095379E-020 + 5.9399999999999977 -8.2833665092884871E-020 + 6.0000000000000000 -9.7520558180563284E-020 + 6.0599999999999952 -1.1215110525078950E-019 + 6.1199999999999974 -1.2609363795629241E-019 + 6.1799999999999997 -1.3864139590953201E-019 + 6.2399999999999949 -1.4903483065164967E-019 + 6.2999999999999972 -1.5648969842140052E-019 + 6.3599999999999994 -1.6023051989810694E-019 + 6.4199999999999946 -1.5952769462884732E-019 + 6.4799999999999969 -1.5373705494466062E-019 + 6.5399999999999991 -1.4233968242889367E-019 + 6.6000000000000014 -1.2497954885042100E-019 + 6.6599999999999966 -1.0149619857268014E-019 + 6.7199999999999989 -7.1949520060770360E-020 + 6.7800000000000011 -3.6633587470174006E-020 + 6.8399999999999963 3.9233421700175992E-021 + 6.8999999999999986 4.8975688989457172E-020 + 6.9600000000000009 9.7596376808904425E-020 + 7.0199999999999960 1.4873359848806812E-019 + 7.0799999999999983 2.0128956751480676E-019 + 7.1400000000000006 2.5422146119576713E-019 + 7.1999999999999957 3.0666315040611259E-019 + 7.2599999999999980 3.5806670259914409E-019 + 7.3200000000000003 4.0835895799231138E-019 + 7.3799999999999955 4.5811105557018463E-019 + 7.4399999999999977 5.0871322556998678E-019 + 7.5000000000000000 5.6254994401621706E-019 + 7.5599999999999952 6.2316842845546685E-019 + 7.6199999999999974 6.9543281151563673E-019 + 7.6799999999999997 7.8565745664734847E-019 + 7.7399999999999949 9.0171165046148151E-019 + 7.7999999999999972 1.0530901055877053E-018 + 7.8599999999999994 1.2509453593459998E-018 + 7.9199999999999946 1.5080768781894735E-018 + 7.9799999999999969 1.8388802149557555E-018 + 8.0399999999999991 2.2592551730094034E-018 + 8.1000000000000014 2.7864769636881954E-018 + 8.1599999999999966 3.4390426773723844E-018 + 8.2199999999999989 4.2364987607325520E-018 + 8.2800000000000011 5.1992656311290661E-018 + 8.3399999999999963 6.3484823984865713E-018 + 8.3999999999999986 7.7058765879553330E-018 + 8.4600000000000009 9.2936925306656749E-018 + 8.5199999999999960 1.1134696633029657E-017 + 8.5799999999999983 1.3252280995894894E-017 + 8.6400000000000006 1.5670689808980613E-017 + 8.6999999999999957 1.8415377973694342E-017 + 8.7599999999999980 2.1513539427007228E-017 + 8.8200000000000003 2.4994805569954664E-017 + 8.8799999999999955 2.8892118715383662E-017 + 8.9399999999999977 3.3242797575425260E-017 + 9.0000000000000000 3.8089799884646681E-017 + 9.0599999999999952 4.3483161390723027E-017 + 9.1199999999999974 4.9481596503244233E-017 + 9.1799999999999997 5.6154257047805363E-017 + 9.2399999999999949 6.3582621226773271E-017 + 9.2999999999999972 7.1862512935436652E-017 + 9.3599999999999994 8.1106157262291153E-017 + 9.4199999999999946 9.1444317773210104E-017 + 9.4799999999999969 1.0302839109073590E-016 + 9.5399999999999991 1.1603261853607851E-016 + 9.5999999999999943 1.3065610859447242E-016 + 9.6599999999999966 1.4712488269787017E-016 + 9.7199999999999989 1.6569387658754094E-016 + 9.7800000000000011 1.8664881077673050E-016 + 9.8399999999999963 2.1030803141167028E-016 + 9.8999999999999986 2.3702424667870871E-016 + 9.9600000000000009 2.6718632359239474E-016 + 10.019999999999996 3.0122100301708818E-016 + 10.079999999999998 3.3959463015413156E-016 + 10.140000000000001 3.8281533533304098E-016 + 10.199999999999996 4.3143485870854231E-016 + 10.259999999999998 4.8605113655842329E-016 + 10.320000000000000 5.4731061144517158E-016 + 10.379999999999995 6.1591161143781081E-016 + 10.439999999999998 6.9260775609586776E-016 + 10.500000000000000 7.7821204906516966E-016 + 10.559999999999995 8.7360125568395927E-016 + 10.619999999999997 9.7972121549401157E-016 + 10.680000000000000 1.0975930262009192E-015 + 10.739999999999995 1.2283189272044546E-015 + 10.799999999999997 1.3730895584243033E-015 + 10.859999999999999 1.5331917133938649E-015 + 10.919999999999995 1.7100163406829658E-015 + 10.979999999999997 1.9050668121874074E-015 + 11.039999999999999 2.1199668731034338E-015 + 11.099999999999994 2.3564696096480733E-015 + 11.159999999999997 2.6164644594322405E-015 + 11.219999999999999 2.9019848436231243E-015 + 11.280000000000001 3.2152147398766221E-015 + 11.339999999999996 3.5584920263174541E-015 + 11.399999999999999 3.9343113836213137E-015 + 11.460000000000001 4.3453234953628969E-015 + 11.519999999999996 4.7943333230598031E-015 + 11.579999999999998 5.2842885708778760E-015 + 11.640000000000001 5.8182723345877730E-015 + 11.699999999999996 6.3994798248983139E-015 + 11.759999999999998 7.0311964763378381E-015 + 11.820000000000000 7.7167628146981351E-015 + 11.879999999999995 8.4595322965138154E-015 + 11.939999999999998 9.2628170882216762E-015 + 12.000000000000000 1.0129823987569517E-014 + 12.059999999999995 1.1063573853160395E-014 + 12.119999999999997 1.2066803720169994E-014 + 12.180000000000000 1.3141851614442774E-014 + 12.239999999999995 1.4290519579905601E-014 + 12.299999999999997 1.5513914996327774E-014 + 12.359999999999999 1.6812259620315065E-014 + 12.419999999999995 1.8184672202469822E-014 + 12.479999999999997 1.9628911803277746E-014 + 12.539999999999999 2.1141083323886070E-014 + 12.599999999999994 2.2715299221098294E-014 + 12.659999999999997 2.4343285826319829E-014 + 12.719999999999999 2.6013938174900354E-014 + 12.780000000000001 2.7712794388106964E-014 + 12.839999999999996 2.9421457563984857E-014 + 12.899999999999999 3.1116926390504736E-014 + 12.960000000000001 3.2770805819500448E-014 + 13.019999999999996 3.4348455284773044E-014 + 13.079999999999998 3.5807968690257609E-014 + 13.140000000000001 3.7099056601349817E-014 + 13.199999999999996 3.8161733457925900E-014 + 13.259999999999998 3.8924846883608324E-014 + 13.320000000000000 3.9304421808123008E-014 + 13.379999999999995 3.9201720934557764E-014 + 13.439999999999998 3.8501076371436705E-014 + 13.500000000000000 3.7067450609105088E-014 + 13.559999999999995 3.4743612839902508E-014 + 13.619999999999997 3.1346898686369828E-014 + 13.680000000000000 2.6665666764632380E-014 + 13.739999999999995 2.0455174717566102E-014 + 13.799999999999997 1.2432853930057905E-014 + 13.859999999999999 2.2730519444902678E-015 + 13.919999999999995 -1.0398958760689075E-014 + 13.979999999999997 -2.6013821842103303E-014 + 14.039999999999999 -4.5065718712720687E-014 + 14.099999999999994 -6.8121123355791488E-014 + 14.159999999999997 -9.5828480482335990E-014 + 14.219999999999999 -1.2892946510869042E-013 + 14.280000000000001 -1.6827130612323613E-013 + 14.339999999999996 -2.1482083488917804E-013 + 14.399999999999999 -2.6968012487440879E-013 + 14.460000000000001 -3.3410448230556427E-013 + 14.519999999999996 -4.0952195006165522E-013 + 14.579999999999998 -4.9755569338281056E-013 + 14.640000000000001 -6.0004883411187628E-013 + 14.699999999999996 -7.1909212644624880E-013 + 14.759999999999998 -8.5705495800631568E-013 + 14.820000000000000 -1.0166202413175592E-012 + 14.879999999999995 -1.2008222240739495E-012 + 14.939999999999998 -1.4130897196299395E-012 + 15.000000000000000 -1.6572943191761876E-012 + 15.059999999999995 -1.9378023552533581E-012 + 15.119999999999997 -2.2595338421358719E-012 + 15.180000000000000 -2.6280282581933341E-012 + 15.239999999999995 -3.0495165388335150E-012 + 15.299999999999997 -3.5310005255707786E-012 + 15.359999999999999 -4.0803417265676605E-012 + 15.419999999999995 -4.7063590265451613E-012 + 15.479999999999997 -5.4189382186997984E-012 + 15.539999999999999 -6.2291480740148465E-012 + 15.599999999999994 -7.1493752599984217E-012 + 15.659999999999997 -8.1934664170684605E-012 + 15.719999999999999 -9.3768939347245294E-012 + 15.780000000000001 -1.0716924655050327E-011 + 15.839999999999996 -1.2232819610745849E-011 + 15.899999999999999 -1.3946039808197346E-011 + 15.960000000000001 -1.5880487788885327E-011 + 16.019999999999996 -1.8062761402001064E-011 + 16.079999999999998 -2.0522431175361548E-011 + 16.140000000000001 -2.3292358865521325E-011 + 16.200000000000003 -2.6409027431583504E-011 + 16.259999999999991 -2.9912913606420387E-011 + 16.319999999999993 -3.3848893058277904E-011 + 16.379999999999995 -3.8266686250857139E-011 + 16.439999999999998 -4.3221334880548265E-011 + 16.500000000000000 -4.8773736141287000E-011 + 16.560000000000002 -5.4991207689512343E-011 + 16.620000000000005 -6.1948130704664110E-011 + 16.679999999999993 -6.9726626071940704E-011 + 16.739999999999995 -7.8417309129681463E-011 + 16.799999999999997 -8.8120068408510411E-011 + 16.859999999999999 -9.8944972147250968E-011 + 16.920000000000002 -1.1101322919828107E-010 + 16.980000000000004 -1.2445819116189114E-010 + 17.039999999999992 -1.3942650461184805E-010 + 17.099999999999994 -1.5607933059036062E-010 + 17.159999999999997 -1.7459364684913956E-010 + 17.219999999999999 -1.9516369290578956E-010 + 17.280000000000001 -2.1800247168800094E-010 + 17.340000000000003 -2.4334341792869817E-010 + 17.399999999999991 -2.7144225491977456E-010 + 17.459999999999994 -3.0257880629677291E-010 + 17.519999999999996 -3.3705921679642183E-010 + 17.579999999999998 -3.7521798877742143E-010 + 17.640000000000001 -4.1742048104229845E-010 + 17.700000000000003 -4.6406549462259256E-010 + 17.759999999999991 -5.1558792238386413E-010 + 17.819999999999993 -5.7246168133923017E-010 + 17.879999999999995 -6.3520277889882007E-010 + 17.939999999999998 -7.0437266048844517E-010 + 18.000000000000000 -7.8058169855412461E-010 + 18.060000000000002 -8.6449288564419721E-010 + 18.120000000000005 -9.5682573863191600E-010 + 18.179999999999993 -1.0583602551486804E-009 + 18.239999999999995 -1.1699416329652961E-009 + 18.299999999999997 -1.2924843736679346E-009 + 18.359999999999999 -1.4269772734591730E-009 + 18.420000000000002 -1.5744882082146569E-009 + 18.480000000000004 -1.7361694840672650E-009 + 18.539999999999992 -1.9132625581484769E-009 + 18.599999999999994 -2.1071041498558580E-009 + 18.659999999999997 -2.3191314015238694E-009 + 18.719999999999999 -2.5508871460346901E-009 + 18.780000000000001 -2.8040262729304929E-009 + 18.840000000000003 -3.0803204045004185E-009 + 18.899999999999991 -3.3816646972595419E-009 + 18.959999999999994 -3.7100820956646508E-009 + 19.019999999999996 -4.0677289898604913E-009 + 19.079999999999998 -4.4569001945942575E-009 + 19.140000000000001 -4.8800330396772776E-009 + 19.200000000000003 -5.3397107814317588E-009 + 19.259999999999991 -5.8386668742332155E-009 + 19.319999999999993 -6.3797863198431352E-009 + 19.379999999999995 -6.9661063815796929E-009 + 19.439999999999998 -7.6008168364938579E-009 + 19.500000000000000 -8.2872583375769024E-009 + 19.560000000000002 -9.0289174675630217E-009 + 19.620000000000005 -9.8294230863262767E-009 + 19.679999999999993 -1.0692533485723025E-008 + 19.739999999999995 -1.1622129835419531E-008 + 19.799999999999997 -1.2622198576009354E-008 + 19.859999999999999 -1.3696812386336429E-008 + 19.920000000000002 -1.4850105296634521E-008 + 19.980000000000004 -1.6086246830725543E-008 + 20.039999999999992 -1.7409404600903947E-008 + 20.099999999999994 -1.8823704661838486E-008 + 20.159999999999997 -2.0333178262052398E-008 + 20.219999999999999 -2.1941710002696648E-008 + 20.280000000000001 -2.3652964933719975E-008 + 20.340000000000003 -2.5470308038853009E-008 + 20.399999999999991 -2.7396717327531877E-008 + 20.459999999999994 -2.9434678196179301E-008 + 20.519999999999996 -3.1586062629415627E-008 + 20.579999999999998 -3.3851988021314129E-008 + 20.640000000000001 -3.6232657305800233E-008 + 20.700000000000003 -3.8727193091236121E-008 + 20.759999999999991 -4.1333417157730546E-008 + 20.819999999999993 -4.4047633213645351E-008 + 20.879999999999995 -4.6864363311578438E-008 + 20.939999999999998 -4.9776050536263902E-008 + 21.000000000000000 -5.2772743818016020E-008 + 21.060000000000002 -5.5841719504209350E-008 + 21.120000000000005 -5.8967070866419179E-008 + 21.179999999999993 -6.2129241560470042E-008 + 21.239999999999995 -6.5304525159409482E-008 + 21.299999999999997 -6.8464491499184737E-008 + 21.359999999999999 -7.1575320681929537E-008 + 21.420000000000002 -7.4597128792147890E-008 + 21.480000000000004 -7.7483159795586404E-008 + 21.539999999999992 -8.0178931530877457E-008 + 21.599999999999994 -8.2621241209838301E-008 + 21.659999999999997 -8.4737122866036190E-008 + 21.719999999999999 -8.6442662023185906E-008 + 21.780000000000001 -8.7641679951111788E-008 + 21.840000000000003 -8.8224301919344206E-008 + 21.899999999999991 -8.8065406686583114E-008 + 21.959999999999994 -8.7022850095002775E-008 + 22.019999999999996 -8.4935579015323787E-008 + 22.079999999999998 -8.1621514423614529E-008 + 22.140000000000001 -7.6875273673584491E-008 + 22.200000000000003 -7.0465662267710476E-008 + 22.259999999999991 -6.2132845693074755E-008 + 22.319999999999993 -5.1585424917721074E-008 + 22.379999999999995 -3.8497101560624856E-008 + 22.439999999999998 -2.2503091363152627E-008 + 22.500000000000000 -3.1961698689033456E-009 + 22.560000000000002 1.9877558226497645E-008 + 22.619999999999990 4.7223338434324436E-008 + 22.679999999999993 7.9402823818631608E-008 + 22.739999999999995 1.1703958225670677E-007 + 22.799999999999997 1.6082505360635464E-007 + 22.859999999999999 2.1152508411186830E-007 + 22.920000000000002 2.6998686461745822E-007 + 22.980000000000004 3.3714659126991784E-007 + 23.039999999999992 4.1403774019103751E-007 + 23.099999999999994 5.0179992183604570E-007 + 23.159999999999997 6.0168843972117008E-007 + 23.219999999999999 7.1508488045207688E-007 + 23.280000000000001 8.4350811604069481E-007 + 23.340000000000003 9.8862624778269081E-007 + 23.399999999999991 1.1522700408461774E-006 + 23.459999999999994 1.3364462595979629E-006 + 23.519999999999996 1.5433532854855165E-006 + 23.579999999999998 1.7753966986921975E-006 + 23.640000000000001 2.0352068827303980E-006 + 23.700000000000003 2.3256574640439444E-006 + 23.759999999999991 2.6498849716469104E-006 + 23.819999999999993 3.0113099238566938E-006 + 23.879999999999995 3.4136600937995796E-006 + 23.939999999999998 3.8609938485546580E-006 + 24.000000000000000 4.3577258188782403E-006 + 24.060000000000002 4.9086553629449353E-006 + 24.119999999999990 5.5189952405891577E-006 + 24.179999999999993 6.1944019826658578E-006 + 24.239999999999995 6.9410098857167282E-006 + 24.299999999999997 7.7654653222191120E-006 + 24.359999999999999 8.6749631218181300E-006 + 24.420000000000002 9.6772879726252540E-006 + 24.480000000000004 1.0780853931341438E-005 + 24.539999999999992 1.1994748635292195E-005 + 24.599999999999994 1.3328780734627679E-005 + 24.659999999999997 1.4793525085556797E-005 + 24.719999999999999 1.6400379265311020E-005 + 24.780000000000001 1.8161613924708550E-005 + 24.840000000000003 2.0090428042039959E-005 + 24.899999999999991 2.2201012071262070E-005 + 24.959999999999994 2.4508609467176193E-005 + 25.019999999999996 2.7029580367616160E-005 + 25.079999999999998 2.9781465540873217E-005 + 25.140000000000001 3.2783066674691268E-005 + 25.200000000000003 3.6054512517323731E-005 + 25.259999999999991 3.9617337287942242E-005 + 25.319999999999993 4.3494561734976691E-005 + 25.379999999999995 4.7710777017563344E-005 + 25.439999999999998 5.2292227369466367E-005 + 25.500000000000000 5.7266895723637667E-005 + 25.560000000000002 6.2664604128781894E-005 + 25.619999999999990 6.8517104346356555E-005 + 25.679999999999993 7.4858170391486437E-005 + 25.739999999999995 8.1723704066568505E-005 + 25.799999999999997 8.9151833545285855E-005 + 25.859999999999999 9.7183019260467374E-005 + 25.920000000000002 1.0586014430827379E-004 + 25.980000000000004 1.1522865731340327E-004 + 26.039999999999992 1.2533665551182980E-004 + 26.099999999999994 1.3623499658277848E-004 + 26.159999999999997 1.4797743274099146E-004 + 26.219999999999999 1.6062069374345400E-004 + 26.280000000000001 1.7422463828632002E-004 + 26.340000000000003 1.8885231793400249E-004 + 26.399999999999991 2.0457013348729313E-004 + 26.459999999999994 2.2144794170667393E-004 + 26.519999999999996 2.3955915065961396E-004 + 26.579999999999998 2.5898086405266862E-004 + 26.640000000000001 2.7979393304991654E-004 + 26.700000000000003 3.0208312095088730E-004 + 26.759999999999991 3.2593719789389153E-004 + 26.819999999999993 3.5144896692017796E-004 + 26.879999999999995 3.7871542967562544E-004 + 26.939999999999998 4.0783790838448258E-004 + 27.000000000000000 4.3892202007836162E-004 + 27.060000000000002 4.7207789316687266E-004 + 27.119999999999990 5.0742010761655159E-004 + 27.179999999999993 5.4506780102898326E-004 + 27.239999999999995 5.8514470892940260E-004 + 27.299999999999997 6.2777927507262068E-004 + 27.359999999999999 6.7310460229388967E-004 + 27.420000000000002 7.2125854936723759E-004 + 27.480000000000004 7.7238358091422023E-004 + 27.539999999999992 8.2662697705313828E-004 + 27.599999999999994 8.8414072417082623E-004 + 27.659999999999997 9.4508139623208204E-004 + 27.719999999999999 1.0096101305938311E-003 + 27.780000000000001 1.0778927702378318E-003 + 27.840000000000003 1.1500993392099918E-003 + 27.899999999999991 1.2264043868337202E-003 + 27.959999999999994 1.3069866363533522E-003 + 28.019999999999996 1.3920289543934462E-003 + 28.079999999999998 1.4817178395808552E-003 + 28.140000000000001 1.5762438473195665E-003 + 28.200000000000003 1.6758005970248233E-003 + 28.259999999999991 1.7805853749131189E-003 + 28.319999999999993 1.8907981511715520E-003 + 28.379999999999995 2.0066417806116920E-003 + 28.439999999999998 2.1283212474588835E-003 + 28.500000000000000 2.2560436821459353E-003 + 28.560000000000002 2.3900179800513000E-003 + 28.619999999999990 2.5304543449363318E-003 + 28.679999999999993 2.6775633598080011E-003 + 28.739999999999995 2.8315564315725115E-003 + 28.799999999999997 2.9926446550573760E-003 + 28.859999999999999 3.1610387322142902E-003 + 28.920000000000002 3.3369480001278614E-003 + 28.980000000000004 3.5205799505240586E-003 + 29.039999999999992 3.7121399940156217E-003 + 29.099999999999994 3.9118308226260643E-003 + 29.159999999999997 4.1198509148790072E-003 + 29.219999999999999 4.3363946568011243E-003 + 29.280000000000001 4.5616523137636672E-003 + 29.340000000000003 4.7958076363978459E-003 + 29.399999999999991 5.0390377834126478E-003 + 29.459999999999994 5.2915128110234688E-003 + 29.519999999999996 5.5533958225496222E-003 + 29.579999999999998 5.8248402343436907E-003 + 29.640000000000001 6.1059894381301346E-003 + 29.700000000000003 6.3969777050004459E-003 + 29.759999999999991 6.6979274921197653E-003 + 29.819999999999993 7.0089483457874881E-003 + 29.879999999999995 7.3301376715062408E-003 + 29.939999999999998 7.6615783970805061E-003 + 30.000000000000000 8.0033390544852184E-003 + 30.060000000000002 8.3554726806402482E-003 + 30.119999999999990 8.7180156370052098E-003 + 30.179999999999993 9.0909875409299866E-003 + 30.239999999999995 9.4743897310881967E-003 + 30.299999999999997 9.8682023241568311E-003 + 30.359999999999999 1.0272387955345854E-002 + 30.420000000000002 1.0686888330182607E-002 + 30.480000000000004 1.1111623350266725E-002 + 30.539999999999992 1.1546490329873151E-002 + 30.599999999999994 1.1991363548485701E-002 + 30.659999999999997 1.2446095546433672E-002 + 30.719999999999999 1.2910512030711301E-002 + 30.780000000000001 1.3384415143492159E-002 + 30.840000000000003 1.3867580300779808E-002 + 30.899999999999991 1.4359760090767348E-002 + 30.959999999999994 1.4860677387914233E-002 + 31.019999999999996 1.5370030077741098E-002 + 31.079999999999998 1.5887487853159674E-002 + 31.140000000000001 1.6412693116084093E-002 + 31.200000000000003 1.6945260659222701E-002 + 31.259999999999991 1.7484777733452441E-002 + 31.319999999999993 1.8030803769604774E-002 + 31.379999999999995 1.8582869499268261E-002 + 31.439999999999998 1.9140477180148514E-002 + 31.500000000000000 1.9703102976283922E-002 + 31.560000000000002 2.0270195751364826E-002 + 31.619999999999990 2.0841175832678860E-002 + 31.679999999999993 2.1415435088877933E-002 + 31.739999999999995 2.1992344189982117E-002 + 31.799999999999997 2.2571246597271902E-002 + 31.859999999999999 2.3151458378274748E-002 + 31.920000000000002 2.3732272133754714E-002 + 31.980000000000004 2.4312958911800384E-002 + 32.039999999999992 2.4892764211655788E-002 + 32.099999999999994 2.5470912899066687E-002 + 32.159999999999997 2.6046614730098078E-002 + 32.219999999999999 2.6619053187485107E-002 + 32.280000000000001 2.7187399934138410E-002 + 32.340000000000003 2.7750805592253729E-002 + 32.399999999999991 2.8308406820621124E-002 + 32.459999999999994 2.8859328852238301E-002 + 32.519999999999996 2.9402685197223711E-002 + 32.579999999999998 2.9937579295741628E-002 + 32.640000000000001 3.0463105932750971E-002 + 32.700000000000003 3.0978354578202954E-002 + 32.759999999999991 3.1482408305954876E-002 + 32.819999999999993 3.1974348109069198E-002 + 32.879999999999995 3.2453258949941062E-002 + 32.939999999999998 3.2918218383587730E-002 + 33.000000000000000 3.3368319137647248E-002 + 33.060000000000002 3.3802648525693396E-002 + 33.119999999999990 3.4220313238366697E-002 + 33.179999999999993 3.4620418874993446E-002 + 33.239999999999995 3.5002092937510464E-002 + 33.299999999999997 3.5364472835218375E-002 + 33.359999999999999 3.5706713042227646E-002 + 33.420000000000002 3.6027991635871941E-002 + 33.480000000000004 3.6327498796673789E-002 + 33.539999999999992 3.6604458493591202E-002 + 33.599999999999994 3.6858113160402356E-002 + 33.659999999999997 3.7087740052162380E-002 + 33.719999999999999 3.7292641405903770E-002 + 33.780000000000001 3.7472154366772502E-002 + 33.840000000000003 3.7625646151145872E-002 + 33.899999999999991 3.7752526803921889E-002 + 33.959999999999994 3.7852236993808901E-002 + 34.019999999999996 3.7924259388038589E-002 + 34.079999999999998 3.7968115956140983E-002 + 34.140000000000001 3.7983381530081378E-002 + 34.200000000000003 3.7969662127005949E-002 + 34.259999999999991 3.7926617075271458E-002 + 34.319999999999993 3.7853953801863967E-002 + 34.379999999999995 3.7751420020182280E-002 + 34.439999999999998 3.7618824754501089E-002 + 34.500000000000000 3.7456021688049346E-002 + 34.560000000000002 3.7262906078501946E-002 + 34.619999999999990 3.7039442220724188E-002 + 34.679999999999993 3.6785634113245098E-002 + 34.739999999999995 3.6501546814558056E-002 + 34.799999999999997 3.6187296194241811E-002 + 34.859999999999999 3.5843043869999480E-002 + 34.920000000000002 3.5469016458289690E-002 + 34.980000000000004 3.5065481660282755E-002 + 35.039999999999992 3.4632766350174871E-002 + 35.099999999999994 3.4171252355783936E-002 + 35.159999999999997 3.3681368590396665E-002 + 35.219999999999999 3.3163600133878424E-002 + 35.280000000000001 3.2618473801693998E-002 + 35.340000000000003 3.2046571590313065E-002 + 35.399999999999991 3.1448521216304870E-002 + 35.459999999999994 3.0824997682839465E-002 + 35.519999999999996 3.0176717702049338E-002 + 35.579999999999998 2.9504448574224861E-002 + 35.640000000000001 2.8808993304471994E-002 + 35.700000000000003 2.8091197652267721E-002 + 35.759999999999991 2.7351945403342376E-002 + 35.819999999999993 2.6592156279342048E-002 + 35.879999999999995 2.5812783620838116E-002 + 35.939999999999998 2.5014815152679396E-002 + 36.000000000000000 2.4199265082662090E-002 + 36.060000000000002 2.3367178356958371E-002 + 36.119999999999990 2.2519621984667830E-002 + 36.179999999999993 2.1657686884975443E-002 + 36.239999999999995 2.0782485183683728E-002 + 36.299999999999997 1.9895143638961835E-002 + 36.359999999999999 1.8996806382414026E-002 + 36.420000000000002 1.8088628114128071E-002 + 36.479999999999990 1.7171776443093111E-002 + 36.539999999999992 1.6247421990301419E-002 + 36.599999999999994 1.5316743381917939E-002 + 36.659999999999997 1.4380917350045309E-002 + 36.719999999999999 1.3441119878406616E-002 + 36.780000000000001 1.2498526080890294E-002 + 36.840000000000003 1.1554304949677153E-002 + 36.899999999999991 1.0609615626721068E-002 + 36.959999999999994 9.6656072894591820E-003 + 37.019999999999996 8.7234147045997454E-003 + 37.079999999999998 7.7841569912551062E-003 + 37.140000000000001 6.8489362953289149E-003 + 37.200000000000003 5.9188332836491190E-003 + 37.259999999999991 4.9949066815048217E-003 + 37.319999999999993 4.0781906420025481E-003 + 37.379999999999995 3.1696925403483841E-003 + 37.439999999999998 2.2703928313414518E-003 + 37.500000000000000 1.3812407786906818E-003 + 37.560000000000002 5.0315453130741876E-004 + 37.619999999999990 -3.6298086889933009E-004 + 37.679999999999993 -1.2163148090902306E-003 + 37.739999999999995 -2.0560324979922626E-003 + 37.799999999999997 -2.8813558734758411E-003 + 37.859999999999999 -3.6915450400552031E-003 + 37.920000000000002 -4.4858988702555459E-003 + 37.979999999999990 -5.2637559979064330E-003 + 38.039999999999992 -6.0244953984710655E-003 + 38.099999999999994 -6.7675373175582528E-003 + 38.159999999999997 -7.4923424557962930E-003 + 38.219999999999999 -8.1984149038316634E-003 + 38.280000000000001 -8.8852993629456260E-003 + 38.340000000000003 -9.5525817156581240E-003 + 38.399999999999991 -1.0199892629200204E-002 + 38.459999999999994 -1.0826901368484439E-002 + 38.519999999999996 -1.1433321304223460E-002 + 38.579999999999998 -1.2018905262379722E-002 + 38.640000000000001 -1.2583447659742029E-002 + 38.700000000000003 -1.3126783055135198E-002 + 38.759999999999991 -1.3648785141188285E-002 + 38.819999999999993 -1.4149365082836481E-002 + 38.879999999999995 -1.4628474266301938E-002 + 38.939999999999998 -1.5086098432374476E-002 + 39.000000000000000 -1.5522261578875204E-002 + 39.060000000000002 -1.5937021677898035E-002 + 39.119999999999990 -1.6330467845197569E-002 + 39.179999999999993 -1.6702727166000141E-002 + 39.239999999999995 -1.7053953332785698E-002 + 39.299999999999997 -1.7384330654509093E-002 + 39.359999999999999 -1.7694076336474102E-002 + 39.420000000000002 -1.7983428175069354E-002 + 39.479999999999990 -1.8252654943439146E-002 + 39.539999999999992 -1.8502048234168556E-002 + 39.599999999999994 -1.8731922064036857E-002 + 39.659999999999997 -1.8942612895584653E-002 + 39.719999999999999 -1.9134476410002221E-002 + 39.780000000000001 -1.9307887479793340E-002 + 39.840000000000003 -1.9463239383022718E-002 + 39.899999999999991 -1.9600939821369311E-002 + 39.959999999999994 -1.9721409363705814E-002 + 40.019999999999996 -1.9825083699090480E-002 + 40.079999999999998 -1.9912409590043090E-002 + 40.140000000000001 -1.9983841753790629E-002 + 40.200000000000003 -2.0039844445141675E-002 + 40.259999999999991 -2.0080891841715822E-002 + 40.319999999999993 -2.0107462470245745E-002 + 40.379999999999995 -2.0120034472047400E-002 + 40.439999999999998 -2.0119098150231777E-002 + 40.500000000000000 -2.0105139294984212E-002 + 40.560000000000002 -2.0078648386345547E-002 + 40.619999999999990 -2.0040114896570715E-002 + 40.679999999999993 -1.9990029744171862E-002 + 40.739999999999995 -1.9928876618920878E-002 + 40.799999999999997 -1.9857138522565879E-002 + 40.859999999999999 -1.9775296649398370E-002 + 40.920000000000002 -1.9683827276471551E-002 + 40.979999999999990 -1.9583197572848897E-002 + 41.039999999999992 -1.9473869823247232E-002 + 41.099999999999994 -1.9356300920747860E-002 + 41.159999999999997 -1.9230939646840122E-002 + 41.219999999999999 -1.9098224240289390E-002 + 41.280000000000001 -1.8958588632686055E-002 + 41.340000000000003 -1.8812455603545563E-002 + 41.399999999999991 -1.8660236689158428E-002 + 41.459999999999994 -1.8502334099618031E-002 + 41.519999999999996 -1.8339141637343459E-002 + 41.579999999999998 -1.8171038472016794E-002 + 41.640000000000001 -1.7998395946270028E-002 + 41.700000000000003 -1.7821573694259761E-002 + 41.759999999999991 -1.7640917760320521E-002 + 41.819999999999993 -1.7456766634835721E-002 + 41.879999999999995 -1.7269444897830447E-002 + 41.939999999999998 -1.7079266862604033E-002 + 42.000000000000000 -1.6886534161689185E-002 + 42.060000000000002 -1.6691534915601505E-002 + 42.119999999999990 -1.6494549436293440E-002 + 42.179999999999993 -1.6295844601844453E-002 + 42.239999999999995 -1.6095674541196953E-002 + 42.299999999999997 -1.5894285117762579E-002 + 42.359999999999999 -1.5691905622558754E-002 + 42.420000000000002 -1.5488761470369376E-002 + 42.479999999999990 -1.5285063232005212E-002 + 42.539999999999992 -1.5081010406661075E-002 + 42.599999999999994 -1.4876792975138440E-002 + 42.659999999999997 -1.4672591466739285E-002 + 42.719999999999999 -1.4468575665652118E-002 + 42.780000000000001 -1.4264906803038945E-002 + 42.840000000000003 -1.4061734508511439E-002 + 42.899999999999991 -1.3859201891752541E-002 + 42.959999999999994 -1.3657441233043710E-002 + 43.019999999999996 -1.3456578451954096E-002 + 43.079999999999998 -1.3256729675385969E-002 + 43.140000000000001 -1.3058002685031845E-002 + 43.200000000000003 -1.2860498343815552E-002 + 43.259999999999991 -1.2664311124099888E-002 + 43.319999999999993 -1.2469526641351276E-002 + 43.379999999999995 -1.2276224780936828E-002 + 43.439999999999998 -1.2084477770026350E-002 + 43.500000000000000 -1.1894353480442701E-002 + 43.560000000000002 -1.1705913567426689E-002 + 43.619999999999990 -1.1519212082175309E-002 + 43.679999999999993 -1.1334299640192936E-002 + 43.739999999999995 -1.1151221538295789E-002 + 43.799999999999997 -1.0970017632521600E-002 + 43.859999999999999 -1.0790724800879914E-002 + 43.920000000000002 -1.0613372961945840E-002 + 43.979999999999990 -1.0437990784153972E-002 + 44.039999999999992 -1.0264602214560796E-002 + 44.099999999999994 -1.0093227794500805E-002 + 44.159999999999997 -9.9238843387045774E-003 + 44.219999999999999 -9.7565852090028306E-003 + 44.280000000000001 -9.5913441616973065E-003 + 44.340000000000003 -9.4281688550083721E-003 + 44.399999999999991 -9.2670656656561740E-003 + 44.459999999999994 -9.1080400363137814E-003 + 44.519999999999996 -8.9510944905013962E-003 + 44.579999999999998 -8.7962285954838060E-003 + 44.640000000000001 -8.6434422481152396E-003 + 44.700000000000003 -8.4927319866058126E-003 + 44.759999999999991 -8.3440954572144722E-003 + 44.819999999999993 -8.1975266530542081E-003 + 44.879999999999995 -8.0530192017846409E-003 + 44.939999999999998 -7.9105674679215421E-003 + 45.000000000000000 -7.7701625746695686E-003 + 45.060000000000002 -7.6317965862504351E-003 + 45.119999999999990 -7.4954594311218035E-003 + 45.179999999999993 -7.3611420475735122E-003 + 45.239999999999995 -7.2288343468411816E-003 + 45.299999999999997 -7.0985259452432080E-003 + 45.359999999999999 -6.9702064838331104E-003 + 45.420000000000002 -6.8438647716512384E-003 + 45.479999999999990 -6.7194897975555012E-003 + 45.539999999999992 -6.5970702190372493E-003 + 45.599999999999994 -6.4765956965293506E-003 + 45.659999999999997 -6.3580551582550215E-003 + 45.719999999999999 -6.2414376574169506E-003 + 45.780000000000001 -6.1267323571740041E-003 + 45.840000000000003 -6.0139288338086939E-003 + 45.899999999999991 -5.9030159868354399E-003 + 45.959999999999994 -5.7939832665514562E-003 + 46.019999999999996 -5.6868204856874646E-003 + 46.079999999999998 -5.5815180302021044E-003 + 46.140000000000001 -5.4780652285329849E-003 + 46.200000000000003 -5.3764526143262707E-003 + 46.259999999999991 -5.2766701880650009E-003 + 46.319999999999993 -5.1787087157831148E-003 + 46.379999999999995 -5.0825583213918663E-003 + 46.439999999999998 -4.9882098689208575E-003 + 46.500000000000000 -4.8956534558554678E-003 + 46.560000000000002 -4.8048791150840046E-003 + 46.619999999999990 -4.7158780781066632E-003 + 46.679999999999993 -4.6286406932324756E-003 + 46.739999999999995 -4.5431572642327918E-003 + 46.799999999999997 -4.4594180498979327E-003 + 46.859999999999999 -4.3774127131116112E-003 + 46.920000000000002 -4.2971314527643903E-003 + 46.979999999999990 -4.2185642088869869E-003 + 47.039999999999992 -4.1416999018799947E-003 + 47.099999999999994 -4.0665283642720481E-003 + 47.159999999999997 -3.9930384641933565E-003 + 47.219999999999999 -3.9212188751301825E-003 + 47.280000000000001 -3.8510572114550030E-003 + 47.340000000000003 -3.7825422357027176E-003 + 47.399999999999991 -3.7156611782340485E-003 + 47.459999999999994 -3.6504014268729165E-003 + 47.519999999999996 -3.5867495313169659E-003 + 47.579999999999998 -3.5246922220355564E-003 + 47.640000000000001 -3.4642153443425845E-003 + 47.700000000000003 -3.4053044288769856E-003 + 47.759999999999991 -3.3479446191200671E-003 + 47.819999999999993 -3.2921205047446354E-003 + 47.879999999999995 -3.2378162227020882E-003 + 47.939999999999998 -3.1850157112069712E-003 + 48.000000000000000 -3.1337019770260812E-003 + 48.060000000000002 -3.0838578670376775E-003 + 48.119999999999990 -3.0354653801625085E-003 + 48.179999999999993 -2.9885062539988985E-003 + 48.239999999999995 -2.9429618360326112E-003 + 48.299999999999997 -2.8988126824400595E-003 + 48.359999999999999 -2.8560395179554102E-003 + 48.420000000000002 -2.8146219833496263E-003 + 48.479999999999990 -2.7745396632683221E-003 + 48.539999999999992 -2.7357714676323635E-003 + 48.599999999999994 -2.6982961520188812E-003 + 48.659999999999997 -2.6620922130567515E-003 + 48.719999999999999 -2.6271373154779696E-003 + 48.780000000000001 -2.5934092897998400E-003 + 48.840000000000003 -2.5608857076673949E-003 + 48.899999999999991 -2.5295435081628191E-003 + 48.959999999999994 -2.4993593971247732E-003 + 49.019999999999996 -2.4703101697089369E-003 + 49.079999999999998 -2.4423723709777489E-003 + 49.140000000000001 -2.4155222583049189E-003 + 49.200000000000003 -2.3897360812964639E-003 + 49.259999999999991 -2.3649896299973018E-003 + 49.319999999999993 -2.3412588813405805E-003 + 49.379999999999995 -2.3185198329132004E-003 + 49.439999999999998 -2.2967481286237982E-003 + 49.500000000000000 -2.2759195704896923E-003 + 49.560000000000002 -2.2560100114285045E-003 + 49.619999999999990 -2.2369949761834908E-003 + 49.679999999999993 -2.2188504615499242E-003 + 49.739999999999995 -2.2015524431337691E-003 + 49.799999999999997 -2.1850766405871096E-003 + 49.859999999999999 -2.1693991587180207E-003 + 49.920000000000002 -2.1544964404505815E-003 + 49.979999999999990 -2.1403445055014543E-003 + 50.039999999999992 -2.1269197027241589E-003 + 50.099999999999994 -2.1141989499727579E-003 + 50.159999999999997 -2.1021588924806946E-003 + 50.219999999999999 -2.0907766649571999E-003 + 50.280000000000001 -2.0800288479097678E-003 + 50.340000000000003 -2.0698932651553306E-003 + 50.399999999999991 -2.0603474863558099E-003 + 50.459999999999994 -2.0513690607123982E-003 + 50.519999999999996 -2.0429357322207849E-003 + 50.579999999999998 -2.0350263301667643E-003 + 50.640000000000001 -2.0276191795398526E-003 + 50.700000000000003 -2.0206928474192274E-003 + 50.759999999999991 -2.0142269561672851E-003 + 50.819999999999993 -2.0082005015184092E-003 + 50.879999999999995 -2.0025933603550297E-003 + 50.939999999999998 -1.9973856110888245E-003 + 51.000000000000000 -1.9925575497866579E-003 + 51.060000000000002 -1.9880897619473205E-003 + 51.119999999999990 -1.9839633558832166E-003 + 51.179999999999993 -1.9801599642044151E-003 + 51.239999999999995 -1.9766613910026844E-003 + 51.299999999999997 -1.9734496342559689E-003 + 51.359999999999999 -1.9705069927098049E-003 + 51.420000000000002 -1.9678165512554574E-003 + 51.479999999999990 -1.9653610929332146E-003 + 51.539999999999992 -1.9631244516111947E-003 + 51.599999999999994 -1.9610902775639631E-003 + 51.659999999999997 -1.9592425913649058E-003 + 51.719999999999999 -1.9575663885270560E-003 + 51.780000000000001 -1.9560466457923227E-003 + 51.840000000000003 -1.9546683220129286E-003 + 51.899999999999991 -1.9534171523173938E-003 + 51.959999999999994 -1.9522793721066486E-003 + 52.019999999999996 -1.9512415616464284E-003 + 52.079999999999998 -1.9502905507400308E-003 + 52.140000000000001 -1.9494135964221633E-003 + 52.200000000000003 -1.9485986860208228E-003 + 52.259999999999991 -1.9478340432941752E-003 + 52.319999999999993 -1.9471082970647223E-003 + 52.379999999999995 -1.9464107593312071E-003 + 52.439999999999998 -1.9457308241112449E-003 + 52.500000000000000 -1.9450589149310005E-003 + 52.560000000000002 -1.9443854307144128E-003 + 52.619999999999990 -1.9437013782060190E-003 + 52.679999999999993 -1.9429983688784673E-003 + 52.739999999999995 -1.9422682129940977E-003 + 52.799999999999997 -1.9415031277986458E-003 + 52.859999999999999 -1.9406959734440728E-003 + 52.920000000000002 -1.9398399267029913E-003 + 52.979999999999990 -1.9389283799760965E-003 + 53.039999999999992 -1.9379554453756332E-003 + 53.099999999999994 -1.9369153717069243E-003 + 53.159999999999997 -1.9358029490596505E-003 + 53.219999999999999 -1.9346131350447123E-003 + 53.280000000000001 -1.9333413751402673E-003 + 53.339999999999989 -1.9319834096570485E-003 + 53.399999999999991 -1.9305353621840258E-003 + 53.459999999999994 -1.9289937742292794E-003 + 53.519999999999996 -1.9273553190348228E-003 + 53.579999999999998 -1.9256170553017871E-003 + 53.640000000000001 -1.9237764387505755E-003 + 53.700000000000003 -1.9218312216053453E-003 + 53.759999999999991 -1.9197791657298430E-003 + 53.819999999999993 -1.9176186208685994E-003 + 53.879999999999995 -1.9153478977985687E-003 + 53.939999999999998 -1.9129656858170882E-003 + 54.000000000000000 -1.9104708734372236E-003 + 54.060000000000002 -1.9078623979593382E-003 + 54.119999999999990 -1.9051394677877197E-003 + 54.179999999999993 -1.9023014730001860E-003 + 54.239999999999995 -1.8993478066604639E-003 + 54.299999999999997 -1.8962781277749290E-003 + 54.359999999999999 -1.8930919278643743E-003 + 54.420000000000002 -1.8897892109960999E-003 + 54.479999999999990 -1.8863696393697318E-003 + 54.539999999999992 -1.8828333896932176E-003 + 54.599999999999994 -1.8791803837030147E-003 + 54.659999999999997 -1.8754107302966084E-003 + 54.719999999999999 -1.8715245874161718E-003 + 54.780000000000001 -1.8675220036711499E-003 + 54.839999999999989 -1.8634032286245594E-003 + 54.899999999999991 -1.8591687484799764E-003 + 54.959999999999994 -1.8548186354251587E-003 + 55.019999999999996 -1.8503532735695291E-003 + 55.079999999999998 -1.8457729633081107E-003 + 55.140000000000001 -1.8410781835193494E-003 + 55.200000000000003 -1.8362691974350067E-003 + 55.259999999999991 -1.8313464491416000E-003 + 55.319999999999993 -1.8263103425004005E-003 + 55.379999999999995 -1.8211613476591519E-003 + 55.439999999999998 -1.8158997336994612E-003 + 55.500000000000000 -1.8105259809058348E-003 + 55.560000000000002 -1.8050405449738219E-003 + 55.619999999999990 -1.7994438607841770E-003 + 55.679999999999993 -1.7937366096925258E-003 + 55.739999999999995 -1.7879192204366960E-003 + 55.799999999999997 -1.7819923177074498E-003 + 55.859999999999999 -1.7759566372153330E-003 + 55.920000000000002 -1.7698127437183241E-003 + 55.979999999999990 -1.7635614391149914E-003 + 56.039999999999992 -1.7572036713338910E-003 + 56.099999999999994 -1.7507403189467819E-003 + 56.159999999999997 -1.7441723987872838E-003 + 56.219999999999999 -1.7375010233450150E-003 + 56.280000000000001 -1.7307274223350183E-003 + 56.339999999999989 -1.7238528861079488E-003 + 56.399999999999991 -1.7168788369185881E-003 + 56.459999999999994 -1.7098067082367808E-003 + 56.519999999999996 -1.7026382064751304E-003 + 56.579999999999998 -1.6953750625403349E-003 + 56.640000000000001 -1.6880190744325699E-003 + 56.700000000000003 -1.6805723103453891E-003 + 56.759999999999991 -1.6730368743852033E-003 + 56.819999999999993 -1.6654151272107859E-003 + 56.879999999999995 -1.6577091217247308E-003 + 56.939999999999998 -1.6499215133426838E-003 + 57.000000000000000 -1.6420550475733378E-003 + 57.060000000000002 -1.6341122976025592E-003 + 57.119999999999990 -1.6260962541648260E-003 + 57.179999999999993 -1.6180098804225971E-003 + 57.239999999999995 -1.6098564248432346E-003 + 57.299999999999997 -1.6016391142653829E-003 + 57.359999999999999 -1.5933614128135173E-003 + 57.420000000000002 -1.5850268765565426E-003 + 57.479999999999990 -1.5766390802032372E-003 + 57.539999999999992 -1.5682018590769374E-003 + 57.599999999999994 -1.5597191662361279E-003 + 57.659999999999997 -1.5511948869231665E-003 + 57.719999999999999 -1.5426330438088590E-003 + 57.780000000000001 -1.5340379608496594E-003 + 57.839999999999989 -1.5254139564519558E-003 + 57.899999999999991 -1.5167654296604496E-003 + 57.959999999999994 -1.5080966522820866E-003 + 58.019999999999996 -1.4994122380568003E-003 + 58.079999999999998 -1.4907165940498898E-003 + 58.140000000000001 -1.4820144724117265E-003 + 58.200000000000003 -1.4733103819473984E-003 + 58.259999999999991 -1.4646088748769194E-003 + 58.319999999999993 -1.4559146797048796E-003 + 58.379999999999995 -1.4472322642135778E-003 + 58.439999999999998 -1.4385663536271582E-003 + 58.500000000000000 -1.4299214794956869E-003 + 58.560000000000002 -1.4213020270020405E-003 + 58.619999999999990 -1.4127125700907691E-003 + 58.679999999999993 -1.4041574242563751E-003 + 58.739999999999995 -1.3956410670149545E-003 + 58.799999999999997 -1.3871678088851584E-003 + 58.859999999999999 -1.3787416588993333E-003 + 58.920000000000002 -1.3703668495356524E-003 + 58.979999999999990 -1.3620473197104800E-003 + 59.039999999999992 -1.3537871411622986E-003 + 59.099999999999994 -1.3455901218132190E-003 + 59.159999999999997 -1.3374600640873426E-003 + 59.219999999999999 -1.3294005943517229E-003 + 59.280000000000001 -1.3214152015804460E-003 + 59.339999999999989 -1.3135073294986280E-003 + 59.399999999999991 -1.3056804591893797E-003 + 59.459999999999994 -1.2979377393087543E-003 + 59.519999999999996 -1.2902822953782171E-003 + 59.579999999999998 -1.2827172070656949E-003 + 59.640000000000001 -1.2752452042922152E-003 + 59.700000000000003 -1.2678691554663555E-003 + 59.759999999999991 -1.2605912795286430E-003 + 59.819999999999993 -1.2534141989357821E-003 + 59.879999999999995 -1.2463402501282689E-003 + 59.939999999999998 -1.2393714533883869E-003 + 60.000000000000000 -1.2325095969256982E-003 + 60.060000000000002 -1.2257565009327566E-003 + 60.119999999999990 -1.2191137428516161E-003 + 60.179999999999993 -1.2125826108152220E-003 + 60.239999999999995 -1.2061644166734061E-003 + 60.299999999999997 -1.1998602533516936E-003 + 60.359999999999999 -1.1936708371560010E-003 + 60.420000000000002 -1.1875968958976624E-003 + 60.479999999999990 -1.1816389768160196E-003 + 60.539999999999992 -1.1757973135809660E-003 + 60.599999999999994 -1.1700721725106356E-003 + 60.659999999999997 -1.1644635823733925E-003 + 60.719999999999999 -1.1589713960518451E-003 + 60.780000000000001 -1.1535953119204700E-003 + 60.839999999999989 -1.1483349248569226E-003 + 60.899999999999991 -1.1431895813151058E-003 + 60.959999999999994 -1.1381585706415058E-003 + 61.019999999999996 -1.1332409642412615E-003 + 61.079999999999998 -1.1284356611078192E-003 + 61.140000000000001 -1.1237414698256072E-003 + 61.200000000000003 -1.1191569939991378E-003 + 61.259999999999991 -1.1146808296481400E-003 + 61.319999999999993 -1.1103112985214906E-003 + 61.379999999999995 -1.1060466190527772E-003 + 61.439999999999998 -1.1018849445362069E-003 + 61.500000000000000 -1.0978241758301159E-003 + 61.560000000000002 -1.0938620713954899E-003 + 61.619999999999990 -1.0899963231351258E-003 + 61.679999999999993 -1.0862245607716032E-003 + 61.739999999999995 -1.0825439788286490E-003 + 61.799999999999997 -1.0789521684975531E-003 + 61.859999999999999 -1.0754460892100860E-003 + 61.920000000000002 -1.0720229663885700E-003 + 61.979999999999990 -1.0686797402361685E-003 + 62.039999999999992 -1.0654133264080573E-003 + 62.099999999999994 -1.0622205513365153E-003 + 62.159999999999997 -1.0590980584548636E-003 + 62.219999999999999 -1.0560425056488575E-003 + 62.280000000000001 -1.0530505703098619E-003 + 62.339999999999989 -1.0501185502875777E-003 + 62.399999999999991 -1.0472429039689161E-003 + 62.459999999999994 -1.0444201128480563E-003 + 62.519999999999996 -1.0416464505696959E-003 + 62.579999999999998 -1.0389182337504535E-003 + 62.640000000000001 -1.0362318286742168E-003 + 62.700000000000003 -1.0335833972305701E-003 + 62.759999999999991 -1.0309690855058856E-003 + 62.819999999999993 -1.0283852387418311E-003 + 62.879999999999995 -1.0258280573359274E-003 + 62.939999999999998 -1.0232938301181600E-003 + 63.000000000000000 -1.0207788231923272E-003 + 63.060000000000002 -1.0182791964707105E-003 + 63.119999999999990 -1.0157913349389518E-003 + 63.179999999999993 -1.0133114659352622E-003 + 63.239999999999995 -1.0108360637462557E-003 + 63.299999999999997 -1.0083615801290424E-003 + 63.359999999999999 -1.0058843044289168E-003 + 63.420000000000002 -1.0034009272329161E-003 + 63.479999999999990 -1.0009079397122823E-003 + 63.539999999999992 -9.9840197120956101E-004 + 63.599999999999994 -9.9587986929410314E-004 + 63.659999999999997 -9.9333839230518364E-004 + 63.719999999999999 -9.9077433428859337E-004 + 63.780000000000001 -9.8818470501677480E-004 + 63.839999999999989 -9.8556661470524005E-004 + 63.899999999999991 -9.8291719827908741E-004 + 63.959999999999994 -9.8023388497434647E-004 + 64.019999999999996 -9.7751391954667248E-004 + 64.079999999999998 -9.7475496791324520E-004 + 64.140000000000001 -9.7195458567374542E-004 + 64.200000000000003 -9.6911061228925535E-004 + 64.259999999999991 -9.6622100106308014E-004 + 64.319999999999993 -9.6328375436027043E-004 + 64.379999999999995 -9.6029708030069842E-004 + 64.439999999999998 -9.5725926621197295E-004 + 64.500000000000000 -9.5416877453915485E-004 + 64.560000000000002 -9.5102414861606972E-004 + 64.619999999999990 -9.4782409716270930E-004 + 64.679999999999993 -9.4456737898718701E-004 + 64.739999999999995 -9.4125282900561877E-004 + 64.799999999999997 -9.3787940815022474E-004 + 64.859999999999999 -9.3444617145914519E-004 + 64.920000000000002 -9.3095211545468431E-004 + 64.979999999999990 -9.2739646504357725E-004 + 65.039999999999992 -9.2377835883927816E-004 + 65.099999999999994 -9.2009706223847602E-004 + 65.159999999999997 -9.1635180304314807E-004 + 65.219999999999999 -9.1254196297898573E-004 + 65.280000000000001 -9.0866687654521643E-004 + 65.339999999999989 -9.0472600162898906E-004 + 65.399999999999991 -9.0071877890639967E-004 + 65.459999999999994 -8.9664465441817269E-004 + 65.519999999999996 -8.9250316043087334E-004 + 65.579999999999998 -8.8829384374425780E-004 + 65.640000000000001 -8.8401637647576750E-004 + 65.700000000000003 -8.7967031427068872E-004 + 65.759999999999991 -8.7525530626517080E-004 + 65.819999999999993 -8.7077098286611791E-004 + 65.879999999999995 -8.6621704567872043E-004 + 65.939999999999998 -8.6159304884112788E-004 + 66.000000000000000 -8.5689866722665591E-004 + 66.060000000000002 -8.5213341538891048E-004 + 66.119999999999990 -8.4729698795879202E-004 + 66.179999999999993 -8.4238881416064863E-004 + 66.239999999999995 -8.3740842747233226E-004 + 66.299999999999997 -8.3235514927946510E-004 + 66.359999999999999 -8.2722843264340607E-004 + 66.420000000000002 -8.2202767545139514E-004 + 66.479999999999990 -8.1675210539249781E-004 + 66.539999999999992 -8.1140108680488295E-004 + 66.599999999999994 -8.0597382132385005E-004 + 66.659999999999997 -8.0046958862882314E-004 + 66.719999999999999 -7.9488765088061750E-004 + 66.780000000000001 -7.8922735023499236E-004 + 66.839999999999989 -7.8348799218390798E-004 + 66.899999999999991 -7.7766885443912093E-004 + 66.959999999999994 -7.7176934396001103E-004 + 67.019999999999996 -7.6578895025389596E-004 + 67.079999999999998 -7.5972715845601889E-004 + 67.140000000000001 -7.5358356692276942E-004 + 67.199999999999989 -7.4735780345339174E-004 + 67.259999999999991 -7.4104964910678549E-004 + 67.319999999999993 -7.3465881858109398E-004 + 67.379999999999995 -7.2818512287722978E-004 + 67.439999999999998 -7.2162861516497894E-004 + 67.500000000000000 -7.1498934029957527E-004 + 67.560000000000002 -7.0826738511773452E-004 + 67.619999999999990 -7.0146297967657015E-004 + 67.679999999999993 -6.9457641915551642E-004 + 67.739999999999995 -6.8760825741944419E-004 + 67.799999999999997 -6.8055897828233974E-004 + 67.859999999999999 -6.7342934842748426E-004 + 67.920000000000002 -6.6622022444158514E-004 + 67.979999999999990 -6.5893261660270074E-004 + 68.039999999999992 -6.5156769561336230E-004 + 68.099999999999994 -6.4412684183836699E-004 + 68.159999999999997 -6.3661155912516103E-004 + 68.219999999999999 -6.2902357408331402E-004 + 68.280000000000001 -6.2136476064393749E-004 + 68.339999999999989 -6.1363726917985917E-004 + 68.399999999999991 -6.0584342899519810E-004 + 68.459999999999994 -5.9798576436427672E-004 + 68.519999999999996 -5.9006694310994039E-004 + 68.579999999999998 -5.8208993438605468E-004 + 68.640000000000001 -5.7405783893524343E-004 + 68.699999999999989 -5.6597405001433297E-004 + 68.759999999999991 -5.5784208504610657E-004 + 68.819999999999993 -5.4966569141041543E-004 + 68.879999999999995 -5.4144887146333177E-004 + 68.939999999999998 -5.3319563396179428E-004 + 69.000000000000000 -5.2491042522516732E-004 + 69.060000000000002 -5.1659774907117893E-004 + 69.119999999999990 -5.0826237272010521E-004 + 69.179999999999993 -4.9990913849441720E-004 + 69.239999999999995 -4.9154317559988499E-004 + 69.299999999999997 -4.8316976245948648E-004 + 69.359999999999999 -4.7479424067088308E-004 + 69.420000000000002 -4.6642229994211170E-004 + 69.479999999999990 -4.5805962942428117E-004 + 69.539999999999992 -4.4971211575382548E-004 + 69.599999999999994 -4.4138580390139866E-004 + 69.659999999999997 -4.3308683471818585E-004 + 69.719999999999999 -4.2482144929494129E-004 + 69.780000000000001 -4.1659600490679170E-004 + 69.839999999999989 -4.0841697669534915E-004 + 69.899999999999991 -4.0029090287592634E-004 + 69.959999999999994 -3.9222437714243929E-004 + 70.019999999999996 -3.8422407656709377E-004 + 70.079999999999998 -3.7629675732747138E-004 + 70.140000000000001 -3.6844913854853167E-004 + 70.199999999999989 -3.6068798265824129E-004 + 70.259999999999991 -3.5302006618610798E-004 + 70.319999999999993 -3.4545219802505257E-004 + 70.379999999999995 -3.3799110984219518E-004 + 70.439999999999998 -3.3064354074624258E-004 + 70.500000000000000 -3.2341612570941286E-004 + 70.560000000000002 -3.1631544139200477E-004 + 70.619999999999990 -3.0934799529805997E-004 + 70.679999999999993 -3.0252020884405058E-004 + 70.739999999999995 -2.9583837000069977E-004 + 70.799999999999997 -2.8930863167254901E-004 + 70.859999999999999 -2.8293708612031512E-004 + 70.920000000000002 -2.7672961970968122E-004 + 70.979999999999990 -2.7069199011402678E-004 + 71.039999999999992 -2.6482979897062366E-004 + 71.099999999999994 -2.5914856520411708E-004 + 71.159999999999997 -2.5365354364450708E-004 + 71.219999999999999 -2.4834990739362929E-004 + 71.280000000000001 -2.4324262698813509E-004 + 71.339999999999989 -2.3833651262984587E-004 + 71.399999999999991 -2.3363616834738864E-004 + 71.459999999999994 -2.2914601878138612E-004 + 71.519999999999996 -2.2487030739319917E-004 + 71.579999999999998 -2.2081304846024674E-004 + 71.640000000000001 -2.1697800879855476E-004 + 71.699999999999989 -2.1336878155839639E-004 + 71.759999999999991 -2.0998863607615405E-004 + 71.819999999999993 -2.0684064028499252E-004 + 71.879999999999995 -2.0392757737326035E-004 + 71.939999999999998 -2.0125193961504314E-004 + 72.000000000000000 -1.9881598276076445E-004 + 72.060000000000002 -1.9662164953559630E-004 + 72.119999999999990 -1.9467064662724614E-004 + 72.179999999999993 -1.9296439480919736E-004 + 72.239999999999995 -1.9150409226433569E-004 + 72.299999999999997 -1.9029066221193296E-004 + 72.359999999999999 -1.8932485101196664E-004 + 72.420000000000002 -1.8860717543616492E-004 + 72.479999999999990 -1.8813799578764812E-004 + 72.539999999999992 -1.8791746611344690E-004 + 72.599999999999994 -1.8794562728132521E-004 + 72.659999999999997 -1.8822236796362668E-004 + 72.719999999999999 -1.8874746076012522E-004 + 72.780000000000001 -1.8952056129075323E-004 + 72.839999999999989 -1.9054126375617439E-004 + 72.899999999999991 -1.9180900266773602E-004 + 72.959999999999994 -1.9332316943334416E-004 + 73.019999999999996 -1.9508305798284794E-004 + 73.079999999999998 -1.9708790261019869E-004 + 73.140000000000001 -1.9933684606863024E-004 + 73.199999999999989 -2.0182895860207733E-004 + 73.259999999999991 -2.0456326634619504E-004 + 73.319999999999993 -2.0753871018167210E-004 + 73.379999999999995 -2.1075421949927499E-004 + 73.439999999999998 -2.1420869228254283E-004 + 73.500000000000000 -2.1790100241180247E-004 + 73.560000000000002 -2.2183004241356055E-004 + 73.619999999999990 -2.2599474381409582E-004 + 73.679999999999993 -2.3039403545879348E-004 + 73.739999999999995 -2.3502694727760900E-004 + 73.799999999999997 -2.3989257333214596E-004 + 73.859999999999999 -2.4499011047068614E-004 + 73.920000000000002 -2.5031885388805436E-004 + 73.979999999999990 -2.5587821062348091E-004 + 74.039999999999992 -2.6166775085588126E-004 + 74.099999999999994 -2.6768714238947148E-004 + 74.159999999999997 -2.7393621167172557E-004 + 74.219999999999999 -2.8041492478159856E-004 + 74.280000000000001 -2.8712337014770797E-004 + 74.339999999999989 -2.9406177632791897E-004 + 74.399999999999991 -3.0123052392513352E-004 + 74.459999999999994 -3.0863006555122721E-004 + 74.519999999999996 -3.1626101574052734E-004 + 74.579999999999998 -3.2412407363109538E-004 + 74.640000000000001 -3.3222001404367300E-004 + 74.699999999999989 -3.4054972993151399E-004 + 74.759999999999991 -3.4911418415394159E-004 + 74.819999999999993 -3.5791437799636877E-004 + 74.879999999999995 -3.6695137425816311E-004 + 74.939999999999998 -3.7622629036686137E-004 + 75.000000000000000 -3.8574023508483894E-004 + 75.060000000000002 -3.9549428550877724E-004 + 75.119999999999990 -4.0548951675193652E-004 + 75.179999999999993 -4.1572697335106197E-004 + 75.239999999999995 -4.2620757959167739E-004 + 75.299999999999997 -4.3693219601967517E-004 + 75.359999999999999 -4.4790149310556219E-004 + 75.420000000000002 -4.5911606029835862E-004 + 75.479999999999990 -4.7057624054877627E-004 + 75.539999999999992 -4.8228221524822447E-004 + 75.599999999999994 -4.9423385483976154E-004 + 75.659999999999997 -5.0643080519050259E-004 + 75.719999999999999 -5.1887245105332021E-004 + 75.780000000000001 -5.3155776768738935E-004 + 75.839999999999989 -5.4448547693856041E-004 + 75.899999999999991 -5.5765390694286344E-004 + 75.959999999999994 -5.7106087167851038E-004 + 76.019999999999996 -5.8470395733091929E-004 + 76.079999999999998 -5.9858011030207632E-004 + 76.140000000000001 -6.1268595332090222E-004 + 76.199999999999989 -6.2701758599757859E-004 + 76.259999999999991 -6.4157051459801367E-004 + 76.319999999999993 -6.5633974152251270E-004 + 76.379999999999995 -6.7131968617382585E-004 + 76.439999999999998 -6.8650410662138815E-004 + 76.500000000000000 -7.0188609191664604E-004 + 76.560000000000002 -7.1745814443618895E-004 + 76.619999999999990 -7.3321203996894082E-004 + 76.679999999999993 -7.4913887263390133E-004 + 76.739999999999995 -7.6522890469674987E-004 + 76.799999999999997 -7.8147174898663893E-004 + 76.859999999999999 -7.9785614983023372E-004 + 76.920000000000002 -8.1437023075677461E-004 + 76.979999999999990 -8.3100120096803360E-004 + 77.039999999999992 -8.4773559122500164E-004 + 77.099999999999994 -8.6455911645091693E-004 + 77.159999999999997 -8.8145671330030811E-004 + 77.219999999999999 -8.9841258018218736E-004 + 77.280000000000001 -9.1541015347275671E-004 + 77.339999999999989 -9.3243221196017345E-004 + 77.399999999999991 -9.4946079975788444E-004 + 77.459999999999994 -9.6647715678858915E-004 + 77.519999999999996 -9.8346190790549160E-004 + 77.579999999999998 -1.0003948969925635E-003 + 77.640000000000001 -1.0172554302588584E-003 + 77.699999999999989 -1.0340222061182825E-003 + 77.759999999999991 -1.0506730914748256E-003 + 77.819999999999993 -1.0671854518190546E-003 + 77.879999999999995 -1.0835361879321772E-003 + 77.939999999999998 -1.0997014813042833E-003 + 78.000000000000000 -1.1156570879268407E-003 + 78.060000000000002 -1.1313781975190056E-003 + 78.119999999999990 -1.1468397013167145E-003 + 78.179999999999993 -1.1620158866047143E-003 + 78.239999999999995 -1.1768808659150796E-003 + 78.299999999999997 -1.1914082051000636E-003 + 78.359999999999999 -1.2055715107517741E-003 + 78.420000000000002 -1.2193437916364288E-003 + 78.479999999999990 -1.2326983729570838E-003 + 78.539999999999992 -1.2456081479743138E-003 + 78.599999999999994 -1.2580460596294406E-003 + 78.659999999999997 -1.2699851609029580E-003 + 78.719999999999999 -1.2813983059070618E-003 + 78.780000000000001 -1.2922589464086137E-003 + 78.839999999999989 -1.3025403202948939E-003 + 78.899999999999991 -1.3122161598967455E-003 + 78.959999999999994 -1.3212604793655797E-003 + 79.019999999999996 -1.3296476632074674E-003 + 79.079999999999998 -1.3373527757488421E-003 + 79.140000000000001 -1.3443509563931619E-003 + 79.199999999999989 -1.3506183235910058E-003 + 79.259999999999991 -1.3561315608368147E-003 + 79.319999999999993 -1.3608679867453072E-003 + 79.379999999999995 -1.3648058609620815E-003 + 79.439999999999998 -1.3679241403406440E-003 + 79.500000000000000 -1.3702029097935695E-003 + 79.560000000000002 -1.3716230494178062E-003 + 79.619999999999990 -1.3721665629261041E-003 + 79.679999999999993 -1.3718164522728653E-003 + 79.739999999999995 -1.3705570049384838E-003 + 79.799999999999997 -1.3683736156187550E-003 + 79.859999999999999 -1.3652529065822372E-003 + 79.920000000000002 -1.3611828638856766E-003 + 79.979999999999990 -1.3561528282966596E-003 + 80.039999999999992 -1.3501533830698274E-003 + 80.099999999999994 -1.3431765454415064E-003 + 80.159999999999997 -1.3352157116125771E-003 + 80.219999999999999 -1.3262659982693846E-003 + 80.280000000000001 -1.3163239253309545E-003 + 80.340000000000003 -1.3053873226589279E-003 + 80.400000000000006 -1.2934559166350118E-003 + 80.460000000000008 -1.2805309034424318E-003 + 80.519999999999982 -1.2666151116303545E-003 + 80.579999999999984 -1.2517129589800296E-003 + 80.639999999999986 -1.2358307235162684E-003 + 80.699999999999989 -1.2189760862186003E-003 + 80.759999999999991 -1.2011587197084926E-003 + 80.819999999999993 -1.1823898497217056E-003 + 80.879999999999995 -1.1626823298698697E-003 + 80.939999999999998 -1.1420507633495215E-003 + 81.000000000000000 -1.1205114255250167E-003 + 81.060000000000002 -1.0980820476291489E-003 + 81.120000000000005 -1.0747822410932752E-003 + 81.180000000000007 -1.0506329399063744E-003 + 81.240000000000009 -1.0256569307601261E-003 + 81.299999999999983 -9.9987825928565051E-004 + 81.359999999999985 -9.7332239278428816E-004 + 81.419999999999987 -9.4601633173718854E-004 + 81.479999999999990 -9.1798825369172117E-004 + 81.539999999999992 -8.8926774095432579E-004 + 81.599999999999994 -8.5988557820569753E-004 + 81.659999999999997 -8.2987375413669142E-004 + 81.719999999999999 -7.9926543726513335E-004 + 81.780000000000001 -7.6809478535807706E-004 + 81.840000000000003 -7.3639697230145945E-004 + 81.900000000000006 -7.0420817090495729E-004 + 81.960000000000008 -6.7156532981533406E-004 + 82.019999999999982 -6.3850618684419295E-004 + 82.079999999999984 -6.0506933071020137E-004 + 82.139999999999986 -5.7129393595128843E-004 + 82.199999999999989 -5.3721975452720343E-004 + 82.259999999999991 -5.0288693314632185E-004 + 82.319999999999993 -4.6833612513566818E-004 + 82.379999999999995 -4.3360829496384782E-004 + 82.439999999999998 -3.9874454149395756E-004 + 82.500000000000000 -3.6378617010411526E-004 + 82.560000000000002 -3.2877453132465831E-004 + 82.620000000000005 -2.9375091921415673E-004 + 82.680000000000007 -2.5875653720633016E-004 + 82.740000000000009 -2.2383233742452512E-004 + 82.799999999999983 -1.8901907250624557E-004 + 82.859999999999985 -1.5435707698010235E-004 + 82.919999999999987 -1.1988629079815431E-004 + 82.979999999999990 -8.5646123481863934E-005 + 83.039999999999992 -5.1675410639982259E-005 + 83.099999999999994 -1.8012372490096662E-005 + 83.159999999999997 1.5305514805632189E-005 + 83.219999999999999 4.8241557080224704E-005 + 83.280000000000001 8.0759909509910247E-005 + 83.340000000000003 1.1282564776015833E-004 + 83.400000000000006 1.4440485939516150E-004 + 83.460000000000008 1.7546464802780686E-004 + 83.519999999999982 2.0597325164397996E-004 + 83.579999999999984 2.3590005484974818E-004 + 83.639999999999986 2.6521569916298132E-004 + 83.699999999999989 2.9389210410394321E-004 + 83.759999999999991 3.2190248992253645E-004 + 83.819999999999993 3.4922143250321443E-004 + 83.879999999999995 3.7582496962070060E-004 + 83.939999999999998 4.0169050117164331E-004 + 84.000000000000000 4.2679684487050554E-004 + 84.060000000000002 4.5112436423425204E-004 + 84.120000000000005 4.7465483541035236E-004 + 84.180000000000007 4.9737157700710120E-004 + 84.240000000000009 5.1925930333128608E-004 + 84.299999999999983 5.4030429645994570E-004 + 84.359999999999985 5.6049416794032270E-004 + 84.419999999999987 5.7981826256806154E-004 + 84.479999999999990 5.9826711458216958E-004 + 84.539999999999992 6.1583289384433250E-004 + 84.599999999999994 6.3250916305721732E-004 + 84.659999999999997 6.4829087747811202E-004 + 84.719999999999999 6.6317451264452274E-004 + 84.780000000000001 6.7715783878836272E-004 + 84.840000000000003 6.9023997775866325E-004 + 84.900000000000006 7.0242156535114790E-004 + 84.960000000000008 7.1370445020751310E-004 + 85.019999999999982 7.2409174363360885E-004 + 85.079999999999984 7.3358796865379211E-004 + 85.139999999999986 7.4219877250378610E-004 + 85.199999999999989 7.4993105294607549E-004 + 85.259999999999991 7.5679288114362502E-004 + 85.319999999999993 7.6279335133428241E-004 + 85.379999999999995 7.6794272423504615E-004 + 85.439999999999998 7.7225220692411149E-004 + 85.500000000000000 7.7573400002710097E-004 + 85.560000000000002 7.7840137068674168E-004 + 85.620000000000005 7.8026823914446994E-004 + 85.680000000000007 7.8134954055988524E-004 + 85.740000000000009 7.8166084665202843E-004 + 85.799999999999983 7.8121865006203271E-004 + 85.859999999999985 7.8004002897790077E-004 + 85.919999999999987 7.7814276257058980E-004 + 85.979999999999990 7.7554510238009300E-004 + 86.039999999999992 7.7226603488370071E-004 + 86.099999999999994 7.6832494557385654E-004 + 86.159999999999997 7.6374178291180978E-004 + 86.219999999999999 7.5853673758215744E-004 + 86.280000000000001 7.5273058873565838E-004 + 86.340000000000003 7.4634423672428896E-004 + 86.400000000000006 7.3939903313300975E-004 + 86.460000000000008 7.3191644038363363E-004 + 86.519999999999982 7.2391814148734337E-004 + 86.579999999999984 7.1542593345768095E-004 + 86.639999999999986 7.0646181094350779E-004 + 86.699999999999989 6.9704773537930119E-004 + 86.759999999999991 6.8720579743536392E-004 + 86.819999999999993 6.7695795975773775E-004 + 86.879999999999995 6.6632626109538865E-004 + 86.939999999999998 6.5533264136916633E-004 + 87.000000000000000 6.4399890169651130E-004 + 87.060000000000002 6.3234675954400060E-004 + 87.120000000000005 6.2039787464829158E-004 + 87.180000000000007 6.0817361054280831E-004 + 87.240000000000009 5.9569529618075812E-004 + 87.299999999999983 5.8298392108478063E-004 + 87.359999999999985 5.7006025039188296E-004 + 87.419999999999987 5.5694486100234719E-004 + 87.479999999999990 5.4365794978243468E-004 + 87.539999999999992 5.3021942430788436E-004 + 87.599999999999994 5.1664894529316349E-004 + 87.659999999999997 5.0296565791596191E-004 + 87.719999999999999 4.8918842384757205E-004 + 87.780000000000001 4.7533565504010171E-004 + 87.840000000000003 4.6142532352455140E-004 + 87.900000000000006 4.4747498699320223E-004 + 87.960000000000008 4.3350176478449673E-004 + 88.019999999999982 4.1952225722395370E-004 + 88.079999999999984 4.0555263121896441E-004 + 88.139999999999986 3.9160853026428018E-004 + 88.199999999999989 3.7770516420913375E-004 + 88.259999999999991 3.6385720184364887E-004 + 88.319999999999993 3.5007882226796913E-004 + 88.379999999999995 3.3638378463310593E-004 + 88.439999999999998 3.2278529076178603E-004 + 88.500000000000000 3.0929609927568319E-004 + 88.560000000000002 2.9592841207973540E-004 + 88.620000000000005 2.8269395514651796E-004 + 88.680000000000007 2.6960400038296520E-004 + 88.740000000000009 2.5666928616385656E-004 + 88.799999999999983 2.4390003007797873E-004 + 88.859999999999985 2.3130599809324237E-004 + 88.919999999999987 2.1889639595823574E-004 + 88.979999999999990 2.0667992869325151E-004 + 89.039999999999992 1.9466480449559616E-004 + 89.099999999999994 1.8285869772780711E-004 + 89.159999999999997 1.7126881268222647E-004 + 89.219999999999999 1.5990185575287766E-004 + 89.280000000000001 1.4876403739736574E-004 + 89.340000000000003 1.3786108529894664E-004 + 89.400000000000006 1.2719828087283923E-004 + 89.460000000000008 1.1678042189504496E-004 + 89.519999999999982 1.0661187175133124E-004 + 89.579999999999984 9.6696586097161550E-005 + 89.639999999999986 8.7038068334852861E-005 + 89.699999999999989 7.7639440334621799E-005 + 89.759999999999991 6.8503405224444973E-005 + 89.819999999999993 5.9632296115280016E-005 + 89.879999999999995 5.1028077249536866E-005 + 89.939999999999998 4.2692334022106155E-005 + 90.000000000000000 3.4626308632812134E-005 + 90.060000000000002 2.6830899212332076E-005 + 90.120000000000005 1.9306686812627236E-005 + 90.180000000000007 1.2053934521906497E-005 + 90.240000000000009 5.0726155068565431E-006 + 90.299999999999983 -1.6375785915830752E-006 + 90.359999999999985 -8.0772131379726598E-006 + 90.419999999999987 -1.4247096337008614E-005 + 90.479999999999990 -2.0148261048938194E-005 + 90.539999999999992 -2.5781944968329565E-005 + 90.599999999999994 -3.1149574503152004E-005 + 90.659999999999997 -3.6252751173168058E-005 + 90.719999999999999 -4.1093238455462842E-005 + 90.780000000000001 -4.5672943605178300E-005 + 90.840000000000003 -4.9993918414374168E-005 + 90.900000000000006 -5.4058351092588192E-005 + 90.960000000000008 -5.7868561220352908E-005 + 91.019999999999982 -6.1426986116186827E-005 + 91.079999999999984 -6.4736191101525349E-005 + 91.139999999999986 -6.7798865877714544E-005 + 91.199999999999989 -7.0617812360816370E-005 + 91.259999999999991 -7.3195954714043045E-005 + 91.319999999999993 -7.5536320653220098E-005 + 91.379999999999995 -7.7642049241663671E-005 + 91.439999999999998 -7.9516359253620751E-005 + 91.500000000000000 -8.1162556894397668E-005 + 91.560000000000002 -8.2584019164872794E-005 + 91.620000000000005 -8.3784172508758590E-005 + 91.680000000000007 -8.4766482450700817E-005 + 91.739999999999981 -8.5534429995356011E-005 + 91.799999999999983 -8.6091500375898457E-005 + 91.859999999999985 -8.6441159093304470E-005 + 91.919999999999987 -8.6586866251993436E-005 + 91.979999999999990 -8.6532042008355051E-005 + 92.039999999999992 -8.6280052624060770E-005 + 92.099999999999994 -8.5834218045646824E-005 + 92.159999999999997 -8.5197826414434963E-005 + 92.219999999999999 -8.4374091243127232E-005 + 92.280000000000001 -8.3366196509501204E-005 + 92.340000000000003 -8.2177271130218885E-005 + 92.400000000000006 -8.0810408067223804E-005 + 92.460000000000008 -7.9268650720858979E-005 + 92.519999999999982 -7.7555025050834452E-005 + 92.579999999999984 -7.5672495422846048E-005 + 92.639999999999986 -7.3624000146803602E-005 + 92.699999999999989 -7.1412445475271295E-005 + 92.759999999999991 -6.9040677152580376E-005 + 92.819999999999993 -6.6511499850344059E-005 + 92.879999999999995 -6.3827653190613845E-005 + 92.939999999999998 -6.0991803546380408E-005 + 93.000000000000000 -5.8006534753850162E-005 + 93.060000000000002 -5.4874354118996039E-005 + 93.120000000000005 -5.1597671857399292E-005 + 93.180000000000007 -4.8178788921508394E-005 + 93.239999999999981 -4.4619911997369640E-005 + 93.299999999999983 -4.0923127853668266E-005 + 93.359999999999985 -3.7090422388916533E-005 + 93.419999999999987 -3.3123672471185915E-005 + 93.479999999999990 -2.9024649828054971E-005 + 93.539999999999992 -2.4795029013472179E-005 + 93.599999999999994 -2.0436388363685841E-005 + 93.659999999999997 -1.5950210879343354E-005 + 93.719999999999999 -1.1337894251769795E-005 + 93.780000000000001 -6.6007528077078866E-006 + 93.840000000000003 -1.7400166200556126E-006 + 93.900000000000006 3.2431658955874557E-006 + 93.960000000000008 8.3477276917660298E-006 + 94.019999999999982 1.3572686747975107E-005 + 94.079999999999984 1.8917142026919805E-005 + 94.139999999999986 2.4380281614881947E-005 + 94.199999999999989 2.9961377325889778E-005 + 94.259999999999991 3.5659785772619977E-005 + 94.319999999999993 4.1474953785313712E-005 + 94.379999999999995 4.7406400507350767E-005 + 94.439999999999998 5.3453727128706412E-005 + 94.500000000000000 5.9616598346341007E-005 + 94.560000000000002 6.5894728304012140E-005 + 94.620000000000005 7.2287885363732192E-005 + 94.680000000000007 7.8795871912403111E-005 + 94.739999999999981 8.5418494614885075E-005 + 94.799999999999983 9.2155570869768925E-005 + 94.859999999999985 9.9006899764742117E-005 + 94.919999999999987 1.0597225773318185E-004 + 94.979999999999990 1.1305137576813392E-004 + 95.039999999999992 1.2024391411512559E-004 + 95.099999999999994 1.2754950788700098E-004 + 95.159999999999997 1.3496766055060111E-004 + 95.219999999999999 1.4249779801913851E-004 + 95.280000000000001 1.5013926544754617E-004 + 95.340000000000003 1.5789128593828879E-004 + 95.400000000000006 1.6575292825724114E-004 + 95.460000000000008 1.7372316536625802E-004 + 95.519999999999982 1.8180078081922685E-004 + 95.579999999999984 1.8998440407788934E-004 + 95.639999999999986 1.9827249621091645E-004 + 95.699999999999989 2.0666330172116853E-004 + 95.759999999999991 2.1515485585034091E-004 + 95.819999999999993 2.2374496978840304E-004 + 95.879999999999995 2.3243121231486430E-004 + 95.939999999999998 2.4121086490715968E-004 + 96.000000000000000 2.5008096031020231E-004 + 96.060000000000002 2.5903821533967834E-004 + 96.120000000000005 2.6807902509435488E-004 + 96.180000000000007 2.7719950541807501E-004 + 96.239999999999981 2.8639535296354446E-004 + 96.299999999999983 2.9566201519795192E-004 + 96.359999999999985 3.0499450639404172E-004 + 96.419999999999987 3.1438752237530866E-004 + 96.479999999999990 3.2383535972473152E-004 + 96.539999999999992 3.3333199691936989E-004 + 96.599999999999994 3.4287095707156371E-004 + 96.659999999999997 3.5244539888896781E-004 + 96.719999999999999 3.6204808255158082E-004 + 96.780000000000001 3.7167143901901403E-004 + 96.840000000000003 3.8130737745363166E-004 + 96.900000000000006 3.9094749683976204E-004 + 96.960000000000008 4.0058297970971523E-004 + 97.019999999999982 4.1020459726415188E-004 + 97.079999999999984 4.1980271021359008E-004 + 97.139999999999986 4.2936733648375785E-004 + 97.199999999999989 4.3888810290667793E-004 + 97.259999999999991 4.4835427382810487E-004 + 97.319999999999993 4.5775476104463985E-004 + 97.379999999999995 4.6707820178350652E-004 + 97.439999999999998 4.7631283559991283E-004 + 97.500000000000000 4.8544670781083550E-004 + 97.560000000000002 4.9446756635342331E-004 + 97.620000000000005 5.0336294013427006E-004 + 97.680000000000007 5.1212013203594719E-004 + 97.739999999999981 5.2072629164575399E-004 + 97.799999999999983 5.2916833521779146E-004 + 97.859999999999985 5.3743311119604220E-004 + 97.919999999999987 5.4550734390920383E-004 + 97.979999999999990 5.5337759671481241E-004 + 98.039999999999992 5.6103039568610781E-004 + 98.099999999999994 5.6845220068116678E-004 + 98.159999999999997 5.7562943506688641E-004 + 98.219999999999999 5.8254845487837022E-004 + 98.280000000000001 5.8919574334531037E-004 + 98.340000000000003 5.9555775285817850E-004 + 98.400000000000006 6.0162100185451046E-004 + 98.460000000000008 6.0737226621514488E-004 + 98.519999999999982 6.1279826225625730E-004 + 98.579999999999984 6.1788604154882579E-004 + 98.639999999999986 6.2262288276839644E-004 + 98.699999999999989 6.2699630958166694E-004 + 98.759999999999991 6.3099425364580961E-004 + 98.819999999999993 6.3460497349990632E-004 + 98.879999999999995 6.3781717002334615E-004 + 98.939999999999998 6.4061992652745788E-004 + 99.000000000000000 6.4300294078568313E-004 + 99.060000000000002 6.4495643324319037E-004 + 99.120000000000005 6.4647103770940594E-004 + 99.180000000000007 6.4753812133217458E-004 + 99.239999999999981 6.4814960748478675E-004 + 99.299999999999983 6.4829811408158072E-004 + 99.359999999999985 6.4797688079489110E-004 + 99.419999999999987 6.4717973454866203E-004 + 99.479999999999990 6.4590128173396802E-004 + 99.539999999999992 6.4413679259247908E-004 + 99.599999999999994 6.4188222377114623E-004 + 99.659999999999997 6.3913433570706997E-004 + 99.719999999999999 6.3589052843058484E-004 + 99.780000000000001 6.3214905010359026E-004 + 99.840000000000003 6.2790890995412523E-004 + 99.900000000000006 6.2316986069875947E-004 + 99.960000000000008 6.1793263234850978E-004 + 100.01999999999998 6.1219860617135681E-004 + 100.07999999999998 6.0597008593167166E-004 + 100.13999999999999 5.9925027483504227E-004 + 100.19999999999999 5.9204322808753930E-004 + 100.25999999999999 5.8435386237219342E-004 + 100.31999999999999 5.7618799484415555E-004 + 100.38000000000000 5.6755224218604024E-004 + 100.44000000000000 5.5845404654755021E-004 + 100.50000000000000 5.4890174601601716E-004 + 100.56000000000000 5.3890452864069620E-004 + 100.62000000000000 5.2847230504170207E-004 + 100.68000000000001 5.1761572262744705E-004 + 100.73999999999998 5.0634623562959458E-004 + 100.79999999999998 4.9467597724726768E-004 + 100.85999999999999 4.8261776442169106E-004 + 100.91999999999999 4.7018519034840791E-004 + 100.97999999999999 4.5739233073795139E-004 + 101.03999999999999 4.4425390254284100E-004 + 101.09999999999999 4.3078519963407483E-004 + 101.16000000000000 4.1700204946923316E-004 + 101.22000000000000 4.0292085862933769E-004 + 101.28000000000000 3.8855842995320450E-004 + 101.34000000000000 3.7393203531187907E-004 + 101.40000000000001 3.5905936261073864E-004 + 101.46000000000001 3.4395847381935767E-004 + 101.51999999999998 3.2864779081393094E-004 + 101.57999999999998 3.1314598949601103E-004 + 101.63999999999999 2.9747200592601192E-004 + 101.69999999999999 2.8164499733087387E-004 + 101.75999999999999 2.6568424196075625E-004 + 101.81999999999999 2.4960918449008892E-004 + 101.88000000000000 2.3343934625790188E-004 + 101.94000000000000 2.1719425085451780E-004 + 102.00000000000000 2.0089342112397378E-004 + 102.06000000000000 1.8455634544564534E-004 + 102.12000000000000 1.6820241857669818E-004 + 102.18000000000001 1.5185092471648213E-004 + 102.23999999999998 1.3552097354672525E-004 + 102.29999999999998 1.1923148006028742E-004 + 102.35999999999999 1.0300114258699593E-004 + 102.41999999999999 8.6848376733073224E-005 + 102.47999999999999 7.0791321133151355E-005 + 102.53999999999999 5.4847768071764825E-005 + 102.59999999999999 3.9035153060735224E-005 + 102.66000000000000 2.3370515821894829E-005 + 102.72000000000000 7.8704554982835405E-006 + 102.78000000000000 -7.4489133719397664E-006 + 102.84000000000000 -2.2571942947806030E-005 + 102.90000000000001 -3.7483528237258907E-005 + 102.96000000000001 -5.2169119895772477E-005 + 103.01999999999998 -6.6614753636404594E-005 + 103.07999999999998 -8.0807058690921657E-005 + 103.13999999999999 -9.4733292599665148E-005 + 103.19999999999999 -1.0838135819910461E-004 + 103.25999999999999 -1.2173980661236472E-004 + 103.31999999999999 -1.3479786930447476E-004 + 103.38000000000000 -1.4754545280271122E-004 + 103.44000000000000 -1.5997311953627315E-004 + 103.50000000000000 -1.7207216399907130E-004 + 103.56000000000000 -1.8383454990889957E-004 + 103.62000000000000 -1.9525296026803475E-004 + 103.68000000000001 -2.0632074332550568E-004 + 103.73999999999998 -2.1703199825830503E-004 + 103.79999999999998 -2.2738148300524891E-004 + 103.85999999999999 -2.3736473170670125E-004 + 103.91999999999999 -2.4697790642970219E-004 + 103.97999999999999 -2.5621791082502439E-004 + 104.03999999999999 -2.6508237533068356E-004 + 104.09999999999999 -2.7356958379928478E-004 + 104.16000000000000 -2.8167853619306385E-004 + 104.22000000000000 -2.8940896895779345E-004 + 104.28000000000000 -2.9676117684591691E-004 + 104.34000000000000 -3.0373616998044859E-004 + 104.40000000000001 -3.1033559964705566E-004 + 104.46000000000001 -3.1656170558203050E-004 + 104.51999999999998 -3.2241732183384974E-004 + 104.57999999999998 -3.2790586878951946E-004 + 104.63999999999999 -3.3303128834786459E-004 + 104.69999999999999 -3.3779805345444003E-004 + 104.75999999999999 -3.4221113147841765E-004 + 104.81999999999999 -3.4627595443410450E-004 + 104.88000000000000 -3.4999841075587562E-004 + 104.94000000000000 -3.5338477383943284E-004 + 105.00000000000000 -3.5644178491509265E-004 + 105.06000000000000 -3.5917648853829543E-004 + 105.12000000000000 -3.6159633440626852E-004 + 105.18000000000001 -3.6370915605160229E-004 + 105.23999999999998 -3.6552307779873542E-004 + 105.29999999999998 -3.6704652260040110E-004 + 105.35999999999999 -3.6828818312107758E-004 + 105.41999999999999 -3.6925699680270677E-004 + 105.47999999999999 -3.6996219652322358E-004 + 105.53999999999999 -3.7041316887130116E-004 + 105.59999999999999 -3.7061949482703447E-004 + 105.66000000000000 -3.7059089391460831E-004 + 105.72000000000000 -3.7033722006789190E-004 + 105.78000000000000 -3.6986839309909476E-004 + 105.84000000000000 -3.6919445376990738E-004 + 105.90000000000001 -3.6832541983944437E-004 + 105.96000000000001 -3.6727131750175776E-004 + 106.01999999999998 -3.6604217532057329E-004 + 106.07999999999998 -3.6464800167478718E-004 + 106.13999999999999 -3.6309876143487854E-004 + 106.19999999999999 -3.6140427975078087E-004 + 106.25999999999999 -3.5957436548596781E-004 + 106.31999999999999 -3.5761871286567055E-004 + 106.38000000000000 -3.5554697815261055E-004 + 106.44000000000000 -3.5336863359328554E-004 + 106.50000000000000 -3.5109305975584618E-004 + 106.56000000000000 -3.4872950662618332E-004 + 106.62000000000000 -3.4628706987823837E-004 + 106.68000000000001 -3.4377470395426270E-004 + 106.73999999999998 -3.4120123641614731E-004 + 106.79999999999998 -3.3857526004431136E-004 + 106.85999999999999 -3.3590519784265264E-004 + 106.91999999999999 -3.3319928583261182E-004 + 106.97999999999999 -3.3046553016091289E-004 + 107.03999999999999 -3.2771170998685935E-004 + 107.09999999999999 -3.2494536244731016E-004 + 107.16000000000000 -3.2217369752903142E-004 + 107.22000000000000 -3.1940374219403903E-004 + 107.28000000000000 -3.1664219031429780E-004 + 107.34000000000000 -3.1389548295689807E-004 + 107.40000000000001 -3.1116971435012449E-004 + 107.46000000000001 -3.0847074572169808E-004 + 107.51999999999998 -3.0580415164576383E-004 + 107.57999999999998 -3.0317518111051719E-004 + 107.63999999999999 -3.0058878968547431E-004 + 107.69999999999999 -2.9804967070356679E-004 + 107.75999999999999 -2.9556224396679021E-004 + 107.81999999999999 -2.9313059190730562E-004 + 107.88000000000000 -2.9075853257703652E-004 + 107.94000000000000 -2.8844964946105257E-004 + 108.00000000000000 -2.8620717910249956E-004 + 108.06000000000000 -2.8403410437137625E-004 + 108.12000000000000 -2.8193304662496788E-004 + 108.18000000000001 -2.7990645927776123E-004 + 108.23999999999998 -2.7795633084671379E-004 + 108.29999999999998 -2.7608441338643956E-004 + 108.35999999999999 -2.7429216820551455E-004 + 108.41999999999999 -2.7258072797917935E-004 + 108.47999999999999 -2.7095091532056993E-004 + 108.53999999999999 -2.6940319505557074E-004 + 108.59999999999999 -2.6793775412188836E-004 + 108.66000000000000 -2.6655443005365632E-004 + 108.72000000000000 -2.6525279463327021E-004 + 108.78000000000000 -2.6403205952905447E-004 + 108.84000000000000 -2.6289116989741673E-004 + 108.90000000000001 -2.6182873107473409E-004 + 108.96000000000001 -2.6084305189173800E-004 + 109.01999999999998 -2.5993215689521030E-004 + 109.07999999999998 -2.5909376229776778E-004 + 109.13999999999999 -2.5832527898420770E-004 + 109.19999999999999 -2.5762383129554418E-004 + 109.25999999999999 -2.5698630145001161E-004 + 109.31999999999999 -2.5640925912046600E-004 + 109.38000000000000 -2.5588903212722951E-004 + 109.44000000000000 -2.5542160929837904E-004 + 109.50000000000000 -2.5500285233841702E-004 + 109.56000000000000 -2.5462829494559097E-004 + 109.62000000000000 -2.5429329763294699E-004 + 109.68000000000001 -2.5399299052787265E-004 + 109.73999999999998 -2.5372234736976420E-004 + 109.79999999999998 -2.5347612352156481E-004 + 109.85999999999999 -2.5324896151301789E-004 + 109.91999999999999 -2.5303533898025140E-004 + 109.97999999999999 -2.5282962660695874E-004 + 110.03999999999999 -2.5262614560843958E-004 + 110.09999999999999 -2.5241902755816374E-004 + 110.16000000000000 -2.5220242504352087E-004 + 110.22000000000000 -2.5197034968202370E-004 + 110.28000000000000 -2.5171686179246224E-004 + 110.34000000000000 -2.5143589892750973E-004 + 110.40000000000001 -2.5112141077048055E-004 + 110.46000000000001 -2.5076736497473115E-004 + 110.51999999999998 -2.5036772941042907E-004 + 110.57999999999998 -2.4991645624097326E-004 + 110.63999999999999 -2.4940759792436003E-004 + 110.69999999999999 -2.4883525578590606E-004 + 110.75999999999999 -2.4819356124678360E-004 + 110.81999999999999 -2.4747682448720854E-004 + 110.88000000000000 -2.4667950220448831E-004 + 110.94000000000000 -2.4579616086245151E-004 + 111.00000000000000 -2.4482155771106791E-004 + 111.06000000000000 -2.4375073217934248E-004 + 111.12000000000000 -2.4257889504021934E-004 + 111.18000000000001 -2.4130155991204278E-004 + 111.23999999999998 -2.3991451994447702E-004 + 111.29999999999998 -2.3841384715346796E-004 + 111.35999999999999 -2.3679594857717112E-004 + 111.41999999999999 -2.3505758165520945E-004 + 111.47999999999999 -2.3319580562927681E-004 + 111.53999999999999 -2.3120806534464736E-004 + 111.59999999999999 -2.2909212242188916E-004 + 111.66000000000000 -2.2684612171256372E-004 + 111.72000000000000 -2.2446854222435116E-004 + 111.78000000000000 -2.2195822704717424E-004 + 111.84000000000000 -2.1931438340852885E-004 + 111.90000000000001 -2.1653658869872920E-004 + 111.96000000000001 -2.1362475438524485E-004 + 112.01999999999998 -2.1057920601813494E-004 + 112.07999999999998 -2.0740062550623909E-004 + 112.13999999999999 -2.0409005477203162E-004 + 112.19999999999999 -2.0064895377968660E-004 + 112.25999999999999 -1.9707915010284922E-004 + 112.31999999999999 -1.9338286657031857E-004 + 112.38000000000000 -1.8956274755919944E-004 + 112.44000000000000 -1.8562182778701473E-004 + 112.50000000000000 -1.8156354370454697E-004 + 112.56000000000000 -1.7739172156516813E-004 + 112.62000000000000 -1.7311056668648902E-004 + 112.68000000000001 -1.6872469609199368E-004 + 112.73999999999998 -1.6423906256463714E-004 + 112.79999999999998 -1.5965899403299597E-004 + 112.85999999999999 -1.5499017327466334E-004 + 112.91999999999999 -1.5023859946031892E-004 + 112.97999999999999 -1.4541055657280320E-004 + 113.03999999999999 -1.4051266560509955E-004 + 113.09999999999999 -1.3555177924390110E-004 + 113.16000000000000 -1.3053504666344352E-004 + 113.22000000000000 -1.2546982080009411E-004 + 113.28000000000000 -1.2036370289548352E-004 + 113.34000000000000 -1.1522449006918239E-004 + 113.40000000000001 -1.1006018155123540E-004 + 113.46000000000001 -1.0487893151765783E-004 + 113.51999999999998 -9.9689059997353684E-005 + 113.57999999999998 -9.4499023810957727E-005 + 113.63999999999999 -8.9317404127334108E-005 + 113.69999999999999 -8.4152887903058698E-005 + 113.75999999999999 -7.9014230820037264E-005 + 113.81999999999999 -7.3910244589060501E-005 + 113.88000000000000 -6.8849788906836035E-005 + 113.94000000000000 -6.3841729342561146E-005 + 114.00000000000000 -5.8894926353841226E-005 + 114.06000000000000 -5.4018190442065055E-005 + 114.12000000000000 -4.9220289553252712E-005 + 114.18000000000001 -4.4509889889503757E-005 + 114.23999999999998 -3.9895562466505863E-005 + 114.29999999999998 -3.5385740039502783E-005 + 114.35999999999999 -3.0988706451119868E-005 + 114.41999999999999 -2.6712570436447499E-005 + 114.47999999999999 -2.2565245837377126E-005 + 114.53999999999999 -1.8554434048658532E-005 + 114.59999999999999 -1.4687604043963010E-005 + 114.66000000000000 -1.0971976077143506E-005 + 114.72000000000000 -7.4144995711803546E-006 + 114.78000000000000 -4.0218419690521995E-006 + 114.84000000000000 -8.0036498724355155E-007 + 114.90000000000001 2.2438837255280530E-006 + 114.96000000000001 5.1051976527852836E-006 + 115.01999999999998 7.7782160703480242E-006 + 115.07999999999998 1.0257948841046534E-005 + 115.13999999999999 1.2539787484792673E-005 + 115.19999999999999 1.4619514593042982E-005 + 115.25999999999999 1.6493320306388905E-005 + 115.31999999999999 1.8157817348601292E-005 + 115.38000000000000 1.9610044774337416E-005 + 115.44000000000000 2.0847475492949856E-005 + 115.50000000000000 2.1868029540751604E-005 + 115.56000000000000 2.2670075906492986E-005 + 115.62000000000000 2.3252431282448289E-005 + 115.68000000000001 2.3614374113813026E-005 + 115.73999999999998 2.3755633034083739E-005 + 115.79999999999998 2.3676398021835734E-005 + 115.85999999999999 2.3377313093116683E-005 + 115.91999999999999 2.2859480599086911E-005 + 115.97999999999999 2.2124448736325838E-005 + 116.03999999999999 2.1174216213778351E-005 + 116.09999999999999 2.0011227136318311E-005 + 116.16000000000000 1.8638358271967317E-005 + 116.22000000000000 1.7058916411095546E-005 + 116.28000000000000 1.5276627378311578E-005 + 116.34000000000000 1.3295623815775832E-005 + 116.40000000000001 1.1120433081912119E-005 + 116.46000000000001 8.7559613561600178E-006 + 116.51999999999998 6.2074749109323174E-006 + 116.57999999999998 3.4805849827181820E-006 + 116.63999999999999 5.8122358935218313E-007 + 116.69999999999999 -2.4843747051324615E-006 + 116.75999999999999 -5.7096978235268358E-006 + 116.81999999999999 -9.0879696647864262E-006 + 116.88000000000000 -1.2612181986635924E-005 + 116.94000000000000 -1.6275111114732991E-005 + 117.00000000000000 -2.0069335363619586E-005 + 117.06000000000000 -2.3987260501066149E-005 + 117.12000000000000 -2.8021131996831872E-005 + 117.18000000000001 -3.2163051885176775E-005 + 117.23999999999998 -3.6405001276251180E-005 + 117.29999999999998 -4.0738846735488001E-005 + 117.35999999999999 -4.5156366582664397E-005 + 117.41999999999999 -4.9649260202457147E-005 + 117.47999999999999 -5.4209159938952824E-005 + 117.53999999999999 -5.8827654516957787E-005 + 117.59999999999999 -6.3496314424214099E-005 + 117.66000000000000 -6.8206715424912119E-005 + 117.72000000000000 -7.2950429774822065E-005 + 117.78000000000000 -7.7719093655243492E-005 + 117.84000000000000 -8.2504404156791118E-005 + 117.90000000000001 -8.7298144607232821E-005 + 117.96000000000001 -9.2092223585964913E-005 + 118.01999999999998 -9.6878679267159112E-005 + 118.07999999999998 -1.0164972983831847E-004 + 118.13999999999999 -1.0639778257574466E-004 + 118.19999999999999 -1.1111542286605724E-004 + 118.25999999999999 -1.1579546631076813E-004 + 118.31999999999999 -1.2043096864001269E-004 + 118.38000000000000 -1.2501521231132628E-004 + 118.44000000000000 -1.2954173248782482E-004 + 118.50000000000000 -1.3400429608340054E-004 + 118.56000000000000 -1.3839693266383789E-004 + 118.62000000000000 -1.4271390581573510E-004 + 118.68000000000001 -1.4694971532918299E-004 + 118.73999999999998 -1.5109909199447611E-004 + 118.79999999999998 -1.5515702781643707E-004 + 118.85999999999999 -1.5911873546369798E-004 + 118.91999999999999 -1.6297964815997659E-004 + 118.97999999999999 -1.6673545029286451E-004 + 119.03999999999999 -1.7038206684795960E-004 + 119.09999999999999 -1.7391564056181793E-004 + 119.16000000000000 -1.7733261517906295E-004 + 119.22000000000000 -1.8062964895646536E-004 + 119.28000000000000 -1.8380368038473560E-004 + 119.34000000000000 -1.8685192301544888E-004 + 119.40000000000001 -1.8977190034037935E-004 + 119.46000000000001 -1.9256140958128236E-004 + 119.51999999999998 -1.9521854619943145E-004 + 119.57999999999998 -1.9774169382918814E-004 + 119.63999999999999 -2.0012956493051175E-004 + 119.69999999999999 -2.0238112343763776E-004 + 119.75999999999999 -2.0449566857163871E-004 + 119.81999999999999 -2.0647275213853084E-004 + 119.88000000000000 -2.0831219810891528E-004 + 119.94000000000000 -2.1001409555726142E-004 + 120.00000000000000 -2.1157879355187680E-004 + 120.06000000000000 -2.1300682698372609E-004 + 120.12000000000000 -2.1429898939810574E-004 + 120.18000000000001 -2.1545628141793750E-004 + 120.23999999999998 -2.1647986668797291E-004 + 120.29999999999998 -2.1737111953074254E-004 + 120.35999999999999 -2.1813155686770799E-004 + 120.41999999999999 -2.1876287782721066E-004 + 120.47999999999999 -2.1926691535274748E-004 + 120.53999999999999 -2.1964566271798168E-004 + 120.59999999999999 -2.1990123507010958E-004 + 120.66000000000000 -2.2003587845141143E-004 + 120.72000000000000 -2.2005200115390129E-004 + 120.78000000000000 -2.1995210647517106E-004 + 120.84000000000000 -2.1973883043961570E-004 + 120.90000000000001 -2.1941492666642754E-004 + 120.95999999999998 -2.1898323308710256E-004 + 121.01999999999998 -2.1844671586820983E-004 + 121.07999999999998 -2.1780844796640841E-004 + 121.13999999999999 -2.1707159019145644E-004 + 121.19999999999999 -2.1623939064191119E-004 + 121.25999999999999 -2.1531516482257000E-004 + 121.31999999999999 -2.1430232350253038E-004 + 121.38000000000000 -2.1320431833661460E-004 + 121.44000000000000 -2.1202467062323089E-004 + 121.50000000000000 -2.1076695497143725E-004 + 121.56000000000000 -2.0943474813491322E-004 + 121.62000000000000 -2.0803169674415829E-004 + 121.68000000000001 -2.0656142748667363E-004 + 121.73999999999998 -2.0502758848474334E-004 + 121.79999999999998 -2.0343381822616465E-004 + 121.85999999999999 -2.0178371079925851E-004 + 121.91999999999999 -2.0008085997156870E-004 + 121.97999999999999 -1.9832880209934419E-004 + 122.03999999999999 -1.9653100235108624E-004 + 122.09999999999999 -1.9469089600869830E-004 + 122.16000000000000 -1.9281184330728274E-004 + 122.22000000000000 -1.9089710143594641E-004 + 122.28000000000000 -1.8894985270233655E-004 + 122.34000000000000 -1.8697319748031896E-004 + 122.40000000000001 -1.8497017866435025E-004 + 122.45999999999998 -1.8294369556685959E-004 + 122.51999999999998 -1.8089658140418030E-004 + 122.57999999999998 -1.7883159875777907E-004 + 122.63999999999999 -1.7675140871575458E-004 + 122.69999999999999 -1.7465858830320585E-004 + 122.75999999999999 -1.7255565478151096E-004 + 122.81999999999999 -1.7044503653616545E-004 + 122.88000000000000 -1.6832906758467494E-004 + 122.94000000000000 -1.6621004545029766E-004 + 123.00000000000000 -1.6409018583588315E-004 + 123.06000000000000 -1.6197158761228772E-004 + 123.12000000000000 -1.5985633516490478E-004 + 123.18000000000001 -1.5774640256540257E-004 + 123.23999999999998 -1.5564370877000391E-004 + 123.29999999999998 -1.5355006340867110E-004 + 123.35999999999999 -1.5146719387688147E-004 + 123.41999999999999 -1.4939676591950739E-004 + 123.47999999999999 -1.4734033688390612E-004 + 123.53999999999999 -1.4529938862698841E-004 + 123.59999999999999 -1.4327532542497953E-004 + 123.66000000000000 -1.4126943562204887E-004 + 123.72000000000000 -1.3928297323301679E-004 + 123.78000000000000 -1.3731708736352860E-004 + 123.84000000000000 -1.3537284315019623E-004 + 123.90000000000001 -1.3345124986980823E-004 + 123.95999999999998 -1.3155325497556856E-004 + 124.01999999999998 -1.2967974665490016E-004 + 124.07999999999998 -1.2783157223053088E-004 + 124.13999999999999 -1.2600951327261799E-004 + 124.19999999999999 -1.2421433204949336E-004 + 124.25999999999999 -1.2244671874664457E-004 + 124.31999999999999 -1.2070735200687816E-004 + 124.38000000000000 -1.1899685636952653E-004 + 124.44000000000000 -1.1731583583161770E-004 + 124.50000000000000 -1.1566486859685168E-004 + 124.56000000000000 -1.1404447638111225E-004 + 124.62000000000000 -1.1245517713024769E-004 + 124.68000000000001 -1.1089744264854785E-004 + 124.73999999999998 -1.0937171917510652E-004 + 124.79999999999998 -1.0787841701015392E-004 + 124.85999999999999 -1.0641794074972356E-004 + 124.91999999999999 -1.0499064199221664E-004 + 124.97999999999999 -1.0359687077282014E-004 + 125.03999999999999 -1.0223693284056883E-004 + 125.09999999999999 -1.0091110507646894E-004 + 125.16000000000000 -9.9619663697331478E-005 + 125.22000000000000 -9.8362836645064593E-005 + 125.28000000000000 -9.7140829632936875E-005 + 125.34000000000000 -9.5953827864660133E-005 + 125.40000000000001 -9.4801985037705201E-005 + 125.45999999999998 -9.3685412623581850E-005 + 125.51999999999998 -9.2604201964801541E-005 + 125.57999999999998 -9.1558408415883341E-005 + 125.63999999999999 -9.0548047759562379E-005 + 125.69999999999999 -8.9573109456496497E-005 + 125.75999999999999 -8.8633547649892303E-005 + 125.81999999999999 -8.7729294044300532E-005 + 125.88000000000000 -8.6860243716063042E-005 + 125.94000000000000 -8.6026278858940624E-005 + 126.00000000000000 -8.5227252349000761E-005 + 126.06000000000000 -8.4463026767069431E-005 + 126.12000000000000 -8.3733437117825151E-005 + 126.18000000000001 -8.3038332231207131E-005 + 126.23999999999998 -8.2377555647372651E-005 + 126.29999999999998 -8.1750969569804009E-005 + 126.35999999999999 -8.1158434069759382E-005 + 126.41999999999999 -8.0599816458564187E-005 + 126.47999999999999 -8.0075011293046720E-005 + 126.53999999999999 -7.9583912803797636E-005 + 126.59999999999999 -7.9126416288711267E-005 + 126.66000000000000 -7.8702437572157944E-005 + 126.72000000000000 -7.8311864348198907E-005 + 126.78000000000000 -7.7954601960806240E-005 + 126.84000000000000 -7.7630529129694664E-005 + 126.90000000000001 -7.7339522171529349E-005 + 126.95999999999998 -7.7081426799373908E-005 + 127.01999999999998 -7.6856073472424106E-005 + 127.07999999999998 -7.6663264345661823E-005 + 127.13999999999999 -7.6502801950836948E-005 + 127.19999999999999 -7.6374451937164271E-005 + 127.25999999999999 -7.6277969316856803E-005 + 127.31999999999999 -7.6213109298143368E-005 + 127.38000000000000 -7.6179609770695556E-005 + 127.44000000000000 -7.6177220877544525E-005 + 127.50000000000000 -7.6205686687408792E-005 + 127.56000000000000 -7.6264769008240510E-005 + 127.62000000000000 -7.6354238612022252E-005 + 127.68000000000001 -7.6473869063992087E-005 + 127.73999999999998 -7.6623456390037187E-005 + 127.79999999999998 -7.6802795028175428E-005 + 127.85999999999999 -7.7011691253673386E-005 + 127.91999999999999 -7.7249955857889874E-005 + 127.97999999999999 -7.7517378269939199E-005 + 128.03999999999999 -7.7813740580963262E-005 + 128.09999999999999 -7.8138809423385064E-005 + 128.16000000000000 -7.8492313056419038E-005 + 128.22000000000000 -7.8873953251261050E-005 + 128.28000000000000 -7.9283379201727615E-005 + 128.34000000000000 -7.9720194884449157E-005 + 128.40000000000001 -8.0183955989449293E-005 + 128.45999999999998 -8.0674170078074664E-005 + 128.51999999999998 -8.1190282862827996E-005 + 128.57999999999998 -8.1731694966564704E-005 + 128.63999999999999 -8.2297748745234299E-005 + 128.69999999999999 -8.2887754295745054E-005 + 128.75999999999999 -8.3500961184760849E-005 + 128.81999999999999 -8.4136602608199135E-005 + 128.88000000000000 -8.4793850104008820E-005 + 128.94000000000000 -8.5471861943196703E-005 + 129.00000000000000 -8.6169767834614596E-005 + 129.06000000000000 -8.6886658471338186E-005 + 129.12000000000000 -8.7621607858086640E-005 + 129.18000000000001 -8.8373670957599392E-005 + 129.23999999999998 -8.9141874438342298E-005 + 129.29999999999998 -8.9925208481248084E-005 + 129.35999999999999 -9.0722662888333976E-005 + 129.41999999999999 -9.1533186917588266E-005 + 129.47999999999999 -9.2355699473060127E-005 + 129.53999999999999 -9.3189106576291918E-005 + 129.59999999999999 -9.4032279241241143E-005 + 129.66000000000000 -9.4884068585867273E-005 + 129.72000000000000 -9.5743316827804804E-005 + 129.78000000000000 -9.6608824147646145E-005 + 129.84000000000000 -9.7479391442429611E-005 + 129.90000000000001 -9.8353807268232931E-005 + 129.95999999999998 -9.9230844752308493E-005 + 130.01999999999998 -1.0010928935042536E-004 + 130.07999999999998 -1.0098793773320889E-004 + 130.13999999999999 -1.0186558467738432E-004 + 130.19999999999999 -1.0274104590050120E-004 + 130.25999999999999 -1.0361316233205710E-004 + 130.31999999999999 -1.0448080513014997E-004 + 130.38000000000000 -1.0534287535405135E-004 + 130.44000000000000 -1.0619831132111665E-004 + 130.50000000000000 -1.0704609913920351E-004 + 130.56000000000000 -1.0788527162217100E-004 + 130.62000000000000 -1.0871490663102896E-004 + 130.68000000000001 -1.0953412738874280E-004 + 130.73999999999998 -1.1034212278452652E-004 + 130.79999999999998 -1.1113812360748742E-004 + 130.85999999999999 -1.1192143262505952E-004 + 130.91999999999999 -1.1269138473941018E-004 + 130.97999999999999 -1.1344739137829498E-004 + 131.03999999999999 -1.1418890662322673E-004 + 131.09999999999999 -1.1491545795409409E-004 + 131.16000000000000 -1.1562662916994946E-004 + 131.22000000000000 -1.1632204097863465E-004 + 131.28000000000000 -1.1700139559328641E-004 + 131.34000000000000 -1.1766444875023182E-004 + 131.40000000000001 -1.1831099804466834E-004 + 131.45999999999998 -1.1894091600381575E-004 + 131.51999999999998 -1.1955414828495681E-004 + 131.57999999999998 -1.2015067759608497E-004 + 131.63999999999999 -1.2073056968299905E-004 + 131.69999999999999 -1.2129393454800667E-004 + 131.75999999999999 -1.2184096682058121E-004 + 131.81999999999999 -1.2237190435315093E-004 + 131.88000000000000 -1.2288706435797876E-004 + 131.94000000000000 -1.2338683758385439E-004 + 132.00000000000000 -1.2387168000667519E-004 + 132.06000000000000 -1.2434211231495752E-004 + 132.12000000000000 -1.2479872330687080E-004 + 132.18000000000001 -1.2524214958332800E-004 + 132.23999999999998 -1.2567309039269336E-004 + 132.29999999999998 -1.2609233174242125E-004 + 132.35999999999999 -1.2650070115706347E-004 + 132.41999999999999 -1.2689906027128070E-004 + 132.47999999999999 -1.2728835020410536E-004 + 132.53999999999999 -1.2766952741973634E-004 + 132.59999999999999 -1.2804362463089867E-004 + 132.66000000000000 -1.2841170249980766E-004 + 132.72000000000000 -1.2877486508278984E-004 + 132.78000000000000 -1.2913425808809719E-004 + 132.84000000000000 -1.2949106811583166E-004 + 132.90000000000001 -1.2984655280463475E-004 + 132.95999999999998 -1.3020196911553303E-004 + 133.01999999999998 -1.3055866099593485E-004 + 133.07999999999998 -1.3091800438032761E-004 + 133.13999999999999 -1.3128139688363874E-004 + 133.19999999999999 -1.3165034396271094E-004 + 133.25999999999999 -1.3202637795841322E-004 + 133.31999999999999 -1.3241105774917700E-004 + 133.38000000000000 -1.3280603472252836E-004 + 133.44000000000000 -1.3321298251083521E-004 + 133.50000000000000 -1.3363363591495462E-004 + 133.56000000000000 -1.3406976186010536E-004 + 133.62000000000000 -1.3452315453470442E-004 + 133.68000000000001 -1.3499564724398609E-004 + 133.73999999999998 -1.3548905750452962E-004 + 133.79999999999998 -1.3600522099168092E-004 + 133.85999999999999 -1.3654599206502154E-004 + 133.91999999999999 -1.3711319314924848E-004 + 133.97999999999999 -1.3770860000586479E-004 + 134.03999999999999 -1.3833398021111828E-004 + 134.09999999999999 -1.3899107341921625E-004 + 134.16000000000000 -1.3968153265430015E-004 + 134.22000000000000 -1.4040699816505071E-004 + 134.28000000000000 -1.4116900556729453E-004 + 134.34000000000000 -1.4196903681034799E-004 + 134.40000000000001 -1.4280851075955606E-004 + 134.45999999999998 -1.4368874673313607E-004 + 134.51999999999998 -1.4461101333832329E-004 + 134.57999999999998 -1.4557646498600574E-004 + 134.63999999999999 -1.4658614303974919E-004 + 134.69999999999999 -1.4764102363212835E-004 + 134.75999999999999 -1.4874194754167650E-004 + 134.81999999999999 -1.4988965442512062E-004 + 134.88000000000000 -1.5108472819525275E-004 + 134.94000000000000 -1.5232760494617516E-004 + 135.00000000000000 -1.5361861900594143E-004 + 135.06000000000000 -1.5495790171550115E-004 + 135.12000000000000 -1.5634543123267103E-004 + 135.18000000000001 -1.5778097747717003E-004 + 135.23999999999998 -1.5926415396761229E-004 + 135.29999999999998 -1.6079432847485931E-004 + 135.35999999999999 -1.6237069565980822E-004 + 135.41999999999999 -1.6399219714035172E-004 + 135.47999999999999 -1.6565758683490808E-004 + 135.53999999999999 -1.6736538427235455E-004 + 135.59999999999999 -1.6911390378113896E-004 + 135.66000000000000 -1.7090120116500972E-004 + 135.72000000000000 -1.7272515252895356E-004 + 135.78000000000000 -1.7458339876802803E-004 + 135.84000000000000 -1.7647338054348438E-004 + 135.90000000000001 -1.7839233932444713E-004 + 135.95999999999998 -1.8033730502406504E-004 + 136.01999999999998 -1.8230512434134360E-004 + 136.07999999999998 -1.8429248361328656E-004 + 136.13999999999999 -1.8629585050991410E-004 + 136.19999999999999 -1.8831155143772015E-004 + 136.25999999999999 -1.9033574277596365E-004 + 136.31999999999999 -1.9236441017496337E-004 + 136.38000000000000 -1.9439338891787296E-004 + 136.44000000000000 -1.9641837015056836E-004 + 136.50000000000000 -1.9843488480795167E-004 + 136.56000000000000 -2.0043832224341137E-004 + 136.62000000000000 -2.0242397135562045E-004 + 136.68000000000001 -2.0438698121633142E-004 + 136.73999999999998 -2.0632236157586226E-004 + 136.79999999999998 -2.0822504363425957E-004 + 136.85999999999999 -2.1008984766800233E-004 + 136.91999999999999 -2.1191153199682220E-004 + 136.97999999999999 -2.1368476764141217E-004 + 137.03999999999999 -2.1540418342499894E-004 + 137.09999999999999 -2.1706435174495401E-004 + 137.16000000000000 -2.1865982773166683E-004 + 137.22000000000000 -2.2018517142060961E-004 + 137.28000000000000 -2.2163494554036978E-004 + 137.34000000000000 -2.2300373575133181E-004 + 137.40000000000001 -2.2428616882738005E-004 + 137.45999999999998 -2.2547698392689675E-004 + 137.51999999999998 -2.2657094207625795E-004 + 137.57999999999998 -2.2756292537837812E-004 + 137.63999999999999 -2.2844792422865821E-004 + 137.69999999999999 -2.2922105197711930E-004 + 137.75999999999999 -2.2987757446009125E-004 + 137.81999999999999 -2.3041291279494232E-004 + 137.88000000000000 -2.3082264460414385E-004 + 137.94000000000000 -2.3110253347313067E-004 + 138.00000000000000 -2.3124852167451016E-004 + 138.06000000000000 -2.3125677760663733E-004 + 138.12000000000000 -2.3112365360200476E-004 + 138.18000000000001 -2.3084575135373181E-004 + 138.23999999999998 -2.3041987195102982E-004 + 138.29999999999998 -2.2984302454722542E-004 + 138.35999999999999 -2.2911251836367350E-004 + 138.41999999999999 -2.2822586919239878E-004 + 138.47999999999999 -2.2718083997791207E-004 + 138.53999999999999 -2.2597548847114066E-004 + 138.59999999999999 -2.2460811484592254E-004 + 138.66000000000000 -2.2307730151783367E-004 + 138.72000000000000 -2.2138192351605124E-004 + 138.78000000000000 -2.1952111813298633E-004 + 138.84000000000000 -2.1749434853247132E-004 + 138.90000000000001 -2.1530138221811316E-004 + 138.95999999999998 -2.1294229514510010E-004 + 139.01999999999998 -2.1041751298684732E-004 + 139.07999999999998 -2.0772779557904223E-004 + 139.13999999999999 -2.0487419803439055E-004 + 139.19999999999999 -2.0185818255089564E-004 + 139.25999999999999 -1.9868156840074203E-004 + 139.31999999999999 -1.9534650279527766E-004 + 139.38000000000000 -1.9185552411831778E-004 + 139.44000000000000 -1.8821154716645383E-004 + 139.50000000000000 -1.8441784016589945E-004 + 139.56000000000000 -1.8047804329927896E-004 + 139.62000000000000 -1.7639616273999761E-004 + 139.68000000000001 -1.7217655999277197E-004 + 139.73999999999998 -1.6782394666685170E-004 + 139.79999999999998 -1.6334334512170491E-004 + 139.85999999999999 -1.5874014484673128E-004 + 139.91999999999999 -1.5402000813034654E-004 + 139.97999999999999 -1.4918892414661597E-004 + 140.03999999999999 -1.4425316617388222E-004 + 140.09999999999999 -1.3921928264835827E-004 + 140.16000000000000 -1.3409408582649643E-004 + 140.22000000000000 -1.2888464266809754E-004 + 140.28000000000000 -1.2359825338697340E-004 + 140.34000000000000 -1.1824245215425776E-004 + 140.40000000000001 -1.1282500882189409E-004 + 140.45999999999998 -1.0735387082949219E-004 + 140.51999999999998 -1.0183720807563060E-004 + 140.57999999999998 -9.6283368982598327E-005 + 140.63999999999999 -9.0700885437229784E-005 + 140.69999999999999 -8.5098437988232140E-005 + 140.75999999999999 -7.9484874190861261E-005 + 140.81999999999999 -7.3869154232530603E-005 + 140.88000000000000 -6.8260378346422063E-005 + 140.94000000000000 -6.2667709006987535E-005 + 141.00000000000000 -5.7100410912884657E-005 + 141.06000000000000 -5.1567779615373496E-005 + 141.12000000000000 -4.6079149422303968E-005 + 141.18000000000001 -4.0643843554157973E-005 + 141.23999999999998 -3.5271167304784550E-005 + 141.29999999999998 -2.9970369150216572E-005 + 141.35999999999999 -2.4750618227000279E-005 + 141.41999999999999 -1.9620975619426777E-005 + 141.47999999999999 -1.4590369259237863E-005 + 141.53999999999999 -9.6675686394474501E-006 + 141.59999999999999 -4.8611695508971621E-006 + 141.66000000000000 -1.7955818352094641E-007 + 141.72000000000000 4.3690932204563235E-006 + 141.78000000000000 8.7768587812358742E-006 + 141.84000000000000 1.3036062962112675E-005 + 141.90000000000001 1.7139303821947604E-005 + 141.95999999999998 2.1079464316992460E-005 + 142.01999999999998 2.4849727689737270E-005 + 142.07999999999998 2.8443582648455177E-005 + 142.13999999999999 3.1854839009333001E-005 + 142.19999999999999 3.5077641382811238E-005 + 142.25999999999999 3.8106477352413454E-005 + 142.31999999999999 4.0936181098157943E-005 + 142.38000000000000 4.3561953583454758E-005 + 142.44000000000000 4.5979358580953038E-005 + 142.50000000000000 4.8184341652054844E-005 + 142.56000000000000 5.0173241080900206E-005 + 142.62000000000000 5.1942786380460273E-005 + 142.68000000000001 5.3490108478271373E-005 + 142.73999999999998 5.4812751715648085E-005 + 142.79999999999998 5.5908667732806853E-005 + 142.85999999999999 5.6776234083127109E-005 + 142.91999999999999 5.7414247002330701E-005 + 142.97999999999999 5.7821931503886376E-005 + 143.03999999999999 5.7998932916415387E-005 + 143.09999999999999 5.7945325882833111E-005 + 143.16000000000000 5.7661606074480596E-005 + 143.22000000000000 5.7148689773219224E-005 + 143.28000000000000 5.6407900558389766E-005 + 143.34000000000000 5.5440973561042565E-005 + 143.40000000000001 5.4250046114111299E-005 + 143.45999999999998 5.2837644990404804E-005 + 143.51999999999998 5.1206681325669118E-005 + 143.57999999999998 4.9360424216363014E-005 + 143.63999999999999 4.7302515096580219E-005 + 143.69999999999999 4.5036931488769555E-005 + 143.75999999999999 4.2567979841197845E-005 + 143.81999999999999 3.9900294183005681E-005 + 143.88000000000000 3.7038807935199795E-005 + 143.94000000000000 3.3988743691777561E-005 + 144.00000000000000 3.0755606108713240E-005 + 144.06000000000000 2.7345166034042340E-005 + 144.12000000000000 2.3763445154510553E-005 + 144.18000000000001 2.0016706755893748E-005 + 144.23999999999998 1.6111445685289142E-005 + 144.29999999999998 1.2054372944081875E-005 + 144.35999999999999 7.8524059529280592E-006 + 144.41999999999999 3.5126654289796510E-006 + 144.47999999999999 -9.5754650999519826E-007 + 144.53999999999999 -5.5507550229793564E-006 + 144.59999999999999 -1.0259321632804767E-005 + 144.66000000000000 -1.5075455746984463E-005 + 144.72000000000000 -1.9991233820183710E-005 + 144.78000000000000 -2.4998605051482969E-005 + 144.84000000000000 -3.0089414383945265E-005 + 144.90000000000001 -3.5255408819242213E-005 + 144.95999999999998 -4.0488271132250273E-005 + 145.01999999999998 -4.5779605807105554E-005 + 145.07999999999998 -5.1120989242575231E-005 + 145.13999999999999 -5.6503964082452574E-005 + 145.19999999999999 -6.1920058924290594E-005 + 145.25999999999999 -6.7360812210072696E-005 + 145.31999999999999 -7.2817781908725353E-005 + 145.38000000000000 -7.8282543252041490E-005 + 145.44000000000000 -8.3746722548960680E-005 + 145.50000000000000 -8.9202005152683175E-005 + 145.56000000000000 -9.4640126918320121E-005 + 145.62000000000000 -1.0005290641484895E-004 + 145.68000000000001 -1.0543226100668132E-004 + 145.73999999999998 -1.1077017154579398E-004 + 145.79999999999998 -1.1605874117928377E-004 + 145.85999999999999 -1.2129018880402223E-004 + 145.91999999999999 -1.2645685644019537E-004 + 145.97999999999999 -1.3155119846485890E-004 + 146.03999999999999 -1.3656583237553629E-004 + 146.09999999999999 -1.4149354289421593E-004 + 146.16000000000000 -1.4632728356813292E-004 + 146.22000000000000 -1.5106018993311010E-004 + 146.28000000000000 -1.5568561826324220E-004 + 146.34000000000000 -1.6019712435415753E-004 + 146.40000000000001 -1.6458849088739474E-004 + 146.45999999999998 -1.6885376651360585E-004 + 146.51999999999998 -1.7298721308394333E-004 + 146.57999999999998 -1.7698339359098646E-004 + 146.63999999999999 -1.8083711829522837E-004 + 146.69999999999999 -1.8454345957097547E-004 + 146.75999999999999 -1.8809777458847431E-004 + 146.81999999999999 -1.9149571028389178E-004 + 146.88000000000000 -1.9473317992405736E-004 + 146.94000000000000 -1.9780635363907342E-004 + 147.00000000000000 -2.0071171904955607E-004 + 147.06000000000000 -2.0344600326436093E-004 + 147.12000000000000 -2.0600620977954270E-004 + 147.18000000000001 -2.0838963223581726E-004 + 147.23999999999998 -2.1059382630331494E-004 + 147.29999999999998 -2.1261660416379576E-004 + 147.35999999999999 -2.1445607645340434E-004 + 147.41999999999999 -2.1611065560726473E-004 + 147.47999999999999 -2.1757899158078139E-004 + 147.53999999999999 -2.1886006835910411E-004 + 147.59999999999999 -2.1995315915397865E-004 + 147.66000000000000 -2.2085781256920621E-004 + 147.72000000000000 -2.2157391692833849E-004 + 147.78000000000000 -2.2210165586865376E-004 + 147.84000000000000 -2.2244152775683024E-004 + 147.90000000000001 -2.2259433059776114E-004 + 147.95999999999998 -2.2256117432531986E-004 + 148.01999999999998 -2.2234345748675988E-004 + 148.07999999999998 -2.2194290251704863E-004 + 148.13999999999999 -2.2136148613066941E-004 + 148.19999999999999 -2.2060146789161194E-004 + 148.25999999999999 -2.1966535044136212E-004 + 148.31999999999999 -2.1855589622787950E-004 + 148.38000000000000 -2.1727612529959950E-004 + 148.44000000000000 -2.1582925954387929E-004 + 148.50000000000000 -2.1421874741868235E-004 + 148.56000000000000 -2.1244822073384446E-004 + 148.62000000000000 -2.1052152443733102E-004 + 148.68000000000001 -2.0844271556910108E-004 + 148.73999999999998 -2.0621599002968702E-004 + 148.79999999999998 -2.0384574912443395E-004 + 148.85999999999999 -2.0133655380743579E-004 + 148.91999999999999 -1.9869314448381614E-004 + 148.97999999999999 -1.9592044115733861E-004 + 149.03999999999999 -1.9302348881318439E-004 + 149.09999999999999 -1.9000755410129193E-004 + 149.16000000000000 -1.8687798971223524E-004 + 149.22000000000000 -1.8364035117452270E-004 + 149.28000000000000 -1.8030033385155975E-004 + 149.34000000000000 -1.7686375802979611E-004 + 149.40000000000001 -1.7333656346946657E-004 + 149.45999999999998 -1.6972485887852725E-004 + 149.51999999999998 -1.6603479507808694E-004 + 149.57999999999998 -1.6227268929772429E-004 + 149.63999999999999 -1.5844491378871230E-004 + 149.69999999999999 -1.5455793170128182E-004 + 149.75999999999999 -1.5061825895151533E-004 + 149.81999999999999 -1.4663247921177240E-004 + 149.88000000000000 -1.4260719064701166E-004 + 149.94000000000000 -1.3854906934192325E-004 + 150.00000000000000 -1.3446475755161011E-004 + 150.06000000000000 -1.3036091539013261E-004 + 150.12000000000000 -1.2624420069696907E-004 + 150.18000000000001 -1.2212123515277525E-004 + 150.23999999999998 -1.1799861835561486E-004 + 150.29999999999998 -1.1388287954417620E-004 + 150.35999999999999 -1.0978051696386402E-004 + 150.41999999999999 -1.0569793293513324E-004 + 150.47999999999999 -1.0164145327358810E-004 + 150.53999999999999 -9.7617299026467715E-005 + 150.59999999999999 -9.3631600798557306E-005 + 150.66000000000000 -8.9690354833779604E-005 + 150.72000000000000 -8.5799449794277897E-005 + 150.78000000000000 -8.1964614277581970E-005 + 150.84000000000000 -7.8191449803027491E-005 + 150.90000000000001 -7.4485393544462578E-005 + 150.95999999999998 -7.0851714957317501E-005 + 151.01999999999998 -6.7295517400516567E-005 + 151.07999999999998 -6.3821712681174706E-005 + 151.13999999999999 -6.0435028539952926E-005 + 151.19999999999999 -5.7139981700943250E-005 + 151.25999999999999 -5.3940880743277600E-005 + 151.31999999999999 -5.0841813361050152E-005 + 151.38000000000000 -4.7846635323508980E-005 + 151.44000000000000 -4.4958963876922849E-005 + 151.50000000000000 -4.2182158300466611E-005 + 151.56000000000000 -3.9519331293066513E-005 + 151.62000000000000 -3.6973323251904627E-005 + 151.68000000000001 -3.4546711009954293E-005 + 151.73999999999998 -3.2241789220517476E-005 + 151.79999999999998 -3.0060579108279316E-005 + 151.85999999999999 -2.8004824561381019E-005 + 151.91999999999999 -2.6075982834182753E-005 + 151.97999999999999 -2.4275236365327813E-005 + 152.03999999999999 -2.2603491627681436E-005 + 152.09999999999999 -2.1061378034775620E-005 + 152.16000000000000 -1.9649262806066254E-005 + 152.22000000000000 -1.8367242058112658E-005 + 152.28000000000000 -1.7215158348735976E-005 + 152.34000000000000 -1.6192596804249652E-005 + 152.40000000000001 -1.5298893973074978E-005 + 152.45999999999998 -1.4533141848394394E-005 + 152.51999999999998 -1.3894194978743181E-005 + 152.57999999999998 -1.3380670405651851E-005 + 152.63999999999999 -1.2990956870636326E-005 + 152.69999999999999 -1.2723216633637320E-005 + 152.75999999999999 -1.2575398001134939E-005 + 152.81999999999999 -1.2545235756660246E-005 + 152.88000000000000 -1.2630265021984475E-005 + 152.94000000000000 -1.2827829916312628E-005 + 153.00000000000000 -1.3135092287938954E-005 + 153.06000000000000 -1.3549050244242725E-005 + 153.12000000000000 -1.4066548021721714E-005 + 153.17999999999998 -1.4684291724092161E-005 + 153.23999999999998 -1.5398871535027128E-005 + 153.29999999999998 -1.6206769969970290E-005 + 153.35999999999999 -1.7104383658014440E-005 + 153.41999999999999 -1.8088031235886687E-005 + 153.47999999999999 -1.9153982768008023E-005 + 153.53999999999999 -2.0298457029080834E-005 + 153.59999999999999 -2.1517640334930541E-005 + 153.66000000000000 -2.2807696247506901E-005 + 153.72000000000000 -2.4164772679858513E-005 + 153.78000000000000 -2.5585008557018067E-005 + 153.84000000000000 -2.7064534138017034E-005 + 153.90000000000001 -2.8599480162660976E-005 + 153.95999999999998 -3.0185978528082916E-005 + 154.01999999999998 -3.1820169108698009E-005 + 154.07999999999998 -3.3498196995413753E-005 + 154.13999999999999 -3.5216224531644101E-005 + 154.19999999999999 -3.6970433393090702E-005 + 154.25999999999999 -3.8757022073235670E-005 + 154.31999999999999 -4.0572233011139386E-005 + 154.38000000000000 -4.2412350200918869E-005 + 154.44000000000000 -4.4273701326886960E-005 + 154.50000000000000 -4.6152694053125662E-005 + 154.56000000000000 -4.8045795333102110E-005 + 154.62000000000000 -4.9949568750143362E-005 + 154.67999999999998 -5.1860662810059260E-005 + 154.73999999999998 -5.3775839533323508E-005 + 154.79999999999998 -5.5691958884803779E-005 + 154.85999999999999 -5.7606004802964921E-005 + 154.91999999999999 -5.9515057951378046E-005 + 154.97999999999999 -6.1416334569339135E-005 + 155.03999999999999 -6.3307154036217709E-005 + 155.09999999999999 -6.5184951148436587E-005 + 155.16000000000000 -6.7047252436129790E-005 + 155.22000000000000 -6.8891705703251168E-005 + 155.28000000000000 -7.0716035722227590E-005 + 155.34000000000000 -7.2518074643045636E-005 + 155.40000000000001 -7.4295731265781347E-005 + 155.45999999999998 -7.6046997188709031E-005 + 155.51999999999998 -7.7769956515491914E-005 + 155.57999999999998 -7.9462772716268541E-005 + 155.63999999999999 -8.1123689600329384E-005 + 155.69999999999999 -8.2751037954288103E-005 + 155.75999999999999 -8.4343244539172564E-005 + 155.81999999999999 -8.5898835422590735E-005 + 155.88000000000000 -8.7416418393952355E-005 + 155.94000000000000 -8.8894716740681962E-005 + 156.00000000000000 -9.0332567748410895E-005 + 156.06000000000000 -9.1728896836391216E-005 + 156.12000000000000 -9.3082767412828868E-005 + 156.17999999999998 -9.4393321182517759E-005 + 156.23999999999998 -9.5659838300862985E-005 + 156.29999999999998 -9.6881693119579983E-005 + 156.35999999999999 -9.8058358981878974E-005 + 156.41999999999999 -9.9189422417110963E-005 + 156.47999999999999 -1.0027456454707313E-004 + 156.53999999999999 -1.0131354957950325E-004 + 156.59999999999999 -1.0230623706386761E-004 + 156.66000000000000 -1.0325257147019505E-004 + 156.72000000000000 -1.0415256614896393E-004 + 156.78000000000000 -1.0500633163032524E-004 + 156.84000000000000 -1.0581403036815072E-004 + 156.90000000000001 -1.0657589892045080E-004 + 156.95999999999998 -1.0729222993810877E-004 + 157.01999999999998 -1.0796339330296872E-004 + 157.07999999999998 -1.0858980808115796E-004 + 157.13999999999999 -1.0917194170730801E-004 + 157.19999999999999 -1.0971032284645539E-004 + 157.25999999999999 -1.1020550275757909E-004 + 157.31999999999999 -1.1065808368469540E-004 + 157.38000000000000 -1.1106868896502671E-004 + 157.44000000000000 -1.1143797985483250E-004 + 157.50000000000000 -1.1176663097785024E-004 + 157.56000000000000 -1.1205533158356862E-004 + 157.62000000000000 -1.1230478666708019E-004 + 157.67999999999998 -1.1251569792829071E-004 + 157.73999999999998 -1.1268877541985314E-004 + 157.79999999999998 -1.1282472957833172E-004 + 157.85999999999999 -1.1292428499906300E-004 + 157.91999999999999 -1.1298814844137911E-004 + 157.97999999999999 -1.1301703470885789E-004 + 158.03999999999999 -1.1301166237101781E-004 + 158.09999999999999 -1.1297274297435653E-004 + 158.16000000000000 -1.1290099365099384E-004 + 158.22000000000000 -1.1279712940012526E-004 + 158.28000000000000 -1.1266188095946485E-004 + 158.34000000000000 -1.1249594867577541E-004 + 158.40000000000001 -1.1230004571985854E-004 + 158.45999999999998 -1.1207486413982472E-004 + 158.51999999999998 -1.1182109517680089E-004 + 158.57999999999998 -1.1153940798348748E-004 + 158.63999999999999 -1.1123045144852462E-004 + 158.69999999999999 -1.1089485388342438E-004 + 158.75999999999999 -1.1053319970949855E-004 + 158.81999999999999 -1.1014606290596382E-004 + 158.88000000000000 -1.0973398505684763E-004 + 158.94000000000000 -1.0929747850567528E-004 + 159.00000000000000 -1.0883703691475720E-004 + 159.06000000000000 -1.0835313034991031E-004 + 159.12000000000000 -1.0784622713443472E-004 + 159.17999999999998 -1.0731676934600314E-004 + 159.23999999999998 -1.0676521629290458E-004 + 159.29999999999998 -1.0619203980186401E-004 + 159.35999999999999 -1.0559771689177629E-004 + 159.41999999999999 -1.0498274112288506E-004 + 159.47999999999999 -1.0434764722131186E-004 + 159.53999999999999 -1.0369299228942218E-004 + 159.59999999999999 -1.0301937505071482E-004 + 159.66000000000000 -1.0232742637558955E-004 + 159.72000000000000 -1.0161781435534681E-004 + 159.78000000000000 -1.0089124449897499E-004 + 159.84000000000000 -1.0014847794105378E-004 + 159.90000000000001 -9.9390292963386591E-005 + 159.95999999999998 -9.8617523755251241E-005 + 160.01999999999998 -9.7831024876787119E-005 + 160.07999999999998 -9.7031707978534101E-005 + 160.13999999999999 -9.6220514281160962E-005 + 160.19999999999999 -9.5398423522247977E-005 + 160.25999999999999 -9.4566473439285838E-005 + 160.31999999999999 -9.3725729695797697E-005 + 160.38000000000000 -9.2877305799824521E-005 + 160.44000000000000 -9.2022362937278464E-005 + 160.50000000000000 -9.1162110147620766E-005 + 160.56000000000000 -9.0297814033224989E-005 + 160.62000000000000 -8.9430757374088035E-005 + 160.67999999999998 -8.8562288464067476E-005 + 160.73999999999998 -8.7693783202423477E-005 + 160.79999999999998 -8.6826642435206973E-005 + 160.85999999999999 -8.5962285468277531E-005 + 160.91999999999999 -8.5102143307232223E-005 + 160.97999999999999 -8.4247663265609842E-005 + 161.03999999999999 -8.3400289447636548E-005 + 161.09999999999999 -8.2561449936316040E-005 + 161.16000000000000 -8.1732562233113496E-005 + 161.22000000000000 -8.0915028845424388E-005 + 161.28000000000000 -8.0110217893869618E-005 + 161.34000000000000 -7.9319483369174321E-005 + 161.40000000000001 -7.8544146099958804E-005 + 161.45999999999998 -7.7785501280301544E-005 + 161.51999999999998 -7.7044815390514849E-005 + 161.57999999999998 -7.6323330888886936E-005 + 161.63999999999999 -7.5622256435611015E-005 + 161.69999999999999 -7.4942788426660806E-005 + 161.75999999999999 -7.4286080323302087E-005 + 161.81999999999999 -7.3653263666556126E-005 + 161.88000000000000 -7.3045417661087603E-005 + 161.94000000000000 -7.2463601359929491E-005 + 162.00000000000000 -7.1908810625225206E-005 + 162.06000000000000 -7.1381986638067890E-005 + 162.12000000000000 -7.0884013858661635E-005 + 162.17999999999998 -7.0415706194854814E-005 + 162.23999999999998 -6.9977775897563725E-005 + 162.29999999999998 -6.9570872606599757E-005 + 162.35999999999999 -6.9195542807714877E-005 + 162.41999999999999 -6.8852234384850556E-005 + 162.47999999999999 -6.8541300911362864E-005 + 162.53999999999999 -6.8263009830453543E-005 + 162.59999999999999 -6.8017516861735550E-005 + 162.66000000000000 -6.7804878541722705E-005 + 162.72000000000000 -6.7625087879993380E-005 + 162.78000000000000 -6.7478037948711658E-005 + 162.84000000000000 -6.7363560785091187E-005 + 162.90000000000001 -6.7281416460967310E-005 + 162.95999999999998 -6.7231289201923552E-005 + 163.01999999999998 -6.7212813860953233E-005 + 163.07999999999998 -6.7225580893893704E-005 + 163.13999999999999 -6.7269120879332405E-005 + 163.19999999999999 -6.7342900959408160E-005 + 163.25999999999999 -6.7446363066609496E-005 + 163.31999999999999 -6.7578886668543908E-005 + 163.38000000000000 -6.7739803651751412E-005 + 163.44000000000000 -6.7928390457685679E-005 + 163.50000000000000 -6.8143882912034812E-005 + 163.56000000000000 -6.8385469195789768E-005 + 163.62000000000000 -6.8652277447471606E-005 + 163.67999999999998 -6.8943392742623356E-005 + 163.73999999999998 -6.9257857153900447E-005 + 163.79999999999998 -6.9594677416692102E-005 + 163.85999999999999 -6.9952808066805957E-005 + 163.91999999999999 -7.0331183050812140E-005 + 163.97999999999999 -7.0728718056827842E-005 + 164.03999999999999 -7.1144280935593211E-005 + 164.09999999999999 -7.1576742159681401E-005 + 164.16000000000000 -7.2024928693551409E-005 + 164.22000000000000 -7.2487667817257100E-005 + 164.28000000000000 -7.2963766566092422E-005 + 164.34000000000000 -7.3452018217865571E-005 + 164.40000000000001 -7.3951190848851504E-005 + 164.45999999999998 -7.4460038815282005E-005 + 164.51999999999998 -7.4977303820403620E-005 + 164.57999999999998 -7.5501706662551955E-005 + 164.63999999999999 -7.6031943411622305E-005 + 164.69999999999999 -7.6566696771114044E-005 + 164.75999999999999 -7.7104636035983456E-005 + 164.81999999999999 -7.7644426618788572E-005 + 164.88000000000000 -7.8184718942779139E-005 + 164.94000000000000 -7.8724183800380732E-005 + 165.00000000000000 -7.9261480672596722E-005 + 165.06000000000000 -7.9795299370104868E-005 + 165.12000000000000 -8.0324350116788425E-005 + 165.17999999999998 -8.0847364895270961E-005 + 165.23999999999998 -8.1363121495469176E-005 + 165.29999999999998 -8.1870415027637542E-005 + 165.35999999999999 -8.2368102280597831E-005 + 165.41999999999999 -8.2855063050019922E-005 + 165.47999999999999 -8.3330234731584976E-005 + 165.53999999999999 -8.3792569824734381E-005 + 165.59999999999999 -8.4241082952832139E-005 + 165.66000000000000 -8.4674801087769412E-005 + 165.72000000000000 -8.5092791843490657E-005 + 165.78000000000000 -8.5494139164100455E-005 + 165.84000000000000 -8.5877972904640563E-005 + 165.90000000000001 -8.6243445812026124E-005 + 165.95999999999998 -8.6589740774888622E-005 + 166.01999999999998 -8.6916089441260678E-005 + 166.07999999999998 -8.7221762636272815E-005 + 166.13999999999999 -8.7506080285301531E-005 + 166.19999999999999 -8.7768445805384244E-005 + 166.25999999999999 -8.8008313082819939E-005 + 166.31999999999999 -8.8225244557443351E-005 + 166.38000000000000 -8.8418887157976658E-005 + 166.44000000000000 -8.8588983050817412E-005 + 166.50000000000000 -8.8735386413213340E-005 + 166.56000000000000 -8.8858055995564599E-005 + 166.62000000000000 -8.8957064983419642E-005 + 166.67999999999998 -8.9032579724023802E-005 + 166.73999999999998 -8.9084892822170121E-005 + 166.79999999999998 -8.9114371368848773E-005 + 166.85999999999999 -8.9121474855509056E-005 + 166.91999999999999 -8.9106759733242948E-005 + 166.97999999999999 -8.9070832904958734E-005 + 167.03999999999999 -8.9014387413765766E-005 + 167.09999999999999 -8.8938156240585676E-005 + 167.16000000000000 -8.8842917994134892E-005 + 167.22000000000000 -8.8729511433796514E-005 + 167.28000000000000 -8.8598821496725240E-005 + 167.34000000000000 -8.8451757074414536E-005 + 167.40000000000001 -8.8289283844544516E-005 + 167.45999999999998 -8.8112393152392789E-005 + 167.51999999999998 -8.7922141073795430E-005 + 167.57999999999998 -8.7719597217974854E-005 + 167.63999999999999 -8.7505907991447122E-005 + 167.69999999999999 -8.7282237299232898E-005 + 167.75999999999999 -8.7049798143956078E-005 + 167.81999999999999 -8.6809825016136139E-005 + 167.88000000000000 -8.6563595150461605E-005 + 167.94000000000000 -8.6312407331844113E-005 + 168.00000000000000 -8.6057574285796509E-005 + 168.06000000000000 -8.5800399793196431E-005 + 168.12000000000000 -8.5542195854849620E-005 + 168.17999999999998 -8.5284258942553603E-005 + 168.23999999999998 -8.5027850273236026E-005 + 168.29999999999998 -8.4774222112665322E-005 + 168.35999999999999 -8.4524567816022519E-005 + 168.41999999999999 -8.4280053217461104E-005 + 168.47999999999999 -8.4041778499808852E-005 + 168.53999999999999 -8.3810807973248974E-005 + 168.59999999999999 -8.3588149231411015E-005 + 168.66000000000000 -8.3374766453063999E-005 + 168.72000000000000 -8.3171558356030635E-005 + 168.78000000000000 -8.2979372258985823E-005 + 168.84000000000000 -8.2799011721625601E-005 + 168.90000000000001 -8.2631217176337924E-005 + 168.95999999999998 -8.2476688599019874E-005 + 169.01999999999998 -8.2336042689149232E-005 + 169.07999999999998 -8.2209859765403659E-005 + 169.13999999999999 -8.2098653089757715E-005 + 169.19999999999999 -8.2002862656163170E-005 + 169.25999999999999 -8.1922869225070806E-005 + 169.31999999999999 -8.1858978942802121E-005 + 169.38000000000000 -8.1811429463320910E-005 + 169.44000000000000 -8.1780374125629463E-005 + 169.50000000000000 -8.1765898926884631E-005 + 169.56000000000000 -8.1768013495286493E-005 + 169.62000000000000 -8.1786663904070397E-005 + 169.67999999999998 -8.1821717056183420E-005 + 169.73999999999998 -8.1873004774976835E-005 + 169.79999999999998 -8.1940268300613827E-005 + 169.85999999999999 -8.2023213849482526E-005 + 169.91999999999999 -8.2121480970409315E-005 + 169.97999999999999 -8.2234681182612824E-005 + 170.03999999999999 -8.2362376689183679E-005 + 170.09999999999999 -8.2504085484661702E-005 + 170.16000000000000 -8.2659281779590881E-005 + 170.22000000000000 -8.2827409965271310E-005 + 170.28000000000000 -8.3007869458043499E-005 + 170.34000000000000 -8.3200021231299545E-005 + 170.40000000000001 -8.3403184085086341E-005 + 170.45999999999998 -8.3616650972292435E-005 + 170.51999999999998 -8.3839662855821753E-005 + 170.57999999999998 -8.4071432345233631E-005 + 170.63999999999999 -8.4311133796044081E-005 + 170.69999999999999 -8.4557927876166740E-005 + 170.75999999999999 -8.4810932222187122E-005 + 170.81999999999999 -8.5069254185997142E-005 + 170.88000000000000 -8.5331988725494435E-005 + 170.94000000000000 -8.5598214927705695E-005 + 171.00000000000000 -8.5867024252057119E-005 + 171.06000000000000 -8.6137497092749632E-005 + 171.12000000000000 -8.6408724641102010E-005 + 171.17999999999998 -8.6679798335301662E-005 + 171.23999999999998 -8.6949829636580989E-005 + 171.29999999999998 -8.7217934880760942E-005 + 171.35999999999999 -8.7483224408225240E-005 + 171.41999999999999 -8.7744834220336763E-005 + 171.47999999999999 -8.8001892104419877E-005 + 171.53999999999999 -8.8253521707969384E-005 + 171.59999999999999 -8.8498849632958829E-005 + 171.66000000000000 -8.8737004198728985E-005 + 171.72000000000000 -8.8967112734021381E-005 + 171.78000000000000 -8.9188305826789797E-005 + 171.84000000000000 -8.9399717255839116E-005 + 171.90000000000001 -8.9600499966419566E-005 + 171.95999999999998 -8.9789818425669660E-005 + 172.01999999999998 -8.9966866653549163E-005 + 172.07999999999998 -9.0130881592490910E-005 + 172.13999999999999 -9.0281131950664369E-005 + 172.19999999999999 -9.0416934682775415E-005 + 172.25999999999999 -9.0537671063962568E-005 + 172.31999999999999 -9.0642786855511131E-005 + 172.38000000000000 -9.0731777720995944E-005 + 172.44000000000000 -9.0804203176407671E-005 + 172.50000000000000 -9.0859696766306834E-005 + 172.56000000000000 -9.0897937670994947E-005 + 172.62000000000000 -9.0918669613602481E-005 + 172.67999999999998 -9.0921680860067076E-005 + 172.73999999999998 -9.0906826667552893E-005 + 172.79999999999998 -9.0873998858770878E-005 + 172.85999999999999 -9.0823123048506654E-005 + 172.91999999999999 -9.0754183534567134E-005 + 172.97999999999999 -9.0667203732414448E-005 + 173.03999999999999 -9.0562242274953373E-005 + 173.09999999999999 -9.0439435662412497E-005 + 173.16000000000000 -9.0298970291460549E-005 + 173.22000000000000 -9.0141091423256514E-005 + 173.28000000000000 -8.9966126269494141E-005 + 173.34000000000000 -8.9774483168241281E-005 + 173.40000000000001 -8.9566640966114335E-005 + 173.45999999999998 -8.9343186816944240E-005 + 173.51999999999998 -8.9104783961366438E-005 + 173.57999999999998 -8.8852181621169665E-005 + 173.63999999999999 -8.8586217869404153E-005 + 173.69999999999999 -8.8307809704564092E-005 + 173.75999999999999 -8.8017938765753536E-005 + 173.81999999999999 -8.7717639330690087E-005 + 173.88000000000000 -8.7408006537440728E-005 + 173.94000000000000 -8.7090155849993888E-005 + 174.00000000000000 -8.6765227796425901E-005 + 174.06000000000000 -8.6434385916014673E-005 + 174.12000000000000 -8.6098798043375159E-005 + 174.17999999999998 -8.5759622018838648E-005 + 174.23999999999998 -8.5418018806706315E-005 + 174.29999999999998 -8.5075150436674383E-005 + 174.35999999999999 -8.4732157120998830E-005 + 174.41999999999999 -8.4390193694940292E-005 + 174.47999999999999 -8.4050405502230871E-005 + 174.53999999999999 -8.3713946349911903E-005 + 174.59999999999999 -8.3381977748834879E-005 + 174.66000000000000 -8.3055663549066208E-005 + 174.72000000000000 -8.2736181347490710E-005 + 174.78000000000000 -8.2424720939615415E-005 + 174.84000000000000 -8.2122473277580684E-005 + 174.90000000000001 -8.1830627784767890E-005 + 174.95999999999998 -8.1550356056550688E-005 + 175.01999999999998 -8.1282819774154387E-005 + 175.07999999999998 -8.1029138246911938E-005 + 175.13999999999999 -8.0790404280213531E-005 + 175.19999999999999 -8.0567633754971573E-005 + 175.25999999999999 -8.0361793112177318E-005 + 175.31999999999999 -8.0173780377649389E-005 + 175.38000000000000 -8.0004397438742156E-005 + 175.44000000000000 -7.9854368640119215E-005 + 175.50000000000000 -7.9724338337582449E-005 + 175.56000000000000 -7.9614844879523643E-005 + 175.62000000000000 -7.9526358996153169E-005 + 175.67999999999998 -7.9459258665980385E-005 + 175.73999999999998 -7.9413845745388972E-005 + 175.79999999999998 -7.9390357953440974E-005 + 175.85999999999999 -7.9388962884743557E-005 + 175.91999999999999 -7.9409766700584380E-005 + 175.97999999999999 -7.9452820038620149E-005 + 176.03999999999999 -7.9518120662273731E-005 + 176.09999999999999 -7.9605617136673884E-005 + 176.16000000000000 -7.9715205665121277E-005 + 176.22000000000000 -7.9846723306317612E-005 + 176.28000000000000 -7.9999969431077749E-005 + 176.34000000000000 -8.0174680072111847E-005 + 176.40000000000001 -8.0370548849240095E-005 + 176.45999999999998 -8.0587201073466138E-005 + 176.51999999999998 -8.0824200898664496E-005 + 176.57999999999998 -8.1081060059174368E-005 + 176.63999999999999 -8.1357240648298774E-005 + 176.69999999999999 -8.1652133446024532E-005 + 176.75999999999999 -8.1965083532569837E-005 + 176.81999999999999 -8.2295374089802088E-005 + 176.88000000000000 -8.2642253006534667E-005 + 176.94000000000000 -8.3004919345883255E-005 + 177.00000000000000 -8.3382529098393417E-005 + 177.06000000000000 -8.3774193293713068E-005 + 177.12000000000000 -8.4178998892041123E-005 + 177.17999999999998 -8.4595991277879658E-005 + 177.23999999999998 -8.5024182213938116E-005 + 177.29999999999998 -8.5462565540869278E-005 + 177.35999999999999 -8.5910106408409884E-005 + 177.41999999999999 -8.6365739469181164E-005 + 177.47999999999999 -8.6828381914381104E-005 + 177.53999999999999 -8.7296922061404577E-005 + 177.59999999999999 -8.7770240794323860E-005 + 177.66000000000000 -8.8247196765332269E-005 + 177.72000000000000 -8.8726640457341231E-005 + 177.78000000000000 -8.9207413607358163E-005 + 177.84000000000000 -8.9688354787106404E-005 + 177.90000000000001 -9.0168320925723640E-005 + 177.95999999999998 -9.0646155987518149E-005 + 178.01999999999998 -9.1120738439901046E-005 + 178.07999999999998 -9.1590936649226477E-005 + 178.13999999999999 -9.2055655908310194E-005 + 178.19999999999999 -9.2513803397141646E-005 + 178.25999999999999 -9.2964321837218998E-005 + 178.31999999999999 -9.3406166585024359E-005 + 178.38000000000000 -9.3838298773249852E-005 + 178.44000000000000 -9.4259710767920953E-005 + 178.50000000000000 -9.4669392307275666E-005 + 178.56000000000000 -9.5066360831535686E-005 + 178.62000000000000 -9.5449629000285126E-005 + 178.67999999999998 -9.5818234965820248E-005 + 178.73999999999998 -9.6171229557830587E-005 + 178.79999999999998 -9.6507670632567616E-005 + 178.85999999999999 -9.6826635130850186E-005 + 178.91999999999999 -9.7127254261303262E-005 + 178.97999999999999 -9.7408670145787929E-005 + 179.03999999999999 -9.7670090023201531E-005 + 179.09999999999999 -9.7910765354219267E-005 + 179.16000000000000 -9.8130010429979170E-005 + 179.22000000000000 -9.8327205508685301E-005 + 179.28000000000000 -9.8501806899197657E-005 + 179.34000000000000 -9.8653348286085118E-005 + 179.40000000000001 -9.8781442922890518E-005 + 179.45999999999998 -9.8885792532016806E-005 + 179.51999999999998 -9.8966168700940628E-005 + 179.57999999999998 -9.9022413772427984E-005 + 179.63999999999999 -9.9054443599335003E-005 + 179.69999999999999 -9.9062245347570122E-005 + 179.75999999999999 -9.9045856749296641E-005 + 179.81999999999999 -9.9005379663811340E-005 + 179.88000000000000 -9.8940956542767776E-005 + 179.94000000000000 -9.8852797883216956E-005 + 180.00000000000000 -9.8741138168607979E-005 + 180.06000000000000 -9.8606274978492420E-005 + 180.12000000000000 -9.8448553880100696E-005 + 180.17999999999998 -9.8268382345554633E-005 + 180.23999999999998 -9.8066213640604576E-005 + 180.29999999999998 -9.7842570145984558E-005 + 180.35999999999999 -9.7598045250408519E-005 + 180.41999999999999 -9.7333297628998132E-005 + 180.47999999999999 -9.7049052880969920E-005 + 180.53999999999999 -9.6746115610232703E-005 + 180.59999999999999 -9.6425346616469440E-005 + 180.66000000000000 -9.6087676388474557E-005 + 180.72000000000000 -9.5734101428648956E-005 + 180.78000000000000 -9.5365647619630319E-005 + 180.84000000000000 -9.4983386535751888E-005 + 180.90000000000001 -9.4588428589307392E-005 + 180.95999999999998 -9.4181891761493085E-005 + 181.01999999999998 -9.3764912225195046E-005 + 181.07999999999998 -9.3338621399831933E-005 + 181.13999999999999 -9.2904147491417886E-005 + 181.19999999999999 -9.2462611191042381E-005 + 181.25999999999999 -9.2015121918047454E-005 + 181.31999999999999 -9.1562771070909828E-005 + 181.38000000000000 -9.1106644818743747E-005 + 181.44000000000000 -9.0647807885679160E-005 + 181.50000000000000 -9.0187316140411371E-005 + 181.56000000000000 -8.9726225020047505E-005 + 181.62000000000000 -8.9265567838687929E-005 + 181.67999999999998 -8.8806382470065171E-005 + 181.73999999999998 -8.8349692314099499E-005 + 181.79999999999998 -8.7896514340555877E-005 + 181.85999999999999 -8.7447842920127122E-005 + 181.91999999999999 -8.7004658576362372E-005 + 181.97999999999999 -8.6567903183285932E-005 + 182.03999999999999 -8.6138483394672524E-005 + 182.09999999999999 -8.5717270159087707E-005 + 182.16000000000000 -8.5305085284812833E-005 + 182.22000000000000 -8.4902696029678373E-005 + 182.28000000000000 -8.4510795876967942E-005 + 182.34000000000000 -8.4130029082325845E-005 + 182.39999999999998 -8.3760978010824464E-005 + 182.45999999999998 -8.3404153574253971E-005 + 182.51999999999998 -8.3060025936503333E-005 + 182.57999999999998 -8.2728989424301263E-005 + 182.63999999999999 -8.2411409385671882E-005 + 182.69999999999999 -8.2107599703186990E-005 + 182.75999999999999 -8.1817828608082586E-005 + 182.81999999999999 -8.1542354594100081E-005 + 182.88000000000000 -8.1281384126397082E-005 + 182.94000000000000 -8.1035112384411563E-005 + 183.00000000000000 -8.0803714201950827E-005 + 183.06000000000000 -8.0587315379683895E-005 + 183.12000000000000 -8.0386034808793840E-005 + 183.17999999999998 -8.0199949204019268E-005 + 183.23999999999998 -8.0029116414582715E-005 + 183.29999999999998 -7.9873528574569719E-005 + 183.35999999999999 -7.9733150767085777E-005 + 183.41999999999999 -7.9607906314497028E-005 + 183.47999999999999 -7.9497648410099283E-005 + 183.53999999999999 -7.9402190348604944E-005 + 183.59999999999999 -7.9321302475346387E-005 + 183.66000000000000 -7.9254697602941461E-005 + 183.72000000000000 -7.9202061570340763E-005 + 183.78000000000000 -7.9163023935085238E-005 + 183.84000000000000 -7.9137183231558193E-005 + 183.89999999999998 -7.9124125716363003E-005 + 183.95999999999998 -7.9123403217440917E-005 + 184.01999999999998 -7.9134544201907948E-005 + 184.07999999999998 -7.9157076715019836E-005 + 184.13999999999999 -7.9190508515540947E-005 + 184.19999999999999 -7.9234328827797694E-005 + 184.25999999999999 -7.9288026162203768E-005 + 184.31999999999999 -7.9351067905202789E-005 + 184.38000000000000 -7.9422916259598887E-005 + 184.44000000000000 -7.9503007666067611E-005 + 184.50000000000000 -7.9590752850932313E-005 + 184.56000000000000 -7.9685551979807165E-005 + 184.62000000000000 -7.9786773347983943E-005 + 184.67999999999998 -7.9893763135962140E-005 + 184.73999999999998 -8.0005844513656154E-005 + 184.79999999999998 -8.0122328804402857E-005 + 184.85999999999999 -8.0242507460559137E-005 + 184.91999999999999 -8.0365659081870617E-005 + 184.97999999999999 -8.0491065870465534E-005 + 185.03999999999999 -8.0618001898494497E-005 + 185.09999999999999 -8.0745751516129790E-005 + 185.16000000000000 -8.0873610530896302E-005 + 185.22000000000000 -8.1000895446514819E-005 + 185.28000000000000 -8.1126926311558635E-005 + 185.34000000000000 -8.1251059588055544E-005 + 185.39999999999998 -8.1372669999999782E-005 + 185.45999999999998 -8.1491155118591010E-005 + 185.51999999999998 -8.1605938610620246E-005 + 185.57999999999998 -8.1716448261466982E-005 + 185.63999999999999 -8.1822145531257892E-005 + 185.69999999999999 -8.1922508814922317E-005 + 185.75999999999999 -8.2017029211048589E-005 + 185.81999999999999 -8.2105228097694813E-005 + 185.88000000000000 -8.2186641923856100E-005 + 185.94000000000000 -8.2260832048685324E-005 + 186.00000000000000 -8.2327377211862033E-005 + 186.06000000000000 -8.2385906435861908E-005 + 186.12000000000000 -8.2436065116473555E-005 + 186.17999999999998 -8.2477557330068614E-005 + 186.23999999999998 -8.2510122583102449E-005 + 186.29999999999998 -8.2533552988295743E-005 + 186.35999999999999 -8.2547690712598493E-005 + 186.41999999999999 -8.2552430180357189E-005 + 186.47999999999999 -8.2547732612730268E-005 + 186.53999999999999 -8.2533602248872751E-005 + 186.59999999999999 -8.2510110930986993E-005 + 186.66000000000000 -8.2477366969333545E-005 + 186.72000000000000 -8.2435535914496258E-005 + 186.78000000000000 -8.2384834461690355E-005 + 186.84000000000000 -8.2325506844287794E-005 + 186.89999999999998 -8.2257862712648060E-005 + 186.95999999999998 -8.2182238317149794E-005 + 187.01999999999998 -8.2099010295509455E-005 + 187.07999999999998 -8.2008589028011132E-005 + 187.13999999999999 -8.1911428259398941E-005 + 187.19999999999999 -8.1808012389484851E-005 + 187.25999999999999 -8.1698863790394073E-005 + 187.31999999999999 -8.1584532519131449E-005 + 187.38000000000000 -8.1465605046191243E-005 + 187.44000000000000 -8.1342711329315107E-005 + 187.50000000000000 -8.1216488458572624E-005 + 187.56000000000000 -8.1087589874937949E-005 + 187.62000000000000 -8.0956706700231580E-005 + 187.67999999999998 -8.0824517150480138E-005 + 187.73999999999998 -8.0691718679091177E-005 + 187.79999999999998 -8.0558999920377357E-005 + 187.85999999999999 -8.0427032326567049E-005 + 187.91999999999999 -8.0296468138129544E-005 + 187.97999999999999 -8.0167945134727677E-005 + 188.03999999999999 -8.0042073363401892E-005 + 188.09999999999999 -7.9919425900383176E-005 + 188.16000000000000 -7.9800572282129795E-005 + 188.22000000000000 -7.9686045311437405E-005 + 188.28000000000000 -7.9576349685153255E-005 + 188.34000000000000 -7.9471971321282817E-005 + 188.39999999999998 -7.9373378903168688E-005 + 188.45999999999998 -7.9281025415561083E-005 + 188.51999999999998 -7.9195378969427782E-005 + 188.57999999999998 -7.9116865697189369E-005 + 188.63999999999999 -7.9045920572554858E-005 + 188.69999999999999 -7.8982961789812327E-005 + 188.75999999999999 -7.8928386020678801E-005 + 188.81999999999999 -7.8882582379210620E-005 + 188.88000000000000 -7.8845897118539823E-005 + 188.94000000000000 -7.8818661361913087E-005 + 189.00000000000000 -7.8801136604912000E-005 + 189.06000000000000 -7.8793566416906436E-005 + 189.12000000000000 -7.8796113918285147E-005 + 189.17999999999998 -7.8808892710035189E-005 + 189.23999999999998 -7.8831962134146271E-005 + 189.29999999999998 -7.8865314853133391E-005 + 189.35999999999999 -7.8908881943995723E-005 + 189.41999999999999 -7.8962535895459756E-005 + 189.47999999999999 -7.9026110711593036E-005 + 189.53999999999999 -7.9099402884356406E-005 + 189.59999999999999 -7.9182170151336924E-005 + 189.66000000000000 -7.9274140096762059E-005 + 189.72000000000000 -7.9375047632189417E-005 + 189.78000000000000 -7.9484605795427168E-005 + 189.84000000000000 -7.9602527585025080E-005 + 189.89999999999998 -7.9728534100384816E-005 + 189.95999999999998 -7.9862344694327296E-005 + 190.01999999999998 -8.0003671935979011E-005 + 190.07999999999998 -8.0152247197040955E-005 + 190.13999999999999 -8.0307769928662236E-005 + 190.19999999999999 -8.0469946526240800E-005 + 190.25999999999999 -8.0638458617361504E-005 + 190.31999999999999 -8.0812970527371561E-005 + 190.38000000000000 -8.0993116474480819E-005 + 190.44000000000000 -8.1178490457889892E-005 + 190.50000000000000 -8.1368654367432755E-005 + 190.56000000000000 -8.1563143898176854E-005 + 190.62000000000000 -8.1761466887031429E-005 + 190.67999999999998 -8.1963082617622583E-005 + 190.73999999999998 -8.2167449983460474E-005 + 190.79999999999998 -8.2373991602200395E-005 + 190.85999999999999 -8.2582119176007309E-005 + 190.91999999999999 -8.2791251208556602E-005 + 190.97999999999999 -8.3000798452649929E-005 + 191.03999999999999 -8.3210172192675427E-005 + 191.09999999999999 -8.3418794146715870E-005 + 191.16000000000000 -8.3626089932542196E-005 + 191.22000000000000 -8.3831487195189794E-005 + 191.28000000000000 -8.4034424474975218E-005 + 191.34000000000000 -8.4234341719967881E-005 + 191.39999999999998 -8.4430657780573909E-005 + 191.45999999999998 -8.4622810367898359E-005 + 191.51999999999998 -8.4810214440939231E-005 + 191.57999999999998 -8.4992269871639198E-005 + 191.63999999999999 -8.5168377471101734E-005 + 191.69999999999999 -8.5337917704281910E-005 + 191.75999999999999 -8.5500259676617331E-005 + 191.81999999999999 -8.5654765119246568E-005 + 191.88000000000000 -8.5800812365106701E-005 + 191.94000000000000 -8.5937770984674677E-005 + 192.00000000000000 -8.6065024600230500E-005 + 192.06000000000000 -8.6181984668806677E-005 + 192.12000000000000 -8.6288076269059412E-005 + 192.17999999999998 -8.6382775179607760E-005 + 192.23999999999998 -8.6465588134243651E-005 + 192.29999999999998 -8.6536067199294970E-005 + 192.35999999999999 -8.6593793686142703E-005 + 192.41999999999999 -8.6638401272598082E-005 + 192.47999999999999 -8.6669573203675137E-005 + 192.53999999999999 -8.6687029510517651E-005 + 192.59999999999999 -8.6690527017905755E-005 + 192.66000000000000 -8.6679858930707892E-005 + 192.72000000000000 -8.6654867168977631E-005 + 192.78000000000000 -8.6615408849454858E-005 + 192.84000000000000 -8.6561387083609347E-005 + 192.89999999999998 -8.6492724849218650E-005 + 192.95999999999998 -8.6409393454998107E-005 + 193.01999999999998 -8.6311388306544614E-005 + 193.07999999999998 -8.6198751293664735E-005 + 193.13999999999999 -8.6071550048855838E-005 + 193.19999999999999 -8.5929917942965410E-005 + 193.25999999999999 -8.5774027552712427E-005 + 193.31999999999999 -8.5604093323544871E-005 + 193.38000000000000 -8.5420397535122298E-005 + 193.44000000000000 -8.5223261233751543E-005 + 193.50000000000000 -8.5013057717884489E-005 + 193.56000000000000 -8.4790229200233641E-005 + 193.62000000000000 -8.4555255860967551E-005 + 193.67999999999998 -8.4308669183186789E-005 + 193.73999999999998 -8.4051043056992188E-005 + 193.79999999999998 -8.3782987986101248E-005 + 193.85999999999999 -8.3505151682324586E-005 + 193.91999999999999 -8.3218219957720076E-005 + 193.97999999999999 -8.2922910868289665E-005 + 194.03999999999999 -8.2619951221969074E-005 + 194.09999999999999 -8.2310104929025785E-005 + 194.16000000000000 -8.1994158975776501E-005 + 194.22000000000000 -8.1672920067849355E-005 + 194.28000000000000 -8.1347196507201237E-005 + 194.34000000000000 -8.1017820647827498E-005 + 194.39999999999998 -8.0685632387416539E-005 + 194.45999999999998 -8.0351484884225535E-005 + 194.51999999999998 -8.0016213870502608E-005 + 194.57999999999998 -7.9680671107906981E-005 + 194.63999999999999 -7.9345686656868633E-005 + 194.69999999999999 -7.9012080434799183E-005 + 194.75999999999999 -7.8680648815556239E-005 + 194.81999999999999 -7.8352184110151710E-005 + 194.88000000000000 -7.8027415006060770E-005 + 194.94000000000000 -7.7707060441158785E-005 + 195.00000000000000 -7.7391807516352632E-005 + 195.06000000000000 -7.7082301738292357E-005 + 195.12000000000000 -7.6779157569089264E-005 + 195.17999999999998 -7.6482957486752174E-005 + 195.23999999999998 -7.6194267663972769E-005 + 195.29999999999998 -7.5913629578104822E-005 + 195.35999999999999 -7.5641565970007462E-005 + 195.41999999999999 -7.5378585939874131E-005 + 195.47999999999999 -7.5125191480388955E-005 + 195.53999999999999 -7.4881880852763834E-005 + 195.59999999999999 -7.4649151230713021E-005 + 195.66000000000000 -7.4427493020151381E-005 + 195.72000000000000 -7.4217396773468313E-005 + 195.78000000000000 -7.4019340715945268E-005 + 195.84000000000000 -7.3833787312715628E-005 + 195.89999999999998 -7.3661178336181920E-005 + 195.95999999999998 -7.3501934553569500E-005 + 196.01999999999998 -7.3356447085048203E-005 + 196.07999999999998 -7.3225069096844800E-005 + 196.13999999999999 -7.3108116434031733E-005 + 196.19999999999999 -7.3005866923847227E-005 + 196.25999999999999 -7.2918555706866396E-005 + 196.31999999999999 -7.2846382041243815E-005 + 196.38000000000000 -7.2789522855242118E-005 + 196.44000000000000 -7.2748100939631086E-005 + 196.50000000000000 -7.2722252603862631E-005 + 196.56000000000000 -7.2712087145750066E-005 + 196.62000000000000 -7.2717724964439326E-005 + 196.67999999999998 -7.2739277184321458E-005 + 196.73999999999998 -7.2776889800197142E-005 + 196.79999999999998 -7.2830703009124959E-005 + 196.85999999999999 -7.2900890393838897E-005 + 196.91999999999999 -7.2987657014277115E-005 + 196.97999999999999 -7.3091213429975742E-005 + 197.03999999999999 -7.3211796167242391E-005 + 197.09999999999999 -7.3349641837727449E-005 + 197.16000000000000 -7.3505012911172343E-005 + 197.22000000000000 -7.3678155275308109E-005 + 197.28000000000000 -7.3869312892899355E-005 + 197.34000000000000 -7.4078701579333885E-005 + 197.39999999999998 -7.4306523759987207E-005 + 197.45999999999998 -7.4552948300715433E-005 + 197.51999999999998 -7.4818126077750671E-005 + 197.57999999999998 -7.5102180655935727E-005 + 197.63999999999999 -7.5405189560569932E-005 + 197.69999999999999 -7.5727219795772147E-005 + 197.75999999999999 -7.6068323511907060E-005 + 197.81999999999999 -7.6428520184289653E-005 + 197.88000000000000 -7.6807824980500565E-005 + 197.94000000000000 -7.7206249953170120E-005 + 198.00000000000000 -7.7623814683864165E-005 + 198.06000000000000 -7.8060526777583883E-005 + 198.12000000000000 -7.8516407658733557E-005 + 198.17999999999998 -7.8991485857311675E-005 + 198.23999999999998 -7.9485776557708778E-005 + 198.29999999999998 -7.9999328357938297E-005 + 198.35999999999999 -8.0532163328355270E-005 + 198.41999999999999 -8.1084304047206884E-005 + 198.47999999999999 -8.1655774102703572E-005 + 198.53999999999999 -8.2246584582728103E-005 + 198.59999999999999 -8.2856721953835006E-005 + 198.66000000000000 -8.3486166513857193E-005 + 198.72000000000000 -8.4134879833614836E-005 + 198.78000000000000 -8.4802802507309756E-005 + 198.84000000000000 -8.5489860273999519E-005 + 198.89999999999998 -8.6195950193276719E-005 + 198.95999999999998 -8.6920973012486597E-005 + 199.01999999999998 -8.7664784485781246E-005 + 199.07999999999998 -8.8427250031217368E-005 + 199.13999999999999 -8.9208207821747879E-005 + 199.19999999999999 -9.0007484149757944E-005 + 199.25999999999999 -9.0824876413248706E-005 + 199.31999999999999 -9.1660170283755697E-005 + 199.38000000000000 -9.2513131644840143E-005 + 199.44000000000000 -9.3383489584270785E-005 + 199.50000000000000 -9.4270940677340862E-005 + 199.56000000000000 -9.5175160929625267E-005 + 199.62000000000000 -9.6095762992678052E-005 + 199.67999999999998 -9.7032348624448525E-005 + 199.73999999999998 -9.7984458244080664E-005 + 199.79999999999998 -9.8951581909417904E-005 + 199.85999999999999 -9.9933188161579017E-005 + 199.91999999999999 -1.0092866996784422E-004 + 199.97999999999999 -1.0193740353771232E-004 + 200.03999999999999 -1.0295870591709630E-004 + 200.09999999999999 -1.0399187165492966E-004 + 200.16000000000000 -1.0503614172655157E-004 + 200.22000000000000 -1.0609072842858525E-004 + 200.28000000000000 -1.0715480582242700E-004 + 200.34000000000000 -1.0822750590207902E-004 + 200.39999999999998 -1.0930791359007604E-004 + 200.45999999999998 -1.1039508697634831E-004 + 200.51999999999998 -1.1148801250173302E-004 + 200.57999999999998 -1.1258564249039030E-004 + 200.63999999999999 -1.1368684775520459E-004 + 200.69999999999999 -1.1479045214383828E-004 + 200.75999999999999 -1.1589518544064392E-004 + 200.81999999999999 -1.1699971575299627E-004 + 200.88000000000000 -1.1810263315467949E-004 + 200.94000000000000 -1.1920242645366530E-004 + 201.00000000000000 -1.2029753140657900E-004 + 201.06000000000000 -1.2138629330890716E-004 + 201.12000000000000 -1.2246695975849379E-004 + 201.17999999999998 -1.2353770598231734E-004 + 201.23999999999998 -1.2459666956880970E-004 + 201.29999999999998 -1.2564187358102619E-004 + 201.35999999999999 -1.2667128751772420E-004 + 201.41999999999999 -1.2768282120852664E-004 + 201.47999999999999 -1.2867433240739104E-004 + 201.53999999999999 -1.2964358520367445E-004 + 201.59999999999999 -1.3058830203279599E-004 + 201.66000000000000 -1.3150613177915417E-004 + 201.72000000000000 -1.3239465018112460E-004 + 201.78000000000000 -1.3325138848525325E-004 + 201.84000000000000 -1.3407378982052004E-004 + 201.89999999999998 -1.3485921876643173E-004 + 201.95999999999998 -1.3560497372866326E-004 + 202.01999999999998 -1.3630829586275717E-004 + 202.07999999999998 -1.3696633407956962E-004 + 202.13999999999999 -1.3757621383828349E-004 + 202.19999999999999 -1.3813498136100981E-004 + 202.25999999999999 -1.3863964901903426E-004 + 202.31999999999999 -1.3908719569334543E-004 + 202.38000000000000 -1.3947457354293651E-004 + 202.44000000000000 -1.3979873481286188E-004 + 202.50000000000000 -1.4005664689589891E-004 + 202.56000000000000 -1.4024529394017103E-004 + 202.62000000000000 -1.4036167742786446E-004 + 202.67999999999998 -1.4040285142950603E-004 + 202.73999999999998 -1.4036594258818325E-004 + 202.79999999999998 -1.4024810844649987E-004 + 202.85999999999999 -1.4004658528475204E-004 + 202.91999999999999 -1.3975869856927052E-004 + 202.97999999999999 -1.3938182312582629E-004 + 203.03999999999999 -1.3891343345063910E-004 + 203.09999999999999 -1.3835109119446080E-004 + 203.16000000000000 -1.3769241619203707E-004 + 203.22000000000000 -1.3693512729087232E-004 + 203.28000000000000 -1.3607705890345852E-004 + 203.34000000000000 -1.3511610425967507E-004 + 203.39999999999998 -1.3405028671294097E-004 + 203.45999999999998 -1.3287772393232126E-004 + 203.51999999999998 -1.3159668716896406E-004 + 203.57999999999998 -1.3020552932735782E-004 + 203.63999999999999 -1.2870278238666491E-004 + 203.69999999999999 -1.2708709921627537E-004 + 203.75999999999999 -1.2535728867331937E-004 + 203.81999999999999 -1.2351233332564450E-004 + 203.88000000000000 -1.2155137720699936E-004 + 203.94000000000000 -1.1947375181264667E-004 + 204.00000000000000 -1.1727895888147232E-004 + 204.06000000000000 -1.1496667553009326E-004 + 204.12000000000000 -1.1253676337733837E-004 + 204.17999999999998 -1.0998927165048797E-004 + 204.23999999999998 -1.0732443345035164E-004 + 204.29999999999998 -1.0454264302367554E-004 + 204.35999999999999 -1.0164448659256025E-004 + 204.41999999999999 -9.8630716831884537E-005 + 204.47999999999999 -9.5502244858176440E-005 + 204.53999999999999 -9.2260159421476021E-005 + 204.59999999999999 -8.8905698258340136E-005 + 204.66000000000000 -8.5440274579503132E-005 + 204.72000000000000 -8.1865446578080332E-005 + 204.78000000000000 -7.8182912763631731E-005 + 204.84000000000000 -7.4394534050318799E-005 + 204.89999999999998 -7.0502312394648476E-005 + 204.95999999999998 -6.6508385383811920E-005 + 205.01999999999998 -6.2415036793221726E-005 + 205.07999999999998 -5.8224664825635309E-005 + 205.13999999999999 -5.3939806445433537E-005 + 205.19999999999999 -4.9563114905308365E-005 + 205.25999999999999 -4.5097350183475945E-005 + 205.31999999999999 -4.0545391450539408E-005 + 205.38000000000000 -3.5910214616018838E-005 + 205.44000000000000 -3.1194892172553940E-005 + 205.50000000000000 -2.6402590474691666E-005 + 205.56000000000000 -2.1536557745236222E-005 + 205.62000000000000 -1.6600126151740879E-005 + 205.67999999999998 -1.1596694562418448E-005 + 205.73999999999998 -6.5297378471965549E-006 + 205.79999999999998 -1.4027865377809806E-006 + 205.85999999999999 3.7805697128709024E-006 + 205.91999999999999 9.0166962376186155E-006 + 205.97999999999999 1.4301922744909615E-005 + 206.03999999999999 1.9632545014087373E-005 + 206.09999999999999 2.5004844041288681E-005 + 206.16000000000000 3.0415095717460121E-005 + 206.22000000000000 3.5859577944557063E-005 + 206.28000000000000 4.1334584506412544E-005 + 206.34000000000000 4.6836434611118216E-005 + 206.39999999999998 5.2361489996019558E-005 + 206.45999999999998 5.7906157642987800E-005 + 206.51999999999998 6.3466912927558831E-005 + 206.57999999999998 6.9040280283939209E-005 + 206.63999999999999 7.4622861121424579E-005 + 206.69999999999999 8.0211333173659392E-005 + 206.75999999999999 8.5802448307794102E-005 + 206.81999999999999 9.1393025637047915E-005 + 206.88000000000000 9.6979961734043499E-005 + 206.94000000000000 1.0256021868966920E-004 + 207.00000000000000 1.0813083851815709E-004 + 207.06000000000000 1.1368893175411521E-004 + 207.12000000000000 1.1923166724698986E-004 + 207.17999999999998 1.2475627668199937E-004 + 207.23999999999998 1.3026005853875215E-004 + 207.29999999999998 1.3574038417340389E-004 + 207.35999999999999 1.4119471713339973E-004 + 207.41999999999999 1.4662057182978730E-004 + 207.47999999999999 1.5201555881705136E-004 + 207.53999999999999 1.5737741254929602E-004 + 207.59999999999999 1.6270393791091280E-004 + 207.66000000000000 1.6799305901397718E-004 + 207.72000000000000 1.7324281921376995E-004 + 207.78000000000000 1.7845136950327863E-004 + 207.84000000000000 1.8361701394379950E-004 + 207.89999999999998 1.8873814189143296E-004 + 207.95999999999998 1.9381326954418491E-004 + 208.01999999999998 1.9884104870391308E-004 + 208.07999999999998 2.0382019873206426E-004 + 208.13999999999999 2.0874953456079121E-004 + 208.19999999999999 2.1362798207171164E-004 + 208.25999999999999 2.1845449484237040E-004 + 208.31999999999999 2.2322813234996927E-004 + 208.38000000000000 2.2794795852002644E-004 + 208.44000000000000 2.3261307515572681E-004 + 208.50000000000000 2.3722263771713435E-004 + 208.56000000000000 2.4177578690496486E-004 + 208.62000000000000 2.4627169125327733E-004 + 208.68000000000001 2.5070953116636756E-004 + 208.74000000000001 2.5508843408648415E-004 + 208.80000000000001 2.5940761238188648E-004 + 208.86000000000001 2.6366623670574530E-004 + 208.92000000000002 2.6786347604575546E-004 + 208.98000000000002 2.7199849990370667E-004 + 209.03999999999996 2.7607047429310030E-004 + 209.09999999999997 2.8007853934605904E-004 + 209.15999999999997 2.8402188033432456E-004 + 209.21999999999997 2.8789959717975193E-004 + 209.27999999999997 2.9171078381832924E-004 + 209.33999999999997 2.9545448639600242E-004 + 209.39999999999998 2.9912974093092336E-004 + 209.45999999999998 3.0273546811842298E-004 + 209.51999999999998 3.0627054334814250E-004 + 209.57999999999998 3.0973376729181453E-004 + 209.63999999999999 3.1312381605805664E-004 + 209.69999999999999 3.1643933061836386E-004 + 209.75999999999999 3.1967877888517933E-004 + 209.81999999999999 3.2284057911138739E-004 + 209.88000000000000 3.2592299977330963E-004 + 209.94000000000000 3.2892418038361101E-004 + 210.00000000000000 3.3184220817210862E-004 + 210.06000000000000 3.3467505612044465E-004 + 210.12000000000000 3.3742056371492435E-004 + 210.18000000000001 3.4007655952348459E-004 + 210.24000000000001 3.4264071590419249E-004 + 210.30000000000001 3.4511066828079207E-004 + 210.36000000000001 3.4748399328728889E-004 + 210.42000000000002 3.4975819884452600E-004 + 210.48000000000002 3.5193075174958497E-004 + 210.53999999999996 3.5399913827900746E-004 + 210.59999999999997 3.5596076223970278E-004 + 210.65999999999997 3.5781301817197040E-004 + 210.71999999999997 3.5955336634500303E-004 + 210.77999999999997 3.6117915105328283E-004 + 210.83999999999997 3.6268778329329090E-004 + 210.89999999999998 3.6407670597365867E-004 + 210.95999999999998 3.6534339947096321E-004 + 211.01999999999998 3.6648532189440447E-004 + 211.07999999999998 3.6750001435529239E-004 + 211.13999999999999 3.6838502245742811E-004 + 211.19999999999999 3.6913801286378738E-004 + 211.25999999999999 3.6975668110320146E-004 + 211.31999999999999 3.7023885807897599E-004 + 211.38000000000000 3.7058244261087980E-004 + 211.44000000000000 3.7078547068225207E-004 + 211.50000000000000 3.7084607009220150E-004 + 211.56000000000000 3.7076251800147121E-004 + 211.62000000000000 3.7053327134461728E-004 + 211.68000000000001 3.7015693013834434E-004 + 211.74000000000001 3.6963227808880893E-004 + 211.80000000000001 3.6895833368148583E-004 + 211.86000000000001 3.6813431117467684E-004 + 211.92000000000002 3.6715963680676600E-004 + 211.98000000000002 3.6603400721973398E-004 + 212.03999999999996 3.6475738179601684E-004 + 212.09999999999997 3.6332998876471417E-004 + 212.15999999999997 3.6175228863980012E-004 + 212.21999999999997 3.6002510840886477E-004 + 212.27999999999997 3.5814952495410833E-004 + 212.33999999999997 3.5612685574066855E-004 + 212.39999999999998 3.5395881787305994E-004 + 212.45999999999998 3.5164736307295095E-004 + 212.51999999999998 3.4919474290904964E-004 + 212.57999999999998 3.4660347164040871E-004 + 212.63999999999999 3.4387637461233910E-004 + 212.69999999999999 3.4101653405329787E-004 + 212.75999999999999 3.3802734698817021E-004 + 212.81999999999999 3.3491239259279040E-004 + 212.88000000000000 3.3167556637458034E-004 + 212.94000000000000 3.2832094596616494E-004 + 213.00000000000000 3.2485289919419164E-004 + 213.06000000000000 3.2127599529629047E-004 + 213.12000000000000 3.1759504356122152E-004 + 213.18000000000001 3.1381502966208057E-004 + 213.24000000000001 3.0994123997822229E-004 + 213.30000000000001 3.0597915015212978E-004 + 213.36000000000001 3.0193437236194874E-004 + 213.42000000000002 2.9781276450100124E-004 + 213.48000000000002 2.9362042811772077E-004 + 213.53999999999996 2.8936351960936037E-004 + 213.59999999999997 2.8504842577518089E-004 + 213.65999999999997 2.8068167281389283E-004 + 213.71999999999997 2.7626987618311380E-004 + 213.77999999999997 2.7181980496273305E-004 + 213.83999999999997 2.6733827106865390E-004 + 213.89999999999998 2.6283213505153583E-004 + 213.95999999999998 2.5830829758986498E-004 + 214.01999999999998 2.5377369464864579E-004 + 214.07999999999998 2.4923517866470098E-004 + 214.13999999999999 2.4469959523506444E-004 + 214.19999999999999 2.4017374738101167E-004 + 214.25999999999999 2.3566432877630854E-004 + 214.31999999999999 2.3117794282397856E-004 + 214.38000000000000 2.2672106717743355E-004 + 214.44000000000000 2.2230005997487317E-004 + 214.50000000000000 2.1792112044108253E-004 + 214.56000000000000 2.1359029375993353E-004 + 214.62000000000000 2.0931347455920254E-004 + 214.68000000000001 2.0509632173719761E-004 + 214.74000000000001 2.0094438091420452E-004 + 214.80000000000001 1.9686291260440203E-004 + 214.86000000000001 1.9285697971555647E-004 + 214.92000000000002 1.8893143925012511E-004 + 214.98000000000002 1.8509085674619805E-004 + 215.03999999999996 1.8133952724127145E-004 + 215.09999999999997 1.7768147261036155E-004 + 215.15999999999997 1.7412041646375912E-004 + 215.21999999999997 1.7065971021463418E-004 + 215.27999999999997 1.6730244529924312E-004 + 215.33999999999997 1.6405131142341802E-004 + 215.39999999999998 1.6090864091269284E-004 + 215.45999999999998 1.5787641292925472E-004 + 215.51999999999998 1.5495622887879904E-004 + 215.57999999999998 1.5214931200087180E-004 + 215.63999999999999 1.4945649312727991E-004 + 215.69999999999999 1.4687825217511320E-004 + 215.75999999999999 1.4441466966963945E-004 + 215.81999999999999 1.4206546627179667E-004 + 215.88000000000000 1.3983001306333223E-004 + 215.94000000000000 1.3770731052724789E-004 + 216.00000000000000 1.3569600027922300E-004 + 216.06000000000000 1.3379440797259141E-004 + 216.12000000000000 1.3200049218599843E-004 + 216.18000000000001 1.3031191310535557E-004 + 216.24000000000001 1.2872598935846294E-004 + 216.30000000000001 1.2723974155645320E-004 + 216.36000000000001 1.2584986165972012E-004 + 216.42000000000002 1.2455276336815544E-004 + 216.48000000000002 1.2334454143532065E-004 + 216.53999999999996 1.2222104909403379E-004 + 216.59999999999997 1.2117783325180567E-004 + 216.65999999999997 1.2021020520068857E-004 + 216.71999999999997 1.1931324714669929E-004 + 216.77999999999997 1.1848179025042522E-004 + 216.83999999999997 1.1771048313395156E-004 + 216.89999999999998 1.1699380139158841E-004 + 216.95999999999998 1.1632604096822080E-004 + 217.01999999999998 1.1570137597297761E-004 + 217.07999999999998 1.1511385810810474E-004 + 217.13999999999999 1.1455744610827206E-004 + 217.19999999999999 1.1402605577206239E-004 + 217.25999999999999 1.1351354258420435E-004 + 217.31999999999999 1.1301374762726156E-004 + 217.38000000000000 1.1252053724839444E-004 + 217.44000000000000 1.1202777426656449E-004 + 217.50000000000000 1.1152940289359949E-004 + 217.56000000000000 1.1101941149589711E-004 + 217.62000000000000 1.1049189105135497E-004 + 217.68000000000001 1.0994102837199148E-004 + 217.74000000000001 1.0936115195910533E-004 + 217.80000000000001 1.0874672962366298E-004 + 217.86000000000001 1.0809236908760254E-004 + 217.92000000000002 1.0739289442435182E-004 + 217.98000000000002 1.0664328482840290E-004 + 218.03999999999996 1.0583874998080367E-004 + 218.09999999999997 1.0497471822887151E-004 + 218.15999999999997 1.0404684346844582E-004 + 218.21999999999997 1.0305105460995393E-004 + 218.27999999999997 1.0198352347312378E-004 + 218.33999999999997 1.0084068196061747E-004 + 218.39999999999998 9.9619263116182741E-005 + 218.45999999999998 9.8316291393653590E-005 + 218.51999999999998 9.6929085437662770E-005 + 218.57999999999998 9.5455281932018448E-005 + 218.63999999999999 9.3892811420894046E-005 + 218.69999999999999 9.2239946426140795E-005 + 218.75999999999999 9.0495278081565851E-005 + 218.81999999999999 8.8657730465034449E-005 + 218.88000000000000 8.6726546173387004E-005 + 218.94000000000000 8.4701331591542460E-005 + 219.00000000000000 8.2582007313175418E-005 + 219.06000000000000 8.0368850037617552E-005 + 219.12000000000000 7.8062458409550403E-005 + 219.18000000000001 7.5663776355762349E-005 + 219.24000000000001 7.3174069816454905E-005 + 219.30000000000001 7.0594923633472963E-005 + 219.36000000000001 6.7928231213799643E-005 + 219.42000000000002 6.5176179819845267E-005 + 219.48000000000002 6.2341247708090088E-005 + 219.53999999999996 5.9426181210984223E-005 + 219.59999999999997 5.6433965687519411E-005 + 219.65999999999997 5.3367839063421234E-005 + 219.71999999999997 5.0231232788560252E-005 + 219.77999999999997 4.7027792567149641E-005 + 219.83999999999997 4.3761342352138998E-005 + 219.89999999999998 4.0435860400593073E-005 + 219.95999999999998 3.7055475251505600E-005 + 220.01999999999998 3.3624453191807827E-005 + 220.07999999999998 3.0147171368418867E-005 + 220.13999999999999 2.6628121995717513E-005 + 220.19999999999999 2.3071880553512951E-005 + 220.25999999999999 1.9483121088133437E-005 + 220.31999999999999 1.5866582116894422E-005 + 220.38000000000000 1.2227065439365794E-005 + 220.44000000000000 8.5694308504266204E-006 + 220.50000000000000 4.8985798108914795E-006 + 220.56000000000000 1.2194417373238442E-006 + 220.62000000000000 -2.4630360084361573E-006 + 220.68000000000001 -6.1439030188108624E-006 + 220.74000000000001 -9.8182221508293109E-006 + 220.80000000000001 -1.3481083190718962E-005 + 220.86000000000001 -1.7127621283488713E-005 + 220.92000000000002 -2.0753029575560801E-005 + 220.98000000000002 -2.4352579854459008E-005 + 221.03999999999996 -2.7921633392463687E-005 + 221.09999999999997 -3.1455652321399428E-005 + 221.15999999999997 -3.4950224661395738E-005 + 221.21999999999997 -3.8401055262629664E-005 + 221.27999999999997 -4.1803994441641744E-005 + 221.33999999999997 -4.5155028362013608E-005 + 221.39999999999998 -4.8450300072454906E-005 + 221.45999999999998 -5.1686103489641356E-005 + 221.51999999999998 -5.4858888308535598E-005 + 221.57999999999998 -5.7965261109007142E-005 + 221.63999999999999 -6.1001997142300270E-005 + 221.69999999999999 -6.3966030203987603E-005 + 221.75999999999999 -6.6854464576145614E-005 + 221.81999999999999 -6.9664575463996878E-005 + 221.88000000000000 -7.2393795545615437E-005 + 221.94000000000000 -7.5039754372852919E-005 + 222.00000000000000 -7.7600253202982075E-005 + 222.06000000000000 -8.0073277497328424E-005 + 222.12000000000000 -8.2456985964869100E-005 + 222.18000000000001 -8.4749743749003815E-005 + 222.24000000000001 -8.6950108621195140E-005 + 222.30000000000001 -8.9056831997670895E-005 + 222.36000000000001 -9.1068836398791741E-005 + 222.42000000000002 -9.2985268938308843E-005 + 222.48000000000002 -9.4805442436465595E-005 + 222.53999999999996 -9.6528862910007387E-005 + 222.59999999999997 -9.8155208637727942E-005 + 222.65999999999997 -9.9684343509093610E-005 + 222.71999999999997 -1.0111629752896773E-004 + 222.77999999999997 -1.0245124375232849E-004 + 222.83999999999997 -1.0368954049320870E-004 + 222.89999999999998 -1.0483166722724660E-004 + 222.95999999999998 -1.0587825626268188E-004 + 223.01999999999998 -1.0683007881176341E-004 + 223.07999999999998 -1.0768803304577044E-004 + 223.13999999999999 -1.0845315002188336E-004 + 223.19999999999999 -1.0912659935748160E-004 + 223.25999999999999 -1.0970966948499983E-004 + 223.31999999999999 -1.1020375923349935E-004 + 223.38000000000000 -1.1061039182337782E-004 + 223.44000000000000 -1.1093121535773110E-004 + 223.50000000000000 -1.1116797655009930E-004 + 223.56000000000000 -1.1132252919084155E-004 + 223.62000000000000 -1.1139682393965818E-004 + 223.68000000000001 -1.1139290494726925E-004 + 223.74000000000001 -1.1131289759349166E-004 + 223.80000000000001 -1.1115899534721607E-004 + 223.86000000000001 -1.1093346812773263E-004 + 223.92000000000002 -1.1063863349512279E-004 + 223.98000000000002 -1.1027685321789667E-004 + 224.03999999999996 -1.0985053043535452E-004 + 224.09999999999997 -1.0936208468844478E-004 + 224.15999999999997 -1.0881397674266516E-004 + 224.21999999999997 -1.0820866080494461E-004 + 224.27999999999997 -1.0754860794587071E-004 + 224.33999999999997 -1.0683630852011936E-004 + 224.39999999999998 -1.0607422894392506E-004 + 224.45999999999998 -1.0526484105155268E-004 + 224.51999999999998 -1.0441060302314497E-004 + 224.57999999999998 -1.0351398444759451E-004 + 224.63999999999999 -1.0257740573321253E-004 + 224.69999999999999 -1.0160328681290169E-004 + 224.75999999999999 -1.0059401443018593E-004 + 224.81999999999999 -9.9551952369163318E-005 + 224.88000000000000 -9.8479423241258247E-005 + 224.94000000000000 -9.7378710711950610E-005 + 225.00000000000000 -9.6252062755664854E-005 + 225.06000000000000 -9.5101670005007580E-005 + 225.12000000000000 -9.3929666216870070E-005 + 225.18000000000001 -9.2738132327327215E-005 + 225.24000000000001 -9.1529104070077342E-005 + 225.30000000000001 -9.0304540598285817E-005 + 225.36000000000001 -8.9066351307060635E-005 + 225.42000000000002 -8.7816382094488185E-005 + 225.48000000000002 -8.6556432934538428E-005 + 225.53999999999996 -8.5288240975337409E-005 + 225.59999999999997 -8.4013489599691772E-005 + 225.65999999999997 -8.2733827162505776E-005 + 225.71999999999997 -8.1450834215818861E-005 + 225.77999999999997 -8.0166060032801963E-005 + 225.83999999999997 -7.8880995638443561E-005 + 225.89999999999998 -7.7597082735357664E-005 + 225.95999999999998 -7.6315733454831270E-005 + 226.01999999999998 -7.5038277070570055E-005 + 226.07999999999998 -7.3766016867531729E-005 + 226.13999999999999 -7.2500178707019479E-005 + 226.19999999999999 -7.1241930825483279E-005 + 226.25999999999999 -6.9992402445531588E-005 + 226.31999999999999 -6.8752630573249264E-005 + 226.38000000000000 -6.7523604630695863E-005 + 226.44000000000000 -6.6306243912395447E-005 + 226.50000000000000 -6.5101425581634575E-005 + 226.56000000000000 -6.3909959837788258E-005 + 226.62000000000000 -6.2732604381529898E-005 + 226.68000000000001 -6.1570090829644229E-005 + 226.74000000000001 -6.0423099580491735E-005 + 226.80000000000001 -5.9292281589027704E-005 + 226.86000000000001 -5.8178269478655595E-005 + 226.92000000000002 -5.7081678328875333E-005 + 226.98000000000002 -5.6003108960144048E-005 + 227.03999999999996 -5.4943149193013133E-005 + 227.09999999999997 -5.3902369375731966E-005 + 227.15999999999997 -5.2881343994220842E-005 + 227.21999999999997 -5.1880618660714920E-005 + 227.27999999999997 -5.0900735010061241E-005 + 227.33999999999997 -4.9942200076998342E-005 + 227.39999999999998 -4.9005500435691485E-005 + 227.45999999999998 -4.8091082305411832E-005 + 227.51999999999998 -4.7199355845546836E-005 + 227.57999999999998 -4.6330682405091465E-005 + 227.63999999999999 -4.5485379930601596E-005 + 227.69999999999999 -4.4663711415775183E-005 + 227.75999999999999 -4.3865879384966221E-005 + 227.81999999999999 -4.3092035987491450E-005 + 227.88000000000000 -4.2342280377719850E-005 + 227.94000000000000 -4.1616665805273344E-005 + 228.00000000000000 -4.0915185253906471E-005 + 228.06000000000000 -4.0237801511199832E-005 + 228.12000000000000 -3.9584429944222835E-005 + 228.18000000000001 -3.8954957668992020E-005 + 228.24000000000001 -3.8349234436560573E-005 + 228.30000000000001 -3.7767086550919087E-005 + 228.36000000000001 -3.7208318570952360E-005 + 228.42000000000002 -3.6672706332247327E-005 + 228.48000000000002 -3.6160009858124218E-005 + 228.53999999999996 -3.5669969262211230E-005 + 228.59999999999997 -3.5202298269197453E-005 + 228.65999999999997 -3.4756690263523190E-005 + 228.71999999999997 -3.4332809493406357E-005 + 228.77999999999997 -3.3930298861389157E-005 + 228.83999999999997 -3.3548773338860768E-005 + 228.89999999999998 -3.3187816460945407E-005 + 228.95999999999998 -3.2846977757940039E-005 + 229.01999999999998 -3.2525775898186532E-005 + 229.07999999999998 -3.2223699071747043E-005 + 229.13999999999999 -3.1940206506859860E-005 + 229.19999999999999 -3.1674719753294090E-005 + 229.25999999999999 -3.1426639002738635E-005 + 229.31999999999999 -3.1195334769319086E-005 + 229.38000000000000 -3.0980154650231089E-005 + 229.44000000000000 -3.0780423166586130E-005 + 229.50000000000000 -3.0595445732119509E-005 + 229.56000000000000 -3.0424524549538919E-005 + 229.62000000000000 -3.0266946173620144E-005 + 229.68000000000001 -3.0121995756989307E-005 + 229.74000000000001 -2.9988964308666106E-005 + 229.80000000000001 -2.9867145500280485E-005 + 229.86000000000001 -2.9755852319801585E-005 + 229.92000000000002 -2.9654410210105773E-005 + 229.97999999999996 -2.9562173030678089E-005 + 230.03999999999996 -2.9478524102583636E-005 + 230.09999999999997 -2.9402877003682120E-005 + 230.15999999999997 -2.9334685027768923E-005 + 230.21999999999997 -2.9273439661534856E-005 + 230.27999999999997 -2.9218667887920571E-005 + 230.33999999999997 -2.9169942010317723E-005 + 230.39999999999998 -2.9126872278580091E-005 + 230.45999999999998 -2.9089100607307857E-005 + 230.51999999999998 -2.9056305275579939E-005 + 230.57999999999998 -2.9028190126767619E-005 + 230.63999999999999 -2.9004481698074382E-005 + 230.69999999999999 -2.8984926430619128E-005 + 230.75999999999999 -2.8969281265024922E-005 + 230.81999999999999 -2.8957310558286282E-005 + 230.88000000000000 -2.8948784122544813E-005 + 230.94000000000000 -2.8943474314849648E-005 + 231.00000000000000 -2.8941152778579765E-005 + 231.06000000000000 -2.8941592107586973E-005 + 231.12000000000000 -2.8944571887030244E-005 + 231.18000000000001 -2.8949869746113506E-005 + 231.24000000000001 -2.8957277275780726E-005 + 231.30000000000001 -2.8966596672622901E-005 + 231.36000000000001 -2.8977646634606968E-005 + 231.42000000000002 -2.8990266593833230E-005 + 231.47999999999996 -2.9004319736924761E-005 + 231.53999999999996 -2.9019693564021923E-005 + 231.59999999999997 -2.9036305395141773E-005 + 231.65999999999997 -2.9054090468507014E-005 + 231.71999999999997 -2.9073011038081210E-005 + 231.77999999999997 -2.9093043295505589E-005 + 231.83999999999997 -2.9114180952066739E-005 + 231.89999999999998 -2.9136422291774215E-005 + 231.95999999999998 -2.9159765147617977E-005 + 232.01999999999998 -2.9184204991360340E-005 + 232.07999999999998 -2.9209722315917251E-005 + 232.13999999999999 -2.9236283950858577E-005 + 232.19999999999999 -2.9263835060590698E-005 + 232.25999999999999 -2.9292302853745337E-005 + 232.31999999999999 -2.9321593338182242E-005 + 232.38000000000000 -2.9351592586237059E-005 + 232.44000000000000 -2.9382174475077382E-005 + 232.50000000000000 -2.9413200755946512E-005 + 232.56000000000000 -2.9444526655183166E-005 + 232.62000000000000 -2.9476009884163655E-005 + 232.68000000000001 -2.9507514599845138E-005 + 232.74000000000001 -2.9538913360759394E-005 + 232.80000000000001 -2.9570094475887501E-005 + 232.86000000000001 -2.9600964188937968E-005 + 232.92000000000002 -2.9631443051934649E-005 + 232.97999999999996 -2.9661471840078137E-005 + 233.03999999999996 -2.9691000913044540E-005 + 233.09999999999997 -2.9719993049420873E-005 + 233.15999999999997 -2.9748417953098265E-005 + 233.21999999999997 -2.9776243606434505E-005 + 233.27999999999997 -2.9803434411884593E-005 + 233.33999999999997 -2.9829946483446328E-005 + 233.39999999999998 -2.9855723027351557E-005 + 233.45999999999998 -2.9880695857327857E-005 + 233.51999999999998 -2.9904780632985195E-005 + 233.57999999999998 -2.9927884685959825E-005 + 233.63999999999999 -2.9949902814546952E-005 + 233.69999999999999 -2.9970725922352560E-005 + 233.75999999999999 -2.9990246831704157E-005 + 233.81999999999999 -3.0008365210101230E-005 + 233.88000000000000 -3.0024994590077098E-005 + 233.94000000000000 -3.0040069459638108E-005 + 234.00000000000000 -3.0053546738005254E-005 + 234.06000000000000 -3.0065411657117524E-005 + 234.12000000000000 -3.0075681546790120E-005 + 234.18000000000001 -3.0084398815795267E-005 + 234.24000000000001 -3.0091632912356592E-005 + 234.30000000000001 -3.0097480644447531E-005 + 234.36000000000001 -3.0102053575494190E-005 + 234.42000000000002 -3.0105472074353723E-005 + 234.47999999999996 -3.0107861605646864E-005 + 234.53999999999996 -3.0109347400792855E-005 + 234.59999999999997 -3.0110035430138405E-005 + 234.65999999999997 -3.0110016473836836E-005 + 234.71999999999997 -3.0109355775838321E-005 + 234.77999999999997 -3.0108089774094046E-005 + 234.83999999999997 -3.0106229899890804E-005 + 234.89999999999998 -3.0103748703721053E-005 + 234.95999999999998 -3.0100595507373282E-005 + 235.01999999999998 -3.0096689124683666E-005 + 235.07999999999998 -3.0091926144887486E-005 + 235.13999999999999 -3.0086189127466634E-005 + 235.19999999999999 -3.0079341747002860E-005 + 235.25999999999999 -3.0071244450603420E-005 + 235.31999999999999 -3.0061755564171689E-005 + 235.38000000000000 -3.0050738868368376E-005 + 235.44000000000000 -3.0038059564796237E-005 + 235.50000000000000 -3.0023599053041687E-005 + 235.56000000000000 -3.0007246589837033E-005 + 235.62000000000000 -2.9988904122590517E-005 + 235.68000000000001 -2.9968482300692268E-005 + 235.74000000000001 -2.9945904757312024E-005 + 235.80000000000001 -2.9921100778843631E-005 + 235.86000000000001 -2.9894005659383015E-005 + 235.92000000000002 -2.9864554250969848E-005 + 235.97999999999996 -2.9832684653143334E-005 + 236.03999999999996 -2.9798325902438718E-005 + 236.09999999999997 -2.9761408208272626E-005 + 236.15999999999997 -2.9721847868737725E-005 + 236.21999999999997 -2.9679559052351777E-005 + 236.27999999999997 -2.9634444210191150E-005 + 236.33999999999997 -2.9586405186030504E-005 + 236.39999999999998 -2.9535330503848008E-005 + 236.45999999999998 -2.9481114472199143E-005 + 236.51999999999998 -2.9423645595761823E-005 + 236.57999999999998 -2.9362821590791823E-005 + 236.63999999999999 -2.9298546763799766E-005 + 236.69999999999999 -2.9230739239608719E-005 + 236.75999999999999 -2.9159331857417109E-005 + 236.81999999999999 -2.9084280003454730E-005 + 236.88000000000000 -2.9005566097261025E-005 + 236.94000000000000 -2.8923198754991077E-005 + 237.00000000000000 -2.8837219947785613E-005 + 237.06000000000000 -2.8747702418620072E-005 + 237.12000000000000 -2.8654754945895739E-005 + 237.18000000000001 -2.8558519736877989E-005 + 237.24000000000001 -2.8459168703703835E-005 + 237.30000000000001 -2.8356907093434888E-005 + 237.36000000000001 -2.8251964252392760E-005 + 237.42000000000002 -2.8144592341266721E-005 + 237.47999999999996 -2.8035059462683870E-005 + 237.53999999999996 -2.7923645694290394E-005 + 237.59999999999997 -2.7810634641565384E-005 + 237.65999999999997 -2.7696309768631875E-005 + 237.71999999999997 -2.7580946853714988E-005 + 237.77999999999997 -2.7464809457171254E-005 + 237.83999999999997 -2.7348149182215100E-005 + 237.89999999999998 -2.7231198739843580E-005 + 237.95999999999998 -2.7114171304697537E-005 + 238.01999999999998 -2.6997263228204502E-005 + 238.07999999999998 -2.6880651429745091E-005 + 238.13999999999999 -2.6764502073831190E-005 + 238.19999999999999 -2.6648967356379123E-005 + 238.25999999999999 -2.6534191560075918E-005 + 238.31999999999999 -2.6420316606636071E-005 + 238.38000000000000 -2.6307487711061956E-005 + 238.44000000000000 -2.6195847846511144E-005 + 238.50000000000000 -2.6085550416661209E-005 + 238.56000000000000 -2.5976751482103287E-005 + 238.62000000000000 -2.5869612323385212E-005 + 238.68000000000001 -2.5764302684293641E-005 + 238.74000000000001 -2.5660986004918157E-005 + 238.80000000000001 -2.5559824144849008E-005 + 238.86000000000001 -2.5460969979318383E-005 + 238.92000000000002 -2.5364557998078922E-005 + 238.97999999999996 -2.5270704674719733E-005 + 239.03999999999996 -2.5179499010233692E-005 + 239.09999999999997 -2.5091000176933671E-005 + 239.15999999999997 -2.5005233989700220E-005 + 239.21999999999997 -2.4922193914662983E-005 + 239.27999999999997 -2.4841838468576387E-005 + 239.33999999999997 -2.4764097435403518E-005 + 239.39999999999998 -2.4688872051796041E-005 + 239.45999999999998 -2.4616046339328262E-005 + 239.51999999999998 -2.4545488169491856E-005 + 239.57999999999998 -2.4477058080651931E-005 + 239.63999999999999 -2.4410619102435542E-005 + 239.69999999999999 -2.4346041319788266E-005 + 239.75999999999999 -2.4283208459946331E-005 + 239.81999999999999 -2.4222020779145690E-005 + 239.88000000000000 -2.4162405731858304E-005 + 239.94000000000000 -2.4104305159070578E-005 + 240.00000000000000 -2.4047690410600698E-005 + 240.06000000000000 -2.3992552220503642E-005 + 240.12000000000000 -2.3938898169260788E-005 + 240.18000000000001 -2.3886747206601051E-005 + 240.24000000000001 -2.3836133825818862E-005 + 240.30000000000001 -2.3787090272135728E-005 + 240.36000000000001 -2.3739650285290108E-005 + 240.42000000000002 -2.3693842619411137E-005 + 240.47999999999996 -2.3649691577098608E-005 + 240.53999999999996 -2.3607209297276155E-005 + 240.59999999999997 -2.3566400055160519E-005 + 240.65999999999997 -2.3527263795767504E-005 + 240.71999999999997 -2.3489789337043253E-005 + 240.77999999999997 -2.3453964811639019E-005 + 240.83999999999997 -2.3419781027460676E-005 + 240.89999999999998 -2.3387232593386783E-005 + 240.95999999999998 -2.3356320374834793E-005 + 241.01999999999998 -2.3327058706835856E-005 + 241.07999999999998 -2.3299470986819940E-005 + 241.13999999999999 -2.3273592967809415E-005 + 241.19999999999999 -2.3249477284801454E-005 + 241.25999999999999 -2.3227182173256375E-005 + 241.31999999999999 -2.3206778014778966E-005 + 241.38000000000000 -2.3188331915709533E-005 + 241.44000000000000 -2.3171912673762279E-005 + 241.50000000000000 -2.3157586342924306E-005 + 241.56000000000000 -2.3145403374586977E-005 + 241.62000000000000 -2.3135399717632940E-005 + 241.68000000000001 -2.3127595143534576E-005 + 241.74000000000001 -2.3121983578013166E-005 + 241.80000000000001 -2.3118538789069425E-005 + 241.86000000000001 -2.3117210067644075E-005 + 241.92000000000002 -2.3117924956851999E-005 + 241.97999999999996 -2.3120590189362177E-005 + 242.03999999999996 -2.3125090733558805E-005 + 242.09999999999997 -2.3131301999858216E-005 + 242.15999999999997 -2.3139082925183847E-005 + 242.21999999999997 -2.3148287494758918E-005 + 242.27999999999997 -2.3158762467373389E-005 + 242.33999999999997 -2.3170351993270275E-005 + 242.39999999999998 -2.3182902908785789E-005 + 242.45999999999998 -2.3196259371460039E-005 + 242.51999999999998 -2.3210272518468058E-005 + 242.57999999999998 -2.3224791545555351E-005 + 242.63999999999999 -2.3239669578633813E-005 + 242.69999999999999 -2.3254766643336868E-005 + 242.75999999999999 -2.3269937325962161E-005 + 242.81999999999999 -2.3285041257790697E-005 + 242.88000000000000 -2.3299938591079280E-005 + 242.94000000000000 -2.3314489861185711E-005 + 243.00000000000000 -2.3328558063448867E-005 + 243.06000000000000 -2.3342006719672054E-005 + 243.12000000000000 -2.3354703864725961E-005 + 243.18000000000001 -2.3366522429152554E-005 + 243.24000000000001 -2.3377344430131385E-005 + 243.30000000000001 -2.3387056157840227E-005 + 243.36000000000001 -2.3395559973489513E-005 + 243.42000000000002 -2.3402768035575768E-005 + 243.47999999999996 -2.3408606685718299E-005 + 243.53999999999996 -2.3413020961053037E-005 + 243.59999999999997 -2.3415969299021241E-005 + 243.65999999999997 -2.3417426544949761E-005 + 243.71999999999997 -2.3417390268585691E-005 + 243.77999999999997 -2.3415865695624109E-005 + 243.83999999999997 -2.3412879411576223E-005 + 243.89999999999998 -2.3408470720662912E-005 + 243.95999999999998 -2.3402691859352690E-005 + 244.01999999999998 -2.3395607562978855E-005 + 244.07999999999998 -2.3387294284883217E-005 + 244.13999999999999 -2.3377837888054752E-005 + 244.19999999999999 -2.3367335001439737E-005 + 244.25999999999999 -2.3355885191274822E-005 + 244.31999999999999 -2.3343597799828106E-005 + 244.38000000000000 -2.3330586205743922E-005 + 244.44000000000000 -2.3316968403540858E-005 + 244.50000000000000 -2.3302864797741080E-005 + 244.56000000000000 -2.3288396779534269E-005 + 244.62000000000000 -2.3273686767466957E-005 + 244.68000000000001 -2.3258854395281097E-005 + 244.74000000000001 -2.3244018205779037E-005 + 244.80000000000001 -2.3229294541018675E-005 + 244.86000000000001 -2.3214788333379382E-005 + 244.92000000000002 -2.3200600379170263E-005 + 244.97999999999996 -2.3186827274442893E-005 + 245.03999999999996 -2.3173550092249001E-005 + 245.09999999999997 -2.3160843868856017E-005 + 245.15999999999997 -2.3148775305453456E-005 + 245.21999999999997 -2.3137396261997423E-005 + 245.27999999999997 -2.3126749851152706E-005 + 245.33999999999997 -2.3116870554555500E-005 + 245.39999999999998 -2.3107776406033287E-005 + 245.45999999999998 -2.3099481008346560E-005 + 245.51999999999998 -2.3091981934743917E-005 + 245.57999999999998 -2.3085266991300505E-005 + 245.63999999999999 -2.3079311009548156E-005 + 245.69999999999999 -2.3074076777326528E-005 + 245.75999999999999 -2.3069513673680061E-005 + 245.81999999999999 -2.3065556117058684E-005 + 245.88000000000000 -2.3062127689215416E-005 + 245.94000000000000 -2.3059135530158816E-005 + 246.00000000000000 -2.3056473459474975E-005 + 246.06000000000000 -2.3054023629476519E-005 + 246.12000000000000 -2.3051657439991333E-005 + 246.18000000000001 -2.3049234578757907E-005 + 246.24000000000001 -2.3046616064430169E-005 + 246.30000000000001 -2.3043655327744137E-005 + 246.36000000000001 -2.3040210018976703E-005 + 246.42000000000002 -2.3036143988461011E-005 + 246.47999999999996 -2.3031333502272592E-005 + 246.53999999999996 -2.3025665539005380E-005 + 246.59999999999997 -2.3019049519675515E-005 + 246.65999999999997 -2.3011416086248674E-005 + 246.71999999999997 -2.3002719550282789E-005 + 246.77999999999997 -2.2992942806339139E-005 + 246.83999999999997 -2.2982093905671092E-005 + 246.89999999999998 -2.2970205462896956E-005 + 246.95999999999998 -2.2957333491416683E-005 + 247.01999999999998 -2.2943557624563492E-005 + 247.07999999999998 -2.2928974473979301E-005 + 247.13999999999999 -2.2913699076262636E-005 + 247.19999999999999 -2.2897852907698391E-005 + 247.25999999999999 -2.2881569095432180E-005 + 247.31999999999999 -2.2864980062715909E-005 + 247.38000000000000 -2.2848223218883639E-005 + 247.44000000000000 -2.2831431078407517E-005 + 247.50000000000000 -2.2814737188087957E-005 + 247.56000000000000 -2.2798267854277357E-005 + 247.62000000000000 -2.2782145097996450E-005 + 247.68000000000001 -2.2766487405994344E-005 + 247.74000000000001 -2.2751413969902902E-005 + 247.80000000000001 -2.2737036518838188E-005 + 247.86000000000001 -2.2723468966734010E-005 + 247.92000000000002 -2.2710823892059076E-005 + 247.97999999999996 -2.2699209474177310E-005 + 248.03999999999996 -2.2688739883970772E-005 + 248.09999999999997 -2.2679523907405442E-005 + 248.15999999999997 -2.2671667736043406E-005 + 248.21999999999997 -2.2665273043492466E-005 + 248.27999999999997 -2.2660431127394564E-005 + 248.33999999999997 -2.2657223593729547E-005 + 248.39999999999998 -2.2655718738198849E-005 + 248.45999999999998 -2.2655962944007839E-005 + 248.51999999999998 -2.2657987731273342E-005 + 248.57999999999998 -2.2661795887408402E-005 + 248.63999999999999 -2.2667369055047304E-005 + 248.69999999999999 -2.2674664378954700E-005 + 248.75999999999999 -2.2683607357010828E-005 + 248.81999999999999 -2.2694102979154267E-005 + 248.88000000000000 -2.2706027671217161E-005 + 248.94000000000000 -2.2719237347337714E-005 + 249.00000000000000 -2.2733567608294256E-005 + 249.06000000000000 -2.2748834222666098E-005 + 249.12000000000000 -2.2764841314113645E-005 + 249.18000000000001 -2.2781381442433186E-005 + 249.24000000000001 -2.2798233971758174E-005 + 249.30000000000001 -2.2815177899531052E-005 + 249.36000000000001 -2.2831986630333570E-005 + 249.42000000000002 -2.2848433338572195E-005 + 249.47999999999996 -2.2864291380625835E-005 + 249.53999999999996 -2.2879337823328816E-005 + 249.59999999999997 -2.2893355032518747E-005 + 249.65999999999997 -2.2906128776412640E-005 + 249.71999999999997 -2.2917452206432674E-005 + 249.77999999999997 -2.2927129882959977E-005 + 249.83999999999997 -2.2934974078545726E-005 + 249.89999999999998 -2.2940811184668360E-005 + 249.95999999999998 -2.2944475518864450E-005 + 250.01999999999998 -2.2945820099900670E-005 + 250.07999999999998 -2.2944713340151901E-005 + 250.13999999999999 -2.2941036288049686E-005 + 250.19999999999999 -2.2934692277627721E-005 + 250.25999999999999 -2.2925601619495221E-005 + 250.31999999999999 -2.2913703101691942E-005 + 250.38000000000000 -2.2898954299248537E-005 + 250.44000000000000 -2.2881330501807074E-005 + 250.50000000000000 -2.2860821094699626E-005 + 250.56000000000000 -2.2837433924183794E-005 + 250.62000000000000 -2.2811188960537795E-005 + 250.68000000000001 -2.2782118017765092E-005 + 250.74000000000001 -2.2750262268292906E-005 + 250.80000000000001 -2.2715670971381570E-005 + 250.86000000000001 -2.2678401148267170E-005 + 250.92000000000002 -2.2638511883393558E-005 + 250.97999999999996 -2.2596068125946784E-005 + 251.03999999999996 -2.2551134243394773E-005 + 251.09999999999997 -2.2503776219344725E-005 + 251.15999999999997 -2.2454065470595168E-005 + 251.21999999999997 -2.2402072470755786E-005 + 251.27999999999997 -2.2347871457051925E-005 + 251.33999999999997 -2.2291538196528363E-005 + 251.39999999999998 -2.2233153698459222E-005 + 251.45999999999998 -2.2172798596272679E-005 + 251.51999999999998 -2.2110559638423477E-005 + 251.57999999999998 -2.2046525178525239E-005 + 251.63999999999999 -2.1980784839535023E-005 + 251.69999999999999 -2.1913430569022675E-005 + 251.75999999999999 -2.1844550113210355E-005 + 251.81999999999999 -2.1774231005474513E-005 + 251.88000000000000 -2.1702552077823209E-005 + 251.94000000000000 -2.1629587751700129E-005 diff --git a/seisflows/tests/test_data/test_solver/002/DATA/Par_file b/seisflows/tests/test_data/test_solver/002/DATA/Par_file new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/DATA/Par_file @@ -0,0 +1 @@ + diff --git a/seisflows/tests/test_data/test_solver/002/DATA/SOURCE b/seisflows/tests/test_data/test_solver/002/DATA/SOURCE new file mode 120000 index 00000000..b0d2e8d8 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/DATA/SOURCE @@ -0,0 +1 @@ +SOURCE_002 \ No newline at end of file diff --git a/seisflows/tests/test_data/test_solver/002/DATA/SOURCE_002 b/seisflows/tests/test_data/test_solver/002/DATA/SOURCE_002 new file mode 100644 index 00000000..8371bd1f --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/DATA/SOURCE_002 @@ -0,0 +1,57 @@ +## Source 1 +source_surf = .false. # source inside the medium, or source automatically moved exactly at the surface by the solver +xs = 116059.49 # source location x in meters +zs = 105566.07 # source location z in meters (zs is ignored if source_surf is set to true, it is replaced with the topography height) +## Source type parameters: +# 1 = elastic force or acoustic pressure +# 2 = moment tensor +# or Initial field type (when initialfield set in Par_file): +# For a plane wave including converted and reflected waves at the free surface: +# 1 = P wave, +# 2 = S wave, +# 3 = Rayleigh wave +# For a plane wave without converted nor reflected waves at the free surface, i.e. with the incident wave only: +# 4 = P wave, +# 5 = S wave +# For initial mode displacement: +# 6 = mode (2,3) of a rectangular membrane +source_type = 1 +# Source time function: +# In the case of a source located in an acoustic medium, +# to get pressure for a Ricker in the seismograms, here we need to select a Gaussian for the potential Chi +# used as a source, rather than a Ricker, because pressure = - Chi_dot_dot. +# This is true both when USE_TRICK_FOR_BETTER_PRESSURE is set to .true. or to .false. +# Options: +# 1 = second derivative of a Gaussian (a.k.a. Ricker), +# 2 = first derivative of a Gaussian, +# 3 = Gaussian, +# 4 = Dirac, +# 5 = Heaviside (4 and 5 will produce noisy recordings because of frequencies above the mesh resolution limit), +# 6 = ocean acoustics type I, +# 7 = ocean acoustics type II, +# 8 = external source time function = 8 (source read from file), +# 9 = burst, +# 10 = Sinus source time function, +# 11 = Marmousi Ormsby wavelet +time_function_type = 2 +# If time_function_type == 8, enter below the custom source file to read (two columns file with time and amplitude) : +# (For the moment dt must be equal to the dt of the simulation. File name cannot exceed 150 characters) +# IMPORTANT: do NOT put quote signs around the file name, just put the file name itself otherwise the run will stop +name_of_source_file = "" # Only for option 8 : file containing the source wavelet +burst_band_width = 0. # Only for option 9 : band width of the burst +f0 = 8.400e-02 # dominant source frequency (Hz) if not Dirac or Heaviside +tshift = 0.000e+00 # time shift when multi sources (if one source, must be zero) +## Force source +# angle of the source (for a force only); for a plane wave, this is the incidence angle; for moment tensor sources this is unused +anglesource = 0.00 +## Moment tensor +# The components of a moment tensor source must be given in N.m, not in dyne.cm as in the DATA/CMTSOLUTION source file of the 3D version of the code. +Mxx = 1.000000 # Mxx component (for a moment tensor source only) +Mzz = -1.000000 # Mzz component (for a moment tensor source only) +Mxz = 0.000000 # Mxz component (for a moment tensor source only) +## Amplification (factor to amplify source time function) +factor = 1.000e+10 # amplification factor +## Moving source parameters +vx = 0.0 # Horizontal source velocity (m/s) +vz = 0.0 # Vertical source velocity (m/s) + diff --git a/seisflows/tests/test_data/test_solver/002/DATA/STATIONS b/seisflows/tests/test_data/test_solver/002/DATA/STATIONS new file mode 100644 index 00000000..02d3056f --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/DATA/STATIONS @@ -0,0 +1,2 @@ +S000000 AA 2.43610e+05 2.78904e+05 0.0 0.0 +S000001 AA 3.38981e+05 1.77849e+05 0.0 0.0 diff --git a/seisflows/tests/test_data/test_solver/002/bin/xcombine_sem b/seisflows/tests/test_data/test_solver/002/bin/xcombine_sem new file mode 100755 index 00000000..969a4d93 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/bin/xcombine_sem @@ -0,0 +1,3 @@ +#!/bin/bash -e +echo "xcombine_sem" + diff --git a/seisflows/tests/test_data/test_solver/002/bin/xmeshfem2D b/seisflows/tests/test_data/test_solver/002/bin/xmeshfem2D new file mode 100755 index 00000000..149ca704 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/bin/xmeshfem2D @@ -0,0 +1,2 @@ +#!/bin/bash -e +echo "xmeshfem2D" diff --git a/seisflows/tests/test_data/test_solver/002/bin/xsmooth_sem b/seisflows/tests/test_data/test_solver/002/bin/xsmooth_sem new file mode 100755 index 00000000..376b4aa5 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/bin/xsmooth_sem @@ -0,0 +1,3 @@ +#!/bin/bash -e +echo "xsmooth_sem" + diff --git a/seisflows/tests/test_data/test_solver/002/bin/xspecfem2D b/seisflows/tests/test_data/test_solver/002/bin/xspecfem2D new file mode 100755 index 00000000..e50c2b0b --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/bin/xspecfem2D @@ -0,0 +1,3 @@ +#!/bin/bash -e +echo "xspecfem2D" + diff --git a/seisflows/tests/test_data/test_solver/002/traces/obs/AA.S000000.BXY.semd b/seisflows/tests/test_data/test_solver/002/traces/obs/AA.S000000.BXY.semd new file mode 100644 index 00000000..d16979c4 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/traces/obs/AA.S000000.BXY.semd @@ -0,0 +1,5000 @@ + -48.000000000000000 0.0000000000000000 + -47.939999999999998 0.0000000000000000 + -47.880000000000003 0.0000000000000000 + -47.820000000000000 0.0000000000000000 + -47.759999999999998 0.0000000000000000 + -47.700000000000003 0.0000000000000000 + -47.640000000000001 0.0000000000000000 + -47.579999999999998 0.0000000000000000 + -47.520000000000003 0.0000000000000000 + -47.460000000000001 0.0000000000000000 + -47.399999999999999 0.0000000000000000 + -47.340000000000003 0.0000000000000000 + -47.280000000000001 0.0000000000000000 + -47.219999999999999 0.0000000000000000 + -47.159999999999997 0.0000000000000000 + -47.100000000000001 0.0000000000000000 + -47.039999999999999 0.0000000000000000 + -46.979999999999997 0.0000000000000000 + -46.920000000000002 0.0000000000000000 + -46.859999999999999 0.0000000000000000 + -46.799999999999997 0.0000000000000000 + -46.740000000000002 0.0000000000000000 + -46.680000000000000 0.0000000000000000 + -46.619999999999997 0.0000000000000000 + -46.560000000000002 0.0000000000000000 + -46.500000000000000 0.0000000000000000 + -46.439999999999998 0.0000000000000000 + -46.380000000000003 0.0000000000000000 + -46.320000000000000 0.0000000000000000 + -46.259999999999998 0.0000000000000000 + -46.200000000000003 0.0000000000000000 + -46.140000000000001 0.0000000000000000 + -46.079999999999998 0.0000000000000000 + -46.020000000000003 0.0000000000000000 + -45.960000000000001 0.0000000000000000 + -45.899999999999999 0.0000000000000000 + -45.840000000000003 0.0000000000000000 + -45.780000000000001 0.0000000000000000 + -45.719999999999999 0.0000000000000000 + -45.659999999999997 0.0000000000000000 + -45.600000000000001 0.0000000000000000 + -45.539999999999999 0.0000000000000000 + -45.479999999999997 0.0000000000000000 + -45.420000000000002 0.0000000000000000 + -45.359999999999999 0.0000000000000000 + -45.299999999999997 0.0000000000000000 + -45.240000000000002 0.0000000000000000 + -45.180000000000000 0.0000000000000000 + -45.119999999999997 0.0000000000000000 + -45.060000000000002 0.0000000000000000 + -45.000000000000000 0.0000000000000000 + -44.939999999999998 0.0000000000000000 + -44.880000000000003 0.0000000000000000 + -44.820000000000000 0.0000000000000000 + -44.759999999999998 0.0000000000000000 + -44.700000000000003 0.0000000000000000 + -44.640000000000001 0.0000000000000000 + -44.579999999999998 0.0000000000000000 + -44.520000000000003 0.0000000000000000 + -44.460000000000001 0.0000000000000000 + -44.399999999999999 0.0000000000000000 + -44.340000000000003 0.0000000000000000 + -44.280000000000001 0.0000000000000000 + -44.219999999999999 0.0000000000000000 + -44.159999999999997 0.0000000000000000 + -44.100000000000001 0.0000000000000000 + -44.039999999999999 0.0000000000000000 + -43.980000000000004 0.0000000000000000 + -43.920000000000002 0.0000000000000000 + -43.859999999999999 0.0000000000000000 + -43.799999999999997 0.0000000000000000 + -43.740000000000002 0.0000000000000000 + -43.680000000000000 0.0000000000000000 + -43.619999999999997 0.0000000000000000 + -43.560000000000002 0.0000000000000000 + -43.500000000000000 0.0000000000000000 + -43.439999999999998 0.0000000000000000 + -43.380000000000003 0.0000000000000000 + -43.320000000000000 0.0000000000000000 + -43.259999999999998 0.0000000000000000 + -43.200000000000003 0.0000000000000000 + -43.140000000000001 0.0000000000000000 + -43.079999999999998 0.0000000000000000 + -43.020000000000003 0.0000000000000000 + -42.960000000000001 0.0000000000000000 + -42.899999999999999 0.0000000000000000 + -42.840000000000003 0.0000000000000000 + -42.780000000000001 0.0000000000000000 + -42.719999999999999 0.0000000000000000 + -42.659999999999997 0.0000000000000000 + -42.600000000000001 0.0000000000000000 + -42.539999999999999 0.0000000000000000 + -42.480000000000004 0.0000000000000000 + -42.420000000000002 0.0000000000000000 + -42.359999999999999 0.0000000000000000 + -42.299999999999997 0.0000000000000000 + -42.240000000000002 0.0000000000000000 + -42.180000000000000 0.0000000000000000 + -42.119999999999997 0.0000000000000000 + -42.060000000000002 0.0000000000000000 + -42.000000000000000 0.0000000000000000 + -41.939999999999998 0.0000000000000000 + -41.880000000000003 0.0000000000000000 + -41.820000000000000 0.0000000000000000 + -41.759999999999998 0.0000000000000000 + -41.700000000000003 0.0000000000000000 + -41.640000000000001 0.0000000000000000 + -41.579999999999998 0.0000000000000000 + -41.520000000000003 0.0000000000000000 + -41.460000000000001 0.0000000000000000 + -41.399999999999999 0.0000000000000000 + -41.340000000000003 0.0000000000000000 + -41.280000000000001 0.0000000000000000 + -41.219999999999999 0.0000000000000000 + -41.159999999999997 0.0000000000000000 + -41.100000000000001 0.0000000000000000 + -41.039999999999999 0.0000000000000000 + -40.980000000000004 0.0000000000000000 + -40.920000000000002 0.0000000000000000 + -40.859999999999999 0.0000000000000000 + -40.799999999999997 0.0000000000000000 + -40.740000000000002 0.0000000000000000 + -40.680000000000000 0.0000000000000000 + -40.619999999999997 0.0000000000000000 + -40.560000000000002 0.0000000000000000 + -40.500000000000000 0.0000000000000000 + -40.439999999999998 0.0000000000000000 + -40.380000000000003 0.0000000000000000 + -40.320000000000000 0.0000000000000000 + -40.259999999999998 0.0000000000000000 + -40.200000000000003 0.0000000000000000 + -40.140000000000001 0.0000000000000000 + -40.079999999999998 0.0000000000000000 + -40.020000000000003 0.0000000000000000 + -39.960000000000001 0.0000000000000000 + -39.899999999999999 0.0000000000000000 + -39.840000000000003 0.0000000000000000 + -39.780000000000001 0.0000000000000000 + -39.719999999999999 0.0000000000000000 + -39.659999999999997 0.0000000000000000 + -39.600000000000001 0.0000000000000000 + -39.539999999999999 0.0000000000000000 + -39.480000000000004 0.0000000000000000 + -39.420000000000002 0.0000000000000000 + -39.359999999999999 0.0000000000000000 + -39.299999999999997 0.0000000000000000 + -39.240000000000002 0.0000000000000000 + -39.180000000000000 0.0000000000000000 + -39.120000000000005 0.0000000000000000 + -39.060000000000002 0.0000000000000000 + -39.000000000000000 0.0000000000000000 + -38.939999999999998 0.0000000000000000 + -38.880000000000003 0.0000000000000000 + -38.820000000000000 0.0000000000000000 + -38.759999999999998 0.0000000000000000 + -38.700000000000003 0.0000000000000000 + -38.640000000000001 0.0000000000000000 + -38.579999999999998 0.0000000000000000 + -38.519999999999996 0.0000000000000000 + -38.460000000000001 0.0000000000000000 + -38.399999999999999 0.0000000000000000 + -38.340000000000003 0.0000000000000000 + -38.280000000000001 0.0000000000000000 + -38.219999999999999 0.0000000000000000 + -38.159999999999997 0.0000000000000000 + -38.100000000000001 0.0000000000000000 + -38.039999999999999 0.0000000000000000 + -37.980000000000004 0.0000000000000000 + -37.920000000000002 0.0000000000000000 + -37.859999999999999 0.0000000000000000 + -37.799999999999997 0.0000000000000000 + -37.740000000000002 0.0000000000000000 + -37.680000000000000 0.0000000000000000 + -37.620000000000005 0.0000000000000000 + -37.560000000000002 0.0000000000000000 + -37.500000000000000 0.0000000000000000 + -37.439999999999998 0.0000000000000000 + -37.380000000000003 0.0000000000000000 + -37.320000000000000 0.0000000000000000 + -37.259999999999998 0.0000000000000000 + -37.200000000000003 0.0000000000000000 + -37.140000000000001 0.0000000000000000 + -37.079999999999998 0.0000000000000000 + -37.019999999999996 0.0000000000000000 + -36.960000000000001 0.0000000000000000 + -36.899999999999999 0.0000000000000000 + -36.840000000000003 0.0000000000000000 + -36.780000000000001 0.0000000000000000 + -36.719999999999999 0.0000000000000000 + -36.659999999999997 0.0000000000000000 + -36.600000000000001 0.0000000000000000 + -36.539999999999999 0.0000000000000000 + -36.480000000000004 0.0000000000000000 + -36.420000000000002 0.0000000000000000 + -36.359999999999999 0.0000000000000000 + -36.299999999999997 0.0000000000000000 + -36.240000000000002 0.0000000000000000 + -36.180000000000000 0.0000000000000000 + -36.120000000000005 0.0000000000000000 + -36.060000000000002 0.0000000000000000 + -36.000000000000000 0.0000000000000000 + -35.939999999999998 0.0000000000000000 + -35.880000000000003 0.0000000000000000 + -35.820000000000000 0.0000000000000000 + -35.759999999999998 0.0000000000000000 + -35.700000000000003 0.0000000000000000 + -35.640000000000001 0.0000000000000000 + -35.579999999999998 0.0000000000000000 + -35.519999999999996 0.0000000000000000 + -35.460000000000001 0.0000000000000000 + -35.399999999999999 0.0000000000000000 + -35.340000000000003 0.0000000000000000 + -35.280000000000001 0.0000000000000000 + -35.219999999999999 0.0000000000000000 + -35.159999999999997 0.0000000000000000 + -35.100000000000001 0.0000000000000000 + -35.039999999999999 0.0000000000000000 + -34.980000000000004 0.0000000000000000 + -34.920000000000002 0.0000000000000000 + -34.859999999999999 0.0000000000000000 + -34.799999999999997 0.0000000000000000 + -34.740000000000002 0.0000000000000000 + -34.680000000000000 0.0000000000000000 + -34.620000000000005 0.0000000000000000 + -34.560000000000002 0.0000000000000000 + -34.500000000000000 0.0000000000000000 + -34.439999999999998 0.0000000000000000 + -34.380000000000003 0.0000000000000000 + -34.320000000000000 0.0000000000000000 + -34.259999999999998 0.0000000000000000 + -34.200000000000003 0.0000000000000000 + -34.140000000000001 0.0000000000000000 + -34.079999999999998 0.0000000000000000 + -34.020000000000003 0.0000000000000000 + -33.960000000000001 0.0000000000000000 + -33.899999999999999 0.0000000000000000 + -33.840000000000003 0.0000000000000000 + -33.780000000000001 0.0000000000000000 + -33.719999999999999 0.0000000000000000 + -33.659999999999997 0.0000000000000000 + -33.600000000000001 0.0000000000000000 + -33.539999999999999 0.0000000000000000 + -33.480000000000004 0.0000000000000000 + -33.420000000000002 0.0000000000000000 + -33.359999999999999 0.0000000000000000 + -33.299999999999997 0.0000000000000000 + -33.240000000000002 0.0000000000000000 + -33.180000000000000 0.0000000000000000 + -33.120000000000005 0.0000000000000000 + -33.060000000000002 0.0000000000000000 + -33.000000000000000 0.0000000000000000 + -32.939999999999998 0.0000000000000000 + -32.880000000000003 0.0000000000000000 + -32.820000000000000 0.0000000000000000 + -32.759999999999998 0.0000000000000000 + -32.700000000000003 0.0000000000000000 + -32.640000000000001 0.0000000000000000 + -32.579999999999998 0.0000000000000000 + -32.520000000000003 0.0000000000000000 + -32.460000000000001 0.0000000000000000 + -32.399999999999999 0.0000000000000000 + -32.340000000000003 0.0000000000000000 + -32.280000000000001 0.0000000000000000 + -32.219999999999999 0.0000000000000000 + -32.159999999999997 0.0000000000000000 + -32.100000000000001 0.0000000000000000 + -32.039999999999999 0.0000000000000000 + -31.980000000000000 0.0000000000000000 + -31.920000000000002 0.0000000000000000 + -31.859999999999999 0.0000000000000000 + -31.800000000000001 0.0000000000000000 + -31.740000000000002 0.0000000000000000 + -31.680000000000000 0.0000000000000000 + -31.620000000000001 0.0000000000000000 + -31.560000000000002 0.0000000000000000 + -31.500000000000000 0.0000000000000000 + -31.440000000000001 0.0000000000000000 + -31.379999999999999 0.0000000000000000 + -31.320000000000000 0.0000000000000000 + -31.260000000000002 0.0000000000000000 + -31.199999999999999 0.0000000000000000 + -31.140000000000001 0.0000000000000000 + -31.080000000000002 0.0000000000000000 + -31.020000000000000 0.0000000000000000 + -30.960000000000001 0.0000000000000000 + -30.900000000000002 0.0000000000000000 + -30.840000000000000 0.0000000000000000 + -30.780000000000001 0.0000000000000000 + -30.719999999999999 0.0000000000000000 + -30.660000000000000 0.0000000000000000 + -30.600000000000001 0.0000000000000000 + -30.539999999999999 0.0000000000000000 + -30.480000000000000 0.0000000000000000 + -30.420000000000002 0.0000000000000000 + -30.359999999999999 0.0000000000000000 + -30.300000000000001 0.0000000000000000 + -30.240000000000002 0.0000000000000000 + -30.180000000000000 0.0000000000000000 + -30.120000000000001 0.0000000000000000 + -30.060000000000002 0.0000000000000000 + -30.000000000000000 0.0000000000000000 + -29.940000000000001 0.0000000000000000 + -29.879999999999999 0.0000000000000000 + -29.820000000000000 0.0000000000000000 + -29.760000000000002 0.0000000000000000 + -29.699999999999999 0.0000000000000000 + -29.640000000000001 0.0000000000000000 + -29.580000000000002 0.0000000000000000 + -29.520000000000000 0.0000000000000000 + -29.460000000000001 0.0000000000000000 + -29.400000000000002 0.0000000000000000 + -29.340000000000000 0.0000000000000000 + -29.280000000000001 0.0000000000000000 + -29.220000000000002 0.0000000000000000 + -29.160000000000000 0.0000000000000000 + -29.100000000000001 0.0000000000000000 + -29.039999999999999 0.0000000000000000 + -28.980000000000000 0.0000000000000000 + -28.920000000000002 0.0000000000000000 + -28.859999999999999 0.0000000000000000 + -28.800000000000001 0.0000000000000000 + -28.740000000000002 0.0000000000000000 + -28.680000000000000 0.0000000000000000 + -28.620000000000001 0.0000000000000000 + -28.560000000000002 0.0000000000000000 + -28.500000000000000 0.0000000000000000 + -28.440000000000001 0.0000000000000000 + -28.379999999999999 0.0000000000000000 + -28.320000000000000 0.0000000000000000 + -28.260000000000002 0.0000000000000000 + -28.199999999999999 0.0000000000000000 + -28.140000000000001 0.0000000000000000 + -28.080000000000002 0.0000000000000000 + -28.020000000000000 0.0000000000000000 + -27.960000000000001 0.0000000000000000 + -27.900000000000002 0.0000000000000000 + -27.840000000000000 0.0000000000000000 + -27.780000000000001 0.0000000000000000 + -27.720000000000002 0.0000000000000000 + -27.660000000000000 0.0000000000000000 + -27.600000000000001 0.0000000000000000 + -27.539999999999999 0.0000000000000000 + -27.480000000000000 0.0000000000000000 + -27.420000000000002 0.0000000000000000 + -27.359999999999999 0.0000000000000000 + -27.300000000000001 0.0000000000000000 + -27.240000000000002 0.0000000000000000 + -27.180000000000000 0.0000000000000000 + -27.120000000000001 0.0000000000000000 + -27.060000000000002 0.0000000000000000 + -27.000000000000000 0.0000000000000000 + -26.940000000000001 0.0000000000000000 + -26.880000000000003 0.0000000000000000 + -26.820000000000000 0.0000000000000000 + -26.760000000000002 0.0000000000000000 + -26.699999999999999 0.0000000000000000 + -26.640000000000001 0.0000000000000000 + -26.580000000000002 0.0000000000000000 + -26.520000000000000 0.0000000000000000 + -26.460000000000001 0.0000000000000000 + -26.400000000000002 0.0000000000000000 + -26.340000000000000 0.0000000000000000 + -26.280000000000001 0.0000000000000000 + -26.220000000000002 0.0000000000000000 + -26.160000000000000 0.0000000000000000 + -26.100000000000001 0.0000000000000000 + -26.039999999999999 0.0000000000000000 + -25.980000000000000 0.0000000000000000 + -25.920000000000002 0.0000000000000000 + -25.859999999999999 0.0000000000000000 + -25.800000000000001 0.0000000000000000 + -25.740000000000002 0.0000000000000000 + -25.680000000000000 0.0000000000000000 + -25.620000000000001 0.0000000000000000 + -25.560000000000002 0.0000000000000000 + -25.500000000000000 0.0000000000000000 + -25.440000000000001 0.0000000000000000 + -25.380000000000003 0.0000000000000000 + -25.320000000000000 0.0000000000000000 + -25.260000000000002 0.0000000000000000 + -25.199999999999999 0.0000000000000000 + -25.140000000000001 0.0000000000000000 + -25.080000000000002 0.0000000000000000 + -25.020000000000000 0.0000000000000000 + -24.960000000000001 0.0000000000000000 + -24.900000000000002 0.0000000000000000 + -24.840000000000000 0.0000000000000000 + -24.780000000000001 0.0000000000000000 + -24.720000000000002 0.0000000000000000 + -24.660000000000000 0.0000000000000000 + -24.600000000000001 0.0000000000000000 + -24.539999999999999 0.0000000000000000 + -24.480000000000000 0.0000000000000000 + -24.420000000000002 0.0000000000000000 + -24.359999999999999 0.0000000000000000 + -24.300000000000001 0.0000000000000000 + -24.240000000000002 0.0000000000000000 + -24.180000000000000 0.0000000000000000 + -24.120000000000001 0.0000000000000000 + -24.060000000000002 0.0000000000000000 + -24.000000000000000 0.0000000000000000 + -23.940000000000001 0.0000000000000000 + -23.880000000000003 0.0000000000000000 + -23.820000000000000 0.0000000000000000 + -23.760000000000002 0.0000000000000000 + -23.699999999999999 0.0000000000000000 + -23.640000000000001 0.0000000000000000 + -23.580000000000002 0.0000000000000000 + -23.520000000000000 0.0000000000000000 + -23.460000000000001 0.0000000000000000 + -23.400000000000002 0.0000000000000000 + -23.340000000000000 0.0000000000000000 + -23.280000000000001 0.0000000000000000 + -23.220000000000002 0.0000000000000000 + -23.160000000000000 0.0000000000000000 + -23.100000000000001 0.0000000000000000 + -23.039999999999999 0.0000000000000000 + -22.980000000000000 0.0000000000000000 + -22.920000000000002 0.0000000000000000 + -22.859999999999999 0.0000000000000000 + -22.800000000000001 0.0000000000000000 + -22.740000000000002 0.0000000000000000 + -22.680000000000000 0.0000000000000000 + -22.620000000000001 0.0000000000000000 + -22.560000000000002 0.0000000000000000 + -22.500000000000000 0.0000000000000000 + -22.440000000000001 0.0000000000000000 + -22.380000000000003 0.0000000000000000 + -22.320000000000000 0.0000000000000000 + -22.260000000000002 0.0000000000000000 + -22.199999999999999 0.0000000000000000 + -22.140000000000001 0.0000000000000000 + -22.080000000000002 0.0000000000000000 + -22.020000000000000 0.0000000000000000 + -21.960000000000001 0.0000000000000000 + -21.900000000000002 0.0000000000000000 + -21.840000000000000 0.0000000000000000 + -21.780000000000001 0.0000000000000000 + -21.720000000000002 0.0000000000000000 + -21.660000000000000 0.0000000000000000 + -21.600000000000001 0.0000000000000000 + -21.540000000000003 0.0000000000000000 + -21.480000000000000 0.0000000000000000 + -21.420000000000002 0.0000000000000000 + -21.359999999999999 0.0000000000000000 + -21.300000000000001 0.0000000000000000 + -21.240000000000002 0.0000000000000000 + -21.180000000000000 0.0000000000000000 + -21.120000000000001 0.0000000000000000 + -21.060000000000002 0.0000000000000000 + -21.000000000000000 0.0000000000000000 + -20.940000000000001 0.0000000000000000 + -20.880000000000003 0.0000000000000000 + -20.820000000000000 0.0000000000000000 + -20.760000000000002 0.0000000000000000 + -20.699999999999999 0.0000000000000000 + -20.640000000000001 0.0000000000000000 + -20.580000000000002 0.0000000000000000 + -20.520000000000000 0.0000000000000000 + -20.460000000000001 0.0000000000000000 + -20.400000000000002 0.0000000000000000 + -20.340000000000000 0.0000000000000000 + -20.280000000000001 0.0000000000000000 + -20.220000000000002 0.0000000000000000 + -20.160000000000000 0.0000000000000000 + -20.100000000000001 0.0000000000000000 + -20.040000000000003 0.0000000000000000 + -19.980000000000000 0.0000000000000000 + -19.920000000000002 0.0000000000000000 + -19.859999999999999 0.0000000000000000 + -19.800000000000001 0.0000000000000000 + -19.740000000000002 0.0000000000000000 + -19.680000000000000 0.0000000000000000 + -19.620000000000001 0.0000000000000000 + -19.560000000000002 0.0000000000000000 + -19.500000000000000 0.0000000000000000 + -19.440000000000001 0.0000000000000000 + -19.380000000000003 0.0000000000000000 + -19.320000000000000 0.0000000000000000 + -19.260000000000002 0.0000000000000000 + -19.200000000000003 0.0000000000000000 + -19.140000000000001 0.0000000000000000 + -19.080000000000002 0.0000000000000000 + -19.020000000000000 0.0000000000000000 + -18.960000000000001 0.0000000000000000 + -18.900000000000002 0.0000000000000000 + -18.840000000000000 0.0000000000000000 + -18.780000000000001 0.0000000000000000 + -18.720000000000002 0.0000000000000000 + -18.660000000000000 0.0000000000000000 + -18.600000000000001 0.0000000000000000 + -18.540000000000003 0.0000000000000000 + -18.480000000000000 0.0000000000000000 + -18.420000000000002 0.0000000000000000 + -18.359999999999999 0.0000000000000000 + -18.300000000000001 0.0000000000000000 + -18.240000000000002 0.0000000000000000 + -18.180000000000000 0.0000000000000000 + -18.120000000000001 0.0000000000000000 + -18.060000000000002 0.0000000000000000 + -18.000000000000000 0.0000000000000000 + -17.940000000000001 0.0000000000000000 + -17.880000000000003 0.0000000000000000 + -17.820000000000000 0.0000000000000000 + -17.760000000000002 0.0000000000000000 + -17.700000000000003 0.0000000000000000 + -17.640000000000001 0.0000000000000000 + -17.580000000000002 0.0000000000000000 + -17.520000000000000 0.0000000000000000 + -17.460000000000001 0.0000000000000000 + -17.400000000000002 0.0000000000000000 + -17.340000000000000 0.0000000000000000 + -17.280000000000001 0.0000000000000000 + -17.220000000000002 0.0000000000000000 + -17.160000000000000 0.0000000000000000 + -17.100000000000001 0.0000000000000000 + -17.040000000000003 0.0000000000000000 + -16.980000000000000 0.0000000000000000 + -16.920000000000002 0.0000000000000000 + -16.859999999999999 0.0000000000000000 + -16.800000000000001 0.0000000000000000 + -16.740000000000002 0.0000000000000000 + -16.680000000000000 0.0000000000000000 + -16.620000000000001 0.0000000000000000 + -16.560000000000002 0.0000000000000000 + -16.500000000000000 0.0000000000000000 + -16.440000000000001 0.0000000000000000 + -16.380000000000003 0.0000000000000000 + -16.320000000000000 0.0000000000000000 + -16.260000000000002 0.0000000000000000 + -16.200000000000003 0.0000000000000000 + -16.140000000000001 0.0000000000000000 + -16.080000000000002 0.0000000000000000 + -16.020000000000000 0.0000000000000000 + -15.960000000000001 0.0000000000000000 + -15.899999999999999 0.0000000000000000 + -15.840000000000003 0.0000000000000000 + -15.780000000000001 0.0000000000000000 + -15.719999999999999 0.0000000000000000 + -15.660000000000004 0.0000000000000000 + -15.600000000000001 0.0000000000000000 + -15.539999999999999 0.0000000000000000 + -15.480000000000004 0.0000000000000000 + -15.420000000000002 0.0000000000000000 + -15.359999999999999 0.0000000000000000 + -15.300000000000004 0.0000000000000000 + -15.240000000000002 0.0000000000000000 + -15.180000000000000 0.0000000000000000 + -15.120000000000005 0.0000000000000000 + -15.060000000000002 0.0000000000000000 + -15.000000000000000 0.0000000000000000 + -14.939999999999998 0.0000000000000000 + -14.880000000000003 0.0000000000000000 + -14.820000000000000 0.0000000000000000 + -14.759999999999998 0.0000000000000000 + -14.700000000000003 0.0000000000000000 + -14.640000000000001 0.0000000000000000 + -14.579999999999998 0.0000000000000000 + -14.520000000000003 0.0000000000000000 + -14.460000000000001 0.0000000000000000 + -14.399999999999999 0.0000000000000000 + -14.340000000000003 0.0000000000000000 + -14.280000000000001 0.0000000000000000 + -14.219999999999999 0.0000000000000000 + -14.160000000000004 0.0000000000000000 + -14.100000000000001 0.0000000000000000 + -14.039999999999999 0.0000000000000000 + -13.980000000000004 0.0000000000000000 + -13.920000000000002 0.0000000000000000 + -13.859999999999999 0.0000000000000000 + -13.800000000000004 0.0000000000000000 + -13.740000000000002 0.0000000000000000 + -13.680000000000000 0.0000000000000000 + -13.620000000000005 0.0000000000000000 + -13.560000000000002 0.0000000000000000 + -13.500000000000000 0.0000000000000000 + -13.439999999999998 0.0000000000000000 + -13.380000000000003 0.0000000000000000 + -13.320000000000000 0.0000000000000000 + -13.259999999999998 0.0000000000000000 + -13.200000000000003 0.0000000000000000 + -13.140000000000001 0.0000000000000000 + -13.079999999999998 0.0000000000000000 + -13.020000000000003 0.0000000000000000 + -12.960000000000001 0.0000000000000000 + -12.899999999999999 0.0000000000000000 + -12.840000000000003 0.0000000000000000 + -12.780000000000001 0.0000000000000000 + -12.719999999999999 0.0000000000000000 + -12.660000000000004 0.0000000000000000 + -12.600000000000001 0.0000000000000000 + -12.539999999999999 0.0000000000000000 + -12.480000000000004 0.0000000000000000 + -12.420000000000002 0.0000000000000000 + -12.359999999999999 0.0000000000000000 + -12.300000000000004 0.0000000000000000 + -12.240000000000002 0.0000000000000000 + -12.180000000000000 0.0000000000000000 + -12.120000000000005 0.0000000000000000 + -12.060000000000002 0.0000000000000000 + -12.000000000000000 0.0000000000000000 + -11.940000000000005 0.0000000000000000 + -11.880000000000003 0.0000000000000000 + -11.820000000000000 0.0000000000000000 + -11.759999999999998 0.0000000000000000 + -11.700000000000003 0.0000000000000000 + -11.640000000000001 0.0000000000000000 + -11.579999999999998 0.0000000000000000 + -11.520000000000003 0.0000000000000000 + -11.460000000000001 0.0000000000000000 + -11.399999999999999 0.0000000000000000 + -11.340000000000003 0.0000000000000000 + -11.280000000000001 0.0000000000000000 + -11.219999999999999 0.0000000000000000 + -11.160000000000004 0.0000000000000000 + -11.100000000000001 0.0000000000000000 + -11.039999999999999 0.0000000000000000 + -10.980000000000004 0.0000000000000000 + -10.920000000000002 0.0000000000000000 + -10.859999999999999 0.0000000000000000 + -10.800000000000004 0.0000000000000000 + -10.740000000000002 0.0000000000000000 + -10.680000000000000 0.0000000000000000 + -10.620000000000005 0.0000000000000000 + -10.560000000000002 0.0000000000000000 + -10.500000000000000 0.0000000000000000 + -10.440000000000005 0.0000000000000000 + -10.380000000000003 0.0000000000000000 + -10.320000000000000 0.0000000000000000 + -10.259999999999998 0.0000000000000000 + -10.200000000000003 0.0000000000000000 + -10.140000000000001 0.0000000000000000 + -10.079999999999998 0.0000000000000000 + -10.020000000000003 0.0000000000000000 + -9.9600000000000009 0.0000000000000000 + -9.8999999999999986 0.0000000000000000 + -9.8400000000000034 0.0000000000000000 + -9.7800000000000011 0.0000000000000000 + -9.7199999999999989 0.0000000000000000 + -9.6600000000000037 0.0000000000000000 + -9.6000000000000014 0.0000000000000000 + -9.5399999999999991 0.0000000000000000 + -9.4800000000000040 0.0000000000000000 + -9.4200000000000017 0.0000000000000000 + -9.3599999999999994 0.0000000000000000 + -9.3000000000000043 0.0000000000000000 + -9.2400000000000020 0.0000000000000000 + -9.1799999999999997 0.0000000000000000 + -9.1200000000000045 0.0000000000000000 + -9.0600000000000023 0.0000000000000000 + -9.0000000000000000 0.0000000000000000 + -8.9400000000000048 0.0000000000000000 + -8.8800000000000026 0.0000000000000000 + -8.8200000000000003 0.0000000000000000 + -8.7599999999999980 0.0000000000000000 + -8.7000000000000028 0.0000000000000000 + -8.6400000000000006 0.0000000000000000 + -8.5799999999999983 0.0000000000000000 + -8.5200000000000031 0.0000000000000000 + -8.4600000000000009 0.0000000000000000 + -8.3999999999999986 0.0000000000000000 + -8.3400000000000034 0.0000000000000000 + -8.2800000000000011 0.0000000000000000 + -8.2199999999999989 0.0000000000000000 + -8.1600000000000037 0.0000000000000000 + -8.1000000000000014 0.0000000000000000 + -8.0399999999999991 0.0000000000000000 + -7.9800000000000040 0.0000000000000000 + -7.9200000000000017 0.0000000000000000 + -7.8599999999999994 0.0000000000000000 + -7.8000000000000043 0.0000000000000000 + -7.7400000000000020 0.0000000000000000 + -7.6799999999999997 0.0000000000000000 + -7.6200000000000045 0.0000000000000000 + -7.5600000000000023 0.0000000000000000 + -7.5000000000000000 0.0000000000000000 + -7.4400000000000048 0.0000000000000000 + -7.3800000000000026 0.0000000000000000 + -7.3200000000000003 0.0000000000000000 + -7.2599999999999980 0.0000000000000000 + -7.2000000000000028 0.0000000000000000 + -7.1400000000000006 0.0000000000000000 + -7.0799999999999983 0.0000000000000000 + -7.0200000000000031 0.0000000000000000 + -6.9600000000000009 0.0000000000000000 + -6.8999999999999986 0.0000000000000000 + -6.8400000000000034 0.0000000000000000 + -6.7800000000000011 0.0000000000000000 + -6.7199999999999989 0.0000000000000000 + -6.6600000000000037 0.0000000000000000 + -6.6000000000000014 0.0000000000000000 + -6.5399999999999991 0.0000000000000000 + -6.4800000000000040 0.0000000000000000 + -6.4200000000000017 0.0000000000000000 + -6.3599999999999994 0.0000000000000000 + -6.3000000000000043 0.0000000000000000 + -6.2400000000000020 0.0000000000000000 + -6.1799999999999997 0.0000000000000000 + -6.1200000000000045 0.0000000000000000 + -6.0600000000000023 0.0000000000000000 + -6.0000000000000000 0.0000000000000000 + -5.9400000000000048 0.0000000000000000 + -5.8800000000000026 0.0000000000000000 + -5.8200000000000003 0.0000000000000000 + -5.7600000000000051 0.0000000000000000 + -5.7000000000000028 0.0000000000000000 + -5.6400000000000006 0.0000000000000000 + -5.5799999999999983 0.0000000000000000 + -5.5200000000000031 0.0000000000000000 + -5.4600000000000009 0.0000000000000000 + -5.3999999999999986 0.0000000000000000 + -5.3400000000000034 0.0000000000000000 + -5.2800000000000011 0.0000000000000000 + -5.2199999999999989 0.0000000000000000 + -5.1600000000000037 0.0000000000000000 + -5.1000000000000014 0.0000000000000000 + -5.0399999999999991 0.0000000000000000 + -4.9800000000000040 0.0000000000000000 + -4.9200000000000017 0.0000000000000000 + -4.8599999999999994 0.0000000000000000 + -4.8000000000000043 0.0000000000000000 + -4.7400000000000020 0.0000000000000000 + -4.6799999999999997 0.0000000000000000 + -4.6200000000000045 0.0000000000000000 + -4.5600000000000023 0.0000000000000000 + -4.5000000000000000 0.0000000000000000 + -4.4400000000000048 0.0000000000000000 + -4.3800000000000026 0.0000000000000000 + -4.3200000000000003 0.0000000000000000 + -4.2600000000000051 0.0000000000000000 + -4.2000000000000028 0.0000000000000000 + -4.1400000000000006 0.0000000000000000 + -4.0799999999999983 0.0000000000000000 + -4.0200000000000031 0.0000000000000000 + -3.9600000000000009 0.0000000000000000 + -3.8999999999999986 0.0000000000000000 + -3.8400000000000034 0.0000000000000000 + -3.7800000000000011 0.0000000000000000 + -3.7199999999999989 0.0000000000000000 + -3.6600000000000037 0.0000000000000000 + -3.6000000000000014 0.0000000000000000 + -3.5399999999999991 0.0000000000000000 + -3.4800000000000040 0.0000000000000000 + -3.4200000000000017 0.0000000000000000 + -3.3599999999999994 0.0000000000000000 + -3.3000000000000043 0.0000000000000000 + -3.2400000000000020 0.0000000000000000 + -3.1799999999999997 0.0000000000000000 + -3.1200000000000045 0.0000000000000000 + -3.0600000000000023 0.0000000000000000 + -3.0000000000000000 0.0000000000000000 + -2.9400000000000048 0.0000000000000000 + -2.8800000000000026 0.0000000000000000 + -2.8200000000000003 0.0000000000000000 + -2.7600000000000051 0.0000000000000000 + -2.7000000000000028 0.0000000000000000 + -2.6400000000000006 0.0000000000000000 + -2.5799999999999983 0.0000000000000000 + -2.5200000000000031 0.0000000000000000 + -2.4600000000000009 0.0000000000000000 + -2.3999999999999986 0.0000000000000000 + -2.3400000000000034 0.0000000000000000 + -2.2800000000000011 0.0000000000000000 + -2.2199999999999989 0.0000000000000000 + -2.1600000000000037 0.0000000000000000 + -2.1000000000000014 0.0000000000000000 + -2.0399999999999991 0.0000000000000000 + -1.9800000000000040 0.0000000000000000 + -1.9200000000000017 0.0000000000000000 + -1.8599999999999994 0.0000000000000000 + -1.8000000000000043 0.0000000000000000 + -1.7400000000000020 0.0000000000000000 + -1.6799999999999997 0.0000000000000000 + -1.6200000000000045 0.0000000000000000 + -1.5600000000000023 0.0000000000000000 + -1.5000000000000000 0.0000000000000000 + -1.4400000000000048 0.0000000000000000 + -1.3800000000000026 0.0000000000000000 + -1.3200000000000003 0.0000000000000000 + -1.2600000000000051 0.0000000000000000 + -1.2000000000000028 0.0000000000000000 + -1.1400000000000006 0.0000000000000000 + -1.0799999999999983 0.0000000000000000 + -1.0200000000000031 0.0000000000000000 + -0.96000000000000085 0.0000000000000000 + -0.89999999999999858 0.0000000000000000 + -0.84000000000000341 0.0000000000000000 + -0.78000000000000114 0.0000000000000000 + -0.71999999999999886 0.0000000000000000 + -0.66000000000000369 0.0000000000000000 + -0.60000000000000142 0.0000000000000000 + -0.53999999999999915 0.0000000000000000 + -0.48000000000000398 0.0000000000000000 + -0.42000000000000171 0.0000000000000000 + -0.35999999999999943 0.0000000000000000 + -0.30000000000000426 0.0000000000000000 + -0.24000000000000199 0.0000000000000000 + -0.17999999999999972 0.0000000000000000 + -0.12000000000000455 0.0000000000000000 + -6.0000000000002274E-002 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 + 5.9999999999995168E-002 0.0000000000000000 + 0.11999999999999744 0.0000000000000000 + 0.17999999999999972 0.0000000000000000 + 0.23999999999999488 0.0000000000000000 + 0.29999999999999716 0.0000000000000000 + 0.35999999999999943 0.0000000000000000 + 0.42000000000000171 0.0000000000000000 + 0.47999999999999687 0.0000000000000000 + 0.53999999999999915 0.0000000000000000 + 0.60000000000000142 0.0000000000000000 + 0.65999999999999659 0.0000000000000000 + 0.71999999999999886 0.0000000000000000 + 0.78000000000000114 0.0000000000000000 + 0.83999999999999631 0.0000000000000000 + 0.89999999999999858 0.0000000000000000 + 0.96000000000000085 0.0000000000000000 + 1.0199999999999960 0.0000000000000000 + 1.0799999999999983 0.0000000000000000 + 1.1400000000000006 0.0000000000000000 + 1.1999999999999957 0.0000000000000000 + 1.2599999999999980 0.0000000000000000 + 1.3200000000000003 0.0000000000000000 + 1.3799999999999955 0.0000000000000000 + 1.4399999999999977 0.0000000000000000 + 1.5000000000000000 0.0000000000000000 + 1.5599999999999952 0.0000000000000000 + 1.6199999999999974 0.0000000000000000 + 1.6799999999999997 0.0000000000000000 + 1.7399999999999949 0.0000000000000000 + 1.7999999999999972 0.0000000000000000 + 1.8599999999999994 0.0000000000000000 + 1.9200000000000017 0.0000000000000000 + 1.9799999999999969 0.0000000000000000 + 2.0399999999999991 0.0000000000000000 + 2.1000000000000014 0.0000000000000000 + 2.1599999999999966 0.0000000000000000 + 2.2199999999999989 0.0000000000000000 + 2.2800000000000011 0.0000000000000000 + 2.3399999999999963 0.0000000000000000 + 2.3999999999999986 0.0000000000000000 + 2.4600000000000009 0.0000000000000000 + 2.5199999999999960 0.0000000000000000 + 2.5799999999999983 0.0000000000000000 + 2.6400000000000006 0.0000000000000000 + 2.6999999999999957 0.0000000000000000 + 2.7599999999999980 0.0000000000000000 + 2.8200000000000003 0.0000000000000000 + 2.8799999999999955 0.0000000000000000 + 2.9399999999999977 0.0000000000000000 + 3.0000000000000000 0.0000000000000000 + 3.0599999999999952 0.0000000000000000 + 3.1199999999999974 0.0000000000000000 + 3.1799999999999997 0.0000000000000000 + 3.2399999999999949 0.0000000000000000 + 3.2999999999999972 0.0000000000000000 + 3.3599999999999994 0.0000000000000000 + 3.4199999999999946 0.0000000000000000 + 3.4799999999999969 0.0000000000000000 + 3.5399999999999991 0.0000000000000000 + 3.6000000000000014 0.0000000000000000 + 3.6599999999999966 0.0000000000000000 + 3.7199999999999989 0.0000000000000000 + 3.7800000000000011 0.0000000000000000 + 3.8399999999999963 0.0000000000000000 + 3.8999999999999986 0.0000000000000000 + 3.9600000000000009 0.0000000000000000 + 4.0199999999999960 0.0000000000000000 + 4.0799999999999983 0.0000000000000000 + 4.1400000000000006 0.0000000000000000 + 4.1999999999999957 0.0000000000000000 + 4.2599999999999980 0.0000000000000000 + 4.3200000000000003 0.0000000000000000 + 4.3799999999999955 0.0000000000000000 + 4.4399999999999977 0.0000000000000000 + 4.5000000000000000 0.0000000000000000 + 4.5599999999999952 0.0000000000000000 + 4.6199999999999974 0.0000000000000000 + 4.6799999999999997 0.0000000000000000 + 4.7399999999999949 0.0000000000000000 + 4.7999999999999972 0.0000000000000000 + 4.8599999999999994 0.0000000000000000 + 4.9199999999999946 0.0000000000000000 + 4.9799999999999969 0.0000000000000000 + 5.0399999999999991 0.0000000000000000 + 5.1000000000000014 0.0000000000000000 + 5.1599999999999966 0.0000000000000000 + 5.2199999999999989 0.0000000000000000 + 5.2800000000000011 0.0000000000000000 + 5.3399999999999963 0.0000000000000000 + 5.3999999999999986 0.0000000000000000 + 5.4600000000000009 0.0000000000000000 + 5.5199999999999960 0.0000000000000000 + 5.5799999999999983 0.0000000000000000 + 5.6400000000000006 0.0000000000000000 + 5.6999999999999957 0.0000000000000000 + 5.7599999999999980 0.0000000000000000 + 5.8200000000000003 0.0000000000000000 + 5.8799999999999955 0.0000000000000000 + 5.9399999999999977 0.0000000000000000 + 6.0000000000000000 0.0000000000000000 + 6.0599999999999952 0.0000000000000000 + 6.1199999999999974 0.0000000000000000 + 6.1799999999999997 0.0000000000000000 + 6.2399999999999949 0.0000000000000000 + 6.2999999999999972 0.0000000000000000 + 6.3599999999999994 0.0000000000000000 + 6.4199999999999946 0.0000000000000000 + 6.4799999999999969 0.0000000000000000 + 6.5399999999999991 0.0000000000000000 + 6.6000000000000014 0.0000000000000000 + 6.6599999999999966 0.0000000000000000 + 6.7199999999999989 0.0000000000000000 + 6.7800000000000011 0.0000000000000000 + 6.8399999999999963 0.0000000000000000 + 6.8999999999999986 0.0000000000000000 + 6.9600000000000009 0.0000000000000000 + 7.0199999999999960 0.0000000000000000 + 7.0799999999999983 0.0000000000000000 + 7.1400000000000006 0.0000000000000000 + 7.1999999999999957 0.0000000000000000 + 7.2599999999999980 0.0000000000000000 + 7.3200000000000003 0.0000000000000000 + 7.3799999999999955 0.0000000000000000 + 7.4399999999999977 0.0000000000000000 + 7.5000000000000000 0.0000000000000000 + 7.5599999999999952 0.0000000000000000 + 7.6199999999999974 0.0000000000000000 + 7.6799999999999997 0.0000000000000000 + 7.7399999999999949 0.0000000000000000 + 7.7999999999999972 0.0000000000000000 + 7.8599999999999994 0.0000000000000000 + 7.9199999999999946 0.0000000000000000 + 7.9799999999999969 0.0000000000000000 + 8.0399999999999991 0.0000000000000000 + 8.1000000000000014 0.0000000000000000 + 8.1599999999999966 0.0000000000000000 + 8.2199999999999989 0.0000000000000000 + 8.2800000000000011 0.0000000000000000 + 8.3399999999999963 0.0000000000000000 + 8.3999999999999986 0.0000000000000000 + 8.4600000000000009 0.0000000000000000 + 8.5199999999999960 0.0000000000000000 + 8.5799999999999983 0.0000000000000000 + 8.6400000000000006 0.0000000000000000 + 8.6999999999999957 0.0000000000000000 + 8.7599999999999980 0.0000000000000000 + 8.8200000000000003 0.0000000000000000 + 8.8799999999999955 0.0000000000000000 + 8.9399999999999977 0.0000000000000000 + 9.0000000000000000 0.0000000000000000 + 9.0599999999999952 0.0000000000000000 + 9.1199999999999974 0.0000000000000000 + 9.1799999999999997 0.0000000000000000 + 9.2399999999999949 0.0000000000000000 + 9.2999999999999972 0.0000000000000000 + 9.3599999999999994 0.0000000000000000 + 9.4199999999999946 0.0000000000000000 + 9.4799999999999969 0.0000000000000000 + 9.5399999999999991 0.0000000000000000 + 9.5999999999999943 0.0000000000000000 + 9.6599999999999966 7.2178874618681838E-040 + 9.7199999999999989 1.8513878120317818E-039 + 9.7800000000000011 3.6955160584047206E-039 + 9.8399999999999963 5.8923287824761814E-039 + 9.8999999999999986 8.0891411788759808E-039 + 9.9600000000000009 1.0285954230619103E-038 + 10.019999999999996 1.2482767282362225E-038 + 10.079999999999998 1.4212307438048636E-038 + 10.140000000000001 1.5282408375119769E-038 + 10.199999999999996 1.5094354987255393E-038 + 10.259999999999998 1.3428866777257449E-038 + 10.320000000000000 1.0217693014767987E-038 + 10.379999999999995 5.5909075531924194E-039 + 10.439999999999998 0.0000000000000000 + 10.500000000000000 -6.1846708853652144E-039 + 10.559999999999995 -1.2369341770730429E-038 + 10.619999999999997 -1.7838040245734927E-038 + 10.680000000000000 -2.1667178513966619E-038 + 10.739999999999995 -2.3110430628380462E-038 + 10.799999999999997 -1.8873487192326227E-038 + 10.859999999999999 -7.2874848002899481E-039 + 10.919999999999995 1.0605023969591254E-038 + 10.979999999999997 3.1262379010091369E-038 + 11.039999999999999 5.3807968626622268E-038 + 11.099999999999994 7.7085171732600285E-038 + 11.159999999999997 9.9288993252832994E-038 + 11.219999999999999 1.0883820274168874E-037 + 11.280000000000001 1.0106240512948496E-037 + 11.339999999999996 7.0515723448719886E-038 + 11.399999999999999 1.8917678561461085E-038 + 11.460000000000001 -3.6144462675863762E-038 + 11.519999999999996 -9.0432482350734505E-038 + 11.579999999999998 -1.4750763105735690E-037 + 11.640000000000001 -1.9711580671437036E-037 + 11.699999999999996 -1.9260527175393642E-037 + 11.759999999999998 -1.2443252533076459E-037 + 11.820000000000000 1.0273926096812650E-038 + 11.879999999999995 1.7292277791637693E-037 + 11.939999999999998 3.5953624566540384E-037 + 12.000000000000000 5.6369572058909850E-037 + 12.059999999999995 7.8048986467677783E-037 + 12.119999999999997 9.6532593173584674E-037 + 12.180000000000000 1.0568421626683448E-036 + 12.239999999999995 9.9305481923709282E-037 + 12.299999999999997 7.3835081617987058E-037 + 12.359999999999999 3.2622102304005443E-037 + 12.419999999999995 -1.8937398450884212E-037 + 12.479999999999997 -7.6430670178061675E-037 + 12.539999999999999 -1.3579684378246404E-036 + 12.599999999999994 -1.9184887374040515E-036 + 12.659999999999997 -2.4187583226599442E-036 + 12.719999999999999 -2.7913203723811185E-036 + 12.780000000000001 -2.9233531049755549E-036 + 12.839999999999996 -2.7865064578701958E-036 + 12.899999999999999 -2.3176893972334490E-036 + 12.960000000000001 -1.5452944082439875E-036 + 13.019999999999996 -5.0273518555884018E-037 + 13.079999999999998 7.4864235115980465E-037 + 13.140000000000001 2.0891576215726035E-036 + 13.199999999999996 3.3607410135127378E-036 + 13.259999999999998 4.1590419061992063E-036 + 13.320000000000000 4.3463369684849329E-036 + 13.379999999999995 3.7051169301548191E-036 + 13.439999999999998 2.0800689751704983E-036 + 13.500000000000000 -5.3293833026875938E-037 + 13.559999999999995 -4.1438581984510685E-036 + 13.619999999999997 -8.3052467816438784E-036 + 13.680000000000000 -1.2606154253009181E-035 + 13.739999999999995 -1.6440754460212209E-035 + 13.799999999999997 -1.8969701420878402E-035 + 13.859999999999999 -1.9460540593840047E-035 + 13.919999999999995 -1.7322085870939719E-035 + 13.979999999999997 -1.1979391534166102E-035 + 14.039999999999999 -3.1404287508469866E-036 + 14.099999999999994 9.0244180517724176E-036 + 14.159999999999997 2.4156701375574953E-035 + 14.219999999999999 4.1473944439722375E-035 + 14.280000000000001 5.9440727014832504E-035 + 14.339999999999996 7.6278302393851236E-035 + 14.399999999999999 8.9855775021849342E-035 + 14.460000000000001 9.7866514357371105E-035 + 14.519999999999996 9.8040613774688215E-035 + 14.579999999999998 8.8234662401611654E-035 + 14.640000000000001 6.6786461491946876E-035 + 14.699999999999996 3.3059682346716628E-035 + 14.759999999999998 -1.3380246043039127E-035 + 14.820000000000000 -7.1143824256885119E-035 + 14.879999999999995 -1.3757597439024301E-034 + 14.939999999999998 -2.0906144887472748E-034 + 15.000000000000000 -2.8019465826199256E-034 + 15.059999999999995 -3.4421053164527723E-034 + 15.119999999999997 -3.9332527590327770E-034 + 15.180000000000000 -4.1912741737308649E-034 + 15.239999999999995 -4.1318879801733263E-034 + 15.299999999999997 -3.6821735535746918E-034 + 15.359999999999999 -2.7865657411617432E-034 + 15.419999999999995 -1.4134495136920520E-034 + 15.479999999999997 4.2918194144343333E-035 + 15.539999999999999 2.6892766352982820E-034 + 15.599999999999994 5.2621513377482929E-034 + 15.659999999999997 7.9884036718652330E-034 + 15.719999999999999 1.0654501805472719E-033 + 15.780000000000001 1.2999241844088624E-033 + 15.839999999999996 1.4726172524432485E-033 + 15.899999999999999 1.5523358833978597E-033 + 15.960000000000001 1.5086223755420862E-033 + 16.019999999999996 1.3148623635166347E-033 + 16.079999999999998 9.5172288396431975E-034 + 16.140000000000001 4.1063938007870897E-034 + 16.200000000000003 -3.0282328814140845E-034 + 16.259999999999991 -1.1659216613414926E-033 + 16.319999999999993 -2.1367376726486973E-033 + 16.379999999999995 -3.1533590295046808E-033 + 16.439999999999998 -4.1347344013352749E-033 + 16.500000000000000 -4.9834452179983220E-033 + 16.560000000000002 -5.5906802719759530E-033 + 16.620000000000005 -5.8434459933274017E-033 + 16.679999999999993 -5.6337095781715748E-033 + 16.739999999999995 -4.8695546037144016E-033 + 16.799999999999997 -3.4871639713221993E-033 + 16.859999999999999 -1.4632781961537943E-033 + 16.920000000000002 1.1732086302260937E-033 + 16.980000000000004 4.3316640144036080E-033 + 17.039999999999992 7.8535076790801784E-033 + 17.099999999999994 1.1510700211864853E-032 + 17.159999999999997 1.5010150407131408E-032 + 17.219999999999999 1.8004970993050038E-032 + 17.280000000000001 2.0113181578201808E-032 + 17.340000000000003 2.0943767156292138E-032 + 17.399999999999991 2.0129467500880017E-032 + 17.459999999999994 1.7364841247358589E-032 + 17.519999999999996 1.2447424771839575E-032 + 17.579999999999998 5.3188321221954512E-033 + 17.640000000000001 -3.8977234343857310E-033 + 17.700000000000003 -1.4867716098335954E-032 + 17.759999999999991 -2.7027768749487418E-032 + 17.819999999999993 -3.9584513050203748E-032 + 17.879999999999995 -5.1533531620483074E-032 + 17.939999999999998 -6.1701125663721589E-032 + 18.000000000000000 -6.8810101264020100E-032 + 18.060000000000002 -7.1569004996941090E-032 + 18.120000000000005 -6.8781961491290411E-032 + 18.179999999999993 -5.9473870112970162E-032 + 18.239999999999995 -4.3023170376485371E-032 + 18.299999999999997 -1.9292197983070224E-032 + 18.359999999999999 1.1256941059232873E-032 + 18.420000000000002 4.7474079583084116E-032 + 18.480000000000004 8.7473979733823773E-032 + 18.539999999999992 1.2864336102726006E-031 + 18.599999999999994 1.6771263152614846E-031 + 18.659999999999997 2.0089970480026391E-031 + 18.719999999999999 2.2412839150510330E-031 + 18.780000000000001 2.3331776599567932E-031 + 18.840000000000003 2.2473226115943842E-031 + 18.899999999999991 1.9537452563883561E-031 + 18.959999999999994 1.4339582216042179E-031 + 19.019999999999996 6.8492176063758124E-032 + 19.079999999999998 -2.7751039355579152E-032 + 19.140000000000001 -1.4160623868579648E-031 + 19.200000000000003 -2.6708298294590967E-031 + 19.259999999999991 -3.9597673186078189E-031 + 19.319999999999993 -5.1811734688435316E-031 + 19.379999999999995 -6.2183581009059130E-031 + 19.439999999999998 -6.9465367487685216E-031 + 19.500000000000000 -7.2418059136382128E-031 + 19.560000000000002 -6.9918476061970853E-031 + 19.620000000000005 -6.1077955002388726E-031 + 19.679999999999993 -4.5364820707602802E-031 + 19.739999999999995 -2.2720936791718266E-031 + 19.799999999999997 6.3387123554817158E-032 + 19.859999999999999 4.0655289843914280E-031 + 19.920000000000002 7.8395966405051230E-031 + 19.980000000000004 1.1707489911160406E-030 + 20.039999999999992 1.5363370845439154E-030 + 20.099999999999994 1.8458635882972178E-030 + 20.159999999999997 2.0622884299736216E-030 + 20.219999999999999 2.1490873499898689E-030 + 20.280000000000001 2.0734358662879123E-030 + 20.340000000000003 1.8097095466272120E-030 + 20.399999999999991 1.3430675721547258E-030 + 20.459999999999994 6.7283374837565098E-031 + 20.519999999999996 -1.8464753195440132E-031 + 20.579999999999998 -1.1940254157700999E-030 + 20.640000000000001 -2.3001622261120481E-030 + 20.700000000000003 -3.4288625991520185E-030 + 20.759999999999991 -4.4893457010824138E-030 + 20.819999999999993 -5.3785995590216715E-030 + 20.879999999999995 -5.9876225877599378E-030 + 20.939999999999998 -6.2094048871050774E-030 + 21.000000000000000 -5.9483287127636718E-030 + 21.060000000000002 -5.1304854940376474E-030 + 21.120000000000005 -3.7142375752041148E-030 + 21.179999999999993 -1.7001943708319288E-030 + 21.239999999999995 8.6033578097371287E-031 + 21.299999999999997 3.8594219091832443E-030 + 21.359999999999999 7.1301066051476206E-030 + 21.420000000000002 1.0448427021103466E-029 + 21.480000000000004 1.3540573602980452E-029 + 21.539999999999992 1.6095646717740617E-029 + 21.599999999999994 1.7784077940150508E-029 + 21.659999999999997 1.8281365413454576E-029 + 21.719999999999999 1.7296262264075229E-029 + 21.780000000000001 1.4602028700955246E-029 + 21.840000000000003 1.0068823939152371E-029 + 21.899999999999991 3.6948535471415375E-030 + 21.959999999999994 -4.3665094198045293E-030 + 22.019999999999996 -1.3786654217616472E-029 + 22.079999999999998 -2.4051790631903932E-029 + 22.140000000000001 -3.4466037743744628E-029 + 22.200000000000003 -4.4170016602280337E-029 + 22.259999999999991 -5.2176682087229823E-029 + 22.319999999999993 -5.7425181425493967E-029 + 22.379999999999995 -5.8852222463300928E-029 + 22.439999999999998 -5.5478958419198969E-029 + 22.500000000000000 -4.6509812459580956E-029 + 22.560000000000002 -3.1437928154193331E-029 + 22.619999999999990 -1.0150340558284362E-029 + 22.679999999999993 1.6975514157675339E-029 + 22.739999999999995 4.8993433274771500E-029 + 22.799999999999997 8.4338224719216575E-029 + 22.859999999999999 1.2081379123977960E-028 + 22.920000000000002 1.5562868349296940E-028 + 22.980000000000004 1.8548675691649116E-028 + 23.039999999999992 2.0673789215811456E-028 + 23.099999999999994 2.1559028837369100E-028 + 23.159999999999997 2.0838133818253700E-028 + 23.219999999999999 1.8189901347629983E-028 + 23.280000000000001 1.3374021685792712E-028 + 23.340000000000003 6.2686397776610978E-029 + 23.399999999999991 -3.0928301576322838E-029 + 23.459999999999994 -1.4488677356604634E-028 + 23.519999999999996 -2.7482993202786316E-028 + 23.579999999999998 -4.1410478681876120E-028 + 23.640000000000001 -5.5375542716836186E-028 + 23.700000000000003 -6.8268914836301101E-028 + 23.759999999999991 -7.8804455266533983E-028 + 23.819999999999993 -8.5577924413042136E-028 + 23.879999999999995 -8.7148120512229099E-028 + 23.939999999999998 -8.2139320940466528E-028 + 24.000000000000000 -6.9362091686971270E-028 + 24.060000000000002 -4.7947451334886678E-028 + 24.119999999999990 -1.7487370535346435E-028 + 24.179999999999993 2.1827581898808823E-028 + 24.239999999999995 6.9084232927501103E-028 + 24.299999999999997 1.2254891918798707E-027 + 24.359999999999999 1.7960871116469063E-027 + 24.420000000000002 2.3676489888781080E-027 + 24.480000000000004 2.8969082827043807E-027 + 24.539999999999992 3.3336441644668439E-027 + 24.599999999999994 3.6228183575451090E-027 + 24.659999999999997 3.7075520589802532E-027 + 24.719999999999999 3.5329063469012838E-027 + 24.780000000000001 3.0503718881886811E-027 + 24.840000000000003 2.2228987030652538E-027 + 24.899999999999991 1.0302176456021375E-027 + 24.959999999999994 -5.2586554563298722E-028 + 25.019999999999996 -2.4165911868829400E-027 + 25.079999999999998 -4.5822216922535121E-027 + 25.140000000000001 -6.9293485040315213E-027 + 25.200000000000003 -9.3300144494042323E-027 + 25.259999999999991 -1.1623100096344091E-026 + 25.319999999999993 -1.3618384388591372E-026 + 25.379999999999995 -1.5103544377404493E-026 + 25.439999999999998 -1.5854262323871870E-026 + 25.500000000000000 -1.5647379877571593E-026 + 25.560000000000002 -1.4276849815636456E-026 + 25.619999999999990 -1.1571959199490893E-026 + 25.679999999999993 -7.4170562027423487E-027 + 25.739999999999995 -1.7717381489435203E-027 + 25.799999999999997 5.3097954718725332E-027 + 25.859999999999999 1.3661727353855880E-026 + 25.920000000000002 2.2993595474057581E-026 + 25.980000000000004 3.2882959261784888E-026 + 26.039999999999992 4.2775496004180619E-026 + 26.099999999999994 5.1994028538258871E-026 + 26.159999999999997 5.9757776163662482E-026 + 26.219999999999999 6.5212628684939983E-026 + 26.280000000000001 6.7472749336231295E-026 + 26.340000000000003 6.5673098981144980E-026 + 26.399999999999991 5.9031608320722457E-026 + 26.459999999999994 4.6918955010051635E-026 + 26.519999999999996 2.8932864415937013E-026 + 26.579999999999998 4.9730897737737854E-027 + 26.640000000000001 -2.4687806165265363E-026 + 26.700000000000003 -5.9343168728881621E-026 + 26.759999999999991 -9.7806501019435508E-026 + 26.819999999999993 -1.3838736163912107E-025 + 26.879999999999995 -1.7889469461047182E-025 + 26.939999999999998 -2.1667316097055181E-025 + 27.000000000000000 -2.4867673722405819E-025 + 27.060000000000002 -2.7158246519245674E-025 + 27.119999999999990 -2.8194520281752385E-025 + 27.179999999999993 -2.7639192089982183E-025 + 27.239999999999995 -2.5185127625171826E-025 + 27.299999999999997 -2.0581095081004602E-025 + 27.359999999999999 -1.3659255468138862E-025 + 27.420000000000002 -4.3630018765558663E-026 + 27.480000000000004 7.2264860233843895E-026 + 27.539999999999992 2.0866896453985904E-025 + 27.599999999999994 3.6136728947918376E-025 + 27.659999999999997 5.2424691448843870E-025 + 27.719999999999999 6.8928693897375912E-025 + 27.780000000000001 8.4666444351133309E-025 + 27.840000000000003 9.8499209070094753E-025 + 27.899999999999991 1.0916998881973839E-024 + 27.959999999999994 1.1535657173937206E-024 + 28.019999999999996 1.1573918397157352E-024 + 28.079999999999998 1.0908154634531646E-024 + 28.140000000000001 9.4323021389804774E-025 + 28.200000000000003 7.0678458911778444E-025 + 28.259999999999991 3.7741307355212071E-025 + 28.319999999999993 -4.4156516254956468E-026 + 28.379999999999995 -5.5148394330597280E-025 + 28.439999999999998 -1.1316578660800685E-024 + 28.500000000000000 -1.7647747522495239E-024 + 28.560000000000002 -2.4237299786463004E-024 + 28.619999999999990 -3.0743990481627589E-024 + 28.679999999999993 -3.6762673006918974E-024 + 28.739999999999995 -4.1835627878674188E-024 + 28.799999999999997 -4.5469189091825140E-024 + 28.859999999999999 -4.7155749127696825E-024 + 28.920000000000002 -4.6400821047502699E-024 + 28.980000000000004 -4.2754622888692103E-024 + 29.039999999999992 -3.5847152827568056E-024 + 29.099999999999994 -2.5425396612531163E-024 + 29.159999999999997 -1.1390922416697256E-024 + 29.219999999999999 6.1642335953888582E-025 + 29.280000000000001 2.6925817320434129E-024 + 29.340000000000003 5.0332311119286493E-024 + 29.399999999999991 7.5559314779146448E-024 + 29.459999999999994 1.0151600682572752E-023 + 29.519999999999996 1.2685621637304919E-023 + 29.579999999999998 1.5000612311976511E-023 + 29.640000000000001 1.6921018383082808E-023 + 29.700000000000003 1.8259610373215600E-023 + 29.759999999999991 1.8825863235591439E-023 + 29.819999999999993 1.8436107461975768E-023 + 29.879999999999995 1.6925195793795721E-023 + 29.939999999999998 1.4159316153723973E-023 + 30.000000000000000 1.0049447721744523E-023 + 30.060000000000002 4.5648152638845861E-024 + 30.119999999999990 -2.2544087652954231E-024 + 30.179999999999993 -1.0285999115098146E-023 + 30.239999999999995 -1.9317093837040604E-023 + 30.299999999999997 -2.9039042170501286E-023 + 30.359999999999999 -3.9046637013336771E-023 + 30.420000000000002 -4.8842540864133687E-023 + 30.480000000000004 -5.7847615303436365E-023 + 30.539999999999992 -6.5417660619668044E-023 + 30.599999999999994 -7.0866794692229379E-023 + 30.659999999999997 -7.3497337235651592E-023 + 30.719999999999999 -7.2635829144313376E-023 + 30.780000000000001 -6.7674197205269487E-023 + 30.840000000000003 -5.8114777695561062E-023 + 30.899999999999991 -4.3617448433264344E-023 + 30.959999999999994 -2.4046602966372346E-023 + 31.019999999999996 4.8453294406886396E-025 + 31.079999999999998 2.9575187585187104E-023 + 31.140000000000001 6.2506941428803705E-023 + 31.200000000000003 9.8225367848634098E-023 + 31.259999999999991 1.3533656620416567E-022 + 31.319999999999993 1.7212104969710655E-022 + 31.379999999999995 2.0656741692735333E-022 + 31.439999999999998 2.3642744653514640E-022 + 31.500000000000000 2.5929293054194842E-022 + 31.560000000000002 2.7269427093633263E-022 + 31.619999999999990 2.7421876831964963E-022 + 31.679999999999993 2.6164601892200039E-022 + 31.739999999999995 2.3309589603706578E-022 + 31.799999999999997 1.8718345132507499E-022 + 31.859999999999999 1.2317370739521341E-022 + 31.920000000000002 4.1128488919483241E-023 + 31.980000000000004 -5.7963915281546364E-023 + 32.039999999999992 -1.7208527386630238E-022 + 32.099999999999994 -2.9811981475768574E-022 + 32.159999999999997 -4.3183138617568412E-022 + 32.219999999999999 -5.6789355925618000E-022 + 32.280000000000001 -6.9997929046750518E-022 + 32.340000000000003 -8.2091387495843211E-022 + 32.399999999999991 -9.2289451108871033E-022 + 32.459999999999994 -9.9777401239182323E-022 + 32.519999999999996 -1.0374050664445162E-021 + 32.579999999999998 -1.0340365180662608E-021 + 32.640000000000001 -9.8074986130132278E-022 + 32.700000000000003 -8.7192087673841346E-022 + 32.759999999999991 -7.0368770202279979E-022 + 32.819999999999993 -4.7440352935067228E-022 + 32.879999999999995 -1.8505110040501323E-022 + 32.939999999999998 1.6040645886500780E-022 + 33.000000000000000 5.5476347696416048E-022 + 33.060000000000002 9.8742201950789133E-022 + 33.119999999999990 1.4443775063232203E-021 + 33.179999999999993 1.9083581543787358E-021 + 33.239999999999995 2.3591336361310018E-021 + 33.299999999999997 2.7740021781796178E-021 + 33.359999999999999 3.1284574727112730E-021 + 33.420000000000002 3.3970338993580948E-021 + 33.480000000000004 3.5543159315209736E-021 + 33.539999999999992 3.5760932698029081E-021 + 33.599999999999994 3.4406332892085765E-021 + 33.659999999999997 3.1300363216552242E-021 + 33.719999999999999 2.6316308237441732E-021 + 33.780000000000001 1.9393590482274132E-021 + 33.840000000000003 1.0551007796023973E-021 + 33.899999999999991 -1.0121825463241387E-023 + 33.959999999999994 -1.2351231084318312E-021 + 34.019999999999996 -2.5877707789994648E-021 + 34.079999999999998 -4.0245041566323758E-021 + 34.140000000000001 -5.4902087525526800E-021 + 34.200000000000003 -6.9184981947044886E-021 + 34.259999999999991 -8.2324407065855039E-021 + 34.319999999999993 -9.3457706800152763E-021 + 34.379999999999995 -1.0164590769566113E-020 + 34.439999999999998 -1.0589575180437505E-020 + 34.500000000000000 -1.0518651460614478E-020 + 34.560000000000002 -9.8501190907331403E-021 + 34.619999999999990 -8.4861397233809044E-021 + 34.679999999999993 -6.3365118084290974E-021 + 34.739999999999995 -3.3226022525265869E-021 + 34.799999999999997 6.1871870084214503E-022 + 34.859999999999999 5.5312928488737031E-021 + 34.920000000000002 1.1436289847981610E-020 + 34.980000000000004 1.8329403607099208E-020 + 35.039999999999992 2.6178907152974460E-020 + 35.099999999999994 3.4924793380675645E-020 + 35.159999999999997 4.4479321281670113E-020 + 35.219999999999999 5.4729088773019131E-020 + 35.280000000000001 6.5539014306182243E-020 + 35.340000000000003 7.6758282404784246E-020 + 35.399999999999991 8.8228431598085209E-020 + 35.459999999999994 9.9793675085583114E-020 + 35.519999999999996 1.1131336095601906E-019 + 35.579999999999998 1.2267659340514871E-019 + 35.640000000000001 1.3381859113605290E-019 + 35.700000000000003 1.4473869979339389E-019 + 35.759999999999991 1.5551942315811526E-019 + 35.819999999999993 1.6634604997383550E-019 + 35.879999999999995 1.7752626333224389E-019 + 35.939999999999998 1.8950874614133794E-019 + 36.000000000000000 2.0290039168225294E-019 + 36.060000000000002 2.1848084247613278E-019 + 36.119999999999990 2.3721397963027972E-019 + 36.179999999999993 2.6025507985430200E-019 + 36.239999999999995 2.8895293831307150E-019 + 36.299999999999997 3.2484652310497438E-019 + 36.359999999999999 3.6965492654590548E-019 + 36.420000000000002 4.2526107878266619E-019 + 36.479999999999990 4.9368722407185428E-019 + 36.539999999999992 5.7706383212605731E-019 + 36.599999999999994 6.7759042116992821E-019 + 36.659999999999997 7.9748862593325862E-019 + 36.719999999999999 9.3894824237015736E-019 + 36.780000000000001 1.1040654669099708E-018 + 36.840000000000003 1.2947740535694753E-018 + 36.899999999999991 1.5127706562628460E-018 + 36.959999999999994 1.7594314049965611E-018 + 37.019999999999996 2.0357235548494159E-018 + 37.079999999999998 2.3421083017060855E-018 + 37.140000000000001 2.6784370381796017E-018 + 37.200000000000003 3.0438377173652296E-018 + 37.259999999999991 3.4365902588225753E-018 + 37.319999999999993 3.8539888305031415E-018 + 37.379999999999995 4.2921844808028311E-018 + 37.439999999999998 4.7460095188558680E-018 + 37.500000000000000 5.2087683628864555E-018 + 37.560000000000002 5.6719973066331114E-018 + 37.619999999999990 6.1251738443184236E-018 + 37.679999999999993 6.5553713747112674E-018 + 37.739999999999995 6.9468366005490019E-018 + 37.799999999999997 7.2804814240552263E-018 + 37.859999999999999 7.5332601739731708E-018 + 37.920000000000002 7.6774126991913889E-018 + 37.979999999999990 7.6795427992462445E-018 + 38.039999999999992 7.4994992910386212E-018 + 38.099999999999994 7.0890191420463311E-018 + 38.159999999999997 6.3900946612805367E-018 + 38.219999999999999 5.3330031941014569E-018 + 38.280000000000001 3.8339538713798061E-018 + 38.340000000000003 1.7922875327272309E-018 + 38.399999999999991 -9.1286492586884381E-019 + 38.459999999999994 -4.4265128718631732E-018 + 38.519999999999996 -8.9224627335538473E-018 + 38.579999999999998 -1.4608749462859142E-017 + 38.640000000000001 -2.1734038236523359E-017 + 38.700000000000003 -3.0594991463208755E-017 + 38.759999999999991 -4.1544902243504938E-017 + 38.819999999999993 -5.5003719903358982E-017 + 38.879999999999995 -7.1469436855022266E-017 + 38.939999999999998 -9.1531440736422220E-017 + 39.000000000000000 -1.1588576096337550E-016 + 39.060000000000002 -1.4535235617120688E-016 + 39.119999999999990 -1.8089519592850888E-016 + 39.179999999999993 -2.2364505120575747E-016 + 39.239999999999995 -2.7492546997365958E-016 + 39.299999999999997 -3.3628209263901640E-016 + 39.359999999999999 -4.0951669832801118E-016 + 39.420000000000002 -4.9672520192146387E-016 + 39.479999999999990 -6.0034078355982858E-016 + 39.539999999999992 -7.2318369144660571E-016 + 39.599999999999994 -8.6851592187058692E-016 + 39.659999999999997 -1.0401047142899179E-015 + 39.719999999999999 -1.2422931996331619E-015 + 39.780000000000001 -1.4800811415261011E-015 + 39.840000000000003 -1.7592146765172582E-015 + 39.899999999999991 -2.0862880907266215E-015 + 39.959999999999994 -2.4688582971631078E-015 + 40.019999999999996 -2.9155734547216780E-015 + 40.079999999999998 -3.4363156285166257E-015 + 40.140000000000001 -4.0423636594366451E-015 + 40.200000000000003 -4.7465709601726540E-015 + 40.259999999999991 -5.5635685358424798E-015 + 40.319999999999993 -6.5099885153714345E-015 + 40.379999999999995 -7.6047132351256102E-015 + 40.439999999999998 -8.8691501319294443E-015 + 40.500000000000000 -1.0327541846356809E-014 + 40.560000000000002 -1.2007304953299387E-014 + 40.619999999999990 -1.3939402764089302E-014 + 40.679999999999993 -1.6158757039683200E-014 + 40.739999999999995 -1.8704704346386527E-014 + 40.799999999999997 -2.1621491930458888E-014 + 40.859999999999999 -2.4958818494736679E-014 + 40.920000000000002 -2.8772418039274463E-014 + 40.979999999999990 -3.3124712755248993E-014 + 41.039999999999992 -3.8085488917174840E-014 + 41.099999999999994 -4.3732634900131679E-014 + 41.159999999999997 -5.0152943352814802E-014 + 41.219999999999999 -5.7442952773933730E-014 + 41.280000000000001 -6.5709813647284336E-014 + 41.340000000000003 -7.5072233388249732E-014 + 41.399999999999991 -8.5661416993194719E-014 + 41.459999999999994 -9.7622077438538711E-014 + 41.519999999999996 -1.1111337333596956E-013 + 41.579999999999998 -1.2631001491207689E-013 + 41.640000000000001 -1.4340306346542398E-013 + 41.700000000000003 -1.6260100137755135E-013 + 41.759999999999991 -1.8413042841630751E-013 + 41.819999999999993 -2.0823679883504702E-013 + 41.879999999999995 -2.3518485364724418E-013 + 41.939999999999998 -2.6525890468000201E-013 + 42.000000000000000 -2.9876280449549861E-013 + 42.060000000000002 -3.3601938957034368E-013 + 42.119999999999990 -3.7736941816497106E-013 + 42.179999999999993 -4.2316989307845697E-013 + 42.239999999999995 -4.7379154813516405E-013 + 42.299999999999997 -5.2961514458966137E-013 + 42.359999999999999 -5.9102698261681664E-013 + 42.420000000000002 -6.5841224994650691E-013 + 42.479999999999990 -7.3214688002439307E-013 + 42.539999999999992 -8.1258755089477887E-013 + 42.599999999999994 -9.0005850408223401E-013 + 42.659999999999997 -9.9483524406117653E-013 + 42.719999999999999 -1.0971252867752576E-012 + 42.780000000000001 -1.2070434270727533E-012 + 42.840000000000003 -1.3245829094401174E-012 + 42.899999999999991 -1.4495797258626965E-012 + 42.959999999999994 -1.5816700187540182E-012 + 43.019999999999996 -1.7202394316444896E-012 + 43.079999999999998 -1.8643620674578148E-012 + 43.140000000000001 -2.0127290172347013E-012 + 43.200000000000003 -2.1635623124889189E-012 + 43.259999999999991 -2.3145139528623897E-012 + 43.319999999999993 -2.4625475337689825E-012 + 43.379999999999995 -2.6037984200423901E-012 + 43.439999999999998 -2.7334108148888946E-012 + 43.500000000000000 -2.8453459856493582E-012 + 43.560000000000002 -2.9321591800561147E-012 + 43.619999999999990 -2.9847404138958131E-012 + 43.679999999999993 -2.9920118802547979E-012 + 43.739999999999995 -2.9405776087121419E-012 + 43.799999999999997 -2.8143166124619417E-012 + 43.859999999999999 -2.5939114601760266E-012 + 43.920000000000002 -2.2563094854707234E-012 + 43.979999999999990 -1.7740939061805473E-012 + 44.039999999999992 -1.1147606712952022E-012 + 44.099999999999994 -2.3988829653472860E-013 + 44.159999999999997 8.9581419376833398E-013 + 44.219999999999999 2.3456113952907741E-012 + 44.280000000000001 4.1719830427144964E-012 + 44.340000000000003 6.4480843558518563E-012 + 44.399999999999991 9.2593747462169637E-012 + 44.459999999999994 1.2705520009396866E-011 + 44.519999999999996 1.6902508712716731E-011 + 44.579999999999998 2.1985133302680813E-011 + 44.640000000000001 2.8109772861308548E-011 + 44.700000000000003 3.5457552798351011E-011 + 44.759999999999991 4.4237997001914246E-011 + 44.819999999999993 5.4693096814868686E-011 + 44.879999999999995 6.7101989993028009E-011 + 44.939999999999998 8.1786191835894509E-011 + 45.000000000000000 9.9115652480801329E-011 + 45.060000000000002 1.1951545367518227E-010 + 45.119999999999990 1.4347357515603873E-010 + 45.179999999999993 1.7154934069676372E-010 + 45.239999999999995 2.0438339568038446E-010 + 45.299999999999997 2.4270859997042659E-010 + 45.359999999999999 2.8736257065801659E-010 + 45.420000000000002 3.3930128017308503E-010 + 45.479999999999990 3.9961542597735985E-010 + 45.539999999999992 4.6954747171324552E-010 + 45.599999999999994 5.5051194600796163E-010 + 45.659999999999997 6.4411741520072345E-010 + 45.719999999999999 7.5219221829375256E-010 + 45.780000000000001 8.7681152015748386E-010 + 45.840000000000003 1.0203292251283132E-009 + 45.899999999999991 1.1854135785642998E-009 + 45.959999999999994 1.3750854869524392E-009 + 46.019999999999996 1.5927643260995808E-009 + 46.079999999999998 1.8423146898559074E-009 + 46.140000000000001 2.1281030770240881E-009 + 46.200000000000003 2.4550585768363963E-009 + 46.259999999999991 2.8287413599518537E-009 + 46.319999999999993 3.2554175862920050E-009 + 46.379999999999995 3.7421465750727105E-009 + 46.439999999999998 4.2968712833397171E-009 + 46.500000000000000 4.9285254457182591E-009 + 46.560000000000002 5.6471489732340008E-009 + 46.619999999999990 6.4640183411618168E-009 + 46.679999999999993 7.3917855312810636E-009 + 46.739999999999995 8.4446430604538226E-009 + 46.799999999999997 9.6384946530198856E-009 + 46.859999999999999 1.0991150312873679E-008 + 46.920000000000002 1.2522545640852928E-008 + 46.979999999999990 1.4254972799398397E-008 + 47.039999999999992 1.6213348399675897E-008 + 47.099999999999994 1.8425504449082780E-008 + 47.159999999999997 2.0922505472497443E-008 + 47.219999999999999 2.3738997742361225E-008 + 47.280000000000001 2.6913611851150964E-008 + 47.340000000000003 3.0489372641580105E-008 + 47.399999999999991 3.4514193639260390E-008 + 47.459999999999994 3.9041358771744894E-008 + 47.519999999999996 4.4130132153964326E-008 + 47.579999999999998 4.9846362503198105E-008 + 47.640000000000001 5.6263168848021209E-008 + 47.700000000000003 6.3461701657265793E-008 + 47.759999999999991 7.1531936968598548E-008 + 47.819999999999993 8.0573637133487837E-008 + 47.879999999999995 9.0697280641420363E-008 + 47.939999999999998 1.0202515894978812E-007 + 48.000000000000000 1.1469257022646348E-007 + 48.060000000000002 1.2884909436553764E-007 + 48.119999999999990 1.4466002630226470E-007 + 48.179999999999993 1.6230786367941106E-007 + 48.239999999999995 1.8199400512698091E-007 + 48.299999999999997 2.0394054444589995E-007 + 48.359999999999999 2.2839231390919108E-007 + 48.420000000000002 2.5561899861102080E-007 + 48.479999999999990 2.8591744420142793E-007 + 48.539999999999992 3.1961423883502076E-007 + 48.599999999999994 3.5706841392325863E-007 + 48.659999999999997 3.9867451981646664E-007 + 48.719999999999999 4.4486580975290041E-007 + 48.780000000000001 4.9611769626335030E-007 + 48.840000000000003 5.5295174467764320E-007 + 48.899999999999991 6.1593946560175805E-007 + 48.959999999999994 6.8570700021704683E-007 + 49.019999999999996 7.6293961225467247E-007 + 49.079999999999998 8.4838734533121163E-007 + 49.140000000000001 9.4286997489618525E-007 + 49.200000000000003 1.0472834177577512E-006 + 49.259999999999991 1.1626061971304884E-006 + 49.319999999999993 1.2899057936554266E-006 + 49.379999999999995 1.4303471035825405E-006 + 49.439999999999998 1.5851989046376938E-006 + 49.500000000000000 1.7558440518336380E-006 + 49.560000000000002 1.9437877634023107E-006 + 49.619999999999990 2.1506672329080915E-006 + 49.679999999999993 2.3782630800038248E-006 + 49.739999999999995 2.6285094064480821E-006 + 49.799999999999997 2.9035066986546330E-006 + 49.859999999999999 3.2055347268563829E-006 + 49.920000000000002 3.5370656945620913E-006 + 49.979999999999990 3.9007781529753029E-006 + 50.039999999999992 4.2995738105225329E-006 + 50.099999999999994 4.7365934068569726E-006 + 50.159999999999997 5.2152339691490502E-006 + 50.219999999999999 5.7391686967104548E-006 + 50.280000000000001 6.3123646206538162E-006 + 50.340000000000003 6.9391047662192713E-006 + 50.399999999999991 7.6240092975330712E-006 + 50.459999999999994 8.3720601235439478E-006 + 50.519999999999996 9.1886256824667772E-006 + 50.579999999999998 1.0079486369331113E-005 + 50.640000000000001 1.1050861908881793E-005 + 50.700000000000003 1.2109439886111996E-005 + 50.759999999999991 1.3262405053456978E-005 + 50.819999999999993 1.4517473956019019E-005 + 50.879999999999995 1.5882927452651995E-005 + 50.939999999999998 1.7367647810319278E-005 + 51.000000000000000 1.8981153358200271E-005 + 51.060000000000002 2.0733634049646065E-005 + 51.119999999999990 2.2635994916941583E-005 + 51.179999999999993 2.4699906046392222E-005 + 51.239999999999995 2.6937829069319544E-005 + 51.299999999999997 2.9363080497366554E-005 + 51.359999999999999 3.1989864679152587E-005 + 51.420000000000002 3.4833334858845625E-005 + 51.479999999999990 3.7909632641804475E-005 + 51.539999999999992 4.1235954106037572E-005 + 51.599999999999994 4.4830597605788798E-005 + 51.659999999999997 4.8713012805380982E-005 + 51.719999999999999 5.2903875379233610E-005 + 51.780000000000001 5.7425133623459560E-005 + 51.840000000000003 6.2300075860408528E-005 + 51.899999999999991 6.7553389992683677E-005 + 51.959999999999994 7.3211230281230866E-005 + 52.019999999999996 7.9301304038489011E-005 + 52.079999999999998 8.5852879360102168E-005 + 52.140000000000001 9.2896918919730049E-005 + 52.200000000000003 1.0046613247610186E-004 + 52.259999999999991 1.0859501684363834E-004 + 52.319999999999993 1.1731994578113248E-004 + 52.379999999999995 1.2667927875722351E-004 + 52.439999999999998 1.3671335451625026E-004 + 52.500000000000000 1.4746464107687413E-004 + 52.560000000000002 1.5897775870161722E-004 + 52.619999999999990 1.7129955358620682E-004 + 52.679999999999993 1.8447920306491298E-004 + 52.739999999999995 1.9856832120994985E-004 + 52.799999999999997 2.1362084038635716E-004 + 52.859999999999999 2.2969333422665671E-004 + 52.920000000000002 2.4684491244332388E-004 + 52.979999999999990 2.6513731954479609E-004 + 53.039999999999992 2.8463501425201346E-004 + 53.099999999999994 3.0540526280822800E-004 + 53.159999999999997 3.2751804976823880E-004 + 53.219999999999999 3.5104635243512946E-004 + 53.280000000000001 3.7606595431421302E-004 + 53.339999999999989 4.0265569410692312E-004 + 53.399999999999991 4.3089734602746110E-004 + 53.459999999999994 4.6087566232822717E-004 + 53.519999999999996 4.9267851785792655E-004 + 53.579999999999998 5.2639673960102338E-004 + 53.640000000000001 5.6212433217006316E-004 + 53.700000000000003 5.9995832366548953E-004 + 53.759999999999991 6.3999874175887407E-004 + 53.819999999999993 6.8234872124414388E-004 + 53.879999999999995 7.2711442307829338E-004 + 53.939999999999998 7.7440479002045153E-004 + 54.000000000000000 8.2433197295677914E-004 + 54.060000000000002 8.7701074407248419E-004 + 54.119999999999990 9.3255871278579122E-004 + 54.179999999999993 9.9109618990146837E-004 + 54.239999999999995 1.0527461700905237E-003 + 54.299999999999997 1.1176340296624335E-003 + 54.359999999999999 1.1858874160664485E-003 + 54.420000000000002 1.2576363133311040E-003 + 54.479999999999990 1.3330126621357743E-003 + 54.539999999999992 1.4121501705914026E-003 + 54.599999999999994 1.4951844697543631E-003 + 54.659999999999997 1.5822523732891150E-003 + 54.719999999999999 1.6734920034940325E-003 + 54.780000000000001 1.7690424719283009E-003 + 54.839999999999989 1.8690435741626162E-003 + 54.899999999999991 1.9736355849578648E-003 + 54.959999999999994 2.0829588641097458E-003 + 55.019999999999996 2.1971536758002117E-003 + 55.079999999999998 2.3163596365580129E-003 + 55.140000000000001 2.4407156048452030E-003 + 55.200000000000003 2.5703590337122317E-003 + 55.259999999999991 2.7054256482133060E-003 + 55.319999999999993 2.8460494815609715E-003 + 55.379999999999995 2.9923615505300402E-003 + 55.439999999999998 3.1444908211684577E-003 + 55.500000000000000 3.3025616302338715E-003 + 55.560000000000002 3.4666955102526102E-003 + 55.619999999999990 3.6370086297581872E-003 + 55.679999999999993 3.8136132131151011E-003 + 55.739999999999995 3.9966155099866235E-003 + 55.799999999999997 4.1861163430192937E-003 + 55.859999999999999 4.3822095735646929E-003 + 55.920000000000002 4.5849825486488976E-003 + 55.979999999999990 4.7945142524778630E-003 + 56.039999999999992 5.0108760230016614E-003 + 56.099999999999994 5.2341308868758037E-003 + 56.159999999999997 5.4643320417418284E-003 + 56.219999999999999 5.7015226790795718E-003 + 56.280000000000001 5.9457353924287810E-003 + 56.339999999999989 6.1969929352475991E-003 + 56.399999999999991 6.4553049295893077E-003 + 56.459999999999994 6.7206702440966654E-003 + 56.519999999999996 6.9930732338252003E-003 + 56.579999999999998 7.2724868551183632E-003 + 56.640000000000001 7.5588689656214776E-003 + 56.700000000000003 7.8521632481151852E-003 + 56.759999999999991 8.1522987014532224E-003 + 56.819999999999993 8.4591888002624998E-003 + 56.879999999999995 8.7727310229030967E-003 + 56.939999999999998 9.0928087268857261E-003 + 57.000000000000000 9.4192853246213570E-003 + 57.060000000000002 9.7520084527709366E-003 + 57.119999999999990 1.0090808800635193E-002 + 57.179999999999993 1.0435498797013847E-002 + 57.239999999999995 1.0785873019966146E-002 + 57.299999999999997 1.1141708459649801E-002 + 57.359999999999999 1.1502762962713705E-002 + 57.420000000000002 1.1868775640377431E-002 + 57.479999999999990 1.2239466741193823E-002 + 57.539999999999992 1.2614538282710343E-002 + 57.599999999999994 1.2993671969503432E-002 + 57.659999999999997 1.3376535237962030E-002 + 57.719999999999999 1.3762770439113815E-002 + 57.780000000000001 1.4152006164592463E-002 + 57.839999999999989 1.4543851841612344E-002 + 57.899999999999991 1.4937897047031468E-002 + 57.959999999999994 1.5333714497220175E-002 + 58.019999999999996 1.5730860908267478E-002 + 58.079999999999998 1.6128874318992143E-002 + 58.140000000000001 1.6527277637677123E-002 + 58.200000000000003 1.6925577720175534E-002 + 58.259999999999991 1.7323267397891549E-002 + 58.319999999999993 1.7719822619941435E-002 + 58.379999999999995 1.8114706509233698E-002 + 58.439999999999998 1.8507370583486431E-002 + 58.500000000000000 1.8897254232385734E-002 + 58.560000000000002 1.9283783625603269E-002 + 58.619999999999990 1.9666377174779839E-002 + 58.679999999999993 2.0044442951551944E-002 + 58.739999999999995 2.0417383409509906E-002 + 58.799999999999997 2.0784589173971135E-002 + 58.859999999999999 2.1145451759271992E-002 + 58.920000000000002 2.1499353011610524E-002 + 58.979999999999990 2.1845673347895379E-002 + 59.039999999999992 2.2183793990916075E-002 + 59.099999999999994 2.2513093246728025E-002 + 59.159999999999997 2.2832951371238960E-002 + 59.219999999999999 2.3142752604603793E-002 + 59.280000000000001 2.3441882124673720E-002 + 59.339999999999989 2.3729732398255200E-002 + 59.399999999999991 2.4005704398886822E-002 + 59.459999999999994 2.4269206096783028E-002 + 59.519999999999996 2.4519654273004333E-002 + 59.579999999999998 2.4756478211985775E-002 + 59.640000000000001 2.4979121861091198E-002 + 59.700000000000003 2.5187040590830465E-002 + 59.759999999999991 2.5379710682640996E-002 + 59.819999999999993 2.5556621825927061E-002 + 59.879999999999995 2.5717286585145487E-002 + 59.939999999999998 2.5861230831417746E-002 + 60.000000000000000 2.5988011491846326E-002 + 60.060000000000002 2.6097202629364082E-002 + 60.119999999999990 2.6188404814415270E-002 + 60.179999999999993 2.6261244216813470E-002 + 60.239999999999995 2.6315375162766424E-002 + 60.299999999999997 2.6350478965377028E-002 + 60.359999999999999 2.6366266674632457E-002 + 60.420000000000002 2.6362478444202565E-002 + 60.479999999999990 2.6338888727417891E-002 + 60.539999999999992 2.6295302699916034E-002 + 60.599999999999994 2.6231555742291086E-002 + 60.659999999999997 2.6147522428837094E-002 + 60.719999999999999 2.6043106977491206E-002 + 60.780000000000001 2.5918252143746070E-002 + 60.839999999999989 2.5772933585519717E-002 + 60.899999999999991 2.5607162216297490E-002 + 60.959999999999994 2.5420987952879056E-002 + 61.019999999999996 2.5214494851497609E-002 + 61.079999999999998 2.4987804067829571E-002 + 61.140000000000001 2.4741071366478639E-002 + 61.200000000000003 2.4474489580038117E-002 + 61.259999999999991 2.4188286519734061E-002 + 61.319999999999993 2.3882729168292115E-002 + 61.379999999999995 2.3558116558941265E-002 + 61.439999999999998 2.3214782420069531E-002 + 61.500000000000000 2.2853094116659721E-002 + 61.560000000000002 2.2473452596785425E-002 + 61.619999999999990 2.2076293725505170E-002 + 61.679999999999993 2.1662082376427756E-002 + 61.739999999999995 2.1231313129688345E-002 + 61.799999999999997 2.0784512546400440E-002 + 61.859999999999999 2.0322232520125924E-002 + 61.920000000000002 1.9845053197229498E-002 + 61.979999999999990 1.9353582202583978E-002 + 62.039999999999992 1.8848447997040569E-002 + 62.099999999999994 1.8330304772767963E-002 + 62.159999999999997 1.7799827377739573E-002 + 62.219999999999999 1.7257710728383908E-002 + 62.280000000000001 1.6704666955140061E-002 + 62.339999999999989 1.6141423819327039E-002 + 62.399999999999991 1.5568726175762189E-002 + 62.459999999999994 1.4987330980424389E-002 + 62.519999999999996 1.4398006265032792E-002 + 62.579999999999998 1.3801527336763521E-002 + 62.640000000000001 1.3198681242590417E-002 + 62.700000000000003 1.2590258841013734E-002 + 62.759999999999991 1.1977053710029320E-002 + 62.819999999999993 1.1359863061093418E-002 + 62.879999999999995 1.0739485196489429E-002 + 62.939999999999998 1.0116715907763777E-002 + 63.000000000000000 9.4923473828604221E-003 + 63.060000000000002 8.8671688537760064E-003 + 63.119999999999990 8.2419610942126020E-003 + 63.179999999999993 7.6174962869184140E-003 + 63.239999999999995 6.9945375983665103E-003 + 63.299999999999997 6.3738366035065693E-003 + 63.359999999999999 5.7561317471496194E-003 + 63.420000000000002 5.1421450271314359E-003 + 63.479999999999990 4.5325845136272979E-003 + 63.539999999999992 3.9281404549273442E-003 + 63.599999999999994 3.3294835635869651E-003 + 63.659999999999997 2.7372648976840665E-003 + 63.719999999999999 2.1521143530927461E-003 + 63.780000000000001 1.5746393052665361E-003 + 63.839999999999989 1.0054244306562615E-003 + 63.899999999999991 4.4502969534068520E-004 + 63.959999999999994 -1.0600951411291544E-004 + 64.019999999999996 -6.4718393835167410E-004 + 64.079999999999998 -1.1780107685233306E-003 + 64.140000000000001 -1.6980344406639781E-003 + 64.200000000000003 -2.2068267847925537E-003 + 64.259999999999991 -2.7039869884283494E-003 + 64.319999999999993 -3.1891434449669051E-003 + 64.379999999999995 -3.6619527055585899E-003 + 64.439999999999998 -4.1221006772566788E-003 + 64.500000000000000 -4.5693006163836803E-003 + 64.560000000000002 -5.0032962854058699E-003 + 64.619999999999990 -5.4238601840400306E-003 + 64.679999999999993 -5.8307917336378988E-003 + 64.739999999999995 -6.2239194831343854E-003 + 64.799999999999997 -6.6031013642036240E-003 + 64.859999999999999 -6.9682206884775204E-003 + 64.920000000000002 -7.3191904449257921E-003 + 64.979999999999990 -7.6559494223970414E-003 + 65.039999999999992 -7.9784609025304598E-003 + 65.099999999999994 -8.2867166212237352E-003 + 65.159999999999997 -8.5807310663537500E-003 + 65.219999999999999 -8.8605437512534035E-003 + 65.280000000000001 -9.1262174470600459E-003 + 65.339999999999989 -9.3778378844135580E-003 + 65.399999999999991 -9.6155122211429040E-003 + 65.459999999999994 -9.8393684183288050E-003 + 65.519999999999996 -1.0049553449976769E-002 + 65.579999999999998 -1.0246235680852455E-002 + 65.640000000000001 -1.0429599178813202E-002 + 65.700000000000003 -1.0599847054991089E-002 + 65.759999999999991 -1.0757196231198442E-002 + 65.819999999999993 -1.0901880669823351E-002 + 65.879999999999995 -1.1034146591037830E-002 + 65.939999999999998 -1.1154254190646209E-002 + 66.000000000000000 -1.1262475413324561E-002 + 66.060000000000002 -1.1359093882866100E-002 + 66.119999999999990 -1.1444400666981056E-002 + 66.179999999999993 -1.1518699508442323E-002 + 66.239999999999995 -1.1582298808282470E-002 + 66.299999999999997 -1.1635514749075501E-002 + 66.359999999999999 -1.1678670420351986E-002 + 66.420000000000002 -1.1712093159095336E-002 + 66.479999999999990 -1.1736113620719895E-002 + 66.539999999999992 -1.1751067985402992E-002 + 66.599999999999994 -1.1757292854523781E-002 + 66.659999999999997 -1.1755127433560294E-002 + 66.719999999999999 -1.1744910529797826E-002 + 66.780000000000001 -1.1726981570540708E-002 + 66.839999999999989 -1.1701679371168169E-002 + 66.899999999999991 -1.1669340250030517E-002 + 66.959999999999994 -1.1630298934708209E-002 + 67.019999999999996 -1.1584887241004546E-002 + 67.079999999999998 -1.1533433288557287E-002 + 67.140000000000001 -1.1476261624683660E-002 + 67.199999999999989 -1.1413692071006228E-002 + 67.259999999999991 -1.1346038266350075E-002 + 67.319999999999993 -1.1273610209378717E-002 + 67.379999999999995 -1.1196709274180089E-002 + 67.439999999999998 -1.1115632416779205E-002 + 67.500000000000000 -1.1030670102616396E-002 + 67.560000000000002 -1.0942104009529106E-002 + 67.619999999999990 -1.0850209918306727E-002 + 67.679999999999993 -1.0755255964092054E-002 + 67.739999999999995 -1.0657502388395352E-002 + 67.799999999999997 -1.0557200929116091E-002 + 67.859999999999999 -1.0454594824546267E-002 + 67.920000000000002 -1.0349920825216278E-002 + 67.979999999999990 -1.0243405951334817E-002 + 68.039999999999992 -1.0135269670523073E-002 + 68.099999999999994 -1.0025721775543010E-002 + 68.159999999999997 -9.9149640636613297E-003 + 68.219999999999999 -9.8031908504921644E-003 + 68.280000000000001 -9.6905878821606922E-003 + 68.339999999999989 -9.5773305392841627E-003 + 68.399999999999991 -9.4635879586365892E-003 + 68.459999999999994 -9.3495206684076522E-003 + 68.519999999999996 -9.2352797998610583E-003 + 68.579999999999998 -9.1210106004428471E-003 + 68.640000000000001 -9.0068493287195316E-003 + 68.699999999999989 -8.8929241227927967E-003 + 68.759999999999991 -8.7793579482210327E-003 + 68.819999999999993 -8.6662635241506834E-003 + 68.879999999999995 -8.5537470261428574E-003 + 68.939999999999998 -8.4419083906562345E-003 + 69.000000000000000 -8.3308412338457868E-003 + 69.060000000000002 -8.2206322549443194E-003 + 69.119999999999990 -8.1113618367831264E-003 + 69.179999999999993 -8.0031033261108771E-003 + 69.239999999999995 -7.8959244230323022E-003 + 69.299999999999997 -7.7898877862498158E-003 + 69.359999999999999 -7.6850500665151646E-003 + 69.420000000000002 -7.5814630164303554E-003 + 69.479999999999990 -7.4791732186094747E-003 + 69.539999999999992 -7.3782219938096621E-003 + 69.599999999999994 -7.2786474466284782E-003 + 69.659999999999997 -7.1804815637608399E-003 + 69.719999999999999 -7.0837524555167671E-003 + 69.780000000000001 -6.9884852397307700E-003 + 69.839999999999989 -6.8947009964321453E-003 + 69.899999999999991 -6.8024168159000814E-003 + 69.959999999999994 -6.7116477098504695E-003 + 70.019999999999996 -6.6224038169941414E-003 + 70.079999999999998 -6.5346933224468924E-003 + 70.140000000000001 -6.4485212193239128E-003 + 70.199999999999989 -6.3638908544469477E-003 + 70.259999999999991 -6.2808016885120633E-003 + 70.319999999999993 -6.1992518603122132E-003 + 70.379999999999995 -6.1192367617926256E-003 + 70.439999999999998 -6.0407505546727280E-003 + 70.500000000000000 -5.9637850157386110E-003 + 70.560000000000002 -5.8883302621141539E-003 + 70.619999999999990 -5.8143747190102044E-003 + 70.679999999999993 -5.7419059617763689E-003 + 70.739999999999995 -5.6709100603465224E-003 + 70.799999999999997 -5.6013715351484854E-003 + 70.859999999999999 -5.5332745518384113E-003 + 70.920000000000002 -5.4666020589867565E-003 + 70.979999999999990 -5.4013356612180692E-003 + 71.039999999999992 -5.3374575044637818E-003 + 71.099999999999994 -5.2749479404160093E-003 + 71.159999999999997 -5.2137869423665648E-003 + 71.219999999999999 -5.1539550353016383E-003 + 71.280000000000001 -5.0954309474081048E-003 + 71.339999999999989 -5.0381946230778395E-003 + 71.399999999999991 -4.9822238025331710E-003 + 71.459999999999994 -4.9274978388572852E-003 + 71.519999999999996 -4.8739953628769896E-003 + 71.579999999999998 -4.8216945296879997E-003 + 71.640000000000001 -4.7705734860581791E-003 + 71.699999999999989 -4.7206109019656290E-003 + 71.759999999999991 -4.6717850420517791E-003 + 71.819999999999993 -4.6240747874909064E-003 + 71.879999999999995 -4.5774579889696848E-003 + 71.939999999999998 -4.5319141427943672E-003 + 72.000000000000000 -4.4874216809375582E-003 + 72.060000000000002 -4.4439606798974728E-003 + 72.119999999999990 -4.4015095399142848E-003 + 72.179999999999993 -4.3600489066204385E-003 + 72.239999999999995 -4.3195586346339463E-003 + 72.299999999999997 -4.2800190980959770E-003 + 72.359999999999999 -4.2414110506574362E-003 + 72.420000000000002 -4.2037158684845597E-003 + 72.479999999999990 -4.1669147788914339E-003 + 72.539999999999992 -4.1309897141534827E-003 + 72.599999999999994 -4.0959232973204890E-003 + 72.659999999999997 -4.0616974805674924E-003 + 72.719999999999999 -4.0282955384474996E-003 + 72.780000000000001 -3.9957011405941057E-003 + 72.839999999999989 -3.9638975336303639E-003 + 72.899999999999991 -3.9328695374985182E-003 + 72.959999999999994 -3.9026012106096004E-003 + 73.019999999999996 -3.8730776435839890E-003 + 73.079999999999998 -3.8442837040873162E-003 + 73.140000000000001 -3.8162056690589441E-003 + 73.199999999999989 -3.7888290913355191E-003 + 73.259999999999991 -3.7621403910299517E-003 + 73.319999999999993 -3.7361263372734039E-003 + 73.379999999999995 -3.7107737563132842E-003 + 73.439999999999998 -3.6860698195497563E-003 + 73.500000000000000 -3.6620021238436269E-003 + 73.560000000000002 -3.6385583580283622E-003 + 73.619999999999990 -3.6157265334458063E-003 + 73.679999999999993 -3.5934950034856696E-003 + 73.739999999999995 -3.5718520140158288E-003 + 73.799999999999997 -3.5507859312368705E-003 + 73.859999999999999 -3.5302860918099187E-003 + 73.920000000000002 -3.5103412268390915E-003 + 73.979999999999990 -3.4909403931849279E-003 + 74.039999999999992 -3.4720728025881315E-003 + 74.099999999999994 -3.4537281036401543E-003 + 74.159999999999997 -3.4358956597360327E-003 + 74.219999999999999 -3.4185653094631072E-003 + 74.280000000000001 -3.4017268597649288E-003 + 74.339999999999989 -3.3853698307441766E-003 + 74.399999999999991 -3.3694841955756363E-003 + 74.459999999999994 -3.3540597482098478E-003 + 74.519999999999996 -3.3390866114574092E-003 + 74.579999999999998 -3.3245544050274412E-003 + 74.640000000000001 -3.3104529825363107E-003 + 74.699999999999989 -3.2967725417965815E-003 + 74.759999999999991 -3.2835022539050894E-003 + 74.819999999999993 -3.2706320562537351E-003 + 74.879999999999995 -3.2581514985367079E-003 + 74.939999999999998 -3.2460501022682775E-003 + 75.000000000000000 -3.2343172890405285E-003 + 75.060000000000002 -3.2229424015159467E-003 + 75.119999999999990 -3.2119148422158268E-003 + 75.179999999999993 -3.2012237630473371E-003 + 75.239999999999995 -3.1908581210602842E-003 + 75.299999999999997 -3.1808071302583890E-003 + 75.359999999999999 -3.1710601748277866E-003 + 75.420000000000002 -3.1616059450103916E-003 + 75.479999999999990 -3.1524334367066214E-003 + 75.539999999999992 -3.1435316165599192E-003 + 75.599999999999994 -3.1348892563449419E-003 + 75.659999999999997 -3.1264949166025522E-003 + 75.719999999999999 -3.1183376218786585E-003 + 75.780000000000001 -3.1104056764116972E-003 + 75.839999999999989 -3.1026876910067746E-003 + 75.899999999999991 -3.0951723678924615E-003 + 75.959999999999994 -3.0878480871509529E-003 + 76.019999999999996 -3.0807031244211172E-003 + 76.079999999999998 -3.0737263759047563E-003 + 76.140000000000001 -3.0669057995840738E-003 + 76.199999999999989 -3.0602301902996291E-003 + 76.259999999999991 -3.0536879820515141E-003 + 76.319999999999993 -3.0472677991108042E-003 + 76.379999999999995 -3.0409580663246080E-003 + 76.439999999999998 -3.0347477644667642E-003 + 76.500000000000000 -3.0286257645538084E-003 + 76.560000000000002 -3.0225807958590284E-003 + 76.619999999999990 -3.0166022563154343E-003 + 76.679999999999993 -3.0106793093978498E-003 + 76.739999999999995 -3.0048016423944888E-003 + 76.799999999999997 -2.9989583354325107E-003 + 76.859999999999999 -2.9931396738142875E-003 + 76.920000000000002 -2.9873355495627302E-003 + 76.979999999999990 -2.9815359893453262E-003 + 77.039999999999992 -2.9757313103322622E-003 + 77.099999999999994 -2.9699122523075545E-003 + 77.159999999999997 -2.9640695097982689E-003 + 77.219999999999999 -2.9581940700008766E-003 + 77.280000000000001 -2.9522774438268482E-003 + 77.339999999999989 -2.9463111652084503E-003 + 77.399999999999991 -2.9402869097609825E-003 + 77.459999999999994 -2.9341967613502320E-003 + 77.519999999999996 -2.9280335062825680E-003 + 77.579999999999998 -2.9217897008206443E-003 + 77.640000000000001 -2.9154584075483745E-003 + 77.699999999999989 -2.9090331139727203E-003 + 77.759999999999991 -2.9025076442984379E-003 + 77.819999999999993 -2.8958758101955005E-003 + 77.879999999999995 -2.8891321098979995E-003 + 77.939999999999998 -2.8822712159704139E-003 + 78.000000000000000 -2.8752879682515768E-003 + 78.060000000000002 -2.8681776616862418E-003 + 78.119999999999990 -2.8609356594880815E-003 + 78.179999999999993 -2.8535580120250762E-003 + 78.239999999999995 -2.8460404042470336E-003 + 78.299999999999997 -2.8383795271738508E-003 + 78.359999999999999 -2.8305719146479742E-003 + 78.420000000000002 -2.8226141192884435E-003 + 78.479999999999990 -2.8145035018426003E-003 + 78.539999999999992 -2.8062371340223892E-003 + 78.599999999999994 -2.7978128405108755E-003 + 78.659999999999997 -2.7892281526325246E-003 + 78.719999999999999 -2.7804812070534608E-003 + 78.780000000000001 -2.7715703305301754E-003 + 78.839999999999989 -2.7624937911452626E-003 + 78.899999999999991 -2.7532501605929552E-003 + 78.959999999999994 -2.7438383417475115E-003 + 79.019999999999996 -2.7342569538296568E-003 + 79.079999999999998 -2.7245049109385993E-003 + 79.140000000000001 -2.7145814625114907E-003 + 79.199999999999989 -2.7044857496073636E-003 + 79.259999999999991 -2.6942170868897732E-003 + 79.319999999999993 -2.6837745966415546E-003 + 79.379999999999995 -2.6731577311475325E-003 + 79.439999999999998 -2.6623659254720817E-003 + 79.500000000000000 -2.6513982340032193E-003 + 79.560000000000002 -2.6402541466442817E-003 + 79.619999999999990 -2.6289330856237038E-003 + 79.679999999999993 -2.6174346345690697E-003 + 79.739999999999995 -2.6057578226386952E-003 + 79.799999999999997 -2.5939018700165957E-003 + 79.859999999999999 -2.5818660994885402E-003 + 79.920000000000002 -2.5696496934764263E-003 + 79.979999999999990 -2.5572518131398467E-003 + 80.039999999999992 -2.5446711132606236E-003 + 80.099999999999994 -2.5319068385439639E-003 + 80.159999999999997 -2.5189573817086782E-003 + 80.219999999999999 -2.5058217164515228E-003 + 80.280000000000001 -2.4924980118163965E-003 + 80.340000000000003 -2.4789847327153494E-003 + 80.400000000000006 -2.4652800187587886E-003 + 80.460000000000008 -2.4513820278948945E-003 + 80.519999999999982 -2.4372885257263857E-003 + 80.579999999999984 -2.4229974340665718E-003 + 80.639999999999986 -2.4085064524906655E-003 + 80.699999999999989 -2.3938132476194109E-003 + 80.759999999999991 -2.3789152895685554E-003 + 80.819999999999993 -2.3638098678868294E-003 + 80.879999999999995 -2.3484943069738851E-003 + 80.939999999999998 -2.3329660955955299E-003 + 81.000000000000000 -2.3172222492234672E-003 + 81.060000000000002 -2.3012599564431672E-003 + 81.120000000000005 -2.2850760912018421E-003 + 81.180000000000007 -2.2686675150884344E-003 + 81.240000000000009 -2.2520312050598288E-003 + 81.299999999999983 -2.2351642026379195E-003 + 81.359999999999985 -2.2180632011382798E-003 + 81.419999999999987 -2.2007249723208565E-003 + 81.479999999999990 -2.1831466152365509E-003 + 81.539999999999992 -2.1653246760901610E-003 + 81.599999999999994 -2.1472562642323801E-003 + 81.659999999999997 -2.1289384988942895E-003 + 81.719999999999999 -2.1103685263302746E-003 + 81.780000000000001 -2.0915438229288301E-003 + 81.840000000000003 -2.0724619824128172E-003 + 81.900000000000006 -2.0531205913936136E-003 + 81.960000000000008 -2.0335179059612651E-003 + 82.019999999999982 -2.0136522225459776E-003 + 82.079999999999984 -1.9935221734145082E-003 + 82.139999999999986 -1.9731268454390143E-003 + 82.199999999999989 -1.9524656171590877E-003 + 82.259999999999991 -1.9315380753193096E-003 + 82.319999999999993 -1.9103441896729883E-003 + 82.379999999999995 -1.8888847445003853E-003 + 82.439999999999998 -1.8671605124049950E-003 + 82.500000000000000 -1.8451727820045266E-003 + 82.560000000000002 -1.8229234118564456E-003 + 82.620000000000005 -1.8004145630102228E-003 + 82.680000000000007 -1.7776491189291648E-003 + 82.740000000000009 -1.7546301865347209E-003 + 82.799999999999983 -1.7313615838926212E-003 + 82.859999999999985 -1.7078476153523875E-003 + 82.919999999999987 -1.6840932273481861E-003 + 82.979999999999990 -1.6601040723419154E-003 + 83.039999999999992 -1.6358861147752709E-003 + 83.099999999999994 -1.6114461330373605E-003 + 83.159999999999997 -1.5867915136342607E-003 + 83.219999999999999 -1.5619304347577136E-003 + 83.280000000000001 -1.5368715344183498E-003 + 83.340000000000003 -1.5116241065910260E-003 + 83.400000000000006 -1.4861982153973963E-003 + 83.460000000000008 -1.4606044643430179E-003 + 83.519999999999982 -1.4348540588935345E-003 + 83.579999999999984 -1.4089589553377686E-003 + 83.639999999999986 -1.3829316218683485E-003 + 83.699999999999989 -1.3567850988176616E-003 + 83.759999999999991 -1.3305331630160989E-003 + 83.819999999999993 -1.3041900464111997E-003 + 83.879999999999995 -1.2777706988265881E-003 + 83.939999999999998 -1.2512904047067106E-003 + 84.000000000000000 -1.2247651423576986E-003 + 84.060000000000002 -1.1982115955305698E-003 + 84.120000000000005 -1.1716466139587377E-003 + 84.180000000000007 -1.1450878221458123E-003 + 84.240000000000009 -1.1185532494918846E-003 + 84.299999999999983 -1.0920614077665411E-003 + 84.359999999999985 -1.0656312973722942E-003 + 84.419999999999987 -1.0392821523657141E-003 + 84.479999999999990 -1.0130336392288376E-003 + 84.539999999999992 -9.8690581903672055E-004 + 84.599999999999994 -9.6091912340283436E-004 + 84.659999999999997 -9.3509409104953339E-004 + 84.719999999999999 -9.0945162561968836E-004 + 84.780000000000001 -8.8401285813138604E-004 + 84.840000000000003 -8.5879895245714248E-004 + 84.900000000000006 -8.3383125498811086E-004 + 84.960000000000008 -8.0913126181212790E-004 + 85.019999999999982 -7.8472047524677209E-004 + 85.079999999999984 -7.6062056732576931E-004 + 85.139999999999986 -7.3685308346722888E-004 + 85.199999999999989 -7.1343953466420230E-004 + 85.259999999999991 -6.9040142971418480E-004 + 85.319999999999993 -6.6776008900019403E-004 + 85.379999999999995 -6.4553663531008172E-004 + 85.439999999999998 -6.2375212379006889E-004 + 85.500000000000000 -6.0242729548275881E-004 + 85.560000000000002 -5.8158252469127207E-004 + 85.620000000000005 -5.6123798111694530E-004 + 85.680000000000007 -5.4141325271261215E-004 + 85.740000000000009 -5.2212765385941805E-004 + 85.799999999999983 -5.0340004075586861E-004 + 85.859999999999985 -4.8524863261372581E-004 + 85.919999999999987 -4.6769120347974326E-004 + 85.979999999999990 -4.5074487626277696E-004 + 86.039999999999992 -4.3442623907925798E-004 + 86.099999999999994 -4.1875119385255302E-004 + 86.159999999999997 -4.0373498057845513E-004 + 86.219999999999999 -3.8939214190541701E-004 + 86.280000000000001 -3.7573651542715359E-004 + 86.340000000000003 -3.6278115076467717E-004 + 86.400000000000006 -3.5053832777376365E-004 + 86.460000000000008 -3.3901953211500584E-004 + 86.519999999999982 -3.2823535745062684E-004 + 86.579999999999984 -3.1819555056647128E-004 + 86.639999999999986 -3.0890892487728982E-004 + 86.699999999999989 -3.0038334445659371E-004 + 86.759999999999991 -2.9262568520571451E-004 + 86.819999999999993 -2.8564180913126833E-004 + 86.879999999999995 -2.7943657788622508E-004 + 86.939999999999998 -2.7401374862079917E-004 + 87.000000000000000 -2.6937603896424496E-004 + 87.060000000000002 -2.6552505306994077E-004 + 87.120000000000005 -2.6246129799011768E-004 + 87.180000000000007 -2.6018416773782862E-004 + 87.240000000000009 -2.5869194519059129E-004 + 87.299999999999983 -2.5798177157128539E-004 + 87.359999999999985 -2.5804967685983505E-004 + 87.419999999999987 -2.5889061982676328E-004 + 87.479999999999990 -2.6049834029942803E-004 + 87.539999999999992 -2.6286553687740970E-004 + 87.599999999999994 -2.6598372523003896E-004 + 87.659999999999997 -2.6984332046498265E-004 + 87.719999999999999 -2.7443364601095180E-004 + 87.780000000000001 -2.7974287671408152E-004 + 87.840000000000003 -2.8575804121123321E-004 + 87.900000000000006 -2.9246508227974378E-004 + 87.960000000000008 -2.9984884580831495E-004 + 88.019999999999982 -3.0789307580175208E-004 + 88.079999999999984 -3.1658044476951777E-004 + 88.139999999999986 -3.2589254520706563E-004 + 88.199999999999989 -3.3581001174710337E-004 + 88.259999999999991 -3.4631239652328121E-004 + 88.319999999999993 -3.5737834712305165E-004 + 88.379999999999995 -3.6898556091229741E-004 + 88.439999999999998 -3.8111075807323530E-004 + 88.500000000000000 -3.9372992846413635E-004 + 88.560000000000002 -4.0681814094754506E-004 + 88.620000000000005 -4.2034971295743651E-004 + 88.680000000000007 -4.3429820636971576E-004 + 88.740000000000009 -4.4863647329391456E-004 + 88.799999999999983 -4.6333667509050537E-004 + 88.859999999999985 -4.7837038495253392E-004 + 88.919999999999987 -4.9370854691777456E-004 + 88.979999999999990 -5.0932150651481259E-004 + 89.039999999999992 -5.2517923978896252E-004 + 89.099999999999994 -5.4125110042144793E-004 + 89.159999999999997 -5.5750612294286198E-004 + 89.219999999999999 -5.7391299418923971E-004 + 89.280000000000001 -5.9044007098546872E-004 + 89.340000000000003 -6.0705545490626143E-004 + 89.400000000000006 -6.2372715517572549E-004 + 89.460000000000008 -6.4042296010140580E-004 + 89.519999999999982 -6.5711068578275841E-004 + 89.579999999999984 -6.7375811248517807E-004 + 89.639999999999986 -6.9033309441610938E-004 + 89.699999999999989 -7.0680363620814984E-004 + 89.759999999999991 -7.2313795184999672E-004 + 89.819999999999993 -7.3930454726628219E-004 + 89.879999999999995 -7.5527210832049111E-004 + 89.939999999999998 -7.7100978364200439E-004 + 90.000000000000000 -7.8648714558043702E-004 + 90.060000000000002 -8.0167418116355101E-004 + 90.120000000000005 -8.1654135598355150E-004 + 90.180000000000007 -8.3105967895501687E-004 + 90.240000000000009 -8.4520085197115720E-004 + 90.299999999999983 -8.5893723299177869E-004 + 90.359999999999985 -8.7224179197600816E-004 + 90.419999999999987 -8.8508831479574385E-004 + 90.479999999999990 -8.9745144684845327E-004 + 90.539999999999992 -9.0930655619157307E-004 + 90.599999999999994 -9.2063011707127452E-004 + 90.659999999999997 -9.3139951033096744E-004 + 90.719999999999999 -9.4159298911439119E-004 + 90.780000000000001 -9.5119001905397344E-004 + 90.840000000000003 -9.6017113381501105E-004 + 90.900000000000006 -9.6851790634217417E-004 + 90.960000000000008 -9.7621312383956574E-004 + 91.019999999999982 -9.8324078567899303E-004 + 91.079999999999984 -9.8958602438136323E-004 + 91.139999999999986 -9.9523530743118893E-004 + 91.199999999999989 -1.0001762123418752E-003 + 91.259999999999991 -1.0043976009268298E-003 + 91.319999999999993 -1.0078895559808034E-003 + 91.379999999999995 -1.0106436266236929E-003 + 91.439999999999998 -1.0126524909589087E-003 + 91.500000000000000 -1.0139100918296702E-003 + 91.560000000000002 -1.0144117060629273E-003 + 91.620000000000005 -1.0141540012725122E-003 + 91.680000000000007 -1.0131348281383666E-003 + 91.739999999999981 -1.0113534901320697E-003 + 91.799999999999983 -1.0088105496861353E-003 + 91.859999999999985 -1.0055078947551694E-003 + 91.919999999999987 -1.0014487058441325E-003 + 91.979999999999990 -9.9663746802076915E-004 + 92.039999999999992 -9.9107992018339342E-004 + 92.099999999999994 -9.8478309864770560E-004 + 92.159999999999997 -9.7775532385593303E-004 + 92.219999999999999 -9.7000590314277608E-004 + 92.280000000000001 -9.6154556340884080E-004 + 92.340000000000003 -9.5238603462643513E-004 + 92.400000000000006 -9.4254023222739266E-004 + 92.460000000000008 -9.3202215535694260E-004 + 92.519999999999982 -9.2084672172958507E-004 + 92.579999999999984 -9.0902992878095015E-004 + 92.639999999999986 -8.9658867494532622E-004 + 92.699999999999989 -8.8354079729658784E-004 + 92.759999999999991 -8.6990502027612607E-004 + 92.819999999999993 -8.5570099631752093E-004 + 92.879999999999995 -8.4094908172187874E-004 + 92.939999999999998 -8.2567040652736540E-004 + 93.000000000000000 -8.0988686207742573E-004 + 93.060000000000002 -7.9362097081125851E-004 + 93.120000000000005 -7.7689581758123871E-004 + 93.180000000000007 -7.5973517952672084E-004 + 93.239999999999981 -7.4216326708465366E-004 + 93.299999999999983 -7.2420467122542506E-004 + 93.359999999999985 -7.0588449631348114E-004 + 93.419999999999987 -6.8722804505735576E-004 + 93.479999999999990 -6.6826102857428537E-004 + 93.539999999999992 -6.4900930759527941E-004 + 93.599999999999994 -6.2949881298896893E-004 + 93.659999999999997 -6.0975573579427969E-004 + 93.719999999999999 -5.8980621017862386E-004 + 93.780000000000001 -5.6967636349130896E-004 + 93.840000000000003 -5.4939239920367728E-004 + 93.900000000000006 -5.2898029776834283E-004 + 93.960000000000008 -5.0846597224168250E-004 + 94.019999999999982 -4.8787515493684994E-004 + 94.079999999999984 -4.6723329792290060E-004 + 94.139999999999986 -4.4656565392058641E-004 + 94.199999999999989 -4.2589716065802720E-004 + 94.259999999999991 -4.0525233870857111E-004 + 94.319999999999993 -3.8465530626300467E-004 + 94.379999999999995 -3.6412973720774758E-004 + 94.439999999999998 -3.4369881625875831E-004 + 94.500000000000000 -3.2338512717607233E-004 + 94.560000000000002 -3.0321070593916085E-004 + 94.620000000000005 -2.8319695644301289E-004 + 94.680000000000007 -2.6336458062160671E-004 + 94.739999999999981 -2.4373361125146507E-004 + 94.799999999999983 -2.2432329995462143E-004 + 94.859999999999985 -2.0515216884515623E-004 + 94.919999999999987 -1.8623800992160266E-004 + 94.979999999999990 -1.6759775455763227E-004 + 95.039999999999992 -1.4924753349702556E-004 + 95.099999999999994 -1.3120266051352083E-004 + 95.159999999999997 -1.1347763139101267E-004 + 95.219999999999999 -9.6086082843471613E-005 + 95.280000000000001 -7.9040779714694749E-005 + 95.340000000000003 -6.2353659122672584E-005 + 95.400000000000006 -4.6035771623721396E-005 + 95.460000000000008 -3.0097301650275505E-005 + 95.519999999999982 -1.4547567246305386E-005 + 95.579999999999984 6.0498076885393779E-007 + 95.639999999999986 1.5352784057955965E-005 + 95.699999999999989 2.9689119831716578E-005 + 95.759999999999991 4.3608144180895867E-005 + 95.819999999999993 5.7104818475473663E-005 + 95.879999999999995 7.0174945448126875E-005 + 95.939999999999998 8.2815112950340608E-005 + 96.000000000000000 9.5022696188947392E-005 + 96.060000000000002 1.0679578901053957E-004 + 96.120000000000005 1.1813320494150707E-004 + 96.180000000000007 1.2903445919495429E-004 + 96.239999999999981 1.3949966890577735E-004 + 96.299999999999983 1.4952958993982667E-004 + 96.359999999999985 1.5912556630728365E-004 + 96.419999999999987 1.6828946077911957E-004 + 96.479999999999990 1.7702368245126789E-004 + 96.539999999999992 1.8533112362942026E-004 + 96.599999999999994 1.9321511955344871E-004 + 96.659999999999997 2.0067943583288936E-004 + 96.719999999999999 2.0772825015378491E-004 + 96.780000000000001 2.1436609880623965E-004 + 96.840000000000003 2.2059781379416205E-004 + 96.900000000000006 2.2642856680675827E-004 + 96.960000000000008 2.3186373726057511E-004 + 97.019999999999982 2.3690892450866713E-004 + 97.079999999999984 2.4156993088061060E-004 + 97.139999999999986 2.4585261979983203E-004 + 97.199999999999989 2.4976297186017198E-004 + 97.259999999999991 2.5330698963211867E-004 + 97.319999999999993 2.5649067870008209E-004 + 97.379999999999995 2.5931999253146168E-004 + 97.439999999999998 2.6180079457733922E-004 + 97.500000000000000 2.6393885894132396E-004 + 97.560000000000002 2.6573980408828676E-004 + 97.620000000000005 2.6720912390339869E-004 + 97.680000000000007 2.6835206433356579E-004 + 97.739999999999981 2.6917376348512949E-004 + 97.799999999999983 2.6967915141760804E-004 + 97.859999999999985 2.6987289142854073E-004 + 97.919999999999987 2.6975949563123842E-004 + 97.979999999999990 2.6934317098422186E-004 + 98.039999999999992 2.6862797046298961E-004 + 98.099999999999994 2.6761765901713182E-004 + 98.159999999999997 2.6631577900915594E-004 + 98.219999999999999 2.6472559539025782E-004 + 98.280000000000001 2.6285011310361921E-004 + 98.340000000000003 2.6069207390076851E-004 + 98.400000000000006 2.5825390205048526E-004 + 98.460000000000008 2.5553781334058733E-004 + 98.519999999999982 2.5254566958355284E-004 + 98.579999999999984 2.4927906238218501E-004 + 98.639999999999986 2.4573936201219705E-004 + 98.699999999999989 2.4192763854901322E-004 + 98.759999999999991 2.3784473354446545E-004 + 98.819999999999993 2.3349128150124693E-004 + 98.879999999999995 2.2886770635714690E-004 + 98.939999999999998 2.2397425506886300E-004 + 99.000000000000000 2.1881107340518676E-004 + 99.060000000000002 2.1337819478099051E-004 + 99.120000000000005 2.0767554073799501E-004 + 99.180000000000007 2.0170300863751200E-004 + 99.239999999999981 1.9546047621196946E-004 + 99.299999999999983 1.8894780397867041E-004 + 99.359999999999985 1.8216492001722187E-004 + 99.419999999999987 1.7511178366270868E-004 + 99.479999999999990 1.6778846275530739E-004 + 99.539999999999992 1.6019510201446750E-004 + 99.599999999999994 1.5233196524864638E-004 + 99.659999999999997 1.4419948563224993E-004 + 99.719999999999999 1.3579826942608709E-004 + 99.780000000000001 1.2712908790143542E-004 + 99.840000000000003 1.1819296360640755E-004 + 99.900000000000006 1.0899114033584997E-004 + 99.960000000000008 9.9525140032478146E-005 + 100.01999999999998 8.9796752878841212E-005 + 100.07999999999998 7.9808092211580391E-005 + 100.13999999999999 6.9561606578959337E-005 + 100.19999999999999 5.9060076729068209E-005 + 100.25999999999999 4.8306653050199171E-005 + 100.31999999999999 3.7304875417295790E-005 + 100.38000000000000 2.6058646351004203E-005 + 100.44000000000000 1.4572285872252454E-005 + 100.50000000000000 2.8504947793734796E-006 + 100.56000000000000 -9.1015916208905729E-006 + 100.62000000000000 -2.1278476760663536E-005 + 100.68000000000001 -3.3674218152662089E-005 + 100.73999999999998 -4.6282501640668784E-005 + 100.79999999999998 -5.9096596200286119E-005 + 100.85999999999999 -7.2109374524487510E-005 + 100.91999999999999 -8.5313322061492466E-005 + 100.97999999999999 -9.8700532603898200E-005 + 101.03999999999999 -1.1226273233001326E-004 + 101.09999999999999 -1.2599125767809321E-004 + 101.16000000000000 -1.3987711897741527E-004 + 101.22000000000000 -1.5391097199706925E-004 + 101.28000000000000 -1.6808315249578189E-004 + 101.34000000000000 -1.8238369171596949E-004 + 101.40000000000001 -1.9680238307595550E-004 + 101.46000000000001 -2.1132871850085836E-004 + 101.51999999999998 -2.2595202484312655E-004 + 101.57999999999998 -2.4066143526532886E-004 + 101.63999999999999 -2.5544592186764600E-004 + 101.69999999999999 -2.7029434787960270E-004 + 101.75999999999999 -2.8519547331487598E-004 + 101.81999999999999 -3.0013803255751943E-004 + 101.88000000000000 -3.1511067445512446E-004 + 101.94000000000000 -3.3010207830143676E-004 + 102.00000000000000 -3.4510091313335483E-004 + 102.06000000000000 -3.6009589812600976E-004 + 102.12000000000000 -3.7507575426443639E-004 + 102.18000000000001 -3.9002932801458778E-004 + 102.23999999999998 -4.0494552495611588E-004 + 102.29999999999998 -4.1981332215776092E-004 + 102.35999999999999 -4.3462184023318500E-004 + 102.41999999999999 -4.4936034491266445E-004 + 102.47999999999999 -4.6401824067214163E-004 + 102.53999999999999 -4.7858511243548883E-004 + 102.59999999999999 -4.9305078078160634E-004 + 102.66000000000000 -5.0740526115585654E-004 + 102.72000000000000 -5.2163885655492025E-004 + 102.78000000000000 -5.3574210689352861E-004 + 102.84000000000000 -5.4970582801433738E-004 + 102.90000000000001 -5.6352126008785608E-004 + 102.96000000000001 -5.7717991430473754E-004 + 103.01999999999998 -5.9067357811698430E-004 + 103.07999999999998 -6.0399442152313850E-004 + 103.13999999999999 -6.1713494869967576E-004 + 103.19999999999999 -6.3008800654295498E-004 + 103.25999999999999 -6.4284679933002283E-004 + 103.31999999999999 -6.5540481255676607E-004 + 103.38000000000000 -6.6775584668489279E-004 + 103.44000000000000 -6.7989402340492156E-004 + 103.50000000000000 -6.9181369308414563E-004 + 103.56000000000000 -7.0350947021415283E-004 + 103.62000000000000 -7.1497633882816071E-004 + 103.68000000000001 -7.2620945277580590E-004 + 103.73999999999998 -7.3720427302476413E-004 + 103.79999999999998 -7.4795648627170176E-004 + 103.85999999999999 -7.5846201802972583E-004 + 103.91999999999999 -7.6871706495525876E-004 + 103.97999999999999 -7.7871795293401789E-004 + 104.03999999999999 -7.8846133150311084E-004 + 104.09999999999999 -7.9794413866410426E-004 + 104.16000000000000 -8.0716340978745924E-004 + 104.22000000000000 -8.1611641968882176E-004 + 104.28000000000000 -8.2480058803344528E-004 + 104.34000000000000 -8.3321361190749101E-004 + 104.40000000000001 -8.4135319906059015E-004 + 104.46000000000001 -8.4921724321789405E-004 + 104.51999999999998 -8.5680379645405424E-004 + 104.57999999999998 -8.6411087765495584E-004 + 104.63999999999999 -8.7113663479996986E-004 + 104.69999999999999 -8.7787932556026606E-004 + 104.75999999999999 -8.8433716670244722E-004 + 104.81999999999999 -8.9050844059467688E-004 + 104.88000000000000 -8.9639136775780984E-004 + 104.94000000000000 -9.0198437747693945E-004 + 105.00000000000000 -9.0728576463241953E-004 + 105.06000000000000 -9.1229391462492647E-004 + 105.12000000000000 -9.1700719876044382E-004 + 105.18000000000001 -9.2142404154995207E-004 + 105.23999999999998 -9.2554290426367296E-004 + 105.29999999999998 -9.2936229170773217E-004 + 105.35999999999999 -9.3288073884766423E-004 + 105.41999999999999 -9.3609668998409512E-004 + 105.47999999999999 -9.3900877975488346E-004 + 105.53999999999999 -9.4161556959805397E-004 + 105.59999999999999 -9.4391572987408351E-004 + 105.66000000000000 -9.4590795372375596E-004 + 105.72000000000000 -9.4759098845815040E-004 + 105.78000000000000 -9.4896350828879142E-004 + 105.84000000000000 -9.5002441382941827E-004 + 105.90000000000001 -9.5077264649937650E-004 + 105.96000000000001 -9.5120714975945140E-004 + 106.01999999999998 -9.5132710221710584E-004 + 106.07999999999998 -9.5113168856751109E-004 + 106.13999999999999 -9.5062029263301114E-004 + 106.19999999999999 -9.4979241432691834E-004 + 106.25999999999999 -9.4864778446783038E-004 + 106.31999999999999 -9.4718631933466823E-004 + 106.38000000000000 -9.4540811694637491E-004 + 106.44000000000000 -9.4331361256547045E-004 + 106.50000000000000 -9.4090338808870732E-004 + 106.56000000000000 -9.3817826548921136E-004 + 106.62000000000000 -9.3513946846525235E-004 + 106.68000000000001 -9.3178837909480689E-004 + 106.73999999999998 -9.2812680687852107E-004 + 106.79999999999998 -9.2415683725411541E-004 + 106.85999999999999 -9.1988082928037048E-004 + 106.91999999999999 -9.1530157287756384E-004 + 106.97999999999999 -9.1042226204499554E-004 + 107.03999999999999 -9.0524635150477230E-004 + 107.09999999999999 -8.9977788175957729E-004 + 107.16000000000000 -8.9402121251539596E-004 + 107.22000000000000 -8.8798119711226849E-004 + 107.28000000000000 -8.8166314547869699E-004 + 107.34000000000000 -8.7507280398172588E-004 + 107.40000000000001 -8.6821643769425280E-004 + 107.46000000000001 -8.6110087451627499E-004 + 107.51999999999998 -8.5373331709621221E-004 + 107.57999999999998 -8.4612160945043144E-004 + 107.63999999999999 -8.3827397421341312E-004 + 107.69999999999999 -8.3019930850763079E-004 + 107.75999999999999 -8.2190685431758625E-004 + 107.81999999999999 -8.1340645361998763E-004 + 107.88000000000000 -8.0470844112637079E-004 + 107.94000000000000 -7.9582362143266832E-004 + 108.00000000000000 -7.8676335182021034E-004 + 108.06000000000000 -7.7753951050969414E-004 + 108.12000000000000 -7.6816439234270130E-004 + 108.18000000000001 -7.5865086747685059E-004 + 108.23999999999998 -7.4901234066010133E-004 + 108.29999999999998 -7.3926259787107272E-004 + 108.35999999999999 -7.2941607084240181E-004 + 108.41999999999999 -7.1948760934801767E-004 + 108.47999999999999 -7.0949250276557531E-004 + 108.53999999999999 -6.9944663348894495E-004 + 108.59999999999999 -6.8936615165101614E-004 + 108.66000000000000 -6.7926781807558601E-004 + 108.72000000000000 -6.6916864327167696E-004 + 108.78000000000000 -6.5908598875624095E-004 + 108.84000000000000 -6.4903772782737409E-004 + 108.90000000000001 -6.3904187179748676E-004 + 108.96000000000001 -6.2911671479360851E-004 + 109.01999999999998 -6.1928091404034075E-004 + 109.07999999999998 -6.0955317703660801E-004 + 109.13999999999999 -5.9995255096615004E-004 + 109.19999999999999 -5.9049810271240624E-004 + 109.25999999999999 -5.8120910712740684E-004 + 109.31999999999999 -5.7210486431183742E-004 + 109.38000000000000 -5.6320488141288732E-004 + 109.44000000000000 -5.5452851425493485E-004 + 109.50000000000000 -5.4609534759534435E-004 + 109.56000000000000 -5.3792481259202834E-004 + 109.62000000000000 -5.3003630853419147E-004 + 109.68000000000001 -5.2244917055235937E-004 + 109.73999999999998 -5.1518255328211900E-004 + 109.79999999999998 -5.0825542095441194E-004 + 109.85999999999999 -5.0168656428991980E-004 + 109.91999999999999 -4.9549429256644055E-004 + 109.97999999999999 -4.8969671085537518E-004 + 110.03999999999999 -4.8431152955507483E-004 + 110.09999999999999 -4.7935594083957714E-004 + 110.16000000000000 -4.7484653827962933E-004 + 110.22000000000000 -4.7079952114327181E-004 + 110.28000000000000 -4.6723041683120818E-004 + 110.34000000000000 -4.6415397743386412E-004 + 110.40000000000001 -4.6158437156889758E-004 + 110.46000000000001 -4.5953499460582537E-004 + 110.51999999999998 -4.5801843050841194E-004 + 110.57999999999998 -4.5704641167564942E-004 + 110.63999999999999 -4.5662985746052127E-004 + 110.69999999999999 -4.5677869459132892E-004 + 110.75999999999999 -4.5750187173122239E-004 + 110.81999999999999 -4.5880744466414441E-004 + 110.88000000000000 -4.6070227058555332E-004 + 110.94000000000000 -4.6319222422733193E-004 + 111.00000000000000 -4.6628188322730052E-004 + 111.06000000000000 -4.6997469986218281E-004 + 111.12000000000000 -4.7427284084406227E-004 + 111.18000000000001 -4.7917711569055583E-004 + 111.23999999999998 -4.8468702447790888E-004 + 111.29999999999998 -4.9080066271534940E-004 + 111.35999999999999 -4.9751467563090876E-004 + 111.41999999999999 -5.0482423791305174E-004 + 111.47999999999999 -5.1272304568721506E-004 + 111.53999999999999 -5.2120326458263784E-004 + 111.59999999999999 -5.3025552398123013E-004 + 111.66000000000000 -5.3986894444176881E-004 + 111.72000000000000 -5.5003110645802261E-004 + 111.78000000000000 -5.6072797640260581E-004 + 111.84000000000000 -5.7194402965056533E-004 + 111.90000000000001 -5.8366222595163065E-004 + 111.96000000000001 -5.9586379613449402E-004 + 112.01999999999998 -6.0852865029749630E-004 + 112.07999999999998 -6.2163507493466952E-004 + 112.13999999999999 -6.3515987332946305E-004 + 112.19999999999999 -6.4907833936160217E-004 + 112.25999999999999 -6.6336426996332128E-004 + 112.31999999999999 -6.7799009297534873E-004 + 112.38000000000000 -6.9292670036497615E-004 + 112.44000000000000 -7.0814381622139706E-004 + 112.50000000000000 -7.2360968032671765E-004 + 112.56000000000000 -7.3929136768914497E-004 + 112.62000000000000 -7.5515464001437880E-004 + 112.68000000000001 -7.7116422655955212E-004 + 112.73999999999998 -7.8728363966005469E-004 + 112.79999999999998 -8.0347559117374483E-004 + 112.85999999999999 -8.1970169282546122E-004 + 112.91999999999999 -8.3592284510163083E-004 + 112.97999999999999 -8.5209913959434177E-004 + 113.03999999999999 -8.6819004753691963E-004 + 113.09999999999999 -8.8415447155079944E-004 + 113.16000000000000 -8.9995087245063415E-004 + 113.22000000000000 -9.1553729038258930E-004 + 113.28000000000000 -9.3087156662066922E-004 + 113.34000000000000 -9.4591140115737416E-004 + 113.40000000000001 -9.6061442090208298E-004 + 113.46000000000001 -9.7493835719927543E-004 + 113.51999999999998 -9.8884112054282384E-004 + 113.57999999999998 -1.0022808994689680E-003 + 113.63999999999999 -1.0152163251415615E-003 + 113.69999999999999 -1.0276066885827931E-003 + 113.75999999999999 -1.0394117995332040E-003 + 113.81999999999999 -1.0505923504296002E-003 + 113.88000000000000 -1.0611100397901047E-003 + 113.94000000000000 -1.0709274932122637E-003 + 114.00000000000000 -1.0800086012213931E-003 + 114.06000000000000 -1.0883184237355436E-003 + 114.12000000000000 -1.0958234807462413E-003 + 114.18000000000001 -1.1024917900877814E-003 + 114.23999999999998 -1.1082929486299965E-003 + 114.29999999999998 -1.1131980960295341E-003 + 114.35999999999999 -1.1171804098721401E-003 + 114.41999999999999 -1.1202148699364972E-003 + 114.47999999999999 -1.1222783426502988E-003 + 114.53999999999999 -1.1233496949678138E-003 + 114.59999999999999 -1.1234100697274283E-003 + 114.66000000000000 -1.1224426804317847E-003 + 114.72000000000000 -1.1204330421169355E-003 + 114.78000000000000 -1.1173691768585586E-003 + 114.84000000000000 -1.1132413433255963E-003 + 114.90000000000001 -1.1080422302438696E-003 + 114.96000000000001 -1.1017672554440507E-003 + 115.01999999999998 -1.0944141536075457E-003 + 115.07999999999998 -1.0859833693334794E-003 + 115.13999999999999 -1.0764778617961921E-003 + 115.19999999999999 -1.0659033013570535E-003 + 115.25999999999999 -1.0542678799601338E-003 + 115.31999999999999 -1.0415823377670772E-003 + 115.38000000000000 -1.0278600665613300E-003 + 115.44000000000000 -1.0131169330108018E-003 + 115.50000000000000 -9.9737124278660477E-004 + 115.56000000000000 -9.8064377661182109E-004 + 115.62000000000000 -9.6295766137016834E-004 + 115.68000000000001 -9.4433830936247842E-004 + 115.73999999999998 -9.2481339663682703E-004 + 115.79999999999998 -9.0441285181799976E-004 + 115.85999999999999 -8.8316855475909027E-004 + 115.91999999999999 -8.6111458525627189E-004 + 115.97999999999999 -8.3828677492578461E-004 + 116.03999999999999 -8.1472296736024132E-004 + 116.09999999999999 -7.9046266057256238E-004 + 116.16000000000000 -7.6554703719345003E-004 + 116.22000000000000 -7.4001879722127982E-004 + 116.28000000000000 -7.1392206342229246E-004 + 116.34000000000000 -6.8730228920580480E-004 + 116.40000000000001 -6.6020613786771983E-004 + 116.46000000000001 -6.3268121799260222E-004 + 116.51999999999998 -6.0477609138337863E-004 + 116.57999999999998 -5.7653999415837004E-004 + 116.63999999999999 -5.4802270703559436E-004 + 116.69999999999999 -5.1927459451543700E-004 + 116.75999999999999 -4.9034617920169212E-004 + 116.81999999999999 -4.6128819362606372E-004 + 116.88000000000000 -4.3215127726637618E-004 + 116.94000000000000 -4.0298590776435475E-004 + 117.00000000000000 -3.7384227774300827E-004 + 117.06000000000000 -3.4477015460791913E-004 + 117.12000000000000 -3.1581870335786332E-004 + 117.18000000000001 -2.8703638966085903E-004 + 117.23999999999998 -2.5847086589938676E-004 + 117.29999999999998 -2.3016881687941518E-004 + 117.35999999999999 -2.0217580966072312E-004 + 117.41999999999999 -1.7453633570459426E-004 + 117.47999999999999 -1.4729350079890961E-004 + 117.53999999999999 -1.2048905067203514E-004 + 117.59999999999999 -9.4163237349351788E-005 + 117.66000000000000 -6.8354642299600513E-005 + 117.72000000000000 -4.3100198556464094E-005 + 117.78000000000000 -1.8435005126353601E-005 + 117.84000000000000 5.6077028788164586E-006 + 117.90000000000001 2.8996624336988038E-005 + 117.96000000000001 5.1702515269529654E-005 + 118.01999999999998 7.3698227306928635E-005 + 118.07999999999998 9.4958707434963387E-005 + 118.13999999999999 1.1546114026930244E-004 + 118.19999999999999 1.3518489342340091E-004 + 118.25999999999999 1.5411158178487339E-004 + 118.31999999999999 1.7222507105585196E-004 + 118.38000000000000 1.8951153544122492E-004 + 118.44000000000000 2.0595940916403718E-004 + 118.50000000000000 2.2155934530766381E-004 + 118.56000000000000 2.3630432559922223E-004 + 118.62000000000000 2.5018954409515906E-004 + 118.68000000000001 2.6321241656312354E-004 + 118.73999999999998 2.7537253089403139E-004 + 118.79999999999998 2.8667163117107575E-004 + 118.85999999999999 2.9711360428387435E-004 + 118.91999999999999 3.0670435063123415E-004 + 118.97999999999999 3.1545181730326490E-004 + 119.03999999999999 3.2336591761646588E-004 + 119.09999999999999 3.3045839158665335E-004 + 119.16000000000000 3.3674282249532912E-004 + 119.22000000000000 3.4223452114364957E-004 + 119.28000000000000 3.4695041994202468E-004 + 119.34000000000000 3.5090909261806079E-004 + 119.40000000000001 3.5413056604497914E-004 + 119.46000000000001 3.5663623180335648E-004 + 119.51999999999998 3.5844885646482228E-004 + 119.57999999999998 3.5959232212851163E-004 + 119.63999999999999 3.6009169731447915E-004 + 119.69999999999999 3.5997303341103759E-004 + 119.75999999999999 3.5926332067941333E-004 + 119.81999999999999 3.5799042572897755E-004 + 119.88000000000000 3.5618288951489113E-004 + 119.94000000000000 3.5386996461783389E-004 + 120.00000000000000 3.5108141148885877E-004 + 120.06000000000000 3.4784746912099913E-004 + 120.12000000000000 3.4419870836270642E-004 + 120.18000000000001 3.4016597821593872E-004 + 120.23999999999998 3.3578026868897801E-004 + 120.29999999999998 3.3107265370496545E-004 + 120.35999999999999 3.2607411808427492E-004 + 120.41999999999999 3.2081554908825941E-004 + 120.47999999999999 3.1532764480202255E-004 + 120.53999999999999 3.0964075090975248E-004 + 120.59999999999999 3.0378484570137989E-004 + 120.66000000000000 2.9778946370819491E-004 + 120.72000000000000 2.9168356596485381E-004 + 120.78000000000000 2.8549556302314983E-004 + 120.84000000000000 2.7925317605504444E-004 + 120.90000000000001 2.7298343634250230E-004 + 120.95999999999998 2.6671261339585744E-004 + 121.01999999999998 2.6046611781727102E-004 + 121.07999999999998 2.5426858947617326E-004 + 121.13999999999999 2.4814369522569438E-004 + 121.19999999999999 2.4211425653269681E-004 + 121.25999999999999 2.3620205232664982E-004 + 121.31999999999999 2.3042786645678537E-004 + 121.38000000000000 2.2481145888260203E-004 + 121.44000000000000 2.1937146949245164E-004 + 121.50000000000000 2.1412544328150711E-004 + 121.56000000000000 2.0908974792690685E-004 + 121.62000000000000 2.0427961485412500E-004 + 121.68000000000001 1.9970902610303814E-004 + 121.73999999999998 1.9539075182205840E-004 + 121.79999999999998 1.9133634751248787E-004 + 121.85999999999999 1.8755611703490040E-004 + 121.91999999999999 1.8405911945866489E-004 + 121.97999999999999 1.8085319359883903E-004 + 122.03999999999999 1.7794493153179140E-004 + 122.09999999999999 1.7533971804857844E-004 + 122.16000000000000 1.7304173918141267E-004 + 122.22000000000000 1.7105402338699264E-004 + 122.28000000000000 1.6937845495452856E-004 + 122.34000000000000 1.6801577925074790E-004 + 122.40000000000001 1.6696564644225442E-004 + 122.45999999999998 1.6622662804848659E-004 + 122.51999999999998 1.6579624441169142E-004 + 122.57999999999998 1.6567100379912328E-004 + 122.63999999999999 1.6584638507357327E-004 + 122.69999999999999 1.6631690253192817E-004 + 122.75999999999999 1.6707611307501609E-004 + 122.81999999999999 1.6811663892215948E-004 + 122.88000000000000 1.6943021723566000E-004 + 122.94000000000000 1.7100769979421328E-004 + 123.00000000000000 1.7283912519810391E-004 + 123.06000000000000 1.7491370631523157E-004 + 123.12000000000000 1.7721991602586738E-004 + 123.18000000000001 1.7974553492092909E-004 + 123.23999999999998 1.8247764669045117E-004 + 123.29999999999998 1.8540275321688463E-004 + 123.35999999999999 1.8850675827292564E-004 + 123.41999999999999 1.9177509414605861E-004 + 123.47999999999999 1.9519271933173601E-004 + 123.53999999999999 1.9874416988691068E-004 + 123.59999999999999 2.0241363164605981E-004 + 123.66000000000000 2.0618499984120195E-004 + 123.72000000000000 2.1004190668431953E-004 + 123.78000000000000 2.1396772052507002E-004 + 123.84000000000000 2.1794573000616640E-004 + 123.90000000000001 2.2195902722637375E-004 + 123.95999999999998 2.2599066126529336E-004 + 124.01999999999998 2.3002362720324051E-004 + 124.07999999999998 2.3404097762398998E-004 + 124.13999999999999 2.3802574818063978E-004 + 124.19999999999999 2.4196112738605928E-004 + 124.25999999999999 2.4583040156443085E-004 + 124.31999999999999 2.4961707678076121E-004 + 124.38000000000000 2.5330485896365285E-004 + 124.44000000000000 2.5687781089304810E-004 + 124.50000000000000 2.6032018174413046E-004 + 124.56000000000000 2.6361669302731646E-004 + 124.62000000000000 2.6675242756568363E-004 + 124.68000000000001 2.6971288166208142E-004 + 124.73999999999998 2.7248406131874980E-004 + 124.79999999999998 2.7505245301458447E-004 + 124.85999999999999 2.7740514768610439E-004 + 124.91999999999999 2.7952974127290898E-004 + 124.97999999999999 2.8141450830665427E-004 + 125.03999999999999 2.8304833229419058E-004 + 125.09999999999999 2.8442070947742090E-004 + 125.16000000000000 2.8552190611960302E-004 + 125.22000000000000 2.8634281004425029E-004 + 125.28000000000000 2.8687512874258687E-004 + 125.34000000000000 2.8711125521398444E-004 + 125.40000000000001 2.8704437071796557E-004 + 125.45999999999998 2.8666845452224126E-004 + 125.51999999999998 2.8597828679481098E-004 + 125.57999999999998 2.8496940164735019E-004 + 125.63999999999999 2.8363821583469068E-004 + 125.69999999999999 2.8198192488194755E-004 + 125.75999999999999 2.7999851529558544E-004 + 125.81999999999999 2.7768684759769404E-004 + 125.88000000000000 2.7504655200970388E-004 + 125.94000000000000 2.7207807362284993E-004 + 126.00000000000000 2.6878267567273111E-004 + 126.06000000000000 2.6516235668492811E-004 + 126.12000000000000 2.6121995187754313E-004 + 126.18000000000001 2.5695901955207043E-004 + 126.23999999999998 2.5238390346142212E-004 + 126.29999999999998 2.4749970513091051E-004 + 126.35999999999999 2.4231222747314617E-004 + 126.41999999999999 2.3682800766111308E-004 + 126.47999999999999 2.3105429230700067E-004 + 126.53999999999999 2.2499902678458803E-004 + 126.59999999999999 2.1867082583272603E-004 + 126.66000000000000 2.1207896073538433E-004 + 126.72000000000000 2.0523335695821026E-004 + 126.78000000000000 1.9814451647351915E-004 + 126.84000000000000 1.9082354780225930E-004 + 126.90000000000001 1.8328213164161110E-004 + 126.95999999999998 1.7553246707231669E-004 + 127.01999999999998 1.6758722662424107E-004 + 127.07999999999998 1.5945957621917720E-004 + 127.13999999999999 1.5116310551818398E-004 + 127.19999999999999 1.4271179825797053E-004 + 127.25999999999999 1.3412001695726992E-004 + 127.31999999999999 1.2540244615458514E-004 + 127.38000000000000 1.1657409794333126E-004 + 127.44000000000000 1.0765023715612903E-004 + 127.50000000000000 9.8646402439577218E-005 + 127.56000000000000 8.9578345394926163E-005 + 127.62000000000000 8.0462039730661255E-005 + 127.68000000000001 7.1313634255397483E-005 + 127.73999999999998 6.2149432240816264E-005 + 127.79999999999998 5.2985876612783700E-005 + 127.85999999999999 4.3839518532738426E-005 + 127.91999999999999 3.4726996589548738E-005 + 127.97999999999999 2.5665009245052676E-005 + 128.03999999999999 1.6670279343295760E-005 + 128.09999999999999 7.7595304500985744E-006 + 128.16000000000000 -1.0505437004444027E-006 + 128.22000000000000 -9.7433132785344596E-006 + 128.28000000000000 -1.8302243344109208E-005 + 128.34000000000000 -2.6710919251753683E-005 + 128.40000000000001 -3.4953076950813061E-005 + 128.45999999999998 -4.3012642257350785E-005 + 128.51999999999998 -5.0873735147221241E-005 + 128.57999999999998 -5.8520698241730652E-005 + 128.63999999999999 -6.5938125953709557E-005 + 128.69999999999999 -7.3110863718372306E-005 + 128.75999999999999 -8.0024038288039993E-005 + 128.81999999999999 -8.6663072552786621E-005 + 128.88000000000000 -9.3013663714401837E-005 + 128.94000000000000 -9.9061847585001553E-005 + 129.00000000000000 -1.0479396741649214E-004 + 129.06000000000000 -1.1019670235444843E-004 + 129.12000000000000 -1.1525706351256398E-004 + 129.18000000000001 -1.1996242952511854E-004 + 129.23999999999998 -1.2430056443191997E-004 + 129.29999999999998 -1.2825961422853772E-004 + 129.35999999999999 -1.3182813669067290E-004 + 129.41999999999999 -1.3499511860207313E-004 + 129.47999999999999 -1.3774999330816001E-004 + 129.53999999999999 -1.4008265702770062E-004 + 129.59999999999999 -1.4198352061121997E-004 + 129.66000000000000 -1.4344346782457491E-004 + 129.72000000000000 -1.4445391809988651E-004 + 129.78000000000000 -1.4500681998682834E-004 + 129.84000000000000 -1.4509466290069494E-004 + 129.90000000000001 -1.4471050452597079E-004 + 129.95999999999998 -1.4384794548081981E-004 + 130.01999999999998 -1.4250115887759027E-004 + 130.07999999999998 -1.4066489249081029E-004 + 130.13999999999999 -1.3833443583274687E-004 + 130.19999999999999 -1.3550569519717219E-004 + 130.25999999999999 -1.3217511684384311E-004 + 130.31999999999999 -1.2833972295331358E-004 + 130.38000000000000 -1.2399713783650974E-004 + 130.44000000000000 -1.1914554264381378E-004 + 130.50000000000000 -1.1378371421661560E-004 + 130.56000000000000 -1.0791100349441220E-004 + 130.62000000000000 -1.0152737294906637E-004 + 130.68000000000001 -9.4633381535559196E-005 + 130.73999999999998 -8.7230196684111099E-005 + 130.79999999999998 -7.9319592479266675E-005 + 130.85999999999999 -7.0903965748019690E-005 + 130.91999999999999 -6.1986351298459763E-005 + 130.97999999999999 -5.2570389879141551E-005 + 131.03999999999999 -4.2660361052414069E-005 + 131.09999999999999 -3.2261181825203963E-005 + 131.16000000000000 -2.1378386579228194E-005 + 131.22000000000000 -1.0018138882320762E-005 + 131.28000000000000 1.8127758809493211E-006 + 131.34000000000000 1.4106972812816119E-005 + 131.40000000000001 2.6856454451597015E-005 + 131.45999999999998 4.0052623831314733E-005 + 131.51999999999998 5.3686326731621346E-005 + 131.57999999999998 6.7747817762887653E-005 + 131.63999999999999 8.2226817666846485E-005 + 131.69999999999999 9.7112497116071521E-005 + 131.75999999999999 1.1239349184274147E-004 + 131.81999999999999 1.2805795786811561E-004 + 131.88000000000000 1.4409351266886914E-004 + 131.94000000000000 1.6048730184004117E-004 + 132.00000000000000 1.7722602722059215E-004 + 132.06000000000000 1.9429588886355859E-004 + 132.12000000000000 2.1168267450403540E-004 + 132.18000000000001 2.2937174215074870E-004 + 132.23999999999998 2.4734797424028450E-004 + 132.29999999999998 2.6559588254001793E-004 + 132.35999999999999 2.8409955693431020E-004 + 132.41999999999999 3.0284272912434673E-004 + 132.47999999999999 3.2180872238248383E-004 + 132.53999999999999 3.4098047920282781E-004 + 132.59999999999999 3.6034065603676464E-004 + 132.66000000000000 3.7987152488297432E-004 + 132.72000000000000 3.9955504044633200E-004 + 132.78000000000000 4.1937293628229827E-004 + 132.84000000000000 4.3930660389082307E-004 + 132.90000000000001 4.5933728754203108E-004 + 132.95999999999998 4.7944592259276179E-004 + 133.01999999999998 4.9961336264681101E-004 + 133.07999999999998 5.1982031022163705E-004 + 133.13999999999999 5.4004732987454997E-004 + 133.19999999999999 5.6027485334918031E-004 + 133.25999999999999 5.8048339475201419E-004 + 133.31999999999999 6.0065335817141693E-004 + 133.38000000000000 6.2076517232173675E-004 + 133.44000000000000 6.4079934680685185E-004 + 133.50000000000000 6.6073641402601430E-004 + 133.56000000000000 6.8055698740913657E-004 + 133.62000000000000 7.0024182017568116E-004 + 133.68000000000001 7.1977178075487971E-004 + 133.73999999999998 7.3912778512707535E-004 + 133.79999999999998 7.5829104247940597E-004 + 133.85999999999999 7.7724275977316000E-004 + 133.91999999999999 7.9596441931738466E-004 + 133.97999999999999 8.1443769456629271E-004 + 134.03999999999999 8.3264443077106357E-004 + 134.09999999999999 8.5056676815406745E-004 + 134.16000000000000 8.6818692589106581E-004 + 134.22000000000000 8.8548753350033388E-004 + 134.28000000000000 9.0245156907046336E-004 + 134.34000000000000 9.1906219747390811E-004 + 134.40000000000001 9.3530293877611983E-004 + 134.45999999999998 9.5115778131784441E-004 + 134.51999999999998 9.6661111646731803E-004 + 134.57999999999998 9.8164754912280754E-004 + 134.63999999999999 9.9625249372762670E-004 + 134.69999999999999 1.0104115181704184E-003 + 134.75999999999999 1.0241108636010162E-003 + 134.81999999999999 1.0373371138193040E-003 + 134.88000000000000 1.0500773913364625E-003 + 134.94000000000000 1.0623195082018295E-003 + 135.00000000000000 1.0740515246679355E-003 + 135.06000000000000 1.0852622430505565E-003 + 135.12000000000000 1.0959407734045623E-003 + 135.18000000000001 1.1060768380221902E-003 + 135.23999999999998 1.1156605625398288E-003 + 135.29999999999998 1.1246827311995943E-003 + 135.35999999999999 1.1331344137481632E-003 + 135.41999999999999 1.1410071527036276E-003 + 135.47999999999999 1.1482931548391659E-003 + 135.53999999999999 1.1549850639293014E-003 + 135.59999999999999 1.1610758674686305E-003 + 135.66000000000000 1.1665592292401581E-003 + 135.72000000000000 1.1714291766253642E-003 + 135.78000000000000 1.1756804356848846E-003 + 135.84000000000000 1.1793079192403198E-003 + 135.90000000000001 1.1823073494981939E-003 + 135.95999999999998 1.1846748292097993E-003 + 136.01999999999998 1.1864070282046329E-003 + 136.07999999999998 1.1875011202757354E-003 + 136.13999999999999 1.1879548414939704E-003 + 136.19999999999999 1.1877662053941687E-003 + 136.25999999999999 1.1869339877677288E-003 + 136.31999999999999 1.1854571690907937E-003 + 136.38000000000000 1.1833354590510437E-003 + 136.44000000000000 1.1805686781285636E-003 + 136.50000000000000 1.1771573049512020E-003 + 136.56000000000000 1.1731020656850779E-003 + 136.62000000000000 1.1684041094999131E-003 + 136.68000000000001 1.1630649397678325E-003 + 136.73999999999998 1.1570863625125619E-003 + 136.79999999999998 1.1504706481078508E-003 + 136.85999999999999 1.1432202602833193E-003 + 136.91999999999999 1.1353380708960129E-003 + 136.97999999999999 1.1268270886918188E-003 + 137.03999999999999 1.1176907875783332E-003 + 137.09999999999999 1.1079329006364897E-003 + 137.16000000000000 1.0975573854351030E-003 + 137.22000000000000 1.0865685564136727E-003 + 137.28000000000000 1.0749709985402155E-003 + 137.34000000000000 1.0627697042999819E-003 + 137.40000000000001 1.0499698240394751E-003 + 137.45999999999998 1.0365766708433808E-003 + 137.51999999999998 1.0225961979256775E-003 + 137.57999999999998 1.0080344303104087E-003 + 137.63999999999999 9.9289775587505413E-004 + 137.69999999999999 9.7719262967567075E-004 + 137.75999999999999 9.6092603814504438E-004 + 137.81999999999999 9.4410502288373320E-004 + 137.88000000000000 9.2673704934438390E-004 + 137.94000000000000 9.0882973219363059E-004 + 138.00000000000000 8.9039090893085074E-004 + 138.06000000000000 8.7142863556913730E-004 + 138.12000000000000 8.5195128381281818E-004 + 138.18000000000001 8.3196744807874671E-004 + 138.23999999999998 8.1148587705206316E-004 + 138.29999999999998 7.9051557177101139E-004 + 138.35999999999999 7.6906571054473274E-004 + 138.41999999999999 7.4714573653199843E-004 + 138.47999999999999 7.2476540561471905E-004 + 138.53999999999999 7.0193450066503881E-004 + 138.59999999999999 6.7866320316420684E-004 + 138.66000000000000 6.5496185288802281E-004 + 138.72000000000000 6.3084103530970464E-004 + 138.78000000000000 6.0631169521381284E-004 + 138.84000000000000 5.8138489566974638E-004 + 138.90000000000001 5.5607209362936480E-004 + 138.95999999999998 5.3038496245902866E-004 + 139.01999999999998 5.0433543040520590E-004 + 139.07999999999998 4.7793582111974373E-004 + 139.13999999999999 4.5119857592334898E-004 + 139.19999999999999 4.2413658166639331E-004 + 139.25999999999999 3.9676287914968642E-004 + 139.31999999999999 3.6909088776415926E-004 + 139.38000000000000 3.4113424575563583E-004 + 139.44000000000000 3.1290690187991499E-004 + 139.50000000000000 2.8442300780406974E-004 + 139.56000000000000 2.5569701180913054E-004 + 139.62000000000000 2.2674362820051218E-004 + 139.68000000000001 1.9757775479916696E-004 + 139.73999999999998 1.6821457754349762E-004 + 139.79999999999998 1.3866948512950198E-004 + 139.85999999999999 1.0895810388380600E-004 + 139.91999999999999 7.9096283745003936E-005 + 139.97999999999999 4.9100090007836736E-005 + 140.03999999999999 1.8985790921179213E-005 + 140.09999999999999 -1.1230084017474028E-005 + 140.16000000000000 -4.1530851258557341E-005 + 140.22000000000000 -7.1899610676954734E-005 + 140.28000000000000 -1.0231927209977489E-004 + 140.34000000000000 -1.3277256857330966E-004 + 140.40000000000001 -1.6324207985815068E-004 + 140.45999999999998 -1.9371024050022996E-004 + 140.51999999999998 -2.2415935486399155E-004 + 140.57999999999998 -2.5457164911150151E-004 + 140.63999999999999 -2.8492924479841028E-004 + 140.69999999999999 -3.1521422105631802E-004 + 140.75999999999999 -3.4540865091552505E-004 + 140.81999999999999 -3.7549456361604975E-004 + 140.88000000000000 -4.0545406748690763E-004 + 140.94000000000000 -4.3526925759654713E-004 + 141.00000000000000 -4.6492231504843373E-004 + 141.06000000000000 -4.9439551707394292E-004 + 141.12000000000000 -5.2367118306943165E-004 + 141.18000000000001 -5.5273178633916857E-004 + 141.23999999999998 -5.8155997570803807E-004 + 141.29999999999998 -6.1013847913439674E-004 + 141.35999999999999 -6.3845013079175214E-004 + 141.41999999999999 -6.6647805749177921E-004 + 141.47999999999999 -6.9420544868267103E-004 + 141.53999999999999 -7.2161584066091479E-004 + 141.59999999999999 -7.4869277399501762E-004 + 141.66000000000000 -7.7542024420299656E-004 + 141.72000000000000 -8.0178244243758637E-004 + 141.78000000000000 -8.2776372829594181E-004 + 141.84000000000000 -8.5334892493555911E-004 + 141.90000000000001 -8.7852314242914560E-004 + 141.95999999999998 -9.0327175123937320E-004 + 142.01999999999998 -9.2758051241079208E-004 + 142.07999999999998 -9.5143563370129309E-004 + 142.13999999999999 -9.7482357007318851E-004 + 142.19999999999999 -9.9773132013780881E-004 + 142.25999999999999 -1.0201462255961808E-003 + 142.31999999999999 -1.0420560628847566E-003 + 142.38000000000000 -1.0634490558054813E-003 + 142.44000000000000 -1.0843135851121735E-003 + 142.50000000000000 -1.1046388055636362E-003 + 142.56000000000000 -1.1244140147449757E-003 + 142.62000000000000 -1.1436289801746260E-003 + 142.68000000000001 -1.1622739102956593E-003 + 142.73999999999998 -1.1803393928992237E-003 + 142.79999999999998 -1.1978164009098810E-003 + 142.85999999999999 -1.2146962588322858E-003 + 142.91999999999999 -1.2309705888226812E-003 + 142.97999999999999 -1.2466317540402261E-003 + 143.03999999999999 -1.2616721721945667E-003 + 143.09999999999999 -1.2760847248721701E-003 + 143.16000000000000 -1.2898627505878769E-003 + 143.22000000000000 -1.3029998669549770E-003 + 143.28000000000000 -1.3154901466471878E-003 + 143.34000000000000 -1.3273280393854524E-003 + 143.40000000000001 -1.3385081748102051E-003 + 143.45999999999998 -1.3490258787403134E-003 + 143.51999999999998 -1.3588764589548515E-003 + 143.57999999999998 -1.3680555750506162E-003 + 143.63999999999999 -1.3765594681171434E-003 + 143.69999999999999 -1.3843844092935674E-003 + 143.75999999999999 -1.3915270089448566E-003 + 143.81999999999999 -1.3979840934995910E-003 + 143.88000000000000 -1.4037526337958820E-003 + 143.94000000000000 -1.4088301374240841E-003 + 144.00000000000000 -1.4132138764253771E-003 + 144.06000000000000 -1.4169016386638214E-003 + 144.12000000000000 -1.4198912358199813E-003 + 144.18000000000001 -1.4221806680062416E-003 + 144.23999999999998 -1.4237680666706147E-003 + 144.29999999999998 -1.4246517670639437E-003 + 144.35999999999999 -1.4248303050381906E-003 + 144.41999999999999 -1.4243023876220143E-003 + 144.47999999999999 -1.4230666386295964E-003 + 144.53999999999999 -1.4211221392791073E-003 + 144.59999999999999 -1.4184678851534281E-003 + 144.66000000000000 -1.4151031908539811E-003 + 144.72000000000000 -1.4110274043325477E-003 + 144.78000000000000 -1.4062401335743178E-003 + 144.84000000000000 -1.4007412036732662E-003 + 144.90000000000001 -1.3945306782186359E-003 + 144.95999999999998 -1.3876085846740523E-003 + 145.01999999999998 -1.3799753590669731E-003 + 145.07999999999998 -1.3716316191672605E-003 + 145.13999999999999 -1.3625781836528140E-003 + 145.19999999999999 -1.3528161986685293E-003 + 145.25999999999999 -1.3423469280956996E-003 + 145.31999999999999 -1.3311720801815325E-003 + 145.38000000000000 -1.3192933587384754E-003 + 145.44000000000000 -1.3067130289967414E-003 + 145.50000000000000 -1.2934334988794114E-003 + 145.56000000000000 -1.2794575476144108E-003 + 145.62000000000000 -1.2647883317123290E-003 + 145.68000000000001 -1.2494291727554513E-003 + 145.73999999999998 -1.2333840668043599E-003 + 145.79999999999998 -1.2166570525620958E-003 + 145.85999999999999 -1.1992528030890187E-003 + 145.91999999999999 -1.1811764433606489E-003 + 145.97999999999999 -1.1624334844304877E-003 + 146.03999999999999 -1.1430299629237135E-003 + 146.09999999999999 -1.1229723880336381E-003 + 146.16000000000000 -1.1022680013185512E-003 + 146.22000000000000 -1.0809245411778693E-003 + 146.28000000000000 -1.0589504576533572E-003 + 146.34000000000000 -1.0363548880911889E-003 + 146.40000000000001 -1.0131475443381213E-003 + 146.45999999999998 -9.8933891985908775E-004 + 146.51999999999998 -9.6494027062931970E-004 + 146.57999999999998 -9.3996353882304991E-004 + 146.63999999999999 -9.1442140782638324E-004 + 146.69999999999999 -8.8832731392150463E-004 + 146.75999999999999 -8.6169541696484589E-004 + 146.81999999999999 -8.3454068154986639E-004 + 146.88000000000000 -8.0687870686503018E-004 + 146.94000000000000 -7.7872579267566097E-004 + 147.00000000000000 -7.5009904545044999E-004 + 147.06000000000000 -7.2101633076696980E-004 + 147.12000000000000 -6.9149599265635629E-004 + 147.18000000000001 -6.6155725094657245E-004 + 147.23999999999998 -6.3121998391877255E-004 + 147.29999999999998 -6.0050471780648902E-004 + 147.35999999999999 -5.6943266719276049E-004 + 147.41999999999999 -5.3802567605546424E-004 + 147.47999999999999 -5.0630635747609960E-004 + 147.53999999999999 -4.7429785710367052E-004 + 147.59999999999999 -4.4202399722853493E-004 + 147.66000000000000 -4.0950920412725553E-004 + 147.72000000000000 -3.7677849848280010E-004 + 147.78000000000000 -3.4385736939676875E-004 + 147.84000000000000 -3.1077189306581878E-004 + 147.90000000000001 -2.7754856364392371E-004 + 147.95999999999998 -2.4421424322605033E-004 + 148.01999999999998 -2.1079624876861136E-004 + 148.07999999999998 -1.7732210816525707E-004 + 148.13999999999999 -1.4381963438158660E-004 + 148.19999999999999 -1.1031681717777730E-004 + 148.25999999999999 -7.6841786811534618E-005 + 148.31999999999999 -4.3422730637993160E-005 + 148.38000000000000 -1.0087839612794350E-005 + 148.44000000000000 2.3134688140298073E-005 + 148.50000000000000 5.6216780268705358E-005 + 148.56000000000000 8.9130521030890222E-005 + 148.62000000000000 1.2184817702693649E-004 + 148.68000000000001 1.5434223655011898E-004 + 148.73999999999998 1.8658550370665225E-004 + 148.79999999999998 2.1855114334870185E-004 + 148.85999999999999 2.5021266211844106E-004 + 148.91999999999999 2.8154402484412573E-004 + 148.97999999999999 3.1251965392896445E-004 + 149.03999999999999 3.4311456669187696E-004 + 149.09999999999999 3.7330425627914621E-004 + 149.16000000000000 4.0306488944544743E-004 + 149.22000000000000 4.3237329732097784E-004 + 149.28000000000000 4.6120697021702562E-004 + 149.34000000000000 4.8954416424857423E-004 + 149.40000000000001 5.1736392279165642E-004 + 149.45999999999998 5.4464607634822253E-004 + 149.51999999999998 5.7137126328930051E-004 + 149.57999999999998 5.9752113327776507E-004 + 149.63999999999999 6.2307812575486073E-004 + 149.69999999999999 6.4802565482352244E-004 + 149.75999999999999 6.7234804341941045E-004 + 149.81999999999999 6.9603069834755919E-004 + 149.88000000000000 7.1906001214270448E-004 + 149.94000000000000 7.4142329060109739E-004 + 150.00000000000000 7.6310896288416929E-004 + 150.06000000000000 7.8410643817976354E-004 + 150.12000000000000 8.0440619541291862E-004 + 150.18000000000001 8.2399974705955610E-004 + 150.23999999999998 8.4287956360708596E-004 + 150.29999999999998 8.6103921935012039E-004 + 150.35999999999999 8.7847324535642274E-004 + 150.41999999999999 8.9517718741230717E-004 + 150.47999999999999 9.1114750746318807E-004 + 150.53999999999999 9.2638160214352698E-004 + 150.59999999999999 9.4087777984431023E-004 + 150.66000000000000 9.5463520384248012E-004 + 150.72000000000000 9.6765389179491522E-004 + 150.78000000000000 9.7993464938788549E-004 + 150.84000000000000 9.9147901999920300E-004 + 150.90000000000001 1.0022894187833101E-003 + 150.95999999999998 1.0123689351743451E-003 + 151.01999999999998 1.0217212192773350E-003 + 151.07999999999998 1.0303508045099066E-003 + 151.13999999999999 1.0382626893958662E-003 + 151.19999999999999 1.0454625808517927E-003 + 151.25999999999999 1.0519568017077622E-003 + 151.31999999999999 1.0577521695455656E-003 + 151.38000000000000 1.0628559812823847E-003 + 151.44000000000000 1.0672762336157880E-003 + 151.50000000000000 1.0710212017436618E-003 + 151.56000000000000 1.0740995608429123E-003 + 151.62000000000000 1.0765204681188448E-003 + 151.68000000000001 1.0782934756043614E-003 + 151.73999999999998 1.0794284091879339E-003 + 151.79999999999998 1.0799352512932353E-003 + 151.85999999999999 1.0798243052238556E-003 + 151.91999999999999 1.0791060937750297E-003 + 151.97999999999999 1.0777911701649622E-003 + 152.03999999999999 1.0758903264763585E-003 + 152.09999999999999 1.0734144199019469E-003 + 152.16000000000000 1.0703743448168652E-003 + 152.22000000000000 1.0667809262012485E-003 + 152.28000000000000 1.0626453159295031E-003 + 152.34000000000000 1.0579784129094980E-003 + 152.40000000000001 1.0527913129434584E-003 + 152.45999999999998 1.0470949767816572E-003 + 152.51999999999998 1.0409003262228582E-003 + 152.57999999999998 1.0342184625740719E-003 + 152.63999999999999 1.0270602893958564E-003 + 152.69999999999999 1.0194367015804546E-003 + 152.75999999999999 1.0113585966286271E-003 + 152.81999999999999 1.0028368465036424E-003 + 152.88000000000000 9.9388217855460770E-004 + 152.94000000000000 9.8450547986814142E-004 + 153.00000000000000 9.7471736288074298E-004 + 153.06000000000000 9.6452850995559412E-004 + 153.12000000000000 9.5394946176896784E-004 + 153.17999999999998 9.4299079724193642E-004 + 153.23999999999998 9.3166294399430491E-004 + 153.29999999999998 9.1997635953155479E-004 + 153.35999999999999 9.0794137655221302E-004 + 153.41999999999999 8.9556842441271755E-004 + 153.47999999999999 8.8286766393732565E-004 + 153.53999999999999 8.6984934332589789E-004 + 153.59999999999999 8.5652375413582441E-004 + 153.66000000000000 8.4290105836650072E-004 + 153.72000000000000 8.2899149935192445E-004 + 153.78000000000000 8.1480533199036406E-004 + 153.84000000000000 8.0035269493959073E-004 + 153.90000000000001 7.8564376230307010E-004 + 153.95999999999998 7.7068883598685716E-004 + 154.01999999999998 7.5549808848775245E-004 + 154.07999999999998 7.4008183182985160E-004 + 154.13999999999999 7.2445028058035123E-004 + 154.19999999999999 7.0861368127853389E-004 + 154.25999999999999 6.9258237783497117E-004 + 154.31999999999999 6.7636669295584502E-004 + 154.38000000000000 6.5997693205231082E-004 + 154.44000000000000 6.4342352629329763E-004 + 154.50000000000000 6.2671688778437773E-004 + 154.56000000000000 6.0986743043903874E-004 + 154.62000000000000 5.9288566051810812E-004 + 154.67999999999998 5.7578208434961664E-004 + 154.73999999999998 5.5856725135515841E-004 + 154.79999999999998 5.4125167682329410E-004 + 154.85999999999999 5.2384599112080348E-004 + 154.91999999999999 5.0636073706668500E-004 + 154.97999999999999 4.8880645187463401E-004 + 155.03999999999999 4.7119366116480841E-004 + 155.09999999999999 4.5353291576657919E-004 + 155.16000000000000 4.3583468239634198E-004 + 155.22000000000000 4.1810931317388716E-004 + 155.28000000000000 4.0036720853584858E-004 + 155.34000000000000 3.8261861555722958E-004 + 155.40000000000001 3.6487367217469794E-004 + 155.45999999999998 3.4714243697041872E-004 + 155.51999999999998 3.2943487479723934E-004 + 155.57999999999998 3.1176081295777966E-004 + 155.63999999999999 2.9412998026727226E-004 + 155.69999999999999 2.7655191006789305E-004 + 155.75999999999999 2.5903612905730117E-004 + 155.81999999999999 2.4159186796190101E-004 + 155.88000000000000 2.2422827360695524E-004 + 155.94000000000000 2.0695435436901029E-004 + 156.00000000000000 1.8977884587710280E-004 + 156.06000000000000 1.7271036439555365E-004 + 156.12000000000000 1.5575726617503906E-004 + 156.17999999999998 1.3892775247746310E-004 + 156.23999999999998 1.2222973664832463E-004 + 156.29999999999998 1.0567091628866491E-004 + 156.35999999999999 8.9258712593278484E-005 + 156.41999999999999 7.3000312366900804E-005 + 156.47999999999999 5.6902636010764499E-005 + 156.53999999999999 4.0972321493544853E-005 + 156.59999999999999 2.5215756405017297E-005 + 156.66000000000000 9.6390681905466410E-006 + 156.72000000000000 -5.7518850377655202E-006 + 156.78000000000000 -2.0951481755230468E-005 + 156.84000000000000 -3.5954362922119117E-005 + 156.90000000000001 -5.0755403989032885E-005 + 156.95999999999998 -6.5349714978721885E-005 + 157.01999999999998 -7.9732650124891721E-005 + 157.07999999999998 -9.3899776649903951E-005 + 157.13999999999999 -1.0784689633287855E-004 + 157.19999999999999 -1.2157001952206356E-004 + 157.25999999999999 -1.3506541348331356E-004 + 157.31999999999999 -1.4832951598483726E-004 + 157.38000000000000 -1.6135901017612291E-004 + 157.44000000000000 -1.7415077388814173E-004 + 157.50000000000000 -1.8670190127713192E-004 + 157.56000000000000 -1.9900964920807645E-004 + 157.62000000000000 -2.1107150228312358E-004 + 157.67999999999998 -2.2288509323147143E-004 + 157.73999999999998 -2.3444820543881158E-004 + 157.79999999999998 -2.4575879105277147E-004 + 157.85999999999999 -2.5681488861917533E-004 + 157.91999999999999 -2.6761470937793731E-004 + 157.97999999999999 -2.7815651153367425E-004 + 158.03999999999999 -2.8843865220870915E-004 + 158.09999999999999 -2.9845956844939926E-004 + 158.16000000000000 -3.0821778498342695E-004 + 158.22000000000000 -3.1771183771837571E-004 + 158.28000000000000 -3.2694036942693263E-004 + 158.34000000000000 -3.3590202935011924E-004 + 158.40000000000001 -3.4459553709779007E-004 + 158.45999999999998 -3.5301965305946224E-004 + 158.51999999999998 -3.6117319767433903E-004 + 158.57999999999998 -3.6905505572144219E-004 + 158.63999999999999 -3.7666410362636028E-004 + 158.69999999999999 -3.8399931710723169E-004 + 158.75999999999999 -3.9105973613803516E-004 + 158.81999999999999 -3.9784439658958632E-004 + 158.88000000000000 -4.0435243981424640E-004 + 158.94000000000000 -4.1058301908127747E-004 + 159.00000000000000 -4.1653537211820999E-004 + 159.06000000000000 -4.2220874016141516E-004 + 159.12000000000000 -4.2760240358031762E-004 + 159.17999999999998 -4.3271572826986278E-004 + 159.23999999999998 -4.3754812515676435E-004 + 159.29999999999998 -4.4209906346309242E-004 + 159.35999999999999 -4.4636812032759738E-004 + 159.41999999999999 -4.5035489381535363E-004 + 159.47999999999999 -4.5405912179102901E-004 + 159.53999999999999 -4.5748063289454002E-004 + 159.59999999999999 -4.6061937764220717E-004 + 159.66000000000000 -4.6347547182139020E-004 + 159.72000000000000 -4.6604914788794452E-004 + 159.78000000000000 -4.6834084141972288E-004 + 159.84000000000000 -4.7035114670051386E-004 + 159.90000000000001 -4.7208088993400273E-004 + 159.95999999999998 -4.7353105707982342E-004 + 160.01999999999998 -4.7470285954914510E-004 + 160.07999999999998 -4.7559785614215730E-004 + 160.13999999999999 -4.7621765724496057E-004 + 160.19999999999999 -4.7656429832542579E-004 + 160.25999999999999 -4.7664002067866317E-004 + 160.31999999999999 -4.7644737033584317E-004 + 160.38000000000000 -4.7598913063627064E-004 + 160.44000000000000 -4.7526842075342927E-004 + 160.50000000000000 -4.7428871698440437E-004 + 160.56000000000000 -4.7305379487248074E-004 + 160.62000000000000 -4.7156773130636496E-004 + 160.67999999999998 -4.6983498579107076E-004 + 160.73999999999998 -4.6786040842094432E-004 + 160.79999999999998 -4.6564910599091987E-004 + 160.85999999999999 -4.6320662153196486E-004 + 160.91999999999999 -4.6053886740484893E-004 + 160.97999999999999 -4.5765210084255595E-004 + 161.03999999999999 -4.5455290968829842E-004 + 161.09999999999999 -4.5124825981866285E-004 + 161.16000000000000 -4.4774547632499598E-004 + 161.22000000000000 -4.4405220578033446E-004 + 161.28000000000000 -4.4017645210855006E-004 + 161.34000000000000 -4.3612657270252278E-004 + 161.40000000000001 -4.3191120139694463E-004 + 161.45999999999998 -4.2753926627519005E-004 + 161.51999999999998 -4.2302010091793294E-004 + 161.57999999999998 -4.1836324398455163E-004 + 161.63999999999999 -4.1357852198572938E-004 + 161.69999999999999 -4.0867611376257490E-004 + 161.75999999999999 -4.0366640223576803E-004 + 161.81999999999999 -3.9856000730268038E-004 + 161.88000000000000 -3.9336780980538382E-004 + 161.94000000000000 -3.8810082872394347E-004 + 162.00000000000000 -3.8277029449547753E-004 + 162.06000000000000 -3.7738756426073853E-004 + 162.12000000000000 -3.7196417461756955E-004 + 162.17999999999998 -3.6651165571892499E-004 + 162.23999999999998 -3.6104162463834473E-004 + 162.29999999999998 -3.5556567442820752E-004 + 162.35999999999999 -3.5009543163727277E-004 + 162.41999999999999 -3.4464242223564086E-004 + 162.47999999999999 -3.3921807763955192E-004 + 162.53999999999999 -3.3383374799714200E-004 + 162.59999999999999 -3.2850062946060860E-004 + 162.66000000000000 -3.2322971423258282E-004 + 162.72000000000000 -3.1803183128816540E-004 + 162.78000000000000 -3.1291759962385438E-004 + 162.84000000000000 -3.0789735628009929E-004 + 162.90000000000001 -3.0298120053582278E-004 + 162.95999999999998 -2.9817891690813228E-004 + 163.01999999999998 -2.9350000719357612E-004 + 163.07999999999998 -2.8895361103638398E-004 + 163.13999999999999 -2.8454852043274901E-004 + 163.19999999999999 -2.8029308552727573E-004 + 163.25999999999999 -2.7619527771747626E-004 + 163.31999999999999 -2.7226258170027183E-004 + 163.38000000000000 -2.6850199420798919E-004 + 163.44000000000000 -2.6492003090790328E-004 + 163.50000000000000 -2.6152259094239894E-004 + 163.56000000000000 -2.5831506719010521E-004 + 163.62000000000000 -2.5530220397679423E-004 + 163.67999999999998 -2.5248819177836216E-004 + 163.73999999999998 -2.4987656220997839E-004 + 163.79999999999998 -2.4747022249572824E-004 + 163.85999999999999 -2.4527143490305799E-004 + 163.91999999999999 -2.4328187095968380E-004 + 163.97999999999999 -2.4150249761729334E-004 + 164.03999999999999 -2.3993369330957304E-004 + 164.09999999999999 -2.3857516404720473E-004 + 164.16000000000000 -2.3742603812564140E-004 + 164.22000000000000 -2.3648480969274338E-004 + 164.28000000000000 -2.3574934972226422E-004 + 164.34000000000000 -2.3521695441396358E-004 + 164.40000000000001 -2.3488428491270943E-004 + 164.45999999999998 -2.3474744731248257E-004 + 164.51999999999998 -2.3480195963876537E-004 + 164.57999999999998 -2.3504273915649711E-004 + 164.63999999999999 -2.3546415711077194E-004 + 164.69999999999999 -2.3606004648820932E-004 + 164.75999999999999 -2.3682368968875060E-004 + 164.81999999999999 -2.3774784710038340E-004 + 164.88000000000000 -2.3882480880483512E-004 + 164.94000000000000 -2.4004634963966317E-004 + 165.00000000000000 -2.4140377134033539E-004 + 165.06000000000000 -2.4288804085347758E-004 + 165.12000000000000 -2.4448965686126853E-004 + 165.17999999999998 -2.4619879381681674E-004 + 165.23999999999998 -2.4800527206459783E-004 + 165.29999999999998 -2.4989865791473216E-004 + 165.35999999999999 -2.5186826668107201E-004 + 165.41999999999999 -2.5390317669586013E-004 + 165.47999999999999 -2.5599232659412937E-004 + 165.53999999999999 -2.5812446632021138E-004 + 165.59999999999999 -2.6028829772684260E-004 + 165.66000000000000 -2.6247243497428492E-004 + 165.72000000000000 -2.6466550426708954E-004 + 165.78000000000000 -2.6685612304319585E-004 + 165.84000000000000 -2.6903295611092063E-004 + 165.90000000000001 -2.7118476381035280E-004 + 165.95999999999998 -2.7330044442982235E-004 + 166.01999999999998 -2.7536906081831151E-004 + 166.07999999999998 -2.7737984752278379E-004 + 166.13999999999999 -2.7932228308352286E-004 + 166.19999999999999 -2.8118613237004071E-004 + 166.25999999999999 -2.8296141946699150E-004 + 166.31999999999999 -2.8463850881726413E-004 + 166.38000000000000 -2.8620807880414846E-004 + 166.44000000000000 -2.8766120246769700E-004 + 166.50000000000000 -2.8898930770320473E-004 + 166.56000000000000 -2.9018428741570904E-004 + 166.62000000000000 -2.9123838322321621E-004 + 166.67999999999998 -2.9214438233215925E-004 + 166.73999999999998 -2.9289545670038459E-004 + 166.79999999999998 -2.9348536472964174E-004 + 166.85999999999999 -2.9390829592737202E-004 + 166.91999999999999 -2.9415899290895914E-004 + 166.97999999999999 -2.9423278904509235E-004 + 167.03999999999999 -2.9412555097185907E-004 + 167.09999999999999 -2.9383373061690814E-004 + 167.16000000000000 -2.9335441344858484E-004 + 167.22000000000000 -2.9268529024315253E-004 + 167.28000000000000 -2.9182466328109052E-004 + 167.34000000000000 -2.9077145327745149E-004 + 167.40000000000001 -2.8952525425601387E-004 + 167.45999999999998 -2.8808631189999125E-004 + 167.51999999999998 -2.8645538517436654E-004 + 167.57999999999998 -2.8463390068940263E-004 + 167.63999999999999 -2.8262382440169488E-004 + 167.69999999999999 -2.8042776498733002E-004 + 167.75999999999999 -2.7804879860060039E-004 + 167.81999999999999 -2.7549054802672500E-004 + 167.88000000000000 -2.7275715330345857E-004 + 167.94000000000000 -2.6985315662213211E-004 + 168.00000000000000 -2.6678361178693061E-004 + 168.06000000000000 -2.6355395479903571E-004 + 168.12000000000000 -2.6017004702617863E-004 + 168.17999999999998 -2.5663816739421172E-004 + 168.23999999999998 -2.5296491006919947E-004 + 168.29999999999998 -2.4915728645417197E-004 + 168.35999999999999 -2.4522263339068616E-004 + 168.41999999999999 -2.4116860643711062E-004 + 168.47999999999999 -2.3700319713680117E-004 + 168.53999999999999 -2.3273469133445270E-004 + 168.59999999999999 -2.2837161722097751E-004 + 168.66000000000000 -2.2392277026402776E-004 + 168.72000000000000 -2.1939716112061571E-004 + 168.78000000000000 -2.1480397170765828E-004 + 168.84000000000000 -2.1015252574814024E-004 + 168.90000000000001 -2.0545223921678758E-004 + 168.95999999999998 -2.0071260142634205E-004 + 169.01999999999998 -1.9594311626992676E-004 + 169.07999999999998 -1.9115324048767820E-004 + 169.13999999999999 -1.8635240185317463E-004 + 169.19999999999999 -1.8154989471290612E-004 + 169.25999999999999 -1.7675489482032740E-004 + 169.31999999999999 -1.7197639806697842E-004 + 169.38000000000000 -1.6722319174630179E-004 + 169.44000000000000 -1.6250385195116569E-004 + 169.50000000000000 -1.5782670923104151E-004 + 169.56000000000000 -1.5319980454562242E-004 + 169.62000000000000 -1.4863092992994427E-004 + 169.67999999999998 -1.4412755301858933E-004 + 169.73999999999998 -1.3969682928303701E-004 + 169.79999999999998 -1.3534561116288060E-004 + 169.85999999999999 -1.3108037571205077E-004 + 169.91999999999999 -1.2690726161743314E-004 + 169.97999999999999 -1.2283204715935728E-004 + 170.03999999999999 -1.1886010658084687E-004 + 170.09999999999999 -1.1499643990444545E-004 + 170.16000000000000 -1.1124562076381765E-004 + 170.22000000000000 -1.0761180464359340E-004 + 170.28000000000000 -1.0409870760007648E-004 + 170.34000000000000 -1.0070961587057362E-004 + 170.40000000000001 -9.7447341405259671E-005 + 170.45999999999998 -9.4314248154798866E-005 + 170.51999999999998 -9.1312231356195089E-005 + 170.57999999999998 -8.8442706374853159E-005 + 170.63999999999999 -8.5706610357998730E-005 + 170.69999999999999 -8.3104408212033467E-005 + 170.75999999999999 -8.0636084697646349E-005 + 170.81999999999999 -7.8301144946007502E-005 + 170.88000000000000 -7.6098639481588209E-005 + 170.94000000000000 -7.4027150813351609E-005 + 171.00000000000000 -7.2084791163245292E-005 + 171.06000000000000 -7.0269239424803281E-005 + 171.12000000000000 -6.8577727824771186E-005 + 171.17999999999998 -6.7007091674721719E-005 + 171.23999999999998 -6.5553749328164162E-005 + 171.29999999999998 -6.4213745984729870E-005 + 171.35999999999999 -6.2982762086785145E-005 + 171.41999999999999 -6.1856152322029934E-005 + 171.47999999999999 -6.0828958569977071E-005 + 171.53999999999999 -5.9895942638009826E-005 + 171.59999999999999 -5.9051605523527405E-005 + 171.66000000000000 -5.8290219753086671E-005 + 171.72000000000000 -5.7605861649635101E-005 + 171.78000000000000 -5.6992424559048202E-005 + 171.84000000000000 -5.6443634849257536E-005 + 171.90000000000001 -5.5953094952543100E-005 + 171.95999999999998 -5.5514272427994610E-005 + 172.01999999999998 -5.5120542912178309E-005 + 172.07999999999998 -5.4765187388658554E-005 + 172.13999999999999 -5.4441427234912327E-005 + 172.19999999999999 -5.4142413905423117E-005 + 172.25999999999999 -5.3861264378139733E-005 + 172.31999999999999 -5.3591078712134232E-005 + 172.38000000000000 -5.3324937966868163E-005 + 172.44000000000000 -5.3055957302088308E-005 + 172.50000000000000 -5.2777285683460435E-005 + 172.56000000000000 -5.2482132898758272E-005 + 172.62000000000000 -5.2163814629622251E-005 + 172.67999999999998 -5.1815764170211502E-005 + 172.73999999999998 -5.1431566453002332E-005 + 172.79999999999998 -5.1004982375720913E-005 + 172.85999999999999 -5.0529984963046641E-005 + 172.91999999999999 -5.0000787459906929E-005 + 172.97999999999999 -4.9411839424882304E-005 + 173.03999999999999 -4.8757877458290659E-005 + 173.09999999999999 -4.8033921112491991E-005 + 173.16000000000000 -4.7235295940261139E-005 + 173.22000000000000 -4.6357632608329168E-005 + 173.28000000000000 -4.5396883657604158E-005 + 173.34000000000000 -4.4349312889481568E-005 + 173.40000000000001 -4.3211505520852850E-005 + 173.45999999999998 -4.1980368025189399E-005 + 173.51999999999998 -4.0653126142506337E-005 + 173.57999999999998 -3.9227327256380038E-005 + 173.63999999999999 -3.7700844343437840E-005 + 173.69999999999999 -3.6071869949130610E-005 + 173.75999999999999 -3.4338927582345158E-005 + 173.81999999999999 -3.2500874373600695E-005 + 173.88000000000000 -3.0556902853913712E-005 + 173.94000000000000 -2.8506550387046534E-005 + 174.00000000000000 -2.6349694725239347E-005 + 174.06000000000000 -2.4086561888296480E-005 + 174.12000000000000 -2.1717734349977124E-005 + 174.17999999999998 -1.9244142923763991E-005 + 174.23999999999998 -1.6667060818512920E-005 + 174.29999999999998 -1.3988111894433229E-005 + 174.35999999999999 -1.1209248365219793E-005 + 174.41999999999999 -8.3327466026591595E-006 + 174.47999999999999 -5.3611994679027341E-006 + 174.53999999999999 -2.2975015565868885E-006 + 174.59999999999999 8.5517060712675814E-007 + 174.66000000000000 4.0933589138810337E-006 + 174.72000000000000 7.4133611543880033E-006 + 174.78000000000000 1.0811226132850904E-005 + 174.84000000000000 1.4282783349809613E-005 + 174.90000000000001 1.7823651780134562E-005 + 174.95999999999998 2.1429259694550973E-005 + 175.01999999999998 2.5094866606478927E-005 + 175.07999999999998 2.8815569403682022E-005 + 175.13999999999999 3.2586329748337830E-005 + 175.19999999999999 3.6401985943236998E-005 + 175.25999999999999 4.0257290480928026E-005 + 175.31999999999999 4.4146903330083133E-005 + 175.38000000000000 4.8065441760496803E-005 + 175.44000000000000 5.2007476656939395E-005 + 175.50000000000000 5.5967576900863738E-005 + 175.56000000000000 5.9940318505761857E-005 + 175.62000000000000 6.3920299547433703E-005 + 175.67999999999998 6.7902172581042530E-005 + 175.73999999999998 7.1880653567874336E-005 + 175.79999999999998 7.5850520867272247E-005 + 175.85999999999999 7.9806662034124571E-005 + 175.91999999999999 8.3744055199672283E-005 + 175.97999999999999 8.7657796450756018E-005 + 176.03999999999999 9.1543090547558317E-005 + 176.09999999999999 9.5395276568992945E-005 + 176.16000000000000 9.9209841750250196E-005 + 176.22000000000000 1.0298240113934822E-004 + 176.28000000000000 1.0670873547576304E-004 + 176.34000000000000 1.1038480180614754E-004 + 176.40000000000001 1.1400672225973549E-004 + 176.45999999999998 1.1757082625253441E-004 + 176.51999999999998 1.2107366107756987E-004 + 176.57999999999998 1.2451199881947412E-004 + 176.63999999999999 1.2788285970290406E-004 + 176.69999999999999 1.3118351972157127E-004 + 176.75999999999999 1.3441155614589461E-004 + 176.81999999999999 1.3756480030352214E-004 + 176.88000000000000 1.4064138444502556E-004 + 176.94000000000000 1.4363976306902714E-004 + 177.00000000000000 1.4655868796060344E-004 + 177.06000000000000 1.4939721290378762E-004 + 177.12000000000000 1.5215470303962223E-004 + 177.17999999999998 1.5483081269694089E-004 + 177.23999999999998 1.5742546188159958E-004 + 177.29999999999998 1.5993887141719566E-004 + 177.35999999999999 1.6237151274058745E-004 + 177.41999999999999 1.6472409919753508E-004 + 177.47999999999999 1.6699759959133443E-004 + 177.53999999999999 1.6919320275278149E-004 + 177.59999999999999 1.7131231565001723E-004 + 177.66000000000000 1.7335653970805171E-004 + 177.72000000000000 1.7532769716645274E-004 + 177.78000000000000 1.7722780372926540E-004 + 177.84000000000000 1.7905903794474638E-004 + 177.90000000000001 1.8082378199193555E-004 + 177.95999999999998 1.8252458840217707E-004 + 178.01999999999998 1.8416414214137539E-004 + 178.07999999999998 1.8574530220204368E-004 + 178.13999999999999 1.8727108004277157E-004 + 178.19999999999999 1.8874458140166343E-004 + 178.25999999999999 1.9016905078579827E-004 + 178.31999999999999 1.9154780786042705E-004 + 178.38000000000000 1.9288424296687461E-004 + 178.44000000000000 1.9418182905231050E-004 + 178.50000000000000 1.9544406162168922E-004 + 178.56000000000000 1.9667445064193250E-004 + 178.62000000000000 1.9787654242401625E-004 + 178.67999999999998 1.9905380286882173E-004 + 178.73999999999998 2.0020970871699158E-004 + 178.79999999999998 2.0134766849354713E-004 + 178.85999999999999 2.0247102610768876E-004 + 178.91999999999999 2.0358303830444278E-004 + 178.97999999999999 2.0468684106100061E-004 + 179.03999999999999 2.0578547196493555E-004 + 179.09999999999999 2.0688183124189258E-004 + 179.16000000000000 2.0797866606571996E-004 + 179.22000000000000 2.0907856100242252E-004 + 179.28000000000000 2.1018391345239089E-004 + 179.34000000000000 2.1129697614502219E-004 + 179.40000000000001 2.1241975904328974E-004 + 179.45999999999998 2.1355410642019278E-004 + 179.51999999999998 2.1470163740197382E-004 + 179.57999999999998 2.1586375617713355E-004 + 179.63999999999999 2.1704164053774498E-004 + 179.69999999999999 2.1823625628475873E-004 + 179.75999999999999 2.1944837336558356E-004 + 179.81999999999999 2.2067851129586318E-004 + 179.88000000000000 2.2192700262765983E-004 + 179.94000000000000 2.2319396200265712E-004 + 180.00000000000000 2.2447926061454400E-004 + 180.06000000000000 2.2578263918565132E-004 + 180.12000000000000 2.2710356501898327E-004 + 180.17999999999998 2.2844132940257891E-004 + 180.23999999999998 2.2979501844316383E-004 + 180.29999999999998 2.3116351426795149E-004 + 180.35999999999999 2.3254549505976230E-004 + 180.41999999999999 2.3393942086278064E-004 + 180.47999999999999 2.3534352061418178E-004 + 180.53999999999999 2.3675586717558737E-004 + 180.59999999999999 2.3817426771998565E-004 + 180.66000000000000 2.3959636780549072E-004 + 180.72000000000000 2.4101962005323722E-004 + 180.78000000000000 2.4244127716799467E-004 + 180.84000000000000 2.4385845853884850E-004 + 180.90000000000001 2.4526812335624550E-004 + 180.95999999999998 2.4666713368520863E-004 + 181.01999999999998 2.4805220114667171E-004 + 181.07999999999998 2.4942003070424354E-004 + 181.13999999999999 2.5076726080874216E-004 + 181.19999999999999 2.5209051348174286E-004 + 181.25999999999999 2.5338638530808343E-004 + 181.31999999999999 2.5465149841385012E-004 + 181.38000000000000 2.5588252408161890E-004 + 181.44000000000000 2.5707620667391969E-004 + 181.50000000000000 2.5822933989928765E-004 + 181.56000000000000 2.5933881223226454E-004 + 181.62000000000000 2.6040154609669825E-004 + 181.67999999999998 2.6141460103411789E-004 + 181.73999999999998 2.6237511795911185E-004 + 181.79999999999998 2.6328033301075229E-004 + 181.85999999999999 2.6412752439186854E-004 + 181.91999999999999 2.6491415163292572E-004 + 181.97999999999999 2.6563778478164889E-004 + 182.03999999999999 2.6629605646803252E-004 + 182.09999999999999 2.6688680934710114E-004 + 182.16000000000000 2.6740798800672341E-004 + 182.22000000000000 2.6785769086509146E-004 + 182.28000000000000 2.6823423528627008E-004 + 182.34000000000000 2.6853610642967501E-004 + 182.39999999999998 2.6876200029429348E-004 + 182.45999999999998 2.6891085020564262E-004 + 182.51999999999998 2.6898180666074071E-004 + 182.57999999999998 2.6897430863809788E-004 + 182.63999999999999 2.6888799905968127E-004 + 182.69999999999999 2.6872281016425751E-004 + 182.75999999999999 2.6847891091822556E-004 + 182.81999999999999 2.6815671639523065E-004 + 182.88000000000000 2.6775689969632993E-004 + 182.94000000000000 2.6728039863511987E-004 + 183.00000000000000 2.6672834073340388E-004 + 183.06000000000000 2.6610211162763367E-004 + 183.12000000000000 2.6540329421731484E-004 + 183.17999999999998 2.6463366683873339E-004 + 183.23999999999998 2.6379523806209368E-004 + 183.29999999999998 2.6289011798236048E-004 + 183.35999999999999 2.6192064509136597E-004 + 183.41999999999999 2.6088926705300199E-004 + 183.47999999999999 2.5979861851677805E-004 + 183.53999999999999 2.5865142349483023E-004 + 183.59999999999999 2.5745052959974372E-004 + 183.66000000000000 2.5619891670657351E-004 + 183.72000000000000 2.5489957274150998E-004 + 183.78000000000000 2.5355566401465596E-004 + 183.84000000000000 2.5217037641929192E-004 + 183.89999999999998 2.5074700145635051E-004 + 183.95999999999998 2.4928882332915547E-004 + 184.01999999999998 2.4779918164005970E-004 + 184.07999999999998 2.4628145409308171E-004 + 184.13999999999999 2.4473905484419061E-004 + 184.19999999999999 2.4317539508820395E-004 + 184.25999999999999 2.4159391098995002E-004 + 184.31999999999999 2.3999799889346332E-004 + 184.38000000000000 2.3839103949122156E-004 + 184.44000000000000 2.3677639589989212E-004 + 184.50000000000000 2.3515736335497084E-004 + 184.56000000000000 2.3353720758975764E-004 + 184.62000000000000 2.3191908589457010E-004 + 184.67999999999998 2.3030606957554520E-004 + 184.73999999999998 2.2870109106987071E-004 + 184.79999999999998 2.2710696543735571E-004 + 184.85999999999999 2.2552634138624014E-004 + 184.91999999999999 2.2396172040428240E-004 + 184.97999999999999 2.2241543686860252E-004 + 185.03999999999999 2.2088959360030459E-004 + 185.09999999999999 2.1938611600062362E-004 + 185.16000000000000 2.1790675089028525E-004 + 185.22000000000000 2.1645299169319122E-004 + 185.28000000000000 2.1502618308429002E-004 + 185.34000000000000 2.1362741848331385E-004 + 185.39999999999998 2.1225767164319574E-004 + 185.45999999999998 2.1091767844196436E-004 + 185.51999999999998 2.0960806047666186E-004 + 185.57999999999998 2.0832926057103523E-004 + 185.63999999999999 2.0708159246922089E-004 + 185.69999999999999 2.0586522572406884E-004 + 185.75999999999999 2.0468021282159108E-004 + 185.81999999999999 2.0352649372812164E-004 + 185.88000000000000 2.0240387082964058E-004 + 185.94000000000000 2.0131206394331780E-004 + 186.00000000000000 2.0025066766654696E-004 + 186.06000000000000 1.9921917896727179E-004 + 186.12000000000000 1.9821697451889527E-004 + 186.17999999999998 1.9724330706158763E-004 + 186.23999999999998 1.9629737348842829E-004 + 186.29999999999998 1.9537823016233560E-004 + 186.35999999999999 1.9448485448490883E-004 + 186.41999999999999 1.9361614279354719E-004 + 186.47999999999999 1.9277093568787981E-004 + 186.53999999999999 1.9194799807223893E-004 + 186.59999999999999 1.9114608054056123E-004 + 186.66000000000000 1.9036393646268440E-004 + 186.72000000000000 1.8960030449941592E-004 + 186.78000000000000 1.8885394035104017E-004 + 186.84000000000000 1.8812367517043462E-004 + 186.89999999999998 1.8740840526061431E-004 + 186.95999999999998 1.8670713637370352E-004 + 187.01999999999998 1.8601896288846686E-004 + 187.07999999999998 1.8534312050128357E-004 + 187.13999999999999 1.8467898785109495E-004 + 187.19999999999999 1.8402608438070471E-004 + 187.25999999999999 1.8338411235119245E-004 + 187.31999999999999 1.8275293488362787E-004 + 187.38000000000000 1.8213256584601820E-004 + 187.44000000000000 1.8152323572661212E-004 + 187.50000000000000 1.8092530749753977E-004 + 187.56000000000000 1.8033936581952740E-004 + 187.62000000000000 1.7976617418364959E-004 + 187.67999999999998 1.7920664483122090E-004 + 187.73999999999998 1.7866188762189676E-004 + 187.79999999999998 1.7813317146474493E-004 + 187.85999999999999 1.7762196397498587E-004 + 187.91999999999999 1.7712987770959754E-004 + 187.97999999999999 1.7665869220166575E-004 + 188.03999999999999 1.7621034436305754E-004 + 188.09999999999999 1.7578695180374250E-004 + 188.16000000000000 1.7539073662935825E-004 + 188.22000000000000 1.7502410365999972E-004 + 188.28000000000000 1.7468957542846961E-004 + 188.34000000000000 1.7438979236703028E-004 + 188.39999999999998 1.7412754214619479E-004 + 188.45999999999998 1.7390572154557651E-004 + 188.51999999999998 1.7372730485976014E-004 + 188.57999999999998 1.7359537926846434E-004 + 188.63999999999999 1.7351312242559581E-004 + 188.69999999999999 1.7348378083662170E-004 + 188.75999999999999 1.7351065152170465E-004 + 188.81999999999999 1.7359707615688603E-004 + 188.88000000000000 1.7374639374015345E-004 + 188.94000000000000 1.7396198643542497E-004 + 189.00000000000000 1.7424717140049751E-004 + 189.06000000000000 1.7460524641733143E-004 + 189.12000000000000 1.7503942801221108E-004 + 189.17999999999998 1.7555282045723266E-004 + 189.23999999999998 1.7614838029094413E-004 + 189.29999999999998 1.7682894941759651E-004 + 189.35999999999999 1.7759713235297159E-004 + 189.41999999999999 1.7845535055272701E-004 + 189.47999999999999 1.7940576476517994E-004 + 189.53999999999999 1.8045030040174346E-004 + 189.59999999999999 1.8159059673201916E-004 + 189.66000000000000 1.8282799037350298E-004 + 189.72000000000000 1.8416350889484233E-004 + 189.78000000000000 1.8559788726058441E-004 + 189.84000000000000 1.8713148631875195E-004 + 189.89999999999998 1.8876436104081214E-004 + 189.95999999999998 1.9049625125396020E-004 + 190.01999999999998 1.9232651147273067E-004 + 190.07999999999998 1.9425416207468358E-004 + 190.13999999999999 1.9627787238455134E-004 + 190.19999999999999 1.9839593952589396E-004 + 190.25999999999999 2.0060628813022143E-004 + 190.31999999999999 2.0290646859589325E-004 + 190.38000000000000 2.0529363671704844E-004 + 190.44000000000000 2.0776455648933325E-004 + 190.50000000000000 2.1031557413172180E-004 + 190.56000000000000 2.1294262978426503E-004 + 190.62000000000000 2.1564125111406843E-004 + 190.67999999999998 2.1840651151402464E-004 + 190.73999999999998 2.2123309168290811E-004 + 190.79999999999998 2.2411523432363557E-004 + 190.85999999999999 2.2704678428497595E-004 + 190.91999999999999 2.3002115848299353E-004 + 190.97999999999999 2.3303140454527242E-004 + 191.03999999999999 2.3607019775254143E-004 + 191.09999999999999 2.3912985604048847E-004 + 191.16000000000000 2.4220238556154432E-004 + 191.22000000000000 2.4527949081636129E-004 + 191.28000000000000 2.4835261314072788E-004 + 191.34000000000000 2.5141295396175471E-004 + 191.39999999999998 2.5445152329676323E-004 + 191.45999999999998 2.5745911875079476E-004 + 191.51999999999998 2.6042644751354859E-004 + 191.57999999999998 2.6334408480252448E-004 + 191.63999999999999 2.6620253036934479E-004 + 191.69999999999999 2.6899225484195149E-004 + 191.75999999999999 2.7170370188138416E-004 + 191.81999999999999 2.7432731148926487E-004 + 191.88000000000000 2.7685359336715215E-004 + 191.94000000000000 2.7927315853461471E-004 + 192.00000000000000 2.8157669604258535E-004 + 192.06000000000000 2.8375510785864081E-004 + 192.12000000000000 2.8579938369018622E-004 + 192.17999999999998 2.8770076975542937E-004 + 192.23999999999998 2.8945074697220004E-004 + 192.29999999999998 2.9104105625807233E-004 + 192.35999999999999 2.9246376225503803E-004 + 192.41999999999999 2.9371121840929607E-004 + 192.47999999999999 2.9477624064908596E-004 + 192.53999999999999 2.9565195018402843E-004 + 192.59999999999999 2.9633193275238438E-004 + 192.66000000000000 2.9681028498676964E-004 + 192.72000000000000 2.9708153259412032E-004 + 192.78000000000000 2.9714079570865082E-004 + 192.84000000000000 2.9698372057450210E-004 + 192.89999999999998 2.9660652449725085E-004 + 192.95999999999998 2.9600613279460140E-004 + 193.01999999999998 2.9518000634235885E-004 + 193.07999999999998 2.9412631972890218E-004 + 193.13999999999999 2.9284396041447065E-004 + 193.19999999999999 2.9133244181106120E-004 + 193.25999999999999 2.8959204426983484E-004 + 193.31999999999999 2.8762377925191818E-004 + 193.38000000000000 2.8542932952035200E-004 + 193.44000000000000 2.8301110438114447E-004 + 193.50000000000000 2.8037230212282673E-004 + 193.56000000000000 2.7751675340349926E-004 + 193.62000000000000 2.7444900394199296E-004 + 193.67999999999998 2.7117434253723344E-004 + 193.73999999999998 2.6769869918625736E-004 + 193.79999999999998 2.6402866408587280E-004 + 193.85999999999999 2.6017151562039199E-004 + 193.91999999999999 2.5613511545896081E-004 + 193.97999999999999 2.5192797947186883E-004 + 194.03999999999999 2.4755920322715945E-004 + 194.09999999999999 2.4303846223617712E-004 + 194.16000000000000 2.3837600877955187E-004 + 194.22000000000000 2.3358261129612540E-004 + 194.28000000000000 2.2866956993647749E-004 + 194.34000000000000 2.2364869690083878E-004 + 194.39999999999998 2.1853223045768247E-004 + 194.45999999999998 2.1333286503468968E-004 + 194.51999999999998 2.0806371914011300E-004 + 194.57999999999998 2.0273823238349829E-004 + 194.63999999999999 1.9737021191669767E-004 + 194.69999999999999 1.9197375841024326E-004 + 194.75999999999999 1.8656315460132634E-004 + 194.81999999999999 1.8115296815130822E-004 + 194.88000000000000 1.7575785715299056E-004 + 194.94000000000000 1.7039260740904958E-004 + 195.00000000000000 1.6507203761345382E-004 + 195.06000000000000 1.5981101174195324E-004 + 195.12000000000000 1.5462431704365399E-004 + 195.17999999999998 1.4952670874069339E-004 + 195.23999999999998 1.4453279729037066E-004 + 195.29999999999998 1.3965700675380545E-004 + 195.35999999999999 1.3491355813896458E-004 + 195.41999999999999 1.3031646920644684E-004 + 195.47999999999999 1.2587946953204784E-004 + 195.53999999999999 1.2161597534083947E-004 + 195.59999999999999 1.1753905670018918E-004 + 195.66000000000000 1.1366142681218234E-004 + 195.72000000000000 1.0999537723728261E-004 + 195.78000000000000 1.0655277962821230E-004 + 195.84000000000000 1.0334503147868308E-004 + 195.89999999999998 1.0038304165352108E-004 + 195.95999999999998 9.7677197599118851E-005 + 196.01999999999998 9.5237358589142466E-005 + 196.07999999999998 9.3072776518207922E-005 + 196.13999999999999 9.1192117963720555E-005 + 196.19999999999999 8.9603432497384263E-005 + 196.25999999999999 8.8314112691725995E-005 + 196.31999999999999 8.7330907744183971E-005 + 196.38000000000000 8.6659877550109617E-005 + 196.44000000000000 8.6306404519027904E-005 + 196.50000000000000 8.6275165568762039E-005 + 196.56000000000000 8.6570114672984656E-005 + 196.62000000000000 8.7194513826637548E-005 + 196.67999999999998 8.8150918842733089E-005 + 196.73999999999998 8.9441169024175908E-005 + 196.79999999999998 9.1066389750078266E-005 + 196.85999999999999 9.3027014292648637E-005 + 196.91999999999999 9.5322781320936640E-005 + 196.97999999999999 9.7952744818852725E-005 + 197.03999999999999 1.0091528766923014E-004 + 197.09999999999999 1.0420813884506284E-004 + 197.16000000000000 1.0782838445134511E-004 + 197.22000000000000 1.1177246645755205E-004 + 197.28000000000000 1.1603623205274860E-004 + 197.34000000000000 1.2061493514632131E-004 + 197.39999999999998 1.2550320672909766E-004 + 197.45999999999998 1.3069516761721832E-004 + 197.51999999999998 1.3618434773551879E-004 + 197.57999999999998 1.4196377089168452E-004 + 197.63999999999999 1.4802594901647574E-004 + 197.69999999999999 1.5436291020354392E-004 + 197.75999999999999 1.6096619674065428E-004 + 197.81999999999999 1.6782687385649681E-004 + 197.88000000000000 1.7493562957433077E-004 + 197.94000000000000 1.8228268845184290E-004 + 198.00000000000000 1.8985791693637197E-004 + 198.06000000000000 1.9765079087857341E-004 + 198.12000000000000 2.0565045079238103E-004 + 198.17999999999998 2.1384570648430744E-004 + 198.23999999999998 2.2222509109770099E-004 + 198.29999999999998 2.3077684582804937E-004 + 198.35999999999999 2.3948895593258124E-004 + 198.41999999999999 2.4834919299402785E-004 + 198.47999999999999 2.5734512073006947E-004 + 198.53999999999999 2.6646414882869091E-004 + 198.59999999999999 2.7569351307127191E-004 + 198.66000000000000 2.8502031430848563E-004 + 198.72000000000000 2.9443155274011952E-004 + 198.78000000000000 3.0391414152665402E-004 + 198.84000000000000 3.1345487332693904E-004 + 198.89999999999998 3.2304050811841992E-004 + 198.95999999999998 3.3265772974842362E-004 + 199.01999999999998 3.4229321148172701E-004 + 199.07999999999998 3.5193357417152789E-004 + 199.13999999999999 3.6156544639202550E-004 + 199.19999999999999 3.7117542432445769E-004 + 199.25999999999999 3.8075013991552286E-004 + 199.31999999999999 3.9027616134565385E-004 + 199.38000000000000 3.9974016430467945E-004 + 199.44000000000000 4.0912882752788848E-004 + 199.50000000000000 4.1842892948878134E-004 + 199.56000000000000 4.2762724294593830E-004 + 199.62000000000000 4.3671062707105267E-004 + 199.67999999999998 4.4566600425883048E-004 + 199.73999999999998 4.5448054650583933E-004 + 199.79999999999998 4.6314134624901191E-004 + 199.85999999999999 4.7163572929247302E-004 + 199.91999999999999 4.7995112574102778E-004 + 199.97999999999999 4.8807517250073470E-004 + 200.03999999999999 4.9599559363828105E-004 + 200.09999999999999 5.0370032571113910E-004 + 200.16000000000000 5.1117750410496375E-004 + 200.22000000000000 5.1841535505431997E-004 + 200.28000000000000 5.2540237603627298E-004 + 200.34000000000000 5.3212726138774584E-004 + 200.39999999999998 5.3857886826945553E-004 + 200.45999999999998 5.4474624775461200E-004 + 200.51999999999998 5.5061871213423440E-004 + 200.57999999999998 5.5618578835661279E-004 + 200.63999999999999 5.6143724315048393E-004 + 200.69999999999999 5.6636307481685417E-004 + 200.75999999999999 5.7095356986269113E-004 + 200.81999999999999 5.7519920748715049E-004 + 200.88000000000000 5.7909087974918430E-004 + 200.94000000000000 5.8261964315741257E-004 + 201.00000000000000 5.8577693398549483E-004 + 201.06000000000000 5.8855451140444020E-004 + 201.12000000000000 5.9094449096071754E-004 + 201.17999999999998 5.9293936390707484E-004 + 201.23999999999998 5.9453202477750106E-004 + 201.29999999999998 5.9571579308248621E-004 + 201.35999999999999 5.9648435543088892E-004 + 201.41999999999999 5.9683183935605236E-004 + 201.47999999999999 5.9675284331777855E-004 + 201.53999999999999 5.9624245863809113E-004 + 201.59999999999999 5.9529618373378528E-004 + 201.66000000000000 5.9391009843877949E-004 + 201.72000000000000 5.9208075708434089E-004 + 201.78000000000000 5.8980512106425052E-004 + 201.84000000000000 5.8708085840298294E-004 + 201.89999999999998 5.8390601633642400E-004 + 201.95999999999998 5.8027928840316523E-004 + 202.01999999999998 5.7619987729524438E-004 + 202.07999999999998 5.7166750013626258E-004 + 202.13999999999999 5.6668252088119722E-004 + 202.19999999999999 5.6124578258499435E-004 + 202.25999999999999 5.5535878387645804E-004 + 202.31999999999999 5.4902360110081619E-004 + 202.38000000000000 5.4224286334535990E-004 + 202.44000000000000 5.3501980201194977E-004 + 202.50000000000000 5.2735828970126061E-004 + 202.56000000000000 5.1926289128010391E-004 + 202.62000000000000 5.1073865501099613E-004 + 202.67999999999998 5.0179130913388583E-004 + 202.73999999999998 4.9242729301114392E-004 + 202.79999999999998 4.8265351752159371E-004 + 202.85999999999999 4.7247763692403045E-004 + 202.91999999999999 4.6190799561640362E-004 + 202.97999999999999 4.5095343141517196E-004 + 203.03999999999999 4.3962344197922491E-004 + 203.09999999999999 4.2792822118018891E-004 + 203.16000000000000 4.1587848348115014E-004 + 203.22000000000000 4.0348556612530877E-004 + 203.28000000000000 3.9076142100950498E-004 + 203.34000000000000 3.7771849064145946E-004 + 203.39999999999998 3.6436977534414449E-004 + 203.45999999999998 3.5072886453291403E-004 + 203.51999999999998 3.3680980096059617E-004 + 203.57999999999998 3.2262710555842466E-004 + 203.63999999999999 3.0819581311572675E-004 + 203.69999999999999 2.9353132535806761E-004 + 203.75999999999999 2.7864953927329394E-004 + 203.81999999999999 2.6356672930151714E-004 + 203.88000000000000 2.4829949940480430E-004 + 203.94000000000000 2.3286483992704266E-004 + 204.00000000000000 2.1728007390597485E-004 + 204.06000000000000 2.0156280924717905E-004 + 204.12000000000000 1.8573092839881328E-004 + 204.17999999999998 1.6980256351262286E-004 + 204.23999999999998 1.5379605517420065E-004 + 204.29999999999998 1.3772993119237723E-004 + 204.35999999999999 1.2162288095274357E-004 + 204.41999999999999 1.0549372221155911E-004 + 204.47999999999999 8.9361343620869349E-005 + 204.53999999999999 7.3244736290195458E-005 + 204.59999999999999 5.7162867687415901E-005 + 204.66000000000000 4.1134736682571861E-005 + 204.72000000000000 2.5179277420901034E-005 + 204.78000000000000 9.3153473919294705E-006 + 204.84000000000000 -6.4383216499903661E-006 + 204.89999999999998 -2.2063127377953124E-005 + 204.95999999999998 -3.7540668842530375E-005 + 205.01999999999998 -5.2852753955102318E-005 + 205.07999999999998 -6.7981483190658788E-005 + 205.13999999999999 -8.2909188709594462E-005 + 205.19999999999999 -9.7618576993351657E-005 + 205.25999999999999 -1.1209270537802248E-004 + 205.31999999999999 -1.2631500415494746E-004 + 205.38000000000000 -1.4026933542099024E-004 + 205.44000000000000 -1.5394004440050354E-004 + 205.50000000000000 -1.6731191871707077E-004 + 205.56000000000000 -1.8037028472134986E-004 + 205.62000000000000 -1.9310100126104308E-004 + 205.67999999999998 -2.0549049312906917E-004 + 205.73999999999998 -2.1752578568505341E-004 + 205.79999999999998 -2.2919447560923667E-004 + 205.85999999999999 -2.4048484071499207E-004 + 205.91999999999999 -2.5138580224165160E-004 + 205.97999999999999 -2.6188694402585675E-004 + 206.03999999999999 -2.7197852783992718E-004 + 206.09999999999999 -2.8165153567519876E-004 + 206.16000000000000 -2.9089771635079317E-004 + 206.22000000000000 -2.9970951917937511E-004 + 206.28000000000000 -3.0808015778271291E-004 + 206.34000000000000 -3.1600362560059610E-004 + 206.39999999999998 -3.2347466581731234E-004 + 206.45999999999998 -3.3048884654241102E-004 + 206.51999999999998 -3.3704251965959087E-004 + 206.57999999999998 -3.4313288905498692E-004 + 206.63999999999999 -3.4875786647237339E-004 + 206.69999999999999 -3.5391633401930334E-004 + 206.75999999999999 -3.5860785575428996E-004 + 206.81999999999999 -3.6283285084934486E-004 + 206.88000000000000 -3.6659258795716776E-004 + 206.94000000000000 -3.6988906767122429E-004 + 207.00000000000000 -3.7272513181951702E-004 + 207.06000000000000 -3.7510435558508082E-004 + 207.12000000000000 -3.7703110642679544E-004 + 207.17999999999998 -3.7851047793999458E-004 + 207.23999999999998 -3.7954831705690108E-004 + 207.29999999999998 -3.8015112300013933E-004 + 207.35999999999999 -3.8032613132538373E-004 + 207.41999999999999 -3.8008122786032902E-004 + 207.47999999999999 -3.7942488673212523E-004 + 207.53999999999999 -3.7836624619300130E-004 + 207.59999999999999 -3.7691501591200220E-004 + 207.66000000000000 -3.7508151069193333E-004 + 207.72000000000000 -3.7287652784522961E-004 + 207.78000000000000 -3.7031139872353771E-004 + 207.84000000000000 -3.6739796403749029E-004 + 207.89999999999998 -3.6414849524338098E-004 + 207.95999999999998 -3.6057570314540401E-004 + 208.01999999999998 -3.5669266986759605E-004 + 208.07999999999998 -3.5251286757511741E-004 + 208.13999999999999 -3.4805010662890734E-004 + 208.19999999999999 -3.4331846291711535E-004 + 208.25999999999999 -3.3833229805810023E-004 + 208.31999999999999 -3.3310617391295717E-004 + 208.38000000000000 -3.2765490971990648E-004 + 208.44000000000000 -3.2199340851920871E-004 + 208.50000000000000 -3.1613676472933504E-004 + 208.56000000000000 -3.1010013056068862E-004 + 208.62000000000000 -3.0389869532499814E-004 + 208.68000000000001 -2.9754771089130416E-004 + 208.74000000000001 -2.9106235707245052E-004 + 208.80000000000001 -2.8445784070579454E-004 + 208.86000000000001 -2.7774923686518349E-004 + 208.92000000000002 -2.7095149932476130E-004 + 208.98000000000002 -2.6407942447363318E-004 + 209.03999999999996 -2.5714767236978013E-004 + 209.09999999999997 -2.5017065180771926E-004 + 209.15999999999997 -2.4316252450605182E-004 + 209.21999999999997 -2.3613718019854161E-004 + 209.27999999999997 -2.2910822374490867E-004 + 209.33999999999997 -2.2208890394451137E-004 + 209.39999999999998 -2.1509213597438714E-004 + 209.45999999999998 -2.0813044629095729E-004 + 209.51999999999998 -2.0121599599875976E-004 + 209.57999999999998 -1.9436052422671168E-004 + 209.63999999999999 -1.8757535538849670E-004 + 209.69999999999999 -1.8087136011121652E-004 + 209.75999999999999 -1.7425898268695329E-004 + 209.81999999999999 -1.6774819344168119E-004 + 209.88000000000000 -1.6134849961184174E-004 + 209.94000000000000 -1.5506894102703685E-004 + 210.00000000000000 -1.4891806806132415E-004 + 210.06000000000000 -1.4290395827481475E-004 + 210.12000000000000 -1.3703415020678672E-004 + 210.18000000000001 -1.3131572718522614E-004 + 210.24000000000001 -1.2575524472106835E-004 + 210.30000000000001 -1.2035872946384373E-004 + 210.36000000000001 -1.1513172053162257E-004 + 210.42000000000002 -1.1007920497879552E-004 + 210.48000000000002 -1.0520567976593116E-004 + 210.53999999999996 -1.0051509620688940E-004 + 210.59999999999997 -9.6010916854114613E-005 + 210.65999999999997 -9.1696086942349612E-005 + 210.71999999999997 -8.7573050360331299E-005 + 210.77999999999997 -8.3643777132069795E-005 + 210.83999999999997 -7.9909752233546554E-005 + 210.89999999999998 -7.6371996224964547E-005 + 210.95999999999998 -7.3031090829114059E-005 + 211.01999999999998 -6.9887180042030658E-005 + 211.07999999999998 -6.6939998005186133E-005 + 211.13999999999999 -6.4188887240234613E-005 + 211.19999999999999 -6.1632796703420571E-005 + 211.25999999999999 -5.9270316065576238E-005 + 211.31999999999999 -5.7099682809486676E-005 + 211.38000000000000 -5.5118805069020824E-005 + 211.44000000000000 -5.3325259777185909E-005 + 211.50000000000000 -5.1716337613903506E-005 + 211.56000000000000 -5.0289032823643007E-005 + 211.62000000000000 -4.9040076561118737E-005 + 211.68000000000001 -4.7965933994445274E-005 + 211.74000000000001 -4.7062848139262263E-005 + 211.80000000000001 -4.6326834839534034E-005 + 211.86000000000001 -4.5753702512449133E-005 + 211.92000000000002 -4.5339082386460915E-005 + 211.98000000000002 -4.5078437042044540E-005 + 212.03999999999996 -4.4967072472106161E-005 + 212.09999999999997 -4.5000165126664745E-005 + 212.15999999999997 -4.5172761630196987E-005 + 212.21999999999997 -4.5479817407184151E-005 + 212.27999999999997 -4.5916179062505531E-005 + 212.33999999999997 -4.6476623059808804E-005 + 212.39999999999998 -4.7155852203023818E-005 + 212.45999999999998 -4.7948515172417606E-005 + 212.51999999999998 -4.8849202693579090E-005 + 212.57999999999998 -4.9852472439702915E-005 + 212.63999999999999 -5.0952858428909732E-005 + 212.69999999999999 -5.2144870723068321E-005 + 212.75999999999999 -5.3423013823486748E-005 + 212.81999999999999 -5.4781803770000979E-005 + 212.88000000000000 -5.6215768534906094E-005 + 212.94000000000000 -5.7719468199334392E-005 + 213.00000000000000 -5.9287504281377036E-005 + 213.06000000000000 -6.0914528902756871E-005 + 213.12000000000000 -6.2595250836068475E-005 + 213.18000000000001 -6.4324451946888526E-005 + 213.24000000000001 -6.6096998039482112E-005 + 213.30000000000001 -6.7907828077581358E-005 + 213.36000000000001 -6.9751967118638852E-005 + 213.42000000000002 -7.1624537275699385E-005 + 213.48000000000002 -7.3520739161938052E-005 + 213.53999999999996 -7.5435866158442928E-005 + 213.59999999999997 -7.7365300348536978E-005 + 213.65999999999997 -7.9304491322028226E-005 + 213.71999999999997 -8.1248979959300005E-005 + 213.77999999999997 -8.3194390011268740E-005 + 213.83999999999997 -8.5136429052752358E-005 + 213.89999999999998 -8.7070869079744793E-005 + 213.95999999999998 -8.8993589185010303E-005 + 214.01999999999998 -9.0900535016797589E-005 + 214.07999999999998 -9.2787763618607398E-005 + 214.13999999999999 -9.4651409373482770E-005 + 214.19999999999999 -9.6487729559449934E-005 + 214.25999999999999 -9.8293073544797736E-005 + 214.31999999999999 -1.0006390611046737E-004 + 214.38000000000000 -1.0179682597431618E-004 + 214.44000000000000 -1.0348853321920452E-004 + 214.50000000000000 -1.0513584984003972E-004 + 214.56000000000000 -1.0673572551359739E-004 + 214.62000000000000 -1.0828522289387652E-004 + 214.68000000000001 -1.0978151493878405E-004 + 214.74000000000001 -1.1122188604095461E-004 + 214.80000000000001 -1.1260372884155778E-004 + 214.86000000000001 -1.1392453916051325E-004 + 214.92000000000002 -1.1518192089832015E-004 + 214.98000000000002 -1.1637355924863159E-004 + 215.03999999999996 -1.1749723990927761E-004 + 215.09999999999997 -1.1855085857805487E-004 + 215.15999999999997 -1.1953240480896092E-004 + 215.21999999999997 -1.2043996307301118E-004 + 215.27999999999997 -1.2127172851415341E-004 + 215.33999999999997 -1.2202600337250280E-004 + 215.39999999999998 -1.2270122248505053E-004 + 215.45999999999998 -1.2329592773905671E-004 + 215.51999999999998 -1.2380878747229727E-004 + 215.57999999999998 -1.2423859585296353E-004 + 215.63999999999999 -1.2458427864759305E-004 + 215.69999999999999 -1.2484488158635189E-004 + 215.75999999999999 -1.2501960320951788E-004 + 215.81999999999999 -1.2510774507350919E-004 + 215.88000000000000 -1.2510876166642250E-004 + 215.94000000000000 -1.2502223394558791E-004 + 216.00000000000000 -1.2484786441091622E-004 + 216.06000000000000 -1.2458550413600914E-004 + 216.12000000000000 -1.2423513127658221E-004 + 216.18000000000001 -1.2379684476035544E-004 + 216.24000000000001 -1.2327089835875019E-004 + 216.30000000000001 -1.2265766778767168E-004 + 216.36000000000001 -1.2195769160509357E-004 + 216.42000000000002 -1.2117164440124087E-004 + 216.48000000000002 -1.2030032625990936E-004 + 216.53999999999996 -1.1934470126817682E-004 + 216.59999999999997 -1.1830586628745061E-004 + 216.65999999999997 -1.1718505838230184E-004 + 216.71999999999997 -1.1598363718213304E-004 + 216.77999999999997 -1.1470310711123671E-004 + 216.83999999999997 -1.1334508823984736E-004 + 216.89999999999998 -1.1191131036599677E-004 + 216.95999999999998 -1.1040361679866518E-004 + 217.01999999999998 -1.0882396703479299E-004 + 217.07999999999998 -1.0717440177263253E-004 + 217.13999999999999 -1.0545706965204702E-004 + 217.19999999999999 -1.0367420190716495E-004 + 217.25999999999999 -1.0182812200045449E-004 + 217.31999999999999 -9.9921250966706571E-005 + 217.38000000000000 -9.7956094208624634E-005 + 217.44000000000000 -9.5935235690981403E-005 + 217.50000000000000 -9.3861367307551333E-005 + 217.56000000000000 -9.1737260770245993E-005 + 217.62000000000000 -8.9565772755567544E-005 + 217.68000000000001 -8.7349848706180889E-005 + 217.74000000000001 -8.5092496639221370E-005 + 217.80000000000001 -8.2796809819082816E-005 + 217.86000000000001 -8.0465921188351900E-005 + 217.92000000000002 -7.8103020517342498E-005 + 217.98000000000002 -7.5711329672768110E-005 + 218.03999999999996 -7.3294093124011994E-005 + 218.09999999999997 -7.0854571251629600E-005 + 218.15999999999997 -6.8396010807191256E-005 + 218.21999999999997 -6.5921656268013262E-005 + 218.27999999999997 -6.3434729631444228E-005 + 218.33999999999997 -6.0938423555709920E-005 + 218.39999999999998 -5.8435896120664055E-005 + 218.45999999999998 -5.5930271329347663E-005 + 218.51999999999998 -5.3424630941504455E-005 + 218.57999999999998 -5.0922022347618674E-005 + 218.63999999999999 -4.8425444633173092E-005 + 218.69999999999999 -4.5937852103549759E-005 + 218.75999999999999 -4.3462149846674685E-005 + 218.81999999999999 -4.1001201292243950E-005 + 218.88000000000000 -3.8557795207033567E-005 + 218.94000000000000 -3.6134672279727049E-005 + 219.00000000000000 -3.3734490290101703E-005 + 219.06000000000000 -3.1359834142244585E-005 + 219.12000000000000 -2.9013194256981298E-005 + 219.18000000000001 -2.6696967968807091E-005 + 219.24000000000001 -2.4413450589430149E-005 + 219.30000000000001 -2.2164824952900885E-005 + 219.36000000000001 -1.9953163799501754E-005 + 219.42000000000002 -1.7780426618836099E-005 + 219.48000000000002 -1.5648457817053517E-005 + 219.53999999999996 -1.3558994262617128E-005 + 219.59999999999997 -1.1513664527259605E-005 + 219.65999999999997 -9.5139939362950172E-006 + 219.71999999999997 -7.5614105978664761E-006 + 219.77999999999997 -5.6572507584275428E-006 + 219.83999999999997 -3.8027594566965090E-006 + 219.89999999999998 -1.9990945742742329E-006 + 219.95999999999998 -2.4732593652420265E-007 + 220.01999999999998 1.4515672537967212E-006 + 220.07999999999998 3.0966986686704208E-006 + 220.13999999999999 4.6872810082007982E-006 + 220.19999999999999 6.2226297978785984E-006 + 220.25999999999999 7.7021698958505874E-006 + 220.31999999999999 9.1254403440132990E-006 + 220.38000000000000 1.0492096052812358E-005 + 220.44000000000000 1.1801909839296029E-005 + 220.50000000000000 1.3054770326836518E-005 + 220.56000000000000 1.4250679546049520E-005 + 220.62000000000000 1.5389744204425608E-005 + 220.68000000000001 1.6472168648818039E-005 + 220.74000000000001 1.7498244400768694E-005 + 220.80000000000001 1.8468339735681902E-005 + 220.86000000000001 1.9382884827637194E-005 + 220.92000000000002 2.0242362679272841E-005 + 220.98000000000002 2.1047305165843614E-005 + 221.03999999999996 2.1798278945157002E-005 + 221.09999999999997 2.2495885821011460E-005 + 221.15999999999997 2.3140754101038028E-005 + 221.21999999999997 2.3733546801397080E-005 + 221.27999999999997 2.4274959679364576E-005 + 221.33999999999997 2.4765725482806490E-005 + 221.39999999999998 2.5206613116402475E-005 + 221.45999999999998 2.5598444958910329E-005 + 221.51999999999998 2.5942085152257197E-005 + 221.57999999999998 2.6238452160441649E-005 + 221.63999999999999 2.6488511991924444E-005 + 221.69999999999999 2.6693280929288563E-005 + 221.75999999999999 2.6853818138521874E-005 + 221.81999999999999 2.6971219370183534E-005 + 221.88000000000000 2.7046608325087347E-005 + 221.94000000000000 2.7081126743627394E-005 + 222.00000000000000 2.7075929635484238E-005 + 222.06000000000000 2.7032172279847853E-005 + 222.12000000000000 2.6951000151647459E-005 + 222.18000000000001 2.6833545995244109E-005 + 222.24000000000001 2.6680924137849777E-005 + 222.30000000000001 2.6494226478319125E-005 + 222.36000000000001 2.6274520842570400E-005 + 222.42000000000002 2.6022851798621440E-005 + 222.48000000000002 2.5740245578319200E-005 + 222.53999999999996 2.5427709788467956E-005 + 222.59999999999997 2.5086232802608117E-005 + 222.65999999999997 2.4716791952184379E-005 + 222.71999999999997 2.4320350562639706E-005 + 222.77999999999997 2.3897864834376146E-005 + 222.83999999999997 2.3450276238954834E-005 + 222.89999999999998 2.2978515227480491E-005 + 222.95999999999998 2.2483496715135702E-005 + 223.01999999999998 2.1966119716968594E-005 + 223.07999999999998 2.1427262692383996E-005 + 223.13999999999999 2.0867783591584047E-005 + 223.19999999999999 2.0288515350563276E-005 + 223.25999999999999 1.9690269130548687E-005 + 223.31999999999999 1.9073830183978184E-005 + 223.38000000000000 1.8439956857514335E-005 + 223.44000000000000 1.7789389384498727E-005 + 223.50000000000000 1.7122843830732092E-005 + 223.56000000000000 1.6441018384710733E-005 + 223.62000000000000 1.5744588032953917E-005 + 223.68000000000001 1.5034212168451636E-005 + 223.74000000000001 1.4310524961981166E-005 + 223.80000000000001 1.3574138999209128E-005 + 223.86000000000001 1.2825638949891511E-005 + 223.92000000000002 1.2065574900817094E-005 + 223.98000000000002 1.1294463893709447E-005 + 224.03999999999996 1.0512777173053655E-005 + 224.09999999999997 9.7209412461595711E-006 + 224.15999999999997 8.9193364841144165E-006 + 224.21999999999997 8.1082935783096923E-006 + 224.27999999999997 7.2880974626589883E-006 + 224.33999999999997 6.4589895284901801E-006 + 224.39999999999998 5.6211778347720141E-006 + 224.45999999999998 4.7748450028942576E-006 + 224.51999999999998 3.9201562806207523E-006 + 224.57999999999998 3.0572739958693465E-006 + 224.63999999999999 2.1863654043633121E-006 + 224.69999999999999 1.3076151897964557E-006 + 224.75999999999999 4.2122869094107645E-007 + 224.81999999999999 -4.7255803928636646E-007 + 224.88000000000000 -1.3734820914122984E-006 + 224.94000000000000 -2.2812505139919366E-006 + 225.00000000000000 -3.1955490540896673E-006 + 225.06000000000000 -4.1160487989760973E-006 + 225.12000000000000 -5.0424135936414918E-006 + 225.18000000000001 -5.9743138229659946E-006 + 225.24000000000001 -6.9114334370494401E-006 + 225.30000000000001 -7.8534797747546343E-006 + 225.36000000000001 -8.8001907050934799E-006 + 225.42000000000002 -9.7513333553250321E-006 + 225.48000000000002 -1.0706709063966475E-005 + 225.53999999999996 -1.1666143585420756E-005 + 225.59999999999997 -1.2629481324713878E-005 + 225.65999999999997 -1.3596573764330189E-005 + 225.71999999999997 -1.4567262902892662E-005 + 225.77999999999997 -1.5541371002115506E-005 + 225.83999999999997 -1.6518680110304998E-005 + 225.89999999999998 -1.7498925664120120E-005 + 225.95999999999998 -1.8481778594957138E-005 + 226.01999999999998 -1.9466844817469405E-005 + 226.07999999999998 -2.0453652035973495E-005 + 226.13999999999999 -2.1441661350182602E-005 + 226.19999999999999 -2.2430263034740084E-005 + 226.25999999999999 -2.3418786459029392E-005 + 226.31999999999999 -2.4406509059863846E-005 + 226.38000000000000 -2.5392668829926132E-005 + 226.44000000000000 -2.6376477271102593E-005 + 226.50000000000000 -2.7357124824510943E-005 + 226.56000000000000 -2.8333792919864040E-005 + 226.62000000000000 -2.9305661748774780E-005 + 226.68000000000001 -3.0271907487870991E-005 + 226.74000000000001 -3.1231709311252027E-005 + 226.80000000000001 -3.2184235754537151E-005 + 226.86000000000001 -3.3128654839699927E-005 + 226.92000000000002 -3.4064110970020246E-005 + 226.98000000000002 -3.4989727018872018E-005 + 227.03999999999996 -3.5904594439327515E-005 + 227.09999999999997 -3.6807763234553393E-005 + 227.15999999999997 -3.7698238381519342E-005 + 227.21999999999997 -3.8574975515213449E-005 + 227.27999999999997 -3.9436883089257935E-005 + 227.33999999999997 -4.0282816818025501E-005 + 227.39999999999998 -4.1111597140557148E-005 + 227.45999999999998 -4.1922002487957190E-005 + 227.51999999999998 -4.2712783159429458E-005 + 227.57999999999998 -4.3482663983108467E-005 + 227.63999999999999 -4.4230352511508463E-005 + 227.69999999999999 -4.4954552366324620E-005 + 227.75999999999999 -4.5653955681343800E-005 + 227.81999999999999 -4.6327257063674484E-005 + 227.88000000000000 -4.6973156976996755E-005 + 227.94000000000000 -4.7590350363618919E-005 + 228.00000000000000 -4.8177538232017762E-005 + 228.06000000000000 -4.8733427000708862E-005 + 228.12000000000000 -4.9256725576460870E-005 + 228.18000000000001 -4.9746136535040856E-005 + 228.24000000000001 -5.0200368979016083E-005 + 228.30000000000001 -5.0618140578202476E-005 + 228.36000000000001 -5.0998169447406026E-005 + 228.42000000000002 -5.1339181170642342E-005 + 228.48000000000002 -5.1639913338301533E-005 + 228.53999999999996 -5.1899121081353073E-005 + 228.59999999999997 -5.2115575080987894E-005 + 228.65999999999997 -5.2288068455294532E-005 + 228.71999999999997 -5.2415411833269105E-005 + 228.77999999999997 -5.2496440527231901E-005 + 228.83999999999997 -5.2530009427334625E-005 + 228.89999999999998 -5.2514987927160711E-005 + 228.95999999999998 -5.2450258409841540E-005 + 229.01999999999998 -5.2334706823015411E-005 + 229.07999999999998 -5.2167232478835069E-005 + 229.13999999999999 -5.1946722938558695E-005 + 229.19999999999999 -5.1672071063932648E-005 + 229.25999999999999 -5.1342161636351368E-005 + 229.31999999999999 -5.0955878336308636E-005 + 229.38000000000000 -5.0512106309379059E-005 + 229.44000000000000 -5.0009732466828037E-005 + 229.50000000000000 -4.9447653899958340E-005 + 229.56000000000000 -4.8824785097434945E-005 + 229.62000000000000 -4.8140064340891539E-005 + 229.68000000000001 -4.7392451521377751E-005 + 229.74000000000001 -4.6580938670439382E-005 + 229.80000000000001 -4.5704548788094959E-005 + 229.86000000000001 -4.4762329996695012E-005 + 229.92000000000002 -4.3753356882009797E-005 + 229.97999999999996 -4.2676720454584306E-005 + 230.03999999999996 -4.1531518845779328E-005 + 230.09999999999997 -4.0316840253366158E-005 + 230.15999999999997 -3.9031766233180108E-005 + 230.21999999999997 -3.7675347593149543E-005 + 230.27999999999997 -3.6246593742148903E-005 + 230.33999999999997 -3.4744477511081963E-005 + 230.39999999999998 -3.3167917229007634E-005 + 230.45999999999998 -3.1515785903201247E-005 + 230.51999999999998 -2.9786907253763018E-005 + 230.57999999999998 -2.7980063317236789E-005 + 230.63999999999999 -2.6093996725903340E-005 + 230.69999999999999 -2.4127431338873424E-005 + 230.75999999999999 -2.2079071393500093E-005 + 230.81999999999999 -1.9947619641252253E-005 + 230.88000000000000 -1.7731776717924323E-005 + 230.94000000000000 -1.5430261343491288E-005 + 231.00000000000000 -1.3041795017524648E-005 + 231.06000000000000 -1.0565116306744944E-005 + 231.12000000000000 -7.9989807346737230E-006 + 231.18000000000001 -5.3421389158721330E-006 + 231.24000000000001 -2.5933458052222431E-006 + 231.30000000000001 2.4865436821475706E-007 + 231.36000000000001 3.1851304405459048E-006 + 231.42000000000002 6.2173806542748396E-006 + 231.47999999999996 9.3467252504539662E-006 + 231.53999999999996 1.2574514595830678E-005 + 231.59999999999997 1.5902120979299002E-005 + 231.65999999999997 1.9330942526556768E-005 + 231.71999999999997 2.2862375336847464E-005 + 231.77999999999997 2.6497823354839800E-005 + 231.83999999999997 3.0238664126122197E-005 + 231.89999999999998 3.4086240804893433E-005 + 231.95999999999998 3.8041843256516003E-005 + 232.01999999999998 4.2106696647296734E-005 + 232.07999999999998 4.6281948051506704E-005 + 232.13999999999999 5.0568630348037406E-005 + 232.19999999999999 5.4967694899016751E-005 + 232.25999999999999 5.9479973981960585E-005 + 232.31999999999999 6.4106183758232859E-005 + 232.38000000000000 6.8846923550039976E-005 + 232.44000000000000 7.3702676093225370E-005 + 232.50000000000000 7.8673796659315987E-005 + 232.56000000000000 8.3760524317712400E-005 + 232.62000000000000 8.8962964000845044E-005 + 232.68000000000001 9.4281094439440901E-005 + 232.74000000000001 9.9714733740708872E-005 + 232.80000000000001 1.0526357110065246E-004 + 232.86000000000001 1.1092709516731555E-004 + 232.92000000000002 1.1670463678086736E-004 + 232.97999999999996 1.2259529983552265E-004 + 233.03999999999996 1.2859799462943864E-004 + 233.09999999999997 1.3471134752639815E-004 + 233.15999999999997 1.4093375455668042E-004 + 233.21999999999997 1.4726334880998650E-004 + 233.27999999999997 1.5369796104732343E-004 + 233.33999999999997 1.6023514105920078E-004 + 233.39999999999998 1.6687211025097600E-004 + 233.45999999999998 1.7360580648439567E-004 + 233.51999999999998 1.8043285005739143E-004 + 233.57999999999998 1.8734954639105475E-004 + 233.63999999999999 1.9435189265296136E-004 + 233.69999999999999 2.0143556753410849E-004 + 233.75999999999999 2.0859591611493825E-004 + 233.81999999999999 2.1582801867126169E-004 + 233.88000000000000 2.2312660744523314E-004 + 233.94000000000000 2.3048607217445228E-004 + 234.00000000000000 2.3790052775148139E-004 + 234.06000000000000 2.4536372371044928E-004 + 234.12000000000000 2.5286910858602837E-004 + 234.18000000000001 2.6040974696059523E-004 + 234.24000000000001 2.6797843645390480E-004 + 234.30000000000001 2.7556759606213964E-004 + 234.36000000000001 2.8316935666508093E-004 + 234.42000000000002 2.9077547463834486E-004 + 234.47999999999996 2.9837744220713062E-004 + 234.53999999999996 3.0596643405818254E-004 + 234.59999999999997 3.1353335295873647E-004 + 234.65999999999997 3.2106879461950522E-004 + 234.71999999999997 3.2856312885127538E-004 + 234.77999999999997 3.3600647917392203E-004 + 234.83999999999997 3.4338871694676224E-004 + 234.89999999999998 3.5069954530406628E-004 + 234.95999999999998 3.5792843384195675E-004 + 235.01999999999998 3.6506469877468499E-004 + 235.07999999999998 3.7209746050181848E-004 + 235.13999999999999 3.7901570535653557E-004 + 235.19999999999999 3.8580824502141805E-004 + 235.25999999999999 3.9246383564114364E-004 + 235.31999999999999 3.9897112080230666E-004 + 235.38000000000000 4.0531865239395938E-004 + 235.44000000000000 4.1149494277339704E-004 + 235.50000000000000 4.1748851303404074E-004 + 235.56000000000000 4.2328788778371547E-004 + 235.62000000000000 4.2888164917326044E-004 + 235.68000000000001 4.3425849750655096E-004 + 235.74000000000001 4.3940721738982034E-004 + 235.80000000000001 4.4431672991267272E-004 + 235.86000000000001 4.4897620645569002E-004 + 235.92000000000002 4.5337501886151017E-004 + 235.97999999999996 4.5750280287157525E-004 + 236.03999999999996 4.6134947904717037E-004 + 236.09999999999997 4.6490523971431821E-004 + 236.15999999999997 4.6816060579559350E-004 + 236.21999999999997 4.7110644263069869E-004 + 236.27999999999997 4.7373403402055315E-004 + 236.33999999999997 4.7603498987105764E-004 + 236.39999999999998 4.7800135079039703E-004 + 236.45999999999998 4.7962559792606686E-004 + 236.51999999999998 4.8090066113243497E-004 + 236.57999999999998 4.8181998518929476E-004 + 236.63999999999999 4.8237750442935775E-004 + 236.69999999999999 4.8256770584271294E-004 + 236.75999999999999 4.8238571442394058E-004 + 236.81999999999999 4.8182719309041968E-004 + 236.88000000000000 4.8088853267264992E-004 + 236.94000000000000 4.7956669855349419E-004 + 237.00000000000000 4.7785941040223874E-004 + 237.06000000000000 4.7576510689148124E-004 + 237.12000000000000 4.7328293621451043E-004 + 237.18000000000001 4.7041276481627153E-004 + 237.24000000000001 4.6715522343927063E-004 + 237.30000000000001 4.6351168445524384E-004 + 237.36000000000001 4.5948424400868665E-004 + 237.42000000000002 4.5507571361326661E-004 + 237.47999999999996 4.5028959236002641E-004 + 237.53999999999996 4.4513013408327054E-004 + 237.59999999999997 4.3960223073282801E-004 + 237.65999999999997 4.3371152253456931E-004 + 237.71999999999997 4.2746425883472374E-004 + 237.77999999999997 4.2086734758675263E-004 + 237.83999999999997 4.1392839080050864E-004 + 237.89999999999998 4.0665564225728882E-004 + 237.95999999999998 3.9905795840742257E-004 + 238.01999999999998 3.9114487874651426E-004 + 238.07999999999998 3.8292651318447729E-004 + 238.13999999999999 3.7441362347382946E-004 + 238.19999999999999 3.6561755633217303E-004 + 238.25999999999999 3.5655021796398618E-004 + 238.31999999999999 3.4722406657893093E-004 + 238.38000000000000 3.3765207075327523E-004 + 238.44000000000000 3.2784769174473092E-004 + 238.50000000000000 3.1782479038291013E-004 + 238.56000000000000 3.0759765536622088E-004 + 238.62000000000000 2.9718097727811084E-004 + 238.68000000000001 2.8658967335025795E-004 + 238.74000000000001 2.7583900655787913E-004 + 238.80000000000001 2.6494443828238936E-004 + 238.86000000000001 2.5392164985954069E-004 + 238.92000000000002 2.4278643046703638E-004 + 238.97999999999996 2.3155472456604071E-004 + 239.03999999999996 2.2024252202734187E-004 + 239.09999999999997 2.0886585474911892E-004 + 239.15999999999997 1.9744080932757878E-004 + 239.21999999999997 1.8598337782987763E-004 + 239.27999999999997 1.7450950535434305E-004 + 239.33999999999997 1.6303506430139574E-004 + 239.39999999999998 1.5157574009244695E-004 + 239.45999999999998 1.4014705987484808E-004 + 239.51999999999998 1.2876431617046889E-004 + 239.57999999999998 1.1744256971332817E-004 + 239.63999999999999 1.0619659276708394E-004 + 239.69999999999999 9.5040793326857913E-005 + 239.75999999999999 8.3989245514201456E-005 + 239.81999999999999 7.3055635975318819E-005 + 239.88000000000000 6.2253213744889682E-005 + 239.94000000000000 5.1594791065852466E-005 + 240.00000000000000 4.1092693826582727E-005 + 240.06000000000000 3.0758770162811468E-005 + 240.12000000000000 2.0604351364022246E-005 + 240.18000000000001 1.0640239634891493E-005 + 240.24000000000001 8.7667748699345305E-007 + 240.30000000000001 -8.6766405303881490E-006 + 240.36000000000001 -1.8010603410345055E-005 + 240.42000000000002 -2.7116696017398531E-005 + 240.47999999999996 -3.5987019364772040E-005 + 240.53999999999996 -4.4614284190764376E-005 + 240.59999999999997 -5.2991838318849487E-005 + 240.65999999999997 -6.1113677016657683E-005 + 240.71999999999997 -6.8974446428419562E-005 + 240.77999999999997 -7.6569460161366075E-005 + 240.83999999999997 -8.3894677691455057E-005 + 240.89999999999998 -9.0946722466470742E-005 + 240.95999999999998 -9.7722866344896833E-005 + 241.01999999999998 -1.0422103384554458E-004 + 241.07999999999998 -1.1043974804568181E-004 + 241.13999999999999 -1.1637816585958634E-004 + 241.19999999999999 -1.2203602262483851E-004 + 241.25999999999999 -1.2741363093388995E-004 + 241.31999999999999 -1.3251185928044032E-004 + 241.38000000000000 -1.3733209475889717E-004 + 241.44000000000000 -1.4187624145608146E-004 + 241.50000000000000 -1.4614668802981888E-004 + 241.56000000000000 -1.5014629958538323E-004 + 241.62000000000000 -1.5387841426749141E-004 + 241.68000000000001 -1.5734679095346662E-004 + 241.74000000000001 -1.6055564166601806E-004 + 241.80000000000001 -1.6350957450308369E-004 + 241.86000000000001 -1.6621360498549062E-004 + 241.92000000000002 -1.6867314483558704E-004 + 241.97999999999996 -1.7089394045220491E-004 + 242.03999999999996 -1.7288212260236789E-004 + 242.09999999999997 -1.7464410179898428E-004 + 242.15999999999997 -1.7618659139775450E-004 + 242.21999999999997 -1.7751656904604885E-004 + 242.27999999999997 -1.7864123965398242E-004 + 242.33999999999997 -1.7956799671270109E-004 + 242.39999999999998 -1.8030440633900368E-004 + 242.45999999999998 -1.8085814705177602E-004 + 242.51999999999998 -1.8123703588192213E-004 + 242.57999999999998 -1.8144892290184022E-004 + 242.63999999999999 -1.8150172179708413E-004 + 242.69999999999999 -1.8140338856137972E-004 + 242.75999999999999 -1.8116186722047818E-004 + 242.81999999999999 -1.8078511914167234E-004 + 242.88000000000000 -1.8028107510276981E-004 + 242.94000000000000 -1.7965761593729819E-004 + 243.00000000000000 -1.7892259837832709E-004 + 243.06000000000000 -1.7808381857473018E-004 + 243.12000000000000 -1.7714900648883153E-004 + 243.18000000000001 -1.7612579787721410E-004 + 243.24000000000001 -1.7502173703037749E-004 + 243.30000000000001 -1.7384426981638734E-004 + 243.36000000000001 -1.7260066854390171E-004 + 243.42000000000002 -1.7129807546130749E-004 + 243.47999999999996 -1.6994345935207887E-004 + 243.53999999999996 -1.6854360360971495E-004 + 243.59999999999997 -1.6710509496611071E-004 + 243.65999999999997 -1.6563428316627472E-004 + 243.71999999999997 -1.6413729406107675E-004 + 243.77999999999997 -1.6262001892108997E-004 + 243.83999999999997 -1.6108811143758343E-004 + 243.89999999999998 -1.5954696487820830E-004 + 243.95999999999998 -1.5800175198335997E-004 + 244.01999999999998 -1.5645737506088785E-004 + 244.07999999999998 -1.5491851210080069E-004 + 244.13999999999999 -1.5338960947423934E-004 + 244.19999999999999 -1.5187486317620537E-004 + 244.25999999999999 -1.5037823803974222E-004 + 244.31999999999999 -1.4890347236817955E-004 + 244.38000000000000 -1.4745406531915681E-004 + 244.44000000000000 -1.4603328913837766E-004 + 244.50000000000000 -1.4464414723001107E-004 + 244.56000000000000 -1.4328942475663362E-004 + 244.62000000000000 -1.4197163672462546E-004 + 244.68000000000001 -1.4069305925913740E-004 + 244.74000000000001 -1.3945571643202438E-004 + 244.80000000000001 -1.3826137596458085E-004 + 244.86000000000001 -1.3711154830951930E-004 + 244.92000000000002 -1.3600752957092230E-004 + 244.97999999999996 -1.3495034569361981E-004 + 245.03999999999996 -1.3394082605033814E-004 + 245.09999999999997 -1.3297956211584115E-004 + 245.15999999999997 -1.3206696439882400E-004 + 245.21999999999997 -1.3120324787537215E-004 + 245.27999999999997 -1.3038844845260678E-004 + 245.33999999999997 -1.2962245869296192E-004 + 245.39999999999998 -1.2890499357595829E-004 + 245.45999999999998 -1.2823563729215886E-004 + 245.51999999999998 -1.2761383240968282E-004 + 245.57999999999998 -1.2703889399341204E-004 + 245.63999999999999 -1.2651001357085086E-004 + 245.69999999999999 -1.2602624499431951E-004 + 245.75999999999999 -1.2558652636275575E-004 + 245.81999999999999 -1.2518966767321649E-004 + 245.88000000000000 -1.2483438108306044E-004 + 245.94000000000000 -1.2451923177940038E-004 + 246.00000000000000 -1.2424270966217415E-004 + 246.06000000000000 -1.2400319952917969E-004 + 246.12000000000000 -1.2379898292046355E-004 + 246.18000000000001 -1.2362825164515985E-004 + 246.24000000000001 -1.2348914814308657E-004 + 246.30000000000001 -1.2337972228285832E-004 + 246.36000000000001 -1.2329798403260586E-004 + 246.42000000000002 -1.2324187591128093E-004 + 246.47999999999996 -1.2320934106411921E-004 + 246.53999999999996 -1.2319824359956338E-004 + 246.59999999999997 -1.2320647070629442E-004 + 246.65999999999997 -1.2323185551975154E-004 + 246.71999999999997 -1.2327224052133615E-004 + 246.77999999999997 -1.2332544102793168E-004 + 246.83999999999997 -1.2338929288552102E-004 + 246.89999999999998 -1.2346162492547292E-004 + 246.95999999999998 -1.2354028520668192E-004 + 247.01999999999998 -1.2362311959848637E-004 + 247.07999999999998 -1.2370798665497923E-004 + 247.13999999999999 -1.2379280973102749E-004 + 247.19999999999999 -1.2387552765499545E-004 + 247.25999999999999 -1.2395411331825784E-004 + 247.31999999999999 -1.2402661230724094E-004 + 247.38000000000000 -1.2409109627931390E-004 + 247.44000000000000 -1.2414568748508637E-004 + 247.50000000000000 -1.2418860588988309E-004 + 247.56000000000000 -1.2421808865555419E-004 + 247.62000000000000 -1.2423242579652445E-004 + 247.68000000000001 -1.2422996585498660E-004 + 247.74000000000001 -1.2420909990651128E-004 + 247.80000000000001 -1.2416824983909832E-004 + 247.86000000000001 -1.2410588215444330E-004 + 247.92000000000002 -1.2402051465188201E-004 + 247.97999999999996 -1.2391066163864448E-004 + 248.03999999999996 -1.2377489625553528E-004 + 248.09999999999997 -1.2361182348403531E-004 + 248.15999999999997 -1.2342009212226786E-004 + 248.21999999999997 -1.2319840212674969E-004 + 248.27999999999997 -1.2294551497461426E-004 + 248.33999999999997 -1.2266025758292590E-004 + 248.39999999999998 -1.2234154489389478E-004 + 248.45999999999998 -1.2198836663888903E-004 + 248.51999999999998 -1.2159980803604195E-004 + 248.57999999999998 -1.2117505656174835E-004 + 248.63999999999999 -1.2071338673110601E-004 + 248.69999999999999 -1.2021418353935204E-004 + 248.75999999999999 -1.1967689444334133E-004 + 248.81999999999999 -1.1910104196617160E-004 + 248.88000000000000 -1.1848622949334011E-004 + 248.94000000000000 -1.1783210556778670E-004 + 249.00000000000000 -1.1713836429727979E-004 + 249.06000000000000 -1.1640472031386254E-004 + 249.12000000000000 -1.1563092183213024E-004 + 249.18000000000001 -1.1481671415816027E-004 + 249.24000000000001 -1.1396187339512641E-004 + 249.30000000000001 -1.1306618148098328E-004 + 249.36000000000001 -1.1212942928881729E-004 + 249.42000000000002 -1.1115144775844564E-004 + 249.47999999999996 -1.1013209326195390E-004 + 249.53999999999996 -1.0907126673402744E-004 + 249.59999999999997 -1.0796893415317515E-004 + 249.65999999999997 -1.0682511573673702E-004 + 249.71999999999997 -1.0563991512644147E-004 + 249.77999999999997 -1.0441352694099032E-004 + 249.83999999999997 -1.0314623707149123E-004 + 249.89999999999998 -1.0183841209177165E-004 + 249.95999999999998 -1.0049051731351994E-004 + 250.01999999999998 -9.9103087230398580E-005 + 250.07999999999998 -9.7676735485170289E-005 + 250.13999999999999 -9.6212142857582378E-005 + 250.19999999999999 -9.4710060809203111E-005 + 250.25999999999999 -9.3171271892754587E-005 + 250.31999999999999 -9.1596592120552089E-005 + 250.38000000000000 -8.9986889184332517E-005 + 250.44000000000000 -8.8343046355349996E-005 + 250.50000000000000 -8.6665975358368871E-005 + 250.56000000000000 -8.4956616003474457E-005 + 250.62000000000000 -8.3215930611045590E-005 + 250.68000000000001 -8.1444913835084550E-005 + 250.74000000000001 -7.9644606352326976E-005 + 250.80000000000001 -7.7816092136541657E-005 + 250.86000000000001 -7.5960509942805103E-005 + 250.92000000000002 -7.4079054429995430E-005 + 250.97999999999996 -7.2172982809350070E-005 + 251.03999999999996 -7.0243625415318775E-005 + 251.09999999999997 -6.8292378272210473E-005 + 251.15999999999997 -6.6320713017237336E-005 + 251.21999999999997 -6.4330171368624507E-005 + 251.27999999999997 -6.2322362913565496E-005 + 251.33999999999997 -6.0298971988775814E-005 + 251.39999999999998 -5.8261735258193905E-005 + 251.45999999999998 -5.6212450901474947E-005 + 251.51999999999998 -5.4152975677658965E-005 + 251.57999999999998 -5.2085210873225633E-005 + 251.63999999999999 -5.0011111633372745E-005 + 251.69999999999999 -4.7932666117349974E-005 + 251.75999999999999 -4.5851908897857380E-005 + 251.81999999999999 -4.3770905216110277E-005 + 251.88000000000000 -4.1691748256329175E-005 + 251.94000000000000 -3.9616558437922696E-005 diff --git a/seisflows/tests/test_data/test_solver/002/traces/obs/AA.S000001.BXY.semd b/seisflows/tests/test_data/test_solver/002/traces/obs/AA.S000001.BXY.semd new file mode 100644 index 00000000..687d10f0 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/traces/obs/AA.S000001.BXY.semd @@ -0,0 +1,5000 @@ + -48.000000000000000 0.0000000000000000 + -47.939999999999998 0.0000000000000000 + -47.880000000000003 0.0000000000000000 + -47.820000000000000 0.0000000000000000 + -47.759999999999998 0.0000000000000000 + -47.700000000000003 0.0000000000000000 + -47.640000000000001 0.0000000000000000 + -47.579999999999998 0.0000000000000000 + -47.520000000000003 0.0000000000000000 + -47.460000000000001 0.0000000000000000 + -47.399999999999999 0.0000000000000000 + -47.340000000000003 0.0000000000000000 + -47.280000000000001 0.0000000000000000 + -47.219999999999999 0.0000000000000000 + -47.159999999999997 0.0000000000000000 + -47.100000000000001 0.0000000000000000 + -47.039999999999999 0.0000000000000000 + -46.979999999999997 0.0000000000000000 + -46.920000000000002 0.0000000000000000 + -46.859999999999999 0.0000000000000000 + -46.799999999999997 0.0000000000000000 + -46.740000000000002 0.0000000000000000 + -46.680000000000000 0.0000000000000000 + -46.619999999999997 0.0000000000000000 + -46.560000000000002 0.0000000000000000 + -46.500000000000000 0.0000000000000000 + -46.439999999999998 0.0000000000000000 + -46.380000000000003 0.0000000000000000 + -46.320000000000000 0.0000000000000000 + -46.259999999999998 0.0000000000000000 + -46.200000000000003 0.0000000000000000 + -46.140000000000001 0.0000000000000000 + -46.079999999999998 0.0000000000000000 + -46.020000000000003 0.0000000000000000 + -45.960000000000001 0.0000000000000000 + -45.899999999999999 0.0000000000000000 + -45.840000000000003 0.0000000000000000 + -45.780000000000001 0.0000000000000000 + -45.719999999999999 0.0000000000000000 + -45.659999999999997 0.0000000000000000 + -45.600000000000001 0.0000000000000000 + -45.539999999999999 0.0000000000000000 + -45.479999999999997 0.0000000000000000 + -45.420000000000002 0.0000000000000000 + -45.359999999999999 0.0000000000000000 + -45.299999999999997 0.0000000000000000 + -45.240000000000002 0.0000000000000000 + -45.180000000000000 0.0000000000000000 + -45.119999999999997 0.0000000000000000 + -45.060000000000002 0.0000000000000000 + -45.000000000000000 0.0000000000000000 + -44.939999999999998 0.0000000000000000 + -44.880000000000003 0.0000000000000000 + -44.820000000000000 0.0000000000000000 + -44.759999999999998 0.0000000000000000 + -44.700000000000003 0.0000000000000000 + -44.640000000000001 0.0000000000000000 + -44.579999999999998 0.0000000000000000 + -44.520000000000003 0.0000000000000000 + -44.460000000000001 0.0000000000000000 + -44.399999999999999 0.0000000000000000 + -44.340000000000003 0.0000000000000000 + -44.280000000000001 0.0000000000000000 + -44.219999999999999 0.0000000000000000 + -44.159999999999997 0.0000000000000000 + -44.100000000000001 0.0000000000000000 + -44.039999999999999 0.0000000000000000 + -43.980000000000004 0.0000000000000000 + -43.920000000000002 0.0000000000000000 + -43.859999999999999 0.0000000000000000 + -43.799999999999997 0.0000000000000000 + -43.740000000000002 0.0000000000000000 + -43.680000000000000 0.0000000000000000 + -43.619999999999997 0.0000000000000000 + -43.560000000000002 0.0000000000000000 + -43.500000000000000 0.0000000000000000 + -43.439999999999998 0.0000000000000000 + -43.380000000000003 0.0000000000000000 + -43.320000000000000 0.0000000000000000 + -43.259999999999998 0.0000000000000000 + -43.200000000000003 0.0000000000000000 + -43.140000000000001 0.0000000000000000 + -43.079999999999998 0.0000000000000000 + -43.020000000000003 0.0000000000000000 + -42.960000000000001 0.0000000000000000 + -42.899999999999999 0.0000000000000000 + -42.840000000000003 0.0000000000000000 + -42.780000000000001 0.0000000000000000 + -42.719999999999999 0.0000000000000000 + -42.659999999999997 0.0000000000000000 + -42.600000000000001 0.0000000000000000 + -42.539999999999999 0.0000000000000000 + -42.480000000000004 0.0000000000000000 + -42.420000000000002 0.0000000000000000 + -42.359999999999999 0.0000000000000000 + -42.299999999999997 0.0000000000000000 + -42.240000000000002 0.0000000000000000 + -42.180000000000000 0.0000000000000000 + -42.119999999999997 0.0000000000000000 + -42.060000000000002 0.0000000000000000 + -42.000000000000000 0.0000000000000000 + -41.939999999999998 0.0000000000000000 + -41.880000000000003 0.0000000000000000 + -41.820000000000000 0.0000000000000000 + -41.759999999999998 0.0000000000000000 + -41.700000000000003 0.0000000000000000 + -41.640000000000001 0.0000000000000000 + -41.579999999999998 0.0000000000000000 + -41.520000000000003 0.0000000000000000 + -41.460000000000001 0.0000000000000000 + -41.399999999999999 0.0000000000000000 + -41.340000000000003 0.0000000000000000 + -41.280000000000001 0.0000000000000000 + -41.219999999999999 0.0000000000000000 + -41.159999999999997 0.0000000000000000 + -41.100000000000001 0.0000000000000000 + -41.039999999999999 0.0000000000000000 + -40.980000000000004 0.0000000000000000 + -40.920000000000002 0.0000000000000000 + -40.859999999999999 0.0000000000000000 + -40.799999999999997 0.0000000000000000 + -40.740000000000002 0.0000000000000000 + -40.680000000000000 0.0000000000000000 + -40.619999999999997 0.0000000000000000 + -40.560000000000002 0.0000000000000000 + -40.500000000000000 0.0000000000000000 + -40.439999999999998 0.0000000000000000 + -40.380000000000003 0.0000000000000000 + -40.320000000000000 0.0000000000000000 + -40.259999999999998 0.0000000000000000 + -40.200000000000003 0.0000000000000000 + -40.140000000000001 0.0000000000000000 + -40.079999999999998 0.0000000000000000 + -40.020000000000003 0.0000000000000000 + -39.960000000000001 0.0000000000000000 + -39.899999999999999 0.0000000000000000 + -39.840000000000003 0.0000000000000000 + -39.780000000000001 0.0000000000000000 + -39.719999999999999 0.0000000000000000 + -39.659999999999997 0.0000000000000000 + -39.600000000000001 0.0000000000000000 + -39.539999999999999 0.0000000000000000 + -39.480000000000004 0.0000000000000000 + -39.420000000000002 0.0000000000000000 + -39.359999999999999 0.0000000000000000 + -39.299999999999997 0.0000000000000000 + -39.240000000000002 0.0000000000000000 + -39.180000000000000 0.0000000000000000 + -39.120000000000005 0.0000000000000000 + -39.060000000000002 0.0000000000000000 + -39.000000000000000 0.0000000000000000 + -38.939999999999998 0.0000000000000000 + -38.880000000000003 0.0000000000000000 + -38.820000000000000 0.0000000000000000 + -38.759999999999998 0.0000000000000000 + -38.700000000000003 0.0000000000000000 + -38.640000000000001 0.0000000000000000 + -38.579999999999998 0.0000000000000000 + -38.519999999999996 0.0000000000000000 + -38.460000000000001 0.0000000000000000 + -38.399999999999999 0.0000000000000000 + -38.340000000000003 0.0000000000000000 + -38.280000000000001 0.0000000000000000 + -38.219999999999999 0.0000000000000000 + -38.159999999999997 0.0000000000000000 + -38.100000000000001 0.0000000000000000 + -38.039999999999999 0.0000000000000000 + -37.980000000000004 0.0000000000000000 + -37.920000000000002 0.0000000000000000 + -37.859999999999999 0.0000000000000000 + -37.799999999999997 0.0000000000000000 + -37.740000000000002 0.0000000000000000 + -37.680000000000000 0.0000000000000000 + -37.620000000000005 0.0000000000000000 + -37.560000000000002 0.0000000000000000 + -37.500000000000000 0.0000000000000000 + -37.439999999999998 0.0000000000000000 + -37.380000000000003 0.0000000000000000 + -37.320000000000000 0.0000000000000000 + -37.259999999999998 0.0000000000000000 + -37.200000000000003 0.0000000000000000 + -37.140000000000001 0.0000000000000000 + -37.079999999999998 0.0000000000000000 + -37.019999999999996 0.0000000000000000 + -36.960000000000001 0.0000000000000000 + -36.899999999999999 0.0000000000000000 + -36.840000000000003 0.0000000000000000 + -36.780000000000001 0.0000000000000000 + -36.719999999999999 0.0000000000000000 + -36.659999999999997 0.0000000000000000 + -36.600000000000001 0.0000000000000000 + -36.539999999999999 0.0000000000000000 + -36.480000000000004 0.0000000000000000 + -36.420000000000002 0.0000000000000000 + -36.359999999999999 0.0000000000000000 + -36.299999999999997 0.0000000000000000 + -36.240000000000002 0.0000000000000000 + -36.180000000000000 0.0000000000000000 + -36.120000000000005 0.0000000000000000 + -36.060000000000002 0.0000000000000000 + -36.000000000000000 0.0000000000000000 + -35.939999999999998 0.0000000000000000 + -35.880000000000003 0.0000000000000000 + -35.820000000000000 0.0000000000000000 + -35.759999999999998 0.0000000000000000 + -35.700000000000003 0.0000000000000000 + -35.640000000000001 0.0000000000000000 + -35.579999999999998 0.0000000000000000 + -35.519999999999996 0.0000000000000000 + -35.460000000000001 0.0000000000000000 + -35.399999999999999 0.0000000000000000 + -35.340000000000003 0.0000000000000000 + -35.280000000000001 0.0000000000000000 + -35.219999999999999 0.0000000000000000 + -35.159999999999997 0.0000000000000000 + -35.100000000000001 0.0000000000000000 + -35.039999999999999 0.0000000000000000 + -34.980000000000004 0.0000000000000000 + -34.920000000000002 0.0000000000000000 + -34.859999999999999 0.0000000000000000 + -34.799999999999997 0.0000000000000000 + -34.740000000000002 0.0000000000000000 + -34.680000000000000 0.0000000000000000 + -34.620000000000005 0.0000000000000000 + -34.560000000000002 0.0000000000000000 + -34.500000000000000 0.0000000000000000 + -34.439999999999998 0.0000000000000000 + -34.380000000000003 0.0000000000000000 + -34.320000000000000 0.0000000000000000 + -34.259999999999998 0.0000000000000000 + -34.200000000000003 0.0000000000000000 + -34.140000000000001 0.0000000000000000 + -34.079999999999998 0.0000000000000000 + -34.020000000000003 0.0000000000000000 + -33.960000000000001 0.0000000000000000 + -33.899999999999999 0.0000000000000000 + -33.840000000000003 0.0000000000000000 + -33.780000000000001 0.0000000000000000 + -33.719999999999999 0.0000000000000000 + -33.659999999999997 0.0000000000000000 + -33.600000000000001 0.0000000000000000 + -33.539999999999999 0.0000000000000000 + -33.480000000000004 0.0000000000000000 + -33.420000000000002 0.0000000000000000 + -33.359999999999999 0.0000000000000000 + -33.299999999999997 0.0000000000000000 + -33.240000000000002 0.0000000000000000 + -33.180000000000000 0.0000000000000000 + -33.120000000000005 0.0000000000000000 + -33.060000000000002 0.0000000000000000 + -33.000000000000000 0.0000000000000000 + -32.939999999999998 0.0000000000000000 + -32.880000000000003 0.0000000000000000 + -32.820000000000000 0.0000000000000000 + -32.759999999999998 0.0000000000000000 + -32.700000000000003 0.0000000000000000 + -32.640000000000001 0.0000000000000000 + -32.579999999999998 0.0000000000000000 + -32.520000000000003 0.0000000000000000 + -32.460000000000001 0.0000000000000000 + -32.399999999999999 0.0000000000000000 + -32.340000000000003 0.0000000000000000 + -32.280000000000001 0.0000000000000000 + -32.219999999999999 0.0000000000000000 + -32.159999999999997 0.0000000000000000 + -32.100000000000001 0.0000000000000000 + -32.039999999999999 0.0000000000000000 + -31.980000000000000 0.0000000000000000 + -31.920000000000002 0.0000000000000000 + -31.859999999999999 0.0000000000000000 + -31.800000000000001 0.0000000000000000 + -31.740000000000002 0.0000000000000000 + -31.680000000000000 0.0000000000000000 + -31.620000000000001 0.0000000000000000 + -31.560000000000002 0.0000000000000000 + -31.500000000000000 0.0000000000000000 + -31.440000000000001 0.0000000000000000 + -31.379999999999999 0.0000000000000000 + -31.320000000000000 0.0000000000000000 + -31.260000000000002 0.0000000000000000 + -31.199999999999999 0.0000000000000000 + -31.140000000000001 0.0000000000000000 + -31.080000000000002 0.0000000000000000 + -31.020000000000000 0.0000000000000000 + -30.960000000000001 0.0000000000000000 + -30.900000000000002 0.0000000000000000 + -30.840000000000000 0.0000000000000000 + -30.780000000000001 0.0000000000000000 + -30.719999999999999 0.0000000000000000 + -30.660000000000000 0.0000000000000000 + -30.600000000000001 0.0000000000000000 + -30.539999999999999 0.0000000000000000 + -30.480000000000000 0.0000000000000000 + -30.420000000000002 0.0000000000000000 + -30.359999999999999 0.0000000000000000 + -30.300000000000001 0.0000000000000000 + -30.240000000000002 0.0000000000000000 + -30.180000000000000 0.0000000000000000 + -30.120000000000001 0.0000000000000000 + -30.060000000000002 0.0000000000000000 + -30.000000000000000 0.0000000000000000 + -29.940000000000001 0.0000000000000000 + -29.879999999999999 0.0000000000000000 + -29.820000000000000 0.0000000000000000 + -29.760000000000002 0.0000000000000000 + -29.699999999999999 0.0000000000000000 + -29.640000000000001 0.0000000000000000 + -29.580000000000002 0.0000000000000000 + -29.520000000000000 0.0000000000000000 + -29.460000000000001 0.0000000000000000 + -29.400000000000002 0.0000000000000000 + -29.340000000000000 0.0000000000000000 + -29.280000000000001 0.0000000000000000 + -29.220000000000002 0.0000000000000000 + -29.160000000000000 0.0000000000000000 + -29.100000000000001 0.0000000000000000 + -29.039999999999999 0.0000000000000000 + -28.980000000000000 0.0000000000000000 + -28.920000000000002 0.0000000000000000 + -28.859999999999999 0.0000000000000000 + -28.800000000000001 0.0000000000000000 + -28.740000000000002 0.0000000000000000 + -28.680000000000000 0.0000000000000000 + -28.620000000000001 0.0000000000000000 + -28.560000000000002 0.0000000000000000 + -28.500000000000000 0.0000000000000000 + -28.440000000000001 0.0000000000000000 + -28.379999999999999 0.0000000000000000 + -28.320000000000000 0.0000000000000000 + -28.260000000000002 0.0000000000000000 + -28.199999999999999 0.0000000000000000 + -28.140000000000001 0.0000000000000000 + -28.080000000000002 0.0000000000000000 + -28.020000000000000 0.0000000000000000 + -27.960000000000001 0.0000000000000000 + -27.900000000000002 0.0000000000000000 + -27.840000000000000 0.0000000000000000 + -27.780000000000001 0.0000000000000000 + -27.720000000000002 0.0000000000000000 + -27.660000000000000 0.0000000000000000 + -27.600000000000001 0.0000000000000000 + -27.539999999999999 0.0000000000000000 + -27.480000000000000 0.0000000000000000 + -27.420000000000002 0.0000000000000000 + -27.359999999999999 0.0000000000000000 + -27.300000000000001 0.0000000000000000 + -27.240000000000002 0.0000000000000000 + -27.180000000000000 0.0000000000000000 + -27.120000000000001 0.0000000000000000 + -27.060000000000002 0.0000000000000000 + -27.000000000000000 0.0000000000000000 + -26.940000000000001 0.0000000000000000 + -26.880000000000003 0.0000000000000000 + -26.820000000000000 0.0000000000000000 + -26.760000000000002 0.0000000000000000 + -26.699999999999999 0.0000000000000000 + -26.640000000000001 0.0000000000000000 + -26.580000000000002 0.0000000000000000 + -26.520000000000000 0.0000000000000000 + -26.460000000000001 0.0000000000000000 + -26.400000000000002 0.0000000000000000 + -26.340000000000000 0.0000000000000000 + -26.280000000000001 0.0000000000000000 + -26.220000000000002 0.0000000000000000 + -26.160000000000000 0.0000000000000000 + -26.100000000000001 0.0000000000000000 + -26.039999999999999 0.0000000000000000 + -25.980000000000000 0.0000000000000000 + -25.920000000000002 0.0000000000000000 + -25.859999999999999 0.0000000000000000 + -25.800000000000001 0.0000000000000000 + -25.740000000000002 0.0000000000000000 + -25.680000000000000 0.0000000000000000 + -25.620000000000001 0.0000000000000000 + -25.560000000000002 0.0000000000000000 + -25.500000000000000 0.0000000000000000 + -25.440000000000001 0.0000000000000000 + -25.380000000000003 0.0000000000000000 + -25.320000000000000 0.0000000000000000 + -25.260000000000002 0.0000000000000000 + -25.199999999999999 0.0000000000000000 + -25.140000000000001 0.0000000000000000 + -25.080000000000002 0.0000000000000000 + -25.020000000000000 0.0000000000000000 + -24.960000000000001 0.0000000000000000 + -24.900000000000002 0.0000000000000000 + -24.840000000000000 0.0000000000000000 + -24.780000000000001 0.0000000000000000 + -24.720000000000002 0.0000000000000000 + -24.660000000000000 0.0000000000000000 + -24.600000000000001 0.0000000000000000 + -24.539999999999999 0.0000000000000000 + -24.480000000000000 0.0000000000000000 + -24.420000000000002 0.0000000000000000 + -24.359999999999999 0.0000000000000000 + -24.300000000000001 0.0000000000000000 + -24.240000000000002 0.0000000000000000 + -24.180000000000000 0.0000000000000000 + -24.120000000000001 0.0000000000000000 + -24.060000000000002 0.0000000000000000 + -24.000000000000000 0.0000000000000000 + -23.940000000000001 0.0000000000000000 + -23.880000000000003 0.0000000000000000 + -23.820000000000000 0.0000000000000000 + -23.760000000000002 0.0000000000000000 + -23.699999999999999 0.0000000000000000 + -23.640000000000001 0.0000000000000000 + -23.580000000000002 0.0000000000000000 + -23.520000000000000 0.0000000000000000 + -23.460000000000001 0.0000000000000000 + -23.400000000000002 0.0000000000000000 + -23.340000000000000 0.0000000000000000 + -23.280000000000001 0.0000000000000000 + -23.220000000000002 0.0000000000000000 + -23.160000000000000 0.0000000000000000 + -23.100000000000001 0.0000000000000000 + -23.039999999999999 0.0000000000000000 + -22.980000000000000 0.0000000000000000 + -22.920000000000002 0.0000000000000000 + -22.859999999999999 0.0000000000000000 + -22.800000000000001 0.0000000000000000 + -22.740000000000002 0.0000000000000000 + -22.680000000000000 0.0000000000000000 + -22.620000000000001 0.0000000000000000 + -22.560000000000002 0.0000000000000000 + -22.500000000000000 0.0000000000000000 + -22.440000000000001 0.0000000000000000 + -22.380000000000003 0.0000000000000000 + -22.320000000000000 0.0000000000000000 + -22.260000000000002 0.0000000000000000 + -22.199999999999999 0.0000000000000000 + -22.140000000000001 0.0000000000000000 + -22.080000000000002 0.0000000000000000 + -22.020000000000000 0.0000000000000000 + -21.960000000000001 0.0000000000000000 + -21.900000000000002 0.0000000000000000 + -21.840000000000000 0.0000000000000000 + -21.780000000000001 0.0000000000000000 + -21.720000000000002 0.0000000000000000 + -21.660000000000000 0.0000000000000000 + -21.600000000000001 0.0000000000000000 + -21.540000000000003 0.0000000000000000 + -21.480000000000000 0.0000000000000000 + -21.420000000000002 0.0000000000000000 + -21.359999999999999 0.0000000000000000 + -21.300000000000001 0.0000000000000000 + -21.240000000000002 0.0000000000000000 + -21.180000000000000 0.0000000000000000 + -21.120000000000001 0.0000000000000000 + -21.060000000000002 0.0000000000000000 + -21.000000000000000 0.0000000000000000 + -20.940000000000001 0.0000000000000000 + -20.880000000000003 0.0000000000000000 + -20.820000000000000 0.0000000000000000 + -20.760000000000002 0.0000000000000000 + -20.699999999999999 0.0000000000000000 + -20.640000000000001 0.0000000000000000 + -20.580000000000002 0.0000000000000000 + -20.520000000000000 0.0000000000000000 + -20.460000000000001 0.0000000000000000 + -20.400000000000002 0.0000000000000000 + -20.340000000000000 0.0000000000000000 + -20.280000000000001 0.0000000000000000 + -20.220000000000002 0.0000000000000000 + -20.160000000000000 0.0000000000000000 + -20.100000000000001 0.0000000000000000 + -20.040000000000003 0.0000000000000000 + -19.980000000000000 0.0000000000000000 + -19.920000000000002 0.0000000000000000 + -19.859999999999999 0.0000000000000000 + -19.800000000000001 0.0000000000000000 + -19.740000000000002 0.0000000000000000 + -19.680000000000000 0.0000000000000000 + -19.620000000000001 0.0000000000000000 + -19.560000000000002 0.0000000000000000 + -19.500000000000000 0.0000000000000000 + -19.440000000000001 0.0000000000000000 + -19.380000000000003 0.0000000000000000 + -19.320000000000000 0.0000000000000000 + -19.260000000000002 0.0000000000000000 + -19.200000000000003 0.0000000000000000 + -19.140000000000001 0.0000000000000000 + -19.080000000000002 0.0000000000000000 + -19.020000000000000 0.0000000000000000 + -18.960000000000001 0.0000000000000000 + -18.900000000000002 0.0000000000000000 + -18.840000000000000 0.0000000000000000 + -18.780000000000001 0.0000000000000000 + -18.720000000000002 0.0000000000000000 + -18.660000000000000 0.0000000000000000 + -18.600000000000001 0.0000000000000000 + -18.540000000000003 0.0000000000000000 + -18.480000000000000 0.0000000000000000 + -18.420000000000002 0.0000000000000000 + -18.359999999999999 0.0000000000000000 + -18.300000000000001 0.0000000000000000 + -18.240000000000002 0.0000000000000000 + -18.180000000000000 0.0000000000000000 + -18.120000000000001 0.0000000000000000 + -18.060000000000002 0.0000000000000000 + -18.000000000000000 0.0000000000000000 + -17.940000000000001 0.0000000000000000 + -17.880000000000003 0.0000000000000000 + -17.820000000000000 0.0000000000000000 + -17.760000000000002 0.0000000000000000 + -17.700000000000003 0.0000000000000000 + -17.640000000000001 0.0000000000000000 + -17.580000000000002 0.0000000000000000 + -17.520000000000000 0.0000000000000000 + -17.460000000000001 0.0000000000000000 + -17.400000000000002 0.0000000000000000 + -17.340000000000000 0.0000000000000000 + -17.280000000000001 0.0000000000000000 + -17.220000000000002 0.0000000000000000 + -17.160000000000000 0.0000000000000000 + -17.100000000000001 0.0000000000000000 + -17.040000000000003 0.0000000000000000 + -16.980000000000000 0.0000000000000000 + -16.920000000000002 0.0000000000000000 + -16.859999999999999 0.0000000000000000 + -16.800000000000001 0.0000000000000000 + -16.740000000000002 0.0000000000000000 + -16.680000000000000 0.0000000000000000 + -16.620000000000001 0.0000000000000000 + -16.560000000000002 0.0000000000000000 + -16.500000000000000 0.0000000000000000 + -16.440000000000001 0.0000000000000000 + -16.380000000000003 0.0000000000000000 + -16.320000000000000 0.0000000000000000 + -16.260000000000002 0.0000000000000000 + -16.200000000000003 0.0000000000000000 + -16.140000000000001 0.0000000000000000 + -16.080000000000002 0.0000000000000000 + -16.020000000000000 0.0000000000000000 + -15.960000000000001 0.0000000000000000 + -15.899999999999999 0.0000000000000000 + -15.840000000000003 0.0000000000000000 + -15.780000000000001 0.0000000000000000 + -15.719999999999999 0.0000000000000000 + -15.660000000000004 0.0000000000000000 + -15.600000000000001 0.0000000000000000 + -15.539999999999999 0.0000000000000000 + -15.480000000000004 0.0000000000000000 + -15.420000000000002 0.0000000000000000 + -15.359999999999999 0.0000000000000000 + -15.300000000000004 0.0000000000000000 + -15.240000000000002 0.0000000000000000 + -15.180000000000000 0.0000000000000000 + -15.120000000000005 0.0000000000000000 + -15.060000000000002 0.0000000000000000 + -15.000000000000000 0.0000000000000000 + -14.939999999999998 0.0000000000000000 + -14.880000000000003 0.0000000000000000 + -14.820000000000000 0.0000000000000000 + -14.759999999999998 0.0000000000000000 + -14.700000000000003 0.0000000000000000 + -14.640000000000001 0.0000000000000000 + -14.579999999999998 0.0000000000000000 + -14.520000000000003 0.0000000000000000 + -14.460000000000001 0.0000000000000000 + -14.399999999999999 0.0000000000000000 + -14.340000000000003 0.0000000000000000 + -14.280000000000001 0.0000000000000000 + -14.219999999999999 0.0000000000000000 + -14.160000000000004 0.0000000000000000 + -14.100000000000001 0.0000000000000000 + -14.039999999999999 0.0000000000000000 + -13.980000000000004 0.0000000000000000 + -13.920000000000002 0.0000000000000000 + -13.859999999999999 0.0000000000000000 + -13.800000000000004 0.0000000000000000 + -13.740000000000002 0.0000000000000000 + -13.680000000000000 0.0000000000000000 + -13.620000000000005 0.0000000000000000 + -13.560000000000002 0.0000000000000000 + -13.500000000000000 0.0000000000000000 + -13.439999999999998 0.0000000000000000 + -13.380000000000003 0.0000000000000000 + -13.320000000000000 0.0000000000000000 + -13.259999999999998 0.0000000000000000 + -13.200000000000003 0.0000000000000000 + -13.140000000000001 0.0000000000000000 + -13.079999999999998 0.0000000000000000 + -13.020000000000003 0.0000000000000000 + -12.960000000000001 0.0000000000000000 + -12.899999999999999 0.0000000000000000 + -12.840000000000003 0.0000000000000000 + -12.780000000000001 0.0000000000000000 + -12.719999999999999 0.0000000000000000 + -12.660000000000004 0.0000000000000000 + -12.600000000000001 0.0000000000000000 + -12.539999999999999 0.0000000000000000 + -12.480000000000004 0.0000000000000000 + -12.420000000000002 0.0000000000000000 + -12.359999999999999 0.0000000000000000 + -12.300000000000004 0.0000000000000000 + -12.240000000000002 0.0000000000000000 + -12.180000000000000 0.0000000000000000 + -12.120000000000005 0.0000000000000000 + -12.060000000000002 0.0000000000000000 + -12.000000000000000 0.0000000000000000 + -11.940000000000005 0.0000000000000000 + -11.880000000000003 0.0000000000000000 + -11.820000000000000 0.0000000000000000 + -11.759999999999998 0.0000000000000000 + -11.700000000000003 0.0000000000000000 + -11.640000000000001 0.0000000000000000 + -11.579999999999998 0.0000000000000000 + -11.520000000000003 0.0000000000000000 + -11.460000000000001 0.0000000000000000 + -11.399999999999999 0.0000000000000000 + -11.340000000000003 0.0000000000000000 + -11.280000000000001 0.0000000000000000 + -11.219999999999999 0.0000000000000000 + -11.160000000000004 0.0000000000000000 + -11.100000000000001 0.0000000000000000 + -11.039999999999999 0.0000000000000000 + -10.980000000000004 0.0000000000000000 + -10.920000000000002 0.0000000000000000 + -10.859999999999999 0.0000000000000000 + -10.800000000000004 0.0000000000000000 + -10.740000000000002 0.0000000000000000 + -10.680000000000000 0.0000000000000000 + -10.620000000000005 0.0000000000000000 + -10.560000000000002 0.0000000000000000 + -10.500000000000000 0.0000000000000000 + -10.440000000000005 0.0000000000000000 + -10.380000000000003 0.0000000000000000 + -10.320000000000000 0.0000000000000000 + -10.259999999999998 0.0000000000000000 + -10.200000000000003 0.0000000000000000 + -10.140000000000001 0.0000000000000000 + -10.079999999999998 0.0000000000000000 + -10.020000000000003 0.0000000000000000 + -9.9600000000000009 0.0000000000000000 + -9.8999999999999986 0.0000000000000000 + -9.8400000000000034 0.0000000000000000 + -9.7800000000000011 0.0000000000000000 + -9.7199999999999989 0.0000000000000000 + -9.6600000000000037 0.0000000000000000 + -9.6000000000000014 0.0000000000000000 + -9.5399999999999991 0.0000000000000000 + -9.4800000000000040 0.0000000000000000 + -9.4200000000000017 0.0000000000000000 + -9.3599999999999994 0.0000000000000000 + -9.3000000000000043 0.0000000000000000 + -9.2400000000000020 0.0000000000000000 + -9.1799999999999997 0.0000000000000000 + -9.1200000000000045 0.0000000000000000 + -9.0600000000000023 0.0000000000000000 + -9.0000000000000000 0.0000000000000000 + -8.9400000000000048 0.0000000000000000 + -8.8800000000000026 0.0000000000000000 + -8.8200000000000003 0.0000000000000000 + -8.7599999999999980 0.0000000000000000 + -8.7000000000000028 0.0000000000000000 + -8.6400000000000006 0.0000000000000000 + -8.5799999999999983 0.0000000000000000 + -8.5200000000000031 0.0000000000000000 + -8.4600000000000009 0.0000000000000000 + -8.3999999999999986 0.0000000000000000 + -8.3400000000000034 0.0000000000000000 + -8.2800000000000011 0.0000000000000000 + -8.2199999999999989 0.0000000000000000 + -8.1600000000000037 0.0000000000000000 + -8.1000000000000014 0.0000000000000000 + -8.0399999999999991 0.0000000000000000 + -7.9800000000000040 0.0000000000000000 + -7.9200000000000017 0.0000000000000000 + -7.8599999999999994 0.0000000000000000 + -7.8000000000000043 0.0000000000000000 + -7.7400000000000020 0.0000000000000000 + -7.6799999999999997 0.0000000000000000 + -7.6200000000000045 0.0000000000000000 + -7.5600000000000023 0.0000000000000000 + -7.5000000000000000 0.0000000000000000 + -7.4400000000000048 0.0000000000000000 + -7.3800000000000026 0.0000000000000000 + -7.3200000000000003 0.0000000000000000 + -7.2599999999999980 0.0000000000000000 + -7.2000000000000028 0.0000000000000000 + -7.1400000000000006 0.0000000000000000 + -7.0799999999999983 0.0000000000000000 + -7.0200000000000031 0.0000000000000000 + -6.9600000000000009 0.0000000000000000 + -6.8999999999999986 0.0000000000000000 + -6.8400000000000034 0.0000000000000000 + -6.7800000000000011 0.0000000000000000 + -6.7199999999999989 0.0000000000000000 + -6.6600000000000037 0.0000000000000000 + -6.6000000000000014 0.0000000000000000 + -6.5399999999999991 0.0000000000000000 + -6.4800000000000040 0.0000000000000000 + -6.4200000000000017 0.0000000000000000 + -6.3599999999999994 0.0000000000000000 + -6.3000000000000043 0.0000000000000000 + -6.2400000000000020 0.0000000000000000 + -6.1799999999999997 0.0000000000000000 + -6.1200000000000045 0.0000000000000000 + -6.0600000000000023 0.0000000000000000 + -6.0000000000000000 0.0000000000000000 + -5.9400000000000048 0.0000000000000000 + -5.8800000000000026 0.0000000000000000 + -5.8200000000000003 0.0000000000000000 + -5.7600000000000051 0.0000000000000000 + -5.7000000000000028 0.0000000000000000 + -5.6400000000000006 0.0000000000000000 + -5.5799999999999983 0.0000000000000000 + -5.5200000000000031 0.0000000000000000 + -5.4600000000000009 0.0000000000000000 + -5.3999999999999986 0.0000000000000000 + -5.3400000000000034 0.0000000000000000 + -5.2800000000000011 0.0000000000000000 + -5.2199999999999989 0.0000000000000000 + -5.1600000000000037 0.0000000000000000 + -5.1000000000000014 0.0000000000000000 + -5.0399999999999991 0.0000000000000000 + -4.9800000000000040 0.0000000000000000 + -4.9200000000000017 0.0000000000000000 + -4.8599999999999994 0.0000000000000000 + -4.8000000000000043 0.0000000000000000 + -4.7400000000000020 0.0000000000000000 + -4.6799999999999997 0.0000000000000000 + -4.6200000000000045 0.0000000000000000 + -4.5600000000000023 0.0000000000000000 + -4.5000000000000000 0.0000000000000000 + -4.4400000000000048 0.0000000000000000 + -4.3800000000000026 0.0000000000000000 + -4.3200000000000003 0.0000000000000000 + -4.2600000000000051 0.0000000000000000 + -4.2000000000000028 0.0000000000000000 + -4.1400000000000006 0.0000000000000000 + -4.0799999999999983 0.0000000000000000 + -4.0200000000000031 0.0000000000000000 + -3.9600000000000009 0.0000000000000000 + -3.8999999999999986 0.0000000000000000 + -3.8400000000000034 0.0000000000000000 + -3.7800000000000011 0.0000000000000000 + -3.7199999999999989 0.0000000000000000 + -3.6600000000000037 0.0000000000000000 + -3.6000000000000014 0.0000000000000000 + -3.5399999999999991 0.0000000000000000 + -3.4800000000000040 0.0000000000000000 + -3.4200000000000017 0.0000000000000000 + -3.3599999999999994 0.0000000000000000 + -3.3000000000000043 0.0000000000000000 + -3.2400000000000020 0.0000000000000000 + -3.1799999999999997 0.0000000000000000 + -3.1200000000000045 0.0000000000000000 + -3.0600000000000023 0.0000000000000000 + -3.0000000000000000 0.0000000000000000 + -2.9400000000000048 0.0000000000000000 + -2.8800000000000026 0.0000000000000000 + -2.8200000000000003 0.0000000000000000 + -2.7600000000000051 0.0000000000000000 + -2.7000000000000028 0.0000000000000000 + -2.6400000000000006 0.0000000000000000 + -2.5799999999999983 0.0000000000000000 + -2.5200000000000031 0.0000000000000000 + -2.4600000000000009 0.0000000000000000 + -2.3999999999999986 0.0000000000000000 + -2.3400000000000034 0.0000000000000000 + -2.2800000000000011 0.0000000000000000 + -2.2199999999999989 0.0000000000000000 + -2.1600000000000037 0.0000000000000000 + -2.1000000000000014 0.0000000000000000 + -2.0399999999999991 0.0000000000000000 + -1.9800000000000040 0.0000000000000000 + -1.9200000000000017 0.0000000000000000 + -1.8599999999999994 0.0000000000000000 + -1.8000000000000043 0.0000000000000000 + -1.7400000000000020 0.0000000000000000 + -1.6799999999999997 0.0000000000000000 + -1.6200000000000045 0.0000000000000000 + -1.5600000000000023 0.0000000000000000 + -1.5000000000000000 0.0000000000000000 + -1.4400000000000048 0.0000000000000000 + -1.3800000000000026 0.0000000000000000 + -1.3200000000000003 0.0000000000000000 + -1.2600000000000051 0.0000000000000000 + -1.2000000000000028 0.0000000000000000 + -1.1400000000000006 0.0000000000000000 + -1.0799999999999983 0.0000000000000000 + -1.0200000000000031 0.0000000000000000 + -0.96000000000000085 0.0000000000000000 + -0.89999999999999858 0.0000000000000000 + -0.84000000000000341 0.0000000000000000 + -0.78000000000000114 0.0000000000000000 + -0.71999999999999886 0.0000000000000000 + -0.66000000000000369 0.0000000000000000 + -0.60000000000000142 0.0000000000000000 + -0.53999999999999915 0.0000000000000000 + -0.48000000000000398 0.0000000000000000 + -0.42000000000000171 0.0000000000000000 + -0.35999999999999943 0.0000000000000000 + -0.30000000000000426 0.0000000000000000 + -0.24000000000000199 0.0000000000000000 + -0.17999999999999972 0.0000000000000000 + -0.12000000000000455 0.0000000000000000 + -6.0000000000002274E-002 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 + 5.9999999999995168E-002 0.0000000000000000 + 0.11999999999999744 0.0000000000000000 + 0.17999999999999972 0.0000000000000000 + 0.23999999999999488 0.0000000000000000 + 0.29999999999999716 0.0000000000000000 + 0.35999999999999943 0.0000000000000000 + 0.42000000000000171 0.0000000000000000 + 0.47999999999999687 0.0000000000000000 + 0.53999999999999915 0.0000000000000000 + 0.60000000000000142 0.0000000000000000 + 0.65999999999999659 0.0000000000000000 + 0.71999999999999886 0.0000000000000000 + 0.78000000000000114 0.0000000000000000 + 0.83999999999999631 0.0000000000000000 + 0.89999999999999858 0.0000000000000000 + 0.96000000000000085 0.0000000000000000 + 1.0199999999999960 0.0000000000000000 + 1.0799999999999983 0.0000000000000000 + 1.1400000000000006 0.0000000000000000 + 1.1999999999999957 0.0000000000000000 + 1.2599999999999980 0.0000000000000000 + 1.3200000000000003 0.0000000000000000 + 1.3799999999999955 0.0000000000000000 + 1.4399999999999977 0.0000000000000000 + 1.5000000000000000 0.0000000000000000 + 1.5599999999999952 0.0000000000000000 + 1.6199999999999974 0.0000000000000000 + 1.6799999999999997 0.0000000000000000 + 1.7399999999999949 0.0000000000000000 + 1.7999999999999972 0.0000000000000000 + 1.8599999999999994 0.0000000000000000 + 1.9200000000000017 0.0000000000000000 + 1.9799999999999969 0.0000000000000000 + 2.0399999999999991 0.0000000000000000 + 2.1000000000000014 0.0000000000000000 + 2.1599999999999966 0.0000000000000000 + 2.2199999999999989 0.0000000000000000 + 2.2800000000000011 0.0000000000000000 + 2.3399999999999963 0.0000000000000000 + 2.3999999999999986 0.0000000000000000 + 2.4600000000000009 0.0000000000000000 + 2.5199999999999960 0.0000000000000000 + 2.5799999999999983 0.0000000000000000 + 2.6400000000000006 0.0000000000000000 + 2.6999999999999957 0.0000000000000000 + 2.7599999999999980 0.0000000000000000 + 2.8200000000000003 0.0000000000000000 + 2.8799999999999955 0.0000000000000000 + 2.9399999999999977 0.0000000000000000 + 3.0000000000000000 0.0000000000000000 + 3.0599999999999952 0.0000000000000000 + 3.1199999999999974 0.0000000000000000 + 3.1799999999999997 0.0000000000000000 + 3.2399999999999949 0.0000000000000000 + 3.2999999999999972 0.0000000000000000 + 3.3599999999999994 0.0000000000000000 + 3.4199999999999946 0.0000000000000000 + 3.4799999999999969 0.0000000000000000 + 3.5399999999999991 0.0000000000000000 + 3.6000000000000014 0.0000000000000000 + 3.6599999999999966 0.0000000000000000 + 3.7199999999999989 0.0000000000000000 + 3.7800000000000011 0.0000000000000000 + 3.8399999999999963 0.0000000000000000 + 3.8999999999999986 0.0000000000000000 + 3.9600000000000009 0.0000000000000000 + 4.0199999999999960 0.0000000000000000 + 4.0799999999999983 0.0000000000000000 + 4.1400000000000006 0.0000000000000000 + 4.1999999999999957 0.0000000000000000 + 4.2599999999999980 0.0000000000000000 + 4.3200000000000003 0.0000000000000000 + 4.3799999999999955 0.0000000000000000 + 4.4399999999999977 0.0000000000000000 + 4.5000000000000000 0.0000000000000000 + 4.5599999999999952 0.0000000000000000 + 4.6199999999999974 0.0000000000000000 + 4.6799999999999997 0.0000000000000000 + 4.7399999999999949 0.0000000000000000 + 4.7999999999999972 0.0000000000000000 + 4.8599999999999994 0.0000000000000000 + 4.9199999999999946 0.0000000000000000 + 4.9799999999999969 0.0000000000000000 + 5.0399999999999991 0.0000000000000000 + 5.1000000000000014 0.0000000000000000 + 5.1599999999999966 0.0000000000000000 + 5.2199999999999989 0.0000000000000000 + 5.2800000000000011 0.0000000000000000 + 5.3399999999999963 0.0000000000000000 + 5.3999999999999986 0.0000000000000000 + 5.4600000000000009 0.0000000000000000 + 5.5199999999999960 0.0000000000000000 + 5.5799999999999983 0.0000000000000000 + 5.6400000000000006 0.0000000000000000 + 5.6999999999999957 0.0000000000000000 + 5.7599999999999980 0.0000000000000000 + 5.8200000000000003 0.0000000000000000 + 5.8799999999999955 0.0000000000000000 + 5.9399999999999977 0.0000000000000000 + 6.0000000000000000 0.0000000000000000 + 6.0599999999999952 0.0000000000000000 + 6.1199999999999974 0.0000000000000000 + 6.1799999999999997 0.0000000000000000 + 6.2399999999999949 0.0000000000000000 + 6.2999999999999972 0.0000000000000000 + 6.3599999999999994 0.0000000000000000 + 6.4199999999999946 0.0000000000000000 + 6.4799999999999969 0.0000000000000000 + 6.5399999999999991 0.0000000000000000 + 6.6000000000000014 0.0000000000000000 + 6.6599999999999966 0.0000000000000000 + 6.7199999999999989 0.0000000000000000 + 6.7800000000000011 0.0000000000000000 + 6.8399999999999963 0.0000000000000000 + 6.8999999999999986 0.0000000000000000 + 6.9600000000000009 0.0000000000000000 + 7.0199999999999960 0.0000000000000000 + 7.0799999999999983 0.0000000000000000 + 7.1400000000000006 0.0000000000000000 + 7.1999999999999957 0.0000000000000000 + 7.2599999999999980 0.0000000000000000 + 7.3200000000000003 0.0000000000000000 + 7.3799999999999955 0.0000000000000000 + 7.4399999999999977 0.0000000000000000 + 7.5000000000000000 0.0000000000000000 + 7.5599999999999952 0.0000000000000000 + 7.6199999999999974 0.0000000000000000 + 7.6799999999999997 0.0000000000000000 + 7.7399999999999949 0.0000000000000000 + 7.7999999999999972 0.0000000000000000 + 7.8599999999999994 0.0000000000000000 + 7.9199999999999946 0.0000000000000000 + 7.9799999999999969 0.0000000000000000 + 8.0399999999999991 0.0000000000000000 + 8.1000000000000014 0.0000000000000000 + 8.1599999999999966 0.0000000000000000 + 8.2199999999999989 0.0000000000000000 + 8.2800000000000011 0.0000000000000000 + 8.3399999999999963 0.0000000000000000 + 8.3999999999999986 0.0000000000000000 + 8.4600000000000009 0.0000000000000000 + 8.5199999999999960 0.0000000000000000 + 8.5799999999999983 0.0000000000000000 + 8.6400000000000006 0.0000000000000000 + 8.6999999999999957 0.0000000000000000 + 8.7599999999999980 0.0000000000000000 + 8.8200000000000003 0.0000000000000000 + 8.8799999999999955 0.0000000000000000 + 8.9399999999999977 0.0000000000000000 + 9.0000000000000000 0.0000000000000000 + 9.0599999999999952 0.0000000000000000 + 9.1199999999999974 0.0000000000000000 + 9.1799999999999997 0.0000000000000000 + 9.2399999999999949 0.0000000000000000 + 9.2999999999999972 0.0000000000000000 + 9.3599999999999994 0.0000000000000000 + 9.4199999999999946 0.0000000000000000 + 9.4799999999999969 0.0000000000000000 + 9.5399999999999991 0.0000000000000000 + 9.5999999999999943 0.0000000000000000 + 9.6599999999999966 0.0000000000000000 + 9.7199999999999989 0.0000000000000000 + 9.7800000000000011 0.0000000000000000 + 9.8399999999999963 0.0000000000000000 + 9.8999999999999986 0.0000000000000000 + 9.9600000000000009 0.0000000000000000 + 10.019999999999996 0.0000000000000000 + 10.079999999999998 0.0000000000000000 + 10.140000000000001 0.0000000000000000 + 10.199999999999996 0.0000000000000000 + 10.259999999999998 1.2056616632021526E-041 + 10.320000000000000 3.9401423474784629E-041 + 10.379999999999995 7.7607499130147244E-041 + 10.439999999999998 1.2599154056573850E-040 + 10.500000000000000 1.7853862034132732E-040 + 10.559999999999995 2.3524874738568226E-040 + 10.619999999999997 2.9195887443003721E-040 + 10.680000000000000 3.5292764906810488E-040 + 10.739999999999995 4.1815508915742239E-040 + 10.799999999999997 4.8033156903059584E-040 + 10.859999999999999 5.2696556290012197E-040 + 10.919999999999995 5.5004364384581983E-040 + 10.979999999999997 5.4763466208896976E-040 + 11.039999999999999 5.2003130266289107E-040 + 11.099999999999994 4.6125411212483216E-040 + 11.159999999999997 3.7186088850412563E-040 + 11.219999999999999 2.5574068194880945E-040 + 11.280000000000001 1.1760578399670414E-040 + 11.339999999999996 -2.4545032975874585E-041 + 11.399999999999999 -1.6742533926838069E-040 + 11.460000000000001 -3.0868002931344087E-040 + 11.519999999999996 -3.5690459401382420E-040 + 11.579999999999998 -2.7723278145068874E-040 + 11.640000000000001 -5.2110592460264529E-041 + 11.699999999999996 3.9965796649283078E-040 + 11.759999999999998 1.0133016679727971E-039 + 11.820000000000000 5.2766933024180547E-039 + 11.879999999999995 1.1996996456117291E-038 + 11.939999999999998 2.0908469924756148E-038 + 12.000000000000000 3.0611249557930357E-038 + 12.059999999999995 4.0085164805058791E-038 + 12.119999999999997 4.9300706667485925E-038 + 12.180000000000000 5.8236000596085572E-038 + 12.239999999999995 6.6707695733925535E-038 + 12.299999999999997 7.3396421692844982E-038 + 12.359999999999999 7.5578371876400310E-038 + 12.419999999999995 7.4056604795488025E-038 + 12.479999999999997 6.8364259123985490E-038 + 12.539999999999999 5.8447562467555419E-038 + 12.599999999999994 4.4701167730316739E-038 + 12.659999999999997 2.8287550624683698E-038 + 12.719999999999999 8.5474436174925271E-039 + 12.780000000000001 -1.1002290688486897E-038 + 12.839999999999996 -3.0398795504988611E-038 + 12.899999999999999 -4.6386080279107063E-038 + 12.960000000000001 -5.4488230710909449E-038 + 13.019999999999996 -5.5850828296020530E-038 + 13.079999999999998 -4.9794172753475939E-038 + 13.140000000000001 -3.2222843901602156E-038 + 13.199999999999996 -8.1824220540981228E-039 + 13.259999999999998 2.3196833138341772E-038 + 13.320000000000000 6.6803112745456500E-038 + 13.379999999999995 1.2125845702765876E-037 + 13.439999999999998 1.7523437681970698E-037 + 13.500000000000000 2.2396549513459998E-037 + 13.559999999999995 2.5836144071522480E-037 + 13.619999999999997 2.4249614949529446E-037 + 13.680000000000000 1.6561185210716099E-037 + 13.739999999999995 2.3998852489473052E-038 + 13.799999999999997 -1.5842890676047773E-037 + 13.859999999999999 -3.8107951446310052E-037 + 13.919999999999995 -6.0999983445009742E-037 + 13.979999999999997 -8.4767424357302486E-037 + 14.039999999999999 -1.0712949299672245E-036 + 14.099999999999994 -1.2382807540116233E-036 + 14.159999999999997 -1.3793481994915575E-036 + 14.219999999999999 -1.5005608100028846E-036 + 14.280000000000001 -1.5179449486982298E-036 + 14.339999999999996 -1.3621538897679964E-036 + 14.399999999999999 -1.0387443867491364E-036 + 14.460000000000001 -5.4949595891946987E-037 + 14.519999999999996 4.4880558041394267E-038 + 14.579999999999998 7.2692162227800646E-037 + 14.640000000000001 1.4515997319390112E-036 + 14.699999999999996 2.1828707550658766E-036 + 14.759999999999998 2.8633784675596292E-036 + 14.820000000000000 3.3081340523132881E-036 + 14.879999999999995 3.4248632825147166E-036 + 14.939999999999998 3.1240503482816444E-036 + 15.000000000000000 2.3965300090624906E-036 + 15.059999999999995 1.1710914925403126E-036 + 15.119999999999997 -5.4507324057983445E-037 + 15.180000000000000 -2.6769509931523486E-036 + 15.239999999999995 -5.0769722319259768E-036 + 15.299999999999997 -7.6986545983397229E-036 + 15.359999999999999 -1.0292245168993042E-035 + 15.419999999999995 -1.2621530682671216E-035 + 15.479999999999997 -1.4365211369384578E-035 + 15.539999999999999 -1.5227375188473250E-035 + 15.599999999999994 -1.4970940384317735E-035 + 15.659999999999997 -1.3127869374656572E-035 + 15.719999999999999 -9.5320672550857703E-036 + 15.780000000000001 -3.9500783956231623E-036 + 15.839999999999996 3.7462809029410232E-036 + 15.899999999999999 1.3545289954790113E-035 + 15.960000000000001 2.5287613051411800E-035 + 16.019999999999996 3.8637387266140358E-035 + 16.079999999999998 5.3062395109602549E-035 + 16.140000000000001 6.7890507687603670E-035 + 16.200000000000003 8.1969639637089772E-035 + 16.259999999999991 9.4040713786651640E-035 + 16.319999999999993 1.0278066221786503E-034 + 16.379999999999995 1.0680085947572730E-034 + 16.439999999999998 1.0442207970171738E-034 + 16.500000000000000 9.4102433524444142E-035 + 16.560000000000002 7.4435834281442255E-035 + 16.620000000000005 4.4262385537870762E-035 + 16.679999999999993 2.8169894089903727E-036 + 16.739999999999995 -5.0134623446123219E-035 + 16.799999999999997 -1.1410090543029718E-034 + 16.859999999999999 -1.8783556536047798E-034 + 16.920000000000002 -2.6895718332427698E-034 + 16.980000000000004 -3.5403383637556746E-034 + 17.039999999999992 -4.3847865780688380E-034 + 17.099999999999994 -5.1655290078599721E-034 + 17.159999999999997 -5.8139181625634043E-034 + 17.219999999999999 -6.2521799055334049E-034 + 17.280000000000001 -6.3959244995372121E-034 + 17.340000000000003 -6.1584878070603016E-034 + 17.399999999999991 -5.4561941342999883E-034 + 17.459999999999994 -4.2148762020927565E-034 + 17.519999999999996 -2.3775737796046757E-034 + 17.579999999999998 8.7030638371556075E-036 + 17.640000000000001 3.1756717717165177E-034 + 17.700000000000003 6.8414836681601143E-034 + 17.759999999999991 1.0985909011780151E-033 + 17.819999999999993 1.5452119624465219E-033 + 17.879999999999995 2.0020339670956921E-033 + 17.939999999999998 2.4407028875821449E-033 + 18.000000000000000 2.8267891938940943E-033 + 18.060000000000002 3.1206293768108716E-033 + 18.120000000000005 3.2787276313484953E-033 + 18.179999999999993 3.2557916676621444E-033 + 18.239999999999995 3.0074296641145396E-033 + 18.299999999999997 2.4934554811018490E-033 + 18.359999999999999 1.6817442964398266E-033 + 18.420000000000002 5.5249651186919269E-034 + 18.480000000000004 -8.9730517088935519E-034 + 18.539999999999992 -2.6494866426380240E-033 + 18.599999999999994 -4.6606610516852549E-033 + 18.659999999999997 -6.8589648139133070E-033 + 18.719999999999999 -9.1420370162459498E-033 + 18.780000000000001 -1.1376528520944582E-032 + 18.840000000000003 -1.3399758770272494E-032 + 18.899999999999991 -1.5023757507242767E-032 + 18.959999999999994 -1.6042069603855531E-032 + 19.019999999999996 -1.6239473883761067E-032 + 19.079999999999998 -1.5404645042905510E-032 + 19.140000000000001 -1.3345571849341152E-032 + 19.200000000000003 -9.9072851570075076E-033 + 19.259999999999991 -4.9912243033413539E-033 + 19.319999999999993 1.4247479048764860E-033 + 19.379999999999995 9.2669111713614085E-033 + 19.439999999999998 1.8348341264801589E-032 + 19.500000000000000 2.8355320236598335E-032 + 19.560000000000002 3.8839334092600004E-032 + 19.620000000000005 4.9216457236087923E-032 + 19.679999999999993 5.8775872463188093E-032 + 19.739999999999995 6.6698992406439912E-032 + 19.799999999999997 7.2090217528474922E-032 + 19.859999999999999 7.4019856650224113E-032 + 19.920000000000002 7.1578916768334600E-032 + 19.980000000000004 6.3944640910509576E-032 + 20.039999999999992 5.0454632215450881E-032 + 20.099999999999994 3.0686437366668693E-032 + 20.159999999999997 4.5381835582270147E-033 + 20.219999999999999 -2.7694832290292593E-032 + 20.280000000000001 -6.5253849386357168E-032 + 20.340000000000003 -1.0686720446922545E-031 + 20.399999999999991 -1.5072487184684919E-031 + 20.459999999999994 -1.9448357518565466E-031 + 20.519999999999996 -2.3530866418144059E-031 + 20.579999999999998 -2.6995755945173459E-031 + 20.640000000000001 -2.9490764640188207E-031 + 20.700000000000003 -3.0652936099859555E-031 + 20.759999999999991 -3.0130172813916245E-031 + 20.819999999999993 -2.7606480974581408E-031 + 20.879999999999995 -2.2829920337436017E-031 + 20.939999999999998 -1.5641963343469006E-031 + 21.000000000000000 -6.0065392281598345E-032 + 21.060000000000002 5.9632276123855603E-032 + 21.120000000000005 1.9982834250522339E-031 + 21.179999999999993 3.5581149435216926E-031 + 21.239999999999995 5.2094450115364021E-031 + 21.299999999999997 6.8671985227504196E-031 + 21.359999999999999 8.4294846326489677E-031 + 21.420000000000002 9.7809484587052517E-031 + 21.480000000000004 1.0797633327979548E-030 + 21.539999999999992 1.1353327287708155E-030 + 21.599999999999994 1.1327232593186613E-030 + 21.659999999999997 1.0612703235525011E-030 + 21.719999999999999 9.1266620445912711E-031 + 21.780000000000001 6.8191893067322129E-031 + 21.840000000000003 3.6826832844381158E-031 + 21.899999999999991 -2.4010942796771010E-032 + 21.959999999999994 -4.8499228839370434E-031 + 22.019999999999996 -9.9874120311119219E-031 + 22.079999999999998 -1.5432910735513240E-030 + 22.140000000000001 -2.0910093983905246E-030 + 22.200000000000003 -2.6094006775061692E-030 + 22.259999999999991 -3.0623658037614042E-030 + 22.319999999999993 -3.4119140092515789E-030 + 22.379999999999995 -3.6202883884600401E-030 + 22.439999999999998 -3.6524316968337250E-030 + 22.500000000000000 -3.4786824238090432E-030 + 22.560000000000002 -3.0775582095521664E-030 + 22.619999999999990 -2.4384456739082355E-030 + 22.679999999999993 -1.5639980342727437E-030 + 22.739999999999995 -4.7202709008627919E-031 + 22.799999999999997 8.0333379879743962E-031 + 22.859999999999999 2.2113925673865949E-030 + 22.920000000000002 3.6857652904267373E-030 + 22.980000000000004 5.1464695529040533E-030 + 23.039999999999992 6.5033015590861085E-030 + 23.099999999999994 7.6604692094785928E-030 + 23.159999999999997 8.5223651631267126E-030 + 23.219999999999999 9.0002486522298664E-030 + 23.280000000000001 9.0195030236842189E-030 + 23.340000000000003 8.5270304755836372E-030 + 23.399999999999991 7.4982592174836740E-030 + 23.459999999999994 5.9431675856211075E-030 + 23.519999999999996 3.9106944770776113E-030 + 23.579999999999998 1.4909084965750855E-030 + 23.640000000000001 -1.1856362418229003E-030 + 23.700000000000003 -3.9518305386133384E-030 + 23.759999999999991 -6.6115329420374491E-030 + 23.819999999999993 -8.9507831175117165E-030 + 23.879999999999995 -1.0752531628035483E-029 + 23.939999999999998 -1.1814415719848907E-029 + 24.000000000000000 -1.1968774730259913E-029 + 24.060000000000002 -1.1103767356413491E-029 + 24.119999999999990 -9.1841263222305363E-030 + 24.179999999999993 -6.2698277668920905E-030 + 24.239999999999995 -2.5307287127307851E-030 + 24.299999999999997 1.7448542590162934E-030 + 24.359999999999999 6.1496296380247299E-030 + 24.420000000000002 1.0166690093715427E-029 + 24.480000000000004 1.3190214706248587E-029 + 24.539999999999992 1.4558407825088869E-029 + 24.599999999999994 1.3598867899721165E-029 + 24.659999999999997 9.6856753989658270E-030 + 24.719999999999999 2.3064573248364546E-030 + 24.780000000000001 -8.8634729651678019E-030 + 24.840000000000003 -2.3883922388061610E-029 + 24.899999999999991 -4.2474765085210524E-029 + 24.959999999999994 -6.3949202299257660E-029 + 25.019999999999996 -8.7162344695954536E-029 + 25.079999999999998 -1.1048252285359574E-028 + 25.140000000000001 -1.3179281407463426E-028 + 25.200000000000003 -1.4852987462412722E-028 + 25.259999999999991 -1.5776594834939821E-028 + 25.319999999999993 -1.5633848674045530E-028 + 25.379999999999995 -1.4102916149351547E-028 + 25.439999999999998 -1.0879141229142146E-028 + 25.500000000000000 -5.7021713169956004E-029 + 25.560000000000002 1.6133858719999947E-029 + 25.619999999999990 1.1145091730819627E-028 + 25.679999999999993 2.2829306727168891E-028 + 25.739999999999995 3.6429512813745703E-028 + 25.799999999999997 5.1508814307091785E-028 + 25.859999999999999 6.7409465668011485E-028 + 25.920000000000002 8.3242390264189631E-028 + 25.980000000000004 9.7889691284219132E-028 + 26.039999999999992 1.1002295990230640E-027 + 26.099999999999994 1.1813978596295153E-027 + 26.159999999999997 1.2062032565586344E-027 + 26.219999999999999 1.1580473831607320E-027 + 26.280000000000001 1.0209134722248798E-027 + 26.340000000000003 7.8053994923254840E-028 + 26.399999999999991 4.2575427470764813E-028 + 26.459999999999994 -5.0079353410634550E-029 + 26.519999999999996 -6.4756389613914567E-028 + 26.579999999999998 -1.3598064163866849E-027 + 26.640000000000001 -2.1710845727024231E-027 + 26.700000000000003 -3.0557530045472388E-027 + 26.759999999999991 -3.9775106529155116E-027 + 26.819999999999993 -4.8891462653267697E-027 + 26.879999999999995 -5.7328901568886938E-027 + 26.939999999999998 -6.4414752530842269E-027 + 27.000000000000000 -6.9400030618807386E-027 + 27.060000000000002 -7.1486724810854280E-027 + 27.119999999999990 -6.9864040617773349E-027 + 27.179999999999993 -6.3753309414852675E-027 + 27.239999999999995 -5.2460833302504618E-027 + 27.299999999999997 -3.5437323085828206E-027 + 27.359999999999999 -1.2341792410396475E-027 + 27.420000000000002 1.6892726652045150E-027 + 27.480000000000004 5.1995085509069029E-027 + 27.539999999999992 9.2297540510261780E-027 + 27.599999999999994 1.3668735980129800E-026 + 27.659999999999997 1.8357343118258136E-026 + 27.719999999999999 2.3087279472623282E-026 + 27.780000000000001 2.7602201642664468E-026 + 27.840000000000003 3.1601801004598446E-026 + 27.899999999999991 3.4749199124198804E-026 + 27.959999999999994 3.6681916416325269E-026 + 28.019999999999996 3.7026560475023338E-026 + 28.079999999999998 3.5417166153989176E-026 + 28.140000000000001 3.1516937389076083E-026 + 28.200000000000003 2.5042849894241125E-026 + 28.259999999999991 1.5792392190643576E-026 + 28.319999999999993 3.6713866146793198E-027 + 28.379999999999995 -1.1278402323109322E-026 + 28.439999999999998 -2.8853418331169161E-026 + 28.500000000000000 -4.8665951142807348E-026 + 28.560000000000002 -7.0127220310137806E-026 + 28.619999999999990 -9.2437828805008109E-026 + 28.679999999999993 -1.1458763974110024E-025 + 28.739999999999995 -1.3536687194334684E-025 + 28.799999999999997 -1.5339009559608834E-025 + 28.859999999999999 -1.6713438780994843E-025 + 28.920000000000002 -1.7499233808982439E-025 + 28.980000000000004 -1.7534005737801536E-025 + 29.039999999999992 -1.6661949617428067E-025 + 29.099999999999994 -1.4743350127341716E-025 + 29.159999999999997 -1.1665110758728263E-025 + 29.219999999999999 -7.3519437434778836E-026 + 29.280000000000001 -1.7777665290381798E-026 + 29.340000000000003 5.0232460425322184E-026 + 29.399999999999991 1.2946621151284934E-025 + 29.459999999999994 2.1809243315081514E-025 + 29.519999999999996 3.1343485330905297E-025 + 29.579999999999998 4.1194587767361060E-025 + 29.640000000000001 5.0922044897389310E-025 + 29.700000000000003 6.0005651977793586E-025 + 29.759999999999991 6.7856826260235020E-025 + 29.819999999999993 7.3835585133466548E-025 + 29.879999999999995 7.7273379012387992E-025 + 29.939999999999998 7.7501691396973845E-025 + 30.000000000000000 7.3886055036411077E-025 + 30.060000000000002 6.5864676932599892E-025 + 30.119999999999990 5.2990669011873074E-025 + 30.179999999999993 3.4976309877551958E-025 + 30.239999999999995 1.1737515207568929E-025 + 30.299999999999997 -1.6563739633377013E-025 + 30.359999999999999 -4.9481517783210549E-025 + 30.420000000000002 -8.6255306519231504E-025 + 30.480000000000004 -1.2578960095449263E-024 + 30.539999999999992 -1.6664649844062777E-024 + 30.599999999999994 -2.0705411275018352E-024 + 30.659999999999997 -2.4493315994136872E-024 + 30.719999999999999 -2.7794387824278221E-024 + 30.780000000000001 -3.0355425484472684E-024 + 30.840000000000003 -3.1913039444965312E-024 + 30.899999999999991 -3.2204818317725632E-024 + 30.959999999999994 -3.0982469529820136E-024 + 31.019999999999996 -2.8026627769914010E-024 + 31.079999999999998 -2.3162895207279398E-024 + 31.140000000000001 -1.6278540870998275E-024 + 31.200000000000003 -7.3391519948486027E-025 + 31.259999999999991 3.5955984850385315E-025 + 31.319999999999993 1.6357990884935818E-024 + 31.379999999999995 3.0661113358734354E-024 + 31.439999999999998 4.6091592715865203E-024 + 31.500000000000000 6.2107194843411642E-024 + 31.560000000000002 7.8040324420127250E-024 + 31.619999999999990 9.3108218090246104E-024 + 31.679999999999993 1.0643056177065539E-023 + 31.739999999999995 1.1705494261106778E-023 + 31.799999999999997 1.2399026361034226E-023 + 31.859999999999999 1.2624785353383945E-023 + 31.920000000000002 1.2288963503609308E-023 + 31.980000000000004 1.1308224768700119E-023 + 32.039999999999992 9.6155514766486189E-024 + 32.099999999999994 7.1663160481350976E-024 + 32.159999999999997 3.9443279268266107E-024 + 32.219999999999999 -3.2449539228672223E-026 + 32.280000000000001 -4.7068332662215340E-024 + 32.340000000000003 -9.9783682409039509E-024 + 32.399999999999991 -1.5700655766235933E-023 + 32.459999999999994 -2.1680425866308071E-023 + 32.519999999999996 -2.7678698007052244E-023 + 32.579999999999998 -3.3414328195981945E-023 + 32.640000000000001 -3.8570166659331315E-023 + 32.700000000000003 -4.2802002303865919E-023 + 32.759999999999991 -4.5750318352043039E-023 + 32.819999999999993 -4.7054758272867490E-023 + 32.879999999999995 -4.6371103514755922E-023 + 32.939999999999998 -4.3390369072634032E-023 + 33.000000000000000 -3.7859427334035467E-023 + 33.060000000000002 -2.9602484875499194E-023 + 33.119999999999990 -1.8542501233586052E-023 + 33.179999999999993 -4.7215342814664035E-024 + 33.239999999999995 1.1681143260292728E-023 + 33.299999999999997 3.0334366205302961E-023 + 33.359999999999999 5.0745148093339375E-023 + 33.420000000000002 7.2254724015391034E-023 + 33.480000000000004 9.4041760392034354E-023 + 33.539999999999992 1.1513378365178495E-022 + 33.599999999999994 1.3442764266060848E-022 + 33.659999999999997 1.5071952642530148E-022 + 33.719999999999999 1.6274468334339982E-022 + 33.780000000000001 1.6922665689037591E-022 + 33.840000000000003 1.6893516640787197E-022 + 33.899999999999991 1.6075139734892707E-022 + 33.959999999999994 1.4373889439846675E-022 + 34.019999999999996 1.1721757350880534E-022 + 34.079999999999998 8.0837866946445209E-023 + 34.140000000000001 3.4651664743134427E-023 + 34.200000000000003 -2.0823864983996293E-023 + 34.259999999999991 -8.4553749397895029E-023 + 34.319999999999993 -1.5494813427755395E-022 + 34.379999999999995 -2.2984512045992163E-022 + 34.439999999999998 -3.0651714942855548E-022 + 34.500000000000000 -3.8170492808033592E-022 + 34.560000000000002 -4.5168127160867515E-022 + 34.619999999999990 -5.1234703708535931E-022 + 34.679999999999993 -5.5935987644367656E-022 + 34.739999999999995 -5.8829442419686567E-022 + 34.799999999999997 -5.9483279822155335E-022 + 34.859999999999999 -5.7498003851667433E-022 + 34.920000000000002 -5.2529968628115361E-022 + 34.980000000000004 -4.4316125379300793E-022 + 35.039999999999992 -3.2699010200535652E-022 + 35.099999999999994 -1.7650896097602250E-022 + 35.159999999999997 7.0412583502741833E-024 + 35.219999999999999 2.2071501122653264E-022 + 35.280000000000001 4.5972355350909255E-022 + 35.340000000000003 7.1735780324372398E-022 + 35.399999999999991 9.8498632160856242E-022 + 35.459999999999994 1.2521395097273492E-021 + 35.519999999999996 1.5066893768800631E-021 + 35.579999999999998 1.7351324978796572E-021 + 35.640000000000001 1.9229780194348660E-021 + 35.700000000000003 2.0552404768112401E-021 + 35.759999999999991 2.1170303274288365E-021 + 35.819999999999993 2.0942315494039350E-021 + 35.879999999999995 1.9742497714775692E-021 + 35.939999999999998 1.7468072258360002E-021 + 36.000000000000000 1.4047577492418886E-021 + 36.060000000000002 9.4488813325146493E-022 + 36.119999999999990 3.6866976058880920E-022 + 36.179999999999993 -3.1708157787506166E-022 + 36.239999999999995 -1.0996771911117875E-021 + 36.299999999999997 -1.9602033265475362E-021 + 36.359999999999999 -2.8733858286248943E-021 + 36.420000000000002 -3.8077072922416580E-021 + 36.479999999999990 -4.7258117925239893E-021 + 36.539999999999992 -5.5852205758593775E-021 + 36.599999999999994 -6.3393721284244177E-021 + 36.659999999999997 -6.9389913956242018E-021 + 36.719999999999999 -7.3337793393048378E-021 + 36.780000000000001 -7.4743931202348881E-021 + 36.840000000000003 -7.3146820298124747E-021 + 36.899999999999991 -6.8141202944841233E-021 + 36.959999999999994 -5.9403619975471850E-021 + 37.019999999999996 -4.6718348802044488E-021 + 37.079999999999998 -3.0002709232037520E-021 + 37.140000000000001 -9.3305944272985620E-022 + 37.200000000000003 1.5046908260395663E-021 + 37.259999999999991 4.2685139407105074E-021 + 37.319999999999993 7.2934862286457327E-021 + 37.379999999999995 1.0493787977514873E-020 + 37.439999999999998 1.3763035635025564E-020 + 37.500000000000000 1.6975474968809790E-020 + 37.560000000000002 1.9988107353065736E-020 + 37.619999999999990 2.2643788924705522E-020 + 37.679999999999993 2.4775327027413990E-020 + 37.739999999999995 2.6210532460695215E-020 + 37.799999999999997 2.6778179329066203E-020 + 37.859999999999999 2.6314760182512017E-020 + 37.920000000000002 2.4671880140811601E-020 + 37.979999999999990 2.1724114802641322E-020 + 38.039999999999992 1.7377081263489712E-020 + 38.099999999999994 1.1575436792022631E-020 + 38.159999999999997 4.3105429896166033E-021 + 38.219999999999999 -4.3725972291433661E-021 + 38.280000000000001 -1.4369432851854078E-020 + 38.340000000000003 -2.5511382155915486E-020 + 38.399999999999991 -3.7563102127834240E-020 + 38.459999999999994 -5.0221893088905603E-020 + 38.519999999999996 -6.3119476194132256E-020 + 38.579999999999998 -7.5826495306437229E-020 + 38.640000000000001 -8.7859900127901794E-020 + 38.700000000000003 -9.8693327404373045E-020 + 38.759999999999991 -1.0777056048246693E-019 + 38.819999999999993 -1.1452202401023432E-019 + 38.879999999999995 -1.1838408283267828E-019 + 38.939999999999998 -1.1882091600545546E-019 + 39.000000000000000 -1.1534853133450588E-019 + 39.060000000000002 -1.0756038626830656E-019 + 39.119999999999990 -9.5153919835501546E-020 + 39.179999999999993 -7.7957257838615870E-020 + 39.239999999999995 -5.5955090428295574E-020 + 39.299999999999997 -2.9312855753572396E-020 + 39.359999999999999 1.6019837401722304E-021 + 39.420000000000002 3.6202607405617941E-020 + 39.479999999999990 7.3670612949730538E-020 + 39.539999999999992 1.1295009103484519E-019 + 39.599999999999994 1.5274894486306697E-019 + 39.659999999999997 1.9154857458123197E-019 + 39.719999999999999 2.2762257667723867E-019 + 39.780000000000001 2.5906521892454156E-019 + 39.840000000000003 2.8383003883401207E-019 + 39.899999999999991 2.9977850972477500E-019 + 39.959999999999994 3.0473866927556761E-019 + 40.019999999999996 2.9657302665187500E-019 + 40.079999999999998 2.7325460592758936E-019 + 40.140000000000001 2.3294982577268755E-019 + 40.200000000000003 1.7410611392575209E-019 + 40.259999999999991 9.5542240434163329E-020 + 40.319999999999993 -3.4617113688476098E-021 + 40.379999999999995 -1.2307742062158767E-019 + 40.439999999999998 -2.6284810567963048E-019 + 40.500000000000000 -4.2161824499232193E-019 + 40.560000000000002 -5.9747702606008304E-019 + 40.619999999999990 -7.8771911344442251E-019 + 40.679999999999993 -9.8882564564315185E-019 + 40.739999999999995 -1.1964698437958504E-018 + 40.799999999999997 -1.4055481271959206E-018 + 40.859999999999999 -1.6102398351905488E-018 + 40.920000000000002 -1.8040964292016047E-018 + 40.979999999999990 -1.9801603157059372E-018 + 41.039999999999992 -2.1311122560039675E-018 + 41.099999999999994 -2.2494451145687669E-018 + 41.159999999999997 -2.3276620148095157E-018 + 41.219999999999999 -2.3584910996071338E-018 + 41.280000000000001 -2.3351144129436319E-018 + 41.340000000000003 -2.2514019415268148E-018 + 41.399999999999991 -2.1021410889833820E-018 + 41.459999999999994 -1.8832551077754617E-018 + 41.519999999999996 -1.5919981106644967E-018 + 41.579999999999998 -1.2271167962817722E-018 + 41.640000000000001 -7.8896818320338080E-019 + 41.700000000000003 -2.7958242150695813E-019 + 41.759999999999991 2.9734025684713479E-019 + 41.819999999999993 9.3650424163256801E-019 + 41.879999999999995 1.6311779672661901E-018 + 41.939999999999998 2.3734385995293229E-018 + 42.000000000000000 3.1545103433466043E-018 + 42.060000000000002 3.9651959934566021E-018 + 42.119999999999990 4.7963981422173250E-018 + 42.179999999999993 5.6397344596624083E-018 + 42.239999999999995 6.4882282847984121E-018 + 42.299999999999997 7.3370773592914337E-018 + 42.359999999999999 8.1844827537947308E-018 + 42.420000000000002 9.0325257874035698E-018 + 42.479999999999990 9.8880785480192539E-018 + 42.539999999999992 1.0763723173595029E-017 + 42.599999999999994 1.1678687064848278E-017 + 42.659999999999997 1.2659746474643701E-017 + 42.719999999999999 1.3742105635182200E-017 + 42.780000000000001 1.4970233728145213E-017 + 42.840000000000003 1.6398653368979740E-017 + 42.899999999999991 1.8092664606219565E-017 + 42.959999999999994 2.0129005502507978E-017 + 43.019999999999996 2.2596480871186555E-017 + 43.079999999999998 2.5596518702989296E-017 + 43.140000000000001 2.9243732817691624E-017 + 43.200000000000003 3.3666448882930962E-017 + 43.259999999999991 3.9007260595001202E-017 + 43.319999999999993 4.5423657621325785E-017 + 43.379999999999995 5.3088727778969102E-017 + 43.439999999999998 6.2192003324061878E-017 + 43.500000000000000 7.2940465926360444E-017 + 43.560000000000002 8.5559739335004470E-017 + 43.619999999999990 1.0029562888065238E-016 + 43.679999999999993 1.1741583680610106E-016 + 43.739999999999995 1.3721209795076378E-016 + 43.799999999999997 1.6000254368333805E-016 + 43.859999999999999 1.8613448213296611E-016 + 43.920000000000002 2.1598769618659674E-016 + 43.979999999999990 2.4997779553116911E-016 + 44.039999999999992 2.8856004944533300E-016 + 44.099999999999994 3.3223367621814501E-016 + 44.159999999999997 3.8154620246099635E-016 + 44.219999999999999 4.3709790709949342E-016 + 44.280000000000001 4.9954687134307018E-016 + 44.340000000000003 5.6961343979099295E-016 + 44.399999999999991 6.4808530024893049E-016 + 44.459999999999994 7.3582141774500741E-016 + 44.519999999999996 8.3375704133421189E-016 + 44.579999999999998 9.4290702169212904E-016 + 44.640000000000001 1.0643694485385323E-015 + 44.700000000000003 1.1993279858011319E-015 + 44.759999999999991 1.3490539947436571E-015 + 44.819999999999993 1.5149072884123128E-015 + 44.879999999999995 1.6983349772372699E-015 + 44.939999999999998 1.9008711775054008E-015 + 45.000000000000000 2.1241330745863347E-015 + 45.060000000000002 2.3698157011733544E-015 + 45.119999999999990 2.6396854239833801E-015 + 45.179999999999993 2.9355706760114029E-015 + 45.239999999999995 3.2593508441836168E-015 + 45.299999999999997 3.6129410785201077E-015 + 45.359999999999999 3.9982736531128399E-015 + 45.420000000000002 4.4172777662123943E-015 + 45.479999999999990 4.8718518547495731E-015 + 45.539999999999992 5.3638325955375012E-015 + 45.599999999999994 5.8949577174281228E-015 + 45.659999999999997 6.4668212291423475E-015 + 45.719999999999999 7.0808217505734500E-015 + 45.780000000000001 7.7380979537690232E-015 + 45.840000000000003 8.4394581084954573E-015 + 45.899999999999991 9.1852917461578580E-015 + 45.959999999999994 9.9754706346328746E-015 + 46.019999999999996 1.0809231271933749E-014 + 46.079999999999998 1.1685034531280352E-014 + 46.140000000000001 1.2600408637644397E-014 + 46.200000000000003 1.3551757503787435E-014 + 46.259999999999991 1.4534147344316483E-014 + 46.319999999999993 1.5541054639617726E-014 + 46.379999999999995 1.6564066598437378E-014 + 46.439999999999998 1.7592553181090933E-014 + 46.500000000000000 1.8613270126562367E-014 + 46.560000000000002 1.9609912546156792E-014 + 46.619999999999990 2.0562597755886806E-014 + 46.679999999999993 2.1447276768658633E-014 + 46.739999999999995 2.2235051386037364E-014 + 46.799999999999997 2.2891394655165749E-014 + 46.859999999999999 2.3375270656315915E-014 + 46.920000000000002 2.3638122387791271E-014 + 46.979999999999990 2.3622721272342786E-014 + 47.039999999999992 2.3261859172458679E-014 + 47.099999999999994 2.2476874744775594E-014 + 47.159999999999997 2.1175965307802480E-014 + 47.219999999999999 1.9252300685912250E-014 + 47.280000000000001 1.6581893213733605E-014 + 47.340000000000003 1.3021170398722594E-014 + 47.399999999999991 8.4042840018672900E-015 + 47.459999999999994 2.5400405449862648E-015 + 47.519999999999996 -4.7914876176938406E-015 + 47.579999999999998 -1.3842815696444686E-014 + 47.640000000000001 -2.4903291792922429E-014 + 47.700000000000003 -3.8303932248339450E-014 + 47.759999999999991 -5.4422730141650424E-014 + 47.819999999999993 -7.3690621766986848E-014 + 47.879999999999995 -9.6598151378055289E-014 + 47.939999999999998 -1.2370284754763607E-013 + 48.000000000000000 -1.5563741192322270E-013 + 48.060000000000002 -1.9311883670066168E-013 + 48.119999999999990 -2.3695859184698136E-013 + 48.179999999999993 -2.8807373529318910E-013 + 48.239999999999995 -3.4749948134733058E-013 + 48.299999999999997 -4.1640265137856676E-013 + 48.359999999999999 -4.9609713017017583E-013 + 48.420000000000002 -5.8806026628112363E-013 + 48.479999999999990 -6.9395122732602571E-013 + 48.539999999999992 -8.1563158316243262E-013 + 48.599999999999994 -9.5518699029183450E-013 + 48.659999999999997 -1.1149517312954008E-012 + 48.719999999999999 -1.2975349022033081E-012 + 48.780000000000001 -1.5058494633500999E-012 + 48.840000000000003 -1.7431438535323542E-012 + 48.899999999999991 -2.0130356578842401E-012 + 48.959999999999994 -2.3195486282391768E-012 + 49.019999999999996 -2.6671545297401833E-012 + 49.079999999999998 -3.0608139439601635E-012 + 49.140000000000001 -3.5060239160078216E-012 + 49.200000000000003 -4.0088702082742454E-012 + 49.259999999999991 -4.5760766677623624E-012 + 49.319999999999993 -5.2150686244085706E-012 + 49.379999999999995 -5.9340291681413393E-012 + 49.439999999999998 -6.7419668867668652E-012 + 49.500000000000000 -7.6487865880477117E-012 + 49.560000000000002 -8.6653616544849138E-012 + 49.619999999999990 -9.8036108523172348E-012 + 49.679999999999993 -1.1076582852029669E-011 + 49.739999999999995 -1.2498543937040495E-011 + 49.799999999999997 -1.4085063723332822E-011 + 49.859999999999999 -1.5853112926524803E-011 + 49.920000000000002 -1.7821153242705425E-011 + 49.979999999999990 -2.0009249800680770E-011 + 50.039999999999992 -2.2439168210858972E-011 + 50.099999999999994 -2.5134473238254323E-011 + 50.159999999999997 -2.8120651102553852E-011 + 50.219999999999999 -3.1425199422896317E-011 + 50.280000000000001 -3.5077744183031004E-011 + 50.340000000000003 -3.9110133293321296E-011 + 50.399999999999991 -4.3556555549233772E-011 + 50.459999999999994 -4.8453611312262822E-011 + 50.519999999999996 -5.3840398296724002E-011 + 50.579999999999998 -5.9758599156748718E-011 + 50.640000000000001 -6.6252539111571145E-011 + 50.700000000000003 -7.3369206724732699E-011 + 50.759999999999991 -8.1158273184962999E-011 + 50.819999999999993 -8.9672095765876060E-011 + 50.879999999999995 -9.8965657911190034E-011 + 50.939999999999998 -1.0909644806142431E-010 + 51.000000000000000 -1.2012434459579508E-010 + 51.060000000000002 -1.3211136777396448E-010 + 51.119999999999990 -1.4512144473474147E-010 + 51.179999999999993 -1.5921999086736024E-010 + 51.239999999999995 -1.7447346758592368E-010 + 51.299999999999997 -1.9094872510953539E-010 + 51.359999999999999 -2.0871235506843626E-010 + 51.420000000000002 -2.2782964839573733E-010 + 51.479999999999990 -2.4836360820810057E-010 + 51.539999999999992 -2.7037367112213748E-010 + 51.599999999999994 -2.9391403686297205E-010 + 51.659999999999997 -3.1903182434566689E-010 + 51.719999999999999 -3.4576496300198612E-010 + 51.780000000000001 -3.7413955244360881E-010 + 51.840000000000003 -4.0416687614962001E-010 + 51.899999999999991 -4.3583989917541569E-010 + 51.959999999999994 -4.6912930512116151E-010 + 52.019999999999996 -5.0397860437218433E-010 + 52.079999999999998 -5.4029894046258806E-010 + 52.140000000000001 -5.7796286147802241E-010 + 52.200000000000003 -6.1679677379359904E-010 + 52.259999999999991 -6.5657338539327756E-010 + 52.319999999999993 -6.9700198687727340E-010 + 52.379999999999995 -7.3771790108384169E-010 + 52.439999999999998 -7.7827026938699899E-010 + 52.500000000000000 -8.1810860524762993E-010 + 52.560000000000002 -8.5656687535203050E-010 + 52.619999999999990 -8.9284591914083572E-010 + 52.679999999999993 -9.2599354111226466E-010 + 52.739999999999995 -9.5488202179293447E-010 + 52.799999999999997 -9.7818276707094018E-010 + 52.859999999999999 -9.9433749322352211E-010 + 52.920000000000002 -1.0015263731339769E-009 + 52.979999999999990 -9.9763196983131852E-010 + 53.039999999999992 -9.8019861909736918E-010 + 53.099999999999994 -9.4638743732925740E-010 + 53.159999999999997 -8.9292570048927011E-010 + 53.219999999999999 -8.1605032016586167E-010 + 53.280000000000001 -7.1144472408243660E-010 + 53.339999999999989 -5.7416886942743936E-010 + 53.399999999999991 -3.9858077470605839E-010 + 53.459999999999994 -1.7824962984839101E-010 + 53.519999999999996 9.4140040346126187E-011 + 53.579999999999998 4.2689754072088945E-010 + 53.640000000000001 8.2944340124380071E-010 + 53.700000000000003 1.3124412647166977E-009 + 53.759999999999991 1.8879438300420930E-009 + 53.819999999999993 2.5695530416330481E-009 + 53.879999999999995 3.3726024414533313E-009 + 53.939999999999998 4.3143468754992183E-009 + 54.000000000000000 5.4141865638519488E-009 + 54.060000000000002 6.6939018268694356E-009 + 54.119999999999990 8.1779181843131360E-009 + 54.179999999999993 9.8935948077687569E-009 + 54.239999999999995 1.1871546890667088E-008 + 54.299999999999997 1.4145992322675481E-008 + 54.359999999999999 1.6755144398973773E-008 + 54.420000000000002 1.9741624887842096E-008 + 54.479999999999990 2.3152923973830875E-008 + 54.539999999999992 2.7041929894332490E-008 + 54.599999999999994 3.1467458996036624E-008 + 54.659999999999997 3.6494887369859303E-008 + 54.719999999999999 4.2196790027622217E-008 + 54.780000000000001 4.8653706900866244E-008 + 54.839999999999989 5.5954902908983715E-008 + 54.899999999999991 6.4199254280087643E-008 + 54.959999999999994 7.3496179347818780E-008 + 55.019999999999996 8.3966701673771406E-008 + 55.079999999999998 9.5744534027610539E-008 + 55.140000000000001 1.0897733353978636E-007 + 55.200000000000003 1.2382801498662587E-007 + 55.259999999999991 1.4047621781460494E-007 + 55.319999999999993 1.5911987294173679E-007 + 55.379999999999995 1.7997688889618811E-007 + 55.439999999999998 2.0328706138911420E-007 + 55.500000000000000 2.2931404826607274E-007 + 55.560000000000002 2.5834751021598234E-007 + 55.619999999999990 2.9070555592210739E-007 + 55.679999999999993 3.2673730108737926E-007 + 55.739999999999995 3.6682553366965134E-007 + 55.799999999999997 4.1138980780085241E-007 + 55.859999999999999 4.6088958846397080E-007 + 55.920000000000002 5.1582787917096208E-007 + 55.979999999999990 5.7675483209992138E-007 + 56.039999999999992 6.4427182570191089E-007 + 56.099999999999994 7.1903600549802231E-007 + 56.159999999999997 8.0176485283061890E-007 + 56.219999999999999 8.9324109638200283E-007 + 56.280000000000001 9.9431850642400199E-007 + 56.339999999999989 1.1059276200225737E-006 + 56.399999999999991 1.2290820114361867E-006 + 56.459999999999994 1.3648845356732990E-006 + 56.519999999999996 1.5145356903574758E-006 + 56.579999999999998 1.6793400512873475E-006 + 56.640000000000001 1.8607157749957896E-006 + 56.700000000000003 2.0602027614747488E-006 + 56.759999999999991 2.2794719487563274E-006 + 56.819999999999993 2.5203354483163004E-006 + 56.879999999999995 2.7847584491601006E-006 + 56.939999999999998 3.0748693646668481E-006 + 57.000000000000000 3.3929726526467345E-006 + 57.060000000000002 3.7415616770496328E-006 + 57.119999999999990 4.1233327463485295E-006 + 57.179999999999993 4.5411999566462108E-006 + 57.239999999999995 4.9983101272932530E-006 + 57.299999999999997 5.4980590600899990E-006 + 57.359999999999999 6.0441123815907438E-006 + 57.420000000000002 6.6404195096355046E-006 + 57.479999999999990 7.2912366595988428E-006 + 57.539999999999992 8.0011446970415006E-006 + 57.599999999999994 8.7750745505654905E-006 + 57.659999999999997 9.6183272223932026E-006 + 57.719999999999999 1.0536600119107505E-005 + 57.780000000000001 1.1536011653925223E-005 + 57.839999999999989 1.2623126543420034E-005 + 57.899999999999991 1.3804988136743936E-005 + 57.959999999999994 1.5089146711632017E-005 + 58.019999999999996 1.6483685725762185E-005 + 58.079999999999998 1.7997261616470790E-005 + 58.140000000000001 1.9639132154079874E-005 + 58.200000000000003 2.1419193812745058E-005 + 58.259999999999991 2.3348017856963572E-005 + 58.319999999999993 2.5436894530288582E-005 + 58.379999999999995 2.7697858278873417E-005 + 58.439999999999998 3.0143746865561254E-005 + 58.500000000000000 3.2788232389421561E-005 + 58.560000000000002 3.5645871485333546E-005 + 58.619999999999990 3.8732148618829084E-005 + 58.679999999999993 4.2063526972503368E-005 + 58.739999999999995 4.5657497912219058E-005 + 58.799999999999997 4.9532609208677421E-005 + 58.859999999999999 5.3708558259636640E-005 + 58.920000000000002 5.8206219441220821E-005 + 58.979999999999990 6.3047691298253553E-005 + 59.039999999999992 6.8256373687875340E-005 + 59.099999999999994 7.3857000250684572E-005 + 59.159999999999997 7.9875717795485691E-005 + 59.219999999999999 8.6340144176570927E-005 + 59.280000000000001 9.3279403866337711E-005 + 59.339999999999989 1.0072420999602622E-004 + 59.399999999999991 1.0870692139598242E-004 + 59.459999999999994 1.1726159845828837E-004 + 59.519999999999996 1.2642405746686892E-004 + 59.579999999999998 1.3623195631838047E-004 + 59.640000000000001 1.4672481914903182E-004 + 59.700000000000003 1.5794411133367858E-004 + 59.759999999999991 1.6993333892519714E-004 + 59.819999999999993 1.8273803305320243E-004 + 59.879999999999995 1.9640586740701747E-004 + 59.939999999999998 2.1098666356828542E-004 + 60.000000000000000 2.2653249856661697E-004 + 60.060000000000002 2.4309773485761154E-004 + 60.119999999999990 2.6073902429538657E-004 + 60.179999999999993 2.7951543945909285E-004 + 60.239999999999995 2.9948844642748351E-004 + 60.299999999999997 3.2072197702333360E-004 + 60.359999999999999 3.4328245035327522E-004 + 60.420000000000002 3.6723883734072631E-004 + 60.479999999999990 3.9266267445729693E-004 + 60.539999999999992 4.1962795583898305E-004 + 60.599999999999994 4.4821130688814782E-004 + 60.659999999999997 4.7849207548695025E-004 + 60.719999999999999 5.1055210109392669E-004 + 60.780000000000001 5.4447580527332100E-004 + 60.839999999999989 5.8035029323977891E-004 + 60.899999999999991 6.1826516261891834E-004 + 60.959999999999994 6.5831247649119913E-004 + 61.019999999999996 7.0058693648222684E-004 + 61.079999999999998 7.4518560192936994E-004 + 61.140000000000001 7.9220802647743838E-004 + 61.200000000000003 8.4175598000685412E-004 + 61.259999999999991 8.9393355876865425E-004 + 61.319999999999993 9.4884698741132224E-004 + 61.379999999999995 1.0066046462868065E-003 + 61.439999999999998 1.0673169441842881E-003 + 61.500000000000000 1.1310957927146764E-003 + 61.560000000000002 1.1980551914140918E-003 + 61.619999999999990 1.2683104718465320E-003 + 61.679999999999993 1.3419783095843948E-003 + 61.739999999999995 1.4191767938025277E-003 + 61.799999999999997 1.5000250336501080E-003 + 61.859999999999999 1.5846426853938010E-003 + 61.920000000000002 1.6731503840865564E-003 + 61.979999999999990 1.7656687720989058E-003 + 62.039999999999992 1.8623191207717486E-003 + 62.099999999999994 1.9632220512644308E-003 + 62.159999999999997 2.0684980733988931E-003 + 62.219999999999999 2.1782671602839799E-003 + 62.280000000000001 2.2926477772220251E-003 + 62.339999999999989 2.4117577817185641E-003 + 62.399999999999991 2.5357126740369325E-003 + 62.459999999999994 2.6646265740975597E-003 + 62.519999999999996 2.7986111471022461E-003 + 62.579999999999998 2.9377750829034295E-003 + 62.640000000000001 3.0822243847724775E-003 + 62.700000000000003 3.2320617228335418E-003 + 62.759999999999991 3.3873853052435684E-003 + 62.819999999999993 3.5482894289861804E-003 + 62.879999999999995 3.7148640649012753E-003 + 62.939999999999998 3.8871937538975726E-003 + 63.000000000000000 4.0653571949847240E-003 + 63.060000000000002 4.2494277007163661E-003 + 63.119999999999990 4.4394719578115232E-003 + 63.179999999999993 4.6355501048066091E-003 + 63.239999999999995 4.8377140638311538E-003 + 63.299999999999997 5.0460093505510072E-003 + 63.359999999999999 5.2604725878973814E-003 + 63.420000000000002 5.4811311032639653E-003 + 63.479999999999990 5.7080045823956612E-003 + 63.539999999999992 5.9411019249335749E-003 + 63.599999999999994 6.1804233837132591E-003 + 63.659999999999997 6.4259575723772146E-003 + 63.719999999999999 6.6776827882819908E-003 + 63.780000000000001 6.9355664454651749E-003 + 63.839999999999989 7.1995650221471355E-003 + 63.899999999999991 7.4696212028467083E-003 + 63.959999999999994 7.7456665183682702E-003 + 64.019999999999996 8.0276205866197450E-003 + 64.079999999999998 8.3153883226175299E-003 + 64.140000000000001 8.6088628274247365E-003 + 64.200000000000003 8.9079222929706828E-003 + 64.259999999999991 9.2124328784794953E-003 + 64.319999999999993 9.5222461662387882E-003 + 64.379999999999995 9.8371982033020940E-003 + 64.439999999999998 1.0157111811468639E-002 + 64.500000000000000 1.0481796362144231E-002 + 64.560000000000002 1.0811044818510048E-002 + 64.619999999999990 1.1144636069491580E-002 + 64.679999999999993 1.1482334084399375E-002 + 64.739999999999995 1.1823889881804616E-002 + 64.799999999999997 1.2169036908400389E-002 + 64.859999999999999 1.2517496363141048E-002 + 64.920000000000002 1.2868974347824903E-002 + 64.979999999999990 1.3223162218624525E-002 + 65.039999999999992 1.3579738427109160E-002 + 65.099999999999994 1.3938365688489787E-002 + 65.159999999999997 1.4298694912052637E-002 + 65.219999999999999 1.4660364642341531E-002 + 65.280000000000001 1.5022995664713160E-002 + 65.339999999999989 1.5386202879338130E-002 + 65.399999999999991 1.5749585477050902E-002 + 65.459999999999994 1.6112733209017224E-002 + 65.519999999999996 1.6475221643224600E-002 + 65.579999999999998 1.6836621473216590E-002 + 65.640000000000001 1.7196487880936417E-002 + 65.700000000000003 1.7554370657298011E-002 + 65.759999999999991 1.7909811292096945E-002 + 65.819999999999993 1.8262341959085653E-002 + 65.879999999999995 1.8611487035776544E-002 + 65.939999999999998 1.8956769793960826E-002 + 66.000000000000000 1.9297705243035989E-002 + 66.060000000000002 1.9633803294299791E-002 + 66.119999999999990 1.9964572630687273E-002 + 66.179999999999993 2.0289516948981057E-002 + 66.239999999999995 2.0608142408394994E-002 + 66.299999999999997 2.0919952726436344E-002 + 66.359999999999999 2.1224451659783372E-002 + 66.420000000000002 2.1521146626699725E-002 + 66.479999999999990 2.1809543719187408E-002 + 66.539999999999992 2.2089155296128947E-002 + 66.599999999999994 2.2359499372509896E-002 + 66.659999999999997 2.2620099403236272E-002 + 66.719999999999999 2.2870484363830688E-002 + 66.780000000000001 2.3110190267088795E-002 + 66.839999999999989 2.3338765346397537E-002 + 66.899999999999991 2.3555767338304889E-002 + 66.959999999999994 2.3760760815320199E-002 + 67.019999999999996 2.3953325181629185E-002 + 67.079999999999998 2.4133053587553362E-002 + 67.140000000000001 2.4299554428332922E-002 + 67.199999999999989 2.4452448125714829E-002 + 67.259999999999991 2.4591371120586274E-002 + 67.319999999999993 2.4715977318320547E-002 + 67.379999999999995 2.4825939546285550E-002 + 67.439999999999998 2.4920948535727485E-002 + 67.500000000000000 2.5000714154104660E-002 + 67.560000000000002 2.5064966660819841E-002 + 67.619999999999990 2.5113457356384657E-002 + 67.679999999999993 2.5145955918919004E-002 + 67.739999999999995 2.5162258641835925E-002 + 67.799999999999997 2.5162180186331096E-002 + 67.859999999999999 2.5145561644566220E-002 + 67.920000000000002 2.5112268269228296E-002 + 67.979999999999990 2.5062186483103235E-002 + 68.039999999999992 2.4995228750959494E-002 + 68.099999999999994 2.4911330604503731E-002 + 68.159999999999997 2.4810453360379361E-002 + 68.219999999999999 2.4692585893441921E-002 + 68.280000000000001 2.4557740108349962E-002 + 68.339999999999989 2.4405952302736476E-002 + 68.399999999999991 2.4237283641398481E-002 + 68.459999999999994 2.4051823593562768E-002 + 68.519999999999996 2.3849684949118471E-002 + 68.579999999999998 2.3631003891215377E-002 + 68.640000000000001 2.3395942021571470E-002 + 68.699999999999989 2.3144686720723638E-002 + 68.759999999999991 2.2877449665417892E-002 + 68.819999999999993 2.2594463707877519E-002 + 68.879999999999995 2.2295984523933329E-002 + 68.939999999999998 2.1982291517955398E-002 + 69.000000000000000 2.1653688682171449E-002 + 69.060000000000002 2.1310498056549412E-002 + 69.119999999999990 2.0953062884988615E-002 + 69.179999999999993 2.0581748551799034E-002 + 69.239999999999995 2.0196933863844798E-002 + 69.299999999999997 1.9799023312045583E-002 + 69.359999999999999 1.9388435550656488E-002 + 69.420000000000002 1.8965603607941962E-002 + 69.479999999999990 1.8530982800381027E-002 + 69.539999999999992 1.8085038184375683E-002 + 69.599999999999994 1.7628249418914305E-002 + 69.659999999999997 1.7161110638903646E-002 + 69.719999999999999 1.6684127179400099E-002 + 69.780000000000001 1.6197816083926352E-002 + 69.839999999999989 1.5702703687244555E-002 + 69.899999999999991 1.5199326139615124E-002 + 69.959999999999994 1.4688227176142814E-002 + 70.019999999999996 1.4169956959290009E-002 + 70.079999999999998 1.3645072490480069E-002 + 70.140000000000001 1.3114135641776926E-002 + 70.199999999999989 1.2577712642172082E-002 + 70.259999999999991 1.2036371306917065E-002 + 70.319999999999993 1.1490680798609472E-002 + 70.379999999999995 1.0941213311395779E-002 + 70.439999999999998 1.0388540619033267E-002 + 70.500000000000000 9.8332301850816844E-003 + 70.560000000000002 9.2758512811789949E-003 + 70.619999999999990 8.7169687588719517E-003 + 70.679999999999993 8.1571427518352738E-003 + 70.739999999999995 7.5969296529441533E-003 + 70.799999999999997 7.0368805795637491E-003 + 70.859999999999999 6.4775388142610871E-003 + 70.920000000000002 5.9194424245115193E-003 + 70.979999999999990 5.3631196784302343E-003 + 71.039999999999992 4.8090914765422021E-003 + 71.099999999999994 4.2578687493063814E-003 + 71.159999999999997 3.7099522558838843E-003 + 71.219999999999999 3.1658330884472815E-003 + 71.280000000000001 2.6259901219236759E-003 + 71.339999999999989 2.0908908316968314E-003 + 71.399999999999991 1.5609909241438269E-003 + 71.459999999999994 1.0367323499979979E-003 + 71.519999999999996 5.1854436526346944E-004 + 71.579999999999998 6.8434502188541432E-006 + 71.640000000000001 -4.9796946941139985E-004 + 71.699999999999989 -9.9550643976593174E-004 + 71.759999999999991 -1.4853947238377715E-003 + 71.819999999999993 -1.9672763979213352E-003 + 71.879999999999995 -2.4408090487787071E-003 + 71.939999999999998 -2.9056644438272151E-003 + 72.000000000000000 -3.3615310993833462E-003 + 72.060000000000002 -3.8081127725539715E-003 + 72.119999999999990 -4.2451288213037472E-003 + 72.179999999999993 -4.6723154516961039E-003 + 72.239999999999995 -5.0894234247955954E-003 + 72.299999999999997 -5.4962208127233188E-003 + 72.359999999999999 -5.8924905764733649E-003 + 72.420000000000002 -6.2780330117456692E-003 + 72.479999999999990 -6.6526640327636702E-003 + 72.539999999999992 -7.0162139486422293E-003 + 72.599999999999994 -7.3685313191356270E-003 + 72.659999999999997 -7.7094785961210367E-003 + 72.719999999999999 -8.0389352679862327E-003 + 72.780000000000001 -8.3567954865535390E-003 + 72.839999999999989 -8.6629692126581094E-003 + 72.899999999999991 -8.9573819106960762E-003 + 72.959999999999994 -9.2399740565637239E-003 + 73.019999999999996 -9.5107006373676330E-003 + 73.079999999999998 -9.7695309842972759E-003 + 73.140000000000001 -1.0016450801391944E-002 + 73.199999999999989 -1.0251458001868590E-002 + 73.259999999999991 -1.0474565092628436E-002 + 73.319999999999993 -1.0685799473858237E-002 + 73.379999999999995 -1.0885202114209062E-002 + 73.439999999999998 -1.1072825815535529E-002 + 73.500000000000000 -1.1248738306053288E-002 + 73.560000000000002 -1.1413018579981312E-002 + 73.619999999999990 -1.1565758746206568E-002 + 73.679999999999993 -1.1707062676073299E-002 + 73.739999999999995 -1.1837047342533116E-002 + 73.799999999999997 -1.1955840095935080E-002 + 73.859999999999999 -1.2063580282314719E-002 + 73.920000000000002 -1.2160417657633276E-002 + 73.979999999999990 -1.2246512857684513E-002 + 74.039999999999992 -1.2322038416999359E-002 + 74.099999999999994 -1.2387174182296803E-002 + 74.159999999999997 -1.2442112102390773E-002 + 74.219999999999999 -1.2487050056897157E-002 + 74.280000000000001 -1.2522198368818906E-002 + 74.339999999999989 -1.2547773340314854E-002 + 74.399999999999991 -1.2564000030385471E-002 + 74.459999999999994 -1.2571111635428060E-002 + 74.519999999999996 -1.2569348348318226E-002 + 74.579999999999998 -1.2558957546949667E-002 + 74.640000000000001 -1.2540192185831729E-002 + 74.699999999999989 -1.2513312024362965E-002 + 74.759999999999991 -1.2478582607002764E-002 + 74.819999999999993 -1.2436274533374902E-002 + 74.879999999999995 -1.2386661560640489E-002 + 74.939999999999998 -1.2330024259654040E-002 + 75.000000000000000 -1.2266643742918710E-002 + 75.060000000000002 -1.2196807851038719E-002 + 75.119999999999990 -1.2120805765681615E-002 + 75.179999999999993 -1.2038929724636915E-002 + 75.239999999999995 -1.1951471853978551E-002 + 75.299999999999997 -1.1858729191476930E-002 + 75.359999999999999 -1.1760996900241037E-002 + 75.420000000000002 -1.1658570882854965E-002 + 75.479999999999990 -1.1551748412209481E-002 + 75.539999999999992 -1.1440824582624378E-002 + 75.599999999999994 -1.1326095490036374E-002 + 75.659999999999997 -1.1207853790755283E-002 + 75.719999999999999 -1.1086391350309139E-002 + 75.780000000000001 -1.0961997311626502E-002 + 75.839999999999989 -1.0834958408791362E-002 + 75.899999999999991 -1.0705556806680071E-002 + 75.959999999999994 -1.0574072701056795E-002 + 76.019999999999996 -1.0440779782155612E-002 + 76.079999999999998 -1.0305948395352871E-002 + 76.140000000000001 -1.0169843962976263E-002 + 76.199999999999989 -1.0032725029620037E-002 + 76.259999999999991 -9.8948446499092391E-003 + 76.319999999999993 -9.7564513612394162E-003 + 76.379999999999995 -9.6177846388154145E-003 + 76.439999999999998 -9.4790775564152392E-003 + 76.500000000000000 -9.3405570989409034E-003 + 76.560000000000002 -9.2024407490264876E-003 + 76.619999999999990 -9.0649377321900381E-003 + 76.679999999999993 -8.9282512292749288E-003 + 76.739999999999995 -8.7925735311026459E-003 + 76.799999999999997 -8.6580892584211134E-003 + 76.859999999999999 -8.5249746604120526E-003 + 76.920000000000002 -8.3933957568448798E-003 + 76.979999999999990 -8.2635088034924663E-003 + 77.039999999999992 -8.1354616926375464E-003 + 77.099999999999994 -8.0093917388050790E-003 + 77.159999999999997 -7.8854269960727669E-003 + 77.219999999999999 -7.7636858181018330E-003 + 77.280000000000001 -7.6442773839777468E-003 + 77.339999999999989 -7.5273000247703201E-003 + 77.399999999999991 -7.4128421865992007E-003 + 77.459999999999994 -7.3009830828281589E-003 + 77.519999999999996 -7.1917914063781311E-003 + 77.579999999999998 -7.0853271815585206E-003 + 77.640000000000001 -6.9816402995254928E-003 + 77.699999999999989 -6.8807715726364052E-003 + 77.759999999999991 -6.7827523329810199E-003 + 77.819999999999993 -6.6876048431256272E-003 + 77.879999999999995 -6.5953427496792264E-003 + 77.939999999999998 -6.5059711661347424E-003 + 78.000000000000000 -6.4194862056712364E-003 + 78.060000000000002 -6.3358767386040311E-003 + 78.119999999999990 -6.2551231245899681E-003 + 78.179999999999993 -6.1771985254388531E-003 + 78.239999999999995 -6.1020691869966880E-003 + 78.299999999999997 -6.0296937869197082E-003 + 78.359999999999999 -5.9600252049768531E-003 + 78.420000000000002 -5.8930098645556079E-003 + 78.479999999999990 -5.8285880580291362E-003 + 78.539999999999992 -5.7666955754602390E-003 + 78.599999999999994 -5.7072620977021106E-003 + 78.659999999999997 -5.6502137858583604E-003 + 78.719999999999999 -5.5954711275434492E-003 + 78.780000000000001 -5.5429519825434068E-003 + 78.839999999999989 -5.4925707281597604E-003 + 78.899999999999991 -5.4442376246246500E-003 + 78.959999999999994 -5.3978613473957679E-003 + 79.019999999999996 -5.3533480931832423E-003 + 79.079999999999998 -5.3106028121721344E-003 + 79.140000000000001 -5.2695279892731378E-003 + 79.199999999999989 -5.2300254512196217E-003 + 79.259999999999991 -5.1919969848723980E-003 + 79.319999999999993 -5.1553429158905945E-003 + 79.379999999999995 -5.1199649578755526E-003 + 79.439999999999998 -5.0857645372197570E-003 + 79.500000000000000 -5.0526438153660124E-003 + 79.560000000000002 -5.0205066859663333E-003 + 79.619999999999990 -4.9892577234367493E-003 + 79.679999999999993 -4.9588041716158819E-003 + 79.739999999999995 -4.9290546995718141E-003 + 79.799999999999997 -4.8999201929057403E-003 + 79.859999999999999 -4.8713145001825636E-003 + 79.920000000000002 -4.8431538927629740E-003 + 79.979999999999990 -4.8153575873617826E-003 + 80.039999999999992 -4.7878482752975043E-003 + 80.099999999999994 -4.7605517619139079E-003 + 80.159999999999997 -4.7333975024923423E-003 + 80.219999999999999 -4.7063187582266994E-003 + 80.280000000000001 -4.6792521697394942E-003 + 80.340000000000003 -4.6521390962354619E-003 + 80.400000000000006 -4.6249241470217592E-003 + 80.460000000000008 -4.5975562480683012E-003 + 80.519999999999982 -4.5699889614978541E-003 + 80.579999999999984 -4.5421791374021065E-003 + 80.639999999999986 -4.5140882927289898E-003 + 80.699999999999989 -4.4856824351591799E-003 + 80.759999999999991 -4.4569316326956328E-003 + 80.819999999999993 -4.4278105272509641E-003 + 80.879999999999995 -4.3982963391941098E-003 + 80.939999999999998 -4.3683721051554977E-003 + 81.000000000000000 -4.3380243823940168E-003 + 81.060000000000002 -4.3072437301887303E-003 + 81.120000000000005 -4.2760236500858006E-003 + 81.180000000000007 -4.2443624901170015E-003 + 81.240000000000009 -4.2122619460453941E-003 + 81.299999999999983 -4.1797261601496530E-003 + 81.359999999999985 -4.1467639664106411E-003 + 81.419999999999987 -4.1133869965626294E-003 + 81.479999999999990 -4.0796097639470450E-003 + 81.539999999999992 -4.0454496228795288E-003 + 81.599999999999994 -4.0109265130800348E-003 + 81.659999999999997 -3.9760627269841212E-003 + 81.719999999999999 -3.9408836908509538E-003 + 81.780000000000001 -3.9054162768548347E-003 + 81.840000000000003 -3.8696894277284789E-003 + 81.900000000000006 -3.8337340135467949E-003 + 81.960000000000008 -3.7975821522251607E-003 + 82.019999999999982 -3.7612678821693983E-003 + 82.079999999999984 -3.7248259761175585E-003 + 82.139999999999986 -3.6882927663616275E-003 + 82.199999999999989 -3.6517047605377061E-003 + 82.259999999999991 -3.6150997535616181E-003 + 82.319999999999993 -3.5785155439507495E-003 + 82.379999999999995 -3.5419906343305929E-003 + 82.439999999999998 -3.5055634158636787E-003 + 82.500000000000000 -3.4692721033343934E-003 + 82.560000000000002 -3.4331551093494330E-003 + 82.620000000000005 -3.3972499866414024E-003 + 82.680000000000007 -3.3615941495319405E-003 + 82.740000000000009 -3.3262243204075217E-003 + 82.799999999999983 -3.2911763545750211E-003 + 82.859999999999985 -3.2564852456641300E-003 + 82.919999999999987 -3.2221847267403414E-003 + 82.979999999999990 -3.1883074100753721E-003 + 83.039999999999992 -3.1548846761167617E-003 + 83.099999999999994 -3.1219465797606271E-003 + 83.159999999999997 -3.0895211695256618E-003 + 83.219999999999999 -3.0576352299595730E-003 + 83.280000000000001 -3.0263140867643422E-003 + 83.340000000000003 -2.9955809414452211E-003 + 83.400000000000006 -2.9654572736684546E-003 + 83.460000000000008 -2.9359623309416030E-003 + 83.519999999999982 -2.9071138469906415E-003 + 83.579999999999984 -2.8789270938845059E-003 + 83.639999999999986 -2.8514155927795376E-003 + 83.699999999999989 -2.8245911111499308E-003 + 83.759999999999991 -2.7984629254442814E-003 + 83.819999999999993 -2.7730379118779624E-003 + 83.879999999999995 -2.7483215056693265E-003 + 83.939999999999998 -2.7243166414988259E-003 + 84.000000000000000 -2.7010243199503399E-003 + 84.060000000000002 -2.6784434772331341E-003 + 84.120000000000005 -2.6565709330436922E-003 + 84.180000000000007 -2.6354014274463169E-003 + 84.240000000000009 -2.6149280664143266E-003 + 84.299999999999983 -2.5951419461516436E-003 + 84.359999999999985 -2.5760316515950421E-003 + 84.419999999999987 -2.5575846146338867E-003 + 84.479999999999990 -2.5397860254311976E-003 + 84.539999999999992 -2.5226199701717310E-003 + 84.599999999999994 -2.5060681443572303E-003 + 84.659999999999997 -2.4901110562231205E-003 + 84.719999999999999 -2.4747272670412202E-003 + 84.780000000000001 -2.4598944011412190E-003 + 84.840000000000003 -2.4455881843574974E-003 + 84.900000000000006 -2.4317836048962380E-003 + 84.960000000000008 -2.4184541790972470E-003 + 85.019999999999982 -2.4055721988904656E-003 + 85.079999999999984 -2.3931093519720353E-003 + 85.139999999999986 -2.3810359322705209E-003 + 85.199999999999989 -2.3693216264758232E-003 + 85.259999999999991 -2.3579358073818509E-003 + 85.319999999999993 -2.3468466015489123E-003 + 85.379999999999995 -2.3360224658023005E-003 + 85.439999999999998 -2.3254312514203513E-003 + 85.500000000000000 -2.3150402824438057E-003 + 85.560000000000002 -2.3048170274944158E-003 + 85.620000000000005 -2.2947288181905862E-003 + 85.680000000000007 -2.2847434512049745E-003 + 85.740000000000009 -2.2748285233939432E-003 + 85.799999999999983 -2.2649521043691459E-003 + 85.859999999999985 -2.2550825613794601E-003 + 85.919999999999987 -2.2451889889525700E-003 + 85.979999999999990 -2.2352408471814525E-003 + 86.039999999999992 -2.2252087560664757E-003 + 86.099999999999994 -2.2150638882143100E-003 + 86.159999999999997 -2.2047779719465842E-003 + 86.219999999999999 -2.1943240699263448E-003 + 86.280000000000001 -2.1836765336447610E-003 + 86.340000000000003 -2.1728102433972462E-003 + 86.400000000000006 -2.1617019887432412E-003 + 86.460000000000008 -2.1503295500666527E-003 + 86.519999999999982 -2.1386721875641473E-003 + 86.579999999999984 -2.1267104977433613E-003 + 86.639999999999986 -2.1144269297514577E-003 + 86.699999999999989 -2.1018050260046667E-003 + 86.759999999999991 -2.0888302554600531E-003 + 86.819999999999993 -2.0754898714451298E-003 + 86.879999999999995 -2.0617729018191982E-003 + 86.939999999999998 -2.0476699329791417E-003 + 87.000000000000000 -2.0331733968734136E-003 + 87.060000000000002 -2.0182778479265911E-003 + 87.120000000000005 -2.0029793076606012E-003 + 87.180000000000007 -1.9872759152089851E-003 + 87.240000000000009 -1.9711673979280215E-003 + 87.299999999999983 -1.9546556637027625E-003 + 87.359999999999985 -1.9377442779117471E-003 + 87.419999999999987 -1.9204385394471679E-003 + 87.479999999999990 -1.9027457943433148E-003 + 87.539999999999992 -1.8846749873189452E-003 + 87.599999999999994 -1.8662369254484317E-003 + 87.659999999999997 -1.8474440834000711E-003 + 87.719999999999999 -1.8283105011941672E-003 + 87.780000000000001 -1.8088519000165255E-003 + 87.840000000000003 -1.7890854963134428E-003 + 87.900000000000006 -1.7690302672652464E-003 + 87.960000000000008 -1.7487061873765163E-003 + 88.019999999999982 -1.7281348716489051E-003 + 88.079999999999984 -1.7073392946193350E-003 + 88.139999999999986 -1.6863433665458994E-003 + 88.199999999999989 -1.6651721793050291E-003 + 88.259999999999991 -1.6438520296881314E-003 + 88.319999999999993 -1.6224099806037672E-003 + 88.379999999999995 -1.6008741290785807E-003 + 88.439999999999998 -1.5792732005653497E-003 + 88.500000000000000 -1.5576367484556616E-003 + 88.560000000000002 -1.5359948207740405E-003 + 88.620000000000005 -1.5143777195429106E-003 + 88.680000000000007 -1.4928165052558815E-003 + 88.740000000000009 -1.4713422407102476E-003 + 88.799999999999983 -1.4499861500364315E-003 + 88.859999999999985 -1.4287798736813142E-003 + 88.919999999999987 -1.4077546748770247E-003 + 88.979999999999990 -1.3869416955045674E-003 + 89.039999999999992 -1.3663720706792299E-003 + 89.099999999999994 -1.3460763110732354E-003 + 89.159999999999997 -1.3260845860879847E-003 + 89.219999999999999 -1.3064266760182694E-003 + 89.280000000000001 -1.2871316242408001E-003 + 89.340000000000003 -1.2682277059282562E-003 + 89.400000000000006 -1.2497423423842129E-003 + 89.460000000000008 -1.2317021982941479E-003 + 89.519999999999982 -1.2141329241772861E-003 + 89.579999999999984 -1.1970590439641744E-003 + 89.639999999999986 -1.1805039458732162E-003 + 89.699999999999989 -1.1644898597583510E-003 + 89.759999999999991 -1.1490378216563752E-003 + 89.819999999999993 -1.1341674299358781E-003 + 89.879999999999995 -1.1198970769661562E-003 + 89.939999999999998 -1.1062436187672918E-003 + 90.000000000000000 -1.0932226130733677E-003 + 90.060000000000002 -1.0808479996715430E-003 + 90.120000000000005 -1.0691321171224528E-003 + 90.180000000000007 -1.0580859238383913E-003 + 90.240000000000009 -1.0477186674033377E-003 + 90.299999999999983 -1.0380382746902784E-003 + 90.359999999999985 -1.0290508690442063E-003 + 90.419999999999987 -1.0207609468708273E-003 + 90.479999999999990 -1.0131714099256626E-003 + 90.539999999999992 -1.0062835282758020E-003 + 90.599999999999994 -1.0000971398343463E-003 + 90.659999999999997 -9.9461027573304571E-004 + 90.719999999999999 -9.8981953362503876E-004 + 90.780000000000001 -9.8571987642755480E-004 + 90.840000000000003 -9.8230463819729127E-004 + 90.900000000000006 -9.7956574303777861E-004 + 90.960000000000008 -9.7749361945106300E-004 + 91.019999999999982 -9.7607729951264580E-004 + 91.079999999999984 -9.7530436128878131E-004 + 91.139999999999986 -9.7516105205068104E-004 + 91.199999999999989 -9.7563229183027429E-004 + 91.259999999999991 -9.7670183663302475E-004 + 91.319999999999993 -9.7835223900303247E-004 + 91.379999999999995 -9.8056501441275536E-004 + 91.439999999999998 -9.8332051254137152E-004 + 91.500000000000000 -9.8659800530788151E-004 + 91.560000000000002 -9.9037612844217883E-004 + 91.620000000000005 -9.9463254012806561E-004 + 91.680000000000007 -9.9934399757622841E-004 + 91.739999999999981 -1.0044866379964866E-003 + 91.799999999999983 -1.0100358738379144E-003 + 91.859999999999985 -1.0159666691663440E-003 + 91.919999999999987 -1.0222533878772031E-003 + 91.979999999999990 -1.0288699588959704E-003 + 92.039999999999992 -1.0357898215207773E-003 + 92.099999999999994 -1.0429861806866383E-003 + 92.159999999999997 -1.0504321040811990E-003 + 92.219999999999999 -1.0581003270427466E-003 + 92.280000000000001 -1.0659637468682171E-003 + 92.340000000000003 -1.0739947597525790E-003 + 92.400000000000006 -1.0821663672899141E-003 + 92.460000000000008 -1.0904512978791850E-003 + 92.519999999999982 -1.0988225663690402E-003 + 92.579999999999984 -1.1072534864459097E-003 + 92.639999999999986 -1.1157175946529142E-003 + 92.699999999999989 -1.1241890553317659E-003 + 92.759999999999991 -1.1326423293003842E-003 + 92.819999999999993 -1.1410523517027048E-003 + 92.879999999999995 -1.1493949136469903E-003 + 92.939999999999998 -1.1576461906344048E-003 + 93.000000000000000 -1.1657832738775145E-003 + 93.060000000000002 -1.1737838120023409E-003 + 93.120000000000005 -1.1816264575887218E-003 + 93.180000000000007 -1.1892904672092370E-003 + 93.239999999999981 -1.1967564022690642E-003 + 93.299999999999983 -1.2040054010528484E-003 + 93.359999999999985 -1.2110196771534661E-003 + 93.419999999999987 -1.2177827399917148E-003 + 93.479999999999990 -1.2242787549430398E-003 + 93.539999999999992 -1.2304933120959179E-003 + 93.599999999999994 -1.2364128092024753E-003 + 93.659999999999997 -1.2420249061817371E-003 + 93.719999999999999 -1.2473186389685828E-003 + 93.780000000000001 -1.2522840151960714E-003 + 93.840000000000003 -1.2569121918494448E-003 + 93.900000000000006 -1.2611959028325324E-003 + 93.960000000000008 -1.2651287668979548E-003 + 94.019999999999982 -1.2687057353270399E-003 + 94.079999999999984 -1.2719231620336813E-003 + 94.139999999999986 -1.2747785349833019E-003 + 94.199999999999989 -1.2772708401752794E-003 + 94.259999999999991 -1.2793998914618473E-003 + 94.319999999999993 -1.2811673022676512E-003 + 94.379999999999995 -1.2825758211323227E-003 + 94.439999999999998 -1.2836291624558488E-003 + 94.500000000000000 -1.2843327069385034E-003 + 94.560000000000002 -1.2846927943526447E-003 + 94.620000000000005 -1.2847170333466101E-003 + 94.680000000000007 -1.2844144609459676E-003 + 94.739999999999981 -1.2837949562491174E-003 + 94.799999999999983 -1.2828698806336594E-003 + 94.859999999999985 -1.2816514207626044E-003 + 94.919999999999987 -1.2801530948944987E-003 + 94.979999999999990 -1.2783895151220847E-003 + 95.039999999999992 -1.2763762034399512E-003 + 95.099999999999994 -1.2741295902509498E-003 + 95.159999999999997 -1.2716673327210614E-003 + 95.219999999999999 -1.2690080663218190E-003 + 95.280000000000001 -1.2661709542072489E-003 + 95.340000000000003 -1.2631761298888191E-003 + 95.400000000000006 -1.2600447267343408E-003 + 95.460000000000008 -1.2567984958721135E-003 + 95.519999999999982 -1.2534598283741229E-003 + 95.579999999999984 -1.2500517374061798E-003 + 95.639999999999986 -1.2465981289834663E-003 + 95.699999999999989 -1.2431230566501176E-003 + 95.759999999999991 -1.2396514397591191E-003 + 95.819999999999993 -1.2362084808106206E-003 + 95.879999999999995 -1.2328197703469616E-003 + 95.939999999999998 -1.2295112433066784E-003 + 96.000000000000000 -1.2263093543800640E-003 + 96.060000000000002 -1.2232404985808489E-003 + 96.120000000000005 -1.2203315230674197E-003 + 96.180000000000007 -1.2176092298654575E-003 + 96.239999999999981 -1.2151005461931447E-003 + 96.299999999999983 -1.2128324936615746E-003 + 96.359999999999985 -1.2108319620067916E-003 + 96.419999999999987 -1.2091259780730417E-003 + 96.479999999999990 -1.2077410394625253E-003 + 96.539999999999992 -1.2067035829196144E-003 + 96.599999999999994 -1.2060399743192224E-003 + 96.659999999999997 -1.2057760519127302E-003 + 96.719999999999999 -1.2059371707930700E-003 + 96.780000000000001 -1.2065484403360985E-003 + 96.840000000000003 -1.2076342634937830E-003 + 96.900000000000006 -1.2092184563844116E-003 + 96.960000000000008 -1.2113243454400255E-003 + 97.019999999999982 -1.2139744658809031E-003 + 97.079999999999984 -1.2171906327570119E-003 + 97.139999999999986 -1.2209937834896625E-003 + 97.199999999999989 -1.2254041958814875E-003 + 97.259999999999991 -1.2304410510294327E-003 + 97.319999999999993 -1.2361225463735762E-003 + 97.379999999999995 -1.2424662241518497E-003 + 97.439999999999998 -1.2494882511166867E-003 + 97.500000000000000 -1.2572038804494442E-003 + 97.560000000000002 -1.2656272369872324E-003 + 97.620000000000005 -1.2747711020885950E-003 + 97.680000000000007 -1.2846472393750628E-003 + 97.739999999999981 -1.2952659592490230E-003 + 97.799999999999983 -1.3066363487418814E-003 + 97.859999999999985 -1.3187661450609458E-003 + 97.919999999999987 -1.3316617201040676E-003 + 97.979999999999990 -1.3453277172540865E-003 + 98.039999999999992 -1.3597676266330120E-003 + 98.099999999999994 -1.3749830615238485E-003 + 98.159999999999997 -1.3909742041300099E-003 + 98.219999999999999 -1.4077397512757554E-003 + 98.280000000000001 -1.4252764528388982E-003 + 98.340000000000003 -1.4435794552074667E-003 + 98.400000000000006 -1.4626422292048035E-003 + 98.460000000000008 -1.4824565409440667E-003 + 98.519999999999982 -1.5030121431685352E-003 + 98.579999999999984 -1.5242973018245037E-003 + 98.639999999999986 -1.5462981679866107E-003 + 98.699999999999989 -1.5689993060811229E-003 + 98.759999999999991 -1.5923834305939368E-003 + 98.819999999999993 -1.6164314373879340E-003 + 98.879999999999995 -1.6411222519735385E-003 + 98.939999999999998 -1.6664331917141998E-003 + 99.000000000000000 -1.6923395903329708E-003 + 99.060000000000002 -1.7188150815906024E-003 + 99.120000000000005 -1.7458314774621898E-003 + 99.180000000000007 -1.7733589508930625E-003 + 99.239999999999981 -1.8013657148870904E-003 + 99.299999999999983 -1.8298181972242204E-003 + 99.359999999999985 -1.8586813879439370E-003 + 99.419999999999987 -1.8879182630838480E-003 + 99.479999999999990 -1.9174905632239922E-003 + 99.539999999999992 -1.9473579707102516E-003 + 99.599999999999994 -1.9774789085205001E-003 + 99.659999999999997 -2.0078100046341373E-003 + 99.719999999999999 -2.0383068968990595E-003 + 99.780000000000001 -2.0689233901385602E-003 + 99.840000000000003 -2.0996123032624831E-003 + 99.900000000000006 -2.1303246696271110E-003 + 99.960000000000008 -2.1610110988426884E-003 + 100.01999999999998 -2.1916205183600229E-003 + 100.07999999999998 -2.2221010884624871E-003 + 100.13999999999999 -2.2523998919670115E-003 + 100.19999999999999 -2.2824634736787453E-003 + 100.25999999999999 -2.3122371798737951E-003 + 100.31999999999999 -2.3416659635067372E-003 + 100.38000000000000 -2.3706946210446324E-003 + 100.44000000000000 -2.3992670892256955E-003 + 100.50000000000000 -2.4273272214708928E-003 + 100.56000000000000 -2.4548188349151510E-003 + 100.62000000000000 -2.4816852591877485E-003 + 100.68000000000001 -2.5078703150147748E-003 + 100.73999999999998 -2.5333175692372738E-003 + 100.79999999999998 -2.5579713714103535E-003 + 100.85999999999999 -2.5817763132314924E-003 + 100.91999999999999 -2.6046771827638233E-003 + 100.97999999999999 -2.6266199297524427E-003 + 101.03999999999999 -2.6475512721601370E-003 + 101.09999999999999 -2.6674183629051967E-003 + 101.16000000000000 -2.6861697055257398E-003 + 101.22000000000000 -2.7037551852448698E-003 + 101.28000000000000 -2.7201254908365063E-003 + 101.34000000000000 -2.7352332465822291E-003 + 101.40000000000001 -2.7490321953447779E-003 + 101.46000000000001 -2.7614779590252251E-003 + 101.51999999999998 -2.7725276609559747E-003 + 101.57999999999998 -2.7821405585565992E-003 + 101.63999999999999 -2.7902777619611741E-003 + 101.69999999999999 -2.7969022669100314E-003 + 101.75999999999999 -2.8019795583760910E-003 + 101.81999999999999 -2.8054772316062340E-003 + 101.88000000000000 -2.8073650808936759E-003 + 101.94000000000000 -2.8076155065263264E-003 + 102.00000000000000 -2.8062035434622858E-003 + 102.06000000000000 -2.8031065713918770E-003 + 102.12000000000000 -2.7983045524939379E-003 + 102.18000000000001 -2.7917805459133009E-003 + 102.23999999999998 -2.7835199489729466E-003 + 102.29999999999998 -2.7735114298947311E-003 + 102.35999999999999 -2.7617459261247974E-003 + 102.41999999999999 -2.7482176577667342E-003 + 102.47999999999999 -2.7329238278402260E-003 + 102.53999999999999 -2.7158640863844119E-003 + 102.59999999999999 -2.6970414653163114E-003 + 102.66000000000000 -2.6764616660136576E-003 + 102.72000000000000 -2.6541331369936984E-003 + 102.78000000000000 -2.6300676132207310E-003 + 102.84000000000000 -2.6042792780427045E-003 + 102.90000000000001 -2.5767849676431079E-003 + 102.96000000000001 -2.5476046160143530E-003 + 103.01999999999998 -2.5167608041036927E-003 + 103.07999999999998 -2.4842787633022399E-003 + 103.13999999999999 -2.4501860171205073E-003 + 103.19999999999999 -2.4145131311933358E-003 + 103.25999999999999 -2.3772930132273003E-003 + 103.31999999999999 -2.3385604846836265E-003 + 103.38000000000000 -2.2983530154893766E-003 + 103.44000000000000 -2.2567102791942635E-003 + 103.50000000000000 -2.2136743920545985E-003 + 103.56000000000000 -2.1692887926509975E-003 + 103.62000000000000 -2.1235995449719845E-003 + 103.68000000000001 -2.0766539969791584E-003 + 103.73999999999998 -2.0285017710852346E-003 + 103.79999999999998 -1.9791935697605258E-003 + 103.85999999999999 -1.9287819252519643E-003 + 103.91999999999999 -1.8773204776186322E-003 + 103.97999999999999 -1.8248643773192230E-003 + 104.03999999999999 -1.7714698337499054E-003 + 104.09999999999999 -1.7171938655536861E-003 + 104.16000000000000 -1.6620944558869233E-003 + 104.22000000000000 -1.6062303147751803E-003 + 104.28000000000000 -1.5496608386287901E-003 + 104.34000000000000 -1.4924454797711026E-003 + 104.40000000000001 -1.4346443345919272E-003 + 104.46000000000001 -1.3763178699581482E-003 + 104.51999999999998 -1.3175261286002134E-003 + 104.57999999999998 -1.2583294912136759E-003 + 104.63999999999999 -1.1987881871133217E-003 + 104.69999999999999 -1.1389621604017571E-003 + 104.75999999999999 -1.0789109200586295E-003 + 104.81999999999999 -1.0186935332331959E-003 + 104.88000000000000 -9.5836860626043207E-004 + 104.94000000000000 -8.9799398563583340E-004 + 105.00000000000000 -8.3762685491247323E-004 + 105.06000000000000 -7.7732352123365900E-004 + 105.12000000000000 -7.1713950104814513E-004 + 105.18000000000001 -6.5712911078035505E-004 + 105.23999999999998 -5.9734580141506354E-004 + 105.29999999999998 -5.3784188646783225E-004 + 105.35999999999999 -4.7866834421991924E-004 + 105.41999999999999 -4.1987489319893364E-004 + 105.47999999999999 -3.6151003739175994E-004 + 105.53999999999999 -3.0362085896934395E-004 + 105.59999999999999 -2.4625297840070570E-004 + 105.66000000000000 -1.8945059147347710E-004 + 105.72000000000000 -1.3325635989011158E-004 + 105.78000000000000 -7.7711451637374446E-005 + 105.84000000000000 -2.2855452280932626E-005 + 105.90000000000001 3.1273637304241440E-005 + 105.96000000000001 8.4639407934198059E-005 + 106.01999999999998 1.3720702677324798E-004 + 106.07999999999998 1.8894325159230548E-004 + 106.13999999999999 2.3981641498875677E-004 + 106.19999999999999 2.8979650200830649E-004 + 106.25999999999999 3.3885504672085824E-004 + 106.31999999999999 3.8696512520491671E-004 + 106.38000000000000 4.3410138694936469E-004 + 106.44000000000000 4.8024004763613440E-004 + 106.50000000000000 5.2535875772776873E-004 + 106.56000000000000 5.6943675409493004E-004 + 106.62000000000000 6.1245461815378935E-004 + 106.68000000000001 6.5439450526030309E-004 + 106.73999999999998 6.9523986022397089E-004 + 106.79999999999998 7.3497557695339404E-004 + 106.85999999999999 7.7358791095193168E-004 + 106.91999999999999 8.1106445058059455E-004 + 106.97999999999999 8.4739403766042297E-004 + 107.03999999999999 8.8256680691932280E-004 + 107.09999999999999 9.1657402883012478E-004 + 107.16000000000000 9.4940824507543445E-004 + 107.22000000000000 9.8106297131306231E-004 + 107.28000000000000 1.0115331505802781E-003 + 107.34000000000000 1.0408144710758970E-003 + 107.40000000000001 1.0689039733491753E-003 + 107.46000000000001 1.0957993973770249E-003 + 107.51999999999998 1.1214995963410499E-003 + 107.57999999999998 1.1460044086905306E-003 + 107.63999999999999 1.1693144350723925E-003 + 107.69999999999999 1.1914311720840384E-003 + 107.75999999999999 1.2123571599919353E-003 + 107.81999999999999 1.2320953915884397E-003 + 107.88000000000000 1.2506499854154703E-003 + 107.94000000000000 1.2680254923996194E-003 + 108.00000000000000 1.2842274019580400E-003 + 108.06000000000000 1.2992618838777931E-003 + 108.12000000000000 1.3131356939562338E-003 + 108.18000000000001 1.3258560466215235E-003 + 108.23999999999998 1.3374312164707589E-003 + 108.29999999999998 1.3478696773073118E-003 + 108.35999999999999 1.3571807599118142E-003 + 108.41999999999999 1.3653741208552866E-003 + 108.47999999999999 1.3724601795778316E-003 + 108.53999999999999 1.3784497099076868E-003 + 108.59999999999999 1.3833541197972286E-003 + 108.66000000000000 1.3871853614003749E-003 + 108.72000000000000 1.3899557386401111E-003 + 108.78000000000000 1.3916782734894415E-003 + 108.84000000000000 1.3923662198111154E-003 + 108.90000000000001 1.3920335662525891E-003 + 108.96000000000001 1.3906947636610307E-003 + 109.01999999999998 1.3883647212277049E-003 + 109.07999999999998 1.3850587623947888E-003 + 109.13999999999999 1.3807928641750460E-003 + 109.19999999999999 1.3755832514707213E-003 + 109.25999999999999 1.3694469249748817E-003 + 109.31999999999999 1.3624010577140333E-003 + 109.38000000000000 1.3544635020791191E-003 + 109.44000000000000 1.3456523620652512E-003 + 109.50000000000000 1.3359864447874974E-003 + 109.56000000000000 1.3254848455330746E-003 + 109.62000000000000 1.3141670256708177E-003 + 109.68000000000001 1.3020531011225006E-003 + 109.73999999999998 1.2891634446279793E-003 + 109.79999999999998 1.2755187858416203E-003 + 109.85999999999999 1.2611402871591727E-003 + 109.91999999999999 1.2460495582507596E-003 + 109.97999999999999 1.2302686956090110E-003 + 110.03999999999999 1.2138198209008513E-003 + 110.09999999999999 1.1967258532175587E-003 + 110.16000000000000 1.1790097934138038E-003 + 110.22000000000000 1.1606952719561976E-003 + 110.28000000000000 1.1418060815841734E-003 + 110.34000000000000 1.1223663893729318E-003 + 110.40000000000001 1.1024007463322895E-003 + 110.46000000000001 1.0819341431541410E-003 + 110.51999999999998 1.0609915765981640E-003 + 110.57999999999998 1.0395986853515978E-003 + 110.63999999999999 1.0177810043240359E-003 + 110.69999999999999 9.9556461436194760E-004 + 110.75999999999999 9.7297579821217892E-004 + 110.81999999999999 9.5004087288261046E-004 + 110.88000000000000 9.2678642235469416E-004 + 110.94000000000000 9.0323919896640608E-004 + 111.00000000000000 8.7942593931437311E-004 + 111.06000000000000 8.5537355743288781E-004 + 111.12000000000000 8.3110900315047078E-004 + 111.18000000000001 8.0665923277838396E-004 + 111.23999999999998 7.8205122342467543E-004 + 111.29999999999998 7.5731187125194070E-004 + 111.35999999999999 7.3246812614166982E-004 + 111.41999999999999 7.0754684196817560E-004 + 111.47999999999999 6.8257470738658412E-004 + 111.53999999999999 6.5757838301523370E-004 + 111.59999999999999 6.3258432489940203E-004 + 111.66000000000000 6.0761883102356472E-004 + 111.72000000000000 5.8270801571834170E-004 + 111.78000000000000 5.5787775573623870E-004 + 111.84000000000000 5.3315369974438036E-004 + 111.90000000000001 5.0856122379221039E-004 + 111.96000000000001 4.8412532511684893E-004 + 112.01999999999998 4.5987067137354235E-004 + 112.07999999999998 4.3582155167665957E-004 + 112.13999999999999 4.1200185021400337E-004 + 112.19999999999999 3.8843495382457754E-004 + 112.25999999999999 3.6514379205958709E-004 + 112.31999999999999 3.4215078848490237E-004 + 112.38000000000000 3.1947779076612882E-004 + 112.44000000000000 2.9714605791985509E-004 + 112.50000000000000 2.7517629261709112E-004 + 112.56000000000000 2.5358854936672644E-004 + 112.62000000000000 2.3240221629184613E-004 + 112.68000000000001 2.1163603386077642E-004 + 112.73999999999998 1.9130802179566662E-004 + 112.79999999999998 1.7143553101868849E-004 + 112.85999999999999 1.5203516265227673E-004 + 112.91999999999999 1.3312277409497817E-004 + 112.97999999999999 1.1471346625531808E-004 + 113.03999999999999 9.6821563681058264E-005 + 113.09999999999999 7.9460597027074915E-005 + 113.16000000000000 6.2643296500326627E-005 + 113.22000000000000 4.6381576302836563E-005 + 113.28000000000000 3.0686512945469869E-005 + 113.34000000000000 1.5568338670547997E-005 + 113.40000000000001 1.0364374844975454E-006 + 113.46000000000001 -1.2900672576021229E-005 + 113.51999999999998 -2.6235338623538330E-005 + 113.57999999999998 -3.8960786098361731E-005 + 113.63999999999999 -5.1071115303036670E-005 + 113.69999999999999 -6.2561307709971991E-005 + 113.75999999999999 -7.3427226923731799E-005 + 113.81999999999999 -8.3665606889820617E-005 + 113.88000000000000 -9.3274068027690023E-005 + 113.94000000000000 -1.0225110367308594E-004 + 114.00000000000000 -1.1059606578620180E-004 + 114.06000000000000 -1.1830917928870734E-004 + 114.12000000000000 -1.2539152191674884E-004 + 114.18000000000001 -1.3184503224325980E-004 + 114.23999999999998 -1.3767248453527695E-004 + 114.29999999999998 -1.4287750627781288E-004 + 114.35999999999999 -1.4746455621528060E-004 + 114.41999999999999 -1.5143890389090746E-004 + 114.47999999999999 -1.5480663089160798E-004 + 114.53999999999999 -1.5757464723091576E-004 + 114.59999999999999 -1.5975063758832879E-004 + 114.66000000000000 -1.6134307214236279E-004 + 114.72000000000000 -1.6236119069881484E-004 + 114.78000000000000 -1.6281495840546469E-004 + 114.84000000000000 -1.6271508248949266E-004 + 114.90000000000001 -1.6207299254461762E-004 + 114.96000000000001 -1.6090079922805161E-004 + 115.01999999999998 -1.5921125061392713E-004 + 115.07999999999998 -1.5701776089125386E-004 + 115.13999999999999 -1.5433435381400406E-004 + 115.19999999999999 -1.5117564037625699E-004 + 115.25999999999999 -1.4755682419961038E-004 + 115.31999999999999 -1.4349363441440685E-004 + 115.38000000000000 -1.3900232771225639E-004 + 115.44000000000000 -1.3409965652795864E-004 + 115.50000000000000 -1.2880284307823954E-004 + 115.56000000000000 -1.2312956903123661E-004 + 115.62000000000000 -1.1709793755893912E-004 + 115.68000000000001 -1.1072644136878716E-004 + 115.73999999999998 -1.0403395687452685E-004 + 115.79999999999998 -9.7039717483538853E-005 + 115.85999999999999 -8.9763253302542313E-005 + 115.91999999999999 -8.2224385978058642E-005 + 115.97999999999999 -7.4443182489057426E-005 + 116.03999999999999 -6.6439939668641731E-005 + 116.09999999999999 -5.8235121981115957E-005 + 116.16000000000000 -4.9849340477326810E-005 + 116.22000000000000 -4.1303308392615190E-005 + 116.28000000000000 -3.2617804515125020E-005 + 116.34000000000000 -2.3813623319972823E-005 + 116.40000000000001 -1.4911548116747562E-005 + 116.46000000000001 -5.9323079917843100E-006 + 116.51999999999998 3.1034639278219016E-006 + 116.57999999999998 1.2175266314004565E-005 + 116.63999999999999 2.1262771382567367E-005 + 116.69999999999999 3.0345844904163961E-005 + 116.75999999999999 3.9404593354322819E-005 + 116.81999999999999 4.8419409836404280E-005 + 116.88000000000000 5.7370969104131220E-005 + 116.94000000000000 6.6240303310328801E-005 + 117.00000000000000 7.5008806646225399E-005 + 117.06000000000000 8.3658295446159214E-005 + 117.12000000000000 9.2171007249660340E-005 + 117.18000000000001 1.0052967194610490E-004 + 117.23999999999998 1.0871753224198517E-004 + 117.29999999999998 1.1671835318624195E-004 + 117.35999999999999 1.2451651664287702E-004 + 117.41999999999999 1.3209700968670784E-004 + 117.47999999999999 1.3944546854974805E-004 + 117.53999999999999 1.4654821575483390E-004 + 117.59999999999999 1.5339227807041828E-004 + 117.66000000000000 1.5996543618904219E-004 + 117.72000000000000 1.6625625608432336E-004 + 117.78000000000000 1.7225408282836474E-004 + 117.84000000000000 1.7794905528985600E-004 + 117.90000000000001 1.8333215990532772E-004 + 117.96000000000001 1.8839522848903379E-004 + 118.01999999999998 1.9313093142137323E-004 + 118.07999999999998 1.9753281648947959E-004 + 118.13999999999999 2.0159528617858072E-004 + 118.19999999999999 2.0531360011854664E-004 + 118.25999999999999 2.0868392031705033E-004 + 118.31999999999999 2.1170322322973360E-004 + 118.38000000000000 2.1436941707584899E-004 + 118.44000000000000 2.1668122068495662E-004 + 118.50000000000000 2.1863824872298706E-004 + 118.56000000000000 2.2024097028732227E-004 + 118.62000000000000 2.2149068540954574E-004 + 118.68000000000001 2.2238956116462521E-004 + 118.73999999999998 2.2294056851523955E-004 + 118.79999999999998 2.2314751186941600E-004 + 118.85999999999999 2.2301499592520543E-004 + 118.91999999999999 2.2254839144908521E-004 + 118.97999999999999 2.2175384683056047E-004 + 119.03999999999999 2.2063823435800430E-004 + 119.09999999999999 2.1920910557815605E-004 + 119.16000000000000 2.1747470482665824E-004 + 119.22000000000000 2.1544388434517468E-004 + 119.28000000000000 2.1312610141816090E-004 + 119.34000000000000 2.1053136099174222E-004 + 119.40000000000001 2.0767017026796525E-004 + 119.46000000000001 2.0455350283695437E-004 + 119.51999999999998 2.0119273528650599E-004 + 119.57999999999998 1.9759964162123682E-004 + 119.63999999999999 1.9378632344993696E-004 + 119.69999999999999 1.8976517479317085E-004 + 119.75999999999999 1.8554883311866949E-004 + 119.81999999999999 1.8115012746999459E-004 + 119.88000000000000 1.7658208623449819E-004 + 119.94000000000000 1.7185783251326558E-004 + 120.00000000000000 1.6699058823394289E-004 + 120.06000000000000 1.6199361978195127E-004 + 120.12000000000000 1.5688021008680958E-004 + 120.18000000000001 1.5166359420519819E-004 + 120.23999999999998 1.4635694383137747E-004 + 120.29999999999998 1.4097330012879732E-004 + 120.35999999999999 1.3552556337478302E-004 + 120.41999999999999 1.3002640987045121E-004 + 120.47999999999999 1.2448830437317127E-004 + 120.53999999999999 1.1892341713846833E-004 + 120.59999999999999 1.1334360169368593E-004 + 120.66000000000000 1.0776035016710104E-004 + 120.72000000000000 1.0218476833347727E-004 + 120.78000000000000 9.6627525224799831E-005 + 120.84000000000000 9.1098828870439530E-005 + 120.90000000000001 8.5608408288510163E-005 + 120.95999999999998 8.0165479435465153E-005 + 121.01999999999998 7.4778725509109327E-005 + 121.07999999999998 6.9456266746705067E-005 + 121.13999999999999 6.4205656271030574E-005 + 121.19999999999999 5.9033867025689730E-005 + 121.25999999999999 5.3947270674738161E-005 + 121.31999999999999 4.8951616817742349E-005 + 121.38000000000000 4.4052050688789955E-005 + 121.44000000000000 3.9253087789917031E-005 + 121.50000000000000 3.4558618411686101E-005 + 121.56000000000000 2.9971895472370511E-005 + 121.62000000000000 2.5495535100178928E-005 + 121.68000000000001 2.1131522174216076E-005 + 121.73999999999998 1.6881208869465170E-005 + 121.79999999999998 1.2745317478768868E-005 + 121.85999999999999 8.7239503831500137E-006 + 121.91999999999999 4.8166004887739787E-006 + 121.97999999999999 1.0221582225711526E-006 + 122.03999999999999 -2.6610632924648246E-006 + 122.09999999999999 -6.2353158484046269E-006 + 122.16000000000000 -9.7033946704479666E-006 + 122.22000000000000 -1.3068618291338295E-005 + 122.28000000000000 -1.6334798928548324E-005 + 122.34000000000000 -1.9506214716420617E-005 + 122.40000000000001 -2.2587589895614085E-005 + 122.45999999999998 -2.5584053765687717E-005 + 122.51999999999998 -2.8501120505024538E-005 + 122.57999999999998 -3.1344660605351105E-005 + 122.63999999999999 -3.4120871893023483E-005 + 122.69999999999999 -3.6836243207414980E-005 + 122.75999999999999 -3.9497533121392970E-005 + 122.81999999999999 -4.2111729692327175E-005 + 122.88000000000000 -4.4686045763857065E-005 + 122.94000000000000 -4.7227862136025697E-005 + 123.00000000000000 -4.9744717828130348E-005 + 123.06000000000000 -5.2244266964273147E-005 + 123.12000000000000 -5.4734258683613892E-005 + 123.18000000000001 -5.7222493242708466E-005 + 123.23999999999998 -5.9716800720841061E-005 + 123.29999999999998 -6.2224990253867884E-005 + 123.35999999999999 -6.4754835566412119E-005 + 123.41999999999999 -6.7314021407939047E-005 + 123.47999999999999 -6.9910111271128921E-005 + 123.53999999999999 -7.2550514416216779E-005 + 123.59999999999999 -7.5242456503699556E-005 + 123.66000000000000 -7.7992930206051083E-005 + 123.72000000000000 -8.0808671640854779E-005 + 123.78000000000000 -8.3696138055818493E-005 + 123.84000000000000 -8.6661460944702508E-005 + 123.90000000000001 -8.9710438622027106E-005 + 123.95999999999998 -9.2848500070032098E-005 + 124.01999999999998 -9.6080689207333648E-005 + 124.07999999999998 -9.9411657399335138E-005 + 124.13999999999999 -1.0284561485910342E-004 + 124.19999999999999 -1.0638635510919100E-004 + 124.25999999999999 -1.1003722414584147E-004 + 124.31999999999999 -1.1380109152634461E-004 + 124.38000000000000 -1.1768036294319951E-004 + 124.44000000000000 -1.2167695230086816E-004 + 124.50000000000000 -1.2579229118345650E-004 + 124.56000000000000 -1.3002727699936741E-004 + 124.62000000000000 -1.3438229532979594E-004 + 124.68000000000001 -1.3885720050425791E-004 + 124.73999999999998 -1.4345134420213409E-004 + 124.79999999999998 -1.4816347980424355E-004 + 124.85999999999999 -1.5299182430683042E-004 + 124.91999999999999 -1.5793402193697159E-004 + 124.97999999999999 -1.6298718964151472E-004 + 125.03999999999999 -1.6814785895794489E-004 + 125.09999999999999 -1.7341201803728958E-004 + 125.16000000000000 -1.7877509139853034E-004 + 125.22000000000000 -1.8423198110149999E-004 + 125.28000000000000 -1.8977702463265122E-004 + 125.34000000000000 -1.9540408097056905E-004 + 125.40000000000001 -2.0110649346652941E-004 + 125.45999999999998 -2.0687712735407485E-004 + 125.51999999999998 -2.1270835816479642E-004 + 125.57999999999998 -2.1859211957058307E-004 + 125.63999999999999 -2.2451993189376724E-004 + 125.69999999999999 -2.3048289009210289E-004 + 125.75999999999999 -2.3647169240814569E-004 + 125.81999999999999 -2.4247667984691126E-004 + 125.88000000000000 -2.4848780417344098E-004 + 125.94000000000000 -2.5449472071141581E-004 + 126.00000000000000 -2.6048671042430422E-004 + 126.06000000000000 -2.6645281688502862E-004 + 126.12000000000000 -2.7238174641937692E-004 + 126.18000000000001 -2.7826197205576549E-004 + 126.23999999999998 -2.8408176680208677E-004 + 126.29999999999998 -2.8982913553184542E-004 + 126.35999999999999 -2.9549198310212932E-004 + 126.41999999999999 -3.0105800210669908E-004 + 126.47999999999999 -3.0651480676601014E-004 + 126.53999999999999 -3.1184989013950497E-004 + 126.59999999999999 -3.1705073655789143E-004 + 126.66000000000000 -3.2210481200825375E-004 + 126.72000000000000 -3.2699960474552760E-004 + 126.78000000000000 -3.3172262144836256E-004 + 126.84000000000000 -3.3626146084296223E-004 + 126.90000000000001 -3.4060387187390215E-004 + 126.95999999999998 -3.4473775857535527E-004 + 127.01999999999998 -3.4865116100754920E-004 + 127.07999999999998 -3.5233238350584277E-004 + 127.13999999999999 -3.5576992710433208E-004 + 127.19999999999999 -3.5895258103039063E-004 + 127.25999999999999 -3.6186943927633017E-004 + 127.31999999999999 -3.6450988326903474E-004 + 127.38000000000000 -3.6686364323680045E-004 + 127.44000000000000 -3.6892084472635577E-004 + 127.50000000000000 -3.7067204134493302E-004 + 127.56000000000000 -3.7210818880259808E-004 + 127.62000000000000 -3.7322071875362493E-004 + 127.68000000000001 -3.7400156897579925E-004 + 127.73999999999998 -3.7444323406419865E-004 + 127.79999999999998 -3.7453872346109696E-004 + 127.85999999999999 -3.7428168068373671E-004 + 127.91999999999999 -3.7366632584656239E-004 + 127.97999999999999 -3.7268755704844482E-004 + 128.03999999999999 -3.7134095503419914E-004 + 128.09999999999999 -3.6962277556723398E-004 + 128.16000000000000 -3.6753000044206763E-004 + 128.22000000000000 -3.6506038656356458E-004 + 128.28000000000000 -3.6221242178895136E-004 + 128.34000000000000 -3.5898540310783127E-004 + 128.40000000000001 -3.5537938277785055E-004 + 128.45999999999998 -3.5139519126278231E-004 + 128.51999999999998 -3.4703447779517167E-004 + 128.57999999999998 -3.4229967938738880E-004 + 128.63999999999999 -3.3719411835999371E-004 + 128.69999999999999 -3.3172187502299372E-004 + 128.75999999999999 -3.2588785207297920E-004 + 128.81999999999999 -3.1969781149258648E-004 + 128.88000000000000 -3.1315831830861526E-004 + 128.94000000000000 -3.0627670561095239E-004 + 129.00000000000000 -2.9906121722873157E-004 + 129.06000000000000 -2.9152085347237321E-004 + 129.12000000000000 -2.8366544742653858E-004 + 129.18000000000001 -2.7550558813624505E-004 + 129.23999999999998 -2.6705270780566444E-004 + 129.29999999999998 -2.5831893228818941E-004 + 129.35999999999999 -2.4931718662578979E-004 + 129.41999999999999 -2.4006115841971411E-004 + 129.47999999999999 -2.3056518525036476E-004 + 129.53999999999999 -2.2084425898970486E-004 + 129.59999999999999 -2.1091408785520004E-004 + 129.66000000000000 -2.0079093856185094E-004 + 129.72000000000000 -1.9049166611665111E-004 + 129.78000000000000 -1.8003369373752865E-004 + 129.84000000000000 -1.6943491284194170E-004 + 129.90000000000001 -1.5871370446300762E-004 + 129.95999999999998 -1.4788884257532173E-004 + 130.01999999999998 -1.3697952140552972E-004 + 130.07999999999998 -1.2600526561896543E-004 + 130.13999999999999 -1.1498587967329983E-004 + 130.19999999999999 -1.0394144066226968E-004 + 130.25999999999999 -9.2892237048750723E-005 + 130.31999999999999 -8.1858699231370587E-005 + 130.38000000000000 -7.0861384478195319E-005 + 130.44000000000000 -5.9920918729885323E-005 + 130.50000000000000 -4.9057921868210513E-005 + 130.56000000000000 -3.8292977014378111E-005 + 130.62000000000000 -2.7646556065963629E-005 + 130.68000000000001 -1.7138984885652187E-005 + 130.73999999999998 -6.7903645492947847E-006 + 130.79999999999998 3.3794764029485847E-006 + 130.85999999999999 1.3351036266296754E-005 + 130.91999999999999 2.3105205898488766E-005 + 130.97999999999999 3.2623317834459885E-005 + 131.03999999999999 4.1887207442735109E-005 + 131.09999999999999 5.0879253593699539E-005 + 131.16000000000000 5.9582434138115316E-005 + 131.22000000000000 6.7980380549782627E-005 + 131.28000000000000 7.6057399659868765E-005 + 131.34000000000000 8.3798528382893577E-005 + 131.40000000000001 9.1189590631739857E-005 + 131.45999999999998 9.8217196062316324E-005 + 131.51999999999998 1.0486881484729944E-004 + 131.57999999999998 1.1113278355881248E-004 + 131.63999999999999 1.1699835643778722E-004 + 131.69999999999999 1.2245572261583248E-004 + 131.75999999999999 1.2749605057259494E-004 + 131.81999999999999 1.3211150639489132E-004 + 131.88000000000000 1.3629530551885062E-004 + 131.94000000000000 1.4004169544955098E-004 + 132.00000000000000 1.4334606026073882E-004 + 132.06000000000000 1.4620484623277774E-004 + 132.12000000000000 1.4861563757897114E-004 + 132.18000000000001 1.5057716536911528E-004 + 132.23999999999998 1.5208934132348494E-004 + 132.29999999999998 1.5315322782580868E-004 + 132.35999999999999 1.5377104311342616E-004 + 132.41999999999999 1.5394619811325024E-004 + 132.47999999999999 1.5368322768224209E-004 + 132.53999999999999 1.5298783504725467E-004 + 132.59999999999999 1.5186686393878167E-004 + 132.66000000000000 1.5032824405445682E-004 + 132.72000000000000 1.4838099672007086E-004 + 132.78000000000000 1.4603518368064809E-004 + 132.84000000000000 1.4330188899757261E-004 + 132.90000000000001 1.4019319882309283E-004 + 132.95999999999998 1.3672212212767151E-004 + 133.01999999999998 1.3290258692587174E-004 + 133.07999999999998 1.2874940387599783E-004 + 133.13999999999999 1.2427820001548247E-004 + 133.19999999999999 1.1950539552564402E-004 + 133.25999999999999 1.1444815563106268E-004 + 133.31999999999999 1.0912433243591713E-004 + 133.38000000000000 1.0355244750816217E-004 + 133.44000000000000 9.7751610697478515E-005 + 133.50000000000000 9.1741491882390926E-005 + 133.56000000000000 8.5542245756499015E-005 + 133.62000000000000 7.9174492716634729E-005 + 133.68000000000001 7.2659219016759966E-005 + 133.73999999999998 6.6017744549099608E-005 + 133.79999999999998 5.9271644453312867E-005 + 133.85999999999999 5.2442700306876728E-005 + 133.91999999999999 4.5552821294253763E-005 + 133.97999999999999 3.8623983458233998E-005 + 134.03999999999999 3.1678165921350190E-005 + 134.09999999999999 2.4737289033347556E-005 + 134.16000000000000 1.7823139131911113E-005 + 134.22000000000000 1.0957313397470761E-005 + 134.28000000000000 4.1611556219894733E-006 + 134.34000000000000 -2.5443055878881720E-006 + 134.40000000000001 -9.1384155279755682E-006 + 134.45999999999998 -1.5600947931215225E-005 + 134.51999999999998 -2.1912157990332913E-005 + 134.57999999999998 -2.8052841921846369E-005 + 134.63999999999999 -3.4004381676232098E-005 + 134.69999999999999 -3.9748799205997266E-005 + 134.75999999999999 -4.5268801892276879E-005 + 134.81999999999999 -5.0547820455462760E-005 + 134.88000000000000 -5.5570071309812023E-005 + 134.94000000000000 -6.0320594716918810E-005 + 135.00000000000000 -6.4785276762580556E-005 + 135.06000000000000 -6.8950918883099217E-005 + 135.12000000000000 -7.2805237152440974E-005 + 135.18000000000001 -7.6336938203758737E-005 + 135.23999999999998 -7.9535712450368480E-005 + 135.29999999999998 -8.2392279462265890E-005 + 135.35999999999999 -8.4898417851743873E-005 + 135.41999999999999 -8.7046959267321765E-005 + 135.47999999999999 -8.8831834769155198E-005 + 135.53999999999999 -9.0248073164684984E-005 + 135.59999999999999 -9.1291804341831154E-005 + 135.66000000000000 -9.1960263541961387E-005 + 135.72000000000000 -9.2251819478181976E-005 + 135.78000000000000 -9.2165946657440286E-005 + 135.84000000000000 -9.1703237028258226E-005 + 135.90000000000001 -9.0865378074569541E-005 + 135.95999999999998 -8.9655164831938688E-005 + 136.01999999999998 -8.8076477564433679E-005 + 136.07999999999998 -8.6134278994232555E-005 + 136.13999999999999 -8.3834580426310717E-005 + 136.19999999999999 -8.1184457592952137E-005 + 136.25999999999999 -7.8191988458830084E-005 + 136.31999999999999 -7.4866268016397905E-005 + 136.38000000000000 -7.1217349564262932E-005 + 136.44000000000000 -6.7256236431129985E-005 + 136.50000000000000 -6.2994833923311943E-005 + 136.56000000000000 -5.8445920841934470E-005 + 136.62000000000000 -5.3623104099459011E-005 + 136.68000000000001 -4.8540763928631195E-005 + 136.73999999999998 -4.3214019954469612E-005 + 136.79999999999998 -3.7658669582258594E-005 + 136.85999999999999 -3.1891134074056589E-005 + 136.91999999999999 -2.5928399801225973E-005 + 136.97999999999999 -1.9787967909219417E-005 + 137.03999999999999 -1.3487786209116559E-005 + 137.09999999999999 -7.0461966816255386E-006 + 137.16000000000000 -4.8187033436661339E-007 + 137.22000000000000 6.1862485420900949E-006 + 137.28000000000000 1.2938998751144300E-005 + 137.34000000000000 1.9757063120528451E-005 + 137.40000000000001 2.6621029721877437E-005 + 137.45999999999998 3.3511434712335964E-005 + 137.51999999999998 4.0408842625956623E-005 + 137.57999999999998 4.7293862284985083E-005 + 137.63999999999999 5.4147247617032403E-005 + 137.69999999999999 6.0949939846382037E-005 + 137.75999999999999 6.7683113749949071E-005 + 137.81999999999999 7.4328231601795424E-005 + 137.88000000000000 8.0867131547001492E-005 + 137.94000000000000 8.7282069330995516E-005 + 138.00000000000000 9.3555765478823389E-005 + 138.06000000000000 9.9671472074195207E-005 + 138.12000000000000 1.0561307577110205E-004 + 138.18000000000001 1.1136507961170196E-004 + 138.23999999999998 1.1691270334618050E-004 + 138.29999999999998 1.2224192941990742E-004 + 138.35999999999999 1.2733954796029969E-004 + 138.41999999999999 1.3219321258009609E-004 + 138.47999999999999 1.3679146178223879E-004 + 138.53999999999999 1.4112379350600130E-004 + 138.59999999999999 1.4518062968804594E-004 + 138.66000000000000 1.4895342834814364E-004 + 138.72000000000000 1.5243462893757477E-004 + 138.78000000000000 1.5561773717167026E-004 + 138.84000000000000 1.5849727715587327E-004 + 138.90000000000001 1.6106889257106754E-004 + 138.95999999999998 1.6332925311949171E-004 + 139.01999999999998 1.6527612960184502E-004 + 139.07999999999998 1.6690837478073204E-004 + 139.13999999999999 1.6822593693427713E-004 + 139.19999999999999 1.6922985269978815E-004 + 139.25999999999999 1.6992221346478147E-004 + 139.31999999999999 1.7030623818862451E-004 + 139.38000000000000 1.7038616681348121E-004 + 139.44000000000000 1.7016730644237000E-004 + 139.50000000000000 1.6965600910372099E-004 + 139.56000000000000 1.6885961074422068E-004 + 139.62000000000000 1.6778649158683185E-004 + 139.68000000000001 1.6644596736176254E-004 + 139.73999999999998 1.6484825800815254E-004 + 139.79999999999998 1.6300450243121462E-004 + 139.85999999999999 1.6092667263521666E-004 + 139.91999999999999 1.5862755542370662E-004 + 139.97999999999999 1.5612068251609680E-004 + 140.03999999999999 1.5342027253770205E-004 + 140.09999999999999 1.5054120651819544E-004 + 140.16000000000000 1.4749896109062484E-004 + 140.22000000000000 1.4430954366967502E-004 + 140.28000000000000 1.4098943096456259E-004 + 140.34000000000000 1.3755550626157149E-004 + 140.40000000000001 1.3402502637616795E-004 + 140.45999999999998 1.3041555333052530E-004 + 140.51999999999998 1.2674487913066682E-004 + 140.57999999999998 1.2303099697371142E-004 + 140.63999999999999 1.1929198955884966E-004 + 140.69999999999999 1.1554604031407609E-004 + 140.75999999999999 1.1181131020362619E-004 + 140.81999999999999 1.0810594943841096E-004 + 140.88000000000000 1.0444794315429713E-004 + 140.94000000000000 1.0085515811904914E-004 + 141.00000000000000 9.7345191581320914E-005 + 141.06000000000000 9.3935373665511742E-005 + 141.12000000000000 9.0642680951948641E-005 + 141.18000000000001 8.7483687828305152E-005 + 141.23999999999998 8.4474510181020238E-005 + 141.29999999999998 8.1630770265650595E-005 + 141.35999999999999 7.8967510246747474E-005 + 141.41999999999999 7.6499178443545449E-005 + 141.47999999999999 7.4239574763774083E-005 + 141.53999999999999 7.2201797840185000E-005 + 141.59999999999999 7.0398229234185954E-005 + 141.66000000000000 6.8840493643547017E-005 + 141.72000000000000 6.7539426859350809E-005 + 141.78000000000000 6.6505067700830918E-005 + 141.84000000000000 6.5746602400810187E-005 + 141.90000000000001 6.5272387887503741E-005 + 141.95999999999998 6.5089908444843872E-005 + 142.01999999999998 6.5205779458463279E-005 + 142.07999999999998 6.5625723914711334E-005 + 142.13999999999999 6.6354577558864404E-005 + 142.19999999999999 6.7396284254435138E-005 + 142.25999999999999 6.8753883617711021E-005 + 142.31999999999999 7.0429523819353981E-005 + 142.38000000000000 7.2424458727644720E-005 + 142.44000000000000 7.4739048317401353E-005 + 142.50000000000000 7.7372784556543176E-005 + 142.56000000000000 8.0324310164900937E-005 + 142.62000000000000 8.3591389962133053E-005 + 142.68000000000001 8.7170993925437973E-005 + 142.73999999999998 9.1059264173311993E-005 + 142.79999999999998 9.5251584832380847E-005 + 142.85999999999999 9.9742585566317706E-005 + 142.91999999999999 1.0452619861939874E-004 + 142.97999999999999 1.0959566389168643E-004 + 143.03999999999999 1.1494360040368055E-004 + 143.09999999999999 1.2056201133243131E-004 + 143.16000000000000 1.2644235606177766E-004 + 143.22000000000000 1.3257558068562216E-004 + 143.28000000000000 1.3895213755503710E-004 + 143.34000000000000 1.4556205685429665E-004 + 143.40000000000001 1.5239499225485104E-004 + 143.45999999999998 1.5944020862193305E-004 + 143.51999999999998 1.6668670116628281E-004 + 143.57999999999998 1.7412317274389125E-004 + 143.63999999999999 1.8173809601732742E-004 + 143.69999999999999 1.8951976203370645E-004 + 143.75999999999999 1.9745630900544543E-004 + 143.81999999999999 2.0553574775856857E-004 + 143.88000000000000 2.1374604265161673E-004 + 143.94000000000000 2.2207512094424745E-004 + 144.00000000000000 2.3051092674562936E-004 + 144.06000000000000 2.3904145494499626E-004 + 144.12000000000000 2.4765478293995824E-004 + 144.18000000000001 2.5633913580495350E-004 + 144.23999999999998 2.6508289391944680E-004 + 144.29999999999998 2.7387466016724966E-004 + 144.35999999999999 2.8270327295505112E-004 + 144.41999999999999 2.9155787513207115E-004 + 144.47999999999999 3.0042785106471558E-004 + 144.53999999999999 3.0930300531046043E-004 + 144.59999999999999 3.1817347265700841E-004 + 144.66000000000000 3.2702973839090268E-004 + 144.72000000000000 3.3586267974522092E-004 + 144.78000000000000 3.4466364503480301E-004 + 144.84000000000000 3.5342441956507444E-004 + 144.90000000000001 3.6213719734683354E-004 + 144.95999999999998 3.7079461218119183E-004 + 145.01999999999998 3.7938983140082904E-004 + 145.07999999999998 3.8791642419776451E-004 + 145.13999999999999 3.9636848548652823E-004 + 145.19999999999999 4.0474060099233116E-004 + 145.25999999999999 4.1302780571743017E-004 + 145.31999999999999 4.2122567210241474E-004 + 145.38000000000000 4.2933025961693912E-004 + 145.44000000000000 4.3733810220579814E-004 + 145.50000000000000 4.4524624225399442E-004 + 145.56000000000000 4.5305225920674918E-004 + 145.62000000000000 4.6075410893922522E-004 + 145.68000000000001 4.6835026058084870E-004 + 145.73999999999998 4.7583971784752126E-004 + 145.79999999999998 4.8322182836287703E-004 + 145.85999999999999 4.9049642158299897E-004 + 145.91999999999999 4.9766368942723348E-004 + 145.97999999999999 5.0472424638285185E-004 + 146.03999999999999 5.1167904598632718E-004 + 146.09999999999999 5.1852931281081533E-004 + 146.16000000000000 5.2527659662047869E-004 + 146.22000000000000 5.3192276017644425E-004 + 146.28000000000000 5.3846989309180838E-004 + 146.34000000000000 5.4492035634617041E-004 + 146.40000000000001 5.5127663375593354E-004 + 146.45999999999998 5.5754139278055574E-004 + 146.51999999999998 5.6371746476533671E-004 + 146.57999999999998 5.6980781527780455E-004 + 146.63999999999999 5.7581548534718077E-004 + 146.69999999999999 5.8174364417192133E-004 + 146.75999999999999 5.8759547784861094E-004 + 146.81999999999999 5.9337419645266439E-004 + 146.88000000000000 5.9908314694075745E-004 + 146.94000000000000 6.0472549454123551E-004 + 147.00000000000000 6.1030458093328421E-004 + 147.06000000000000 6.1582349372699466E-004 + 147.12000000000000 6.2128527608386699E-004 + 147.18000000000001 6.2669299318458892E-004 + 147.23999999999998 6.3204939003185879E-004 + 147.29999999999998 6.3735714597145776E-004 + 147.35999999999999 6.4261863567699159E-004 + 147.41999999999999 6.4783617356252193E-004 + 147.47999999999999 6.5301171154295368E-004 + 147.53999999999999 6.5814691428084675E-004 + 147.59999999999999 6.6324323030142191E-004 + 147.66000000000000 6.6830165426204086E-004 + 147.72000000000000 6.7332299094559811E-004 + 147.78000000000000 6.7830764258962524E-004 + 147.84000000000000 6.8325562743059773E-004 + 147.90000000000001 6.8816664024258848E-004 + 147.95999999999998 6.9303998405105245E-004 + 148.01999999999998 6.9787447178677265E-004 + 148.07999999999998 7.0266871523336617E-004 + 148.13999999999999 7.0742078808068529E-004 + 148.19999999999999 7.1212833743958509E-004 + 148.25999999999999 7.1678875153827583E-004 + 148.31999999999999 7.2139891577321241E-004 + 148.38000000000000 7.2595525278754223E-004 + 148.44000000000000 7.3045388822063630E-004 + 148.50000000000000 7.3489044245362764E-004 + 148.56000000000000 7.3926010739899708E-004 + 148.62000000000000 7.4355762601036046E-004 + 148.68000000000001 7.4777741755538744E-004 + 148.73999999999998 7.5191338876977364E-004 + 148.79999999999998 7.5595907319360423E-004 + 148.85999999999999 7.5990757368338149E-004 + 148.91999999999999 7.6375151422263411E-004 + 148.97999999999999 7.6748324312229715E-004 + 149.03999999999999 7.7109470625799257E-004 + 149.09999999999999 7.7457739815992184E-004 + 149.16000000000000 7.7792255912645044E-004 + 149.22000000000000 7.8112100537053536E-004 + 149.28000000000000 7.8416325009687577E-004 + 149.34000000000000 7.8703951028174634E-004 + 149.40000000000001 7.8973979326361562E-004 + 149.45999999999998 7.9225377094910439E-004 + 149.51999999999998 7.9457096703152504E-004 + 149.57999999999998 7.9668054133885452E-004 + 149.63999999999999 7.9857152738502387E-004 + 149.69999999999999 8.0023279869360583E-004 + 149.75999999999999 8.0165300651994142E-004 + 149.81999999999999 8.0282068893183789E-004 + 149.88000000000000 8.0372427797623807E-004 + 149.94000000000000 8.0435206984979233E-004 + 150.00000000000000 8.0469229990811719E-004 + 150.06000000000000 8.0473313117189547E-004 + 150.12000000000000 8.0446277099047072E-004 + 150.18000000000001 8.0386929353828051E-004 + 150.23999999999998 8.0294089838297059E-004 + 150.29999999999998 8.0166572898608809E-004 + 150.35999999999999 8.0003212255056768E-004 + 150.41999999999999 7.9802844265214952E-004 + 150.47999999999999 7.9564324474332409E-004 + 150.53999999999999 7.9286519372878488E-004 + 150.59999999999999 7.8968307356511657E-004 + 150.66000000000000 7.8608600739336746E-004 + 150.72000000000000 7.8206327564507040E-004 + 150.78000000000000 7.7760448488924442E-004 + 150.84000000000000 7.7269943753030155E-004 + 150.90000000000001 7.6733829676074662E-004 + 150.95999999999998 7.6151161669547668E-004 + 151.01999999999998 7.5521026898188806E-004 + 151.07999999999998 7.4842552704758444E-004 + 151.13999999999999 7.4114910468460525E-004 + 151.19999999999999 7.3337316448552009E-004 + 151.25999999999999 7.2509027247521954E-004 + 151.31999999999999 7.1629357800060529E-004 + 151.38000000000000 7.0697678597810552E-004 + 151.44000000000000 6.9713410010420810E-004 + 151.50000000000000 6.8676037455049502E-004 + 151.56000000000000 6.7585110069926999E-004 + 151.62000000000000 6.6440240765101985E-004 + 151.68000000000001 6.5241109061280273E-004 + 151.73999999999998 6.3987460390424933E-004 + 151.79999999999998 6.2679116832479943E-004 + 151.85999999999999 6.1315980395597119E-004 + 151.91999999999999 5.9898018213573720E-004 + 151.97999999999999 5.8425279953850512E-004 + 152.03999999999999 5.6897897478498888E-004 + 152.09999999999999 5.5316079346071187E-004 + 152.16000000000000 5.3680111286989393E-004 + 152.22000000000000 5.1990360689235186E-004 + 152.28000000000000 5.0247290613441371E-004 + 152.34000000000000 4.8451434539777333E-004 + 152.40000000000001 4.6603413798988698E-004 + 152.45999999999998 4.4703942205854858E-004 + 152.51999999999998 4.2753819247178226E-004 + 152.57999999999998 4.0753929264004821E-004 + 152.63999999999999 3.8705249084756911E-004 + 152.69999999999999 3.6608848527089311E-004 + 152.75999999999999 3.4465880840576856E-004 + 152.81999999999999 3.2277598824999239E-004 + 152.88000000000000 3.0045340307053138E-004 + 152.94000000000000 2.7770542764720443E-004 + 153.00000000000000 2.5454732516208691E-004 + 153.06000000000000 2.3099526684344091E-004 + 153.12000000000000 2.0706633332254372E-004 + 153.17999999999998 1.8277850287070924E-004 + 153.23999999999998 1.5815065655661552E-004 + 153.29999999999998 1.3320249672675206E-004 + 153.35999999999999 1.0795458595731617E-004 + 153.41999999999999 8.2428328763490611E-005 + 153.47999999999999 5.6645889139933118E-005 + 153.53999999999999 3.0630220508507765E-005 + 153.59999999999999 4.4050019323923109E-006 + 153.66000000000000 -2.2005364282858134E-005 + 153.72000000000000 -4.8575792582945863E-005 + 153.78000000000000 -7.5280537210386999E-005 + 153.84000000000000 -1.0209324944500225E-004 + 153.90000000000001 -1.2898694074892954E-004 + 153.95999999999998 -1.5593408097643797E-004 + 154.01999999999998 -1.8290658002321933E-004 + 154.07999999999998 -2.0987583075313227E-004 + 154.13999999999999 -2.3681278066307827E-004 + 154.19999999999999 -2.6368788866449450E-004 + 154.25999999999999 -2.9047124424929396E-004 + 154.31999999999999 -3.1713255302824220E-004 + 154.38000000000000 -3.4364121635538153E-004 + 154.44000000000000 -3.6996633166693795E-004 + 154.50000000000000 -3.9607672381789682E-004 + 154.56000000000000 -4.2194108384661027E-004 + 154.62000000000000 -4.4752796615783177E-004 + 154.67999999999998 -4.7280583656431996E-004 + 154.73999999999998 -4.9774305538060042E-004 + 154.79999999999998 -5.2230807237832672E-004 + 154.85999999999999 -5.4646945168088437E-004 + 154.91999999999999 -5.7019580114003681E-004 + 154.97999999999999 -5.9345589613092186E-004 + 155.03999999999999 -6.1621887645455572E-004 + 155.09999999999999 -6.3845400996472685E-004 + 155.16000000000000 -6.6013104142562649E-004 + 155.22000000000000 -6.8122003043420525E-004 + 155.28000000000000 -7.0169149149900962E-004 + 155.34000000000000 -7.2151640547718954E-004 + 155.40000000000001 -7.4066630765825744E-004 + 155.45999999999998 -7.5911329306416490E-004 + 155.51999999999998 -7.7683013699794137E-004 + 155.57999999999998 -7.9379032457155155E-004 + 155.63999999999999 -8.0996796823021571E-004 + 155.69999999999999 -8.2533809980275884E-004 + 155.75999999999999 -8.3987647873356487E-004 + 155.81999999999999 -8.5355984597444852E-004 + 155.88000000000000 -8.6636571598319235E-004 + 155.94000000000000 -8.7827278281149589E-004 + 156.00000000000000 -8.8926062096170394E-004 + 156.06000000000000 -8.9930994994025346E-004 + 156.12000000000000 -9.0840253810596852E-004 + 156.17999999999998 -9.1652135939558036E-004 + 156.23999999999998 -9.2365059368464326E-004 + 156.29999999999998 -9.2977554236751785E-004 + 156.35999999999999 -9.3488293965785158E-004 + 156.41999999999999 -9.3896069977953940E-004 + 156.47999999999999 -9.4199817279303529E-004 + 156.53999999999999 -9.4398601668250700E-004 + 156.59999999999999 -9.4491625209793310E-004 + 156.66000000000000 -9.4478245693526081E-004 + 156.72000000000000 -9.4357960455855789E-004 + 156.78000000000000 -9.4130404156468768E-004 + 156.84000000000000 -9.3795369054008339E-004 + 156.90000000000001 -9.3352801091591041E-004 + 156.95999999999998 -9.2802795832591732E-004 + 157.01999999999998 -9.2145593664459983E-004 + 157.07999999999998 -9.1381613757250517E-004 + 157.13999999999999 -9.0511412756633829E-004 + 157.19999999999999 -8.9535700211645073E-004 + 157.25999999999999 -8.8455343199569621E-004 + 157.31999999999999 -8.7271371148050006E-004 + 157.38000000000000 -8.5984967419478278E-004 + 157.44000000000000 -8.4597455465614143E-004 + 157.50000000000000 -8.3110316262749125E-004 + 157.56000000000000 -8.1525185511244051E-004 + 157.62000000000000 -7.9843843921232824E-004 + 157.67999999999998 -7.8068210600823907E-004 + 157.73999999999998 -7.6200339796139293E-004 + 157.79999999999998 -7.4242436899686019E-004 + 157.85999999999999 -7.2196822874223828E-004 + 157.91999999999999 -7.0065968411967558E-004 + 157.97999999999999 -6.7852456951099436E-004 + 158.03999999999999 -6.5559007526373020E-004 + 158.09999999999999 -6.3188445096486819E-004 + 158.16000000000000 -6.0743708219787519E-004 + 158.22000000000000 -5.8227852440243780E-004 + 158.28000000000000 -5.5644034878143435E-004 + 158.34000000000000 -5.2995502059698845E-004 + 158.40000000000001 -5.0285593127156591E-004 + 158.45999999999998 -4.7517741167733385E-004 + 158.51999999999998 -4.4695450070846818E-004 + 158.57999999999998 -4.1822297787793807E-004 + 158.63999999999999 -3.8901936617005933E-004 + 158.69999999999999 -3.5938063256753515E-004 + 158.75999999999999 -3.2934430284679167E-004 + 158.81999999999999 -2.9894827675649668E-004 + 158.88000000000000 -2.6823082441806008E-004 + 158.94000000000000 -2.3723049462398124E-004 + 159.00000000000000 -2.0598593038623420E-004 + 159.06000000000000 -1.7453592451920801E-004 + 159.12000000000000 -1.4291930243439307E-004 + 159.17999999999998 -1.1117476183882105E-004 + 159.23999999999998 -7.9340893279825295E-005 + 159.29999999999998 -4.7456052804077111E-005 + 159.35999999999999 -1.5558314243417914E-005 + 159.41999999999999 1.6314623631779071E-005 + 159.47999999999999 4.8125504371563385E-005 + 159.53999999999999 7.9837560744326082E-005 + 159.59999999999999 1.1141459949237865E-004 + 159.66000000000000 1.4282107472276292E-004 + 159.72000000000000 1.7402213543957126E-004 + 159.78000000000000 2.0498367718170684E-004 + 159.84000000000000 2.3567241762895616E-004 + 159.90000000000001 2.6605601756840444E-004 + 159.95999999999998 2.9610295888742564E-004 + 160.01999999999998 3.2578281667121383E-004 + 160.07999999999998 3.5506613836584522E-004 + 160.13999999999999 3.8392461399206835E-004 + 160.19999999999999 4.1233102243016709E-004 + 160.25999999999999 4.4025933493231076E-004 + 160.31999999999999 4.6768469973002366E-004 + 160.38000000000000 4.9458352781748421E-004 + 160.44000000000000 5.2093346655774188E-004 + 160.50000000000000 5.4671345164518609E-004 + 160.56000000000000 5.7190371842083510E-004 + 160.62000000000000 5.9648584691858876E-004 + 160.67999999999998 6.2044261816833588E-004 + 160.73999999999998 6.4375822100484000E-004 + 160.79999999999998 6.6641810662595188E-004 + 160.85999999999999 6.8840903692671718E-004 + 160.91999999999999 7.0971900645791139E-004 + 160.97999999999999 7.3033727790212640E-004 + 161.03999999999999 7.5025444556008590E-004 + 161.09999999999999 7.6946229476212644E-004 + 161.16000000000000 7.8795382702903107E-004 + 161.22000000000000 8.0572324271147814E-004 + 161.28000000000000 8.2276577406630187E-004 + 161.34000000000000 8.3907798301814229E-004 + 161.40000000000001 8.5465736390401888E-004 + 161.45999999999998 8.6950258116048787E-004 + 161.51999999999998 8.8361317669250850E-004 + 161.57999999999998 8.9698981379398722E-004 + 161.63999999999999 9.0963403889114734E-004 + 161.69999999999999 9.2154829249239934E-004 + 161.75999999999999 9.3273587823101967E-004 + 161.81999999999999 9.4320086422078266E-004 + 161.88000000000000 9.5294806967226157E-004 + 161.94000000000000 9.6198299500419005E-004 + 162.00000000000000 9.7031176877592103E-004 + 162.06000000000000 9.7794117608381113E-004 + 162.12000000000000 9.8487849523290461E-004 + 162.17999999999998 9.9113142277955954E-004 + 162.23999999999998 9.9670821208851018E-004 + 162.29999999999998 1.0016174791926021E-003 + 162.35999999999999 1.0058680259937729E-003 + 162.41999999999999 1.0094691951444109E-003 + 162.47999999999999 1.0124304730282003E-003 + 162.53999999999999 1.0147615777371906E-003 + 162.59999999999999 1.0164722650124886E-003 + 162.66000000000000 1.0175725485449736E-003 + 162.72000000000000 1.0180724740481253E-003 + 162.78000000000000 1.0179824247389989E-003 + 162.84000000000000 1.0173125366619202E-003 + 162.90000000000001 1.0160731599360097E-003 + 162.95999999999998 1.0142743162786351E-003 + 163.01999999999998 1.0119264587891824E-003 + 163.07999999999998 1.0090396693355117E-003 + 163.13999999999999 1.0056239895148106E-003 + 163.19999999999999 1.0016893829162643E-003 + 163.25999999999999 9.9724575440009698E-004 + 163.31999999999999 9.9230279594973866E-004 + 163.38000000000000 9.8687023280754206E-004 + 163.44000000000000 9.8095748512178147E-004 + 163.50000000000000 9.7457380516353075E-004 + 163.56000000000000 9.6772833706665795E-004 + 163.62000000000000 9.6043002030442965E-004 + 163.67999999999998 9.5268774391606592E-004 + 163.73999999999998 9.4451017559368800E-004 + 163.79999999999998 9.3590584957719050E-004 + 163.85999999999999 9.2688308475974554E-004 + 163.91999999999999 9.1745023326404371E-004 + 163.97999999999999 9.0761534413682122E-004 + 164.03999999999999 8.9738647507667734E-004 + 164.09999999999999 8.8677151499317371E-004 + 164.16000000000000 8.7577833730028245E-004 + 164.22000000000000 8.6441475455574545E-004 + 164.28000000000000 8.5268841124403947E-004 + 164.34000000000000 8.4060705389489402E-004 + 164.40000000000001 8.2817838648832881E-004 + 164.45999999999998 8.1541004278807172E-004 + 164.51999999999998 8.0230974691900025E-004 + 164.57999999999998 7.8888515923322808E-004 + 164.63999999999999 7.7514417223167127E-004 + 164.69999999999999 7.6109458545835565E-004 + 164.75999999999999 7.4674441050573740E-004 + 164.81999999999999 7.3210165223593819E-004 + 164.88000000000000 7.1717459651073827E-004 + 164.94000000000000 7.0197152028328999E-004 + 165.00000000000000 6.8650090350295978E-004 + 165.06000000000000 6.7077145392956605E-004 + 165.12000000000000 6.5479199038917491E-004 + 165.17999999999998 6.3857157715515418E-004 + 165.23999999999998 6.2211947401184017E-004 + 165.29999999999998 6.0544510954967763E-004 + 165.35999999999999 5.8855822935991711E-004 + 165.41999999999999 5.7146865300391483E-004 + 165.47999999999999 5.5418644154434430E-004 + 165.53999999999999 5.3672200732251955E-004 + 165.59999999999999 5.1908582530934904E-004 + 165.66000000000000 5.0128864089927572E-004 + 165.72000000000000 4.8334142706099039E-004 + 165.78000000000000 4.6525533788481098E-004 + 165.84000000000000 4.4704169789092264E-004 + 165.90000000000001 4.2871208530169603E-004 + 165.95999999999998 4.1027821439457997E-004 + 166.01999999999998 3.9175196440615386E-004 + 166.07999999999998 3.7314542543308434E-004 + 166.13999999999999 3.5447081956745553E-004 + 166.19999999999999 3.3574052053004507E-004 + 166.25999999999999 3.1696702137367516E-004 + 166.31999999999999 2.9816296974004877E-004 + 166.38000000000000 2.7934113138325086E-004 + 166.44000000000000 2.6051430857163709E-004 + 166.50000000000000 2.4169539424891313E-004 + 166.56000000000000 2.2289734275851206E-004 + 166.62000000000000 2.0413309934521313E-004 + 166.67999999999998 1.8541565223806317E-004 + 166.73999999999998 1.6675790817581704E-004 + 166.79999999999998 1.4817275718915360E-004 + 166.85999999999999 1.2967301136342739E-004 + 166.91999999999999 1.1127136784311237E-004 + 166.97999999999999 9.2980412774192072E-005 + 167.03999999999999 7.4812576859061862E-005 + 167.09999999999999 5.6780087112449207E-005 + 167.16000000000000 3.8895029627305891E-005 + 167.22000000000000 2.1169254334597355E-005 + 167.28000000000000 3.6143884107183133E-006 + 167.34000000000000 -1.3758177793018758E-005 + 167.40000000000001 -3.0937304719452882E-005 + 167.45999999999998 -4.7912120329995261E-005 + 167.51999999999998 -6.4672032048314855E-005 + 167.57999999999998 -8.1206732583367173E-005 + 167.63999999999999 -9.7506222055599383E-005 + 167.69999999999999 -1.1356079330421007E-004 + 167.75999999999999 -1.2936107731920145E-004 + 167.81999999999999 -1.4489801105362950E-004 + 167.88000000000000 -1.6016288970039494E-004 + 167.94000000000000 -1.7514736182228316E-004 + 168.00000000000000 -1.8984339853522257E-004 + 168.06000000000000 -2.0424339171505617E-004 + 168.12000000000000 -2.1834008897396229E-004 + 168.17999999999998 -2.3212663328856504E-004 + 168.23999999999998 -2.4559653954012048E-004 + 168.29999999999998 -2.5874373402820185E-004 + 168.35999999999999 -2.7156258789857974E-004 + 168.41999999999999 -2.8404777314801143E-004 + 168.47999999999999 -2.9619444694496043E-004 + 168.53999999999999 -3.0799817097135581E-004 + 168.59999999999999 -3.1945485129947313E-004 + 168.66000000000000 -3.3056082937192073E-004 + 168.72000000000000 -3.4131285373606131E-004 + 168.78000000000000 -3.5170794381650443E-004 + 168.84000000000000 -3.6174362729323058E-004 + 168.90000000000001 -3.7141765394131811E-004 + 168.95999999999998 -3.8072821403598961E-004 + 169.01999999999998 -3.8967382840071819E-004 + 169.07999999999998 -3.9825330817649609E-004 + 169.13999999999999 -4.0646580973003737E-004 + 169.19999999999999 -4.1431078586255644E-004 + 169.25999999999999 -4.2178804524878988E-004 + 169.31999999999999 -4.2889758595235887E-004 + 169.38000000000000 -4.3563974224117090E-004 + 169.44000000000000 -4.4201515911615973E-004 + 169.50000000000000 -4.4802474000655467E-004 + 169.56000000000000 -4.5366958840508412E-004 + 169.62000000000000 -4.5895108952420590E-004 + 169.67999999999998 -4.6387087421404709E-004 + 169.73999999999998 -4.6843083687823125E-004 + 169.79999999999998 -4.7263306405669942E-004 + 169.85999999999999 -4.7647990230189474E-004 + 169.91999999999999 -4.7997378915451736E-004 + 169.97999999999999 -4.8311754743395952E-004 + 170.03999999999999 -4.8591399367343887E-004 + 170.09999999999999 -4.8836625463133951E-004 + 170.16000000000000 -4.9047766912978371E-004 + 170.22000000000000 -4.9225166495948534E-004 + 170.28000000000000 -4.9369189769646175E-004 + 170.34000000000000 -4.9480222271643093E-004 + 170.40000000000001 -4.9558655813654469E-004 + 170.45999999999998 -4.9604902901773551E-004 + 170.51999999999998 -4.9619391344522140E-004 + 170.57999999999998 -4.9602572624104612E-004 + 170.63999999999999 -4.9554907649424678E-004 + 170.69999999999999 -4.9476864245603556E-004 + 170.75999999999999 -4.9368941637611572E-004 + 170.81999999999999 -4.9231634934791965E-004 + 170.88000000000000 -4.9065470743432237E-004 + 170.94000000000000 -4.8870982645774744E-004 + 171.00000000000000 -4.8648718588559806E-004 + 171.06000000000000 -4.8399237191792006E-004 + 171.12000000000000 -4.8123121116402164E-004 + 171.17999999999998 -4.7820953852056419E-004 + 171.23999999999998 -4.7493342247616058E-004 + 171.29999999999998 -4.7140905179445235E-004 + 171.35999999999999 -4.6764275929976309E-004 + 171.41999999999999 -4.6364098598462020E-004 + 171.47999999999999 -4.5941037383501323E-004 + 171.53999999999999 -4.5495764968311587E-004 + 171.59999999999999 -4.5028973299351895E-004 + 171.66000000000000 -4.4541367561033946E-004 + 171.72000000000000 -4.4033672592111336E-004 + 171.78000000000000 -4.3506621989888904E-004 + 171.84000000000000 -4.2960969818457457E-004 + 171.90000000000001 -4.2397479388636759E-004 + 171.95999999999998 -4.1816928937002244E-004 + 172.01999999999998 -4.1220116889433548E-004 + 172.07999999999998 -4.0607850134198424E-004 + 172.13999999999999 -3.9980944888986717E-004 + 172.19999999999999 -3.9340233364555330E-004 + 172.25999999999999 -3.8686554065483076E-004 + 172.31999999999999 -3.8020758947223180E-004 + 172.38000000000000 -3.7343706028999599E-004 + 172.44000000000000 -3.6656258392720820E-004 + 172.50000000000000 -3.5959291563871312E-004 + 172.56000000000000 -3.5253674747131691E-004 + 172.62000000000000 -3.4540290440427009E-004 + 172.67999999999998 -3.3820019775400445E-004 + 172.73999999999998 -3.3093746748641222E-004 + 172.79999999999998 -3.2362356573882773E-004 + 172.85999999999999 -3.1626731463043489E-004 + 172.91999999999999 -3.0887753500824012E-004 + 172.97999999999999 -3.0146304260046344E-004 + 173.03999999999999 -2.9403254683863373E-004 + 173.09999999999999 -2.8659478984226265E-004 + 173.16000000000000 -2.7915842993254844E-004 + 173.22000000000000 -2.7173202299676986E-004 + 173.28000000000000 -2.6432404863406756E-004 + 173.34000000000000 -2.5694288658332522E-004 + 173.40000000000001 -2.4959678918065842E-004 + 173.45999999999998 -2.4229386465631151E-004 + 173.51999999999998 -2.3504207240854826E-004 + 173.57999999999998 -2.2784920305709693E-004 + 173.63999999999999 -2.2072285883926218E-004 + 173.69999999999999 -2.1367044996525945E-004 + 173.75999999999999 -2.0669916458688245E-004 + 173.81999999999999 -1.9981595783559607E-004 + 173.88000000000000 -1.9302756996832009E-004 + 173.94000000000000 -1.8634049025454893E-004 + 174.00000000000000 -1.7976093947467763E-004 + 174.06000000000000 -1.7329489022676237E-004 + 174.12000000000000 -1.6694803014547177E-004 + 174.17999999999998 -1.6072579614468700E-004 + 174.23999999999998 -1.5463333879086526E-004 + 174.29999999999998 -1.4867552053775152E-004 + 174.35999999999999 -1.4285692035862857E-004 + 174.41999999999999 -1.3718181563982139E-004 + 174.47999999999999 -1.3165421043648105E-004 + 174.53999999999999 -1.2627777490228546E-004 + 174.59999999999999 -1.2105591095249558E-004 + 174.66000000000000 -1.1599170246638355E-004 + 174.72000000000000 -1.1108791128665091E-004 + 174.78000000000000 -1.0634699937781397E-004 + 174.84000000000000 -1.0177111593484259E-004 + 174.90000000000001 -9.7362100254001478E-005 + 174.95999999999998 -9.3121475201690814E-005 + 175.01999999999998 -8.9050467130214253E-005 + 175.07999999999998 -8.5149987047792886E-005 + 175.13999999999999 -8.1420647231397508E-005 + 175.19999999999999 -7.7862788017704998E-005 + 175.25999999999999 -7.4476453034698023E-005 + 175.31999999999999 -7.1261411829845109E-005 + 175.38000000000000 -6.8217188020580700E-005 + 175.44000000000000 -6.5343041019645648E-005 + 175.50000000000000 -6.2638002279268875E-005 + 175.56000000000000 -6.0100876069733411E-005 + 175.62000000000000 -5.7730259402565296E-005 + 175.67999999999998 -5.5524545840892199E-005 + 175.73999999999998 -5.3481945517972143E-005 + 175.79999999999998 -5.1600500514082648E-005 + 175.85999999999999 -4.9878097807966735E-005 + 175.91999999999999 -4.8312472762083768E-005 + 175.97999999999999 -4.6901232510677152E-005 + 176.03999999999999 -4.5641870040066114E-005 + 176.09999999999999 -4.4531767944089502E-005 + 176.16000000000000 -4.3568224712031345E-005 + 176.22000000000000 -4.2748451543763119E-005 + 176.28000000000000 -4.2069614663932308E-005 + 176.34000000000000 -4.1528817812013001E-005 + 176.40000000000001 -4.1123139710151738E-005 + 176.45999999999998 -4.0849638221614238E-005 + 176.51999999999998 -4.0705370053124019E-005 + 176.57999999999998 -4.0687397829609904E-005 + 176.63999999999999 -4.0792810842556304E-005 + 176.69999999999999 -4.1018737254082144E-005 + 176.75999999999999 -4.1362356514171356E-005 + 176.81999999999999 -4.1820905020280542E-005 + 176.88000000000000 -4.2391698961459045E-005 + 176.94000000000000 -4.3072131777208344E-005 + 177.00000000000000 -4.3859680776942172E-005 + 177.06000000000000 -4.4751943534671162E-005 + 177.12000000000000 -4.5746605256429921E-005 + 177.17999999999998 -4.6841473954702878E-005 + 177.23999999999998 -4.8034472656390875E-005 + 177.29999999999998 -4.9323633561207636E-005 + 177.35999999999999 -5.0707130730930090E-005 + 177.41999999999999 -5.2183253532370335E-005 + 177.47999999999999 -5.3750432468852036E-005 + 177.53999999999999 -5.5407211699235426E-005 + 177.59999999999999 -5.7152283350354625E-005 + 177.66000000000000 -5.8984450454045974E-005 + 177.72000000000000 -6.0902649938532268E-005 + 177.78000000000000 -6.2905936634334852E-005 + 177.84000000000000 -6.4993493313973146E-005 + 177.90000000000001 -6.7164608594967021E-005 + 177.95999999999998 -6.9418669193305497E-005 + 178.01999999999998 -7.1755168716316545E-005 + 178.07999999999998 -7.4173673908796778E-005 + 178.13999999999999 -7.6673827840331607E-005 + 178.19999999999999 -7.9255340832220817E-005 + 178.25999999999999 -8.1917978049122087E-005 + 178.31999999999999 -8.4661528903211261E-005 + 178.38000000000000 -8.7485831705555480E-005 + 178.44000000000000 -9.0390704507954233E-005 + 178.50000000000000 -9.3375975499275995E-005 + 178.56000000000000 -9.6441471484324598E-005 + 178.62000000000000 -9.9586969573367304E-005 + 178.67999999999998 -1.0281219560709678E-004 + 178.73999999999998 -1.0611682808159160E-004 + 178.79999999999998 -1.0950049694965202E-004 + 178.85999999999999 -1.1296270584840625E-004 + 178.91999999999999 -1.1650287687390953E-004 + 178.97999999999999 -1.2012032253814944E-004 + 179.03999999999999 -1.2381423544639567E-004 + 179.09999999999999 -1.2758366438073574E-004 + 179.16000000000000 -1.3142750355251779E-004 + 179.22000000000000 -1.3534446652902878E-004 + 179.28000000000000 -1.3933308368342353E-004 + 179.34000000000000 -1.4339168641867435E-004 + 179.40000000000001 -1.4751842205796024E-004 + 179.45999999999998 -1.5171116898753817E-004 + 179.51999999999998 -1.5596758279314457E-004 + 179.57999999999998 -1.6028505018383447E-004 + 179.63999999999999 -1.6466073177085681E-004 + 179.69999999999999 -1.6909148181595899E-004 + 179.75999999999999 -1.7357387844441655E-004 + 179.81999999999999 -1.7810421613110222E-004 + 179.88000000000000 -1.8267851063789175E-004 + 179.94000000000000 -1.8729249480869910E-004 + 180.00000000000000 -1.9194158144518193E-004 + 180.06000000000000 -1.9662094467821792E-004 + 180.12000000000000 -2.0132546157946115E-004 + 180.17999999999998 -2.0604973328177295E-004 + 180.23999999999998 -2.1078810633125977E-004 + 180.29999999999998 -2.1553465947423621E-004 + 180.35999999999999 -2.2028323129427076E-004 + 180.41999999999999 -2.2502741906269634E-004 + 180.47999999999999 -2.2976060517440220E-004 + 180.53999999999999 -2.3447595829144448E-004 + 180.59999999999999 -2.3916645029898619E-004 + 180.66000000000000 -2.4382485188359911E-004 + 180.72000000000000 -2.4844370169404390E-004 + 180.78000000000000 -2.5301542585961552E-004 + 180.84000000000000 -2.5753225697881999E-004 + 180.90000000000001 -2.6198628641138861E-004 + 180.95999999999998 -2.6636945954937433E-004 + 181.01999999999998 -2.7067360061559548E-004 + 181.07999999999998 -2.7489044522146562E-004 + 181.13999999999999 -2.7901160531946205E-004 + 181.19999999999999 -2.8302864314469505E-004 + 181.25999999999999 -2.8693303958252672E-004 + 181.31999999999999 -2.9071627397516281E-004 + 181.38000000000000 -2.9436976265331978E-004 + 181.44000000000000 -2.9788498421466983E-004 + 181.50000000000000 -3.0125344015470465E-004 + 181.56000000000000 -3.0446665480811781E-004 + 181.62000000000000 -3.0751624874760094E-004 + 181.67999999999998 -3.1039393432255000E-004 + 181.73999999999998 -3.1309153277897734E-004 + 181.79999999999998 -3.1560106276256434E-004 + 181.85999999999999 -3.1791466490740505E-004 + 181.91999999999999 -3.2002462815560698E-004 + 181.97999999999999 -3.2192346477954916E-004 + 182.03999999999999 -3.2360395772594342E-004 + 182.09999999999999 -3.2505906033203515E-004 + 182.16000000000000 -3.2628195890376519E-004 + 182.22000000000000 -3.2726615186390008E-004 + 182.28000000000000 -3.2800537010430888E-004 + 182.34000000000000 -3.2849362253780170E-004 + 182.39999999999998 -3.2872525269417362E-004 + 182.45999999999998 -3.2869488476866901E-004 + 182.51999999999998 -3.2839741814914814E-004 + 182.57999999999998 -3.2782814261611218E-004 + 182.63999999999999 -3.2698264653190280E-004 + 182.69999999999999 -3.2585682431858840E-004 + 182.75999999999999 -3.2444692537176721E-004 + 182.81999999999999 -3.2274958083005825E-004 + 182.88000000000000 -3.2076174171278394E-004 + 182.94000000000000 -3.1848072844162988E-004 + 183.00000000000000 -3.1590418674631870E-004 + 183.06000000000000 -3.1303017958627982E-004 + 183.12000000000000 -3.0985712599844781E-004 + 183.17999999999998 -3.0638381179296816E-004 + 183.23999999999998 -3.0260939908642684E-004 + 183.29999999999998 -2.9853342367474407E-004 + 183.35999999999999 -2.9415578434271149E-004 + 183.41999999999999 -2.8947682092710938E-004 + 183.47999999999999 -2.8449716134967541E-004 + 183.53999999999999 -2.7921787092113968E-004 + 183.59999999999999 -2.7364036863041462E-004 + 183.66000000000000 -2.6776645550146821E-004 + 183.72000000000000 -2.6159832415311764E-004 + 183.78000000000000 -2.5513847053814515E-004 + 183.84000000000000 -2.4838980043002479E-004 + 183.89999999999998 -2.4135552701036906E-004 + 183.95999999999998 -2.3403922921667308E-004 + 184.01999999999998 -2.2644483585553489E-004 + 184.07999999999998 -2.1857656512522887E-004 + 184.13999999999999 -2.1043898534297219E-004 + 184.19999999999999 -2.0203692833014296E-004 + 184.25999999999999 -1.9337557077674894E-004 + 184.31999999999999 -1.8446034701194796E-004 + 184.38000000000000 -1.7529696063174361E-004 + 184.44000000000000 -1.6589142614948908E-004 + 184.50000000000000 -1.5624997749480880E-004 + 184.56000000000000 -1.4637914983129698E-004 + 184.62000000000000 -1.3628570350785279E-004 + 184.67999999999998 -1.2597667064752417E-004 + 184.73999999999998 -1.1545933332694174E-004 + 184.79999999999998 -1.0474121054380595E-004 + 184.85999999999999 -9.3830068546876089E-005 + 184.91999999999999 -8.2733930308341914E-005 + 184.97999999999999 -7.1461049034713029E-005 + 185.03999999999999 -6.0019920192112201E-005 + 185.09999999999999 -4.8419280040841046E-005 + 185.16000000000000 -3.6668097529979707E-005 + 185.22000000000000 -2.4775571823262846E-005 + 185.28000000000000 -1.2751111554353303E-005 + 185.34000000000000 -6.0435083866122955E-007 + 185.39999999999998 1.1654882454918289E-005 + 185.45999999999998 2.4016560939764976E-005 + 185.51999999999998 3.6470475739993361E-005 + 185.57999999999998 4.9006260940015931E-005 + 185.63999999999999 6.1613383589317205E-005 + 185.69999999999999 7.4281172782782916E-005 + 185.75999999999999 8.6998819235952754E-005 + 185.81999999999999 9.9755408586628489E-005 + 185.88000000000000 1.1253989879747446E-004 + 185.94000000000000 1.2534117837624810E-004 + 186.00000000000000 1.3814801585751606E-004 + 186.06000000000000 1.5094912337776018E-004 + 186.12000000000000 1.6373312021170322E-004 + 186.17999999999998 1.7648859284554550E-004 + 186.23999999999998 1.8920403622552231E-004 + 186.29999999999998 2.0186792162505099E-004 + 186.35999999999999 2.1446865024711887E-004 + 186.41999999999999 2.2699462919754205E-004 + 186.47999999999999 2.3943421217066538E-004 + 186.53999999999999 2.5177572441099216E-004 + 186.59999999999999 2.6400749442850142E-004 + 186.66000000000000 2.7611785129319364E-004 + 186.72000000000000 2.8809517456338158E-004 + 186.78000000000000 2.9992787420324280E-004 + 186.84000000000000 3.1160436881849554E-004 + 186.89999999999998 3.2311316749559837E-004 + 186.95999999999998 3.3444290912352571E-004 + 187.01999999999998 3.4558232774180287E-004 + 187.07999999999998 3.5652025894636981E-004 + 187.13999999999999 3.6724568940435732E-004 + 187.19999999999999 3.7774781915791305E-004 + 187.25999999999999 3.8801597973369014E-004 + 187.31999999999999 3.9803974644255066E-004 + 187.38000000000000 4.0780891244557803E-004 + 187.44000000000000 4.1731356412244840E-004 + 187.50000000000000 4.2654397099025639E-004 + 187.56000000000000 4.3549069297995903E-004 + 187.62000000000000 4.4414464088725120E-004 + 187.67999999999998 4.5249699480772007E-004 + 187.73999999999998 4.6053923941647334E-004 + 187.79999999999998 4.6826321155803033E-004 + 187.85999999999999 4.7566110100232852E-004 + 187.91999999999999 4.8272544790803486E-004 + 187.97999999999999 4.8944916394066333E-004 + 188.03999999999999 4.9582548354413049E-004 + 188.09999999999999 5.0184806408785226E-004 + 188.16000000000000 5.0751102110375610E-004 + 188.22000000000000 5.1280877933518538E-004 + 188.28000000000000 5.1773623590509828E-004 + 188.34000000000000 5.2228874745102055E-004 + 188.39999999999998 5.2646201771293821E-004 + 188.45999999999998 5.3025216650512234E-004 + 188.51999999999998 5.3365585430135303E-004 + 188.57999999999998 5.3667019812145202E-004 + 188.63999999999999 5.3929268537058887E-004 + 188.69999999999999 5.4152140012246792E-004 + 188.75999999999999 5.4335477550432115E-004 + 188.81999999999999 5.4479175299017725E-004 + 188.88000000000000 5.4583178675428952E-004 + 188.94000000000000 5.4647482208571789E-004 + 189.00000000000000 5.4672115450345973E-004 + 189.06000000000000 5.4657172929938296E-004 + 189.12000000000000 5.4602778616488919E-004 + 189.17999999999998 5.4509116608408067E-004 + 189.23999999999998 5.4376417774316976E-004 + 189.29999999999998 5.4204945949384246E-004 + 189.35999999999999 5.3995016345129458E-004 + 189.41999999999999 5.3746980849533302E-004 + 189.47999999999999 5.3461247095356191E-004 + 189.53999999999999 5.3138247513119562E-004 + 189.59999999999999 5.2778462546927750E-004 + 189.66000000000000 5.2382401073079070E-004 + 189.72000000000000 5.1950617755233393E-004 + 189.78000000000000 5.1483695227609388E-004 + 189.84000000000000 5.0982247437160097E-004 + 189.89999999999998 5.0446916615593917E-004 + 189.95999999999998 4.9878383619796106E-004 + 190.01999999999998 4.9277351287791056E-004 + 190.07999999999998 4.8644545476787099E-004 + 190.13999999999999 4.7980728999450140E-004 + 190.19999999999999 4.7286677176541845E-004 + 190.25999999999999 4.6563193680635443E-004 + 190.31999999999999 4.5811103836816404E-004 + 190.38000000000000 4.5031245549378448E-004 + 190.44000000000000 4.4224485922073363E-004 + 190.50000000000000 4.3391703310152540E-004 + 190.56000000000000 4.2533799243803119E-004 + 190.62000000000000 4.1651684925914692E-004 + 190.67999999999998 4.0746286423994381E-004 + 190.73999999999998 3.9818542598327292E-004 + 190.79999999999998 3.8869401855870479E-004 + 190.85999999999999 3.7899827984571709E-004 + 190.91999999999999 3.6910782401717521E-004 + 190.97999999999999 3.5903238217236088E-004 + 191.03999999999999 3.4878171719417714E-004 + 191.09999999999999 3.3836556303628706E-004 + 191.16000000000000 3.2779373741328186E-004 + 191.22000000000000 3.1707597761569678E-004 + 191.28000000000000 3.0622203794362880E-004 + 191.34000000000000 2.9524158927225915E-004 + 191.39999999999998 2.8414423710566454E-004 + 191.45999999999998 2.7293959118281156E-004 + 191.51999999999998 2.6163711894754236E-004 + 191.57999999999998 2.5024623187961808E-004 + 191.63999999999999 2.3877624598144691E-004 + 191.69999999999999 2.2723635500255038E-004 + 191.75999999999999 2.1563568519157936E-004 + 191.81999999999999 2.0398322908144159E-004 + 191.88000000000000 1.9228787356497646E-004 + 191.94000000000000 1.8055840904679634E-004 + 192.00000000000000 1.6880350399984707E-004 + 192.06000000000000 1.5703169438262545E-004 + 192.12000000000000 1.4525140427119846E-004 + 192.17999999999998 1.3347092115167450E-004 + 192.23999999999998 1.2169841756480497E-004 + 192.29999999999998 1.0994191205434005E-004 + 192.35999999999999 9.8209299990586565E-005 + 192.41999999999999 8.6508332166888009E-005 + 192.47999999999999 7.4846594375609204E-005 + 192.53999999999999 6.3231529952109124E-005 + 192.59999999999999 5.1670419163002578E-005 + 192.66000000000000 4.0170374650487903E-005 + 192.72000000000000 2.8738344911350476E-005 + 192.78000000000000 1.7381094625037550E-005 + 192.84000000000000 6.1052079265404728E-006 + 192.89999999999998 -5.0829078188845652E-006 + 192.95999999999998 -1.6177042604827233E-005 + 193.01999999999998 -2.7171172165663827E-005 + 193.07999999999998 -3.8059472887171867E-005 + 193.13999999999999 -4.8836323484501384E-005 + 193.19999999999999 -5.9496296330700952E-005 + 193.25999999999999 -7.0034178817980213E-005 + 193.31999999999999 -8.0444955531632420E-005 + 193.38000000000000 -9.0723821991420953E-005 + 193.44000000000000 -1.0086619343979082E-004 + 193.50000000000000 -1.1086769293414013E-004 + 193.56000000000000 -1.2072416209385528E-004 + 193.62000000000000 -1.3043166547844280E-004 + 193.67999999999998 -1.3998645824708149E-004 + 193.73999999999998 -1.4938505489676203E-004 + 193.79999999999998 -1.5862415535483417E-004 + 193.85999999999999 -1.6770070571566211E-004 + 193.91999999999999 -1.7661190158631363E-004 + 193.97999999999999 -1.8535512805278298E-004 + 194.03999999999999 -1.9392802974047110E-004 + 194.09999999999999 -2.0232847026780846E-004 + 194.16000000000000 -2.1055454400499757E-004 + 194.22000000000000 -2.1860461673889794E-004 + 194.28000000000000 -2.2647726974261249E-004 + 194.34000000000000 -2.3417133212721454E-004 + 194.39999999999998 -2.4168589381138716E-004 + 194.45999999999998 -2.4902029826902642E-004 + 194.51999999999998 -2.5617409035127037E-004 + 194.57999999999998 -2.6314715310068863E-004 + 194.63999999999999 -2.6993955301224832E-004 + 194.69999999999999 -2.7655165151867683E-004 + 194.75999999999999 -2.8298407873478943E-004 + 194.81999999999999 -2.8923764889215070E-004 + 194.88000000000000 -2.9531345642779759E-004 + 194.94000000000000 -3.0121287470685683E-004 + 195.00000000000000 -3.0693750423913435E-004 + 195.06000000000000 -3.1248918394877385E-004 + 195.12000000000000 -3.1786997234441411E-004 + 195.17999999999998 -3.2308219979914661E-004 + 195.23999999999998 -3.2812837087775007E-004 + 195.29999999999998 -3.3301117874611500E-004 + 195.35999999999999 -3.3773363007604028E-004 + 195.41999999999999 -3.4229884305598943E-004 + 195.47999999999999 -3.4671012833291045E-004 + 195.53999999999999 -3.5097104025217382E-004 + 195.59999999999999 -3.5508526414002652E-004 + 195.66000000000000 -3.5905666178640287E-004 + 195.72000000000000 -3.6288926950679934E-004 + 195.78000000000000 -3.6658729107428081E-004 + 195.84000000000000 -3.7015504187955500E-004 + 195.89999999999998 -3.7359695148005937E-004 + 195.95999999999998 -3.7691761773593570E-004 + 196.01999999999998 -3.8012178405976983E-004 + 196.07999999999998 -3.8321424581122017E-004 + 196.13999999999999 -3.8619990775687769E-004 + 196.19999999999999 -3.8908375952563436E-004 + 196.25999999999999 -3.9187083679754461E-004 + 196.31999999999999 -3.9456627757098481E-004 + 196.38000000000000 -3.9717523892781741E-004 + 196.44000000000000 -3.9970291083127178E-004 + 196.50000000000000 -4.0215448261644941E-004 + 196.56000000000000 -4.0453515206223685E-004 + 196.62000000000000 -4.0685004281854309E-004 + 196.67999999999998 -4.0910425771277119E-004 + 196.73999999999998 -4.1130286687268946E-004 + 196.79999999999998 -4.1345081985391750E-004 + 196.85999999999999 -4.1555300362588202E-004 + 196.91999999999999 -4.1761415626776898E-004 + 196.97999999999999 -4.1963887694651124E-004 + 197.03999999999999 -4.2163164108686822E-004 + 197.09999999999999 -4.2359672186137963E-004 + 197.16000000000000 -4.2553819656322359E-004 + 197.22000000000000 -4.2746002884693277E-004 + 197.28000000000000 -4.2936587759245012E-004 + 197.34000000000000 -4.3125923869451709E-004 + 197.39999999999998 -4.3314331251220197E-004 + 197.45999999999998 -4.3502108733830912E-004 + 197.51999999999998 -4.3689529444791285E-004 + 197.57999999999998 -4.3876842090386246E-004 + 197.63999999999999 -4.4064260899741607E-004 + 197.69999999999999 -4.4251979896814874E-004 + 197.75999999999999 -4.4440160142881542E-004 + 197.81999999999999 -4.4628933088020474E-004 + 197.88000000000000 -4.4818400326820067E-004 + 197.94000000000000 -4.5008633045601692E-004 + 198.00000000000000 -4.5199673303459047E-004 + 198.06000000000000 -4.5391533322907432E-004 + 198.12000000000000 -4.5584192792818916E-004 + 198.17999999999998 -4.5777596025907581E-004 + 198.23999999999998 -4.5971664102248009E-004 + 198.29999999999998 -4.6166284595363158E-004 + 198.35999999999999 -4.6361308785287871E-004 + 198.41999999999999 -4.6556566905284506E-004 + 198.47999999999999 -4.6751848672467065E-004 + 198.53999999999999 -4.6946923585813492E-004 + 198.59999999999999 -4.7141525242084067E-004 + 198.66000000000000 -4.7335366312717327E-004 + 198.72000000000000 -4.7528124469977745E-004 + 198.78000000000000 -4.7719455590623848E-004 + 198.84000000000000 -4.7908994640259999E-004 + 198.89999999999998 -4.8096347060179960E-004 + 198.95999999999998 -4.8281096585622477E-004 + 199.01999999999998 -4.8462811627980466E-004 + 199.07999999999998 -4.8641033137853513E-004 + 199.13999999999999 -4.8815293560122030E-004 + 199.19999999999999 -4.8985107374142076E-004 + 199.25999999999999 -4.9149974504966308E-004 + 199.31999999999999 -4.9309388606546319E-004 + 199.38000000000000 -4.9462830567876170E-004 + 199.44000000000000 -4.9609773983986432E-004 + 199.50000000000000 -4.9749683595662223E-004 + 199.56000000000000 -4.9882032149645953E-004 + 199.62000000000000 -5.0006287687210944E-004 + 199.67999999999998 -5.0121913105778237E-004 + 199.73999999999998 -5.0228386724608708E-004 + 199.79999999999998 -5.0325183118640022E-004 + 199.85999999999999 -5.0411777828580679E-004 + 199.91999999999999 -5.0487670057443410E-004 + 199.97999999999999 -5.0552361802786285E-004 + 200.03999999999999 -5.0605358863016524E-004 + 200.09999999999999 -5.0646195982636535E-004 + 200.16000000000000 -5.0674405788866353E-004 + 200.22000000000000 -5.0689547093737389E-004 + 200.28000000000000 -5.0691189937311317E-004 + 200.34000000000000 -5.0678920472360244E-004 + 200.39999999999998 -5.0652343250921382E-004 + 200.45999999999998 -5.0611091622780862E-004 + 200.51999999999998 -5.0554807840213600E-004 + 200.57999999999998 -5.0483155093697103E-004 + 200.63999999999999 -5.0395830423065151E-004 + 200.69999999999999 -5.0292545313586226E-004 + 200.75999999999999 -5.0173034387896516E-004 + 200.81999999999999 -5.0037063363351467E-004 + 200.88000000000000 -4.9884420968554911E-004 + 200.94000000000000 -4.9714911585542530E-004 + 201.00000000000000 -4.9528378245593848E-004 + 201.06000000000000 -4.9324687310064476E-004 + 201.12000000000000 -4.9103729461900871E-004 + 201.17999999999998 -4.8865423299380344E-004 + 201.23999999999998 -4.8609705649245541E-004 + 201.29999999999998 -4.8336548353604592E-004 + 201.35999999999999 -4.8045953770208644E-004 + 201.41999999999999 -4.7737940830995805E-004 + 201.47999999999999 -4.7412549882509402E-004 + 201.53999999999999 -4.7069853604808745E-004 + 201.59999999999999 -4.6709943170341554E-004 + 201.66000000000000 -4.6332927627789245E-004 + 201.72000000000000 -4.5938945480732563E-004 + 201.78000000000000 -4.5528147508664275E-004 + 201.84000000000000 -4.5100711398988764E-004 + 201.89999999999998 -4.4656824096455478E-004 + 201.95999999999998 -4.4196694345723586E-004 + 202.01999999999998 -4.3720539996251691E-004 + 202.07999999999998 -4.3228601464470796E-004 + 202.13999999999999 -4.2721128602668789E-004 + 202.19999999999999 -4.2198384291748729E-004 + 202.25999999999999 -4.1660641791170988E-004 + 202.31999999999999 -4.1108183933312816E-004 + 202.38000000000000 -4.0541304481515449E-004 + 202.44000000000000 -3.9960306733592894E-004 + 202.50000000000000 -3.9365496963927535E-004 + 202.56000000000000 -3.8757194908898310E-004 + 202.62000000000000 -3.8135720606600202E-004 + 202.67999999999998 -3.7501398419269988E-004 + 202.73999999999998 -3.6854562333262035E-004 + 202.79999999999998 -3.6195545221540543E-004 + 202.85999999999999 -3.5524680058715167E-004 + 202.91999999999999 -3.4842306768531638E-004 + 202.97999999999999 -3.4148763135015468E-004 + 203.03999999999999 -3.3444390436208627E-004 + 203.09999999999999 -3.2729526690599710E-004 + 203.16000000000000 -3.2004510805172558E-004 + 203.22000000000000 -3.1269675339260682E-004 + 203.28000000000000 -3.0525353847883158E-004 + 203.34000000000000 -2.9771877392117518E-004 + 203.39999999999998 -2.9009572735668788E-004 + 203.45999999999998 -2.8238761683049358E-004 + 203.51999999999998 -2.7459765195566308E-004 + 203.57999999999998 -2.6672898838025485E-004 + 203.63999999999999 -2.5878472793947093E-004 + 203.69999999999999 -2.5076796553056294E-004 + 203.75999999999999 -2.4268170479034267E-004 + 203.81999999999999 -2.3452893739603215E-004 + 203.88000000000000 -2.2631264749218432E-004 + 203.94000000000000 -2.1803577042269262E-004 + 204.00000000000000 -2.0970123974497148E-004 + 204.06000000000000 -2.0131195035966423E-004 + 204.12000000000000 -1.9287079885438595E-004 + 204.17999999999998 -1.8438068885267598E-004 + 204.23999999999998 -1.7584455296374153E-004 + 204.29999999999998 -1.6726529725675612E-004 + 204.35999999999999 -1.5864589485344935E-004 + 204.41999999999999 -1.4998932346748208E-004 + 204.47999999999999 -1.4129859290388041E-004 + 204.53999999999999 -1.3257680189047874E-004 + 204.59999999999999 -1.2382707354498051E-004 + 204.66000000000000 -1.1505258185239275E-004 + 204.72000000000000 -1.0625657611322709E-004 + 204.78000000000000 -9.7442380704861509E-005 + 204.84000000000000 -8.8613380485412857E-005 + 204.89999999999998 -7.9773032600647384E-005 + 204.95999999999998 -7.0924877175687908E-005 + 205.01999999999998 -6.2072536059465397E-005 + 205.07999999999998 -5.3219706395078716E-005 + 205.13999999999999 -4.4370171916573754E-005 + 205.19999999999999 -3.5527795325616726E-005 + 205.25999999999999 -2.6696532089811613E-005 + 205.31999999999999 -1.7880422318474958E-005 + 205.38000000000000 -9.0835964476186653E-006 + 205.44000000000000 -3.1027278004087057E-007 + 205.50000000000000 8.4352379808856571E-006 + 205.56000000000000 1.7148533715111019E-005 + 205.62000000000000 2.5825115331467911E-005 + 205.67999999999998 3.4460401366086754E-005 + 205.73999999999998 4.3049704155217608E-005 + 205.79999999999998 5.1588248563381657E-005 + 205.85999999999999 6.0071168017423706E-005 + 205.91999999999999 6.8493500459929313E-005 + 205.97999999999999 7.6850207678957661E-005 + 206.03999999999999 8.5136160649306025E-005 + 206.09999999999999 9.3346166107427913E-005 + 206.16000000000000 1.0147494280889874E-004 + 206.22000000000000 1.0951715322520407E-004 + 206.28000000000000 1.1746740646915779E-004 + 206.34000000000000 1.2532026749825445E-004 + 206.39999999999998 1.3307027411271085E-004 + 206.45999999999998 1.4071192900150990E-004 + 206.51999999999998 1.4823970600484602E-004 + 206.57999999999998 1.5564812577577736E-004 + 206.63999999999999 1.6293169068776900E-004 + 206.69999999999999 1.7008495142818321E-004 + 206.75999999999999 1.7710247973051952E-004 + 206.81999999999999 1.8397893547753279E-004 + 206.88000000000000 1.9070902217731690E-004 + 206.94000000000000 1.9728755406924698E-004 + 207.00000000000000 2.0370943441568441E-004 + 207.06000000000000 2.0996965971595180E-004 + 207.12000000000000 2.1606338129620669E-004 + 207.17999999999998 2.2198586876773503E-004 + 207.23999999999998 2.2773254523914110E-004 + 207.29999999999998 2.3329897529567398E-004 + 207.35999999999999 2.3868092850763722E-004 + 207.41999999999999 2.4387428027126582E-004 + 207.47999999999999 2.4887512328166679E-004 + 207.53999999999999 2.5367978381337004E-004 + 207.59999999999999 2.5828475406675252E-004 + 207.66000000000000 2.6268672608264419E-004 + 207.72000000000000 2.6688260931965281E-004 + 207.78000000000000 2.7086954497615814E-004 + 207.84000000000000 2.7464492271156714E-004 + 207.89999999999998 2.7820634834474571E-004 + 207.95999999999998 2.8155167751566261E-004 + 208.01999999999998 2.8467903913700411E-004 + 208.07999999999998 2.8758686046138844E-004 + 208.13999999999999 2.9027382528483441E-004 + 208.19999999999999 2.9273888124828101E-004 + 208.25999999999999 2.9498129609766243E-004 + 208.31999999999999 2.9700068239909855E-004 + 208.38000000000000 2.9879691544487994E-004 + 208.44000000000000 3.0037018182940819E-004 + 208.50000000000000 3.0172106970342290E-004 + 208.56000000000000 3.0285042481325805E-004 + 208.62000000000000 3.0375941093191628E-004 + 208.68000000000001 3.0444960044428559E-004 + 208.74000000000001 3.0492286583997091E-004 + 208.80000000000001 3.0518137238274765E-004 + 208.86000000000001 3.0522765276332737E-004 + 208.92000000000002 3.0506451929086743E-004 + 208.98000000000002 3.0469509400874963E-004 + 209.03999999999996 3.0412282580098802E-004 + 209.09999999999997 3.0335147634426502E-004 + 209.15999999999997 3.0238502568114364E-004 + 209.21999999999997 3.0122779015200626E-004 + 209.27999999999997 2.9988426487021099E-004 + 209.33999999999997 2.9835929322941514E-004 + 209.39999999999998 2.9665784014771407E-004 + 209.45999999999998 2.9478520876418106E-004 + 209.51999999999998 2.9274685291177650E-004 + 209.57999999999998 2.9054844932175429E-004 + 209.63999999999999 2.8819584791523161E-004 + 209.69999999999999 2.8569511057424115E-004 + 209.75999999999999 2.8305241633204881E-004 + 209.81999999999999 2.8027422502420024E-004 + 209.88000000000000 2.7736700945595527E-004 + 209.94000000000000 2.7433740430051916E-004 + 210.00000000000000 2.7119221828785292E-004 + 210.06000000000000 2.6793833039353703E-004 + 210.12000000000000 2.6458276807486475E-004 + 210.18000000000001 2.6113255859466154E-004 + 210.24000000000001 2.5759484907387554E-004 + 210.30000000000001 2.5397680976571558E-004 + 210.36000000000001 2.5028567865559807E-004 + 210.42000000000002 2.4652863577707214E-004 + 210.48000000000002 2.4271293420034915E-004 + 210.53999999999996 2.3884572481280467E-004 + 210.59999999999997 2.3493417502648697E-004 + 210.65999999999997 2.3098533331462624E-004 + 210.71999999999997 2.2700621315325842E-004 + 210.77999999999997 2.2300371069687818E-004 + 210.83999999999997 2.1898461199912496E-004 + 210.89999999999998 2.1495555922914619E-004 + 210.95999999999998 2.1092305080753571E-004 + 211.01999999999998 2.0689345295133026E-004 + 211.07999999999998 2.0287292683261924E-004 + 211.13999999999999 1.9886745757689251E-004 + 211.19999999999999 1.9488286522609035E-004 + 211.25999999999999 1.9092472712420685E-004 + 211.31999999999999 1.8699843307991624E-004 + 211.38000000000000 1.8310916822237563E-004 + 211.44000000000000 1.7926189645460979E-004 + 211.50000000000000 1.7546135883522609E-004 + 211.56000000000000 1.7171204317138552E-004 + 211.62000000000000 1.6801823510137793E-004 + 211.68000000000001 1.6438398669225168E-004 + 211.74000000000001 1.6081309508968246E-004 + 211.80000000000001 1.5730913809681684E-004 + 211.86000000000001 1.5387545151126879E-004 + 211.92000000000002 1.5051510865757260E-004 + 211.98000000000002 1.4723096255787234E-004 + 212.03999999999996 1.4402560783627921E-004 + 212.09999999999997 1.4090139470805948E-004 + 212.15999999999997 1.3786042228045717E-004 + 212.21999999999997 1.3490453283610015E-004 + 212.27999999999997 1.3203533920003228E-004 + 212.33999999999997 1.2925419269150444E-004 + 212.39999999999998 1.2656219086164112E-004 + 212.45999999999998 1.2396020071684944E-004 + 212.51999999999998 1.2144882751086512E-004 + 212.57999999999998 1.1902844834503918E-004 + 212.63999999999999 1.1669918132685769E-004 + 212.69999999999999 1.1446096681244388E-004 + 212.75999999999999 1.1231347372221103E-004 + 212.81999999999999 1.1025617801781088E-004 + 212.88000000000000 1.0828835296370937E-004 + 212.94000000000000 1.0640906186417743E-004 + 213.00000000000000 1.0461721245847034E-004 + 213.06000000000000 1.0291151690369468E-004 + 213.12000000000000 1.0129055300551295E-004 + 213.18000000000001 9.9752737141474396E-005 + 213.24000000000001 9.8296348388144595E-005 + 213.30000000000001 9.6919558248750515E-005 + 213.36000000000001 9.5620421070046719E-005 + 213.42000000000002 9.4396889304575342E-005 + 213.48000000000002 9.3246826046656432E-005 + 213.53999999999996 9.2168022420114907E-005 + 213.59999999999997 9.1158189134597046E-005 + 213.65999999999997 9.0214977426708012E-005 + 213.71999999999997 8.9335981401765096E-005 + 213.77999999999997 8.8518754446973612E-005 + 213.83999999999997 8.7760792091471488E-005 + 213.89999999999998 8.7059562638610772E-005 + 213.95999999999998 8.6412500109099829E-005 + 214.01999999999998 8.5817020584887902E-005 + 214.07999999999998 8.5270510045061662E-005 + 214.13999999999999 8.4770340942235249E-005 + 214.19999999999999 8.4313891167554577E-005 + 214.25999999999999 8.3898538579867582E-005 + 214.31999999999999 8.3521653996813317E-005 + 214.38000000000000 8.3180643830702279E-005 + 214.44000000000000 8.2872921238501474E-005 + 214.50000000000000 8.2595952287930848E-005 + 214.56000000000000 8.2347223775996474E-005 + 214.62000000000000 8.2124294656921003E-005 + 214.68000000000001 8.1924757351718093E-005 + 214.74000000000001 8.1746289513626329E-005 + 214.80000000000001 8.1586626609329895E-005 + 214.86000000000001 8.1443595424654405E-005 + 214.92000000000002 8.1315101919146425E-005 + 214.98000000000002 8.1199145122254471E-005 + 215.03999999999996 8.1093820928177546E-005 + 215.09999999999997 8.0997315549416644E-005 + 215.15999999999997 8.0907929315317330E-005 + 215.21999999999997 8.0824060277903258E-005 + 215.27999999999997 8.0744217776098680E-005 + 215.33999999999997 8.0667012410447756E-005 + 215.39999999999998 8.0591180720736947E-005 + 215.45999999999998 8.0515563721111265E-005 + 215.51999999999998 8.0439104321949320E-005 + 215.57999999999998 8.0360866419172664E-005 + 215.63999999999999 8.0280019512151603E-005 + 215.69999999999999 8.0195851917692559E-005 + 215.75999999999999 8.0107759140054567E-005 + 215.81999999999999 8.0015233819863657E-005 + 215.88000000000000 7.9917899748105882E-005 + 215.94000000000000 7.9815468116022908E-005 + 216.00000000000000 7.9707774542005824E-005 + 216.06000000000000 7.9594741970666043E-005 + 216.12000000000000 7.9476409116020964E-005 + 216.18000000000001 7.9352913581835137E-005 + 216.24000000000001 7.9224481094918703E-005 + 216.30000000000001 7.9091445938086891E-005 + 216.36000000000001 7.8954235303859978E-005 + 216.42000000000002 7.8813375325550322E-005 + 216.48000000000002 7.8669469182492854E-005 + 216.53999999999996 7.8523223548027644E-005 + 216.59999999999997 7.8375431844567126E-005 + 216.65999999999997 7.8226979593893557E-005 + 216.71999999999997 7.8078823071541810E-005 + 216.77999999999997 7.7932015622743427E-005 + 216.83999999999997 7.7787676915223587E-005 + 216.89999999999998 7.7647016054326729E-005 + 216.95999999999998 7.7511307292292737E-005 + 217.01999999999998 7.7381910597407560E-005 + 217.07999999999998 7.7260225796612408E-005 + 217.13999999999999 7.7147728632478448E-005 + 217.19999999999999 7.7045956808080660E-005 + 217.25999999999999 7.6956474760663549E-005 + 217.31999999999999 7.6880887792896621E-005 + 217.38000000000000 7.6820835847953337E-005 + 217.44000000000000 7.6777979840909921E-005 + 217.50000000000000 7.6753984703267875E-005 + 217.56000000000000 7.6750512670005754E-005 + 217.62000000000000 7.6769227861462618E-005 + 217.68000000000001 7.6811755116733756E-005 + 217.74000000000001 7.6879718259045116E-005 + 217.80000000000001 7.6974691218408247E-005 + 217.86000000000001 7.7098199294387579E-005 + 217.92000000000002 7.7251717768344106E-005 + 217.98000000000002 7.7436668962979814E-005 + 218.03999999999996 7.7654421801211891E-005 + 218.09999999999997 7.7906264065221996E-005 + 218.15999999999997 7.8193413158722378E-005 + 218.21999999999997 7.8517013330141347E-005 + 218.27999999999997 7.8878132012000438E-005 + 218.33999999999997 7.9277748832736508E-005 + 218.39999999999998 7.9716773379438500E-005 + 218.45999999999998 8.0196003314943049E-005 + 218.51999999999998 8.0716171117574758E-005 + 218.57999999999998 8.1277906828249253E-005 + 218.63999999999999 8.1881729779879726E-005 + 218.69999999999999 8.2528071037153624E-005 + 218.75999999999999 8.3217246436086801E-005 + 218.81999999999999 8.3949475188583895E-005 + 218.88000000000000 8.4724844495538817E-005 + 218.94000000000000 8.5543351213829901E-005 + 219.00000000000000 8.6404834636636519E-005 + 219.06000000000000 8.7309037759549597E-005 + 219.12000000000000 8.8255562773113377E-005 + 219.18000000000001 8.9243876484473175E-005 + 219.24000000000001 9.0273325709781839E-005 + 219.30000000000001 9.1343121905763976E-005 + 219.36000000000001 9.2452341157617024E-005 + 219.42000000000002 9.3599912318252665E-005 + 219.48000000000002 9.4784654155560387E-005 + 219.53999999999996 9.6005237710206662E-005 + 219.59999999999997 9.7260223991099757E-005 + 219.65999999999997 9.8548035190756741E-005 + 219.71999999999997 9.9866982145136075E-005 + 219.77999999999997 1.0121525414329152E-004 + 219.83999999999997 1.0259091872459272E-004 + 219.89999999999998 1.0399195885799317E-004 + 219.95999999999998 1.0541623655997589E-004 + 220.01999999999998 1.0686152794976875E-004 + 220.07999999999998 1.0832549498044420E-004 + 220.13999999999999 1.0980573200744429E-004 + 220.19999999999999 1.1129973253929302E-004 + 220.25999999999999 1.1280492691044000E-004 + 220.31999999999999 1.1431866324421309E-004 + 220.38000000000000 1.1583821559397800E-004 + 220.44000000000000 1.1736078280783688E-004 + 220.50000000000000 1.1888352558720748E-004 + 220.56000000000000 1.2040353095658364E-004 + 220.62000000000000 1.2191783490473942E-004 + 220.68000000000001 1.2342342082619987E-004 + 220.74000000000001 1.2491721664450536E-004 + 220.80000000000001 1.2639612306182812E-004 + 220.86000000000001 1.2785698004255457E-004 + 220.92000000000002 1.2929661834126739E-004 + 220.98000000000002 1.3071181985478935E-004 + 221.03999999999996 1.3209934432215043E-004 + 221.09999999999997 1.3345592889995179E-004 + 221.15999999999997 1.3477830654529038E-004 + 221.21999999999997 1.3606317284667140E-004 + 221.27999999999997 1.3730725511468844E-004 + 221.33999999999997 1.3850726345145182E-004 + 221.39999999999998 1.3965994657594828E-004 + 221.45999999999998 1.4076206938233208E-004 + 221.51999999999998 1.4181042845929034E-004 + 221.57999999999998 1.4280186393985264E-004 + 221.63999999999999 1.4373329503948435E-004 + 221.69999999999999 1.4460169147294667E-004 + 221.75999999999999 1.4540407308608066E-004 + 221.81999999999999 1.4613759850122987E-004 + 221.88000000000000 1.4679950115754420E-004 + 221.94000000000000 1.4738708385631587E-004 + 222.00000000000000 1.4789779864845319E-004 + 222.06000000000000 1.4832918816800082E-004 + 222.12000000000000 1.4867891959973356E-004 + 222.18000000000001 1.4894478857201298E-004 + 222.24000000000001 1.4912471529567200E-004 + 222.30000000000001 1.4921674264254211E-004 + 222.36000000000001 1.4921904652120659E-004 + 222.42000000000002 1.4912993888196028E-004 + 222.48000000000002 1.4894789302698496E-004 + 222.53999999999996 1.4867148889499381E-004 + 222.59999999999997 1.4829946072898912E-004 + 222.65999999999997 1.4783071262718431E-004 + 222.71999999999997 1.4726429973532643E-004 + 222.77999999999997 1.4659943245471787E-004 + 222.83999999999997 1.4583551937854966E-004 + 222.89999999999998 1.4497212171726368E-004 + 222.95999999999998 1.4400903705323346E-004 + 223.01999999999998 1.4294620440441220E-004 + 223.07999999999998 1.4178383345768295E-004 + 223.13999999999999 1.4052233616906103E-004 + 223.19999999999999 1.3916232738454590E-004 + 223.25999999999999 1.3770469393509393E-004 + 223.31999999999999 1.3615052972262371E-004 + 223.38000000000000 1.3450117564042240E-004 + 223.44000000000000 1.3275822953525475E-004 + 223.50000000000000 1.3092352002161295E-004 + 223.56000000000000 1.2899912903463695E-004 + 223.62000000000000 1.2698735746926958E-004 + 223.68000000000001 1.2489077245917202E-004 + 223.74000000000001 1.2271214859355743E-004 + 223.80000000000001 1.2045449191488968E-004 + 223.86000000000001 1.1812103110453685E-004 + 223.92000000000002 1.1571521601851315E-004 + 223.98000000000002 1.1324070514456982E-004 + 224.03999999999996 1.1070135239376166E-004 + 224.09999999999997 1.0810121958362101E-004 + 224.15999999999997 1.0544454960869024E-004 + 224.21999999999997 1.0273578585849099E-004 + 224.27999999999997 9.9979553645000843E-005 + 224.33999999999997 9.7180652982283046E-005 + 224.39999999999998 9.4344063637971510E-005 + 224.45999999999998 9.1474934471824708E-005 + 224.51999999999998 8.8578569375807751E-005 + 224.57999999999998 8.5660440460914164E-005 + 224.63999999999999 8.2726170229837598E-005 + 224.69999999999999 7.9781512428129864E-005 + 224.75999999999999 7.6832363474628514E-005 + 224.81999999999999 7.3884740008790369E-005 + 224.88000000000000 7.0944772829726162E-005 + 224.94000000000000 6.8018681736459682E-005 + 225.00000000000000 6.5112795337297997E-005 + 225.06000000000000 6.2233503580260010E-005 + 225.12000000000000 5.9387264669585076E-005 + 225.18000000000001 5.6580583363800541E-005 + 225.24000000000001 5.3820009320438677E-005 + 225.30000000000001 5.1112109887238741E-005 + 225.36000000000001 4.8463460929428584E-005 + 225.42000000000002 4.5880644495610907E-005 + 225.48000000000002 4.3370219802271815E-005 + 225.53999999999996 4.0938721454282647E-005 + 225.59999999999997 3.8592650318339258E-005 + 225.65999999999997 3.6338454565856842E-005 + 225.71999999999997 3.4182521511638174E-005 + 225.77999999999997 3.2131170807426086E-005 + 225.83999999999997 3.0190633048936460E-005 + 225.89999999999998 2.8367052701649158E-005 + 225.95999999999998 2.6666470562644587E-005 + 226.01999999999998 2.5094811099331841E-005 + 226.07999999999998 2.3657882672664151E-005 + 226.13999999999999 2.2361354133514680E-005 + 226.19999999999999 2.1210759150145939E-005 + 226.25999999999999 2.0211473136848748E-005 + 226.31999999999999 1.9368714600185742E-005 + 226.38000000000000 1.8687531626066810E-005 + 226.44000000000000 1.8172787207488745E-005 + 226.50000000000000 1.7829158755755702E-005 + 226.56000000000000 1.7661119665730310E-005 + 226.62000000000000 1.7672937060829471E-005 + 226.68000000000001 1.7868656792126991E-005 + 226.74000000000001 1.8252092849407424E-005 + 226.80000000000001 1.8826824411859921E-005 + 226.86000000000001 1.9596176434702013E-005 + 226.92000000000002 2.0563215848282789E-005 + 226.98000000000002 2.1730736591862155E-005 + 227.03999999999996 2.3101258182120575E-005 + 227.09999999999997 2.4677005298288624E-005 + 227.15999999999997 2.6459913815643840E-005 + 227.21999999999997 2.8451603512574851E-005 + 227.27999999999997 3.0653385828248283E-005 + 227.33999999999997 3.3066257905357543E-005 + 227.39999999999998 3.5690884021536413E-005 + 227.45999999999998 3.8527605847643442E-005 + 227.51999999999998 4.1576426423765503E-005 + 227.57999999999998 4.4837013942211227E-005 + 227.63999999999999 4.8308701904775105E-005 + 227.69999999999999 5.1990474177883917E-005 + 227.75999999999999 5.5880982532959852E-005 + 227.81999999999999 5.9978518438885532E-005 + 227.88000000000000 6.4281043656718638E-005 + 227.94000000000000 6.8786159236741457E-005 + 228.00000000000000 7.3491113757192608E-005 + 228.06000000000000 7.8392820207517062E-005 + 228.12000000000000 8.3487810990061451E-005 + 228.18000000000001 8.8772269306426182E-005 + 228.24000000000001 9.4242001930543002E-005 + 228.30000000000001 9.9892468871684003E-005 + 228.36000000000001 1.0571873826397471E-004 + 228.42000000000002 1.1171551245675086E-004 + 228.48000000000002 1.1787710418726379E-004 + 228.53999999999996 1.2419746369477254E-004 + 228.59999999999997 1.3067014276851142E-004 + 228.65999999999997 1.3728834894712226E-004 + 228.71999999999997 1.4404490589025793E-004 + 228.77999999999997 1.5093227652390864E-004 + 228.83999999999997 1.5794255657522504E-004 + 228.89999999999998 1.6506751056672092E-004 + 228.95999999999998 1.7229857961484083E-004 + 229.01999999999998 1.7962688074668086E-004 + 229.07999999999998 1.8704322863862156E-004 + 229.13999999999999 1.9453817163891823E-004 + 229.19999999999999 2.0210196041611509E-004 + 229.25999999999999 2.0972463453205746E-004 + 229.31999999999999 2.1739598345070957E-004 + 229.38000000000000 2.2510557295542477E-004 + 229.44000000000000 2.3284278805734475E-004 + 229.50000000000000 2.4059684383086869E-004 + 229.56000000000000 2.4835680378700519E-004 + 229.62000000000000 2.5611154359670308E-004 + 229.68000000000001 2.6384984150549097E-004 + 229.74000000000001 2.7156039887114478E-004 + 229.80000000000001 2.7923176483529613E-004 + 229.86000000000001 2.8685248176569113E-004 + 229.92000000000002 2.9441096072348785E-004 + 229.97999999999996 3.0189563880009252E-004 + 230.03999999999996 3.0929494014436047E-004 + 230.09999999999997 3.1659729325051518E-004 + 230.15999999999997 3.2379116600773098E-004 + 230.21999999999997 3.3086507483827177E-004 + 230.27999999999997 3.3780765532399274E-004 + 230.33999999999997 3.4460763918010357E-004 + 230.39999999999998 3.5125391395973357E-004 + 230.45999999999998 3.5773553290588747E-004 + 230.51999999999998 3.6404173949387749E-004 + 230.57999999999998 3.7016202490712248E-004 + 230.63999999999999 3.7608612509154609E-004 + 230.69999999999999 3.8180406683888444E-004 + 230.75999999999999 3.8730619939476873E-004 + 230.81999999999999 3.9258317419286836E-004 + 230.88000000000000 3.9762603629439971E-004 + 230.94000000000000 4.0242618237992908E-004 + 231.00000000000000 4.0697542483000371E-004 + 231.06000000000000 4.1126598345707274E-004 + 231.12000000000000 4.1529052461897014E-004 + 231.18000000000001 4.1904217278733804E-004 + 231.24000000000001 4.2251450359514933E-004 + 231.30000000000001 4.2570161805860458E-004 + 231.36000000000001 4.2859808557685520E-004 + 231.42000000000002 4.3119901893193252E-004 + 231.47999999999996 4.3350005582605696E-004 + 231.53999999999996 4.3549736955165156E-004 + 231.59999999999997 4.3718774470041327E-004 + 231.65999999999997 4.3856848059483890E-004 + 231.71999999999997 4.3963744105239132E-004 + 231.77999999999997 4.4039314264509113E-004 + 231.83999999999997 4.4083461698274492E-004 + 231.89999999999998 4.4096154728551185E-004 + 231.95999999999998 4.4077414567169330E-004 + 232.01999999999998 4.4027330184301643E-004 + 232.07999999999998 4.3946046997647362E-004 + 232.13999999999999 4.3833771238121241E-004 + 232.19999999999999 4.3690768157475843E-004 + 232.25999999999999 4.3517363115229369E-004 + 232.31999999999999 4.3313939060976060E-004 + 232.38000000000000 4.3080940971073988E-004 + 232.44000000000000 4.2818865270347772E-004 + 232.50000000000000 4.2528273300386954E-004 + 232.56000000000000 4.2209773127673103E-004 + 232.62000000000000 4.1864032164255446E-004 + 232.68000000000001 4.1491772790990108E-004 + 232.74000000000001 4.1093763328048686E-004 + 232.80000000000001 4.0670824189777290E-004 + 232.86000000000001 4.0223826684210101E-004 + 232.92000000000002 3.9753681177106501E-004 + 232.97999999999996 3.9261351360158383E-004 + 233.03999999999996 3.8747835462122498E-004 + 233.09999999999997 3.8214171673897228E-004 + 233.15999999999997 3.7661439965832341E-004 + 233.21999999999997 3.7090749727455938E-004 + 233.27999999999997 3.6503249066464075E-004 + 233.33999999999997 3.5900103198554921E-004 + 233.39999999999998 3.5282514038386412E-004 + 233.45999999999998 3.4651705762995307E-004 + 233.51999999999998 3.4008921697879443E-004 + 233.57999999999998 3.3355424584702716E-004 + 233.63999999999999 3.2692493648059942E-004 + 233.69999999999999 3.2021418280152829E-004 + 233.75999999999999 3.1343503973971389E-004 + 233.81999999999999 3.0660061976428826E-004 + 233.88000000000000 2.9972403772021179E-004 + 233.94000000000000 2.9281852771933972E-004 + 234.00000000000000 2.8589722443286895E-004 + 234.06000000000000 2.7897333447554390E-004 + 234.12000000000000 2.7205998180764344E-004 + 234.18000000000001 2.6517013486077192E-004 + 234.24000000000001 2.5831674964213865E-004 + 234.30000000000001 2.5151256822446890E-004 + 234.36000000000001 2.4477019564721035E-004 + 234.42000000000002 2.3810202973245043E-004 + 234.47999999999996 2.3152025476443202E-004 + 234.53999999999996 2.2503674811947448E-004 + 234.59999999999997 2.1866313662461686E-004 + 234.65999999999997 2.1241072364402110E-004 + 234.71999999999997 2.0629046618731548E-004 + 234.77999999999997 2.0031295362798481E-004 + 234.83999999999997 1.9448840758069845E-004 + 234.89999999999998 1.8882660758924957E-004 + 234.95999999999998 1.8333691121278709E-004 + 235.01999999999998 1.7802824630921177E-004 + 235.07999999999998 1.7290904226130284E-004 + 235.13999999999999 1.6798729722626346E-004 + 235.19999999999999 1.6327049044216634E-004 + 235.25999999999999 1.5876558377983516E-004 + 235.31999999999999 1.5447904128743857E-004 + 235.38000000000000 1.5041681276068301E-004 + 235.44000000000000 1.4658426653234993E-004 + 235.50000000000000 1.4298626515480962E-004 + 235.56000000000000 1.3962711017792659E-004 + 235.62000000000000 1.3651053500293180E-004 + 235.68000000000001 1.3363971140484534E-004 + 235.74000000000001 1.3101722695283723E-004 + 235.80000000000001 1.2864511100703040E-004 + 235.86000000000001 1.2652479957488464E-004 + 235.92000000000002 1.2465715369590574E-004 + 235.97999999999996 1.2304244767100857E-004 + 236.03999999999996 1.2168040023251589E-004 + 236.09999999999997 1.2057013296743735E-004 + 236.15999999999997 1.1971020144501965E-004 + 236.21999999999997 1.1909860959510937E-004 + 236.27999999999997 1.1873280781720617E-004 + 236.33999999999997 1.1860968659565067E-004 + 236.39999999999998 1.1872562313040471E-004 + 236.45999999999998 1.1907645856632162E-004 + 236.51999999999998 1.1965753594703841E-004 + 236.57999999999998 1.2046370776868057E-004 + 236.63999999999999 1.2148932548757454E-004 + 236.69999999999999 1.2272828537924428E-004 + 236.75999999999999 1.2417402560368964E-004 + 236.81999999999999 1.2581954561810890E-004 + 236.88000000000000 1.2765741636147168E-004 + 236.94000000000000 1.2967982077224976E-004 + 237.00000000000000 1.3187852232737708E-004 + 237.06000000000000 1.3424493612627591E-004 + 237.12000000000000 1.3677009427728388E-004 + 237.18000000000001 1.3944470880672275E-004 + 237.24000000000001 1.4225915906817752E-004 + 237.30000000000001 1.4520351959497539E-004 + 237.36000000000001 1.4826759934168717E-004 + 237.42000000000002 1.5144094078221130E-004 + 237.47999999999996 1.5471285834584841E-004 + 237.53999999999996 1.5807244058125950E-004 + 237.59999999999997 1.6150860232990257E-004 + 237.65999999999997 1.6501005586126889E-004 + 237.71999999999997 1.6856539442266681E-004 + 237.77999999999997 1.7216308155352874E-004 + 237.83999999999997 1.7579151054579543E-004 + 237.89999999999998 1.7943895436315052E-004 + 237.95999999999998 1.8309367645408849E-004 + 238.01999999999998 1.8674386295803189E-004 + 238.07999999999998 1.9037773920832041E-004 + 238.13999999999999 1.9398351928674905E-004 + 238.19999999999999 1.9754944339024543E-004 + 238.25999999999999 2.0106383666474760E-004 + 238.31999999999999 2.0451507592578129E-004 + 238.38000000000000 2.0789165893745194E-004 + 238.44000000000000 2.1118217631457644E-004 + 238.50000000000000 2.1437539055094192E-004 + 238.56000000000000 2.1746021434643713E-004 + 238.62000000000000 2.2042573953999896E-004 + 238.68000000000001 2.2326126824044273E-004 + 238.74000000000001 2.2595632692858384E-004 + 238.80000000000001 2.2850072022413104E-004 + 238.86000000000001 2.3088451491048030E-004 + 238.92000000000002 2.3309804918674167E-004 + 238.97999999999996 2.3513200863343886E-004 + 239.03999999999996 2.3697737866426453E-004 + 239.09999999999997 2.3862554596158693E-004 + 239.15999999999997 2.4006823425316138E-004 + 239.21999999999997 2.4129756025638094E-004 + 239.27999999999997 2.4230607024186554E-004 + 239.33999999999997 2.4308672552474374E-004 + 239.39999999999998 2.4363292204055423E-004 + 239.45999999999998 2.4393854553177358E-004 + 239.51999999999998 2.4399791114691866E-004 + 239.57999999999998 2.4380584130117357E-004 + 239.63999999999999 2.4335767717186912E-004 + 239.69999999999999 2.4264925830151465E-004 + 239.75999999999999 2.4167695568601513E-004 + 239.81999999999999 2.4043765548104106E-004 + 239.88000000000000 2.3892882674571978E-004 + 239.94000000000000 2.3714846903875460E-004 + 240.00000000000000 2.3509517218874956E-004 + 240.06000000000000 2.3276809172528463E-004 + 240.12000000000000 2.3016695135308170E-004 + 240.18000000000001 2.2729207127385404E-004 + 240.24000000000001 2.2414432791838574E-004 + 240.30000000000001 2.2072519774251996E-004 + 240.36000000000001 2.1703674175088634E-004 + 240.42000000000002 2.1308159781160144E-004 + 240.47999999999996 2.0886298124964280E-004 + 240.53999999999996 2.0438466742748134E-004 + 240.59999999999997 1.9965097077299181E-004 + 240.65999999999997 1.9466678883986642E-004 + 240.71999999999997 1.8943755628016333E-004 + 240.77999999999997 1.8396920786655093E-004 + 240.83999999999997 1.7826821660957935E-004 + 240.89999999999998 1.7234152535522203E-004 + 240.95999999999998 1.6619658563724569E-004 + 241.01999999999998 1.5984132373233977E-004 + 241.07999999999998 1.5328407833808505E-004 + 241.13999999999999 1.4653365355099302E-004 + 241.19999999999999 1.3959925083762995E-004 + 241.25999999999999 1.3249044995508074E-004 + 241.31999999999999 1.2521722943696254E-004 + 241.38000000000000 1.1778987703073506E-004 + 241.44000000000000 1.1021900789001841E-004 + 241.50000000000000 1.0251553732092272E-004 + 241.56000000000000 9.4690628974982520E-005 + 241.62000000000000 8.6755703686929763E-005 + 241.68000000000001 7.8722380815596853E-005 + 241.74000000000001 7.0602443549236903E-005 + 241.80000000000001 6.2407850168489550E-005 + 241.86000000000001 5.4150650278089420E-005 + 241.92000000000002 4.5842993980059840E-005 + 241.97999999999996 3.7497087130309664E-005 + 242.03999999999996 2.9125156175765347E-005 + 242.09999999999997 2.0739426921551062E-005 + 242.15999999999997 1.2352086310925978E-005 + 242.21999999999997 3.9752605917211619E-006 + 242.27999999999997 -4.3790087612766433E-006 + 242.33999999999997 -1.2698811222316185E-005 + 242.39999999999998 -2.0972371790651293E-005 + 242.45999999999998 -2.9188098782086137E-005 + 242.51999999999998 -3.7334593802420793E-005 + 242.57999999999998 -4.5400685625094113E-005 + 242.63999999999999 -5.3375445985417247E-005 + 242.69999999999999 -6.1248235104722603E-005 + 242.75999999999999 -6.9008699210917925E-005 + 242.81999999999999 -7.6646805593136901E-005 + 242.88000000000000 -8.4152860175618671E-005 + 242.94000000000000 -9.1517533533368755E-005 + 243.00000000000000 -9.8731883300232735E-005 + 243.06000000000000 -1.0578734358919272E-004 + 243.12000000000000 -1.1267577605367767E-004 + 243.18000000000001 -1.1938946932103938E-004 + 243.24000000000001 -1.2592114636002710E-004 + 243.30000000000001 -1.3226397551190452E-004 + 243.36000000000001 -1.3841158473923681E-004 + 243.42000000000002 -1.4435805720850364E-004 + 243.47999999999996 -1.5009795119127572E-004 + 243.53999999999996 -1.5562628944704445E-004 + 243.59999999999997 -1.6093857737827386E-004 + 243.65999999999997 -1.6603075213352542E-004 + 243.71999999999997 -1.7089926718703253E-004 + 243.77999999999997 -1.7554100941986190E-004 + 243.83999999999997 -1.7995332057621087E-004 + 243.89999999999998 -1.8413401746186810E-004 + 243.95999999999998 -1.8808138536892307E-004 + 244.01999999999998 -1.9179411602624659E-004 + 244.07999999999998 -1.9527139940300314E-004 + 244.13999999999999 -1.9851277470255807E-004 + 244.19999999999999 -2.0151829668825104E-004 + 244.25999999999999 -2.0428838110359560E-004 + 244.31999999999999 -2.0682390653379369E-004 + 244.38000000000000 -2.0912612922594883E-004 + 244.44000000000000 -2.1119667247064636E-004 + 244.50000000000000 -2.1303758947240219E-004 + 244.56000000000000 -2.1465127953210688E-004 + 244.62000000000000 -2.1604049098296964E-004 + 244.68000000000001 -2.1720833997879624E-004 + 244.74000000000001 -2.1815825282183972E-004 + 244.80000000000001 -2.1889398987460289E-004 + 244.86000000000001 -2.1941957278650006E-004 + 244.92000000000002 -2.1973933198605702E-004 + 244.97999999999996 -2.1985787271731883E-004 + 245.03999999999996 -2.1977999923461557E-004 + 245.09999999999997 -2.1951079731807690E-004 + 245.15999999999997 -2.1905553290515973E-004 + 245.21999999999997 -2.1841963655943656E-004 + 245.27999999999997 -2.1760875492163648E-004 + 245.33999999999997 -2.1662868978978550E-004 + 245.39999999999998 -2.1548536323901974E-004 + 245.45999999999998 -2.1418486081688513E-004 + 245.51999999999998 -2.1273334377230722E-004 + 245.57999999999998 -2.1113709261300577E-004 + 245.63999999999999 -2.0940248598023842E-004 + 245.69999999999999 -2.0753594663196426E-004 + 245.75999999999999 -2.0554397062398703E-004 + 245.81999999999999 -2.0343313087799826E-004 + 245.88000000000000 -2.0121000053062432E-004 + 245.94000000000000 -1.9888120867049975E-004 + 246.00000000000000 -1.9645338213527091E-004 + 246.06000000000000 -1.9393315442054997E-004 + 246.12000000000000 -1.9132714231118685E-004 + 246.18000000000001 -1.8864198040557611E-004 + 246.24000000000001 -1.8588424532746051E-004 + 246.30000000000001 -1.8306047037296817E-004 + 246.36000000000001 -1.8017714086485250E-004 + 246.42000000000002 -1.7724070618782103E-004 + 246.47999999999996 -1.7425748850939812E-004 + 246.53999999999996 -1.7123380023040149E-004 + 246.59999999999997 -1.6817582530051018E-004 + 246.65999999999997 -1.6508964216102311E-004 + 246.71999999999997 -1.6198123176365927E-004 + 246.77999999999997 -1.5885646599161628E-004 + 246.83999999999997 -1.5572109743317930E-004 + 246.89999999999998 -1.5258076067214903E-004 + 246.95999999999998 -1.4944092051422656E-004 + 247.01999999999998 -1.4630691567567595E-004 + 247.07999999999998 -1.4318394696463733E-004 + 247.13999999999999 -1.4007705325945217E-004 + 247.19999999999999 -1.3699112628642318E-004 + 247.25999999999999 -1.3393089693675288E-004 + 247.31999999999999 -1.3090090709217523E-004 + 247.38000000000000 -1.2790555024801611E-004 + 247.44000000000000 -1.2494906102008114E-004 + 247.50000000000000 -1.2203547731238118E-004 + 247.56000000000000 -1.1916865941640922E-004 + 247.62000000000000 -1.1635230238513183E-004 + 247.68000000000001 -1.1358991528694079E-004 + 247.74000000000001 -1.1088482447740661E-004 + 247.80000000000001 -1.0824017634364255E-004 + 247.86000000000001 -1.0565893096474970E-004 + 247.92000000000002 -1.0314385975936353E-004 + 247.97999999999996 -1.0069755597947059E-004 + 248.03999999999996 -9.8322405505169954E-005 + 248.09999999999997 -9.6020625135890799E-005 + 248.15999999999997 -9.3794230591104821E-005 + 248.21999999999997 -9.1645050090567227E-005 + 248.27999999999997 -8.9574709304868956E-005 + 248.33999999999997 -8.7584654837224166E-005 + 248.39999999999998 -8.5676133927065765E-005 + 248.45999999999998 -8.3850190232602123E-005 + 248.51999999999998 -8.2107684108786674E-005 + 248.57999999999998 -8.0449271842230843E-005 + 248.63999999999999 -7.8875423361094831E-005 + 248.69999999999999 -7.7386416244455415E-005 + 248.75999999999999 -7.5982345816670173E-005 + 248.81999999999999 -7.4663108896750639E-005 + 248.88000000000000 -7.3428435651507086E-005 + 248.94000000000000 -7.2277872948223824E-005 + 249.00000000000000 -7.1210799447567869E-005 + 249.06000000000000 -7.0226431384391602E-005 + 249.12000000000000 -6.9323818526259589E-005 + 249.18000000000001 -6.8501872174295500E-005 + 249.24000000000001 -6.7759344167020986E-005 + 249.30000000000001 -6.7094857941728069E-005 + 249.36000000000001 -6.6506903425994648E-005 + 249.42000000000002 -6.5993849065689532E-005 + 249.47999999999996 -6.5553938067226437E-005 + 249.53999999999996 -6.5185304730362397E-005 + 249.59999999999997 -6.4885967857219784E-005 + 249.65999999999997 -6.4653860198425110E-005 + 249.71999999999997 -6.4486806931036481E-005 + 249.77999999999997 -6.4382544872468441E-005 + 249.83999999999997 -6.4338718675585453E-005 + 249.89999999999998 -6.4352898463895835E-005 + 249.95999999999998 -6.4422577884645370E-005 + 250.01999999999998 -6.4545176824239712E-005 + 250.07999999999998 -6.4718035501420691E-005 + 250.13999999999999 -6.4938464894768780E-005 + 250.19999999999999 -6.5203694437159909E-005 + 250.25999999999999 -6.5510923701242151E-005 + 250.31999999999999 -6.5857307651841872E-005 + 250.38000000000000 -6.6239964151803670E-005 + 250.44000000000000 -6.6655997465910708E-005 + 250.50000000000000 -6.7102479822670280E-005 + 250.56000000000000 -6.7576485452044142E-005 + 250.62000000000000 -6.8075074440781164E-005 + 250.68000000000001 -6.8595322599662698E-005 + 250.74000000000001 -6.9134305409317932E-005 + 250.80000000000001 -6.9689114388041021E-005 + 250.86000000000001 -7.0256874826960777E-005 + 250.92000000000002 -7.0834734106007096E-005 + 250.97999999999996 -7.1419872110927313E-005 + 251.03999999999996 -7.2009492884516832E-005 + 251.09999999999997 -7.2600861787317482E-005 + 251.15999999999997 -7.3191283314151556E-005 + 251.21999999999997 -7.3778104127877975E-005 + 251.27999999999997 -7.4358735581844522E-005 + 251.33999999999997 -7.4930640500556932E-005 + 251.39999999999998 -7.5491348974256081E-005 + 251.45999999999998 -7.6038454046486044E-005 + 251.51999999999998 -7.6569621416134470E-005 + 251.57999999999998 -7.7082589286817156E-005 + 251.63999999999999 -7.7575166933790360E-005 + 251.69999999999999 -7.8045249789553112E-005 + 251.75999999999999 -7.8490810289167648E-005 + 251.81999999999999 -7.8909905054644171E-005 + 251.88000000000000 -7.9300680847965547E-005 + 251.94000000000000 -7.9661358070119638E-005 diff --git a/seisflows/tests/test_data/test_solver/002/traces/syn/AA.S000000.BXY.semd b/seisflows/tests/test_data/test_solver/002/traces/syn/AA.S000000.BXY.semd new file mode 100644 index 00000000..19dcbd51 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/traces/syn/AA.S000000.BXY.semd @@ -0,0 +1,5000 @@ + -48.000000000000000 0.0000000000000000 + -47.939999999999998 0.0000000000000000 + -47.880000000000003 0.0000000000000000 + -47.820000000000000 0.0000000000000000 + -47.759999999999998 0.0000000000000000 + -47.700000000000003 0.0000000000000000 + -47.640000000000001 0.0000000000000000 + -47.579999999999998 0.0000000000000000 + -47.520000000000003 0.0000000000000000 + -47.460000000000001 0.0000000000000000 + -47.399999999999999 0.0000000000000000 + -47.340000000000003 0.0000000000000000 + -47.280000000000001 0.0000000000000000 + -47.219999999999999 0.0000000000000000 + -47.159999999999997 0.0000000000000000 + -47.100000000000001 0.0000000000000000 + -47.039999999999999 0.0000000000000000 + -46.979999999999997 0.0000000000000000 + -46.920000000000002 0.0000000000000000 + -46.859999999999999 0.0000000000000000 + -46.799999999999997 0.0000000000000000 + -46.740000000000002 0.0000000000000000 + -46.680000000000000 0.0000000000000000 + -46.619999999999997 0.0000000000000000 + -46.560000000000002 0.0000000000000000 + -46.500000000000000 0.0000000000000000 + -46.439999999999998 0.0000000000000000 + -46.380000000000003 0.0000000000000000 + -46.320000000000000 0.0000000000000000 + -46.259999999999998 0.0000000000000000 + -46.200000000000003 0.0000000000000000 + -46.140000000000001 0.0000000000000000 + -46.079999999999998 0.0000000000000000 + -46.020000000000003 0.0000000000000000 + -45.960000000000001 0.0000000000000000 + -45.899999999999999 0.0000000000000000 + -45.840000000000003 0.0000000000000000 + -45.780000000000001 0.0000000000000000 + -45.719999999999999 0.0000000000000000 + -45.659999999999997 0.0000000000000000 + -45.600000000000001 0.0000000000000000 + -45.539999999999999 0.0000000000000000 + -45.479999999999997 0.0000000000000000 + -45.420000000000002 0.0000000000000000 + -45.359999999999999 0.0000000000000000 + -45.299999999999997 0.0000000000000000 + -45.240000000000002 0.0000000000000000 + -45.180000000000000 0.0000000000000000 + -45.119999999999997 0.0000000000000000 + -45.060000000000002 0.0000000000000000 + -45.000000000000000 0.0000000000000000 + -44.939999999999998 0.0000000000000000 + -44.880000000000003 0.0000000000000000 + -44.820000000000000 0.0000000000000000 + -44.759999999999998 0.0000000000000000 + -44.700000000000003 0.0000000000000000 + -44.640000000000001 0.0000000000000000 + -44.579999999999998 0.0000000000000000 + -44.520000000000003 0.0000000000000000 + -44.460000000000001 0.0000000000000000 + -44.399999999999999 0.0000000000000000 + -44.340000000000003 0.0000000000000000 + -44.280000000000001 0.0000000000000000 + -44.219999999999999 0.0000000000000000 + -44.159999999999997 0.0000000000000000 + -44.100000000000001 0.0000000000000000 + -44.039999999999999 0.0000000000000000 + -43.980000000000004 0.0000000000000000 + -43.920000000000002 0.0000000000000000 + -43.859999999999999 0.0000000000000000 + -43.799999999999997 0.0000000000000000 + -43.740000000000002 0.0000000000000000 + -43.680000000000000 0.0000000000000000 + -43.619999999999997 0.0000000000000000 + -43.560000000000002 0.0000000000000000 + -43.500000000000000 0.0000000000000000 + -43.439999999999998 0.0000000000000000 + -43.380000000000003 0.0000000000000000 + -43.320000000000000 0.0000000000000000 + -43.259999999999998 0.0000000000000000 + -43.200000000000003 0.0000000000000000 + -43.140000000000001 0.0000000000000000 + -43.079999999999998 0.0000000000000000 + -43.020000000000003 0.0000000000000000 + -42.960000000000001 0.0000000000000000 + -42.899999999999999 0.0000000000000000 + -42.840000000000003 0.0000000000000000 + -42.780000000000001 0.0000000000000000 + -42.719999999999999 0.0000000000000000 + -42.659999999999997 0.0000000000000000 + -42.600000000000001 0.0000000000000000 + -42.539999999999999 0.0000000000000000 + -42.480000000000004 0.0000000000000000 + -42.420000000000002 0.0000000000000000 + -42.359999999999999 0.0000000000000000 + -42.299999999999997 0.0000000000000000 + -42.240000000000002 0.0000000000000000 + -42.180000000000000 0.0000000000000000 + -42.119999999999997 0.0000000000000000 + -42.060000000000002 0.0000000000000000 + -42.000000000000000 0.0000000000000000 + -41.939999999999998 0.0000000000000000 + -41.880000000000003 0.0000000000000000 + -41.820000000000000 0.0000000000000000 + -41.759999999999998 0.0000000000000000 + -41.700000000000003 0.0000000000000000 + -41.640000000000001 0.0000000000000000 + -41.579999999999998 0.0000000000000000 + -41.520000000000003 0.0000000000000000 + -41.460000000000001 0.0000000000000000 + -41.399999999999999 0.0000000000000000 + -41.340000000000003 0.0000000000000000 + -41.280000000000001 0.0000000000000000 + -41.219999999999999 0.0000000000000000 + -41.159999999999997 0.0000000000000000 + -41.100000000000001 0.0000000000000000 + -41.039999999999999 0.0000000000000000 + -40.980000000000004 0.0000000000000000 + -40.920000000000002 0.0000000000000000 + -40.859999999999999 0.0000000000000000 + -40.799999999999997 0.0000000000000000 + -40.740000000000002 0.0000000000000000 + -40.680000000000000 0.0000000000000000 + -40.619999999999997 0.0000000000000000 + -40.560000000000002 0.0000000000000000 + -40.500000000000000 0.0000000000000000 + -40.439999999999998 0.0000000000000000 + -40.380000000000003 0.0000000000000000 + -40.320000000000000 0.0000000000000000 + -40.259999999999998 0.0000000000000000 + -40.200000000000003 0.0000000000000000 + -40.140000000000001 0.0000000000000000 + -40.079999999999998 0.0000000000000000 + -40.020000000000003 0.0000000000000000 + -39.960000000000001 0.0000000000000000 + -39.899999999999999 0.0000000000000000 + -39.840000000000003 0.0000000000000000 + -39.780000000000001 0.0000000000000000 + -39.719999999999999 0.0000000000000000 + -39.659999999999997 0.0000000000000000 + -39.600000000000001 0.0000000000000000 + -39.539999999999999 0.0000000000000000 + -39.480000000000004 0.0000000000000000 + -39.420000000000002 0.0000000000000000 + -39.359999999999999 0.0000000000000000 + -39.299999999999997 0.0000000000000000 + -39.240000000000002 0.0000000000000000 + -39.180000000000000 0.0000000000000000 + -39.120000000000005 0.0000000000000000 + -39.060000000000002 0.0000000000000000 + -39.000000000000000 0.0000000000000000 + -38.939999999999998 0.0000000000000000 + -38.880000000000003 0.0000000000000000 + -38.820000000000000 0.0000000000000000 + -38.759999999999998 0.0000000000000000 + -38.700000000000003 0.0000000000000000 + -38.640000000000001 0.0000000000000000 + -38.579999999999998 0.0000000000000000 + -38.519999999999996 0.0000000000000000 + -38.460000000000001 0.0000000000000000 + -38.399999999999999 0.0000000000000000 + -38.340000000000003 0.0000000000000000 + -38.280000000000001 0.0000000000000000 + -38.219999999999999 0.0000000000000000 + -38.159999999999997 0.0000000000000000 + -38.100000000000001 0.0000000000000000 + -38.039999999999999 0.0000000000000000 + -37.980000000000004 0.0000000000000000 + -37.920000000000002 0.0000000000000000 + -37.859999999999999 0.0000000000000000 + -37.799999999999997 0.0000000000000000 + -37.740000000000002 0.0000000000000000 + -37.680000000000000 0.0000000000000000 + -37.620000000000005 0.0000000000000000 + -37.560000000000002 0.0000000000000000 + -37.500000000000000 0.0000000000000000 + -37.439999999999998 0.0000000000000000 + -37.380000000000003 0.0000000000000000 + -37.320000000000000 0.0000000000000000 + -37.259999999999998 0.0000000000000000 + -37.200000000000003 0.0000000000000000 + -37.140000000000001 0.0000000000000000 + -37.079999999999998 0.0000000000000000 + -37.019999999999996 0.0000000000000000 + -36.960000000000001 0.0000000000000000 + -36.899999999999999 0.0000000000000000 + -36.840000000000003 0.0000000000000000 + -36.780000000000001 0.0000000000000000 + -36.719999999999999 0.0000000000000000 + -36.659999999999997 0.0000000000000000 + -36.600000000000001 0.0000000000000000 + -36.539999999999999 0.0000000000000000 + -36.480000000000004 0.0000000000000000 + -36.420000000000002 0.0000000000000000 + -36.359999999999999 0.0000000000000000 + -36.299999999999997 0.0000000000000000 + -36.240000000000002 0.0000000000000000 + -36.180000000000000 0.0000000000000000 + -36.120000000000005 0.0000000000000000 + -36.060000000000002 0.0000000000000000 + -36.000000000000000 0.0000000000000000 + -35.939999999999998 0.0000000000000000 + -35.880000000000003 0.0000000000000000 + -35.820000000000000 0.0000000000000000 + -35.759999999999998 0.0000000000000000 + -35.700000000000003 0.0000000000000000 + -35.640000000000001 0.0000000000000000 + -35.579999999999998 0.0000000000000000 + -35.519999999999996 0.0000000000000000 + -35.460000000000001 0.0000000000000000 + -35.399999999999999 0.0000000000000000 + -35.340000000000003 0.0000000000000000 + -35.280000000000001 0.0000000000000000 + -35.219999999999999 0.0000000000000000 + -35.159999999999997 0.0000000000000000 + -35.100000000000001 0.0000000000000000 + -35.039999999999999 0.0000000000000000 + -34.980000000000004 0.0000000000000000 + -34.920000000000002 0.0000000000000000 + -34.859999999999999 0.0000000000000000 + -34.799999999999997 0.0000000000000000 + -34.740000000000002 0.0000000000000000 + -34.680000000000000 0.0000000000000000 + -34.620000000000005 0.0000000000000000 + -34.560000000000002 0.0000000000000000 + -34.500000000000000 0.0000000000000000 + -34.439999999999998 0.0000000000000000 + -34.380000000000003 0.0000000000000000 + -34.320000000000000 0.0000000000000000 + -34.259999999999998 0.0000000000000000 + -34.200000000000003 0.0000000000000000 + -34.140000000000001 0.0000000000000000 + -34.079999999999998 0.0000000000000000 + -34.020000000000003 0.0000000000000000 + -33.960000000000001 0.0000000000000000 + -33.899999999999999 0.0000000000000000 + -33.840000000000003 0.0000000000000000 + -33.780000000000001 0.0000000000000000 + -33.719999999999999 0.0000000000000000 + -33.659999999999997 0.0000000000000000 + -33.600000000000001 0.0000000000000000 + -33.539999999999999 0.0000000000000000 + -33.480000000000004 0.0000000000000000 + -33.420000000000002 0.0000000000000000 + -33.359999999999999 0.0000000000000000 + -33.299999999999997 0.0000000000000000 + -33.240000000000002 0.0000000000000000 + -33.180000000000000 0.0000000000000000 + -33.120000000000005 0.0000000000000000 + -33.060000000000002 0.0000000000000000 + -33.000000000000000 0.0000000000000000 + -32.939999999999998 0.0000000000000000 + -32.880000000000003 0.0000000000000000 + -32.820000000000000 0.0000000000000000 + -32.759999999999998 0.0000000000000000 + -32.700000000000003 0.0000000000000000 + -32.640000000000001 0.0000000000000000 + -32.579999999999998 0.0000000000000000 + -32.520000000000003 0.0000000000000000 + -32.460000000000001 0.0000000000000000 + -32.399999999999999 0.0000000000000000 + -32.340000000000003 0.0000000000000000 + -32.280000000000001 0.0000000000000000 + -32.219999999999999 0.0000000000000000 + -32.159999999999997 0.0000000000000000 + -32.100000000000001 0.0000000000000000 + -32.039999999999999 0.0000000000000000 + -31.980000000000000 0.0000000000000000 + -31.920000000000002 0.0000000000000000 + -31.859999999999999 0.0000000000000000 + -31.800000000000001 0.0000000000000000 + -31.740000000000002 0.0000000000000000 + -31.680000000000000 0.0000000000000000 + -31.620000000000001 0.0000000000000000 + -31.560000000000002 0.0000000000000000 + -31.500000000000000 0.0000000000000000 + -31.440000000000001 0.0000000000000000 + -31.379999999999999 0.0000000000000000 + -31.320000000000000 0.0000000000000000 + -31.260000000000002 0.0000000000000000 + -31.199999999999999 0.0000000000000000 + -31.140000000000001 0.0000000000000000 + -31.080000000000002 0.0000000000000000 + -31.020000000000000 0.0000000000000000 + -30.960000000000001 0.0000000000000000 + -30.900000000000002 0.0000000000000000 + -30.840000000000000 0.0000000000000000 + -30.780000000000001 0.0000000000000000 + -30.719999999999999 0.0000000000000000 + -30.660000000000000 0.0000000000000000 + -30.600000000000001 0.0000000000000000 + -30.539999999999999 0.0000000000000000 + -30.480000000000000 0.0000000000000000 + -30.420000000000002 0.0000000000000000 + -30.359999999999999 0.0000000000000000 + -30.300000000000001 0.0000000000000000 + -30.240000000000002 0.0000000000000000 + -30.180000000000000 0.0000000000000000 + -30.120000000000001 0.0000000000000000 + -30.060000000000002 0.0000000000000000 + -30.000000000000000 0.0000000000000000 + -29.940000000000001 0.0000000000000000 + -29.879999999999999 0.0000000000000000 + -29.820000000000000 0.0000000000000000 + -29.760000000000002 0.0000000000000000 + -29.699999999999999 0.0000000000000000 + -29.640000000000001 0.0000000000000000 + -29.580000000000002 0.0000000000000000 + -29.520000000000000 0.0000000000000000 + -29.460000000000001 0.0000000000000000 + -29.400000000000002 0.0000000000000000 + -29.340000000000000 0.0000000000000000 + -29.280000000000001 0.0000000000000000 + -29.220000000000002 0.0000000000000000 + -29.160000000000000 0.0000000000000000 + -29.100000000000001 0.0000000000000000 + -29.039999999999999 0.0000000000000000 + -28.980000000000000 0.0000000000000000 + -28.920000000000002 0.0000000000000000 + -28.859999999999999 0.0000000000000000 + -28.800000000000001 0.0000000000000000 + -28.740000000000002 0.0000000000000000 + -28.680000000000000 0.0000000000000000 + -28.620000000000001 0.0000000000000000 + -28.560000000000002 0.0000000000000000 + -28.500000000000000 0.0000000000000000 + -28.440000000000001 0.0000000000000000 + -28.379999999999999 0.0000000000000000 + -28.320000000000000 0.0000000000000000 + -28.260000000000002 0.0000000000000000 + -28.199999999999999 0.0000000000000000 + -28.140000000000001 0.0000000000000000 + -28.080000000000002 0.0000000000000000 + -28.020000000000000 0.0000000000000000 + -27.960000000000001 0.0000000000000000 + -27.900000000000002 0.0000000000000000 + -27.840000000000000 0.0000000000000000 + -27.780000000000001 0.0000000000000000 + -27.720000000000002 0.0000000000000000 + -27.660000000000000 0.0000000000000000 + -27.600000000000001 0.0000000000000000 + -27.539999999999999 0.0000000000000000 + -27.480000000000000 0.0000000000000000 + -27.420000000000002 0.0000000000000000 + -27.359999999999999 0.0000000000000000 + -27.300000000000001 0.0000000000000000 + -27.240000000000002 0.0000000000000000 + -27.180000000000000 0.0000000000000000 + -27.120000000000001 0.0000000000000000 + -27.060000000000002 0.0000000000000000 + -27.000000000000000 0.0000000000000000 + -26.940000000000001 0.0000000000000000 + -26.880000000000003 0.0000000000000000 + -26.820000000000000 0.0000000000000000 + -26.760000000000002 0.0000000000000000 + -26.699999999999999 0.0000000000000000 + -26.640000000000001 0.0000000000000000 + -26.580000000000002 0.0000000000000000 + -26.520000000000000 0.0000000000000000 + -26.460000000000001 0.0000000000000000 + -26.400000000000002 0.0000000000000000 + -26.340000000000000 0.0000000000000000 + -26.280000000000001 0.0000000000000000 + -26.220000000000002 0.0000000000000000 + -26.160000000000000 0.0000000000000000 + -26.100000000000001 0.0000000000000000 + -26.039999999999999 0.0000000000000000 + -25.980000000000000 0.0000000000000000 + -25.920000000000002 0.0000000000000000 + -25.859999999999999 0.0000000000000000 + -25.800000000000001 0.0000000000000000 + -25.740000000000002 0.0000000000000000 + -25.680000000000000 0.0000000000000000 + -25.620000000000001 0.0000000000000000 + -25.560000000000002 0.0000000000000000 + -25.500000000000000 0.0000000000000000 + -25.440000000000001 0.0000000000000000 + -25.380000000000003 0.0000000000000000 + -25.320000000000000 0.0000000000000000 + -25.260000000000002 0.0000000000000000 + -25.199999999999999 0.0000000000000000 + -25.140000000000001 0.0000000000000000 + -25.080000000000002 0.0000000000000000 + -25.020000000000000 0.0000000000000000 + -24.960000000000001 0.0000000000000000 + -24.900000000000002 0.0000000000000000 + -24.840000000000000 0.0000000000000000 + -24.780000000000001 0.0000000000000000 + -24.720000000000002 0.0000000000000000 + -24.660000000000000 0.0000000000000000 + -24.600000000000001 0.0000000000000000 + -24.539999999999999 0.0000000000000000 + -24.480000000000000 0.0000000000000000 + -24.420000000000002 0.0000000000000000 + -24.359999999999999 0.0000000000000000 + -24.300000000000001 0.0000000000000000 + -24.240000000000002 0.0000000000000000 + -24.180000000000000 0.0000000000000000 + -24.120000000000001 0.0000000000000000 + -24.060000000000002 0.0000000000000000 + -24.000000000000000 0.0000000000000000 + -23.940000000000001 0.0000000000000000 + -23.880000000000003 0.0000000000000000 + -23.820000000000000 0.0000000000000000 + -23.760000000000002 0.0000000000000000 + -23.699999999999999 0.0000000000000000 + -23.640000000000001 0.0000000000000000 + -23.580000000000002 0.0000000000000000 + -23.520000000000000 0.0000000000000000 + -23.460000000000001 0.0000000000000000 + -23.400000000000002 0.0000000000000000 + -23.340000000000000 0.0000000000000000 + -23.280000000000001 0.0000000000000000 + -23.220000000000002 0.0000000000000000 + -23.160000000000000 0.0000000000000000 + -23.100000000000001 0.0000000000000000 + -23.039999999999999 0.0000000000000000 + -22.980000000000000 0.0000000000000000 + -22.920000000000002 0.0000000000000000 + -22.859999999999999 0.0000000000000000 + -22.800000000000001 0.0000000000000000 + -22.740000000000002 0.0000000000000000 + -22.680000000000000 0.0000000000000000 + -22.620000000000001 0.0000000000000000 + -22.560000000000002 0.0000000000000000 + -22.500000000000000 0.0000000000000000 + -22.440000000000001 0.0000000000000000 + -22.380000000000003 0.0000000000000000 + -22.320000000000000 0.0000000000000000 + -22.260000000000002 0.0000000000000000 + -22.199999999999999 0.0000000000000000 + -22.140000000000001 0.0000000000000000 + -22.080000000000002 0.0000000000000000 + -22.020000000000000 0.0000000000000000 + -21.960000000000001 0.0000000000000000 + -21.900000000000002 0.0000000000000000 + -21.840000000000000 0.0000000000000000 + -21.780000000000001 0.0000000000000000 + -21.720000000000002 0.0000000000000000 + -21.660000000000000 0.0000000000000000 + -21.600000000000001 0.0000000000000000 + -21.540000000000003 0.0000000000000000 + -21.480000000000000 0.0000000000000000 + -21.420000000000002 0.0000000000000000 + -21.359999999999999 0.0000000000000000 + -21.300000000000001 0.0000000000000000 + -21.240000000000002 0.0000000000000000 + -21.180000000000000 0.0000000000000000 + -21.120000000000001 0.0000000000000000 + -21.060000000000002 0.0000000000000000 + -21.000000000000000 0.0000000000000000 + -20.940000000000001 0.0000000000000000 + -20.880000000000003 0.0000000000000000 + -20.820000000000000 0.0000000000000000 + -20.760000000000002 0.0000000000000000 + -20.699999999999999 0.0000000000000000 + -20.640000000000001 0.0000000000000000 + -20.580000000000002 0.0000000000000000 + -20.520000000000000 0.0000000000000000 + -20.460000000000001 0.0000000000000000 + -20.400000000000002 0.0000000000000000 + -20.340000000000000 0.0000000000000000 + -20.280000000000001 0.0000000000000000 + -20.220000000000002 0.0000000000000000 + -20.160000000000000 0.0000000000000000 + -20.100000000000001 0.0000000000000000 + -20.040000000000003 0.0000000000000000 + -19.980000000000000 0.0000000000000000 + -19.920000000000002 0.0000000000000000 + -19.859999999999999 0.0000000000000000 + -19.800000000000001 0.0000000000000000 + -19.740000000000002 0.0000000000000000 + -19.680000000000000 0.0000000000000000 + -19.620000000000001 0.0000000000000000 + -19.560000000000002 0.0000000000000000 + -19.500000000000000 0.0000000000000000 + -19.440000000000001 0.0000000000000000 + -19.380000000000003 0.0000000000000000 + -19.320000000000000 0.0000000000000000 + -19.260000000000002 0.0000000000000000 + -19.200000000000003 0.0000000000000000 + -19.140000000000001 0.0000000000000000 + -19.080000000000002 0.0000000000000000 + -19.020000000000000 0.0000000000000000 + -18.960000000000001 0.0000000000000000 + -18.900000000000002 0.0000000000000000 + -18.840000000000000 0.0000000000000000 + -18.780000000000001 0.0000000000000000 + -18.720000000000002 0.0000000000000000 + -18.660000000000000 0.0000000000000000 + -18.600000000000001 0.0000000000000000 + -18.540000000000003 0.0000000000000000 + -18.480000000000000 0.0000000000000000 + -18.420000000000002 0.0000000000000000 + -18.359999999999999 0.0000000000000000 + -18.300000000000001 0.0000000000000000 + -18.240000000000002 0.0000000000000000 + -18.180000000000000 0.0000000000000000 + -18.120000000000001 0.0000000000000000 + -18.060000000000002 0.0000000000000000 + -18.000000000000000 0.0000000000000000 + -17.940000000000001 0.0000000000000000 + -17.880000000000003 0.0000000000000000 + -17.820000000000000 0.0000000000000000 + -17.760000000000002 0.0000000000000000 + -17.700000000000003 0.0000000000000000 + -17.640000000000001 0.0000000000000000 + -17.580000000000002 0.0000000000000000 + -17.520000000000000 0.0000000000000000 + -17.460000000000001 0.0000000000000000 + -17.400000000000002 0.0000000000000000 + -17.340000000000000 0.0000000000000000 + -17.280000000000001 0.0000000000000000 + -17.220000000000002 0.0000000000000000 + -17.160000000000000 0.0000000000000000 + -17.100000000000001 0.0000000000000000 + -17.040000000000003 0.0000000000000000 + -16.980000000000000 0.0000000000000000 + -16.920000000000002 0.0000000000000000 + -16.859999999999999 0.0000000000000000 + -16.800000000000001 0.0000000000000000 + -16.740000000000002 0.0000000000000000 + -16.680000000000000 0.0000000000000000 + -16.620000000000001 0.0000000000000000 + -16.560000000000002 0.0000000000000000 + -16.500000000000000 0.0000000000000000 + -16.440000000000001 0.0000000000000000 + -16.380000000000003 0.0000000000000000 + -16.320000000000000 0.0000000000000000 + -16.260000000000002 0.0000000000000000 + -16.200000000000003 0.0000000000000000 + -16.140000000000001 0.0000000000000000 + -16.080000000000002 0.0000000000000000 + -16.020000000000000 0.0000000000000000 + -15.960000000000001 0.0000000000000000 + -15.899999999999999 0.0000000000000000 + -15.840000000000003 0.0000000000000000 + -15.780000000000001 0.0000000000000000 + -15.719999999999999 0.0000000000000000 + -15.660000000000004 0.0000000000000000 + -15.600000000000001 0.0000000000000000 + -15.539999999999999 0.0000000000000000 + -15.480000000000004 0.0000000000000000 + -15.420000000000002 0.0000000000000000 + -15.359999999999999 0.0000000000000000 + -15.300000000000004 0.0000000000000000 + -15.240000000000002 0.0000000000000000 + -15.180000000000000 0.0000000000000000 + -15.120000000000005 0.0000000000000000 + -15.060000000000002 0.0000000000000000 + -15.000000000000000 0.0000000000000000 + -14.939999999999998 0.0000000000000000 + -14.880000000000003 0.0000000000000000 + -14.820000000000000 0.0000000000000000 + -14.759999999999998 0.0000000000000000 + -14.700000000000003 0.0000000000000000 + -14.640000000000001 0.0000000000000000 + -14.579999999999998 0.0000000000000000 + -14.520000000000003 0.0000000000000000 + -14.460000000000001 0.0000000000000000 + -14.399999999999999 0.0000000000000000 + -14.340000000000003 0.0000000000000000 + -14.280000000000001 0.0000000000000000 + -14.219999999999999 0.0000000000000000 + -14.160000000000004 0.0000000000000000 + -14.100000000000001 0.0000000000000000 + -14.039999999999999 0.0000000000000000 + -13.980000000000004 0.0000000000000000 + -13.920000000000002 0.0000000000000000 + -13.859999999999999 0.0000000000000000 + -13.800000000000004 0.0000000000000000 + -13.740000000000002 0.0000000000000000 + -13.680000000000000 0.0000000000000000 + -13.620000000000005 0.0000000000000000 + -13.560000000000002 0.0000000000000000 + -13.500000000000000 0.0000000000000000 + -13.439999999999998 0.0000000000000000 + -13.380000000000003 0.0000000000000000 + -13.320000000000000 0.0000000000000000 + -13.259999999999998 0.0000000000000000 + -13.200000000000003 0.0000000000000000 + -13.140000000000001 0.0000000000000000 + -13.079999999999998 0.0000000000000000 + -13.020000000000003 0.0000000000000000 + -12.960000000000001 0.0000000000000000 + -12.899999999999999 0.0000000000000000 + -12.840000000000003 0.0000000000000000 + -12.780000000000001 0.0000000000000000 + -12.719999999999999 0.0000000000000000 + -12.660000000000004 0.0000000000000000 + -12.600000000000001 0.0000000000000000 + -12.539999999999999 0.0000000000000000 + -12.480000000000004 0.0000000000000000 + -12.420000000000002 0.0000000000000000 + -12.359999999999999 0.0000000000000000 + -12.300000000000004 0.0000000000000000 + -12.240000000000002 0.0000000000000000 + -12.180000000000000 0.0000000000000000 + -12.120000000000005 0.0000000000000000 + -12.060000000000002 0.0000000000000000 + -12.000000000000000 0.0000000000000000 + -11.940000000000005 0.0000000000000000 + -11.880000000000003 0.0000000000000000 + -11.820000000000000 0.0000000000000000 + -11.759999999999998 0.0000000000000000 + -11.700000000000003 0.0000000000000000 + -11.640000000000001 0.0000000000000000 + -11.579999999999998 0.0000000000000000 + -11.520000000000003 0.0000000000000000 + -11.460000000000001 0.0000000000000000 + -11.399999999999999 0.0000000000000000 + -11.340000000000003 0.0000000000000000 + -11.280000000000001 0.0000000000000000 + -11.219999999999999 0.0000000000000000 + -11.160000000000004 0.0000000000000000 + -11.100000000000001 0.0000000000000000 + -11.039999999999999 0.0000000000000000 + -10.980000000000004 0.0000000000000000 + -10.920000000000002 0.0000000000000000 + -10.859999999999999 0.0000000000000000 + -10.800000000000004 0.0000000000000000 + -10.740000000000002 0.0000000000000000 + -10.680000000000000 0.0000000000000000 + -10.620000000000005 0.0000000000000000 + -10.560000000000002 0.0000000000000000 + -10.500000000000000 0.0000000000000000 + -10.440000000000005 0.0000000000000000 + -10.380000000000003 0.0000000000000000 + -10.320000000000000 0.0000000000000000 + -10.259999999999998 0.0000000000000000 + -10.200000000000003 0.0000000000000000 + -10.140000000000001 0.0000000000000000 + -10.079999999999998 0.0000000000000000 + -10.020000000000003 0.0000000000000000 + -9.9600000000000009 0.0000000000000000 + -9.8999999999999986 0.0000000000000000 + -9.8400000000000034 0.0000000000000000 + -9.7800000000000011 0.0000000000000000 + -9.7199999999999989 0.0000000000000000 + -9.6600000000000037 0.0000000000000000 + -9.6000000000000014 0.0000000000000000 + -9.5399999999999991 0.0000000000000000 + -9.4800000000000040 0.0000000000000000 + -9.4200000000000017 0.0000000000000000 + -9.3599999999999994 0.0000000000000000 + -9.3000000000000043 0.0000000000000000 + -9.2400000000000020 0.0000000000000000 + -9.1799999999999997 0.0000000000000000 + -9.1200000000000045 0.0000000000000000 + -9.0600000000000023 0.0000000000000000 + -9.0000000000000000 0.0000000000000000 + -8.9400000000000048 0.0000000000000000 + -8.8800000000000026 0.0000000000000000 + -8.8200000000000003 0.0000000000000000 + -8.7599999999999980 0.0000000000000000 + -8.7000000000000028 0.0000000000000000 + -8.6400000000000006 0.0000000000000000 + -8.5799999999999983 0.0000000000000000 + -8.5200000000000031 0.0000000000000000 + -8.4600000000000009 0.0000000000000000 + -8.3999999999999986 0.0000000000000000 + -8.3400000000000034 0.0000000000000000 + -8.2800000000000011 0.0000000000000000 + -8.2199999999999989 0.0000000000000000 + -8.1600000000000037 0.0000000000000000 + -8.1000000000000014 0.0000000000000000 + -8.0399999999999991 0.0000000000000000 + -7.9800000000000040 0.0000000000000000 + -7.9200000000000017 0.0000000000000000 + -7.8599999999999994 0.0000000000000000 + -7.8000000000000043 0.0000000000000000 + -7.7400000000000020 0.0000000000000000 + -7.6799999999999997 0.0000000000000000 + -7.6200000000000045 0.0000000000000000 + -7.5600000000000023 0.0000000000000000 + -7.5000000000000000 0.0000000000000000 + -7.4400000000000048 0.0000000000000000 + -7.3800000000000026 0.0000000000000000 + -7.3200000000000003 0.0000000000000000 + -7.2599999999999980 0.0000000000000000 + -7.2000000000000028 0.0000000000000000 + -7.1400000000000006 0.0000000000000000 + -7.0799999999999983 0.0000000000000000 + -7.0200000000000031 0.0000000000000000 + -6.9600000000000009 0.0000000000000000 + -6.8999999999999986 0.0000000000000000 + -6.8400000000000034 0.0000000000000000 + -6.7800000000000011 0.0000000000000000 + -6.7199999999999989 0.0000000000000000 + -6.6600000000000037 0.0000000000000000 + -6.6000000000000014 0.0000000000000000 + -6.5399999999999991 0.0000000000000000 + -6.4800000000000040 0.0000000000000000 + -6.4200000000000017 0.0000000000000000 + -6.3599999999999994 0.0000000000000000 + -6.3000000000000043 0.0000000000000000 + -6.2400000000000020 0.0000000000000000 + -6.1799999999999997 0.0000000000000000 + -6.1200000000000045 0.0000000000000000 + -6.0600000000000023 0.0000000000000000 + -6.0000000000000000 0.0000000000000000 + -5.9400000000000048 0.0000000000000000 + -5.8800000000000026 0.0000000000000000 + -5.8200000000000003 0.0000000000000000 + -5.7600000000000051 0.0000000000000000 + -5.7000000000000028 0.0000000000000000 + -5.6400000000000006 0.0000000000000000 + -5.5799999999999983 0.0000000000000000 + -5.5200000000000031 0.0000000000000000 + -5.4600000000000009 0.0000000000000000 + -5.3999999999999986 0.0000000000000000 + -5.3400000000000034 0.0000000000000000 + -5.2800000000000011 0.0000000000000000 + -5.2199999999999989 0.0000000000000000 + -5.1600000000000037 0.0000000000000000 + -5.1000000000000014 0.0000000000000000 + -5.0399999999999991 0.0000000000000000 + -4.9800000000000040 0.0000000000000000 + -4.9200000000000017 0.0000000000000000 + -4.8599999999999994 0.0000000000000000 + -4.8000000000000043 0.0000000000000000 + -4.7400000000000020 0.0000000000000000 + -4.6799999999999997 0.0000000000000000 + -4.6200000000000045 0.0000000000000000 + -4.5600000000000023 0.0000000000000000 + -4.5000000000000000 0.0000000000000000 + -4.4400000000000048 0.0000000000000000 + -4.3800000000000026 0.0000000000000000 + -4.3200000000000003 0.0000000000000000 + -4.2600000000000051 0.0000000000000000 + -4.2000000000000028 0.0000000000000000 + -4.1400000000000006 0.0000000000000000 + -4.0799999999999983 0.0000000000000000 + -4.0200000000000031 0.0000000000000000 + -3.9600000000000009 0.0000000000000000 + -3.8999999999999986 0.0000000000000000 + -3.8400000000000034 0.0000000000000000 + -3.7800000000000011 0.0000000000000000 + -3.7199999999999989 0.0000000000000000 + -3.6600000000000037 0.0000000000000000 + -3.6000000000000014 0.0000000000000000 + -3.5399999999999991 0.0000000000000000 + -3.4800000000000040 0.0000000000000000 + -3.4200000000000017 0.0000000000000000 + -3.3599999999999994 0.0000000000000000 + -3.3000000000000043 0.0000000000000000 + -3.2400000000000020 0.0000000000000000 + -3.1799999999999997 0.0000000000000000 + -3.1200000000000045 0.0000000000000000 + -3.0600000000000023 0.0000000000000000 + -3.0000000000000000 0.0000000000000000 + -2.9400000000000048 0.0000000000000000 + -2.8800000000000026 0.0000000000000000 + -2.8200000000000003 0.0000000000000000 + -2.7600000000000051 0.0000000000000000 + -2.7000000000000028 0.0000000000000000 + -2.6400000000000006 0.0000000000000000 + -2.5799999999999983 0.0000000000000000 + -2.5200000000000031 0.0000000000000000 + -2.4600000000000009 0.0000000000000000 + -2.3999999999999986 0.0000000000000000 + -2.3400000000000034 0.0000000000000000 + -2.2800000000000011 0.0000000000000000 + -2.2199999999999989 0.0000000000000000 + -2.1600000000000037 0.0000000000000000 + -2.1000000000000014 0.0000000000000000 + -2.0399999999999991 0.0000000000000000 + -1.9800000000000040 0.0000000000000000 + -1.9200000000000017 0.0000000000000000 + -1.8599999999999994 0.0000000000000000 + -1.8000000000000043 0.0000000000000000 + -1.7400000000000020 0.0000000000000000 + -1.6799999999999997 0.0000000000000000 + -1.6200000000000045 0.0000000000000000 + -1.5600000000000023 0.0000000000000000 + -1.5000000000000000 0.0000000000000000 + -1.4400000000000048 0.0000000000000000 + -1.3800000000000026 0.0000000000000000 + -1.3200000000000003 0.0000000000000000 + -1.2600000000000051 0.0000000000000000 + -1.2000000000000028 0.0000000000000000 + -1.1400000000000006 0.0000000000000000 + -1.0799999999999983 0.0000000000000000 + -1.0200000000000031 0.0000000000000000 + -0.96000000000000085 0.0000000000000000 + -0.89999999999999858 0.0000000000000000 + -0.84000000000000341 0.0000000000000000 + -0.78000000000000114 0.0000000000000000 + -0.71999999999999886 0.0000000000000000 + -0.66000000000000369 0.0000000000000000 + -0.60000000000000142 0.0000000000000000 + -0.53999999999999915 0.0000000000000000 + -0.48000000000000398 0.0000000000000000 + -0.42000000000000171 0.0000000000000000 + -0.35999999999999943 0.0000000000000000 + -0.30000000000000426 0.0000000000000000 + -0.24000000000000199 0.0000000000000000 + -0.17999999999999972 0.0000000000000000 + -0.12000000000000455 0.0000000000000000 + -6.0000000000002274E-002 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 + 5.9999999999995168E-002 0.0000000000000000 + 0.11999999999999744 0.0000000000000000 + 0.17999999999999972 0.0000000000000000 + 0.23999999999999488 0.0000000000000000 + 0.29999999999999716 0.0000000000000000 + 0.35999999999999943 0.0000000000000000 + 0.42000000000000171 0.0000000000000000 + 0.47999999999999687 0.0000000000000000 + 0.53999999999999915 0.0000000000000000 + 0.60000000000000142 0.0000000000000000 + 0.65999999999999659 0.0000000000000000 + 0.71999999999999886 0.0000000000000000 + 0.78000000000000114 0.0000000000000000 + 0.83999999999999631 0.0000000000000000 + 0.89999999999999858 0.0000000000000000 + 0.96000000000000085 0.0000000000000000 + 1.0199999999999960 0.0000000000000000 + 1.0799999999999983 0.0000000000000000 + 1.1400000000000006 0.0000000000000000 + 1.1999999999999957 0.0000000000000000 + 1.2599999999999980 0.0000000000000000 + 1.3200000000000003 0.0000000000000000 + 1.3799999999999955 0.0000000000000000 + 1.4399999999999977 0.0000000000000000 + 1.5000000000000000 0.0000000000000000 + 1.5599999999999952 0.0000000000000000 + 1.6199999999999974 0.0000000000000000 + 1.6799999999999997 0.0000000000000000 + 1.7399999999999949 0.0000000000000000 + 1.7999999999999972 0.0000000000000000 + 1.8599999999999994 0.0000000000000000 + 1.9200000000000017 0.0000000000000000 + 1.9799999999999969 0.0000000000000000 + 2.0399999999999991 0.0000000000000000 + 2.1000000000000014 0.0000000000000000 + 2.1599999999999966 0.0000000000000000 + 2.2199999999999989 0.0000000000000000 + 2.2800000000000011 0.0000000000000000 + 2.3399999999999963 0.0000000000000000 + 2.3999999999999986 0.0000000000000000 + 2.4600000000000009 0.0000000000000000 + 2.5199999999999960 0.0000000000000000 + 2.5799999999999983 0.0000000000000000 + 2.6400000000000006 0.0000000000000000 + 2.6999999999999957 0.0000000000000000 + 2.7599999999999980 0.0000000000000000 + 2.8200000000000003 0.0000000000000000 + 2.8799999999999955 0.0000000000000000 + 2.9399999999999977 0.0000000000000000 + 3.0000000000000000 0.0000000000000000 + 3.0599999999999952 0.0000000000000000 + 3.1199999999999974 0.0000000000000000 + 3.1799999999999997 0.0000000000000000 + 3.2399999999999949 0.0000000000000000 + 3.2999999999999972 0.0000000000000000 + 3.3599999999999994 0.0000000000000000 + 3.4199999999999946 0.0000000000000000 + 3.4799999999999969 0.0000000000000000 + 3.5399999999999991 0.0000000000000000 + 3.6000000000000014 0.0000000000000000 + 3.6599999999999966 0.0000000000000000 + 3.7199999999999989 0.0000000000000000 + 3.7800000000000011 0.0000000000000000 + 3.8399999999999963 0.0000000000000000 + 3.8999999999999986 0.0000000000000000 + 3.9600000000000009 0.0000000000000000 + 4.0199999999999960 0.0000000000000000 + 4.0799999999999983 0.0000000000000000 + 4.1400000000000006 0.0000000000000000 + 4.1999999999999957 0.0000000000000000 + 4.2599999999999980 0.0000000000000000 + 4.3200000000000003 0.0000000000000000 + 4.3799999999999955 0.0000000000000000 + 4.4399999999999977 0.0000000000000000 + 4.5000000000000000 0.0000000000000000 + 4.5599999999999952 0.0000000000000000 + 4.6199999999999974 0.0000000000000000 + 4.6799999999999997 0.0000000000000000 + 4.7399999999999949 0.0000000000000000 + 4.7999999999999972 0.0000000000000000 + 4.8599999999999994 0.0000000000000000 + 4.9199999999999946 0.0000000000000000 + 4.9799999999999969 0.0000000000000000 + 5.0399999999999991 0.0000000000000000 + 5.1000000000000014 0.0000000000000000 + 5.1599999999999966 0.0000000000000000 + 5.2199999999999989 0.0000000000000000 + 5.2800000000000011 0.0000000000000000 + 5.3399999999999963 0.0000000000000000 + 5.3999999999999986 0.0000000000000000 + 5.4600000000000009 0.0000000000000000 + 5.5199999999999960 0.0000000000000000 + 5.5799999999999983 0.0000000000000000 + 5.6400000000000006 0.0000000000000000 + 5.6999999999999957 0.0000000000000000 + 5.7599999999999980 0.0000000000000000 + 5.8200000000000003 0.0000000000000000 + 5.8799999999999955 0.0000000000000000 + 5.9399999999999977 0.0000000000000000 + 6.0000000000000000 0.0000000000000000 + 6.0599999999999952 0.0000000000000000 + 6.1199999999999974 0.0000000000000000 + 6.1799999999999997 0.0000000000000000 + 6.2399999999999949 0.0000000000000000 + 6.2999999999999972 0.0000000000000000 + 6.3599999999999994 0.0000000000000000 + 6.4199999999999946 0.0000000000000000 + 6.4799999999999969 0.0000000000000000 + 6.5399999999999991 0.0000000000000000 + 6.6000000000000014 0.0000000000000000 + 6.6599999999999966 0.0000000000000000 + 6.7199999999999989 0.0000000000000000 + 6.7800000000000011 0.0000000000000000 + 6.8399999999999963 0.0000000000000000 + 6.8999999999999986 0.0000000000000000 + 6.9600000000000009 0.0000000000000000 + 7.0199999999999960 0.0000000000000000 + 7.0799999999999983 0.0000000000000000 + 7.1400000000000006 0.0000000000000000 + 7.1999999999999957 0.0000000000000000 + 7.2599999999999980 0.0000000000000000 + 7.3200000000000003 0.0000000000000000 + 7.3799999999999955 0.0000000000000000 + 7.4399999999999977 0.0000000000000000 + 7.5000000000000000 0.0000000000000000 + 7.5599999999999952 0.0000000000000000 + 7.6199999999999974 0.0000000000000000 + 7.6799999999999997 0.0000000000000000 + 7.7399999999999949 0.0000000000000000 + 7.7999999999999972 0.0000000000000000 + 7.8599999999999994 0.0000000000000000 + 7.9199999999999946 0.0000000000000000 + 7.9799999999999969 0.0000000000000000 + 8.0399999999999991 0.0000000000000000 + 8.1000000000000014 0.0000000000000000 + 8.1599999999999966 0.0000000000000000 + 8.2199999999999989 0.0000000000000000 + 8.2800000000000011 0.0000000000000000 + 8.3399999999999963 0.0000000000000000 + 8.3999999999999986 0.0000000000000000 + 8.4600000000000009 0.0000000000000000 + 8.5199999999999960 0.0000000000000000 + 8.5799999999999983 0.0000000000000000 + 8.6400000000000006 0.0000000000000000 + 8.6999999999999957 0.0000000000000000 + 8.7599999999999980 0.0000000000000000 + 8.8200000000000003 0.0000000000000000 + 8.8799999999999955 0.0000000000000000 + 8.9399999999999977 0.0000000000000000 + 9.0000000000000000 0.0000000000000000 + 9.0599999999999952 0.0000000000000000 + 9.1199999999999974 0.0000000000000000 + 9.1799999999999997 0.0000000000000000 + 9.2399999999999949 0.0000000000000000 + 9.2999999999999972 0.0000000000000000 + 9.3599999999999994 0.0000000000000000 + 9.4199999999999946 0.0000000000000000 + 9.4799999999999969 7.2266133582118980E-040 + 9.5399999999999991 1.8173820470092260E-039 + 9.5999999999999943 3.0690579755267261E-039 + 9.6599999999999966 4.4776892852095209E-039 + 9.7199999999999989 5.8863205948923157E-039 + 9.7800000000000011 7.1428765374633996E-039 + 9.8399999999999963 7.8034796458200550E-039 + 9.8999999999999986 7.2915424809379965E-039 + 9.9600000000000009 5.7030263102384579E-039 + 10.019999999999996 2.8098460989809246E-039 + 10.079999999999998 -1.3001138280316339E-039 + 10.140000000000001 -6.1009481544981573E-039 + 10.199999999999996 -1.1440682272342822E-038 + 10.259999999999998 -1.6780417045530810E-038 + 10.320000000000000 -2.1470103669919924E-038 + 10.379999999999995 -2.4783029313431301E-038 + 10.439999999999998 -2.6013585820355057E-038 + 10.500000000000000 -2.1485635306671410E-038 + 10.559999999999995 -1.3942389872980798E-038 + 10.619999999999997 -3.3251864617385301E-039 + 10.680000000000000 1.2617502362857970E-038 + 10.739999999999995 3.0605081894751767E-038 + 10.799999999999997 4.9498637038061379E-038 + 10.859999999999999 6.4188872202482570E-038 + 10.919999999999995 6.7060230079581437E-038 + 10.979999999999997 5.2898290364530329E-038 + 11.039999999999999 2.4144250536108362E-038 + 11.099999999999994 -1.9760352650622225E-038 + 11.159999999999997 -7.0455569569560684E-038 + 11.219999999999999 -1.2351767455523189E-037 + 11.280000000000001 -1.7868126183124889E-037 + 11.339999999999996 -2.3099289030525806E-037 + 11.399999999999999 -2.7105360466825137E-037 + 11.460000000000001 -2.7519647956902206E-037 + 11.519999999999996 -2.2394665323079562E-037 + 11.579999999999998 -1.1370586416802308E-037 + 11.640000000000001 3.0371892040734029E-038 + 11.699999999999996 1.9933368114441397E-037 + 11.759999999999998 3.8447198736136705E-037 + 11.820000000000000 5.9090053130625381E-037 + 11.879999999999995 7.8856563258181288E-037 + 11.939999999999998 9.1154669067042958E-037 + 12.000000000000000 9.0927043330662528E-037 + 12.059999999999995 7.7229467443663647E-037 + 12.119999999999997 4.9676573577349575E-037 + 12.180000000000000 8.5106783799276722E-038 + 12.239999999999995 -4.0366907742110555E-037 + 12.299999999999997 -9.2862989360590671E-037 + 12.359999999999999 -1.4623638747048113E-036 + 12.419999999999995 -1.9462718660450906E-036 + 12.479999999999997 -2.3443721871334205E-036 + 12.539999999999999 -2.5624945517182532E-036 + 12.599999999999994 -2.5297458696285488E-036 + 12.659999999999997 -2.2136194477163089E-036 + 12.719999999999999 -1.5878413207851567E-036 + 12.780000000000001 -6.8675513582433493E-037 + 12.839999999999996 4.3639050031683728E-037 + 12.899999999999999 1.7084731952136768E-036 + 12.960000000000001 2.9962535906637586E-036 + 13.019999999999996 4.0595604248080094E-036 + 13.079999999999998 4.6105579973778940E-036 + 13.140000000000001 4.4228286752795054E-036 + 13.199999999999996 3.3783200886920355E-036 + 13.259999999999998 1.4800286273126889E-036 + 13.320000000000000 -1.3925364408760836E-036 + 13.379999999999995 -5.1108008838838440E-036 + 13.439999999999998 -9.3361232404259675E-036 + 13.500000000000000 -1.3683272024210578E-035 + 13.559999999999995 -1.7599241561066957E-035 + 13.619999999999997 -2.0302468048350060E-035 + 13.680000000000000 -2.1129396710931356E-035 + 13.739999999999995 -1.9455870678147641E-035 + 13.799999999999997 -1.4781957134499535E-035 + 13.859999999999999 -6.8040643740284157E-036 + 13.919999999999995 4.4442550389847274E-036 + 13.979999999999997 1.8781898987329756E-035 + 14.039999999999999 3.5743081865405029E-035 + 14.099999999999994 5.3858257082513891E-035 + 14.159999999999997 7.1604161595934980E-035 + 14.219999999999999 8.7111740610505344E-035 + 14.280000000000001 9.8337451528580276E-035 + 14.339999999999996 1.0309722972192866E-034 + 14.399999999999999 9.9247799613742702E-035 + 14.460000000000001 8.4954437566983215E-035 + 14.519999999999996 5.8959205667498312E-035 + 14.579999999999998 2.0795366063379677E-035 + 14.640000000000001 -2.9329950290910248E-035 + 14.699999999999996 -8.9715300273695010E-035 + 14.759999999999998 -1.5766154676727905E-034 + 14.820000000000000 -2.2901844478042257E-034 + 14.879999999999995 -2.9838414073485836E-034 + 14.939999999999998 -3.5913706551322768E-034 + 15.000000000000000 -4.0382040358845961E-034 + 15.059999999999995 -4.2455549272628541E-034 + 15.119999999999997 -4.1363457036113150E-034 + 15.180000000000000 -3.6447148802286268E-034 + 15.239999999999995 -2.7222959042690803E-034 + 15.299999999999997 -1.3431237871451608E-034 + 15.359999999999999 4.8278077491360691E-035 + 15.419999999999995 2.7056896374184189E-034 + 15.479999999999997 5.2287715269153162E-034 + 15.539999999999999 7.9062981703029169E-034 + 15.599999999999994 1.0544405587956526E-033 + 15.659999999999997 1.2905906104310893E-033 + 15.719999999999999 1.4721072185778694E-033 + 15.780000000000001 1.5702681002602898E-033 + 15.839999999999996 1.5566663259487191E-033 + 15.899999999999999 1.4055234748783680E-033 + 15.960000000000001 1.0967284166497941E-033 + 16.019999999999996 6.1870097037278339E-034 + 16.079999999999998 -2.8547878003528213E-035 + 16.140000000000001 -8.3078359322082325E-034 + 16.200000000000003 -1.7573339347340591E-033 + 16.259999999999991 -2.7598831313601916E-033 + 16.319999999999993 -3.7723771760823976E-033 + 16.379999999999995 -4.7124144395524063E-033 + 16.439999999999998 -5.4843042426540708E-033 + 16.500000000000000 -5.9839343018024486E-033 + 16.560000000000002 -6.1054674397436087E-033 + 16.620000000000005 -5.7495963810883469E-033 + 16.679999999999993 -4.8333159058919286E-033 + 16.739999999999995 -3.3004636040593767E-033 + 16.799999999999997 -1.1324251108701861E-033 + 16.859999999999999 1.6416586433070234E-033 + 16.920000000000002 4.9363995697611182E-033 + 16.980000000000004 8.6042750700211075E-033 + 17.039999999999992 1.2433446844189036E-032 + 17.099999999999994 1.6150288717678930E-032 + 17.159999999999997 1.9427467062360143E-032 + 17.219999999999999 2.1898122235979407E-032 + 17.280000000000001 2.3176409437953571E-032 + 17.340000000000003 2.2884144924545473E-032 + 17.399999999999991 2.0682709483464276E-032 + 17.459999999999994 1.6308963436305806E-032 + 17.519999999999996 9.6130937349118722E-033 + 17.579999999999998 5.9589085061012113E-034 + 17.640000000000001 -1.0557608226463401E-032 + 17.700000000000003 -2.3451566941524339E-032 + 17.759999999999991 -3.7463483234167150E-032 + 17.819999999999993 -5.1742570702143634E-032 + 17.879999999999995 -6.5225608459505160E-032 + 17.939999999999998 -7.6672809884579494E-032 + 18.000000000000000 -8.4725278000482884E-032 + 18.060000000000002 -8.7984231260757733E-032 + 18.120000000000005 -8.5110627264903327E-032 + 18.179999999999993 -7.4941914516471832E-032 + 18.239999999999995 -5.6620639605124012E-032 + 18.299999999999997 -2.9727632642520191E-032 + 18.359999999999999 5.5894462599924908E-033 + 18.420000000000002 4.8502878738250297E-032 + 18.480000000000004 9.7419053122612974E-032 + 18.539999999999992 1.4993210032909762E-031 + 18.599999999999994 2.0282929068986504E-031 + 18.659999999999997 2.5215852109630654E-031 + 18.719999999999999 2.9336630711112084E-031 + 18.780000000000001 3.2151074404281928E-031 + 18.840000000000003 3.3154967785273491E-031 + 18.899999999999991 3.1869826968080674E-031 + 18.959999999999994 2.7884418609221283E-031 + 19.019999999999996 2.0900164745780066E-031 + 19.079999999999998 1.0777893596604358E-031 + 19.140000000000001 -2.4172759745569524E-032 + 19.200000000000003 -1.8376614921316468E-031 + 19.259999999999991 -3.6518117973116776E-031 + 19.319999999999993 -5.5970719522579971E-031 + 19.379999999999995 -7.5576497724372804E-031 + 19.439999999999998 -9.3914514407677473E-031 + 19.500000000000000 -1.0934903883073837E-030 + 19.560000000000002 -1.2010382724867322E-030 + 19.620000000000005 -1.2436246250719815E-030 + 19.679999999999993 -1.2039286616113955E-030 + 19.739999999999995 -1.0669209388491427E-030 + 19.799999999999997 -8.2144943686441194E-031 + 19.859999999999999 -4.6187884307677948E-031 + 19.920000000000002 1.0325295537571012E-032 + 19.980000000000004 5.8519426286615249E-031 + 20.039999999999992 1.2431739117173991E-030 + 20.099999999999994 1.9545087598800242E-030 + 20.159999999999997 2.6792314338630986E-030 + 20.219999999999999 3.3678872348327376E-030 + 20.280000000000001 3.9630888371789347E-030 + 20.340000000000003 4.4019679947634753E-030 + 20.399999999999991 4.6195262488235138E-030 + 20.459999999999994 4.5528365504040689E-030 + 20.519999999999996 4.1459678286123065E-030 + 20.579999999999998 3.3554299118584184E-030 + 20.640000000000001 2.1558597166721136E-030 + 20.700000000000003 5.4559423708478905E-031 + 20.759999999999991 -1.4482886623739344E-030 + 20.819999999999993 -3.7659251483934170E-030 + 20.879999999999995 -6.3121029546308396E-030 + 20.939999999999998 -8.9556665214947475E-030 + 21.000000000000000 -1.1531319903817615E-029 + 21.060000000000002 -1.3844197730469270E-029 + 21.120000000000005 -1.5677424064302983E-029 + 21.179999999999993 -1.6802748522584018E-029 + 21.239999999999995 -1.6994117519204339E-029 + 21.299999999999997 -1.6043832493121645E-029 + 21.359999999999999 -1.3780684193718584E-029 + 21.420000000000002 -1.0089197691907866E-029 + 21.480000000000004 -4.9288815374909756E-030 + 21.539999999999992 1.6478559061717143E-030 + 21.599999999999994 9.4805987451944337E-030 + 21.659999999999997 1.8290239417048802E-029 + 21.719999999999999 2.7674299093253495E-029 + 21.780000000000001 3.7109746491555194E-029 + 21.840000000000003 4.5964594516365895E-029 + 21.899999999999991 5.3519172445506298E-029 + 21.959999999999994 5.8997520843724220E-029 + 22.019999999999996 6.1608723937160088E-029 + 22.079999999999998 6.0597310131326342E-029 + 22.140000000000001 5.5301059407999350E-029 + 22.200000000000003 4.5213751943230379E-029 + 22.259999999999991 3.0049571379731529E-029 + 22.319999999999993 9.8052471310592380E-030 + 22.379999999999995 -1.5184765895880074E-029 + 22.439999999999998 -4.4204919657964684E-029 + 22.500000000000000 -7.6132249126956662E-029 + 22.560000000000002 -1.0943191592970289E-028 + 22.619999999999990 -1.4217912211508911E-028 + 22.679999999999993 -1.7211079348504514E-028 + 22.739999999999995 -1.9670922345110396E-028 + 22.799999999999997 -2.1331815720893357E-028 + 22.859999999999999 -2.1928968478641629E-028 + 22.920000000000002 -2.1215810137661428E-028 + 22.980000000000004 -1.8983441507430513E-028 + 23.039999999999992 -1.5081274842298928E-028 + 23.099999999999994 -9.4377324605403247E-029 + 23.159999999999997 -2.0796993233023128E-029 + 23.219999999999999 6.8507521840676612E-029 + 23.280000000000001 1.7083919811238883E-028 + 23.340000000000003 2.8215904899611790E-028 + 23.399999999999991 3.9709362101616551E-028 + 23.459999999999994 5.0902850455196496E-028 + 23.519999999999996 6.1029751091902951E-028 + 23.579999999999998 6.9247215905860951E-028 + 23.640000000000001 7.4675185020924511E-028 + 23.700000000000003 7.6444732302060638E-028 + 23.759999999999991 7.3754461326540554E-028 + 23.819999999999993 6.5932799525934762E-028 + 23.879999999999995 5.2503377939752697E-028 + 23.939999999999998 3.3250021173466325E-028 + 24.000000000000000 8.2772490818325613E-029 + 24.060000000000002 -2.1938157743387531E-028 + 24.119999999999990 -5.6509342871721135E-028 + 24.179999999999993 -9.4119876203290335E-028 + 24.239999999999995 -1.3302694098774024E-027 + 24.299999999999997 -1.7109109783674302E-027 + 24.359999999999999 -2.0583518507156788E-027 + 24.420000000000002 -2.3453386844874710E-027 + 24.480000000000004 -2.5433391362620734E-027 + 24.539999999999992 -2.6240301863043867E-027 + 24.599999999999994 -2.5610339844237107E-027 + 24.659999999999997 -2.3318394658664518E-027 + 24.719999999999999 -1.9198288589725047E-027 + 24.780000000000001 -1.3163064745008416E-027 + 24.840000000000003 -5.2241277545729240E-028 + 24.899999999999991 4.4920927182030714E-028 + 24.959999999999994 1.5731338665680866E-027 + 25.019999999999996 2.8103978140679951E-027 + 25.079999999999998 4.1084032006632973E-027 + 25.140000000000001 5.4015986231370288E-027 + 25.200000000000003 6.6130263374944039E-027 + 25.259999999999991 7.6567958271119815E-027 + 25.319999999999993 8.4415003083492167E-027 + 25.379999999999995 8.8745408272282006E-027 + 25.439999999999998 8.8672667532734401E-027 + 25.500000000000000 8.3407779742115510E-027 + 25.560000000000002 7.2321774211209556E-027 + 25.619999999999990 5.5009940465043736E-027 + 25.679999999999993 3.1354437870032406E-027 + 25.739999999999995 1.5815399355607120E-028 + 25.799999999999997 -3.3690724613216863E-027 + 25.859999999999999 -7.3418792356901259E-027 + 25.920000000000002 -1.1611794933749268E-026 + 25.980000000000004 -1.5986890937443445E-026 + 26.039999999999992 -2.0235020230452798E-026 + 26.099999999999994 -2.4089878299978442E-026 + 26.159999999999997 -2.7260078032237858E-026 + 26.219999999999999 -2.9441237475071815E-026 + 26.280000000000001 -3.0330937128451309E-026 + 26.340000000000003 -2.9646236442439972E-026 + 26.399999999999991 -2.7143190476143395E-026 + 26.459999999999994 -2.2637664994504537E-026 + 26.519999999999996 -1.6026476623307217E-026 + 26.579999999999998 -7.3077530155227474E-027 + 26.640000000000001 3.4007917073243212E-027 + 26.700000000000003 1.5847070601556274E-026 + 26.759999999999991 2.9634797937413487E-026 + 26.819999999999993 4.4220071211411451E-026 + 26.879999999999995 5.8915755600190731E-026 + 26.939999999999998 7.2904808853586108E-026 + 27.000000000000000 8.5263428468704510E-026 + 27.060000000000002 9.4994528128526740E-026 + 27.119999999999990 1.0107145692625011E-025 + 27.179999999999993 1.0249142092580908E-025 + 27.239999999999995 9.8337207711375647E-026 + 27.299999999999997 8.7845261371939372E-026 + 27.359999999999999 7.0477300975871620E-026 + 27.420000000000002 4.5992005635164581E-026 + 27.480000000000004 1.4512603763804149E-026 + 27.539999999999992 -2.3414322602770333E-026 + 27.599999999999994 -6.6773797328400169E-026 + 27.659999999999997 -1.1405644291217936E-025 + 27.719999999999999 -1.6325637915352162E-025 + 27.780000000000001 -2.1189758935079591E-025 + 27.840000000000003 -2.5709248502434501E-025 + 27.899999999999991 -2.9563492969232958E-025 + 27.959999999999994 -3.2412880370148860E-025 + 28.019999999999996 -3.3915075758817175E-025 + 28.079999999999998 -3.3744408262100077E-025 + 28.140000000000001 -3.1613772727268138E-025 + 28.200000000000003 -2.7298230091437813E-025 + 28.259999999999991 -2.0659223558923791E-025 + 28.319999999999993 -1.1668083370514227E-025 + 28.379999999999995 -4.2734370535191232E-027 + 28.439999999999998 1.2811788800036607E-025 + 28.500000000000000 2.7637551815324021E-025 + 28.560000000000002 4.3472981364071258E-025 + 28.619999999999990 5.9580115323597881E-025 + 28.679999999999993 7.5074328022079090E-025 + 28.739999999999995 8.8949842129489713E-025 + 28.799999999999997 1.0011680614922825E-024 + 28.859999999999999 1.0744995236666356E-024 + 28.920000000000002 1.0984796656279735E-024 + 28.980000000000004 1.0630205024515151E-024 + 29.039999999999992 9.5971339393596294E-025 + 29.099999999999994 7.8261943903299258E-025 + 29.159999999999997 5.2905774630687903E-025 + 29.219999999999999 2.0034405477260063E-025 + 29.280000000000001 -1.9757091798053720E-025 + 29.340000000000003 -6.5361878690570045E-025 + 29.399999999999991 -1.1513421377212860E-024 + 29.459999999999994 -1.6688881462528456E-024 + 29.519999999999996 -2.1793160400500118E-024 + 29.579999999999998 -2.6512558305023100E-024 + 29.640000000000001 -3.0499454553548818E-024 + 29.700000000000003 -3.3386533933772311E-024 + 29.759999999999991 -3.4804786596772365E-024 + 29.819999999999993 -3.4404877589924473E-024 + 29.879999999999995 -3.1881330824276845E-024 + 29.939999999999998 -2.6998605878235956E-024 + 30.000000000000000 -1.9617931706959452E-024 + 30.060000000000002 -9.7234854149082770E-025 + 30.119999999999990 2.5537418330747063E-025 + 30.179999999999993 1.6916185008430997E-024 + 30.239999999999995 3.2886021642548692E-024 + 30.299999999999997 4.9799460715885028E-024 + 30.359999999999999 6.6810914676917151E-024 + 30.420000000000002 8.2908688455500291E-024 + 30.480000000000004 9.6943500110681277E-024 + 30.539999999999992 1.0767061202755400E-023 + 30.599999999999994 1.1380584545698117E-023 + 30.659999999999997 1.1409474374451563E-023 + 30.719999999999999 1.0739355535327762E-023 + 30.780000000000001 9.2759406965698979E-024 + 30.840000000000003 6.9546296232523920E-024 + 30.899999999999991 3.7502214461859708E-024 + 30.959999999999994 -3.1380687115613473E-025 + 31.019999999999996 -5.1570957785109298E-024 + 31.079999999999998 -1.0635985037841869E-023 + 31.140000000000001 -1.6539611658919388E-023 + 31.200000000000003 -2.2589277546769372E-023 + 31.259999999999991 -2.8441769620195089E-023 + 31.319999999999993 -3.3697217473009766E-023 + 31.379999999999995 -3.7911974793186651E-023 + 31.439999999999998 -4.0616698885134823E-023 + 31.500000000000000 -4.1339642848961491E-023 + 31.560000000000002 -3.9634773318981756E-023 + 31.619999999999990 -3.5114023946523208E-023 + 31.679999999999993 -2.7482550244826064E-023 + 31.739999999999995 -1.6575502669035468E-023 + 31.799999999999997 -2.3944067627364305E-024 + 31.859999999999999 1.4859115325918873E-023 + 31.920000000000002 3.4754812709284589E-023 + 31.980000000000004 5.6613192268437165E-023 + 32.039999999999992 7.9495677764366563E-023 + 32.099999999999994 1.0220816612248396E-022 + 32.159999999999997 1.2332054905278371E-022 + 32.219999999999999 1.4120408005956022E-022 + 32.280000000000001 1.5408801936634993E-022 + 32.340000000000003 1.6013585514299957E-022 + 32.399999999999991 1.5754061863925599E-022 + 32.459999999999994 1.4463735127893384E-022 + 32.519999999999996 1.2002948194354944E-022 + 32.579999999999998 8.2724550511820185E-023 + 32.640000000000001 3.2273081050430008E-023 + 32.700000000000003 -3.1096767372091855E-023 + 32.759999999999991 -1.0635730768469014E-022 + 32.819999999999993 -1.9158182652574383E-022 + 32.879999999999995 -2.8387728511129078E-022 + 32.939999999999998 -3.7935939529325298E-022 + 33.000000000000000 -4.7317959243679699E-022 + 33.060000000000002 -5.5961220676630620E-022 + 33.119999999999990 -6.3220809630110753E-022 + 33.179999999999993 -6.8401930314639703E-022 + 33.239999999999995 -7.0789493432432468E-022 + 33.299999999999997 -6.9684530100668307E-022 + 33.359999999999999 -6.4446705838669541E-022 + 33.420000000000002 -5.4541692173964452E-022 + 33.480000000000004 -3.9591704861479044E-022 + 33.539999999999992 -1.9426977648551811E-022 + 33.599999999999994 5.8644645918447769E-023 + 33.659999999999997 3.5891748834627038E-022 + 33.719999999999999 6.9924203987210040E-022 + 33.780000000000001 1.0686597341093070E-021 + 33.840000000000003 1.4524579970623995E-021 + 33.899999999999991 1.8322527781475432E-021 + 33.959999999999994 2.1862852091413900E-021 + 34.019999999999996 2.4899578171035068E-021 + 34.079999999999998 2.7166244613379128E-021 + 34.140000000000001 2.8386406256984381E-021 + 34.200000000000003 2.8286671708790129E-021 + 34.259999999999991 2.6612052289952434E-021 + 34.319999999999993 2.3143278079810513E-021 + 34.379999999999995 1.7715536621228113E-021 + 34.439999999999998 1.0237961749585837E-021 + 34.500000000000000 7.1302262302814846E-023 + 34.560000000000002 -1.0745161981771868E-021 + 34.619999999999990 -2.3894693091310525E-021 + 34.679999999999993 -3.8353094266374278E-021 + 34.739999999999995 -5.3589067062297895E-021 + 34.799999999999997 -6.8919991303575355E-021 + 34.859999999999999 -8.3516267740645002E-021 + 34.920000000000002 -9.6413484823660403E-021 + 34.980000000000004 -1.0653311783849902E-020 + 35.039999999999992 -1.1271223968070986E-020 + 35.099999999999994 -1.1374232649709678E-020 + 35.159999999999997 -1.0841686278399543E-020 + 35.219999999999999 -9.5586753406127216E-021 + 35.280000000000001 -7.4222371128442854E-021 + 35.340000000000003 -4.3480160658515029E-021 + 35.399999999999991 -2.7712762639415760E-022 + 35.459999999999994 4.8170830067454561E-021 + 35.519999999999996 1.0922760180704656E-020 + 35.579999999999998 1.7984134075220659E-020 + 35.640000000000001 2.5897463114831588E-020 + 35.700000000000003 3.4508768151791880E-020 + 35.759999999999991 4.3613894338709315E-020 + 35.819999999999993 5.2961264136691120E-020 + 35.879999999999995 6.2257836696098417E-020 + 35.939999999999998 7.1178616012833674E-020 + 36.000000000000000 7.9379875088276939E-020 + 36.060000000000002 8.6516376662739369E-020 + 36.119999999999990 9.2262386868304028E-020 + 36.179999999999993 9.6336432620758642E-020 + 36.239999999999995 9.8529217392500871E-020 + 36.299999999999997 9.8734158918474557E-020 + 36.359999999999999 9.6979498456898742E-020 + 36.420000000000002 9.3460958740374253E-020 + 36.479999999999990 8.8573435150620108E-020 + 36.539999999999992 8.2940112936932380E-020 + 36.599999999999994 7.7437179119551560E-020 + 36.659999999999997 7.3212275979071448E-020 + 36.719999999999999 7.1694748901957002E-020 + 36.780000000000001 7.4595282237009812E-020 + 36.840000000000003 8.3893798548142154E-020 + 36.899999999999991 1.0181373988554615E-019 + 36.959999999999994 1.3078101993568832E-019 + 37.019999999999996 1.7336784906083286E-019 + 37.079999999999998 2.3222094959810213E-019 + 37.140000000000001 3.0997444400771367E-019 + 37.200000000000003 4.0914956731779164E-019 + 37.259999999999991 5.3204293475669034E-019 + 37.319999999999993 6.8060754111378194E-019 + 37.379999999999995 8.5632933784039990E-019 + 37.439999999999998 1.0601047515555332E-018 + 37.500000000000000 1.2921259649159569E-018 + 37.560000000000002 1.5517783518940161E-018 + 37.619999999999990 1.8375554460803032E-018 + 37.679999999999993 2.1470014075403114E-018 + 37.739999999999995 2.4766807663687492E-018 + 37.799999999999997 2.8221836211413589E-018 + 37.859999999999999 3.1781674095406708E-018 + 37.920000000000002 3.5384368064658252E-018 + 37.979999999999990 3.8960551473924687E-018 + 38.039999999999992 4.2434898978744679E-018 + 38.099999999999994 4.5727730531022005E-018 + 38.159999999999997 4.8756716286994398E-018 + 38.219999999999999 5.1438454771840245E-018 + 38.280000000000001 5.3689687482907548E-018 + 38.340000000000003 5.5427921355437327E-018 + 38.399999999999991 5.6571102387425764E-018 + 38.459999999999994 5.7035994387344972E-018 + 38.519999999999996 5.6734800670111312E-018 + 38.579999999999998 5.5569624732611317E-018 + 38.640000000000001 5.3424450450299552E-018 + 38.700000000000003 5.0153813635256414E-018 + 38.759999999999991 4.5568067830955704E-018 + 38.819999999999993 3.9414296987390721E-018 + 38.879999999999995 3.1352967537314829E-018 + 38.939999999999998 2.0929292762116117E-018 + 39.000000000000000 7.5390794929823323E-019 + 39.060000000000002 -9.6110848133505132E-019 + 39.119999999999990 -3.1550351663495743E-018 + 39.179999999999993 -5.9596905246355598E-018 + 39.239999999999995 -9.5417521214248277E-018 + 39.299999999999997 -1.4109650968871689E-017 + 39.359999999999999 -1.9921095026355247E-017 + 39.420000000000002 -2.7291575087481188E-017 + 39.479999999999990 -3.6603717402350257E-017 + 39.539999999999992 -4.8317818133278954E-017 + 39.599999999999994 -6.2983344731946437E-017 + 39.659999999999997 -8.1251744839143553E-017 + 39.719999999999999 -1.0389099580360513E-016 + 39.780000000000001 -1.3180139086997729E-016 + 39.840000000000003 -1.6603380299092006E-016 + 39.899999999999991 -2.0780984010033369E-016 + 39.959999999999994 -2.5854504167094006E-016 + 40.019999999999996 -3.1987508887642308E-016 + 40.079999999999998 -3.9368572626668650E-016 + 40.140000000000001 -4.8214728771133835E-016 + 40.200000000000003 -5.8775489010942590E-016 + 40.259999999999991 -7.1337340814169602E-016 + 40.319999999999993 -8.6229057243286394E-016 + 40.379999999999995 -1.0382769198852546E-015 + 40.439999999999998 -1.2456565856503346E-015 + 40.500000000000000 -1.4893869236590064E-015 + 40.560000000000002 -1.7751485990098115E-015 + 40.619999999999990 -2.1094539280559565E-015 + 40.679999999999993 -2.4997617994550642E-015 + 40.739999999999995 -2.9546164968263267E-015 + 40.799999999999997 -3.4837988334785064E-015 + 40.859999999999999 -4.0985000969338253E-015 + 40.920000000000002 -4.8115107483713973E-015 + 40.979999999999990 -5.6374431800245649E-015 + 41.039999999999992 -6.5929676707632079E-015 + 41.099999999999994 -7.6970808054977609E-015 + 41.159999999999997 -8.9714043356802811E-015 + 41.219999999999999 -1.0440508664609394E-014 + 41.280000000000001 -1.2132268910323321E-014 + 41.340000000000003 -1.4078269656558922E-014 + 41.399999999999991 -1.6314217942856225E-014 + 41.459999999999994 -1.8880427194439152E-014 + 41.519999999999996 -2.1822321723370447E-014 + 41.579999999999998 -2.5190988906331407E-014 + 41.640000000000001 -2.9043774802863910E-014 + 41.700000000000003 -3.3444913019842679E-014 + 41.759999999999991 -3.8466227022610347E-014 + 41.819999999999993 -4.4187872453436160E-014 + 41.879999999999995 -5.0699066210323411E-014 + 41.939999999999998 -5.8098946048314487E-014 + 42.000000000000000 -6.6497397216710594E-014 + 42.060000000000002 -7.6015950068946731E-014 + 42.119999999999990 -8.6788689654666329E-014 + 42.179999999999993 -9.8963186204121845E-014 + 42.239999999999995 -1.1270131922789262E-013 + 42.299999999999997 -1.2818021758357178E-013 + 42.359999999999999 -1.4559311143289601E-013 + 42.420000000000002 -1.6514999206420362E-013 + 42.479999999999990 -1.8707831494894535E-013 + 42.539999999999992 -2.1162325079361363E-013 + 42.599999999999994 -2.3904810873792774E-013 + 42.659999999999997 -2.6963394843669639E-013 + 42.719999999999999 -3.0367924934176168E-013 + 42.780000000000001 -3.4149871865551650E-013 + 42.840000000000003 -3.8342173726964296E-013 + 42.899999999999991 -4.2978972187090178E-013 + 42.959999999999994 -4.8095266164865738E-013 + 43.019999999999996 -5.3726445297160548E-013 + 43.079999999999998 -5.9907688671010979E-013 + 43.140000000000001 -6.6673165491274882E-013 + 43.200000000000003 -7.4055028849675594E-013 + 43.259999999999991 -8.2082163275672459E-013 + 43.319999999999993 -9.0778641978074435E-013 + 43.379999999999995 -1.0016179252660144E-012 + 43.439999999999998 -1.1023987126473758E-012 + 43.500000000000000 -1.2100917296047595E-012 + 43.560000000000002 -1.3245062473553938E-012 + 43.619999999999990 -1.4452563025246285E-012 + 43.679999999999993 -1.5717103193447240E-012 + 43.739999999999995 -1.7029322231529053E-012 + 43.799999999999997 -1.8376104410454073E-012 + 43.859999999999999 -1.9739740893495769E-012 + 43.920000000000002 -2.1096930270537168E-012 + 43.979999999999990 -2.2417616627671338E-012 + 44.039999999999992 -2.3663598494110179E-012 + 44.099999999999994 -2.4786919568719501E-012 + 44.159999999999997 -2.5727972501571733E-012 + 44.219999999999999 -2.6413268904744424E-012 + 44.280000000000001 -2.6752872911346260E-012 + 44.340000000000003 -2.6637372462598735E-012 + 44.399999999999991 -2.5934381613010708E-012 + 44.459999999999994 -2.4484519182423343E-012 + 44.519999999999996 -2.2096635411920408E-012 + 44.579999999999998 -1.8542477797961419E-012 + 44.640000000000001 -1.3550314279658657E-012 + 44.700000000000003 -6.7977239894959453E-013 + 44.759999999999991 2.0966709490348851E-013 + 44.819999999999993 1.3582873437868802E-012 + 44.879999999999995 2.8190538616790245E-012 + 44.939999999999998 4.6541578138180513E-012 + 45.000000000000000 6.9364618994468751E-012 + 45.060000000000002 9.7511605926691811E-012 + 45.119999999999990 1.3197665292184812E-011 + 45.179999999999993 1.7391807990358316E-011 + 45.239999999999995 2.2468257738700770E-011 + 45.299999999999997 2.8583406974259931E-011 + 45.359999999999999 3.5918528076625502E-011 + 45.420000000000002 4.4683474095565355E-011 + 45.479999999999990 5.5120782418138047E-011 + 45.539999999999992 6.7510428453751627E-011 + 45.599999999999994 8.2175237553276120E-011 + 45.659999999999997 9.9486814107722484E-011 + 45.719999999999999 1.1987260376494988E-010 + 45.780000000000001 1.4382353197634798E-010 + 45.840000000000003 1.7190291163040818E-010 + 45.899999999999991 2.0475640696550419E-010 + 45.959999999999994 2.4312314643079729E-010 + 46.019999999999996 2.8784850710046532E-010 + 46.079999999999998 3.3989838062900784E-010 + 46.140000000000001 4.0037530711471845E-010 + 46.200000000000003 4.7053664295565368E-010 + 46.259999999999991 5.5181468827600980E-010 + 46.319999999999993 6.4584017862960191E-010 + 46.379999999999995 7.5446696716606829E-010 + 46.439999999999998 8.7980210500769637E-010 + 46.500000000000000 1.0242371193687389E-009 + 46.560000000000002 1.1904848476577077E-009 + 46.619999999999990 1.3816197322964710E-009 + 46.679999999999993 1.6011245040688724E-009 + 46.739999999999995 1.8529381454641415E-009 + 46.799999999999997 2.1415154055136237E-009 + 46.859999999999999 2.4718886723846913E-009 + 46.920000000000002 2.8497387415912551E-009 + 46.979999999999990 3.2814735249946950E-009 + 47.039999999999992 3.7743164869463624E-009 + 47.099999999999994 4.3364032881327088E-009 + 47.159999999999997 4.9768911429303914E-009 + 47.219999999999999 5.7060759208619146E-009 + 47.280000000000001 6.5355336523282049E-009 + 47.340000000000003 7.4782619061345798E-009 + 47.399999999999991 8.5488494306065770E-009 + 47.459999999999994 9.7636566409541145E-009 + 47.519999999999996 1.1141018861735715E-008 + 47.579999999999998 1.2701470059113816E-008 + 47.640000000000001 1.4467995192205515E-008 + 47.700000000000003 1.6466297411175808E-008 + 47.759999999999991 1.8725107985456559E-008 + 47.819999999999993 2.1276519831778335E-008 + 47.879999999999995 2.4156343294938518E-008 + 47.939999999999998 2.7404541571595527E-008 + 48.000000000000000 3.1065653587041591E-008 + 48.060000000000002 3.5189298831527560E-008 + 48.119999999999990 3.9830709248152924E-008 + 48.179999999999993 4.5051349794263489E-008 + 48.239999999999995 5.0919546945677276E-008 + 48.299999999999997 5.7511240967804197E-008 + 48.359999999999999 6.4910732921471498E-008 + 48.420000000000002 7.3211595225654256E-008 + 48.479999999999990 8.2517593304558271E-008 + 48.539999999999992 9.2943709640250716E-008 + 48.599999999999994 1.0461734263885115E-007 + 48.659999999999997 1.1767950263468151E-007 + 48.719999999999999 1.3228619319111319E-007 + 48.780000000000001 1.4860984350750248E-007 + 48.840000000000003 1.6684097188620492E-007 + 48.899999999999991 1.8718998006748177E-007 + 48.959999999999994 2.0988897988253176E-007 + 49.019999999999996 2.3519398532512900E-007 + 49.079999999999998 2.6338710895334291E-007 + 49.140000000000001 2.9477906215204975E-007 + 49.200000000000003 3.2971191307882426E-007 + 49.259999999999991 3.6856183870432707E-007 + 49.319999999999993 4.1174249289649146E-007 + 49.379999999999995 4.5970828731643214E-007 + 49.439999999999998 5.1295805593484982E-007 + 49.500000000000000 5.7203928454160227E-007 + 49.560000000000002 6.3755231206465112E-007 + 49.619999999999990 7.1015499169190362E-007 + 49.679999999999993 7.9056789787464126E-007 + 49.739999999999995 8.7957941111191939E-007 + 49.799999999999997 9.7805230835311746E-007 + 49.859999999999999 1.0869293494483498E-006 + 49.920000000000002 1.2072408758992902E-006 + 49.979999999999990 1.3401110784567558E-006 + 50.039999999999992 1.4867672042015383E-006 + 50.099999999999994 1.6485468556241491E-006 + 50.159999999999997 1.8269081290737552E-006 + 50.219999999999999 2.0234382061284206E-006 + 50.280000000000001 2.2398647734664352E-006 + 50.340000000000003 2.4780667314120050E-006 + 50.399999999999991 2.7400858739076722E-006 + 50.459999999999994 3.0281405487811333E-006 + 50.519999999999996 3.3446386195820515E-006 + 50.579999999999998 3.6921911482917330E-006 + 50.640000000000001 4.0736298339360616E-006 + 50.700000000000003 4.4920220371923846E-006 + 50.759999999999991 4.9506886213144991E-006 + 50.819999999999993 5.4532215829609295E-006 + 50.879999999999995 6.0035058035251267E-006 + 50.939999999999998 6.6057382119121663E-006 + 51.000000000000000 7.2644497356816404E-006 + 51.060000000000002 7.9845311218280468E-006 + 51.119999999999990 8.7712561985082968E-006 + 51.179999999999993 9.6303085996258721E-006 + 51.239999999999995 1.0567803945524692E-005 + 51.299999999999997 1.1590329953291122E-005 + 51.359999999999999 1.2704967215432184E-005 + 51.420000000000002 1.3919325724884227E-005 + 51.479999999999990 1.5241576901315366E-005 + 51.539999999999992 1.6680494027989869E-005 + 51.599999999999994 1.8245484668058927E-005 + 51.659999999999997 1.9946626285331279E-005 + 51.719999999999999 2.1794714458027945E-005 + 51.780000000000001 2.3801305871400966E-005 + 51.840000000000003 2.5978754448717235E-005 + 51.899999999999991 2.8340262838377944E-005 + 51.959999999999994 3.0899935494948959E-005 + 52.019999999999996 3.3672817102291690E-005 + 52.079999999999998 3.6674949937600513E-005 + 52.140000000000001 3.9923427900583161E-005 + 52.200000000000003 4.3436461840638848E-005 + 52.259999999999991 4.7233418509719244E-005 + 52.319999999999993 5.1334895194056727E-005 + 52.379999999999995 5.5762765557888864E-005 + 52.439999999999998 6.0540263586001604E-005 + 52.500000000000000 6.5692024875021334E-005 + 52.560000000000002 7.1244162339322741E-005 + 52.619999999999990 7.7224355853887743E-005 + 52.679999999999993 8.3661877874251182E-005 + 52.739999999999995 9.0587684240114213E-005 + 52.799999999999997 9.8034502569550744E-005 + 52.859999999999999 1.0603686827201775E-004 + 52.920000000000002 1.1463123427204357E-004 + 52.979999999999990 1.2385602327279357E-004 + 53.039999999999992 1.3375168551311908E-004 + 53.099999999999994 1.4436083086878613E-004 + 53.159999999999997 1.5572823353536509E-004 + 53.219999999999999 1.6790096974914366E-004 + 53.280000000000001 1.8092840770910911E-004 + 53.339999999999989 1.9486238389415956E-004 + 53.399999999999991 2.0975719357748063E-004 + 53.459999999999994 2.2566969273710177E-004 + 53.519999999999996 2.4265933019073033E-004 + 53.579999999999998 2.6078829966095547E-004 + 53.640000000000001 2.8012149748457321E-004 + 53.700000000000003 3.0072666547117732E-004 + 53.759999999999991 3.2267437488592673E-004 + 53.819999999999993 3.4603813138765397E-004 + 53.879999999999995 3.7089442194672184E-004 + 53.939999999999998 3.9732269837655388E-004 + 54.000000000000000 4.2540552695817302E-004 + 54.060000000000002 4.5522849013974857E-004 + 54.119999999999990 4.8688022661037009E-004 + 54.179999999999993 5.2045262719039817E-004 + 54.239999999999995 5.5604053385041770E-004 + 54.299999999999997 5.9374211269365212E-004 + 54.359999999999999 6.3365839834087444E-004 + 54.420000000000002 6.7589370169069665E-004 + 54.479999999999990 7.2055533270587576E-004 + 54.539999999999992 7.6775364215666392E-004 + 54.599999999999994 8.1760196518256727E-004 + 54.659999999999997 8.7021651460116988E-004 + 54.719999999999999 9.2571647187201047E-004 + 54.780000000000001 9.8422355285647002E-004 + 54.839999999999989 1.0458622766329508E-003 + 54.899999999999991 1.1107596470300886E-003 + 54.959999999999994 1.1790450211443331E-003 + 55.019999999999996 1.2508502088343803E-003 + 55.079999999999998 1.3263086166382615E-003 + 55.140000000000001 1.4055559711152828E-003 + 55.200000000000003 1.4887295926402815E-003 + 55.259999999999991 1.5759684651145281E-003 + 55.319999999999993 1.6674125148156190E-003 + 55.379999999999995 1.7632027410005001E-003 + 55.439999999999998 1.8634813842392536E-003 + 55.500000000000000 1.9683900128215836E-003 + 55.560000000000002 2.0780714427830861E-003 + 55.619999999999990 2.1926677997593791E-003 + 55.679999999999993 2.3123206982168950E-003 + 55.739999999999995 2.4371709903029293E-003 + 55.799999999999997 2.5673581991785843E-003 + 55.859999999999999 2.7030201026377546E-003 + 55.920000000000002 2.8442921901918107E-003 + 55.979999999999990 2.9913078677615158E-003 + 56.039999999999992 3.1441972786060276E-003 + 56.099999999999994 3.3030868480895693E-003 + 56.159999999999997 3.4680999205498049E-003 + 56.219999999999999 3.6393545292080190E-003 + 56.280000000000001 3.8169638258039951E-003 + 56.339999999999989 4.0010359035715266E-003 + 56.399999999999991 4.1916727982445941E-003 + 56.459999999999994 4.3889697704902683E-003 + 56.519999999999996 4.5930146618126388E-003 + 56.579999999999998 4.8038883081980193E-003 + 56.640000000000001 5.0216625962497784E-003 + 56.700000000000003 5.2464006489681648E-003 + 56.759999999999991 5.4781563230279651E-003 + 56.819999999999993 5.7169732935715605E-003 + 56.879999999999995 5.9628842614087392E-003 + 56.939999999999998 6.2159112723653032E-003 + 57.000000000000000 6.4760642806735141E-003 + 57.060000000000002 6.7433412219482730E-003 + 57.119999999999990 7.0177256117967858E-003 + 57.179999999999993 7.2991903600136349E-003 + 57.239999999999995 7.5876907061791883E-003 + 57.299999999999997 7.8831694832086682E-003 + 57.359999999999999 8.1855549463557657E-003 + 57.420000000000002 8.4947571114454435E-003 + 57.479999999999990 8.8106725944583787E-003 + 57.539999999999992 9.1331807716814144E-003 + 57.599999999999994 9.4621429726618467E-003 + 57.659999999999997 9.7974041456242861E-003 + 57.719999999999999 1.0138791782180462E-002 + 57.780000000000001 1.0486114761839792E-002 + 57.839999999999989 1.0839163018194925E-002 + 57.899999999999991 1.1197709916838884E-002 + 57.959999999999994 1.1561509119894163E-002 + 58.019999999999996 1.1930295674060261E-002 + 58.079999999999998 1.2303784557643069E-002 + 58.140000000000001 1.2681673452546716E-002 + 58.200000000000003 1.3063638236803997E-002 + 58.259999999999991 1.3449340891658834E-002 + 58.319999999999993 1.3838419254969973E-002 + 58.379999999999995 1.4230493762610597E-002 + 58.439999999999998 1.4625169087616206E-002 + 58.500000000000000 1.5022029455704656E-002 + 58.560000000000002 1.5420642080138510E-002 + 58.619999999999990 1.5820555727767350E-002 + 58.679999999999993 1.6221302683851892E-002 + 58.739999999999995 1.6622399639337357E-002 + 58.799999999999997 1.7023345324206966E-002 + 58.859999999999999 1.7423625532854731E-002 + 58.920000000000002 1.7822712507162837E-002 + 58.979999999999990 1.8220062106948088E-002 + 59.039999999999992 1.8615116737333379E-002 + 59.099999999999994 1.9007308795992255E-002 + 59.159999999999997 1.9396059462934743E-002 + 59.219999999999999 1.9780780923531461E-002 + 59.280000000000001 2.0160873341172007E-002 + 59.339999999999989 2.0535733704029700E-002 + 59.399999999999991 2.0904748407171547E-002 + 59.459999999999994 2.1267301190614103E-002 + 59.519999999999996 2.1622769665715778E-002 + 59.579999999999998 2.1970530604363322E-002 + 59.640000000000001 2.2309957407637148E-002 + 59.700000000000003 2.2640424683727282E-002 + 59.759999999999991 2.2961306806754921E-002 + 59.819999999999993 2.3271984632846947E-002 + 59.879999999999995 2.3571839168697858E-002 + 59.939999999999998 2.3860260364465390E-002 + 60.000000000000000 2.4136644973632330E-002 + 60.060000000000002 2.4400396375234210E-002 + 60.119999999999990 2.4650932768060851E-002 + 60.179999999999993 2.4887679555332054E-002 + 60.239999999999995 2.5110079601579009E-002 + 60.299999999999997 2.5317585890238976E-002 + 60.359999999999999 2.5509674076604417E-002 + 60.420000000000002 2.5685833976743011E-002 + 60.479999999999990 2.5845574266513242E-002 + 60.539999999999992 2.5988428010126980E-002 + 60.599999999999994 2.6113948186171781E-002 + 60.659999999999997 2.6221710523328008E-002 + 60.719999999999999 2.6311318475637006E-002 + 60.780000000000001 2.6382398888333772E-002 + 60.839999999999989 2.6434607751248094E-002 + 60.899999999999991 2.6467630514891753E-002 + 60.959999999999994 2.6481180994777049E-002 + 61.019999999999996 2.6475002459048616E-002 + 61.079999999999998 2.6448870178427362E-002 + 61.140000000000001 2.6402594290192070E-002 + 61.200000000000003 2.6336017740389909E-002 + 61.259999999999991 2.6249014410405593E-002 + 61.319999999999993 2.6141497397499294E-002 + 61.379999999999995 2.6013409268230342E-002 + 61.439999999999998 2.5864732379278062E-002 + 61.500000000000000 2.5695484081070884E-002 + 61.560000000000002 2.5505718627332419E-002 + 61.619999999999990 2.5295524717319291E-002 + 61.679999999999993 2.5065025884062554E-002 + 61.739999999999995 2.4814385092098705E-002 + 61.799999999999997 2.4543800250662006E-002 + 61.859999999999999 2.4253504856454219E-002 + 61.920000000000002 2.3943767867598942E-002 + 61.979999999999990 2.3614893975287196E-002 + 62.039999999999992 2.3267220183174737E-002 + 62.099999999999994 2.2901117133489687E-002 + 62.159999999999997 2.2516992970887370E-002 + 62.219999999999999 2.2115282677990653E-002 + 62.280000000000001 2.1696453782371974E-002 + 62.339999999999989 2.1261005981853154E-002 + 62.399999999999991 2.0809467850952616E-002 + 62.459999999999994 2.0342393065152824E-002 + 62.519999999999996 1.9860363080687320E-002 + 62.579999999999998 1.9363986369038692E-002 + 62.640000000000001 1.8853893700751072E-002 + 62.700000000000003 1.8330737137175625E-002 + 62.759999999999991 1.7795192225506223E-002 + 62.819999999999993 1.7247951896563470E-002 + 62.879999999999995 1.6689728110088516E-002 + 62.939999999999998 1.6121248508181835E-002 + 63.000000000000000 1.5543253162026455E-002 + 63.060000000000002 1.4956496419969727E-002 + 63.119999999999990 1.4361744166678757E-002 + 63.179999999999993 1.3759769929862498E-002 + 63.239999999999995 1.3151353824324589E-002 + 63.299999999999997 1.2537283660742854E-002 + 63.359999999999999 1.1918348868999569E-002 + 63.420000000000002 1.1295341186899184E-002 + 63.479999999999990 1.0669052217364479E-002 + 63.539999999999992 1.0040273506316467E-002 + 63.599999999999994 9.4097917357426238E-003 + 63.659999999999997 8.7783873516326903E-003 + 63.719999999999999 8.1468350036099490E-003 + 63.780000000000001 7.5159021436538107E-003 + 63.839999999999989 6.8863435198026884E-003 + 63.899999999999991 6.2589041806951923E-003 + 63.959999999999994 5.6343142765716298E-003 + 64.019999999999996 5.0132914275475395E-003 + 64.079999999999998 4.3965352768791776E-003 + 64.140000000000001 3.7847292934463099E-003 + 64.200000000000003 3.1785376656196089E-003 + 64.259999999999991 2.5786049692536703E-003 + 64.319999999999993 1.9855551172559844E-003 + 64.379999999999995 1.3999900340525969E-003 + 64.439999999999998 8.2248819413115789E-004 + 64.500000000000000 2.5360473347910248E-004 + 64.560000000000002 -3.0612989649238514E-004 + 64.619999999999990 -8.5621091232212457E-004 + 64.679999999999993 -1.3961589639872153E-003 + 64.739999999999995 -1.9255215353989716E-003 + 64.799999999999997 -2.4438723821403703E-003 + 64.859999999999999 -2.9508133631375648E-003 + 64.920000000000002 -3.4459739537330289E-003 + 64.979999999999990 -3.9290117091013953E-003 + 65.039999999999992 -4.3996113827074971E-003 + 65.099999999999994 -4.8574866525853575E-003 + 65.159999999999997 -5.3023785584856960E-003 + 65.219999999999999 -5.7340563402238035E-003 + 65.280000000000001 -6.1523164384667739E-003 + 65.339999999999989 -6.5569843370445174E-003 + 65.399999999999991 -6.9479114092515486E-003 + 65.459999999999994 -7.3249766994696198E-003 + 65.519999999999996 -7.6880851996786060E-003 + 65.579999999999998 -8.0371674813527159E-003 + 65.640000000000001 -8.3721800118019898E-003 + 65.700000000000003 -8.6931040513256140E-003 + 65.759999999999991 -8.9999441664674121E-003 + 65.819999999999993 -9.2927293246965904E-003 + 65.879999999999995 -9.5715104719505378E-003 + 65.939999999999998 -9.8363603885817993E-003 + 66.000000000000000 -1.0087373021274101E-002 + 66.060000000000002 -1.0324663267811524E-002 + 66.119999999999990 -1.0548362696084950E-002 + 66.179999999999993 -1.0758623779402095E-002 + 66.239999999999995 -1.0955615558777301E-002 + 66.299999999999997 -1.1139522915976897E-002 + 66.359999999999999 -1.1310547091751158E-002 + 66.420000000000002 -1.1468903644448846E-002 + 66.479999999999990 -1.1614820741838646E-002 + 66.539999999999992 -1.1748541047485239E-002 + 66.599999999999994 -1.1870318132019568E-002 + 66.659999999999997 -1.1980414626876084E-002 + 66.719999999999999 -1.2079104146758203E-002 + 66.780000000000001 -1.2166670172773397E-002 + 66.839999999999989 -1.2243402395183166E-002 + 66.899999999999991 -1.2309597498347077E-002 + 66.959999999999994 -1.2365557899247835E-002 + 67.019999999999996 -1.2411591875756299E-002 + 67.079999999999998 -1.2448011479617089E-002 + 67.140000000000001 -1.2475132122783531E-002 + 67.199999999999989 -1.2493272543048302E-002 + 67.259999999999991 -1.2502752414131133E-002 + 67.319999999999993 -1.2503890804408264E-002 + 67.379999999999995 -1.2497010354008698E-002 + 67.439999999999998 -1.2482430571326912E-002 + 67.500000000000000 -1.2460469807166552E-002 + 67.560000000000002 -1.2431446756504523E-002 + 67.619999999999990 -1.2395675842930306E-002 + 67.679999999999993 -1.2353469058747636E-002 + 67.739999999999995 -1.2305134721099863E-002 + 67.799999999999997 -1.2250978003155666E-002 + 67.859999999999999 -1.2191299323296748E-002 + 67.920000000000002 -1.2126393912368220E-002 + 67.979999999999990 -1.2056551290041734E-002 + 68.039999999999992 -1.1982055245464258E-002 + 68.099999999999994 -1.1903184967249106E-002 + 68.159999999999997 -1.1820211552281711E-002 + 68.219999999999999 -1.1733401524575655E-002 + 68.280000000000001 -1.1643012843797200E-002 + 68.339999999999989 -1.1549298352959040E-002 + 68.399999999999991 -1.1452500915992125E-002 + 68.459999999999994 -1.1352858109740540E-002 + 68.519999999999996 -1.1250600097866142E-002 + 68.579999999999998 -1.1145949129540924E-002 + 68.640000000000001 -1.1039119244975849E-002 + 68.699999999999989 -1.0930317052111940E-002 + 68.759999999999991 -1.0819740950987148E-002 + 68.819999999999993 -1.0707583973232855E-002 + 68.879999999999995 -1.0594028664422044E-002 + 68.939999999999998 -1.0479251926455959E-002 + 69.000000000000000 -1.0363422055384295E-002 + 69.060000000000002 -1.0246700447926152E-002 + 69.119999999999990 -1.0129240127793123E-002 + 69.179999999999993 -1.0011187594066323E-002 + 69.239999999999995 -9.8926822643894182E-003 + 69.299999999999997 -9.7738558650819485E-003 + 69.359999999999999 -9.6548347599626650E-003 + 69.420000000000002 -9.5357368507337920E-003 + 69.479999999999990 -9.4166742998616319E-003 + 69.539999999999992 -9.2977518757709939E-003 + 69.599999999999994 -9.1790691661464783E-003 + 69.659999999999997 -9.0607201907721303E-003 + 69.719999999999999 -8.9427914520405199E-003 + 69.780000000000001 -8.8253654091029841E-003 + 69.839999999999989 -8.7085170029172331E-003 + 69.899999999999991 -8.5923190488833897E-003 + 69.959999999999994 -8.4768359893544060E-003 + 70.019999999999996 -8.3621289699508175E-003 + 70.079999999999998 -8.2482540451513878E-003 + 70.140000000000001 -8.1352627494329401E-003 + 70.199999999999989 -8.0232025751786288E-003 + 70.259999999999991 -7.9121168432006190E-003 + 70.319999999999993 -7.8020451596432167E-003 + 70.379999999999995 -7.6930233961879464E-003 + 70.439999999999998 -7.5850831391805033E-003 + 70.500000000000000 -7.4782538031273847E-003 + 70.560000000000002 -7.3725606064180870E-003 + 70.619999999999990 -7.2680268477602599E-003 + 70.679999999999993 -7.1646719451032761E-003 + 70.739999999999995 -7.0625133652679039E-003 + 70.799999999999997 -6.9615656698241686E-003 + 70.859999999999999 -6.8618411159358308E-003 + 70.920000000000002 -6.7633501642736793E-003 + 70.979999999999990 -6.6661007904856278E-003 + 71.039999999999992 -6.5700990795429116E-003 + 71.099999999999994 -6.4753497158752168E-003 + 71.159999999999997 -6.3818550130330933E-003 + 71.219999999999999 -6.2896163057611521E-003 + 71.280000000000001 -6.1986336421123826E-003 + 71.339999999999989 -6.1089058087829074E-003 + 71.399999999999991 -6.0204295714582565E-003 + 71.459999999999994 -5.9332015627225820E-003 + 71.519999999999996 -5.8472167112738902E-003 + 71.579999999999998 -5.7624695505678405E-003 + 71.640000000000001 -5.6789536600410761E-003 + 71.699999999999989 -5.5966620082936354E-003 + 71.759999999999991 -5.5155866548547844E-003 + 71.819999999999993 -5.4357196966247582E-003 + 71.879999999999995 -5.3570515402544330E-003 + 71.939999999999998 -5.2795727460010688E-003 + 72.000000000000000 -5.2032736669323596E-003 + 72.060000000000002 -5.1281445058561958E-003 + 72.119999999999990 -5.0541742041317270E-003 + 72.179999999999993 -4.9813526380642608E-003 + 72.239999999999995 -4.9096681159645633E-003 + 72.299999999999997 -4.8391095468765313E-003 + 72.359999999999999 -4.7696662776322901E-003 + 72.420000000000002 -4.7013268631286263E-003 + 72.479999999999990 -4.6340793716552701E-003 + 72.539999999999992 -4.5679129674900832E-003 + 72.599999999999994 -4.5028154285451805E-003 + 72.659999999999997 -4.4387758024250264E-003 + 72.719999999999999 -4.3757824891472973E-003 + 72.780000000000001 -4.3138239750323583E-003 + 72.839999999999989 -4.2528884352004519E-003 + 72.899999999999991 -4.1929646284172388E-003 + 72.959999999999994 -4.1340416925074478E-003 + 73.019999999999996 -4.0761078343199975E-003 + 73.079999999999998 -4.0191524029654282E-003 + 73.140000000000001 -3.9631639451320998E-003 + 73.199999999999989 -3.9081314286667709E-003 + 73.259999999999991 -3.8540442969725195E-003 + 73.319999999999993 -3.8008912535333582E-003 + 73.379999999999995 -3.7486618176429797E-003 + 73.439999999999998 -3.6973453762742109E-003 + 73.500000000000000 -3.6469314641337193E-003 + 73.560000000000002 -3.5974097662971839E-003 + 73.619999999999990 -3.5487702622440938E-003 + 73.679999999999993 -3.5010029567303005E-003 + 73.739999999999995 -3.4540976313064070E-003 + 73.799999999999997 -3.4080445542854364E-003 + 73.859999999999999 -3.3628341336823233E-003 + 73.920000000000002 -3.3184570055928165E-003 + 73.979999999999990 -3.2749034546183716E-003 + 74.039999999999992 -3.2321642849741064E-003 + 74.099999999999994 -3.1902304025701574E-003 + 74.159999999999997 -3.1490926214533975E-003 + 74.219999999999999 -3.1087416760010771E-003 + 74.280000000000001 -3.0691690690751753E-003 + 74.339999999999989 -3.0303653101189875E-003 + 74.399999999999991 -2.9923218590681747E-003 + 74.459999999999994 -2.9550296378144411E-003 + 74.519999999999996 -2.9184798102474220E-003 + 74.579999999999998 -2.8826638618823699E-003 + 74.640000000000001 -2.8475727421085765E-003 + 74.699999999999989 -2.8131979762164535E-003 + 74.759999999999991 -2.7795306770754496E-003 + 74.819999999999993 -2.7465625700609517E-003 + 74.879999999999995 -2.7142847559582469E-003 + 74.939999999999998 -2.6826888674485070E-003 + 75.000000000000000 -2.6517662186771956E-003 + 75.060000000000002 -2.6215083697710209E-003 + 75.119999999999990 -2.5919069746733353E-003 + 75.179999999999993 -2.5629534402401865E-003 + 75.239999999999995 -2.5346393553919125E-003 + 75.299999999999997 -2.5069562251092566E-003 + 75.359999999999999 -2.4798957577757057E-003 + 75.420000000000002 -2.4534496175998024E-003 + 75.479999999999990 -2.4276090083354272E-003 + 75.539999999999992 -2.4023658565843625E-003 + 75.599999999999994 -2.3777113179277651E-003 + 75.659999999999997 -2.3536367557615151E-003 + 75.719999999999999 -2.3301338627562001E-003 + 75.780000000000001 -2.3071938524879755E-003 + 75.839999999999989 -2.2848079533549287E-003 + 75.899999999999991 -2.2629675009119086E-003 + 75.959999999999994 -2.2416636617485150E-003 + 76.019999999999996 -2.2208874006932845E-003 + 76.079999999999998 -2.2006297904421110E-003 + 76.140000000000001 -2.1808819690468631E-003 + 76.199999999999989 -2.1616350241529724E-003 + 76.259999999999991 -2.1428799789152031E-003 + 76.319999999999993 -2.1246075976655604E-003 + 76.379999999999995 -2.1068089005984014E-003 + 76.439999999999998 -2.0894748212649823E-003 + 76.500000000000000 -2.0725961268085315E-003 + 76.560000000000002 -2.0561637305854313E-003 + 76.619999999999990 -2.0401683543367381E-003 + 76.679999999999993 -2.0246008726727618E-003 + 76.739999999999995 -2.0094520652024521E-003 + 76.799999999999997 -1.9947126692770999E-003 + 76.859999999999999 -1.9803733311689717E-003 + 76.920000000000002 -1.9664250910684045E-003 + 76.979999999999990 -1.9528584433200738E-003 + 77.039999999999992 -1.9396641617586922E-003 + 77.099999999999994 -1.9268327533893716E-003 + 77.159999999999997 -1.9143550556119161E-003 + 77.219999999999999 -1.9022217747344419E-003 + 77.280000000000001 -1.8904235149208612E-003 + 77.339999999999989 -1.8789509915182062E-003 + 77.399999999999991 -1.8677947322464892E-003 + 77.459999999999994 -1.8569454811593669E-003 + 77.519999999999996 -1.8463938923007207E-003 + 77.579999999999998 -1.8361306113208959E-003 + 77.640000000000001 -1.8261463765576820E-003 + 77.699999999999989 -1.8164316702798675E-003 + 77.759999999999991 -1.8069774093200136E-003 + 77.819999999999993 -1.7977742672701559E-003 + 77.879999999999995 -1.7888130389661291E-003 + 77.939999999999998 -1.7800844264080082E-003 + 78.000000000000000 -1.7715794429376862E-003 + 78.060000000000002 -1.7632889918184835E-003 + 78.119999999999990 -1.7552041495066152E-003 + 78.179999999999993 -1.7473160321138893E-003 + 78.239999999999995 -1.7396159851742407E-003 + 78.299999999999997 -1.7320951491328280E-003 + 78.359999999999999 -1.7247451053256559E-003 + 78.420000000000002 -1.7175575263124669E-003 + 78.479999999999990 -1.7105241338016132E-003 + 78.539999999999992 -1.7036367748422818E-003 + 78.599999999999994 -1.6968875203638521E-003 + 78.659999999999997 -1.6902685821749549E-003 + 78.719999999999999 -1.6837720723621586E-003 + 78.780000000000001 -1.6773905110909920E-003 + 78.839999999999989 -1.6711165320415604E-003 + 78.899999999999991 -1.6649428519172711E-003 + 78.959999999999994 -1.6588624312748016E-003 + 79.019999999999996 -1.6528682519260298E-003 + 79.079999999999998 -1.6469536247150605E-003 + 79.140000000000001 -1.6411119710087504E-003 + 79.199999999999989 -1.6353368073053149E-003 + 79.259999999999991 -1.6296219239480452E-003 + 79.319999999999993 -1.6239615673660835E-003 + 79.379999999999995 -1.6183499017059630E-003 + 79.439999999999998 -1.6127814755181496E-003 + 79.500000000000000 -1.6072511646509223E-003 + 79.560000000000002 -1.6017539025009390E-003 + 79.619999999999990 -1.5962851246337998E-003 + 79.679999999999993 -1.5908403140015384E-003 + 79.739999999999995 -1.5854154429489646E-003 + 79.799999999999997 -1.5800065870223100E-003 + 79.859999999999999 -1.5746100748676509E-003 + 79.920000000000002 -1.5692226184768341E-003 + 79.979999999999990 -1.5638410620040513E-003 + 80.039999999999992 -1.5584626769318693E-003 + 80.099999999999994 -1.5530847845049685E-003 + 80.159999999999997 -1.5477051355441366E-003 + 80.219999999999999 -1.5423214516894880E-003 + 80.280000000000001 -1.5369318927629435E-003 + 80.340000000000003 -1.5315347165206967E-003 + 80.400000000000006 -1.5261283756505927E-003 + 80.460000000000008 -1.5207117196520785E-003 + 80.519999999999982 -1.5152835744828049E-003 + 80.579999999999984 -1.5098430765094681E-003 + 80.639999999999986 -1.5043895882609012E-003 + 80.699999999999989 -1.4989225761021076E-003 + 80.759999999999991 -1.4934419794739853E-003 + 80.819999999999993 -1.4879475717410791E-003 + 80.879999999999995 -1.4824396766012920E-003 + 80.939999999999998 -1.4769184805206678E-003 + 81.000000000000000 -1.4713845376056072E-003 + 81.060000000000002 -1.4658385025019716E-003 + 81.120000000000005 -1.4602811576609868E-003 + 81.180000000000007 -1.4547135456889691E-003 + 81.240000000000009 -1.4491366230225025E-003 + 81.299999999999983 -1.4435517500669620E-003 + 81.359999999999985 -1.4379601625749033E-003 + 81.419999999999987 -1.4323631714248338E-003 + 81.479999999999990 -1.4267621912500182E-003 + 81.539999999999992 -1.4211588836640721E-003 + 81.599999999999994 -1.4155546061010182E-003 + 81.659999999999997 -1.4099510306228452E-003 + 81.719999999999999 -1.4043497728805656E-003 + 81.780000000000001 -1.3987525198376652E-003 + 81.840000000000003 -1.3931607938407959E-003 + 81.900000000000006 -1.3875763308784654E-003 + 81.960000000000008 -1.3820008398046655E-003 + 82.019999999999982 -1.3764359322292552E-003 + 82.079999999999984 -1.3708833865249265E-003 + 82.139999999999986 -1.3653446546985555E-003 + 82.199999999999989 -1.3598215182783573E-003 + 82.259999999999991 -1.3543153935377909E-003 + 82.319999999999993 -1.3488279684587662E-003 + 82.379999999999995 -1.3433605709997193E-003 + 82.439999999999998 -1.3379148101567279E-003 + 82.500000000000000 -1.3324918671698373E-003 + 82.560000000000002 -1.3270932384131671E-003 + 82.620000000000005 -1.3217199671483478E-003 + 82.680000000000007 -1.3163733628963449E-003 + 82.740000000000009 -1.3110543733915849E-003 + 82.799999999999983 -1.3057640913120823E-003 + 82.859999999999985 -1.3005032985884317E-003 + 82.919999999999987 -1.2952727687642292E-003 + 82.979999999999990 -1.2900731575563021E-003 + 83.039999999999992 -1.2849051675841829E-003 + 83.099999999999994 -1.2797691755171673E-003 + 83.159999999999997 -1.2746655308752712E-003 + 83.219999999999999 -1.2695946141172241E-003 + 83.280000000000001 -1.2645564239347320E-003 + 83.340000000000003 -1.2595510510466953E-003 + 83.400000000000006 -1.2545784416151385E-003 + 83.460000000000008 -1.2496383958051360E-003 + 83.519999999999982 -1.2447305596267305E-003 + 83.579999999999984 -1.2398546196644772E-003 + 83.639999999999986 -1.2350100646644734E-003 + 83.699999999999989 -1.2301961235991637E-003 + 83.759999999999991 -1.2254122687374647E-003 + 83.819999999999993 -1.2206576584061679E-003 + 83.879999999999995 -1.2159315099244316E-003 + 83.939999999999998 -1.2112328963774610E-003 + 84.000000000000000 -1.2065609378838634E-003 + 84.060000000000002 -1.2019145550064762E-003 + 84.120000000000005 -1.1972928102397941E-003 + 84.180000000000007 -1.1926945714648696E-003 + 84.240000000000009 -1.1881188038911045E-003 + 84.299999999999983 -1.1835642800547322E-003 + 84.359999999999985 -1.1790299737283547E-003 + 84.419999999999987 -1.1745146944029954E-003 + 84.479999999999990 -1.1700171919647967E-003 + 84.539999999999992 -1.1655362114176180E-003 + 84.599999999999994 -1.1610707091692725E-003 + 84.659999999999997 -1.1566194779615391E-003 + 84.719999999999999 -1.1521812004307841E-003 + 84.780000000000001 -1.1477546653054212E-003 + 84.840000000000003 -1.1433386519690415E-003 + 84.900000000000006 -1.1389319434288742E-003 + 84.960000000000008 -1.1345333354350656E-003 + 85.019999999999982 -1.1301416581280615E-003 + 85.079999999999984 -1.1257557377230315E-003 + 85.139999999999986 -1.1213746093503554E-003 + 85.199999999999989 -1.1169972688085390E-003 + 85.259999999999991 -1.1126226675605342E-003 + 85.319999999999993 -1.1082499278027632E-003 + 85.379999999999995 -1.1038784033087601E-003 + 85.439999999999998 -1.0995074186099262E-003 + 85.500000000000000 -1.0951363358500301E-003 + 85.560000000000002 -1.0907647970145580E-003 + 85.620000000000005 -1.0863923636628551E-003 + 85.680000000000007 -1.0820187577991892E-003 + 85.740000000000009 -1.0776438667370125E-003 + 85.799999999999983 -1.0732675232265451E-003 + 85.859999999999985 -1.0688896745125209E-003 + 85.919999999999987 -1.0645104964377042E-003 + 85.979999999999990 -1.0601299628872419E-003 + 86.039999999999992 -1.0557483694461677E-003 + 86.099999999999994 -1.0513660962190941E-003 + 86.159999999999997 -1.0469832761609869E-003 + 86.219999999999999 -1.0426005775944780E-003 + 86.280000000000001 -1.0382184506919465E-003 + 86.340000000000003 -1.0338374528322317E-003 + 86.400000000000006 -1.0294583414321768E-003 + 86.460000000000008 -1.0250819315139614E-003 + 86.519999999999982 -1.0207089412711827E-003 + 86.579999999999984 -1.0163403162863883E-003 + 86.639999999999986 -1.0119772291651221E-003 + 86.699999999999989 -1.0076207944637225E-003 + 86.759999999999991 -1.0032722597263283E-003 + 86.819999999999993 -9.9893295111422591E-004 + 86.879999999999995 -9.9460429426707214E-004 + 86.939999999999998 -9.9028767107285577E-004 + 87.000000000000000 -9.8598456820492893E-004 + 87.060000000000002 -9.8169656507519302E-004 + 87.120000000000005 -9.7742526417775354E-004 + 87.180000000000007 -9.7317228288836205E-004 + 87.240000000000009 -9.6893915626568056E-004 + 87.299999999999983 -9.6472746486529640E-004 + 87.359999999999985 -9.6053881326140205E-004 + 87.419999999999987 -9.5637469704315157E-004 + 87.479999999999990 -9.5223671162348493E-004 + 87.539999999999992 -9.4812633787347180E-004 + 87.599999999999994 -9.4404508735856213E-004 + 87.659999999999997 -9.3999431898515663E-004 + 87.719999999999999 -9.3597541341532869E-004 + 87.780000000000001 -9.3198975479472589E-004 + 87.840000000000003 -9.2803860073815026E-004 + 87.900000000000006 -9.2412320272174510E-004 + 87.960000000000008 -9.2024477233568300E-004 + 88.019999999999982 -9.1640446218761154E-004 + 88.079999999999984 -9.1260331504552320E-004 + 88.139999999999986 -9.0884238024618489E-004 + 88.199999999999989 -9.0512255272128211E-004 + 88.259999999999991 -9.0144468581624206E-004 + 88.319999999999993 -8.9780952208679834E-004 + 88.379999999999995 -8.9421774094255513E-004 + 88.439999999999998 -8.9066990306483111E-004 + 88.500000000000000 -8.8716648683796100E-004 + 88.560000000000002 -8.8370792697157346E-004 + 88.620000000000005 -8.8029445922676599E-004 + 88.680000000000007 -8.7692621961579212E-004 + 88.740000000000009 -8.7360333174439989E-004 + 88.799999999999983 -8.7032572782753189E-004 + 88.859999999999985 -8.6709328396779761E-004 + 88.919999999999987 -8.6390570483267702E-004 + 88.979999999999990 -8.6076265171417606E-004 + 89.039999999999992 -8.5766372798007535E-004 + 89.099999999999994 -8.5460832241864308E-004 + 89.159999999999997 -8.5159586533961097E-004 + 89.219999999999999 -8.4862548212348067E-004 + 89.280000000000001 -8.4569630850212332E-004 + 89.340000000000003 -8.4280741452085167E-004 + 89.400000000000006 -8.3995772034467617E-004 + 89.460000000000008 -8.3714604640832129E-004 + 89.519999999999982 -8.3437117044543314E-004 + 89.579999999999984 -8.3163178046456612E-004 + 89.639999999999986 -8.2892649950278376E-004 + 89.699999999999989 -8.2625386907286369E-004 + 89.759999999999991 -8.2361233204409604E-004 + 89.819999999999993 -8.2100036513485931E-004 + 89.879999999999995 -8.1841629526945188E-004 + 89.939999999999998 -8.1585849691350918E-004 + 90.000000000000000 -8.1332527204218375E-004 + 90.060000000000002 -8.1081492665747697E-004 + 90.120000000000005 -8.0832573686520843E-004 + 90.180000000000007 -8.0585595834494991E-004 + 90.240000000000009 -8.0340387103223175E-004 + 90.299999999999983 -8.0096768947858889E-004 + 90.359999999999985 -7.9854569041672813E-004 + 90.419999999999987 -7.9613613508573440E-004 + 90.479999999999990 -7.9373721444481128E-004 + 90.539999999999992 -7.9134723597246528E-004 + 90.599999999999994 -7.8896446374116880E-004 + 90.659999999999997 -7.8658717917269984E-004 + 90.719999999999999 -7.8421375478076292E-004 + 90.780000000000001 -7.8184255836533730E-004 + 90.840000000000003 -7.7947204264257818E-004 + 90.900000000000006 -7.7710066873978314E-004 + 90.960000000000008 -7.7472699347546443E-004 + 91.019999999999982 -7.7234967826746484E-004 + 91.079999999999984 -7.6996750442844800E-004 + 91.139999999999986 -7.6757924150079094E-004 + 91.199999999999989 -7.6518388484510193E-004 + 91.259999999999991 -7.6278043550037709E-004 + 91.319999999999993 -7.6036808062895987E-004 + 91.379999999999995 -7.5794608531606943E-004 + 91.439999999999998 -7.5551379802513965E-004 + 91.500000000000000 -7.5307064034157870E-004 + 91.560000000000002 -7.5061623796225836E-004 + 91.620000000000005 -7.4815015659960974E-004 + 91.680000000000007 -7.4567211864958892E-004 + 91.739999999999981 -7.4318201970790263E-004 + 91.799999999999983 -7.4067968809980018E-004 + 91.859999999999985 -7.3816509298683713E-004 + 91.919999999999987 -7.3563834884483479E-004 + 91.979999999999990 -7.3309960866526540E-004 + 92.039999999999992 -7.3054903625576384E-004 + 92.099999999999994 -7.2798701886114857E-004 + 92.159999999999997 -7.2541402595003776E-004 + 92.219999999999999 -7.2283049432058776E-004 + 92.280000000000001 -7.2023711366609150E-004 + 92.340000000000003 -7.1763457484600834E-004 + 92.400000000000006 -7.1502381496059289E-004 + 92.460000000000008 -7.1240571297550551E-004 + 92.519999999999982 -7.0978142895662048E-004 + 92.579999999999984 -7.0715209045916897E-004 + 92.639999999999986 -7.0451903451822717E-004 + 92.699999999999989 -7.0188355791053910E-004 + 92.759999999999991 -6.9924712058039415E-004 + 92.819999999999993 -6.9661122858926490E-004 + 92.879999999999995 -6.9397742955680671E-004 + 92.939999999999998 -6.9134725848666288E-004 + 93.000000000000000 -6.8872232450219086E-004 + 93.060000000000002 -6.8610430864022274E-004 + 93.120000000000005 -6.8349474867601646E-004 + 93.180000000000007 -6.8089534351075125E-004 + 93.239999999999981 -6.7830766927627639E-004 + 93.299999999999983 -6.7573342097744689E-004 + 93.359999999999985 -6.7317413584037770E-004 + 93.419999999999987 -6.7063137363248507E-004 + 93.479999999999990 -6.6810683329681687E-004 + 93.539999999999992 -6.6560196070988278E-004 + 93.599999999999994 -6.6311838127582230E-004 + 93.659999999999997 -6.6065761037607340E-004 + 93.719999999999999 -6.5822115527964197E-004 + 93.780000000000001 -6.5581047643559166E-004 + 93.840000000000003 -6.5342709472623428E-004 + 93.900000000000006 -6.5107237525491410E-004 + 93.960000000000008 -6.4874773139998526E-004 + 94.019999999999982 -6.4645448993332912E-004 + 94.079999999999984 -6.4419387159133149E-004 + 94.139999999999986 -6.4196714472618472E-004 + 94.199999999999989 -6.3977535516123406E-004 + 94.259999999999991 -6.3761958141232071E-004 + 94.319999999999993 -6.3550076659987960E-004 + 94.379999999999995 -6.3341966520455222E-004 + 94.439999999999998 -6.3137706707319034E-004 + 94.500000000000000 -6.2937363905455029E-004 + 94.560000000000002 -6.2740986498239137E-004 + 94.620000000000005 -6.2548607177235094E-004 + 94.680000000000007 -6.2360264781535237E-004 + 94.739999999999981 -6.2175971110327549E-004 + 94.799999999999983 -6.1995739278912173E-004 + 94.859999999999985 -6.1819558157496244E-004 + 94.919999999999987 -6.1647408372979913E-004 + 94.979999999999990 -6.1479260317342838E-004 + 95.039999999999992 -6.1315083373680173E-004 + 95.099999999999994 -6.1154816944781110E-004 + 95.159999999999997 -6.0998405156817946E-004 + 95.219999999999999 -6.0845770316112033E-004 + 95.280000000000001 -6.0696833652426933E-004 + 95.340000000000003 -6.0551503203956462E-004 + 95.400000000000006 -6.0409671528607238E-004 + 95.460000000000008 -6.0271235036108025E-004 + 95.519999999999982 -6.0136069022506753E-004 + 95.579999999999984 -6.0004052018029449E-004 + 95.639999999999986 -5.9875043850630082E-004 + 95.699999999999989 -5.9748907000210891E-004 + 95.759999999999991 -5.9625495360719272E-004 + 95.819999999999993 -5.9504653030885641E-004 + 95.879999999999995 -5.9386217693778757E-004 + 95.939999999999998 -5.9270029799868079E-004 + 96.000000000000000 -5.9155908694287712E-004 + 96.060000000000002 -5.9043681723185853E-004 + 96.120000000000005 -5.8933169400726931E-004 + 96.180000000000007 -5.8824187273327354E-004 + 96.239999999999981 -5.8716541523424744E-004 + 96.299999999999983 -5.8610037342985062E-004 + 96.359999999999985 -5.8504480309465149E-004 + 96.419999999999987 -5.8399664508366881E-004 + 96.479999999999990 -5.8295390196504908E-004 + 96.539999999999992 -5.8191455886548470E-004 + 96.599999999999994 -5.8087662786358916E-004 + 96.659999999999997 -5.7983815042677981E-004 + 96.719999999999999 -5.7879701966582077E-004 + 96.780000000000001 -5.7775147411022031E-004 + 96.840000000000003 -5.7669952292382671E-004 + 96.900000000000006 -5.7563949637731227E-004 + 96.960000000000008 -5.7456967440102107E-004 + 97.019999999999982 -5.7348845264327793E-004 + 97.079999999999984 -5.7239431548478429E-004 + 97.139999999999986 -5.7128583543000853E-004 + 97.199999999999989 -5.7016169942245942E-004 + 97.259999999999991 -5.6902077350413775E-004 + 97.319999999999993 -5.6786185809060759E-004 + 97.379999999999995 -5.6668397656943752E-004 + 97.439999999999998 -5.6548625292819773E-004 + 97.500000000000000 -5.6426780399400844E-004 + 97.560000000000002 -5.6302791430325291E-004 + 97.620000000000005 -5.6176596989841656E-004 + 97.680000000000007 -5.6048136820102288E-004 + 97.739999999999981 -5.5917366403336220E-004 + 97.799999999999983 -5.5784247014340979E-004 + 97.859999999999985 -5.5648751707117693E-004 + 97.919999999999987 -5.5510853637898735E-004 + 97.979999999999990 -5.5370551663711605E-004 + 98.039999999999992 -5.5227846609876658E-004 + 98.099999999999994 -5.5082755674342788E-004 + 98.159999999999997 -5.4935299679492906E-004 + 98.219999999999999 -5.4785528779005967E-004 + 98.280000000000001 -5.4633486243318063E-004 + 98.340000000000003 -5.4479242330494047E-004 + 98.400000000000006 -5.4322881559921163E-004 + 98.460000000000008 -5.4164487048271063E-004 + 98.519999999999982 -5.4004164573262243E-004 + 98.579999999999984 -5.3842026102307941E-004 + 98.639999999999986 -5.3678196577950483E-004 + 98.699999999999989 -5.3512807598410763E-004 + 98.759999999999991 -5.3346001714374674E-004 + 98.819999999999993 -5.3177929893804599E-004 + 98.879999999999995 -5.3008741689474946E-004 + 98.939999999999998 -5.2838597288602102E-004 + 99.000000000000000 -5.2667657666637471E-004 + 99.060000000000002 -5.2496096685611024E-004 + 99.120000000000005 -5.2324075701506740E-004 + 99.180000000000007 -5.2151776250732224E-004 + 99.239999999999981 -5.1979373045770458E-004 + 99.299999999999983 -5.1807037949712636E-004 + 99.359999999999985 -5.1634954593917076E-004 + 99.419999999999987 -5.1463297843496597E-004 + 99.479999999999990 -5.1292251322850241E-004 + 99.539999999999992 -5.1121997635505349E-004 + 99.599999999999994 -5.0952714116160320E-004 + 99.659999999999997 -5.0784580846525442E-004 + 99.719999999999999 -5.0617773192912431E-004 + 99.780000000000001 -5.0452477003691087E-004 + 99.840000000000003 -5.0288858239914524E-004 + 99.900000000000006 -5.0127095406629911E-004 + 99.960000000000008 -4.9967355153883030E-004 + 100.01999999999998 -4.9809804079863800E-004 + 100.07999999999998 -4.9654602614267304E-004 + 100.13999999999999 -4.9501906115515274E-004 + 100.19999999999999 -4.9351870810789521E-004 + 100.25999999999999 -4.9204647204909350E-004 + 100.31999999999999 -4.9060372806517189E-004 + 100.38000000000000 -4.8919187563234781E-004 + 100.44000000000000 -4.8781219065185201E-004 + 100.50000000000000 -4.8646596502163183E-004 + 100.56000000000000 -4.8515437899199101E-004 + 100.62000000000000 -4.8387856691026643E-004 + 100.68000000000001 -4.8263950304173282E-004 + 100.73999999999998 -4.8143813961958363E-004 + 100.79999999999998 -4.8027538627848924E-004 + 100.85999999999999 -4.7915194777425023E-004 + 100.91999999999999 -4.7806849231034310E-004 + 100.97999999999999 -4.7702553098829484E-004 + 101.03999999999999 -4.7602352224940378E-004 + 101.09999999999999 -4.7506278554318719E-004 + 101.16000000000000 -4.7414352228851084E-004 + 101.22000000000000 -4.7326577463659332E-004 + 101.28000000000000 -4.7242953717475489E-004 + 101.34000000000000 -4.7163468840487354E-004 + 101.40000000000001 -4.7088099824865455E-004 + 101.46000000000001 -4.7016813389612474E-004 + 101.51999999999998 -4.6949565392995153E-004 + 101.57999999999998 -4.6886304960977779E-004 + 101.63999999999999 -4.6826972576498993E-004 + 101.69999999999999 -4.6771503307715164E-004 + 101.75999999999999 -4.6719819378031682E-004 + 101.81999999999999 -4.6671843364079604E-004 + 101.88000000000000 -4.6627483921494691E-004 + 101.94000000000000 -4.6586649148166450E-004 + 102.00000000000000 -4.6549237090481860E-004 + 102.06000000000000 -4.6515137798079772E-004 + 102.12000000000000 -4.6484235910986623E-004 + 102.18000000000001 -4.6456411015587443E-004 + 102.23999999999998 -4.6431539379189273E-004 + 102.29999999999998 -4.6409481913070637E-004 + 102.35999999999999 -4.6390101047301603E-004 + 102.41999999999999 -4.6373253381733372E-004 + 102.47999999999999 -4.6358786219074703E-004 + 102.53999999999999 -4.6346550353600497E-004 + 102.59999999999999 -4.6336388569732283E-004 + 102.66000000000000 -4.6328143524016629E-004 + 102.72000000000000 -4.6321657417979851E-004 + 102.78000000000000 -4.6316769609827690E-004 + 102.84000000000000 -4.6313327099280677E-004 + 102.90000000000001 -4.6311171532730124E-004 + 102.96000000000001 -4.6310153810661845E-004 + 103.01999999999998 -4.6310123239029510E-004 + 103.07999999999998 -4.6310935667679700E-004 + 103.13999999999999 -4.6312449122991838E-004 + 103.19999999999999 -4.6314532092477816E-004 + 103.25999999999999 -4.6317053554421916E-004 + 103.31999999999999 -4.6319888382870066E-004 + 103.38000000000000 -4.6322917386325789E-004 + 103.44000000000000 -4.6326029136428161E-004 + 103.50000000000000 -4.6329117234617857E-004 + 103.56000000000000 -4.6332084148673330E-004 + 103.62000000000000 -4.6334835273520518E-004 + 103.68000000000001 -4.6337285637789100E-004 + 103.73999999999998 -4.6339357687361397E-004 + 103.79999999999998 -4.6340978672055087E-004 + 103.85999999999999 -4.6342091225741173E-004 + 103.91999999999999 -4.6342642767608521E-004 + 103.97999999999999 -4.6342587424500999E-004 + 104.03999999999999 -4.6341894350712079E-004 + 104.09999999999999 -4.6340539784648775E-004 + 104.16000000000000 -4.6338509972318877E-004 + 104.22000000000000 -4.6335801601805448E-004 + 104.28000000000000 -4.6332420935384685E-004 + 104.34000000000000 -4.6328386004691898E-004 + 104.40000000000001 -4.6323727327093704E-004 + 104.46000000000001 -4.6318481567556925E-004 + 104.51999999999998 -4.6312699890042777E-004 + 104.57999999999998 -4.6306443128778284E-004 + 104.63999999999999 -4.6299784091470623E-004 + 104.69999999999999 -4.6292806033664267E-004 + 104.75999999999999 -4.6285607661160951E-004 + 104.81999999999999 -4.6278297871096298E-004 + 104.88000000000000 -4.6270992034324536E-004 + 104.94000000000000 -4.6263826820714212E-004 + 105.00000000000000 -4.6256948023329955E-004 + 105.06000000000000 -4.6250513759810938E-004 + 105.12000000000000 -4.6244697191334536E-004 + 105.18000000000001 -4.6239678351339024E-004 + 105.23999999999998 -4.6235655413403296E-004 + 105.29999999999998 -4.6232838009178451E-004 + 105.35999999999999 -4.6231444675479973E-004 + 105.41999999999999 -4.6231711780767953E-004 + 105.47999999999999 -4.6233880310136153E-004 + 105.53999999999999 -4.6238205942432495E-004 + 105.59999999999999 -4.6244953556617857E-004 + 105.66000000000000 -4.6254397395980755E-004 + 105.72000000000000 -4.6266827732348683E-004 + 105.78000000000000 -4.6282544883555589E-004 + 105.84000000000000 -4.6301851997598609E-004 + 105.90000000000001 -4.6325074257874081E-004 + 105.96000000000001 -4.6352543691116508E-004 + 106.01999999999998 -4.6384603944885175E-004 + 106.07999999999998 -4.6421615200231518E-004 + 106.13999999999999 -4.6463947274034170E-004 + 106.19999999999999 -4.6511986094970997E-004 + 106.25999999999999 -4.6566134623629351E-004 + 106.31999999999999 -4.6626806931903217E-004 + 106.38000000000000 -4.6694435252402978E-004 + 106.44000000000000 -4.6769463381402676E-004 + 106.50000000000000 -4.6852349914721216E-004 + 106.56000000000000 -4.6943572575854455E-004 + 106.62000000000000 -4.7043620199482838E-004 + 106.68000000000001 -4.7152993268285580E-004 + 106.73999999999998 -4.7272207432020366E-004 + 106.79999999999998 -4.7401782124076666E-004 + 106.85999999999999 -4.7542261691553784E-004 + 106.91999999999999 -4.7694184718683640E-004 + 106.97999999999999 -4.7858116869724059E-004 + 107.03999999999999 -4.8034616544146471E-004 + 107.09999999999999 -4.8224257015579928E-004 + 107.16000000000000 -4.8427626777262207E-004 + 107.22000000000000 -4.8645309236887831E-004 + 107.28000000000000 -4.8877904683407368E-004 + 107.34000000000000 -4.9126009668004362E-004 + 107.40000000000001 -4.9390236846980518E-004 + 107.46000000000001 -4.9671197304817355E-004 + 107.51999999999998 -4.9969511112155540E-004 + 107.57999999999998 -5.0285795672691568E-004 + 107.63999999999999 -5.0620684461034546E-004 + 107.69999999999999 -5.0974803553691919E-004 + 107.75999999999999 -5.1348777102297005E-004 + 107.81999999999999 -5.1743230672990966E-004 + 107.88000000000000 -5.2158792484372212E-004 + 107.94000000000000 -5.2596083394232265E-004 + 108.00000000000000 -5.3055710800947340E-004 + 108.06000000000000 -5.3538277548127212E-004 + 108.12000000000000 -5.4044380979315521E-004 + 108.18000000000001 -5.4574595966773594E-004 + 108.23999999999998 -5.5129495198000744E-004 + 108.29999999999998 -5.5709621066180677E-004 + 108.35999999999999 -5.6315499359133297E-004 + 108.41999999999999 -5.6947649106025774E-004 + 108.47999999999999 -5.7606548720129771E-004 + 108.53999999999999 -5.8292661684872390E-004 + 108.59999999999999 -5.9006422347753981E-004 + 108.66000000000000 -5.9748232299560301E-004 + 108.72000000000000 -6.0518466661817476E-004 + 108.78000000000000 -6.1317464299737406E-004 + 108.84000000000000 -6.2145528107621908E-004 + 108.90000000000001 -6.3002933526552698E-004 + 108.96000000000001 -6.3889901619611830E-004 + 109.01999999999998 -6.4806619969576620E-004 + 109.07999999999998 -6.5753234811081964E-004 + 109.13999999999999 -6.6729835131252690E-004 + 109.19999999999999 -6.7736466209805950E-004 + 109.25999999999999 -6.8773131343007304E-004 + 109.31999999999999 -6.9839764401703058E-004 + 109.38000000000000 -7.0936256858871078E-004 + 109.44000000000000 -7.2062431638742624E-004 + 109.50000000000000 -7.3218057883477398E-004 + 109.56000000000000 -7.4402847484959875E-004 + 109.62000000000000 -7.5616436545051006E-004 + 109.68000000000001 -7.6858403042496691E-004 + 109.73999999999998 -7.8128257918240115E-004 + 109.79999999999998 -7.9425448728226184E-004 + 109.85999999999999 -8.0749341151602476E-004 + 109.91999999999999 -8.2099234850518217E-004 + 109.97999999999999 -8.3474353441216479E-004 + 110.03999999999999 -8.4873842116239546E-004 + 110.09999999999999 -8.6296792352571182E-004 + 110.16000000000000 -8.7742191943025142E-004 + 110.22000000000000 -8.9208972149303989E-004 + 110.28000000000000 -9.0695978887735769E-004 + 110.34000000000000 -9.2201977976491978E-004 + 110.40000000000001 -9.3725647326045483E-004 + 110.46000000000001 -9.5265608253058574E-004 + 110.51999999999998 -9.6820391680817706E-004 + 110.57999999999998 -9.8388455251684193E-004 + 110.63999999999999 -9.9968192222228084E-004 + 110.69999999999999 -1.0155790033291622E-003 + 110.75999999999999 -1.0315581681463663E-003 + 110.81999999999999 -1.0476010282243942E-003 + 110.88000000000000 -1.0636884874551263E-003 + 110.94000000000000 -1.0798008490736748E-003 + 111.00000000000000 -1.0959175687983939E-003 + 111.06000000000000 -1.1120177331783864E-003 + 111.12000000000000 -1.1280795423582891E-003 + 111.18000000000001 -1.1440807046912711E-003 + 111.23999999999998 -1.1599984046723666E-003 + 111.29999999999998 -1.1758093165497815E-003 + 111.35999999999999 -1.1914896224638053E-003 + 111.41999999999999 -1.2070148648568740E-003 + 111.47999999999999 -1.2223602167782956E-003 + 111.53999999999999 -1.2375006530516606E-003 + 111.59999999999999 -1.2524106190625575E-003 + 111.66000000000000 -1.2670643233676328E-003 + 111.72000000000000 -1.2814356656370624E-003 + 111.78000000000000 -1.2954983466862452E-003 + 111.84000000000000 -1.3092260599679825E-003 + 111.90000000000001 -1.3225921519858818E-003 + 111.96000000000001 -1.3355701877322572E-003 + 112.01999999999998 -1.3481335255249741E-003 + 112.07999999999998 -1.3602558038073179E-003 + 112.13999999999999 -1.3719106713677932E-003 + 112.19999999999999 -1.3830719073052449E-003 + 112.25999999999999 -1.3937135763793451E-003 + 112.31999999999999 -1.4038101119955445E-003 + 112.38000000000000 -1.4133363558648821E-003 + 112.44000000000000 -1.4222673841337314E-003 + 112.50000000000000 -1.4305787871705788E-003 + 112.56000000000000 -1.4382468238379666E-003 + 112.62000000000000 -1.4452482419041797E-003 + 112.68000000000001 -1.4515604324365306E-003 + 112.73999999999998 -1.4571614192741679E-003 + 112.79999999999998 -1.4620300280752769E-003 + 112.85999999999999 -1.4661460790160485E-003 + 112.91999999999999 -1.4694900164954840E-003 + 112.97999999999999 -1.4720432871078038E-003 + 113.03999999999999 -1.4737882578468027E-003 + 113.09999999999999 -1.4747084062594227E-003 + 113.16000000000000 -1.4747881980829126E-003 + 113.22000000000000 -1.4740134595598569E-003 + 113.28000000000000 -1.4723708036280645E-003 + 113.34000000000000 -1.4698483306780240E-003 + 113.40000000000001 -1.4664354259731564E-003 + 113.46000000000001 -1.4621225096827035E-003 + 113.51999999999998 -1.4569014687099134E-003 + 113.57999999999998 -1.4507655032301330E-003 + 113.63999999999999 -1.4437091764967424E-003 + 113.69999999999999 -1.4357284751965282E-003 + 113.75999999999999 -1.4268206204758414E-003 + 113.81999999999999 -1.4169844588113314E-003 + 113.88000000000000 -1.4062199877389165E-003 + 113.94000000000000 -1.3945289020891370E-003 + 114.00000000000000 -1.3819143051620342E-003 + 114.06000000000000 -1.3683804647419589E-003 + 114.12000000000000 -1.3539332566507118E-003 + 114.18000000000001 -1.3385800383212605E-003 + 114.23999999999998 -1.3223296269268003E-003 + 114.29999999999998 -1.3051919801336256E-003 + 114.35999999999999 -1.2871788026188164E-003 + 114.41999999999999 -1.2683030152899064E-003 + 114.47999999999999 -1.2485789749018435E-003 + 114.53999999999999 -1.2280222446020797E-003 + 114.59999999999999 -1.2066498827852995E-003 + 114.66000000000000 -1.1844802051069764E-003 + 114.72000000000000 -1.1615326562217031E-003 + 114.78000000000000 -1.1378279794249217E-003 + 114.84000000000000 -1.1133880901432565E-003 + 114.90000000000001 -1.0882360422099242E-003 + 114.96000000000001 -1.0623959768959600E-003 + 115.01999999999998 -1.0358930109161690E-003 + 115.07999999999998 -1.0087532324526086E-003 + 115.13999999999999 -9.8100367233466281E-004 + 115.19999999999999 -9.5267223657986670E-004 + 115.25999999999999 -9.2378759772069035E-004 + 115.31999999999999 -8.9437924205759060E-004 + 115.38000000000000 -8.6447726812440419E-004 + 115.44000000000000 -8.3411249972538089E-004 + 115.50000000000000 -8.0331623748515859E-004 + 115.56000000000000 -7.7212039152190013E-004 + 115.62000000000000 -7.4055733726074156E-004 + 115.68000000000001 -7.0865972325216426E-004 + 115.73999999999998 -6.7646068947953600E-004 + 115.79999999999998 -6.4399360959364210E-004 + 115.85999999999999 -6.1129200945149443E-004 + 115.91999999999999 -5.7838967496474166E-004 + 115.97999999999999 -5.4532047659536437E-004 + 116.03999999999999 -5.1211817536082221E-004 + 116.09999999999999 -4.7881673240986221E-004 + 116.16000000000000 -4.4544978197633991E-004 + 116.22000000000000 -4.1205092659848827E-004 + 116.28000000000000 -3.7865360195494353E-004 + 116.34000000000000 -3.4529089234979155E-004 + 116.40000000000001 -3.1199556017097425E-004 + 116.46000000000001 -2.7879998496626294E-004 + 116.51999999999998 -2.4573610085277538E-004 + 116.57999999999998 -2.1283535412804376E-004 + 116.63999999999999 -1.8012864631173465E-004 + 116.69999999999999 -1.4764623821799752E-004 + 116.75999999999999 -1.1541778887664674E-004 + 116.81999999999999 -8.3472216126631636E-005 + 116.88000000000000 -5.1837738785066338E-005 + 116.94000000000000 -2.0541794539417161E-005 + 117.00000000000000 1.0388987858469650E-005 + 117.06000000000000 4.0928844080557238E-005 + 117.12000000000000 7.1052850688356844E-005 + 117.18000000000001 1.0073699174725532E-004 + 117.23999999999998 1.2995825220998345E-004 + 117.29999999999998 1.5869446124119264E-004 + 117.35999999999999 1.8692450522637787E-004 + 117.41999999999999 2.1462820766946598E-004 + 117.47999999999999 2.4178647371472052E-004 + 117.53999999999999 2.6838118482445375E-004 + 117.59999999999999 2.9439524704877621E-004 + 117.66000000000000 3.1981266482030183E-004 + 117.72000000000000 3.4461843699482367E-004 + 117.78000000000000 3.6879868390944442E-004 + 117.84000000000000 3.9234059382224889E-004 + 117.90000000000001 4.1523242444066900E-004 + 117.96000000000001 4.3746349139390752E-004 + 118.01999999999998 4.5902427795716617E-004 + 118.07999999999998 4.7990625843723374E-004 + 118.13999999999999 5.0010203276565541E-004 + 118.19999999999999 5.1960519496459148E-004 + 118.25999999999999 5.3841049249875761E-004 + 118.31999999999999 5.5651373103457382E-004 + 118.38000000000000 5.7391165233590814E-004 + 118.44000000000000 5.9060204122235688E-004 + 118.50000000000000 6.0658380774616374E-004 + 118.56000000000000 6.2185664240339649E-004 + 118.62000000000000 6.3642128574601623E-004 + 118.68000000000001 6.5027930557173689E-004 + 118.73999999999998 6.6343332348726145E-004 + 118.79999999999998 6.7588664361429597E-004 + 118.85999999999999 6.8764350017678144E-004 + 118.91999999999999 6.9870884091262581E-004 + 118.97999999999999 7.0908845291445244E-004 + 119.03999999999999 7.1878874087318099E-004 + 119.09999999999999 7.2781690752337746E-004 + 119.16000000000000 7.3618083105239337E-004 + 119.22000000000000 7.4388893479564980E-004 + 119.28000000000000 7.5095034436489436E-004 + 119.34000000000000 7.5737471173080938E-004 + 119.40000000000001 7.6317234808390751E-004 + 119.46000000000001 7.6835393890997195E-004 + 119.51999999999998 7.7293083752803012E-004 + 119.57999999999998 7.7691479532224651E-004 + 119.63999999999999 7.8031801229264640E-004 + 119.69999999999999 7.8315307583067440E-004 + 119.75999999999999 7.8543308322442332E-004 + 119.81999999999999 7.8717136624812311E-004 + 119.88000000000000 7.8838162002924301E-004 + 119.94000000000000 7.8907787110069798E-004 + 120.00000000000000 7.8927426930657603E-004 + 120.06000000000000 7.8898538239694914E-004 + 120.12000000000000 7.8822576244321971E-004 + 120.18000000000001 7.8701016127813818E-004 + 120.23999999999998 7.8535349017680813E-004 + 120.29999999999998 7.8327069171184858E-004 + 120.35999999999999 7.8077685379712757E-004 + 120.41999999999999 7.7788706386563782E-004 + 120.47999999999999 7.7461635623465039E-004 + 120.53999999999999 7.7097975271097556E-004 + 120.59999999999999 7.6699231074136198E-004 + 120.66000000000000 7.6266896880721868E-004 + 120.72000000000000 7.5802461711421665E-004 + 120.78000000000000 7.5307407342291668E-004 + 120.84000000000000 7.4783204071350281E-004 + 120.90000000000001 7.4231310955790298E-004 + 120.95999999999998 7.3653173735942787E-004 + 121.01999999999998 7.3050228696098585E-004 + 121.07999999999998 7.2423884824227697E-004 + 121.13999999999999 7.1775544721838520E-004 + 121.19999999999999 7.1106596096590048E-004 + 121.25999999999999 7.0418396569745304E-004 + 121.31999999999999 6.9712282168055682E-004 + 121.38000000000000 6.8989575114487508E-004 + 121.44000000000000 6.8251568756871590E-004 + 121.50000000000000 6.7499534570546909E-004 + 121.56000000000000 6.6734715506961296E-004 + 121.62000000000000 6.5958314247894882E-004 + 121.68000000000001 6.5171517833067388E-004 + 121.73999999999998 6.4375478553850226E-004 + 121.79999999999998 6.3571322328838701E-004 + 121.85999999999999 6.2760139065736365E-004 + 121.91999999999999 6.1942984610432257E-004 + 121.97999999999999 6.1120882602671255E-004 + 122.03999999999999 6.0294825685148687E-004 + 122.09999999999999 5.9465772441416099E-004 + 122.16000000000000 5.8634648135607312E-004 + 122.22000000000000 5.7802347183552746E-004 + 122.28000000000000 5.6969735184160520E-004 + 122.34000000000000 5.6137632755275785E-004 + 122.40000000000001 5.5306841892080992E-004 + 122.45999999999998 5.4478125841582318E-004 + 122.51999999999998 5.3652214432599603E-004 + 122.57999999999998 5.2829811254532198E-004 + 122.63999999999999 5.2011584771874159E-004 + 122.69999999999999 5.1198179821765127E-004 + 122.75999999999999 5.0390201547707673E-004 + 122.81999999999999 4.9588227559331358E-004 + 122.88000000000000 4.8792802161969995E-004 + 122.94000000000000 4.8004440947805997E-004 + 123.00000000000000 4.7223630210025660E-004 + 123.06000000000000 4.6450825468571168E-004 + 123.12000000000000 4.5686448015131039E-004 + 123.18000000000001 4.4930886360145217E-004 + 123.23999999999998 4.4184502972256952E-004 + 123.29999999999998 4.3447627189766291E-004 + 123.35999999999999 4.2720563146529547E-004 + 123.41999999999999 4.2003577317854010E-004 + 123.47999999999999 4.1296915498109822E-004 + 123.53999999999999 4.0600789734020551E-004 + 123.59999999999999 3.9915387092777756E-004 + 123.66000000000000 3.9240870460838337E-004 + 123.72000000000000 3.8577370549020598E-004 + 123.78000000000000 3.7925000851571719E-004 + 123.84000000000000 3.7283847685918979E-004 + 123.90000000000001 3.6653977080354158E-004 + 123.95999999999998 3.6035435344758230E-004 + 124.01999999999998 3.5428251099835261E-004 + 124.07999999999998 3.4832428206153906E-004 + 124.13999999999999 3.4247953193818341E-004 + 124.19999999999999 3.3674800500601719E-004 + 124.25999999999999 3.3112919994005268E-004 + 124.31999999999999 3.2562254614182813E-004 + 124.38000000000000 3.2022720308026481E-004 + 124.44000000000000 3.1494227941252173E-004 + 124.50000000000000 3.0976665035586389E-004 + 124.56000000000000 3.0469906872203578E-004 + 124.62000000000000 2.9973814093697424E-004 + 124.68000000000001 2.9488231987701875E-004 + 124.73999999999998 2.9012991013996456E-004 + 124.79999999999998 2.8547911722202218E-004 + 124.85999999999999 2.8092800777862047E-004 + 124.91999999999999 2.7647450381189490E-004 + 124.97999999999999 2.7211645520717207E-004 + 125.03999999999999 2.6785159626453590E-004 + 125.09999999999999 2.6367761412269072E-004 + 125.16000000000000 2.5959209160582471E-004 + 125.22000000000000 2.5559258028242884E-004 + 125.28000000000000 2.5167657232484213E-004 + 125.34000000000000 2.4784150968394419E-004 + 125.40000000000001 2.4408488873050313E-004 + 125.45999999999998 2.4040410150510963E-004 + 125.51999999999998 2.3679661220939630E-004 + 125.57999999999998 2.3325983804609252E-004 + 125.63999999999999 2.2979121255567708E-004 + 125.69999999999999 2.2638820769490956E-004 + 125.75999999999999 2.2304828612113725E-004 + 125.81999999999999 2.1976895373991198E-004 + 125.88000000000000 2.1654769824014169E-004 + 125.94000000000000 2.1338208381349634E-004 + 126.00000000000000 2.1026963541914554E-004 + 126.06000000000000 2.0720795758051602E-004 + 126.12000000000000 2.0419463632831040E-004 + 126.18000000000001 2.0122732810158947E-004 + 126.23999999999998 1.9830370183554193E-004 + 126.29999999999998 1.9542147367218040E-004 + 126.35999999999999 1.9257841023071471E-004 + 126.41999999999999 1.8977232905980431E-004 + 126.47999999999999 1.8700111947338210E-004 + 126.53999999999999 1.8426274368317410E-004 + 126.59999999999999 1.8155524094012036E-004 + 126.66000000000000 1.7887673386330309E-004 + 126.72000000000000 1.7622543961300698E-004 + 126.78000000000000 1.7359968636008482E-004 + 126.84000000000000 1.7099789587301923E-004 + 126.90000000000001 1.6841859574989200E-004 + 126.95999999999998 1.6586044006512148E-004 + 127.01999999999998 1.6332219073486378E-004 + 127.07999999999998 1.6080273772283747E-004 + 127.13999999999999 1.5830106224180526E-004 + 127.19999999999999 1.5581628526982764E-004 + 127.25999999999999 1.5334760346950976E-004 + 127.31999999999999 1.5089434321069649E-004 + 127.38000000000000 1.4845594565669241E-004 + 127.44000000000000 1.4603192012636271E-004 + 127.50000000000000 1.4362191060951008E-004 + 127.56000000000000 1.4122563156783466E-004 + 127.62000000000000 1.3884288297876063E-004 + 127.68000000000001 1.3647355692903457E-004 + 127.73999999999998 1.3411764243434151E-004 + 127.79999999999998 1.3177520248347545E-004 + 127.85999999999999 1.2944635407311305E-004 + 127.91999999999999 1.2713132690627801E-004 + 127.97999999999999 1.2483040127011781E-004 + 128.03999999999999 1.2254393973365490E-004 + 128.09999999999999 1.2027236127045538E-004 + 128.16000000000000 1.1801617671549138E-004 + 128.22000000000000 1.1577594081384235E-004 + 128.28000000000000 1.1355227893657521E-004 + 128.34000000000000 1.1134586043791093E-004 + 128.40000000000001 1.0915742460632311E-004 + 128.45999999999998 1.0698774379351172E-004 + 128.51999999999998 1.0483763389526293E-004 + 128.57999999999998 1.0270796301478101E-004 + 128.63999999999999 1.0059959985358938E-004 + 128.69999999999999 9.8513454410959216E-005 + 128.75999999999999 9.6450426488677124E-005 + 128.81999999999999 9.4411437120132613E-005 + 128.88000000000000 9.2397390114486576E-005 + 128.94000000000000 9.0409178488081988E-005 + 129.00000000000000 8.8447673910230776E-005 + 129.06000000000000 8.6513710471352163E-005 + 129.12000000000000 8.4608089215028906E-005 + 129.18000000000001 8.2731580091264904E-005 + 129.23999999999998 8.0884895168626365E-005 + 129.29999999999998 7.9068690290516922E-005 + 129.35999999999999 7.7283583626852953E-005 + 129.41999999999999 7.5530137058403503E-005 + 129.47999999999999 7.3808852513335203E-005 + 129.53999999999999 7.2120188776070439E-005 + 129.59999999999999 7.0464548561985124E-005 + 129.66000000000000 6.8842276734679174E-005 + 129.72000000000000 6.7253681084998026E-005 + 129.78000000000000 6.5699018839721459E-005 + 129.84000000000000 6.4178500076274492E-005 + 129.90000000000001 6.2692281539489220E-005 + 129.95999999999998 6.1240477280450137E-005 + 130.01999999999998 5.9823152810765275E-005 + 130.07999999999998 5.8440320248773704E-005 + 130.13999999999999 5.7091948358826764E-005 + 130.19999999999999 5.5777937307646433E-005 + 130.25999999999999 5.4498144017177496E-005 + 130.31999999999999 5.3252351855382135E-005 + 130.38000000000000 5.2040292606167238E-005 + 130.44000000000000 5.0861630973286145E-005 + 130.50000000000000 4.9715967425730543E-005 + 130.56000000000000 4.8602839544251481E-005 + 130.62000000000000 4.7521730462486140E-005 + 130.68000000000001 4.6472060423495097E-005 + 130.73999999999998 4.5453202957747668E-005 + 130.79999999999998 4.4464471624396173E-005 + 130.85999999999999 4.3505146675082573E-005 + 130.91999999999999 4.2574466156164175E-005 + 130.97999999999999 4.1671639268919160E-005 + 131.03999999999999 4.0795849709971707E-005 + 131.09999999999999 3.9946258487896337E-005 + 131.16000000000000 3.9122017250272665E-005 + 131.22000000000000 3.8322265572767096E-005 + 131.28000000000000 3.7546133789014633E-005 + 131.34000000000000 3.6792745159812323E-005 + 131.40000000000001 3.6061224181103320E-005 + 131.45999999999998 3.5350686558356816E-005 + 131.51999999999998 3.4660245924176460E-005 + 131.57999999999998 3.3989009881434683E-005 + 131.63999999999999 3.3336072368682750E-005 + 131.69999999999999 3.2700524446737626E-005 + 131.75999999999999 3.2081444769208828E-005 + 131.81999999999999 3.1477901590392015E-005 + 131.88000000000000 3.0888951683672941E-005 + 131.94000000000000 3.0313641879930971E-005 + 132.00000000000000 2.9751003769471484E-005 + 132.06000000000000 2.9200066803683907E-005 + 132.12000000000000 2.8659856160002700E-005 + 132.18000000000001 2.8129395459873386E-005 + 132.23999999999998 2.7607714228972696E-005 + 132.29999999999998 2.7093853118728628E-005 + 132.35999999999999 2.6586865680405082E-005 + 132.41999999999999 2.6085830429891754E-005 + 132.47999999999999 2.5589846849051802E-005 + 132.53999999999999 2.5098054745418488E-005 + 132.59999999999999 2.4609621856989575E-005 + 132.66000000000000 2.4123759671129068E-005 + 132.72000000000000 2.3639725057466440E-005 + 132.78000000000000 2.3156819862817759E-005 + 132.84000000000000 2.2674396823595793E-005 + 132.90000000000001 2.2191856678638165E-005 + 132.95999999999998 2.1708648726941641E-005 + 133.01999999999998 2.1224271732485490E-005 + 133.07999999999998 2.0738274224415237E-005 + 133.13999999999999 2.0250253320882125E-005 + 133.19999999999999 1.9759851424914477E-005 + 133.25999999999999 1.9266755456173500E-005 + 133.31999999999999 1.8770698025591841E-005 + 133.38000000000000 1.8271453014618285E-005 + 133.44000000000000 1.7768834060823842E-005 + 133.50000000000000 1.7262699313294597E-005 + 133.56000000000000 1.6752946812917827E-005 + 133.62000000000000 1.6239513177317370E-005 + 133.68000000000001 1.5722378704121908E-005 + 133.73999999999998 1.5201564152139525E-005 + 133.79999999999998 1.4677135452523682E-005 + 133.85999999999999 1.4149202502285127E-005 + 133.91999999999999 1.3617918331860072E-005 + 133.97999999999999 1.3083483669528490E-005 + 134.03999999999999 1.2546146676322904E-005 + 134.09999999999999 1.2006199565582707E-005 + 134.16000000000000 1.1463981395352501E-005 + 134.22000000000000 1.0919874364046832E-005 + 134.28000000000000 1.0374301308474067E-005 + 134.34000000000000 9.8277229402829934E-006 + 134.40000000000001 9.2806328087792603E-006 + 134.45999999999998 8.7335515213958976E-006 + 134.51999999999998 8.1870204580490678E-006 + 134.57999999999998 7.6415947188733337E-006 + 134.63999999999999 7.0978340961504069E-006 + 134.69999999999999 6.5562970940689519E-006 + 134.75999999999999 6.0175329948873428E-006 + 134.81999999999999 5.4820724478334560E-006 + 134.88000000000000 4.9504218807852366E-006 + 134.94000000000000 4.4230548840015207E-006 + 135.00000000000000 3.9004099656128931E-006 + 135.06000000000000 3.3828828017727888E-006 + 135.12000000000000 2.8708248470644979E-006 + 135.18000000000001 2.3645398152635917E-006 + 135.23999999999998 1.8642826772265922E-006 + 135.29999999999998 1.3702590575877916E-006 + 135.35999999999999 8.8262554292183859E-007 + 135.41999999999999 4.0148968469822762E-007 + 135.47999999999999 -7.3088947334314818E-008 + 135.53999999999999 -5.4109761076439388E-007 + 135.59999999999999 -1.0025713609200605E-006 + 135.66000000000000 -1.4575917033688675E-006 + 135.72000000000000 -1.9062891657368359E-006 + 135.78000000000000 -2.3488448016225045E-006 + 135.84000000000000 -2.7854922171155280E-006 + 135.90000000000001 -3.2165214364990581E-006 + 135.95999999999998 -3.6422835294346597E-006 + 136.01999999999998 -4.0631941721837163E-006 + 136.07999999999998 -4.4797391940665465E-006 + 136.13999999999999 -4.8924793504730281E-006 + 136.19999999999999 -5.3020553288183712E-006 + 136.25999999999999 -5.7091904344026940E-006 + 136.31999999999999 -6.1146940018889169E-006 + 136.38000000000000 -6.5194641195154746E-006 + 136.44000000000000 -6.9244879248301602E-006 + 136.50000000000000 -7.3308406167445031E-006 + 136.56000000000000 -7.7396827816064052E-006 + 136.62000000000000 -8.1522576180268857E-006 + 136.68000000000001 -8.5698878136733764E-006 + 136.73999999999998 -8.9939677568447266E-006 + 136.79999999999998 -9.4259585672998448E-006 + 136.85999999999999 -9.8673817420087810E-006 + 136.91999999999999 -1.0319810429161531E-005 + 136.97999999999999 -1.0784862634740814E-005 + 137.03999999999999 -1.1264195685919975E-005 + 137.09999999999999 -1.1759499417540926E-005 + 137.16000000000000 -1.2272487299708713E-005 + 137.22000000000000 -1.2804897878456130E-005 + 137.28000000000000 -1.3358479930622004E-005 + 137.34000000000000 -1.3935000339272447E-005 + 137.40000000000001 -1.4536232428505090E-005 + 137.45999999999998 -1.5163957235276532E-005 + 137.51999999999998 -1.5819960034356657E-005 + 137.57999999999998 -1.6506028455770530E-005 + 137.63999999999999 -1.7223950487539747E-005 + 137.69999999999999 -1.7975514185335457E-005 + 137.75999999999999 -1.8762504329683824E-005 + 137.81999999999999 -1.9586699767869327E-005 + 137.88000000000000 -2.0449870864017896E-005 + 137.94000000000000 -2.1353775197658412E-005 + 138.00000000000000 -2.2300153108383397E-005 + 138.06000000000000 -2.3290724749814005E-005 + 138.12000000000000 -2.4327185767332526E-005 + 138.18000000000001 -2.5411193182007915E-005 + 138.23999999999998 -2.6544370209574360E-005 + 138.29999999999998 -2.7728283616647521E-005 + 138.35999999999999 -2.8964454485952144E-005 + 138.41999999999999 -3.0254335144340691E-005 + 138.47999999999999 -3.1599307738585476E-005 + 138.53999999999999 -3.3000671682552123E-005 + 138.59999999999999 -3.4459639269346304E-005 + 138.66000000000000 -3.5977323689728759E-005 + 138.72000000000000 -3.7554730015057620E-005 + 138.78000000000000 -3.9192753650799442E-005 + 138.84000000000000 -4.0892166883475017E-005 + 138.90000000000001 -4.2653608967700803E-005 + 138.95999999999998 -4.4477581439487311E-005 + 139.01999999999998 -4.6364449230503794E-005 + 139.07999999999998 -4.8314421649813703E-005 + 139.13999999999999 -5.0327558890864125E-005 + 139.19999999999999 -5.2403758460996624E-005 + 139.25999999999999 -5.4542753945519278E-005 + 139.31999999999999 -5.6744105574006071E-005 + 139.38000000000000 -5.9007205661835251E-005 + 139.44000000000000 -6.1331259018187350E-005 + 139.50000000000000 -6.3715302488030631E-005 + 139.56000000000000 -6.6158173040638377E-005 + 139.62000000000000 -6.8658516145907216E-005 + 139.68000000000001 -7.1214783517563858E-005 + 139.73999999999998 -7.3825223967653931E-005 + 139.79999999999998 -7.6487867515414852E-005 + 139.85999999999999 -7.9200541735070852E-005 + 139.91999999999999 -8.1960846477210260E-005 + 139.97999999999999 -8.4766162567086916E-005 + 140.03999999999999 -8.7613625304738710E-005 + 140.09999999999999 -9.0500142596004927E-005 + 140.16000000000000 -9.3422383276043974E-005 + 140.22000000000000 -9.6376770768829797E-005 + 140.28000000000000 -9.9359487781047401E-005 + 140.34000000000000 -1.0236645587782791E-004 + 140.40000000000001 -1.0539335293372512E-004 + 140.45999999999998 -1.0843562447595299E-004 + 140.51999999999998 -1.1148845370637069E-004 + 140.57999999999998 -1.1454678595269054E-004 + 140.63999999999999 -1.1760533584759886E-004 + 140.69999999999999 -1.2065858935450881E-004 + 140.75999999999999 -1.2370081386844613E-004 + 140.81999999999999 -1.2672605966920886E-004 + 140.88000000000000 -1.2972816071537294E-004 + 140.94000000000000 -1.3270077059409916E-004 + 141.00000000000000 -1.3563735051755663E-004 + 141.06000000000000 -1.3853120016138942E-004 + 141.12000000000000 -1.4137544365436976E-004 + 141.18000000000001 -1.4416303613349734E-004 + 141.23999999999998 -1.4688682443486910E-004 + 141.29999999999998 -1.4953954040112992E-004 + 141.35999999999999 -1.5211377264333381E-004 + 141.41999999999999 -1.5460201398646774E-004 + 141.47999999999999 -1.5699668803172747E-004 + 141.53999999999999 -1.5929014151268319E-004 + 141.59999999999999 -1.6147466383086158E-004 + 141.66000000000000 -1.6354249404508081E-004 + 141.72000000000000 -1.6548583537089078E-004 + 141.78000000000000 -1.6729692802953282E-004 + 141.84000000000000 -1.6896796949703819E-004 + 141.90000000000001 -1.7049119632774385E-004 + 141.95999999999998 -1.7185886856067189E-004 + 142.01999999999998 -1.7306332441285492E-004 + 142.07999999999998 -1.7409694593208724E-004 + 142.13999999999999 -1.7495221527813199E-004 + 142.19999999999999 -1.7562173873010892E-004 + 142.25999999999999 -1.7609819975260993E-004 + 142.31999999999999 -1.7637444009053265E-004 + 142.38000000000000 -1.7644347858318819E-004 + 142.44000000000000 -1.7629847600034878E-004 + 142.50000000000000 -1.7593280536682467E-004 + 142.56000000000000 -1.7534002551060227E-004 + 142.62000000000000 -1.7451393398258195E-004 + 142.68000000000001 -1.7344857485313594E-004 + 142.73999999999998 -1.7213823381433881E-004 + 142.79999999999998 -1.7057749808149512E-004 + 142.85999999999999 -1.6876124086676281E-004 + 142.91999999999999 -1.6668462928608494E-004 + 142.97999999999999 -1.6434319976804681E-004 + 143.03999999999999 -1.6173276144748630E-004 + 143.09999999999999 -1.5884953503033877E-004 + 143.16000000000000 -1.5569009721490691E-004 + 143.22000000000000 -1.5225137310973934E-004 + 143.28000000000000 -1.4853072154140824E-004 + 143.34000000000000 -1.4452586560572339E-004 + 143.40000000000001 -1.4023495433944524E-004 + 143.45999999999998 -1.3565654102676330E-004 + 143.51999999999998 -1.3078960052142650E-004 + 143.57999999999998 -1.2563352708037806E-004 + 143.63999999999999 -1.2018814614744012E-004 + 143.69999999999999 -1.1445371503693530E-004 + 143.75999999999999 -1.0843092220472898E-004 + 143.81999999999999 -1.0212088591756890E-004 + 143.88000000000000 -9.5525158196652831E-005 + 143.94000000000000 -8.8645741586414228E-005 + 144.00000000000000 -8.1485065842825248E-005 + 144.06000000000000 -7.4045996250378444E-005 + 144.12000000000000 -6.6331845350068997E-005 + 144.18000000000001 -5.8346352035975600E-005 + 144.23999999999998 -5.0093698712882328E-005 + 144.29999999999998 -4.1578500897663720E-005 + 144.35999999999999 -3.2805806175434360E-005 + 144.41999999999999 -2.3781086281688322E-005 + 144.47999999999999 -1.4510245970834607E-005 + 144.53999999999999 -4.9996007831880679E-006 + 144.59999999999999 4.7441241500084472E-006 + 144.66000000000000 1.4713792599816017E-005 + 144.72000000000000 2.4901874547608307E-005 + 144.78000000000000 3.5300456791757249E-005 + 144.84000000000000 4.5901269447345925E-005 + 144.90000000000001 5.6695657405439600E-005 + 144.95999999999998 6.7674632947143282E-005 + 145.01999999999998 7.8828859413713614E-005 + 145.07999999999998 9.0148713491933726E-005 + 145.13999999999999 1.0162424422859098E-004 + 145.19999999999999 1.1324520269565065E-004 + 145.25999999999999 1.2500108422825519E-004 + 145.31999999999999 1.3688113060100038E-004 + 145.38000000000000 1.4887433846140380E-004 + 145.44000000000000 1.6096947596902817E-004 + 145.50000000000000 1.7315510541089730E-004 + 145.56000000000000 1.8541958633465363E-004 + 145.62000000000000 1.9775109185992860E-004 + 145.68000000000001 2.1013767038430782E-004 + 145.73999999999998 2.2256718486785576E-004 + 145.79999999999998 2.3502737469868721E-004 + 145.85999999999999 2.4750588144184694E-004 + 145.91999999999999 2.5999022790241302E-004 + 145.97999999999999 2.7246784713129803E-004 + 146.03999999999999 2.8492613952308418E-004 + 146.09999999999999 2.9735241156824966E-004 + 146.16000000000000 3.0973396865598075E-004 + 146.22000000000000 3.2205806321537126E-004 + 146.28000000000000 3.3431201855347491E-004 + 146.34000000000000 3.4648305801913162E-004 + 146.40000000000001 3.5855855305710080E-004 + 146.45999999999998 3.7052588423573549E-004 + 146.51999999999998 3.8237247144012849E-004 + 146.57999999999998 3.9408583157156868E-004 + 146.63999999999999 4.0565356324363941E-004 + 146.69999999999999 4.1706345721005602E-004 + 146.75999999999999 4.2830336803208744E-004 + 146.81999999999999 4.3936128868565907E-004 + 146.88000000000000 4.5022541070731219E-004 + 146.94000000000000 4.6088408372437861E-004 + 147.00000000000000 4.7132580695097103E-004 + 147.06000000000000 4.8153936112741623E-004 + 147.12000000000000 4.9151362930095830E-004 + 147.18000000000001 5.0123782541123456E-004 + 147.23999999999998 5.1070127953270299E-004 + 147.29999999999998 5.1989367347239992E-004 + 147.35999999999999 5.2880486468103848E-004 + 147.41999999999999 5.3742499719921708E-004 + 147.47999999999999 5.4574442757337701E-004 + 147.53999999999999 5.5375380596030526E-004 + 147.59999999999999 5.6144409951229361E-004 + 147.66000000000000 5.6880650273484750E-004 + 147.72000000000000 5.7583250509434317E-004 + 147.78000000000000 5.8251392825972700E-004 + 147.84000000000000 5.8884288526078851E-004 + 147.90000000000001 5.9481178992248972E-004 + 147.95999999999998 6.0041332308214074E-004 + 148.01999999999998 6.0564055832234393E-004 + 148.07999999999998 6.1048690521286510E-004 + 148.13999999999999 6.1494602219983984E-004 + 148.19999999999999 6.1901192749583419E-004 + 148.25999999999999 6.2267907686593615E-004 + 148.31999999999999 6.2594217913173190E-004 + 148.38000000000000 6.2879638291795704E-004 + 148.44000000000000 6.3123716450451644E-004 + 148.50000000000000 6.3326042055803812E-004 + 148.56000000000000 6.3486238484618122E-004 + 148.62000000000000 6.3603974162006877E-004 + 148.68000000000001 6.3678952173051287E-004 + 148.73999999999998 6.3710924451245744E-004 + 148.79999999999998 6.3699677965462713E-004 + 148.85999999999999 6.3645049745304641E-004 + 148.91999999999999 6.3546920733228258E-004 + 148.97999999999999 6.3405212034754722E-004 + 149.03999999999999 6.3219892603431308E-004 + 149.09999999999999 6.2990982532188928E-004 + 149.16000000000000 6.2718548021009266E-004 + 149.22000000000000 6.2402691389867090E-004 + 149.28000000000000 6.2043581256663737E-004 + 149.34000000000000 6.1641422864934850E-004 + 149.40000000000001 6.1196479463293833E-004 + 149.45999999999998 6.0709054506241265E-004 + 149.51999999999998 6.0179502570521489E-004 + 149.57999999999998 5.9608232925740319E-004 + 149.63999999999999 5.8995701464633818E-004 + 149.69999999999999 5.8342421629409670E-004 + 149.75999999999999 5.7648937944099025E-004 + 149.81999999999999 5.6915858622831399E-004 + 149.88000000000000 5.6143833984491625E-004 + 149.94000000000000 5.5333566809407015E-004 + 150.00000000000000 5.4485799443459667E-004 + 150.06000000000000 5.3601330968429460E-004 + 150.12000000000000 5.2681003662497037E-004 + 150.18000000000001 5.1725699613467454E-004 + 150.23999999999998 5.0736348647832880E-004 + 150.29999999999998 4.9713930351733232E-004 + 150.35999999999999 4.8659460332389472E-004 + 150.41999999999999 4.7574000023725129E-004 + 150.47999999999999 4.6458658416909668E-004 + 150.53999999999999 4.5314574284767835E-004 + 150.59999999999999 4.4142929599489685E-004 + 150.66000000000000 4.2944947105783297E-004 + 150.72000000000000 4.1721883721628254E-004 + 150.78000000000000 4.0475029685182914E-004 + 150.84000000000000 3.9205706766343293E-004 + 150.90000000000001 3.7915267876410179E-004 + 150.95999999999998 3.6605096805925090E-004 + 151.01999999999998 3.5276599584105665E-004 + 151.07999999999998 3.3931203905432226E-004 + 151.13999999999999 3.2570363705556091E-004 + 151.19999999999999 3.1195544185662089E-004 + 151.25999999999999 2.9808229950335872E-004 + 151.31999999999999 2.8409912572600221E-004 + 151.38000000000000 2.7002095957753933E-004 + 151.44000000000000 2.5586289939165169E-004 + 151.50000000000000 2.4164008185811951E-004 + 151.56000000000000 2.2736765527346493E-004 + 151.62000000000000 2.1306071953535886E-004 + 151.68000000000001 1.9873437188699732E-004 + 151.73999999999998 1.8440361486528421E-004 + 151.79999999999998 1.7008338248516080E-004 + 151.85999999999999 1.5578846989776991E-004 + 151.91999999999999 1.4153355811418473E-004 + 151.97999999999999 1.2733317218914942E-004 + 152.03999999999999 1.1320164033224337E-004 + 152.09999999999999 9.9153109361184460E-005 + 152.16000000000000 8.5201498711408107E-005 + 152.22000000000000 7.1360494969509818E-005 + 152.28000000000000 5.7643505589048563E-005 + 152.34000000000000 4.4063648456364609E-005 + 152.40000000000001 3.0633743687417797E-005 + 152.45999999999998 1.7366290244717959E-005 + 152.51999999999998 4.2734225968570083E-006 + 152.57999999999998 -8.6331090127749967E-006 + 152.63999999999999 -2.1341936019840193E-005 + 152.69999999999999 -3.3842111489239301E-005 + 152.75999999999999 -4.6123119936282929E-005 + 152.81999999999999 -5.8174907825438429E-005 + 152.88000000000000 -6.9987887636508518E-005 + 152.94000000000000 -8.1552947331630345E-005 + 153.00000000000000 -9.2861494519964302E-005 + 153.06000000000000 -1.0390541652395976E-004 + 153.12000000000000 -1.1467714069765577E-004 + 153.17999999999998 -1.2516959953169234E-004 + 153.23999999999998 -1.3537625245610584E-004 + 153.29999999999998 -1.4529108997645102E-004 + 153.35999999999999 -1.5490861636361232E-004 + 153.41999999999999 -1.6422387713634431E-004 + 153.47999999999999 -1.7323243953130336E-004 + 153.53999999999999 -1.8193037426400164E-004 + 153.59999999999999 -1.9031427568689412E-004 + 153.66000000000000 -1.9838123263080223E-004 + 153.72000000000000 -2.0612884167894331E-004 + 153.78000000000000 -2.1355518395280458E-004 + 153.84000000000000 -2.2065887148330131E-004 + 153.90000000000001 -2.2743894355940796E-004 + 153.95999999999998 -2.3389495044766115E-004 + 154.01999999999998 -2.4002689567307876E-004 + 154.07999999999998 -2.4583523767257912E-004 + 154.13999999999999 -2.5132091667855801E-004 + 154.19999999999999 -2.5648527455149908E-004 + 154.25999999999999 -2.6133011501921219E-004 + 154.31999999999999 -2.6585769764893860E-004 + 154.38000000000000 -2.7007068451000892E-004 + 154.44000000000000 -2.7397213669154614E-004 + 154.50000000000000 -2.7756550961544144E-004 + 154.56000000000000 -2.8085465296319039E-004 + 154.62000000000000 -2.8384375109109073E-004 + 154.67999999999998 -2.8653735302760223E-004 + 154.73999999999998 -2.8894037016394849E-004 + 154.79999999999998 -2.9105797595388645E-004 + 154.85999999999999 -2.9289564745973133E-004 + 154.91999999999999 -2.9445916304099700E-004 + 154.97999999999999 -2.9575451207529706E-004 + 155.03999999999999 -2.9678789922700169E-004 + 155.09999999999999 -2.9756578189364875E-004 + 155.16000000000000 -2.9809478863130202E-004 + 155.22000000000000 -2.9838171247401508E-004 + 155.28000000000000 -2.9843350486834783E-004 + 155.34000000000000 -2.9825722732847258E-004 + 155.40000000000001 -2.9786007874315772E-004 + 155.45999999999998 -2.9724933167347842E-004 + 155.51999999999998 -2.9643234609712411E-004 + 155.57999999999998 -2.9541655644893544E-004 + 155.63999999999999 -2.9420947043180698E-004 + 155.69999999999999 -2.9281861675921762E-004 + 155.75999999999999 -2.9125156386895177E-004 + 155.81999999999999 -2.8951589403545521E-004 + 155.88000000000000 -2.8761916990621770E-004 + 155.94000000000000 -2.8556897538835644E-004 + 156.00000000000000 -2.8337289834116849E-004 + 156.06000000000000 -2.8103839400386811E-004 + 156.12000000000000 -2.7857301921635182E-004 + 156.17999999999998 -2.7598415134647437E-004 + 156.23999999999998 -2.7327918190502427E-004 + 156.29999999999998 -2.7046539639894368E-004 + 156.35999999999999 -2.6754999064090580E-004 + 156.41999999999999 -2.6454008916792436E-004 + 156.47999999999999 -2.6144265533658260E-004 + 156.53999999999999 -2.5826455896777671E-004 + 156.59999999999999 -2.5501256618968437E-004 + 156.66000000000000 -2.5169331769247621E-004 + 156.72000000000000 -2.4831327845002270E-004 + 156.78000000000000 -2.4487877122084361E-004 + 156.84000000000000 -2.4139601036119560E-004 + 156.90000000000001 -2.3787100342601410E-004 + 156.95999999999998 -2.3430964166624277E-004 + 157.01999999999998 -2.3071765726560684E-004 + 157.07999999999998 -2.2710057458569829E-004 + 157.13999999999999 -2.2346381194721836E-004 + 157.19999999999999 -2.1981259480118362E-004 + 157.25999999999999 -2.1615199041483777E-004 + 157.31999999999999 -2.1248688292188419E-004 + 157.38000000000000 -2.0882201820398308E-004 + 157.44000000000000 -2.0516195996362209E-004 + 157.50000000000000 -2.0151110318838728E-004 + 157.56000000000000 -1.9787371238794827E-004 + 157.62000000000000 -1.9425385261247501E-004 + 157.67999999999998 -1.9065544771118369E-004 + 157.73999999999998 -1.8708225008958317E-004 + 157.79999999999998 -1.8353787762051741E-004 + 157.85999999999999 -1.8002577899968008E-004 + 157.91999999999999 -1.7654926662169246E-004 + 157.97999999999999 -1.7311149315381186E-004 + 158.03999999999999 -1.6971547912196207E-004 + 158.09999999999999 -1.6636410821830265E-004 + 158.16000000000000 -1.6306009689628497E-004 + 158.22000000000000 -1.5980606002798244E-004 + 158.28000000000000 -1.5660447671848020E-004 + 158.34000000000000 -1.5345768468133983E-004 + 158.40000000000001 -1.5036791465666946E-004 + 158.45999999999998 -1.4733725786856238E-004 + 158.51999999999998 -1.4436768368108696E-004 + 158.57999999999998 -1.4146104181273966E-004 + 158.63999999999999 -1.3861905106585259E-004 + 158.69999999999999 -1.3584331584482576E-004 + 158.75999999999999 -1.3313531940629914E-004 + 158.81999999999999 -1.3049640699535570E-004 + 158.88000000000000 -1.2792782164730923E-004 + 158.94000000000000 -1.2543065808631935E-004 + 159.00000000000000 -1.2300590364971309E-004 + 159.06000000000000 -1.2065440455030272E-004 + 159.12000000000000 -1.1837689542968169E-004 + 159.17999999999998 -1.1617398689757949E-004 + 159.23999999999998 -1.1404617541113267E-004 + 159.29999999999998 -1.1199381028081842E-004 + 159.35999999999999 -1.1001716522576398E-004 + 159.41999999999999 -1.0811638064188670E-004 + 159.47999999999999 -1.0629149899266789E-004 + 159.53999999999999 -1.0454246691581355E-004 + 159.59999999999999 -1.0286912953029732E-004 + 159.66000000000000 -1.0127125324823992E-004 + 159.72000000000000 -9.9748537563225102E-005 + 159.78000000000000 -9.8300597219304206E-005 + 159.84000000000000 -9.6926980983106135E-005 + 159.90000000000001 -9.5627179453732593E-005 + 159.95999999999998 -9.4400639476156019E-005 + 160.01999999999998 -9.3246733782446651E-005 + 160.07999999999998 -9.2164808481677324E-005 + 160.13999999999999 -9.1154148769162789E-005 + 160.19999999999999 -9.0213997054845423E-005 + 160.25999999999999 -8.9343563902213473E-005 + 160.31999999999999 -8.8542006677783428E-005 + 160.38000000000000 -8.7808433992481218E-005 + 160.44000000000000 -8.7141932474821423E-005 + 160.50000000000000 -8.6541519107571500E-005 + 160.56000000000000 -8.6006191734478368E-005 + 160.62000000000000 -8.5534912299098094E-005 + 160.67999999999998 -8.5126585299146604E-005 + 160.73999999999998 -8.4780111637354375E-005 + 160.79999999999998 -8.4494341981261337E-005 + 160.85999999999999 -8.4268118343303446E-005 + 160.91999999999999 -8.4100267523414159E-005 + 160.97999999999999 -8.3989623427658576E-005 + 161.03999999999999 -8.3935014084288140E-005 + 161.09999999999999 -8.3935278578818151E-005 + 161.16000000000000 -8.3989286457118088E-005 + 161.22000000000000 -8.4095941480134915E-005 + 161.28000000000000 -8.4254164041167338E-005 + 161.34000000000000 -8.4462940337130297E-005 + 161.40000000000001 -8.4721285582480262E-005 + 161.45999999999998 -8.5028284100614968E-005 + 161.51999999999998 -8.5383067996865970E-005 + 161.57999999999998 -8.5784815116313941E-005 + 161.63999999999999 -8.6232761525596648E-005 + 161.69999999999999 -8.6726177975206617E-005 + 161.75999999999999 -8.7264396698292281E-005 + 161.81999999999999 -8.7846774642284087E-005 + 161.88000000000000 -8.8472708580350661E-005 + 161.94000000000000 -8.9141613854408079E-005 + 162.00000000000000 -8.9852941188955785E-005 + 162.06000000000000 -9.0606145940437733E-005 + 162.12000000000000 -9.1400705421212680E-005 + 162.17999999999998 -9.2236104573888600E-005 + 162.23999999999998 -9.3111841692450814E-005 + 162.29999999999998 -9.4027415576474084E-005 + 162.35999999999999 -9.4982351669525687E-005 + 162.41999999999999 -9.5976172014625014E-005 + 162.47999999999999 -9.7008414680261975E-005 + 162.53999999999999 -9.8078641823801197E-005 + 162.59999999999999 -9.9186415222293894E-005 + 162.66000000000000 -1.0033133903719224E-004 + 162.72000000000000 -1.0151303393524802E-004 + 162.78000000000000 -1.0273114679778460E-004 + 162.84000000000000 -1.0398533700064407E-004 + 162.90000000000001 -1.0527530064636450E-004 + 162.95999999999998 -1.0660074895080848E-004 + 163.01999999999998 -1.0796139403372387E-004 + 163.07999999999998 -1.0935697476512363E-004 + 163.13999999999999 -1.1078721568839826E-004 + 163.19999999999999 -1.1225183627591097E-004 + 163.25999999999999 -1.1375054971321619E-004 + 163.31999999999999 -1.1528303294165216E-004 + 163.38000000000000 -1.1684893277954333E-004 + 163.44000000000000 -1.1844785561815089E-004 + 163.50000000000000 -1.2007933484733031E-004 + 163.56000000000000 -1.2174286307196118E-004 + 163.62000000000000 -1.2343784741479988E-004 + 163.67999999999998 -1.2516362866878074E-004 + 163.73999999999998 -1.2691946308722671E-004 + 163.79999999999998 -1.2870452675405522E-004 + 163.85999999999999 -1.3051788188503451E-004 + 163.91999999999999 -1.3235853155525531E-004 + 163.97999999999999 -1.3422540129998074E-004 + 164.03999999999999 -1.3611729444497784E-004 + 164.09999999999999 -1.3803294951059782E-004 + 164.16000000000000 -1.3997102518401920E-004 + 164.22000000000000 -1.4193007511731628E-004 + 164.28000000000000 -1.4390859509418920E-004 + 164.34000000000000 -1.4590496855535973E-004 + 164.40000000000001 -1.4791753897568547E-004 + 164.45999999999998 -1.4994452485955751E-004 + 164.51999999999998 -1.5198409803368330E-004 + 164.57999999999998 -1.5403433060291678E-004 + 164.63999999999999 -1.5609318937530130E-004 + 164.69999999999999 -1.5815857367246130E-004 + 164.75999999999999 -1.6022824839757196E-004 + 164.81999999999999 -1.6229991118988903E-004 + 164.88000000000000 -1.6437113719401758E-004 + 164.94000000000000 -1.6643935097380354E-004 + 165.00000000000000 -1.6850188570855033E-004 + 165.06000000000000 -1.7055594031540114E-004 + 165.12000000000000 -1.7259858936556407E-004 + 165.17999999999998 -1.7462676027575860E-004 + 165.23999999999998 -1.7663724067911246E-004 + 165.29999999999998 -1.7862668163535835E-004 + 165.35999999999999 -1.8059162901752447E-004 + 165.41999999999999 -1.8252848000994103E-004 + 165.47999999999999 -1.8443351117449939E-004 + 165.53999999999999 -1.8630289382159164E-004 + 165.59999999999999 -1.8813266799376591E-004 + 165.66000000000000 -1.8991881579120016E-004 + 165.72000000000000 -1.9165720586312109E-004 + 165.78000000000000 -1.9334366056991068E-004 + 165.84000000000000 -1.9497390426653787E-004 + 165.90000000000001 -1.9654362983115579E-004 + 165.95999999999998 -1.9804848539850200E-004 + 166.01999999999998 -1.9948408358359441E-004 + 166.07999999999998 -2.0084601906838933E-004 + 166.13999999999999 -2.0212986877510706E-004 + 166.19999999999999 -2.0333120392065993E-004 + 166.25999999999999 -2.0444561502641151E-004 + 166.31999999999999 -2.0546867837510009E-004 + 166.38000000000000 -2.0639601217624018E-004 + 166.44000000000000 -2.0722326099132553E-004 + 166.50000000000000 -2.0794609010334200E-004 + 166.56000000000000 -2.0856021911820375E-004 + 166.62000000000000 -2.0906144325074595E-004 + 166.67999999999998 -2.0944561796032223E-004 + 166.73999999999998 -2.0970866508818859E-004 + 166.79999999999998 -2.0984662393677280E-004 + 166.85999999999999 -2.0985564525305000E-004 + 166.91999999999999 -2.0973200272908325E-004 + 166.97999999999999 -2.0947210264380867E-004 + 167.03999999999999 -2.0907253428966102E-004 + 167.09999999999999 -2.0853005294966563E-004 + 167.16000000000000 -2.0784161435400718E-004 + 167.22000000000000 -2.0700438201402040E-004 + 167.28000000000000 -2.0601574225228092E-004 + 167.34000000000000 -2.0487332009959963E-004 + 167.40000000000001 -2.0357501220996346E-004 + 167.45999999999998 -2.0211896702586384E-004 + 167.51999999999998 -2.0050361896767888E-004 + 167.57999999999998 -1.9872768011349495E-004 + 167.63999999999999 -1.9679013771278973E-004 + 167.69999999999999 -1.9469031313130877E-004 + 167.75999999999999 -1.9242782522976189E-004 + 167.81999999999999 -1.9000259496888263E-004 + 167.88000000000000 -1.8741486045478840E-004 + 167.94000000000000 -1.8466518848592168E-004 + 168.00000000000000 -1.8175446497865891E-004 + 168.06000000000000 -1.7868389618579925E-004 + 168.12000000000000 -1.7545502465199708E-004 + 168.17999999999998 -1.7206970886986006E-004 + 168.23999999999998 -1.6853014368096216E-004 + 168.29999999999998 -1.6483885739333154E-004 + 168.35999999999999 -1.6099870759512733E-004 + 168.41999999999999 -1.5701284423689889E-004 + 168.47999999999999 -1.5288477866994086E-004 + 168.53999999999999 -1.4861831461719457E-004 + 168.59999999999999 -1.4421756529971850E-004 + 168.66000000000000 -1.3968697055090603E-004 + 168.72000000000000 -1.3503123378564650E-004 + 168.78000000000000 -1.3025536495701127E-004 + 168.84000000000000 -1.2536465752707685E-004 + 168.90000000000001 -1.2036463426972969E-004 + 168.95999999999998 -1.1526108009813528E-004 + 169.01999999999998 -1.1006002613762734E-004 + 169.07999999999998 -1.0476771952913214E-004 + 169.13999999999999 -9.9390608421191123E-005 + 169.19999999999999 -9.3935336095662709E-005 + 169.25999999999999 -8.8408720998059390E-005 + 169.31999999999999 -8.2817734320319642E-005 + 169.38000000000000 -7.7169488007513136E-005 + 169.44000000000000 -7.1471217719101842E-005 + 169.50000000000000 -6.5730269196116471E-005 + 169.56000000000000 -5.9954079458692903E-005 + 169.62000000000000 -5.4150149079926885E-005 + 169.67999999999998 -4.8326046180468925E-005 + 169.73999999999998 -4.2489362758410807E-005 + 169.79999999999998 -3.6647725872576987E-005 + 169.85999999999999 -3.0808761785508386E-005 + 169.91999999999999 -2.4980084544848029E-005 + 169.97999999999999 -1.9169279373441972E-005 + 170.03999999999999 -1.3383886009684267E-005 + 170.09999999999999 -7.6313815503821555E-006 + 170.16000000000000 -1.9191693057942036E-006 + 170.22000000000000 3.7454408877909013E-006 + 170.28000000000000 9.3552470767591998E-006 + 170.34000000000000 1.4903173322154961E-005 + 170.40000000000001 2.0382274524568567E-005 + 170.45999999999998 2.5785761462979176E-005 + 170.51999999999998 3.1107010598785215E-005 + 170.57999999999998 3.6339575524670624E-005 + 170.63999999999999 4.1477199125030805E-005 + 170.69999999999999 4.6513829342650022E-005 + 170.75999999999999 5.1443630342870811E-005 + 170.81999999999999 5.6260992374911684E-005 + 170.88000000000000 6.0960537697240817E-005 + 170.94000000000000 6.5537136692073235E-005 + 171.00000000000000 6.9985902553020251E-005 + 171.06000000000000 7.4302222199559270E-005 + 171.12000000000000 7.8481731771986386E-005 + 171.17999999999998 8.2520345315011844E-005 + 171.23999999999998 8.6414244644102844E-005 + 171.29999999999998 9.0159876459532882E-005 + 171.35999999999999 9.3753975519435639E-005 + 171.41999999999999 9.7193532974656788E-005 + 171.47999999999999 1.0047582763095157E-004 + 171.53999999999999 1.0359838661182536E-004 + 171.59999999999999 1.0655901934845680E-004 + 171.66000000000000 1.0935578875358984E-004 + 171.72000000000000 1.1198703047326813E-004 + 171.78000000000000 1.1445132716754351E-004 + 171.84000000000000 1.1674751176078684E-004 + 171.90000000000001 1.1887466713784562E-004 + 171.95999999999998 1.2083212696513559E-004 + 172.01999999999998 1.2261945926842760E-004 + 172.07999999999998 1.2423646967226504E-004 + 172.13999999999999 1.2568319794982940E-004 + 172.19999999999999 1.2695990650657039E-004 + 172.25999999999999 1.2806707490921256E-004 + 172.31999999999999 1.2900539659433833E-004 + 172.38000000000000 1.2977575822394790E-004 + 172.44000000000000 1.3037925511839128E-004 + 172.50000000000000 1.3081714212427050E-004 + 172.56000000000000 1.3109085654223606E-004 + 172.62000000000000 1.3120197636980877E-004 + 172.67999999999998 1.3115221727392337E-004 + 172.73999999999998 1.3094342932231659E-004 + 172.79999999999998 1.3057756912314861E-004 + 172.85999999999999 1.3005668393432595E-004 + 172.91999999999999 1.2938289657190484E-004 + 172.97999999999999 1.2855840966832809E-004 + 173.03999999999999 1.2758545993871834E-004 + 173.09999999999999 1.2646632162491666E-004 + 173.16000000000000 1.2520331553941071E-004 + 173.22000000000000 1.2379878226588320E-004 + 173.28000000000000 1.2225508877084900E-004 + 173.34000000000000 1.2057456944337394E-004 + 173.40000000000001 1.1875960740420036E-004 + 173.45999999999998 1.1681256197255522E-004 + 173.51999999999998 1.1473578730041185E-004 + 173.57999999999998 1.1253163997593398E-004 + 173.63999999999999 1.1020246875288782E-004 + 173.69999999999999 1.0775059059505232E-004 + 173.75999999999999 1.0517833217698588E-004 + 173.81999999999999 1.0248798265048772E-004 + 173.88000000000000 9.9681823761496729E-005 + 173.94000000000000 9.6762098729364940E-005 + 174.00000000000000 9.3731022078991671E-005 + 174.06000000000000 9.0590788734180221E-005 + 174.12000000000000 8.7343546338853559E-005 + 174.17999999999998 8.3991406587358944E-005 + 174.23999999999998 8.0536437509110242E-005 + 174.29999999999998 7.6980675038821578E-005 + 174.35999999999999 7.3326106514845767E-005 + 174.41999999999999 6.9574689632681319E-005 + 174.47999999999999 6.5728332934123797E-005 + 174.53999999999999 6.1788931004410811E-005 + 174.59999999999999 5.7758340408976945E-005 + 174.66000000000000 5.3638401003838395E-005 + 174.72000000000000 4.9430953850473269E-005 + 174.78000000000000 4.5137841494298713E-005 + 174.84000000000000 4.0760904332788324E-005 + 174.90000000000001 3.6302020156999156E-005 + 174.95999999999998 3.1763099595481372E-005 + 175.01999999999998 2.7146104136378354E-005 + 175.07999999999998 2.2453053455570733E-005 + 175.13999999999999 1.7686037976930133E-005 + 175.19999999999999 1.2847237227059186E-005 + 175.25999999999999 7.9389281861086166E-006 + 175.31999999999999 2.9634919921132778E-006 + 175.38000000000000 -2.0765721061506067E-006 + 175.44000000000000 -7.1786330284228796E-006 + 175.50000000000000 -1.2339922660386602E-005 + 175.56000000000000 -1.7557528122646484E-005 + 175.62000000000000 -2.2828388396821699E-005 + 175.67999999999998 -2.8149272199854326E-005 + 175.73999999999998 -3.3516791772545621E-005 + 175.79999999999998 -3.8927384170843319E-005 + 175.85999999999999 -4.4377317427884690E-005 + 175.91999999999999 -4.9862682464818617E-005 + 175.97999999999999 -5.5379372239885427E-005 + 176.03999999999999 -6.0923122579363841E-005 + 176.09999999999999 -6.6489463037946154E-005 + 176.16000000000000 -7.2073748114551251E-005 + 176.22000000000000 -7.7671143758552868E-005 + 176.28000000000000 -8.3276623571523322E-005 + 176.34000000000000 -8.8884972681046030E-005 + 176.40000000000001 -9.4490795414305098E-005 + 176.45999999999998 -1.0008850419026158E-004 + 176.51999999999998 -1.0567233102580231E-004 + 176.57999999999998 -1.1123631186142837E-004 + 176.63999999999999 -1.1677430032427445E-004 + 176.69999999999999 -1.2227998009209037E-004 + 176.75999999999999 -1.2774684862105440E-004 + 176.81999999999999 -1.3316822274198070E-004 + 176.88000000000000 -1.3853726250350346E-004 + 176.94000000000000 -1.4384697464514155E-004 + 177.00000000000000 -1.4909020143644692E-004 + 177.06000000000000 -1.5425965585273203E-004 + 177.12000000000000 -1.5934791096335776E-004 + 177.17999999999998 -1.6434744322053958E-004 + 177.23999999999998 -1.6925062464371896E-004 + 177.29999999999998 -1.7404975173079053E-004 + 177.35999999999999 -1.7873704125231896E-004 + 177.41999999999999 -1.8330468308882066E-004 + 177.47999999999999 -1.8774482407684867E-004 + 177.53999999999999 -1.9204961852266764E-004 + 177.59999999999999 -1.9621120968636070E-004 + 177.66000000000000 -2.0022179429177419E-004 + 177.72000000000000 -2.0407359160736052E-004 + 177.78000000000000 -2.0775890324787236E-004 + 177.84000000000000 -2.1127010523955462E-004 + 177.90000000000001 -2.1459967324484407E-004 + 177.95999999999998 -2.1774019818211524E-004 + 178.01999999999998 -2.2068439871650384E-004 + 178.07999999999998 -2.2342516562302408E-004 + 178.13999999999999 -2.2595552795800207E-004 + 178.19999999999999 -2.2826869196407797E-004 + 178.25999999999999 -2.3035808862430576E-004 + 178.31999999999999 -2.3221735504853731E-004 + 178.38000000000000 -2.3384034764267734E-004 + 178.44000000000000 -2.3522122800034926E-004 + 178.50000000000000 -2.3635437946896919E-004 + 178.56000000000000 -2.3723452548371862E-004 + 178.62000000000000 -2.3785668530260825E-004 + 178.67999999999998 -2.3821621675197051E-004 + 178.73999999999998 -2.3830885678337299E-004 + 178.79999999999998 -2.3813067003124145E-004 + 178.85999999999999 -2.3767815874911163E-004 + 178.91999999999999 -2.3694821403256859E-004 + 178.97999999999999 -2.3593814952789288E-004 + 179.03999999999999 -2.3464570767507836E-004 + 179.09999999999999 -2.3306910246362149E-004 + 179.16000000000000 -2.3120698008861890E-004 + 179.22000000000000 -2.2905847042855714E-004 + 179.28000000000000 -2.2662317871522078E-004 + 179.34000000000000 -2.2390116996691178E-004 + 179.40000000000001 -2.2089300044808482E-004 + 179.45999999999998 -2.1759974381195657E-004 + 179.51999999999998 -2.1402292547797794E-004 + 179.57999999999998 -2.1016460877364474E-004 + 179.63999999999999 -2.0602732973223475E-004 + 179.69999999999999 -2.0161413286320763E-004 + 179.75999999999999 -1.9692856475348489E-004 + 179.81999999999999 -1.9197470044836045E-004 + 179.88000000000000 -1.8675709748178427E-004 + 179.94000000000000 -1.8128083336351264E-004 + 180.00000000000000 -1.7555147353748041E-004 + 180.06000000000000 -1.6957507691269568E-004 + 180.12000000000000 -1.6335818609226462E-004 + 180.17999999999998 -1.5690782687268590E-004 + 180.23999999999998 -1.5023147391166465E-004 + 180.29999999999998 -1.4333709174901260E-004 + 180.35999999999999 -1.3623305267309295E-004 + 180.41999999999999 -1.2892814922995792E-004 + 180.47999999999999 -1.2143158542176488E-004 + 180.53999999999999 -1.1375293075732410E-004 + 180.59999999999999 -1.0590213172944271E-004 + 180.66000000000000 -9.7889448745984122E-005 + 180.72000000000000 -8.9725471126244963E-005 + 180.78000000000000 -8.1421066912839993E-005 + 180.84000000000000 -7.2987378529564719E-005 + 180.90000000000001 -6.4435771455268958E-005 + 180.95999999999998 -5.5777829740806057E-005 + 181.01999999999998 -4.7025327534137187E-005 + 181.07999999999998 -3.8190221675393372E-005 + 181.13999999999999 -2.9284583916324282E-005 + 181.19999999999999 -2.0320601387023844E-005 + 181.25999999999999 -1.1310548185954982E-005 + 181.31999999999999 -2.2667704341146800E-006 + 181.38000000000000 6.7983730381867342E-006 + 181.44000000000000 1.5872515584805020E-005 + 181.50000000000000 2.4943330105931435E-005 + 181.56000000000000 3.3998526142579668E-005 + 181.62000000000000 4.3025911009280019E-005 + 181.67999999999998 5.2013413215629043E-005 + 181.73999999999998 6.0949104597490902E-005 + 181.79999999999998 6.9821233655183249E-005 + 181.85999999999999 7.8618279295823501E-005 + 181.91999999999999 8.7328931394359778E-005 + 181.97999999999999 9.5942157131461580E-005 + 182.03999999999999 1.0444722481410965E-004 + 182.09999999999999 1.1283370702111400E-004 + 182.16000000000000 1.2109153392153435E-004 + 182.22000000000000 1.2921100010011572E-004 + 182.28000000000000 1.3718277285941277E-004 + 182.34000000000000 1.4499795571027270E-004 + 182.39999999999998 1.5264804877868497E-004 + 182.45999999999998 1.6012500637002387E-004 + 182.51999999999998 1.6742125062746397E-004 + 182.57999999999998 1.7452964091171672E-004 + 182.63999999999999 1.8144350690196240E-004 + 182.69999999999999 1.8815669056589394E-004 + 182.75999999999999 1.9466350467492897E-004 + 182.81999999999999 2.0095873620870963E-004 + 182.88000000000000 2.0703769062355246E-004 + 182.94000000000000 2.1289615178025499E-004 + 183.00000000000000 2.1853037258082007E-004 + 183.06000000000000 2.2393712410350992E-004 + 183.12000000000000 2.2911362389958323E-004 + 183.17999999999998 2.3405761104249652E-004 + 183.23999999999998 2.3876725537150275E-004 + 183.29999999999998 2.4324121566568393E-004 + 183.35999999999999 2.4747860627706840E-004 + 183.41999999999999 2.5147899863309112E-004 + 183.47999999999999 2.5524240604241956E-004 + 183.53999999999999 2.5876930876673506E-004 + 183.59999999999999 2.6206056943436164E-004 + 183.66000000000000 2.6511752598287996E-004 + 183.72000000000000 2.6794189888125182E-004 + 183.78000000000000 2.7053584751545763E-004 + 183.84000000000000 2.7290186489628212E-004 + 183.89999999999998 2.7504287092045172E-004 + 183.95999999999998 2.7696216555098938E-004 + 184.01999999999998 2.7866333624634518E-004 + 184.07999999999998 2.8015038320793170E-004 + 184.13999999999999 2.8142754287911731E-004 + 184.19999999999999 2.8249934380133036E-004 + 184.25999999999999 2.8337062605992072E-004 + 184.31999999999999 2.8404645437471590E-004 + 184.38000000000000 2.8453211603720344E-004 + 184.44000000000000 2.8483308328443129E-004 + 184.50000000000000 2.8495504674106462E-004 + 184.56000000000000 2.8490381682240668E-004 + 184.62000000000000 2.8468535441387966E-004 + 184.67999999999998 2.8430570865101265E-004 + 184.73999999999998 2.8377111084724473E-004 + 184.79999999999998 2.8308786169625532E-004 + 184.85999999999999 2.8226228673116759E-004 + 184.91999999999999 2.8130086339085524E-004 + 184.97999999999999 2.8021009278577226E-004 + 185.03999999999999 2.7899658328440466E-004 + 185.09999999999999 2.7766698063874900E-004 + 185.16000000000000 2.7622798139893031E-004 + 185.22000000000000 2.7468634410002528E-004 + 185.28000000000000 2.7304887767636845E-004 + 185.34000000000000 2.7132243058507227E-004 + 185.39999999999998 2.6951387716662149E-004 + 185.45999999999998 2.6763015041492334E-004 + 185.51999999999998 2.6567816438661433E-004 + 185.57999999999998 2.6366483897000359E-004 + 185.63999999999999 2.6159712245102238E-004 + 185.69999999999999 2.5948188927695756E-004 + 185.75999999999999 2.5732605290359524E-004 + 185.81999999999999 2.5513641966648683E-004 + 185.88000000000000 2.5291976117156056E-004 + 185.94000000000000 2.5068283490361950E-004 + 186.00000000000000 2.4843225000467634E-004 + 186.06000000000000 2.4617456053326828E-004 + 186.12000000000000 2.4391628172504190E-004 + 186.17999999999998 2.4166375670434128E-004 + 186.23999999999998 2.3942330677423346E-004 + 186.29999999999998 2.3720115898197955E-004 + 186.35999999999999 2.3500341059953990E-004 + 186.41999999999999 2.3283610632711301E-004 + 186.47999999999999 2.3070518568884139E-004 + 186.53999999999999 2.2861652936010090E-004 + 186.59999999999999 2.2657588154870309E-004 + 186.66000000000000 2.2458896352907010E-004 + 186.72000000000000 2.2266141944612191E-004 + 186.78000000000000 2.2079875446523141E-004 + 186.84000000000000 2.1900646476639569E-004 + 186.89999999999998 2.1728993160584218E-004 + 186.95999999999998 2.1565442605298759E-004 + 187.01999999999998 2.1410515733113924E-004 + 187.07999999999998 2.1264721374569123E-004 + 187.13999999999999 2.1128558605089547E-004 + 187.19999999999999 2.1002511890970594E-004 + 187.25999999999999 2.0887057133618347E-004 + 187.31999999999999 2.0782651925774489E-004 + 187.38000000000000 2.0689741006292258E-004 + 187.44000000000000 2.0608757379639121E-004 + 187.50000000000000 2.0540110312690504E-004 + 187.56000000000000 2.0484196802917376E-004 + 187.62000000000000 2.0441394312018221E-004 + 187.67999999999998 2.0412061129773969E-004 + 187.73999999999998 2.0396537679117475E-004 + 187.79999999999998 2.0395142446937039E-004 + 187.85999999999999 2.0408174600738618E-004 + 187.91999999999999 2.0435913528133465E-004 + 187.97999999999999 2.0478612869648141E-004 + 188.03999999999999 2.0536508662419680E-004 + 188.09999999999999 2.0609812448496481E-004 + 188.16000000000000 2.0698715115513989E-004 + 188.22000000000000 2.0803384000641275E-004 + 188.28000000000000 2.0923963907311125E-004 + 188.34000000000000 2.1060575112713282E-004 + 188.39999999999998 2.1213316208509498E-004 + 188.45999999999998 2.1382258765115906E-004 + 188.51999999999998 2.1567449148600368E-004 + 188.57999999999998 2.1768910224539484E-004 + 188.63999999999999 2.1986638021236714E-004 + 188.69999999999999 2.2220601609990363E-004 + 188.75999999999999 2.2470740780147075E-004 + 188.81999999999999 2.2736966563671182E-004 + 188.88000000000000 2.3019161094822542E-004 + 188.94000000000000 2.3317175765244963E-004 + 189.00000000000000 2.3630829854450020E-004 + 189.06000000000000 2.3959906391417241E-004 + 189.12000000000000 2.4304158936066633E-004 + 189.17999999999998 2.4663306089314367E-004 + 189.23999999999998 2.5037031072919582E-004 + 189.29999999999998 2.5424980111870535E-004 + 189.35999999999999 2.5826768203053590E-004 + 189.41999999999999 2.6241973457454839E-004 + 189.47999999999999 2.6670138513220292E-004 + 189.53999999999999 2.7110771442248241E-004 + 189.59999999999999 2.7563346963192114E-004 + 189.66000000000000 2.8027308773625581E-004 + 189.72000000000000 2.8502065569769957E-004 + 189.78000000000000 2.8986994759828787E-004 + 189.84000000000000 2.9481443353786155E-004 + 189.89999999999998 2.9984731550147017E-004 + 189.95999999999998 3.0496147372340401E-004 + 190.01999999999998 3.1014951707531260E-004 + 190.07999999999998 3.1540376489728013E-004 + 190.13999999999999 3.2071628825215237E-004 + 190.19999999999999 3.2607892223305207E-004 + 190.25999999999999 3.3148318947395832E-004 + 190.31999999999999 3.3692043349074427E-004 + 190.38000000000000 3.4238173699779135E-004 + 190.44000000000000 3.4785791111792620E-004 + 190.50000000000000 3.5333961815566678E-004 + 190.56000000000000 3.5881731007649930E-004 + 190.62000000000000 3.6428118348702179E-004 + 190.67999999999998 3.6972133673517815E-004 + 190.73999999999998 3.7512765702170907E-004 + 190.79999999999998 3.8048992269262377E-004 + 190.85999999999999 3.8579778854927937E-004 + 190.91999999999999 3.9104080950742165E-004 + 190.97999999999999 3.9620848979010496E-004 + 191.03999999999999 4.0129025809067102E-004 + 191.09999999999999 4.0627555545503526E-004 + 191.16000000000000 4.1115381964728888E-004 + 191.22000000000000 4.1591453731350790E-004 + 191.28000000000000 4.2054722246220465E-004 + 191.34000000000000 4.2504154081730535E-004 + 191.39999999999998 4.2938718503824334E-004 + 191.45999999999998 4.3357400956282053E-004 + 191.51999999999998 4.3759210016310458E-004 + 191.57999999999998 4.4143170349164541E-004 + 191.63999999999999 4.4508318983658144E-004 + 191.69999999999999 4.4853725972262101E-004 + 191.75999999999999 4.5178479401216623E-004 + 191.81999999999999 4.5481701258865190E-004 + 191.88000000000000 4.5762534976301762E-004 + 191.94000000000000 4.6020166851825099E-004 + 192.00000000000000 4.6253809015732840E-004 + 192.06000000000000 4.6462709348803281E-004 + 192.12000000000000 4.6646158744530062E-004 + 192.17999999999998 4.6803485751105439E-004 + 192.23999999999998 4.6934063508473242E-004 + 192.29999999999998 4.7037304121537725E-004 + 192.35999999999999 4.7112667883187389E-004 + 192.41999999999999 4.7159665472333974E-004 + 192.47999999999999 4.7177851012955325E-004 + 192.53999999999999 4.7166831989500129E-004 + 192.59999999999999 4.7126264527133567E-004 + 192.66000000000000 4.7055863979194684E-004 + 192.72000000000000 4.6955392084552423E-004 + 192.78000000000000 4.6824665546023206E-004 + 192.84000000000000 4.6663555143092964E-004 + 192.89999999999998 4.6471988646460853E-004 + 192.95999999999998 4.6249950217697893E-004 + 193.01999999999998 4.5997478906919734E-004 + 193.07999999999998 4.5714669189904421E-004 + 193.13999999999999 4.5401672212421124E-004 + 193.19999999999999 4.5058696372770083E-004 + 193.25999999999999 4.4686005952455948E-004 + 193.31999999999999 4.4283920052538541E-004 + 193.38000000000000 4.3852815071260634E-004 + 193.44000000000000 4.3393121350456725E-004 + 193.50000000000000 4.2905321596645244E-004 + 193.56000000000000 4.2389958266287892E-004 + 193.62000000000000 4.1847616708383189E-004 + 193.67999999999998 4.1278940023571864E-004 + 193.73999999999998 4.0684615921347670E-004 + 193.79999999999998 4.0065384302408278E-004 + 193.85999999999999 3.9422025680014639E-004 + 193.91999999999999 3.8755367304152400E-004 + 193.97999999999999 3.8066280369263966E-004 + 194.03999999999999 3.7355670851123513E-004 + 194.09999999999999 3.6624486356813340E-004 + 194.16000000000000 3.5873706105890059E-004 + 194.22000000000000 3.5104347530052566E-004 + 194.28000000000000 3.4317453130263309E-004 + 194.34000000000000 3.3514096460862935E-004 + 194.39999999999998 3.2695379964301527E-004 + 194.45999999999998 3.1862423554014814E-004 + 194.51999999999998 3.1016377292421548E-004 + 194.57999999999998 3.0158402447916764E-004 + 194.63999999999999 2.9289679783039784E-004 + 194.69999999999999 2.8411408064102486E-004 + 194.75999999999999 2.7524795884925732E-004 + 194.81999999999999 2.6631063798181052E-004 + 194.88000000000000 2.5731431011953647E-004 + 194.94000000000000 2.4827130677022077E-004 + 195.00000000000000 2.3919394362338444E-004 + 195.06000000000000 2.3009452873329870E-004 + 195.12000000000000 2.2098535152623297E-004 + 195.17999999999998 2.1187862405898551E-004 + 195.23999999999998 2.0278651811369685E-004 + 195.29999999999998 1.9372108346377669E-004 + 195.35999999999999 1.8469423523745981E-004 + 195.41999999999999 1.7571776154158200E-004 + 195.47999999999999 1.6680331140976544E-004 + 195.53999999999999 1.5796230784837924E-004 + 195.59999999999999 1.4920598337891272E-004 + 195.66000000000000 1.4054537087985607E-004 + 195.72000000000000 1.3199124384969416E-004 + 195.78000000000000 1.2355410561084768E-004 + 195.84000000000000 1.1524419396249527E-004 + 195.89999999999998 1.0707145661172465E-004 + 195.95999999999998 9.9045540573683931E-005 + 196.01999999999998 9.1175749063555710E-005 + 196.07999999999998 8.3471081111887078E-005 + 196.13999999999999 7.5940153472595494E-005 + 196.19999999999999 6.8591232089288849E-005 + 196.25999999999999 6.1432226965331882E-005 + 196.31999999999999 5.4470643358934668E-005 + 196.38000000000000 4.7713625062404189E-005 + 196.44000000000000 4.1167910279147362E-005 + 196.50000000000000 3.4839864703760150E-005 + 196.56000000000000 2.8735448629091283E-005 + 196.62000000000000 2.2860239411386991E-005 + 196.67999999999998 1.7219420898636364E-005 + 196.73999999999998 1.1817806600421870E-005 + 196.79999999999998 6.6598205076563439E-006 + 196.85999999999999 1.7495158916890910E-006 + 196.91999999999999 -2.9094164388106755E-006 + 196.97999999999999 -7.3136579168445437E-006 + 197.03999999999999 -1.1460253497765146E-005 + 197.09999999999999 -1.5346595998131515E-005 + 197.16000000000000 -1.8970440745940646E-005 + 197.22000000000000 -2.2329887400255196E-005 + 197.28000000000000 -2.5423389941925060E-005 + 197.34000000000000 -2.8249745368499778E-005 + 197.39999999999998 -3.0808098036527478E-005 + 197.45999999999998 -3.3097926301039011E-005 + 197.51999999999998 -3.5119045305108257E-005 + 197.57999999999998 -3.6871604902399349E-005 + 197.63999999999999 -3.8356073458013974E-005 + 197.69999999999999 -3.9573226345195064E-005 + 197.75999999999999 -4.0524153382525790E-005 + 197.81999999999999 -4.1210229688811069E-005 + 197.88000000000000 -4.1633106950835733E-005 + 197.94000000000000 -4.1794707001682533E-005 + 198.00000000000000 -4.1697197233569514E-005 + 198.06000000000000 -4.1342978834589261E-005 + 198.12000000000000 -4.0734672396070829E-005 + 198.17999999999998 -3.9875105915755692E-005 + 198.23999999999998 -3.8767309347881929E-005 + 198.29999999999998 -3.7414486502484136E-005 + 198.35999999999999 -3.5820017516013060E-005 + 198.41999999999999 -3.3987449072709159E-005 + 198.47999999999999 -3.1920482602101354E-005 + 198.53999999999999 -2.9622979886177650E-005 + 198.59999999999999 -2.7098949678846007E-005 + 198.66000000000000 -2.4352554679551354E-005 + 198.72000000000000 -2.1388100154152562E-005 + 198.78000000000000 -1.8210043956011157E-005 + 198.84000000000000 -1.4822999216285598E-005 + 198.89999999999998 -1.1231727853620480E-005 + 198.95999999999998 -7.4411387655920469E-006 + 199.01999999999998 -3.4562954253445883E-006 + 199.07999999999998 7.1759095614547911E-007 + 199.13999999999999 5.0751486440915335E-006 + 199.19999999999999 9.6108682057147691E-006 + 199.25999999999999 1.4319085520610004E-005 + 199.31999999999999 1.9193990736610617E-005 + 199.38000000000000 2.4229631549457392E-005 + 199.44000000000000 2.9419912277130209E-005 + 199.50000000000000 3.4758614203009452E-005 + 199.56000000000000 4.0239377392348470E-005 + 199.62000000000000 4.5855704989268454E-005 + 199.67999999999998 5.1600973453080074E-005 + 199.73999999999998 5.7468438892673723E-005 + 199.79999999999998 6.3451237190188754E-005 + 199.85999999999999 6.9542376122754693E-005 + 199.91999999999999 7.5734747687981261E-005 + 199.97999999999999 8.2021122662152875E-005 + 200.03999999999999 8.8394176312657990E-005 + 200.09999999999999 9.4846428762390263E-005 + 200.16000000000000 1.0137033438200411E-004 + 200.22000000000000 1.0795819943380287E-004 + 200.28000000000000 1.1460222088421210E-004 + 200.34000000000000 1.2129449016285590E-004 + 200.39999999999998 1.2802699086951277E-004 + 200.45999999999998 1.3479158289938264E-004 + 200.51999999999998 1.4158001358469387E-004 + 200.57999999999998 1.4838391824429940E-004 + 200.63999999999999 1.5519482867192569E-004 + 200.69999999999999 1.6200418329074428E-004 + 200.75999999999999 1.6880330999592067E-004 + 200.81999999999999 1.7558342804671628E-004 + 200.88000000000000 1.8233568497425835E-004 + 200.94000000000000 1.8905115713136164E-004 + 201.00000000000000 1.9572084762573634E-004 + 201.06000000000000 2.0233571952300180E-004 + 201.12000000000000 2.0888668440840447E-004 + 201.17999999999998 2.1536464046461061E-004 + 201.23999999999998 2.2176049565836986E-004 + 201.29999999999998 2.2806515171975260E-004 + 201.35999999999999 2.3426959610725322E-004 + 201.41999999999999 2.4036480853894943E-004 + 201.47999999999999 2.4634189189041202E-004 + 201.53999999999999 2.5219206073266969E-004 + 201.59999999999999 2.5790659525723567E-004 + 201.66000000000000 2.6347693416627971E-004 + 201.72000000000000 2.6889466373321199E-004 + 201.78000000000000 2.7415149950430775E-004 + 201.84000000000000 2.7923934119434104E-004 + 201.89999999999998 2.8415026312261934E-004 + 201.95999999999998 2.8887654856032968E-004 + 202.01999999999998 2.9341066388639787E-004 + 202.07999999999998 2.9774528122187898E-004 + 202.13999999999999 3.0187331138565156E-004 + 202.19999999999999 3.0578783633930268E-004 + 202.25999999999999 3.0948228748401031E-004 + 202.31999999999999 3.1295024278469262E-004 + 202.38000000000000 3.1618558726620422E-004 + 202.44000000000000 3.1918251991974196E-004 + 202.50000000000000 3.2193550278897503E-004 + 202.56000000000000 3.2443931507994259E-004 + 202.62000000000000 3.2668910532162503E-004 + 202.67999999999998 3.2868036806964641E-004 + 202.73999999999998 3.3040892162915323E-004 + 202.79999999999998 3.3187106099135939E-004 + 202.85999999999999 3.3306338993540621E-004 + 202.91999999999999 3.3398297343396861E-004 + 202.97999999999999 3.3462732434683617E-004 + 203.03999999999999 3.3499434770848616E-004 + 203.09999999999999 3.3508243296862683E-004 + 203.16000000000000 3.3489035765287792E-004 + 203.22000000000000 3.3441739530410753E-004 + 203.28000000000000 3.3366325384083924E-004 + 203.34000000000000 3.3262806445548990E-004 + 203.39999999999998 3.3131240883082781E-004 + 203.45999999999998 3.2971731673626502E-004 + 203.51999999999998 3.2784423981147172E-004 + 203.57999999999998 3.2569501745683652E-004 + 203.63999999999999 3.2327197715679090E-004 + 203.69999999999999 3.2057782387708863E-004 + 203.75999999999999 3.1761569176909707E-004 + 203.81999999999999 3.1438909173402022E-004 + 203.88000000000000 3.1090197329282235E-004 + 203.94000000000000 3.0715865638010769E-004 + 204.00000000000000 3.0316387425548025E-004 + 204.06000000000000 2.9892273620920614E-004 + 204.12000000000000 2.9444074590746295E-004 + 204.17999999999998 2.8972375229194096E-004 + 204.23999999999998 2.8477799700191782E-004 + 204.29999999999998 2.7961003288917691E-004 + 204.35999999999999 2.7422680184053069E-004 + 204.41999999999999 2.6863553638135630E-004 + 204.47999999999999 2.6284378764115690E-004 + 204.53999999999999 2.5685948162920675E-004 + 204.59999999999999 2.5069071855201913E-004 + 204.66000000000000 2.4434591681296434E-004 + 204.72000000000000 2.3783377736406099E-004 + 204.78000000000000 2.3116314899472408E-004 + 204.84000000000000 2.2434316576133115E-004 + 204.89999999999998 2.1738309578276792E-004 + 204.95999999999998 2.1029241680492860E-004 + 205.01999999999998 2.0308073881703404E-004 + 205.07999999999998 1.9575780044579798E-004 + 205.13999999999999 1.8833345842552519E-004 + 205.19999999999999 1.8081764654864570E-004 + 205.25999999999999 1.7322038156374850E-004 + 205.31999999999999 1.6555171387550353E-004 + 205.38000000000000 1.5782168144241472E-004 + 205.44000000000000 1.5004039171001077E-004 + 205.50000000000000 1.4221785715236928E-004 + 205.56000000000000 1.3436409228732171E-004 + 205.62000000000000 1.2648901836302063E-004 + 205.67999999999998 1.1860248960648182E-004 + 205.73999999999998 1.1071423963925604E-004 + 205.79999999999998 1.0283389329733016E-004 + 205.85999999999999 9.4970932585126616E-005 + 205.91999999999999 8.7134654716315067E-005 + 205.97999999999999 7.9334210784898741E-005 + 206.03999999999999 7.1578556003719341E-005 + 206.09999999999999 6.3876432308042821E-005 + 206.16000000000000 5.6236364557707008E-005 + 206.22000000000000 4.8666648239174678E-005 + 206.28000000000000 4.1175330167655936E-005 + 206.34000000000000 3.3770202464579441E-005 + 206.39999999999998 2.6458778344401504E-005 + 206.45999999999998 1.9248279688648333E-005 + 206.51999999999998 1.2145643997812878E-005 + 206.57999999999998 5.1574877814759078E-006 + 206.63999999999999 -1.7098931884707561E-006 + 206.69999999999999 -8.4505300278559204E-006 + 206.75999999999999 -1.5058790861882937E-005 + 206.81999999999999 -2.1529389342648769E-005 + 206.88000000000000 -2.7857395136220291E-005 + 206.94000000000000 -3.4038240710427483E-005 + 207.00000000000000 -4.0067699392874426E-005 + 207.06000000000000 -4.5941917460687093E-005 + 207.12000000000000 -5.1657383586838742E-005 + 207.17999999999998 -5.7210954356820909E-005 + 207.23999999999998 -6.2599824603201410E-005 + 207.29999999999998 -6.7821533490995385E-005 + 207.35999999999999 -7.2873968143788044E-005 + 207.41999999999999 -7.7755321287734254E-005 + 207.47999999999999 -8.2464136902368377E-005 + 207.53999999999999 -8.6999247734183711E-005 + 207.59999999999999 -9.1359813626743443E-005 + 207.66000000000000 -9.5545291188240628E-005 + 207.72000000000000 -9.9555420891982174E-005 + 207.78000000000000 -1.0339024715558819E-004 + 207.84000000000000 -1.0705006656469416E-004 + 207.89999999999998 -1.1053545634254214E-004 + 207.95999999999998 -1.1384726057882570E-004 + 208.01999999999998 -1.1698657800771851E-004 + 208.07999999999998 -1.1995472359345720E-004 + 208.13999999999999 -1.2275325745110549E-004 + 208.19999999999999 -1.2538396626957208E-004 + 208.25999999999999 -1.2784882099548745E-004 + 208.31999999999999 -1.3014997599465844E-004 + 208.38000000000000 -1.3228977502833535E-004 + 208.44000000000000 -1.3427072810211969E-004 + 208.50000000000000 -1.3609546241484709E-004 + 208.56000000000000 -1.3776675090249220E-004 + 208.62000000000000 -1.3928749628008504E-004 + 208.68000000000001 -1.4066067795852162E-004 + 208.74000000000001 -1.4188938389676520E-004 + 208.80000000000001 -1.4297676928895297E-004 + 208.86000000000001 -1.4392608954383296E-004 + 208.92000000000002 -1.4474064330715860E-004 + 208.98000000000002 -1.4542380868652364E-004 + 209.03999999999996 -1.4597899961048068E-004 + 209.09999999999997 -1.4640966862904573E-004 + 209.15999999999997 -1.4671933548725689E-004 + 209.21999999999997 -1.4691154846700763E-004 + 209.27999999999997 -1.4698988377460925E-004 + 209.33999999999997 -1.4695796882647412E-004 + 209.39999999999998 -1.4681943628209933E-004 + 209.45999999999998 -1.4657792880498700E-004 + 209.51999999999998 -1.4623709545636979E-004 + 209.57999999999998 -1.4580059436658079E-004 + 209.63999999999999 -1.4527206906179318E-004 + 209.69999999999999 -1.4465515013458422E-004 + 209.75999999999999 -1.4395343297764058E-004 + 209.81999999999999 -1.4317050374877417E-004 + 209.88000000000000 -1.4230988248305871E-004 + 209.94000000000000 -1.4137506652473926E-004 + 210.00000000000000 -1.4036949280917113E-004 + 210.06000000000000 -1.3929657027739111E-004 + 210.12000000000000 -1.3815965647405635E-004 + 210.18000000000001 -1.3696203807698955E-004 + 210.24000000000001 -1.3570696530876235E-004 + 210.30000000000001 -1.3439765465526627E-004 + 210.36000000000001 -1.3303723941600104E-004 + 210.42000000000002 -1.3162884616156603E-004 + 210.48000000000002 -1.3017553270605321E-004 + 210.53999999999996 -1.2868032414704926E-004 + 210.59999999999997 -1.2714619960606802E-004 + 210.65999999999997 -1.2557610423636698E-004 + 210.71999999999997 -1.2397291555551587E-004 + 210.77999999999997 -1.2233947551834002E-004 + 210.83999999999997 -1.2067858913833698E-004 + 210.89999999999998 -1.1899298773213289E-004 + 210.95999999999998 -1.1728536214794557E-004 + 211.01999999999998 -1.1555834611848936E-004 + 211.07999999999998 -1.1381449535342483E-004 + 211.13999999999999 -1.1205631733959290E-004 + 211.19999999999999 -1.1028623865557072E-004 + 211.25999999999999 -1.0850662413480064E-004 + 211.31999999999999 -1.0671976605641265E-004 + 211.38000000000000 -1.0492787639735777E-004 + 211.44000000000000 -1.0313309876180078E-004 + 211.50000000000000 -1.0133750045640769E-004 + 211.56000000000000 -9.9543066263406443E-005 + 211.62000000000000 -9.7751719028455665E-005 + 211.68000000000001 -9.5965284665238247E-005 + 211.74000000000001 -9.4185537134335986E-005 + 211.80000000000001 -9.2414143385545814E-005 + 211.86000000000001 -9.0652705399047197E-005 + 211.92000000000002 -8.8902753226080422E-005 + 211.98000000000002 -8.7165722918782450E-005 + 212.03999999999996 -8.5442978640577999E-005 + 212.09999999999997 -8.3735804858508844E-005 + 212.15999999999997 -8.2045408157150200E-005 + 212.21999999999997 -8.0372932177449159E-005 + 212.27999999999997 -7.8719431709097889E-005 + 212.33999999999997 -7.7085912318742604E-005 + 212.39999999999998 -7.5473301106476071E-005 + 212.45999999999998 -7.3882465447727908E-005 + 212.51999999999998 -7.2314215408292467E-005 + 212.57999999999998 -7.0769308324434898E-005 + 212.63999999999999 -6.9248448612652463E-005 + 212.69999999999999 -6.7752284120535527E-005 + 212.75999999999999 -6.6281417450774101E-005 + 212.81999999999999 -6.4836407744812754E-005 + 212.88000000000000 -6.3417758218583628E-005 + 212.94000000000000 -6.2025923576388995E-005 + 213.00000000000000 -6.0661315921295493E-005 + 213.06000000000000 -5.9324289893863488E-005 + 213.12000000000000 -5.8015149383051535E-005 + 213.18000000000001 -5.6734148843998754E-005 + 213.24000000000001 -5.5481481421445975E-005 + 213.30000000000001 -5.4257291927325357E-005 + 213.36000000000001 -5.3061676405492339E-005 + 213.42000000000002 -5.1894677207112254E-005 + 213.48000000000002 -5.0756295050501141E-005 + 213.53999999999996 -4.9646487721359242E-005 + 213.59999999999997 -4.8565184586702504E-005 + 213.65999999999997 -4.7512279638119852E-005 + 213.71999999999997 -4.6487639446519183E-005 + 213.77999999999997 -4.5491120817678272E-005 + 213.83999999999997 -4.4522560310911917E-005 + 213.89999999999998 -4.3581789985751899E-005 + 213.95999999999998 -4.2668638410673175E-005 + 214.01999999999998 -4.1782927810214421E-005 + 214.07999999999998 -4.0924481840467851E-005 + 214.13999999999999 -4.0093123757126750E-005 + 214.19999999999999 -3.9288670174684479E-005 + 214.25999999999999 -3.8510933619899471E-005 + 214.31999999999999 -3.7759720262494777E-005 + 214.38000000000000 -3.7034820190759587E-005 + 214.44000000000000 -3.6336015318652988E-005 + 214.50000000000000 -3.5663063554946029E-005 + 214.56000000000000 -3.5015704742765457E-005 + 214.62000000000000 -3.4393657430799173E-005 + 214.68000000000001 -3.3796611854300867E-005 + 214.74000000000001 -3.3224237678869105E-005 + 214.80000000000001 -3.2676174194982227E-005 + 214.86000000000001 -3.2152042218759752E-005 + 214.92000000000002 -3.1651437341132438E-005 + 214.98000000000002 -3.1173935209347390E-005 + 215.03999999999996 -3.0719091067328356E-005 + 215.09999999999997 -3.0286453463263132E-005 + 215.15999999999997 -2.9875545672175147E-005 + 215.21999999999997 -2.9485886579733652E-005 + 215.27999999999997 -2.9116984590078305E-005 + 215.33999999999997 -2.8768339343530709E-005 + 215.39999999999998 -2.8439437820160907E-005 + 215.45999999999998 -2.8129770444867763E-005 + 215.51999999999998 -2.7838815919978509E-005 + 215.57999999999998 -2.7566048549230361E-005 + 215.63999999999999 -2.7310941222581104E-005 + 215.69999999999999 -2.7072963886765452E-005 + 215.75999999999999 -2.6851580380004385E-005 + 215.81999999999999 -2.6646260191214008E-005 + 215.88000000000000 -2.6456470754178036E-005 + 215.94000000000000 -2.6281681120716799E-005 + 216.00000000000000 -2.6121363430737805E-005 + 216.06000000000000 -2.5974995475254372E-005 + 216.12000000000000 -2.5842060909799642E-005 + 216.18000000000001 -2.5722047155439874E-005 + 216.24000000000001 -2.5614453518041402E-005 + 216.30000000000001 -2.5518780437543484E-005 + 216.36000000000001 -2.5434537448373302E-005 + 216.42000000000002 -2.5361237090404973E-005 + 216.48000000000002 -2.5298394412420364E-005 + 216.53999999999996 -2.5245534368916991E-005 + 216.59999999999997 -2.5202176985373389E-005 + 216.65999999999997 -2.5167849000306901E-005 + 216.71999999999997 -2.5142078166907287E-005 + 216.77999999999997 -2.5124396593011441E-005 + 216.83999999999997 -2.5114343246291189E-005 + 216.89999999999998 -2.5111462391245482E-005 + 216.95999999999998 -2.5115310073901128E-005 + 217.01999999999998 -2.5125459038387851E-005 + 217.07999999999998 -2.5141497694606121E-005 + 217.13999999999999 -2.5163038870933585E-005 + 217.19999999999999 -2.5189718722592196E-005 + 217.25999999999999 -2.5221202642466881E-005 + 217.31999999999999 -2.5257189213186822E-005 + 217.38000000000000 -2.5297403310085509E-005 + 217.44000000000000 -2.5341601868885050E-005 + 217.50000000000000 -2.5389574114681089E-005 + 217.56000000000000 -2.5441128963359993E-005 + 217.62000000000000 -2.5496101733220234E-005 + 217.68000000000001 -2.5554340847157806E-005 + 217.74000000000001 -2.5615708812541665E-005 + 217.80000000000001 -2.5680067926362649E-005 + 217.86000000000001 -2.5747281067572848E-005 + 217.92000000000002 -2.5817204624152875E-005 + 217.98000000000002 -2.5889685589074534E-005 + 218.03999999999996 -2.5964552205176056E-005 + 218.09999999999997 -2.6041615791314042E-005 + 218.15999999999997 -2.6120669974973690E-005 + 218.21999999999997 -2.6201491383058665E-005 + 218.27999999999997 -2.6283839024859272E-005 + 218.33999999999997 -2.6367456673936056E-005 + 218.39999999999998 -2.6452074817885428E-005 + 218.45999999999998 -2.6537417917107804E-005 + 218.51999999999998 -2.6623209428424021E-005 + 218.57999999999998 -2.6709167206375249E-005 + 218.63999999999999 -2.6795011211259870E-005 + 218.69999999999999 -2.6880466543830987E-005 + 218.75999999999999 -2.6965262940498276E-005 + 218.81999999999999 -2.7049135330985741E-005 + 218.88000000000000 -2.7131822490833767E-005 + 218.94000000000000 -2.7213066766552626E-005 + 219.00000000000000 -2.7292613803095050E-005 + 219.06000000000000 -2.7370209222492766E-005 + 219.12000000000000 -2.7445593560032568E-005 + 219.18000000000001 -2.7518503783817644E-005 + 219.24000000000001 -2.7588672306203060E-005 + 219.30000000000001 -2.7655819954482352E-005 + 219.36000000000001 -2.7719661488230704E-005 + 219.42000000000002 -2.7779905583044997E-005 + 219.48000000000002 -2.7836249737742990E-005 + 219.53999999999996 -2.7888387057428664E-005 + 219.59999999999997 -2.7936010903516444E-005 + 219.65999999999997 -2.7978809077460399E-005 + 219.71999999999997 -2.8016475169100726E-005 + 219.77999999999997 -2.8048705540696924E-005 + 219.83999999999997 -2.8075206690289831E-005 + 219.89999999999998 -2.8095697111724413E-005 + 219.95999999999998 -2.8109908815865955E-005 + 220.01999999999998 -2.8117592913652968E-005 + 220.07999999999998 -2.8118521294102632E-005 + 220.13999999999999 -2.8112485031514418E-005 + 220.19999999999999 -2.8099299668509103E-005 + 220.25999999999999 -2.8078810705486071E-005 + 220.31999999999999 -2.8050884533031246E-005 + 220.38000000000000 -2.8015417575686318E-005 + 220.44000000000000 -2.7972337119790782E-005 + 220.50000000000000 -2.7921596005587551E-005 + 220.56000000000000 -2.7863177634534232E-005 + 220.62000000000000 -2.7797093040238432E-005 + 220.68000000000001 -2.7723383630061958E-005 + 220.74000000000001 -2.7642114735467635E-005 + 220.80000000000001 -2.7553375496446388E-005 + 220.86000000000001 -2.7457283453665296E-005 + 220.92000000000002 -2.7353970341774203E-005 + 220.98000000000002 -2.7243588673117085E-005 + 221.03999999999996 -2.7126303795786559E-005 + 221.09999999999997 -2.7002293483275659E-005 + 221.15999999999997 -2.6871744421332409E-005 + 221.21999999999997 -2.6734845845024805E-005 + 221.27999999999997 -2.6591794736640060E-005 + 221.33999999999997 -2.6442792999615618E-005 + 221.39999999999998 -2.6288037199453343E-005 + 221.45999999999998 -2.6127729563184122E-005 + 221.51999999999998 -2.5962076546069396E-005 + 221.57999999999998 -2.5791286405290242E-005 + 221.63999999999999 -2.5615573154290723E-005 + 221.69999999999999 -2.5435161579254116E-005 + 221.75999999999999 -2.5250284760830080E-005 + 221.81999999999999 -2.5061189589343122E-005 + 221.88000000000000 -2.4868137472762239E-005 + 221.94000000000000 -2.4671406211745872E-005 + 222.00000000000000 -2.4471289561633257E-005 + 222.06000000000000 -2.4268094365260820E-005 + 222.12000000000000 -2.4062147068488404E-005 + 222.18000000000001 -2.3853782184137694E-005 + 222.24000000000001 -2.3643343971680441E-005 + 222.30000000000001 -2.3431183040681566E-005 + 222.36000000000001 -2.3217647839669681E-005 + 222.42000000000002 -2.3003092093835656E-005 + 222.48000000000002 -2.2787855478260162E-005 + 222.53999999999996 -2.2572272080635186E-005 + 222.59999999999997 -2.2356662767269046E-005 + 222.65999999999997 -2.2141336214173734E-005 + 222.71999999999997 -2.1926587318270443E-005 + 222.77999999999997 -2.1712696812917478E-005 + 222.83999999999997 -2.1499934723882282E-005 + 222.89999999999998 -2.1288558127607645E-005 + 222.95999999999998 -2.1078823067542141E-005 + 223.01999999999998 -2.0870974157079708E-005 + 223.07999999999998 -2.0665262941570399E-005 + 223.13999999999999 -2.0461938251574073E-005 + 223.19999999999999 -2.0261256398015264E-005 + 223.25999999999999 -2.0063477655974013E-005 + 223.31999999999999 -1.9868869609118950E-005 + 223.38000000000000 -1.9677708140789393E-005 + 223.44000000000000 -1.9490272401660241E-005 + 223.50000000000000 -1.9306843415926466E-005 + 223.56000000000000 -1.9127705569551486E-005 + 223.62000000000000 -1.8953139760615143E-005 + 223.68000000000001 -1.8783420754073160E-005 + 223.74000000000001 -1.8618813563684632E-005 + 223.80000000000001 -1.8459569168807090E-005 + 223.86000000000001 -1.8305926955611615E-005 + 223.92000000000002 -1.8158105304744208E-005 + 223.98000000000002 -1.8016305003641025E-005 + 224.03999999999996 -1.7880708291907674E-005 + 224.09999999999997 -1.7751478099966375E-005 + 224.15999999999997 -1.7628755103799490E-005 + 224.21999999999997 -1.7512668549372845E-005 + 224.27999999999997 -1.7403328851943231E-005 + 224.33999999999997 -1.7300829281728770E-005 + 224.39999999999998 -1.7205255640462584E-005 + 224.45999999999998 -1.7116677191460714E-005 + 224.51999999999998 -1.7035156916342278E-005 + 224.57999999999998 -1.6960746626568561E-005 + 224.63999999999999 -1.6893488377897675E-005 + 224.69999999999999 -1.6833413761178446E-005 + 224.75999999999999 -1.6780540265357752E-005 + 224.81999999999999 -1.6734875948174363E-005 + 224.88000000000000 -1.6696416312319874E-005 + 224.94000000000000 -1.6665141296016090E-005 + 225.00000000000000 -1.6641009954236070E-005 + 225.06000000000000 -1.6623965134188081E-005 + 225.12000000000000 -1.6613926558153995E-005 + 225.18000000000001 -1.6610794061949991E-005 + 225.24000000000001 -1.6614445947002128E-005 + 225.30000000000001 -1.6624732762319154E-005 + 225.36000000000001 -1.6641484047919516E-005 + 225.42000000000002 -1.6664502943023764E-005 + 225.48000000000002 -1.6693570825757194E-005 + 225.53999999999996 -1.6728444135693005E-005 + 225.59999999999997 -1.6768855057185452E-005 + 225.65999999999997 -1.6814516916861534E-005 + 225.71999999999997 -1.6865121536178892E-005 + 225.77999999999997 -1.6920342404280680E-005 + 225.83999999999997 -1.6979836001633420E-005 + 225.89999999999998 -1.7043247182363329E-005 + 225.95999999999998 -1.7110207608520609E-005 + 226.01999999999998 -1.7180341525346521E-005 + 226.07999999999998 -1.7253272801755780E-005 + 226.13999999999999 -1.7328616282705194E-005 + 226.19999999999999 -1.7405997056618831E-005 + 226.25999999999999 -1.7485041226687086E-005 + 226.31999999999999 -1.7565387200185338E-005 + 226.38000000000000 -1.7646682663601507E-005 + 226.44000000000000 -1.7728588782474402E-005 + 226.50000000000000 -1.7810784044585292E-005 + 226.56000000000000 -1.7892962423167912E-005 + 226.62000000000000 -1.7974830702176806E-005 + 226.68000000000001 -1.8056113669693698E-005 + 226.74000000000001 -1.8136548499345004E-005 + 226.80000000000001 -1.8215880891702343E-005 + 226.86000000000001 -1.8293867389797872E-005 + 226.92000000000002 -1.8370268912907230E-005 + 226.98000000000002 -1.8444844738553953E-005 + 227.03999999999996 -1.8517358574789414E-005 + 227.09999999999997 -1.8587566654253519E-005 + 227.15999999999997 -1.8655221863152616E-005 + 227.21999999999997 -1.8720070572544611E-005 + 227.27999999999997 -1.8781852999302535E-005 + 227.33999999999997 -1.8840304653423724E-005 + 227.39999999999998 -1.8895154279891743E-005 + 227.45999999999998 -1.8946132072107965E-005 + 227.51999999999998 -1.8992967116783603E-005 + 227.57999999999998 -1.9035391482149964E-005 + 227.63999999999999 -1.9073145264492372E-005 + 227.69999999999999 -1.9105975562716928E-005 + 227.75999999999999 -1.9133641124329263E-005 + 227.81999999999999 -1.9155910998410482E-005 + 227.88000000000000 -1.9172569202396373E-005 + 227.94000000000000 -1.9183409420041007E-005 + 228.00000000000000 -1.9188233344813951E-005 + 228.06000000000000 -1.9186849610576966E-005 + 228.12000000000000 -1.9179072874817770E-005 + 228.18000000000001 -1.9164708034969459E-005 + 228.24000000000001 -1.9143561569875233E-005 + 228.30000000000001 -1.9115421454046262E-005 + 228.36000000000001 -1.9080061369350381E-005 + 228.42000000000002 -1.9037230841955418E-005 + 228.48000000000002 -1.8986655783859112E-005 + 228.53999999999996 -1.8928030118342281E-005 + 228.59999999999997 -1.8861016276455906E-005 + 228.65999999999997 -1.8785240673130528E-005 + 228.71999999999997 -1.8700294728761715E-005 + 228.77999999999997 -1.8605739696158047E-005 + 228.83999999999997 -1.8501101106664339E-005 + 228.89999999999998 -1.8385873325460327E-005 + 228.95999999999998 -1.8259522920267030E-005 + 229.01999999999998 -1.8121489450966622E-005 + 229.07999999999998 -1.7971190488470874E-005 + 229.13999999999999 -1.7808021865446983E-005 + 229.19999999999999 -1.7631364415816633E-005 + 229.25999999999999 -1.7440577249886707E-005 + 229.31999999999999 -1.7235009649268967E-005 + 229.38000000000000 -1.7013994300170083E-005 + 229.44000000000000 -1.6776848401988792E-005 + 229.50000000000000 -1.6522873640546610E-005 + 229.56000000000000 -1.6251354277287110E-005 + 229.62000000000000 -1.5961555695134837E-005 + 229.68000000000001 -1.5652720204423292E-005 + 229.74000000000001 -1.5324061111979908E-005 + 229.80000000000001 -1.4974761210521197E-005 + 229.86000000000001 -1.4603970390796478E-005 + 229.92000000000002 -1.4210797943465642E-005 + 229.97999999999996 -1.3794306883917398E-005 + 230.03999999999996 -1.3353514289435464E-005 + 230.09999999999997 -1.2887385369244000E-005 + 230.15999999999997 -1.2394827777073139E-005 + 230.21999999999997 -1.1874692990513301E-005 + 230.27999999999997 -1.1325771567904817E-005 + 230.33999999999997 -1.0746794496342266E-005 + 230.39999999999998 -1.0136432145871673E-005 + 230.45999999999998 -9.4932932245059152E-006 + 230.51999999999998 -8.8159289546881054E-006 + 230.57999999999998 -8.1028345454840505E-006 + 230.63999999999999 -7.3524528315169332E-006 + 230.69999999999999 -6.5631742351451289E-006 + 230.75999999999999 -5.7333458732851914E-006 + 230.81999999999999 -4.8612719330174862E-006 + 230.88000000000000 -3.9452158426943210E-006 + 230.94000000000000 -2.9834034512001624E-006 + 231.00000000000000 -1.9740277316088354E-006 + 231.06000000000000 -9.1524715044862791E-007 + 231.12000000000000 1.9481279757882247E-007 + 231.18000000000001 1.3580601798289821E-006 + 231.24000000000001 2.5764388111350965E-006 + 231.30000000000001 3.8519307349355905E-006 + 231.36000000000001 5.1865543892989917E-006 + 231.42000000000002 6.5823727887568111E-006 + 231.47999999999996 8.0414920518141546E-006 + 231.53999999999996 9.5660682430325912E-006 + 231.59999999999997 1.1158301200441203E-005 + 231.65999999999997 1.2820442095907221E-005 + 231.71999999999997 1.4554786755500663E-005 + 231.77999999999997 1.6363676395249590E-005 + 231.83999999999997 1.8249485323188587E-005 + 231.89999999999998 2.0214624363826248E-005 + 231.95999999999998 2.2261524423294154E-005 + 232.01999999999998 2.4392631587399181E-005 + 232.07999999999998 2.6610385544549043E-005 + 232.13999999999999 2.8917223349035055E-005 + 232.19999999999999 3.1315552041380139E-005 + 232.25999999999999 3.3807738739653648E-005 + 232.31999999999999 3.6396098123355234E-005 + 232.38000000000000 3.9082880581366000E-005 + 232.44000000000000 4.1870251426133240E-005 + 232.50000000000000 4.4760286626922634E-005 + 232.56000000000000 4.7754971658512402E-005 + 232.62000000000000 5.0856166470842898E-005 + 232.68000000000001 5.4065621700205895E-005 + 232.74000000000001 5.7384960484971618E-005 + 232.80000000000001 6.0815659417491951E-005 + 232.86000000000001 6.4359082264338433E-005 + 232.92000000000002 6.8016429452970588E-005 + 232.97999999999996 7.1788765419379975E-005 + 233.03999999999996 7.5676995888400255E-005 + 233.09999999999997 7.9681864879429804E-005 + 233.15999999999997 8.3803957156821694E-005 + 233.21999999999997 8.8043685461953593E-005 + 233.27999999999997 9.2401274792147694E-005 + 233.33999999999997 9.6876766015353727E-005 + 233.39999999999998 1.0146999916502792E-004 + 233.45999999999998 1.0618060436198293E-004 + 233.51999999999998 1.1100797759801800E-004 + 233.57999999999998 1.1595130441416967E-004 + 233.63999999999999 1.2100948825134760E-004 + 233.69999999999999 1.2618118768186403E-004 + 233.75999999999999 1.3146479491313957E-004 + 233.81999999999999 1.3685840540829058E-004 + 233.88000000000000 1.4235982778901233E-004 + 233.94000000000000 1.4796654588179216E-004 + 234.00000000000000 1.5367576246313536E-004 + 234.06000000000000 1.5948433533799505E-004 + 234.12000000000000 1.6538879931362054E-004 + 234.18000000000001 1.7138538194967775E-004 + 234.24000000000001 1.7746998205996021E-004 + 234.30000000000001 1.8363815537730748E-004 + 234.36000000000001 1.8988513691248186E-004 + 234.42000000000002 1.9620585823794151E-004 + 234.47999999999996 2.0259493748265423E-004 + 234.53999999999996 2.0904670412126927E-004 + 234.59999999999997 2.1555512605232613E-004 + 234.65999999999997 2.2211390975714878E-004 + 234.71999999999997 2.2871653241744131E-004 + 234.77999999999997 2.3535611019155148E-004 + 234.83999999999997 2.4202555065471474E-004 + 234.89999999999998 2.4871747215324090E-004 + 234.95999999999998 2.5542425710206487E-004 + 235.01999999999998 2.6213802130893137E-004 + 235.07999999999998 2.6885064472594933E-004 + 235.13999999999999 2.7555377702968240E-004 + 235.19999999999999 2.8223886065789660E-004 + 235.25999999999999 2.8889706303668761E-004 + 235.31999999999999 2.9551937770213427E-004 + 235.38000000000000 3.0209659585911939E-004 + 235.44000000000000 3.0861928559901286E-004 + 235.50000000000000 3.1507787550804419E-004 + 235.56000000000000 3.2146260868142233E-004 + 235.62000000000000 3.2776353697580249E-004 + 235.68000000000001 3.3397064727727621E-004 + 235.74000000000001 3.4007375872408490E-004 + 235.80000000000001 3.4606261356986474E-004 + 235.86000000000001 3.5192690686829939E-004 + 235.92000000000002 3.5765630455676775E-004 + 235.97999999999996 3.6324038739490584E-004 + 236.03999999999996 3.6866883456792323E-004 + 236.09999999999997 3.7393133695409763E-004 + 236.15999999999997 3.7901765445000514E-004 + 236.21999999999997 3.8391762389748620E-004 + 236.27999999999997 3.8862122086632015E-004 + 236.33999999999997 3.9311859540060916E-004 + 236.39999999999998 3.9740001929188592E-004 + 236.45999999999998 4.0145605068385470E-004 + 236.51999999999998 4.0527738020597245E-004 + 236.57999999999998 4.0885501477062327E-004 + 236.63999999999999 4.1218017929067812E-004 + 236.69999999999999 4.1524440363497191E-004 + 236.75999999999999 4.1803951043922928E-004 + 236.81999999999999 4.2055764418211640E-004 + 236.88000000000000 4.2279134148053233E-004 + 236.94000000000000 4.2473342925593066E-004 + 237.00000000000000 4.2637718176073681E-004 + 237.06000000000000 4.2771624956488760E-004 + 237.12000000000000 4.2874472430766701E-004 + 237.18000000000001 4.2945715095201684E-004 + 237.24000000000001 4.2984851659197274E-004 + 237.30000000000001 4.2991432595270368E-004 + 237.36000000000001 4.2965055446454416E-004 + 237.42000000000002 4.2905376008640217E-004 + 237.47999999999996 4.2812104415616088E-004 + 237.53999999999996 4.2685002582747514E-004 + 237.59999999999997 4.2523894582552422E-004 + 237.65999999999997 4.2328663196980557E-004 + 237.71999999999997 4.2099245898431287E-004 + 237.77999999999997 4.1835650038320383E-004 + 237.83999999999997 4.1537935750441703E-004 + 237.89999999999998 4.1206232342990985E-004 + 237.95999999999998 4.0840726452567476E-004 + 238.01999999999998 4.0441668629783280E-004 + 238.07999999999998 4.0009370878670746E-004 + 238.13999999999999 3.9544201874662104E-004 + 238.19999999999999 3.9046600536816957E-004 + 238.25999999999999 3.8517055994040090E-004 + 238.31999999999999 3.7956123822310763E-004 + 238.38000000000000 3.7364409686894691E-004 + 238.44000000000000 3.6742577529202443E-004 + 238.50000000000000 3.6091350603442522E-004 + 238.56000000000000 3.5411497861889912E-004 + 238.62000000000000 3.4703845450577344E-004 + 238.68000000000001 3.3969264435431611E-004 + 238.74000000000001 3.3208676728331934E-004 + 238.80000000000001 3.2423043690455263E-004 + 238.86000000000001 3.1613374519743427E-004 + 238.92000000000002 3.0780718205001742E-004 + 238.97999999999996 2.9926164102207114E-004 + 239.03999999999996 2.9050832885233434E-004 + 239.09999999999997 2.8155880876165840E-004 + 239.15999999999997 2.7242491343863599E-004 + 239.21999999999997 2.6311880722454682E-004 + 239.27999999999997 2.5365288311158569E-004 + 239.33999999999997 2.4403969029910627E-004 + 239.39999999999998 2.3429204261206770E-004 + 239.45999999999998 2.2442287361445720E-004 + 239.51999999999998 2.1444523200176617E-004 + 239.57999999999998 2.0437226343701520E-004 + 239.63999999999999 1.9421718736235149E-004 + 239.69999999999999 1.8399322290799550E-004 + 239.75999999999999 1.7371360431894030E-004 + 239.81999999999999 1.6339149172139720E-004 + 239.88000000000000 1.5304002807876483E-004 + 239.94000000000000 1.4267223196051741E-004 + 240.00000000000000 1.3230097931896576E-004 + 240.06000000000000 1.2193899663914518E-004 + 240.12000000000000 1.1159884502140407E-004 + 240.18000000000001 1.0129285798508457E-004 + 240.24000000000001 9.1033138249841975E-005 + 240.30000000000001 8.0831539643417638E-005 + 240.36000000000001 7.0699626786288353E-005 + 240.42000000000002 6.0648706620802770E-005 + 240.47999999999996 5.0689741510395595E-005 + 240.53999999999996 4.0833382026076958E-005 + 240.59999999999997 3.1089923940041920E-005 + 240.65999999999997 2.1469318340191336E-005 + 240.71999999999997 1.1981136494912049E-005 + 240.77999999999997 2.6345679884020040E-006 + 240.83999999999997 -6.5616035510442700E-006 + 240.89999999999998 -1.5598992671766224E-005 + 240.95999999999998 -2.4469648722630806E-005 + 241.01999999999998 -3.3166043252169099E-005 + 241.07999999999998 -4.1681100187419988E-005 + 241.13999999999999 -5.0008184533117749E-005 + 241.19999999999999 -5.8141126860730232E-005 + 241.25999999999999 -6.6074208523170700E-005 + 241.31999999999999 -7.3802185863775728E-005 + 241.38000000000000 -8.1320272008912750E-005 + 241.44000000000000 -8.8624149235037912E-005 + 241.50000000000000 -9.5709955640607515E-005 + 241.56000000000000 -1.0257428014061302E-004 + 241.62000000000000 -1.0921416034029596E-004 + 241.68000000000001 -1.1562709137388521E-004 + 241.74000000000001 -1.2181096850644211E-004 + 241.80000000000001 -1.2776413506250607E-004 + 241.86000000000001 -1.3348533271799815E-004 + 241.92000000000002 -1.3897369810879782E-004 + 241.97999999999996 -1.4422875596998612E-004 + 242.03999999999996 -1.4925041665620644E-004 + 242.09999999999997 -1.5403894407488674E-004 + 242.15999999999997 -1.5859498380943680E-004 + 242.21999999999997 -1.6291951093257495E-004 + 242.27999999999997 -1.6701384242984459E-004 + 242.33999999999997 -1.7087962124793651E-004 + 242.39999999999998 -1.7451882155476158E-004 + 242.45999999999998 -1.7793371746083935E-004 + 242.51999999999998 -1.8112685724936480E-004 + 242.57999999999998 -1.8410109574574994E-004 + 242.63999999999999 -1.8685954406125660E-004 + 242.69999999999999 -1.8940558046718318E-004 + 242.75999999999999 -1.9174281788617706E-004 + 242.81999999999999 -1.9387505796277372E-004 + 242.88000000000000 -1.9580635587541681E-004 + 242.94000000000000 -1.9754091237197897E-004 + 243.00000000000000 -1.9908313811804171E-004 + 243.06000000000000 -2.0043755455326584E-004 + 243.12000000000000 -2.0160883773755669E-004 + 243.18000000000001 -2.0260176380555936E-004 + 243.24000000000001 -2.0342124789724577E-004 + 243.30000000000001 -2.0407224687564446E-004 + 243.36000000000001 -2.0455980630134160E-004 + 243.42000000000002 -2.0488904863291284E-004 + 243.47999999999996 -2.0506513576404876E-004 + 243.53999999999996 -2.0509324209125801E-004 + 243.59999999999997 -2.0497859862537741E-004 + 243.65999999999997 -2.0472643568917800E-004 + 243.71999999999997 -2.0434197833943762E-004 + 243.77999999999997 -2.0383048286123773E-004 + 243.83999999999997 -2.0319715260676903E-004 + 243.89999999999998 -2.0244719000388090E-004 + 243.95999999999998 -2.0158576845198640E-004 + 244.01999999999998 -2.0061799220539599E-004 + 244.07999999999998 -1.9954893779302858E-004 + 244.13999999999999 -1.9838360328220108E-004 + 244.19999999999999 -1.9712692206604233E-004 + 244.25999999999999 -1.9578373738414180E-004 + 244.31999999999999 -1.9435880638756778E-004 + 244.38000000000000 -1.9285678492180457E-004 + 244.44000000000000 -1.9128226551859225E-004 + 244.50000000000000 -1.8963966956450160E-004 + 244.56000000000000 -1.8793333969583422E-004 + 244.62000000000000 -1.8616749563193718E-004 + 244.68000000000001 -1.8434622061312152E-004 + 244.74000000000001 -1.8247349110778627E-004 + 244.80000000000001 -1.8055313707398624E-004 + 244.86000000000001 -1.7858886560236239E-004 + 244.92000000000002 -1.7658424649390450E-004 + 244.97999999999996 -1.7454270118464845E-004 + 245.03999999999996 -1.7246753292244729E-004 + 245.09999999999997 -1.7036190980072153E-004 + 245.15999999999997 -1.6822887466856864E-004 + 245.21999999999997 -1.6607131782958795E-004 + 245.27999999999997 -1.6389200457515431E-004 + 245.33999999999997 -1.6169357686541392E-004 + 245.39999999999998 -1.5947856457305639E-004 + 245.45999999999998 -1.5724934887276982E-004 + 245.51999999999998 -1.5500823942414966E-004 + 245.57999999999998 -1.5275740749652540E-004 + 245.63999999999999 -1.5049894344892160E-004 + 245.69999999999999 -1.4823483398980342E-004 + 245.75999999999999 -1.4596696816629261E-004 + 245.81999999999999 -1.4369715029665466E-004 + 245.88000000000000 -1.4142712208654564E-004 + 245.94000000000000 -1.3915852187812111E-004 + 246.00000000000000 -1.3689293196238457E-004 + 246.06000000000000 -1.3463187249357651E-004 + 246.12000000000000 -1.3237677055551183E-004 + 246.18000000000001 -1.3012900867607761E-004 + 246.24000000000001 -1.2788989668824648E-004 + 246.30000000000001 -1.2566067094857902E-004 + 246.36000000000001 -1.2344251958691587E-004 + 246.42000000000002 -1.2123655565387297E-004 + 246.47999999999996 -1.1904385561262057E-004 + 246.53999999999996 -1.1686542036697482E-004 + 246.59999999999997 -1.1470219948855385E-004 + 246.65999999999997 -1.1255511095862628E-004 + 246.71999999999997 -1.1042501309758443E-004 + 246.77999999999997 -1.0831274421651098E-004 + 246.83999999999997 -1.0621910064769076E-004 + 246.89999999999998 -1.0414486616932001E-004 + 246.95999999999998 -1.0209079277767292E-004 + 247.01999999999998 -1.0005762697468795E-004 + 247.07999999999998 -9.8046089651751452E-005 + 247.13999999999999 -9.6056909449350941E-005 + 247.19999999999999 -9.4090782628835100E-005 + 247.25999999999999 -9.2148413228517376E-005 + 247.31999999999999 -9.0230485203064638E-005 + 247.38000000000000 -8.8337667828099006E-005 + 247.44000000000000 -8.6470617814334485E-005 + 247.50000000000000 -8.4629955544528898E-005 + 247.56000000000000 -8.2816285673162021E-005 + 247.62000000000000 -8.1030177219990163E-005 + 247.68000000000001 -7.9272156892598871E-005 + 247.74000000000001 -7.7542727067304390E-005 + 247.80000000000001 -7.5842340909603115E-005 + 247.86000000000001 -7.4171418204736946E-005 + 247.92000000000002 -7.2530324560645881E-005 + 247.97999999999996 -7.0919403238358533E-005 + 248.03999999999996 -6.9338957158931452E-005 + 248.09999999999997 -6.7789243851776212E-005 + 248.15999999999997 -6.6270488542978127E-005 + 248.21999999999997 -6.4782905137591700E-005 + 248.27999999999997 -6.3326658706698585E-005 + 248.33999999999997 -6.1901897351237373E-005 + 248.39999999999998 -6.0508745550628399E-005 + 248.45999999999998 -5.9147287334353869E-005 + 248.51999999999998 -5.7817589763439296E-005 + 248.57999999999998 -5.6519695655141821E-005 + 248.63999999999999 -5.5253611934284123E-005 + 248.69999999999999 -5.4019322566726909E-005 + 248.75999999999999 -5.2816766745850551E-005 + 248.81999999999999 -5.1645857147534310E-005 + 248.88000000000000 -5.0506471751813599E-005 + 248.94000000000000 -4.9398450621935711E-005 + 249.00000000000000 -4.8321599822624553E-005 + 249.06000000000000 -4.7275693806412506E-005 + 249.12000000000000 -4.6260476101490461E-005 + 249.18000000000001 -4.5275667153419053E-005 + 249.24000000000001 -4.4320963345670463E-005 + 249.30000000000001 -4.3396036646728325E-005 + 249.36000000000001 -4.2500548216090223E-005 + 249.42000000000002 -4.1634142966173772E-005 + 249.47999999999996 -4.0796462311686601E-005 + 249.53999999999996 -3.9987131997127924E-005 + 249.59999999999997 -3.9205776998228068E-005 + 249.65999999999997 -3.8452011366615078E-005 + 249.71999999999997 -3.7725449910512338E-005 + 249.77999999999997 -3.7025695424738579E-005 + 249.83999999999997 -3.6352348087230928E-005 + 249.89999999999998 -3.5704993863803311E-005 + 249.95999999999998 -3.5083213380832334E-005 + 250.01999999999998 -3.4486575913324444E-005 + 250.07999999999998 -3.3914641041284760E-005 + 250.13999999999999 -3.3366955017768303E-005 + 250.19999999999999 -3.2843058315233214E-005 + 250.25999999999999 -3.2342479613371936E-005 + 250.31999999999999 -3.1864743261440213E-005 + 250.38000000000000 -3.1409369575024701E-005 + 250.44000000000000 -3.0975871611237715E-005 + 250.50000000000000 -3.0563771488577678E-005 + 250.56000000000000 -3.0172582433108184E-005 + 250.62000000000000 -2.9801824325617736E-005 + 250.68000000000001 -2.9451021685415883E-005 + 250.74000000000001 -2.9119700319774614E-005 + 250.80000000000001 -2.8807387907020609E-005 + 250.86000000000001 -2.8513616952972572E-005 + 250.92000000000002 -2.8237913096349020E-005 + 250.97999999999996 -2.7979804486086825E-005 + 251.03999999999996 -2.7738809221881061E-005 + 251.09999999999997 -2.7514442499123580E-005 + 251.15999999999997 -2.7306207373839684E-005 + 251.21999999999997 -2.7113600659645990E-005 + 251.27999999999997 -2.6936107718279064E-005 + 251.33999999999997 -2.6773203542225598E-005 + 251.39999999999998 -2.6624354832967138E-005 + 251.45999999999998 -2.6489020754427189E-005 + 251.51999999999998 -2.6366653313405285E-005 + 251.57999999999998 -2.6256698798012891E-005 + 251.63999999999999 -2.6158601908915396E-005 + 251.69999999999999 -2.6071810506846220E-005 + 251.75999999999999 -2.5995766258997454E-005 + 251.81999999999999 -2.5929917003715751E-005 + 251.88000000000000 -2.5873709134151663E-005 + 251.94000000000000 -2.5826589843657996E-005 diff --git a/seisflows/tests/test_data/test_solver/002/traces/syn/AA.S000001.BXY.semd b/seisflows/tests/test_data/test_solver/002/traces/syn/AA.S000001.BXY.semd new file mode 100644 index 00000000..15e04a7b --- /dev/null +++ b/seisflows/tests/test_data/test_solver/002/traces/syn/AA.S000001.BXY.semd @@ -0,0 +1,5000 @@ + -48.000000000000000 0.0000000000000000 + -47.939999999999998 0.0000000000000000 + -47.880000000000003 0.0000000000000000 + -47.820000000000000 0.0000000000000000 + -47.759999999999998 0.0000000000000000 + -47.700000000000003 0.0000000000000000 + -47.640000000000001 0.0000000000000000 + -47.579999999999998 0.0000000000000000 + -47.520000000000003 0.0000000000000000 + -47.460000000000001 0.0000000000000000 + -47.399999999999999 0.0000000000000000 + -47.340000000000003 0.0000000000000000 + -47.280000000000001 0.0000000000000000 + -47.219999999999999 0.0000000000000000 + -47.159999999999997 0.0000000000000000 + -47.100000000000001 0.0000000000000000 + -47.039999999999999 0.0000000000000000 + -46.979999999999997 0.0000000000000000 + -46.920000000000002 0.0000000000000000 + -46.859999999999999 0.0000000000000000 + -46.799999999999997 0.0000000000000000 + -46.740000000000002 0.0000000000000000 + -46.680000000000000 0.0000000000000000 + -46.619999999999997 0.0000000000000000 + -46.560000000000002 0.0000000000000000 + -46.500000000000000 0.0000000000000000 + -46.439999999999998 0.0000000000000000 + -46.380000000000003 0.0000000000000000 + -46.320000000000000 0.0000000000000000 + -46.259999999999998 0.0000000000000000 + -46.200000000000003 0.0000000000000000 + -46.140000000000001 0.0000000000000000 + -46.079999999999998 0.0000000000000000 + -46.020000000000003 0.0000000000000000 + -45.960000000000001 0.0000000000000000 + -45.899999999999999 0.0000000000000000 + -45.840000000000003 0.0000000000000000 + -45.780000000000001 0.0000000000000000 + -45.719999999999999 0.0000000000000000 + -45.659999999999997 0.0000000000000000 + -45.600000000000001 0.0000000000000000 + -45.539999999999999 0.0000000000000000 + -45.479999999999997 0.0000000000000000 + -45.420000000000002 0.0000000000000000 + -45.359999999999999 0.0000000000000000 + -45.299999999999997 0.0000000000000000 + -45.240000000000002 0.0000000000000000 + -45.180000000000000 0.0000000000000000 + -45.119999999999997 0.0000000000000000 + -45.060000000000002 0.0000000000000000 + -45.000000000000000 0.0000000000000000 + -44.939999999999998 0.0000000000000000 + -44.880000000000003 0.0000000000000000 + -44.820000000000000 0.0000000000000000 + -44.759999999999998 0.0000000000000000 + -44.700000000000003 0.0000000000000000 + -44.640000000000001 0.0000000000000000 + -44.579999999999998 0.0000000000000000 + -44.520000000000003 0.0000000000000000 + -44.460000000000001 0.0000000000000000 + -44.399999999999999 0.0000000000000000 + -44.340000000000003 0.0000000000000000 + -44.280000000000001 0.0000000000000000 + -44.219999999999999 0.0000000000000000 + -44.159999999999997 0.0000000000000000 + -44.100000000000001 0.0000000000000000 + -44.039999999999999 0.0000000000000000 + -43.980000000000004 0.0000000000000000 + -43.920000000000002 0.0000000000000000 + -43.859999999999999 0.0000000000000000 + -43.799999999999997 0.0000000000000000 + -43.740000000000002 0.0000000000000000 + -43.680000000000000 0.0000000000000000 + -43.619999999999997 0.0000000000000000 + -43.560000000000002 0.0000000000000000 + -43.500000000000000 0.0000000000000000 + -43.439999999999998 0.0000000000000000 + -43.380000000000003 0.0000000000000000 + -43.320000000000000 0.0000000000000000 + -43.259999999999998 0.0000000000000000 + -43.200000000000003 0.0000000000000000 + -43.140000000000001 0.0000000000000000 + -43.079999999999998 0.0000000000000000 + -43.020000000000003 0.0000000000000000 + -42.960000000000001 0.0000000000000000 + -42.899999999999999 0.0000000000000000 + -42.840000000000003 0.0000000000000000 + -42.780000000000001 0.0000000000000000 + -42.719999999999999 0.0000000000000000 + -42.659999999999997 0.0000000000000000 + -42.600000000000001 0.0000000000000000 + -42.539999999999999 0.0000000000000000 + -42.480000000000004 0.0000000000000000 + -42.420000000000002 0.0000000000000000 + -42.359999999999999 0.0000000000000000 + -42.299999999999997 0.0000000000000000 + -42.240000000000002 0.0000000000000000 + -42.180000000000000 0.0000000000000000 + -42.119999999999997 0.0000000000000000 + -42.060000000000002 0.0000000000000000 + -42.000000000000000 0.0000000000000000 + -41.939999999999998 0.0000000000000000 + -41.880000000000003 0.0000000000000000 + -41.820000000000000 0.0000000000000000 + -41.759999999999998 0.0000000000000000 + -41.700000000000003 0.0000000000000000 + -41.640000000000001 0.0000000000000000 + -41.579999999999998 0.0000000000000000 + -41.520000000000003 0.0000000000000000 + -41.460000000000001 0.0000000000000000 + -41.399999999999999 0.0000000000000000 + -41.340000000000003 0.0000000000000000 + -41.280000000000001 0.0000000000000000 + -41.219999999999999 0.0000000000000000 + -41.159999999999997 0.0000000000000000 + -41.100000000000001 0.0000000000000000 + -41.039999999999999 0.0000000000000000 + -40.980000000000004 0.0000000000000000 + -40.920000000000002 0.0000000000000000 + -40.859999999999999 0.0000000000000000 + -40.799999999999997 0.0000000000000000 + -40.740000000000002 0.0000000000000000 + -40.680000000000000 0.0000000000000000 + -40.619999999999997 0.0000000000000000 + -40.560000000000002 0.0000000000000000 + -40.500000000000000 0.0000000000000000 + -40.439999999999998 0.0000000000000000 + -40.380000000000003 0.0000000000000000 + -40.320000000000000 0.0000000000000000 + -40.259999999999998 0.0000000000000000 + -40.200000000000003 0.0000000000000000 + -40.140000000000001 0.0000000000000000 + -40.079999999999998 0.0000000000000000 + -40.020000000000003 0.0000000000000000 + -39.960000000000001 0.0000000000000000 + -39.899999999999999 0.0000000000000000 + -39.840000000000003 0.0000000000000000 + -39.780000000000001 0.0000000000000000 + -39.719999999999999 0.0000000000000000 + -39.659999999999997 0.0000000000000000 + -39.600000000000001 0.0000000000000000 + -39.539999999999999 0.0000000000000000 + -39.480000000000004 0.0000000000000000 + -39.420000000000002 0.0000000000000000 + -39.359999999999999 0.0000000000000000 + -39.299999999999997 0.0000000000000000 + -39.240000000000002 0.0000000000000000 + -39.180000000000000 0.0000000000000000 + -39.120000000000005 0.0000000000000000 + -39.060000000000002 0.0000000000000000 + -39.000000000000000 0.0000000000000000 + -38.939999999999998 0.0000000000000000 + -38.880000000000003 0.0000000000000000 + -38.820000000000000 0.0000000000000000 + -38.759999999999998 0.0000000000000000 + -38.700000000000003 0.0000000000000000 + -38.640000000000001 0.0000000000000000 + -38.579999999999998 0.0000000000000000 + -38.519999999999996 0.0000000000000000 + -38.460000000000001 0.0000000000000000 + -38.399999999999999 0.0000000000000000 + -38.340000000000003 0.0000000000000000 + -38.280000000000001 0.0000000000000000 + -38.219999999999999 0.0000000000000000 + -38.159999999999997 0.0000000000000000 + -38.100000000000001 0.0000000000000000 + -38.039999999999999 0.0000000000000000 + -37.980000000000004 0.0000000000000000 + -37.920000000000002 0.0000000000000000 + -37.859999999999999 0.0000000000000000 + -37.799999999999997 0.0000000000000000 + -37.740000000000002 0.0000000000000000 + -37.680000000000000 0.0000000000000000 + -37.620000000000005 0.0000000000000000 + -37.560000000000002 0.0000000000000000 + -37.500000000000000 0.0000000000000000 + -37.439999999999998 0.0000000000000000 + -37.380000000000003 0.0000000000000000 + -37.320000000000000 0.0000000000000000 + -37.259999999999998 0.0000000000000000 + -37.200000000000003 0.0000000000000000 + -37.140000000000001 0.0000000000000000 + -37.079999999999998 0.0000000000000000 + -37.019999999999996 0.0000000000000000 + -36.960000000000001 0.0000000000000000 + -36.899999999999999 0.0000000000000000 + -36.840000000000003 0.0000000000000000 + -36.780000000000001 0.0000000000000000 + -36.719999999999999 0.0000000000000000 + -36.659999999999997 0.0000000000000000 + -36.600000000000001 0.0000000000000000 + -36.539999999999999 0.0000000000000000 + -36.480000000000004 0.0000000000000000 + -36.420000000000002 0.0000000000000000 + -36.359999999999999 0.0000000000000000 + -36.299999999999997 0.0000000000000000 + -36.240000000000002 0.0000000000000000 + -36.180000000000000 0.0000000000000000 + -36.120000000000005 0.0000000000000000 + -36.060000000000002 0.0000000000000000 + -36.000000000000000 0.0000000000000000 + -35.939999999999998 0.0000000000000000 + -35.880000000000003 0.0000000000000000 + -35.820000000000000 0.0000000000000000 + -35.759999999999998 0.0000000000000000 + -35.700000000000003 0.0000000000000000 + -35.640000000000001 0.0000000000000000 + -35.579999999999998 0.0000000000000000 + -35.519999999999996 0.0000000000000000 + -35.460000000000001 0.0000000000000000 + -35.399999999999999 0.0000000000000000 + -35.340000000000003 0.0000000000000000 + -35.280000000000001 0.0000000000000000 + -35.219999999999999 0.0000000000000000 + -35.159999999999997 0.0000000000000000 + -35.100000000000001 0.0000000000000000 + -35.039999999999999 0.0000000000000000 + -34.980000000000004 0.0000000000000000 + -34.920000000000002 0.0000000000000000 + -34.859999999999999 0.0000000000000000 + -34.799999999999997 0.0000000000000000 + -34.740000000000002 0.0000000000000000 + -34.680000000000000 0.0000000000000000 + -34.620000000000005 0.0000000000000000 + -34.560000000000002 0.0000000000000000 + -34.500000000000000 0.0000000000000000 + -34.439999999999998 0.0000000000000000 + -34.380000000000003 0.0000000000000000 + -34.320000000000000 0.0000000000000000 + -34.259999999999998 0.0000000000000000 + -34.200000000000003 0.0000000000000000 + -34.140000000000001 0.0000000000000000 + -34.079999999999998 0.0000000000000000 + -34.020000000000003 0.0000000000000000 + -33.960000000000001 0.0000000000000000 + -33.899999999999999 0.0000000000000000 + -33.840000000000003 0.0000000000000000 + -33.780000000000001 0.0000000000000000 + -33.719999999999999 0.0000000000000000 + -33.659999999999997 0.0000000000000000 + -33.600000000000001 0.0000000000000000 + -33.539999999999999 0.0000000000000000 + -33.480000000000004 0.0000000000000000 + -33.420000000000002 0.0000000000000000 + -33.359999999999999 0.0000000000000000 + -33.299999999999997 0.0000000000000000 + -33.240000000000002 0.0000000000000000 + -33.180000000000000 0.0000000000000000 + -33.120000000000005 0.0000000000000000 + -33.060000000000002 0.0000000000000000 + -33.000000000000000 0.0000000000000000 + -32.939999999999998 0.0000000000000000 + -32.880000000000003 0.0000000000000000 + -32.820000000000000 0.0000000000000000 + -32.759999999999998 0.0000000000000000 + -32.700000000000003 0.0000000000000000 + -32.640000000000001 0.0000000000000000 + -32.579999999999998 0.0000000000000000 + -32.520000000000003 0.0000000000000000 + -32.460000000000001 0.0000000000000000 + -32.399999999999999 0.0000000000000000 + -32.340000000000003 0.0000000000000000 + -32.280000000000001 0.0000000000000000 + -32.219999999999999 0.0000000000000000 + -32.159999999999997 0.0000000000000000 + -32.100000000000001 0.0000000000000000 + -32.039999999999999 0.0000000000000000 + -31.980000000000000 0.0000000000000000 + -31.920000000000002 0.0000000000000000 + -31.859999999999999 0.0000000000000000 + -31.800000000000001 0.0000000000000000 + -31.740000000000002 0.0000000000000000 + -31.680000000000000 0.0000000000000000 + -31.620000000000001 0.0000000000000000 + -31.560000000000002 0.0000000000000000 + -31.500000000000000 0.0000000000000000 + -31.440000000000001 0.0000000000000000 + -31.379999999999999 0.0000000000000000 + -31.320000000000000 0.0000000000000000 + -31.260000000000002 0.0000000000000000 + -31.199999999999999 0.0000000000000000 + -31.140000000000001 0.0000000000000000 + -31.080000000000002 0.0000000000000000 + -31.020000000000000 0.0000000000000000 + -30.960000000000001 0.0000000000000000 + -30.900000000000002 0.0000000000000000 + -30.840000000000000 0.0000000000000000 + -30.780000000000001 0.0000000000000000 + -30.719999999999999 0.0000000000000000 + -30.660000000000000 0.0000000000000000 + -30.600000000000001 0.0000000000000000 + -30.539999999999999 0.0000000000000000 + -30.480000000000000 0.0000000000000000 + -30.420000000000002 0.0000000000000000 + -30.359999999999999 0.0000000000000000 + -30.300000000000001 0.0000000000000000 + -30.240000000000002 0.0000000000000000 + -30.180000000000000 0.0000000000000000 + -30.120000000000001 0.0000000000000000 + -30.060000000000002 0.0000000000000000 + -30.000000000000000 0.0000000000000000 + -29.940000000000001 0.0000000000000000 + -29.879999999999999 0.0000000000000000 + -29.820000000000000 0.0000000000000000 + -29.760000000000002 0.0000000000000000 + -29.699999999999999 0.0000000000000000 + -29.640000000000001 0.0000000000000000 + -29.580000000000002 0.0000000000000000 + -29.520000000000000 0.0000000000000000 + -29.460000000000001 0.0000000000000000 + -29.400000000000002 0.0000000000000000 + -29.340000000000000 0.0000000000000000 + -29.280000000000001 0.0000000000000000 + -29.220000000000002 0.0000000000000000 + -29.160000000000000 0.0000000000000000 + -29.100000000000001 0.0000000000000000 + -29.039999999999999 0.0000000000000000 + -28.980000000000000 0.0000000000000000 + -28.920000000000002 0.0000000000000000 + -28.859999999999999 0.0000000000000000 + -28.800000000000001 0.0000000000000000 + -28.740000000000002 0.0000000000000000 + -28.680000000000000 0.0000000000000000 + -28.620000000000001 0.0000000000000000 + -28.560000000000002 0.0000000000000000 + -28.500000000000000 0.0000000000000000 + -28.440000000000001 0.0000000000000000 + -28.379999999999999 0.0000000000000000 + -28.320000000000000 0.0000000000000000 + -28.260000000000002 0.0000000000000000 + -28.199999999999999 0.0000000000000000 + -28.140000000000001 0.0000000000000000 + -28.080000000000002 0.0000000000000000 + -28.020000000000000 0.0000000000000000 + -27.960000000000001 0.0000000000000000 + -27.900000000000002 0.0000000000000000 + -27.840000000000000 0.0000000000000000 + -27.780000000000001 0.0000000000000000 + -27.720000000000002 0.0000000000000000 + -27.660000000000000 0.0000000000000000 + -27.600000000000001 0.0000000000000000 + -27.539999999999999 0.0000000000000000 + -27.480000000000000 0.0000000000000000 + -27.420000000000002 0.0000000000000000 + -27.359999999999999 0.0000000000000000 + -27.300000000000001 0.0000000000000000 + -27.240000000000002 0.0000000000000000 + -27.180000000000000 0.0000000000000000 + -27.120000000000001 0.0000000000000000 + -27.060000000000002 0.0000000000000000 + -27.000000000000000 0.0000000000000000 + -26.940000000000001 0.0000000000000000 + -26.880000000000003 0.0000000000000000 + -26.820000000000000 0.0000000000000000 + -26.760000000000002 0.0000000000000000 + -26.699999999999999 0.0000000000000000 + -26.640000000000001 0.0000000000000000 + -26.580000000000002 0.0000000000000000 + -26.520000000000000 0.0000000000000000 + -26.460000000000001 0.0000000000000000 + -26.400000000000002 0.0000000000000000 + -26.340000000000000 0.0000000000000000 + -26.280000000000001 0.0000000000000000 + -26.220000000000002 0.0000000000000000 + -26.160000000000000 0.0000000000000000 + -26.100000000000001 0.0000000000000000 + -26.039999999999999 0.0000000000000000 + -25.980000000000000 0.0000000000000000 + -25.920000000000002 0.0000000000000000 + -25.859999999999999 0.0000000000000000 + -25.800000000000001 0.0000000000000000 + -25.740000000000002 0.0000000000000000 + -25.680000000000000 0.0000000000000000 + -25.620000000000001 0.0000000000000000 + -25.560000000000002 0.0000000000000000 + -25.500000000000000 0.0000000000000000 + -25.440000000000001 0.0000000000000000 + -25.380000000000003 0.0000000000000000 + -25.320000000000000 0.0000000000000000 + -25.260000000000002 0.0000000000000000 + -25.199999999999999 0.0000000000000000 + -25.140000000000001 0.0000000000000000 + -25.080000000000002 0.0000000000000000 + -25.020000000000000 0.0000000000000000 + -24.960000000000001 0.0000000000000000 + -24.900000000000002 0.0000000000000000 + -24.840000000000000 0.0000000000000000 + -24.780000000000001 0.0000000000000000 + -24.720000000000002 0.0000000000000000 + -24.660000000000000 0.0000000000000000 + -24.600000000000001 0.0000000000000000 + -24.539999999999999 0.0000000000000000 + -24.480000000000000 0.0000000000000000 + -24.420000000000002 0.0000000000000000 + -24.359999999999999 0.0000000000000000 + -24.300000000000001 0.0000000000000000 + -24.240000000000002 0.0000000000000000 + -24.180000000000000 0.0000000000000000 + -24.120000000000001 0.0000000000000000 + -24.060000000000002 0.0000000000000000 + -24.000000000000000 0.0000000000000000 + -23.940000000000001 0.0000000000000000 + -23.880000000000003 0.0000000000000000 + -23.820000000000000 0.0000000000000000 + -23.760000000000002 0.0000000000000000 + -23.699999999999999 0.0000000000000000 + -23.640000000000001 0.0000000000000000 + -23.580000000000002 0.0000000000000000 + -23.520000000000000 0.0000000000000000 + -23.460000000000001 0.0000000000000000 + -23.400000000000002 0.0000000000000000 + -23.340000000000000 0.0000000000000000 + -23.280000000000001 0.0000000000000000 + -23.220000000000002 0.0000000000000000 + -23.160000000000000 0.0000000000000000 + -23.100000000000001 0.0000000000000000 + -23.039999999999999 0.0000000000000000 + -22.980000000000000 0.0000000000000000 + -22.920000000000002 0.0000000000000000 + -22.859999999999999 0.0000000000000000 + -22.800000000000001 0.0000000000000000 + -22.740000000000002 0.0000000000000000 + -22.680000000000000 0.0000000000000000 + -22.620000000000001 0.0000000000000000 + -22.560000000000002 0.0000000000000000 + -22.500000000000000 0.0000000000000000 + -22.440000000000001 0.0000000000000000 + -22.380000000000003 0.0000000000000000 + -22.320000000000000 0.0000000000000000 + -22.260000000000002 0.0000000000000000 + -22.199999999999999 0.0000000000000000 + -22.140000000000001 0.0000000000000000 + -22.080000000000002 0.0000000000000000 + -22.020000000000000 0.0000000000000000 + -21.960000000000001 0.0000000000000000 + -21.900000000000002 0.0000000000000000 + -21.840000000000000 0.0000000000000000 + -21.780000000000001 0.0000000000000000 + -21.720000000000002 0.0000000000000000 + -21.660000000000000 0.0000000000000000 + -21.600000000000001 0.0000000000000000 + -21.540000000000003 0.0000000000000000 + -21.480000000000000 0.0000000000000000 + -21.420000000000002 0.0000000000000000 + -21.359999999999999 0.0000000000000000 + -21.300000000000001 0.0000000000000000 + -21.240000000000002 0.0000000000000000 + -21.180000000000000 0.0000000000000000 + -21.120000000000001 0.0000000000000000 + -21.060000000000002 0.0000000000000000 + -21.000000000000000 0.0000000000000000 + -20.940000000000001 0.0000000000000000 + -20.880000000000003 0.0000000000000000 + -20.820000000000000 0.0000000000000000 + -20.760000000000002 0.0000000000000000 + -20.699999999999999 0.0000000000000000 + -20.640000000000001 0.0000000000000000 + -20.580000000000002 0.0000000000000000 + -20.520000000000000 0.0000000000000000 + -20.460000000000001 0.0000000000000000 + -20.400000000000002 0.0000000000000000 + -20.340000000000000 0.0000000000000000 + -20.280000000000001 0.0000000000000000 + -20.220000000000002 0.0000000000000000 + -20.160000000000000 0.0000000000000000 + -20.100000000000001 0.0000000000000000 + -20.040000000000003 0.0000000000000000 + -19.980000000000000 0.0000000000000000 + -19.920000000000002 0.0000000000000000 + -19.859999999999999 0.0000000000000000 + -19.800000000000001 0.0000000000000000 + -19.740000000000002 0.0000000000000000 + -19.680000000000000 0.0000000000000000 + -19.620000000000001 0.0000000000000000 + -19.560000000000002 0.0000000000000000 + -19.500000000000000 0.0000000000000000 + -19.440000000000001 0.0000000000000000 + -19.380000000000003 0.0000000000000000 + -19.320000000000000 0.0000000000000000 + -19.260000000000002 0.0000000000000000 + -19.200000000000003 0.0000000000000000 + -19.140000000000001 0.0000000000000000 + -19.080000000000002 0.0000000000000000 + -19.020000000000000 0.0000000000000000 + -18.960000000000001 0.0000000000000000 + -18.900000000000002 0.0000000000000000 + -18.840000000000000 0.0000000000000000 + -18.780000000000001 0.0000000000000000 + -18.720000000000002 0.0000000000000000 + -18.660000000000000 0.0000000000000000 + -18.600000000000001 0.0000000000000000 + -18.540000000000003 0.0000000000000000 + -18.480000000000000 0.0000000000000000 + -18.420000000000002 0.0000000000000000 + -18.359999999999999 0.0000000000000000 + -18.300000000000001 0.0000000000000000 + -18.240000000000002 0.0000000000000000 + -18.180000000000000 0.0000000000000000 + -18.120000000000001 0.0000000000000000 + -18.060000000000002 0.0000000000000000 + -18.000000000000000 0.0000000000000000 + -17.940000000000001 0.0000000000000000 + -17.880000000000003 0.0000000000000000 + -17.820000000000000 0.0000000000000000 + -17.760000000000002 0.0000000000000000 + -17.700000000000003 0.0000000000000000 + -17.640000000000001 0.0000000000000000 + -17.580000000000002 0.0000000000000000 + -17.520000000000000 0.0000000000000000 + -17.460000000000001 0.0000000000000000 + -17.400000000000002 0.0000000000000000 + -17.340000000000000 0.0000000000000000 + -17.280000000000001 0.0000000000000000 + -17.220000000000002 0.0000000000000000 + -17.160000000000000 0.0000000000000000 + -17.100000000000001 0.0000000000000000 + -17.040000000000003 0.0000000000000000 + -16.980000000000000 0.0000000000000000 + -16.920000000000002 0.0000000000000000 + -16.859999999999999 0.0000000000000000 + -16.800000000000001 0.0000000000000000 + -16.740000000000002 0.0000000000000000 + -16.680000000000000 0.0000000000000000 + -16.620000000000001 0.0000000000000000 + -16.560000000000002 0.0000000000000000 + -16.500000000000000 0.0000000000000000 + -16.440000000000001 0.0000000000000000 + -16.380000000000003 0.0000000000000000 + -16.320000000000000 0.0000000000000000 + -16.260000000000002 0.0000000000000000 + -16.200000000000003 0.0000000000000000 + -16.140000000000001 0.0000000000000000 + -16.080000000000002 0.0000000000000000 + -16.020000000000000 0.0000000000000000 + -15.960000000000001 0.0000000000000000 + -15.899999999999999 0.0000000000000000 + -15.840000000000003 0.0000000000000000 + -15.780000000000001 0.0000000000000000 + -15.719999999999999 0.0000000000000000 + -15.660000000000004 0.0000000000000000 + -15.600000000000001 0.0000000000000000 + -15.539999999999999 0.0000000000000000 + -15.480000000000004 0.0000000000000000 + -15.420000000000002 0.0000000000000000 + -15.359999999999999 0.0000000000000000 + -15.300000000000004 0.0000000000000000 + -15.240000000000002 0.0000000000000000 + -15.180000000000000 0.0000000000000000 + -15.120000000000005 0.0000000000000000 + -15.060000000000002 0.0000000000000000 + -15.000000000000000 0.0000000000000000 + -14.939999999999998 0.0000000000000000 + -14.880000000000003 0.0000000000000000 + -14.820000000000000 0.0000000000000000 + -14.759999999999998 0.0000000000000000 + -14.700000000000003 0.0000000000000000 + -14.640000000000001 0.0000000000000000 + -14.579999999999998 0.0000000000000000 + -14.520000000000003 0.0000000000000000 + -14.460000000000001 0.0000000000000000 + -14.399999999999999 0.0000000000000000 + -14.340000000000003 0.0000000000000000 + -14.280000000000001 0.0000000000000000 + -14.219999999999999 0.0000000000000000 + -14.160000000000004 0.0000000000000000 + -14.100000000000001 0.0000000000000000 + -14.039999999999999 0.0000000000000000 + -13.980000000000004 0.0000000000000000 + -13.920000000000002 0.0000000000000000 + -13.859999999999999 0.0000000000000000 + -13.800000000000004 0.0000000000000000 + -13.740000000000002 0.0000000000000000 + -13.680000000000000 0.0000000000000000 + -13.620000000000005 0.0000000000000000 + -13.560000000000002 0.0000000000000000 + -13.500000000000000 0.0000000000000000 + -13.439999999999998 0.0000000000000000 + -13.380000000000003 0.0000000000000000 + -13.320000000000000 0.0000000000000000 + -13.259999999999998 0.0000000000000000 + -13.200000000000003 0.0000000000000000 + -13.140000000000001 0.0000000000000000 + -13.079999999999998 0.0000000000000000 + -13.020000000000003 0.0000000000000000 + -12.960000000000001 0.0000000000000000 + -12.899999999999999 0.0000000000000000 + -12.840000000000003 0.0000000000000000 + -12.780000000000001 0.0000000000000000 + -12.719999999999999 0.0000000000000000 + -12.660000000000004 0.0000000000000000 + -12.600000000000001 0.0000000000000000 + -12.539999999999999 0.0000000000000000 + -12.480000000000004 0.0000000000000000 + -12.420000000000002 0.0000000000000000 + -12.359999999999999 0.0000000000000000 + -12.300000000000004 0.0000000000000000 + -12.240000000000002 0.0000000000000000 + -12.180000000000000 0.0000000000000000 + -12.120000000000005 0.0000000000000000 + -12.060000000000002 0.0000000000000000 + -12.000000000000000 0.0000000000000000 + -11.940000000000005 0.0000000000000000 + -11.880000000000003 0.0000000000000000 + -11.820000000000000 0.0000000000000000 + -11.759999999999998 0.0000000000000000 + -11.700000000000003 0.0000000000000000 + -11.640000000000001 0.0000000000000000 + -11.579999999999998 0.0000000000000000 + -11.520000000000003 0.0000000000000000 + -11.460000000000001 0.0000000000000000 + -11.399999999999999 0.0000000000000000 + -11.340000000000003 0.0000000000000000 + -11.280000000000001 0.0000000000000000 + -11.219999999999999 0.0000000000000000 + -11.160000000000004 0.0000000000000000 + -11.100000000000001 0.0000000000000000 + -11.039999999999999 0.0000000000000000 + -10.980000000000004 0.0000000000000000 + -10.920000000000002 0.0000000000000000 + -10.859999999999999 0.0000000000000000 + -10.800000000000004 0.0000000000000000 + -10.740000000000002 0.0000000000000000 + -10.680000000000000 0.0000000000000000 + -10.620000000000005 0.0000000000000000 + -10.560000000000002 0.0000000000000000 + -10.500000000000000 0.0000000000000000 + -10.440000000000005 0.0000000000000000 + -10.380000000000003 0.0000000000000000 + -10.320000000000000 0.0000000000000000 + -10.259999999999998 0.0000000000000000 + -10.200000000000003 0.0000000000000000 + -10.140000000000001 0.0000000000000000 + -10.079999999999998 0.0000000000000000 + -10.020000000000003 0.0000000000000000 + -9.9600000000000009 0.0000000000000000 + -9.8999999999999986 0.0000000000000000 + -9.8400000000000034 0.0000000000000000 + -9.7800000000000011 0.0000000000000000 + -9.7199999999999989 0.0000000000000000 + -9.6600000000000037 0.0000000000000000 + -9.6000000000000014 0.0000000000000000 + -9.5399999999999991 0.0000000000000000 + -9.4800000000000040 0.0000000000000000 + -9.4200000000000017 0.0000000000000000 + -9.3599999999999994 0.0000000000000000 + -9.3000000000000043 0.0000000000000000 + -9.2400000000000020 0.0000000000000000 + -9.1799999999999997 0.0000000000000000 + -9.1200000000000045 0.0000000000000000 + -9.0600000000000023 0.0000000000000000 + -9.0000000000000000 0.0000000000000000 + -8.9400000000000048 0.0000000000000000 + -8.8800000000000026 0.0000000000000000 + -8.8200000000000003 0.0000000000000000 + -8.7599999999999980 0.0000000000000000 + -8.7000000000000028 0.0000000000000000 + -8.6400000000000006 0.0000000000000000 + -8.5799999999999983 0.0000000000000000 + -8.5200000000000031 0.0000000000000000 + -8.4600000000000009 0.0000000000000000 + -8.3999999999999986 0.0000000000000000 + -8.3400000000000034 0.0000000000000000 + -8.2800000000000011 0.0000000000000000 + -8.2199999999999989 0.0000000000000000 + -8.1600000000000037 0.0000000000000000 + -8.1000000000000014 0.0000000000000000 + -8.0399999999999991 0.0000000000000000 + -7.9800000000000040 0.0000000000000000 + -7.9200000000000017 0.0000000000000000 + -7.8599999999999994 0.0000000000000000 + -7.8000000000000043 0.0000000000000000 + -7.7400000000000020 0.0000000000000000 + -7.6799999999999997 0.0000000000000000 + -7.6200000000000045 0.0000000000000000 + -7.5600000000000023 0.0000000000000000 + -7.5000000000000000 0.0000000000000000 + -7.4400000000000048 0.0000000000000000 + -7.3800000000000026 0.0000000000000000 + -7.3200000000000003 0.0000000000000000 + -7.2599999999999980 0.0000000000000000 + -7.2000000000000028 0.0000000000000000 + -7.1400000000000006 0.0000000000000000 + -7.0799999999999983 0.0000000000000000 + -7.0200000000000031 0.0000000000000000 + -6.9600000000000009 0.0000000000000000 + -6.8999999999999986 0.0000000000000000 + -6.8400000000000034 0.0000000000000000 + -6.7800000000000011 0.0000000000000000 + -6.7199999999999989 0.0000000000000000 + -6.6600000000000037 0.0000000000000000 + -6.6000000000000014 0.0000000000000000 + -6.5399999999999991 0.0000000000000000 + -6.4800000000000040 0.0000000000000000 + -6.4200000000000017 0.0000000000000000 + -6.3599999999999994 0.0000000000000000 + -6.3000000000000043 0.0000000000000000 + -6.2400000000000020 0.0000000000000000 + -6.1799999999999997 0.0000000000000000 + -6.1200000000000045 0.0000000000000000 + -6.0600000000000023 0.0000000000000000 + -6.0000000000000000 0.0000000000000000 + -5.9400000000000048 0.0000000000000000 + -5.8800000000000026 0.0000000000000000 + -5.8200000000000003 0.0000000000000000 + -5.7600000000000051 0.0000000000000000 + -5.7000000000000028 0.0000000000000000 + -5.6400000000000006 0.0000000000000000 + -5.5799999999999983 0.0000000000000000 + -5.5200000000000031 0.0000000000000000 + -5.4600000000000009 0.0000000000000000 + -5.3999999999999986 0.0000000000000000 + -5.3400000000000034 0.0000000000000000 + -5.2800000000000011 0.0000000000000000 + -5.2199999999999989 0.0000000000000000 + -5.1600000000000037 0.0000000000000000 + -5.1000000000000014 0.0000000000000000 + -5.0399999999999991 0.0000000000000000 + -4.9800000000000040 0.0000000000000000 + -4.9200000000000017 0.0000000000000000 + -4.8599999999999994 0.0000000000000000 + -4.8000000000000043 0.0000000000000000 + -4.7400000000000020 0.0000000000000000 + -4.6799999999999997 0.0000000000000000 + -4.6200000000000045 0.0000000000000000 + -4.5600000000000023 0.0000000000000000 + -4.5000000000000000 0.0000000000000000 + -4.4400000000000048 0.0000000000000000 + -4.3800000000000026 0.0000000000000000 + -4.3200000000000003 0.0000000000000000 + -4.2600000000000051 0.0000000000000000 + -4.2000000000000028 0.0000000000000000 + -4.1400000000000006 0.0000000000000000 + -4.0799999999999983 0.0000000000000000 + -4.0200000000000031 0.0000000000000000 + -3.9600000000000009 0.0000000000000000 + -3.8999999999999986 0.0000000000000000 + -3.8400000000000034 0.0000000000000000 + -3.7800000000000011 0.0000000000000000 + -3.7199999999999989 0.0000000000000000 + -3.6600000000000037 0.0000000000000000 + -3.6000000000000014 0.0000000000000000 + -3.5399999999999991 0.0000000000000000 + -3.4800000000000040 0.0000000000000000 + -3.4200000000000017 0.0000000000000000 + -3.3599999999999994 0.0000000000000000 + -3.3000000000000043 0.0000000000000000 + -3.2400000000000020 0.0000000000000000 + -3.1799999999999997 0.0000000000000000 + -3.1200000000000045 0.0000000000000000 + -3.0600000000000023 0.0000000000000000 + -3.0000000000000000 0.0000000000000000 + -2.9400000000000048 0.0000000000000000 + -2.8800000000000026 0.0000000000000000 + -2.8200000000000003 0.0000000000000000 + -2.7600000000000051 0.0000000000000000 + -2.7000000000000028 0.0000000000000000 + -2.6400000000000006 0.0000000000000000 + -2.5799999999999983 0.0000000000000000 + -2.5200000000000031 0.0000000000000000 + -2.4600000000000009 0.0000000000000000 + -2.3999999999999986 0.0000000000000000 + -2.3400000000000034 0.0000000000000000 + -2.2800000000000011 0.0000000000000000 + -2.2199999999999989 0.0000000000000000 + -2.1600000000000037 0.0000000000000000 + -2.1000000000000014 0.0000000000000000 + -2.0399999999999991 0.0000000000000000 + -1.9800000000000040 0.0000000000000000 + -1.9200000000000017 0.0000000000000000 + -1.8599999999999994 0.0000000000000000 + -1.8000000000000043 0.0000000000000000 + -1.7400000000000020 0.0000000000000000 + -1.6799999999999997 0.0000000000000000 + -1.6200000000000045 0.0000000000000000 + -1.5600000000000023 0.0000000000000000 + -1.5000000000000000 0.0000000000000000 + -1.4400000000000048 0.0000000000000000 + -1.3800000000000026 0.0000000000000000 + -1.3200000000000003 0.0000000000000000 + -1.2600000000000051 0.0000000000000000 + -1.2000000000000028 0.0000000000000000 + -1.1400000000000006 0.0000000000000000 + -1.0799999999999983 0.0000000000000000 + -1.0200000000000031 0.0000000000000000 + -0.96000000000000085 0.0000000000000000 + -0.89999999999999858 0.0000000000000000 + -0.84000000000000341 0.0000000000000000 + -0.78000000000000114 0.0000000000000000 + -0.71999999999999886 0.0000000000000000 + -0.66000000000000369 0.0000000000000000 + -0.60000000000000142 0.0000000000000000 + -0.53999999999999915 0.0000000000000000 + -0.48000000000000398 0.0000000000000000 + -0.42000000000000171 0.0000000000000000 + -0.35999999999999943 0.0000000000000000 + -0.30000000000000426 0.0000000000000000 + -0.24000000000000199 0.0000000000000000 + -0.17999999999999972 0.0000000000000000 + -0.12000000000000455 0.0000000000000000 + -6.0000000000002274E-002 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 + 5.9999999999995168E-002 0.0000000000000000 + 0.11999999999999744 0.0000000000000000 + 0.17999999999999972 0.0000000000000000 + 0.23999999999999488 0.0000000000000000 + 0.29999999999999716 0.0000000000000000 + 0.35999999999999943 0.0000000000000000 + 0.42000000000000171 0.0000000000000000 + 0.47999999999999687 0.0000000000000000 + 0.53999999999999915 0.0000000000000000 + 0.60000000000000142 0.0000000000000000 + 0.65999999999999659 0.0000000000000000 + 0.71999999999999886 0.0000000000000000 + 0.78000000000000114 0.0000000000000000 + 0.83999999999999631 0.0000000000000000 + 0.89999999999999858 0.0000000000000000 + 0.96000000000000085 0.0000000000000000 + 1.0199999999999960 0.0000000000000000 + 1.0799999999999983 0.0000000000000000 + 1.1400000000000006 0.0000000000000000 + 1.1999999999999957 0.0000000000000000 + 1.2599999999999980 0.0000000000000000 + 1.3200000000000003 0.0000000000000000 + 1.3799999999999955 0.0000000000000000 + 1.4399999999999977 0.0000000000000000 + 1.5000000000000000 0.0000000000000000 + 1.5599999999999952 0.0000000000000000 + 1.6199999999999974 0.0000000000000000 + 1.6799999999999997 0.0000000000000000 + 1.7399999999999949 0.0000000000000000 + 1.7999999999999972 0.0000000000000000 + 1.8599999999999994 0.0000000000000000 + 1.9200000000000017 0.0000000000000000 + 1.9799999999999969 0.0000000000000000 + 2.0399999999999991 0.0000000000000000 + 2.1000000000000014 0.0000000000000000 + 2.1599999999999966 0.0000000000000000 + 2.2199999999999989 0.0000000000000000 + 2.2800000000000011 0.0000000000000000 + 2.3399999999999963 0.0000000000000000 + 2.3999999999999986 0.0000000000000000 + 2.4600000000000009 0.0000000000000000 + 2.5199999999999960 0.0000000000000000 + 2.5799999999999983 0.0000000000000000 + 2.6400000000000006 0.0000000000000000 + 2.6999999999999957 0.0000000000000000 + 2.7599999999999980 0.0000000000000000 + 2.8200000000000003 0.0000000000000000 + 2.8799999999999955 0.0000000000000000 + 2.9399999999999977 0.0000000000000000 + 3.0000000000000000 0.0000000000000000 + 3.0599999999999952 0.0000000000000000 + 3.1199999999999974 0.0000000000000000 + 3.1799999999999997 0.0000000000000000 + 3.2399999999999949 0.0000000000000000 + 3.2999999999999972 0.0000000000000000 + 3.3599999999999994 0.0000000000000000 + 3.4199999999999946 0.0000000000000000 + 3.4799999999999969 0.0000000000000000 + 3.5399999999999991 0.0000000000000000 + 3.6000000000000014 0.0000000000000000 + 3.6599999999999966 0.0000000000000000 + 3.7199999999999989 0.0000000000000000 + 3.7800000000000011 0.0000000000000000 + 3.8399999999999963 0.0000000000000000 + 3.8999999999999986 0.0000000000000000 + 3.9600000000000009 0.0000000000000000 + 4.0199999999999960 0.0000000000000000 + 4.0799999999999983 0.0000000000000000 + 4.1400000000000006 0.0000000000000000 + 4.1999999999999957 0.0000000000000000 + 4.2599999999999980 0.0000000000000000 + 4.3200000000000003 0.0000000000000000 + 4.3799999999999955 0.0000000000000000 + 4.4399999999999977 0.0000000000000000 + 4.5000000000000000 0.0000000000000000 + 4.5599999999999952 0.0000000000000000 + 4.6199999999999974 0.0000000000000000 + 4.6799999999999997 0.0000000000000000 + 4.7399999999999949 0.0000000000000000 + 4.7999999999999972 0.0000000000000000 + 4.8599999999999994 0.0000000000000000 + 4.9199999999999946 0.0000000000000000 + 4.9799999999999969 0.0000000000000000 + 5.0399999999999991 0.0000000000000000 + 5.1000000000000014 0.0000000000000000 + 5.1599999999999966 0.0000000000000000 + 5.2199999999999989 0.0000000000000000 + 5.2800000000000011 0.0000000000000000 + 5.3399999999999963 0.0000000000000000 + 5.3999999999999986 0.0000000000000000 + 5.4600000000000009 0.0000000000000000 + 5.5199999999999960 0.0000000000000000 + 5.5799999999999983 0.0000000000000000 + 5.6400000000000006 0.0000000000000000 + 5.6999999999999957 0.0000000000000000 + 5.7599999999999980 0.0000000000000000 + 5.8200000000000003 0.0000000000000000 + 5.8799999999999955 0.0000000000000000 + 5.9399999999999977 0.0000000000000000 + 6.0000000000000000 0.0000000000000000 + 6.0599999999999952 0.0000000000000000 + 6.1199999999999974 0.0000000000000000 + 6.1799999999999997 0.0000000000000000 + 6.2399999999999949 0.0000000000000000 + 6.2999999999999972 0.0000000000000000 + 6.3599999999999994 0.0000000000000000 + 6.4199999999999946 0.0000000000000000 + 6.4799999999999969 0.0000000000000000 + 6.5399999999999991 0.0000000000000000 + 6.6000000000000014 0.0000000000000000 + 6.6599999999999966 0.0000000000000000 + 6.7199999999999989 0.0000000000000000 + 6.7800000000000011 0.0000000000000000 + 6.8399999999999963 0.0000000000000000 + 6.8999999999999986 0.0000000000000000 + 6.9600000000000009 0.0000000000000000 + 7.0199999999999960 0.0000000000000000 + 7.0799999999999983 0.0000000000000000 + 7.1400000000000006 0.0000000000000000 + 7.1999999999999957 0.0000000000000000 + 7.2599999999999980 0.0000000000000000 + 7.3200000000000003 0.0000000000000000 + 7.3799999999999955 0.0000000000000000 + 7.4399999999999977 0.0000000000000000 + 7.5000000000000000 0.0000000000000000 + 7.5599999999999952 0.0000000000000000 + 7.6199999999999974 0.0000000000000000 + 7.6799999999999997 0.0000000000000000 + 7.7399999999999949 0.0000000000000000 + 7.7999999999999972 0.0000000000000000 + 7.8599999999999994 0.0000000000000000 + 7.9199999999999946 0.0000000000000000 + 7.9799999999999969 0.0000000000000000 + 8.0399999999999991 0.0000000000000000 + 8.1000000000000014 0.0000000000000000 + 8.1599999999999966 0.0000000000000000 + 8.2199999999999989 0.0000000000000000 + 8.2800000000000011 0.0000000000000000 + 8.3399999999999963 0.0000000000000000 + 8.3999999999999986 0.0000000000000000 + 8.4600000000000009 0.0000000000000000 + 8.5199999999999960 0.0000000000000000 + 8.5799999999999983 0.0000000000000000 + 8.6400000000000006 0.0000000000000000 + 8.6999999999999957 0.0000000000000000 + 8.7599999999999980 0.0000000000000000 + 8.8200000000000003 0.0000000000000000 + 8.8799999999999955 0.0000000000000000 + 8.9399999999999977 0.0000000000000000 + 9.0000000000000000 0.0000000000000000 + 9.0599999999999952 0.0000000000000000 + 9.1199999999999974 0.0000000000000000 + 9.1799999999999997 0.0000000000000000 + 9.2399999999999949 0.0000000000000000 + 9.2999999999999972 0.0000000000000000 + 9.3599999999999994 0.0000000000000000 + 9.4199999999999946 0.0000000000000000 + 9.4799999999999969 0.0000000000000000 + 9.5399999999999991 0.0000000000000000 + 9.5999999999999943 1.9047947325680696E-041 + 9.6599999999999966 4.7801631255729527E-041 + 9.7199999999999989 8.0963644655591286E-041 + 9.7800000000000011 1.1853399198965025E-040 + 9.8399999999999963 1.5610433932370922E-040 + 9.8999999999999986 1.9367468665776818E-040 + 9.9600000000000009 2.3124503399182715E-040 + 10.019999999999996 2.6881538132588611E-040 + 10.079999999999998 2.9476597211933513E-040 + 10.140000000000001 3.0573024990259194E-040 + 10.199999999999996 2.9721250827673861E-040 + 10.259999999999998 2.7379197334178120E-040 + 10.320000000000000 2.3473770038851744E-040 + 10.379999999999995 1.8411636848667089E-040 + 10.439999999999998 1.3349503658482434E-040 + 10.500000000000000 8.2873704682977794E-041 + 10.559999999999995 3.4234278144716767E-041 + 10.619999999999997 0.0000000000000000 + 10.680000000000000 -1.4433262853540114E-041 + 10.739999999999995 -2.7817408794710891E-041 + 10.799999999999997 -3.7837469302997748E-041 + 10.859999999999999 -3.7837469302997748E-041 + 10.919999999999995 -2.6618701526119067E-041 + 10.979999999999997 -2.8631069579593149E-041 + 11.039999999999999 -8.6929405862787565E-041 + 11.099999999999994 -2.1419827975108893E-040 + 11.159999999999997 -4.2290054397660115E-040 + 11.219999999999999 -8.3162391335705167E-040 + 11.280000000000001 -1.4202526265544075E-039 + 11.339999999999996 -2.0646413528711386E-039 + 11.399999999999999 -2.7534534885378964E-039 + 11.460000000000001 -3.4930508582150576E-039 + 11.519999999999996 -3.9578411204565838E-039 + 11.579999999999998 -4.0737023728246860E-039 + 11.640000000000001 -3.8269011238081391E-039 + 11.699999999999996 -3.2050909686852775E-039 + 11.759999999999998 -2.2194830833239895E-039 + 11.820000000000000 -8.5131590913418452E-040 + 11.879999999999995 1.2543664209253595E-039 + 11.939999999999998 4.2058881145649274E-039 + 12.000000000000000 1.1261526951862334E-038 + 12.059999999999995 2.3498081514019410E-038 + 12.119999999999997 4.1738934782271286E-038 + 12.180000000000000 6.7232431823714908E-038 + 12.239999999999995 1.0033883387272907E-037 + 12.299999999999997 1.3684010229251629E-037 + 12.359999999999999 1.8218202862480845E-037 + 12.419999999999995 2.3407603742086105E-037 + 12.479999999999997 2.8787517824774699E-037 + 12.539999999999999 3.3900025638394438E-037 + 12.599999999999994 3.5308046849616886E-037 + 12.659999999999997 3.2127956995349933E-037 + 12.719999999999999 2.3322841682554698E-037 + 12.780000000000001 9.3667553426624908E-038 + 12.839999999999996 -6.7424939405558236E-038 + 12.899999999999999 -2.4718115213285818E-037 + 12.960000000000001 -4.4057178674851252E-037 + 13.019999999999996 -6.4148324803475516E-037 + 13.079999999999998 -8.5774036239289216E-037 + 13.140000000000001 -1.0696165476951718E-036 + 13.199999999999996 -1.2392906943405259E-036 + 13.259999999999998 -1.3382211238633212E-036 + 13.320000000000000 -1.3509653714363017E-036 + 13.379999999999995 -1.2685388575382856E-036 + 13.439999999999998 -1.0847249171140527E-036 + 13.500000000000000 -7.6549818506645164E-037 + 13.559999999999995 -3.4708634513515717E-037 + 13.619999999999997 1.4920150684739916E-037 + 13.680000000000000 6.8962975001316116E-037 + 13.739999999999995 1.2179388241420341E-036 + 13.799999999999997 1.6816399691739355E-036 + 13.859999999999999 2.0411766091164609E-036 + 13.919999999999995 2.2468786344798396E-036 + 13.979999999999997 2.1084043573798231E-036 + 14.039999999999999 1.5650041067627021E-036 + 14.099999999999994 5.0977918734980377E-037 + 14.159999999999997 -9.6082572770173781E-037 + 14.219999999999999 -2.6796016471737172E-036 + 14.280000000000001 -4.5829777141779571E-036 + 14.339999999999996 -6.4793214171954576E-036 + 14.399999999999999 -8.1704763043717118E-036 + 14.460000000000001 -9.2803575783914874E-036 + 14.519999999999996 -9.4588587004788916E-036 + 14.579999999999998 -8.4693078304174038E-036 + 14.640000000000001 -6.1015420718455147E-036 + 14.699999999999996 -2.2329173076707272E-036 + 14.759999999999998 3.1818202070900904E-036 + 14.820000000000000 9.9870332402584016E-036 + 14.879999999999995 1.7877099662032185E-035 + 14.939999999999998 2.6515654192687352E-035 + 15.000000000000000 3.5332124646144339E-035 + 15.059999999999995 4.3447807073354876E-035 + 15.119999999999997 4.9677550502381451E-035 + 15.180000000000000 5.2883945042560564E-035 + 15.239999999999995 5.1813887752624663E-035 + 15.299999999999997 4.5385940937409095E-035 + 15.359999999999999 3.2600744380125654E-035 + 15.419999999999995 1.2761646832741941E-035 + 15.479999999999997 -1.4462843006303941E-035 + 15.539999999999999 -4.8843914717621941E-035 + 15.599999999999994 -8.9521810236514586E-035 + 15.659999999999997 -1.3514633743642941E-034 + 15.719999999999999 -1.8310808842183329E-034 + 15.780000000000001 -2.3019807803487546E-034 + 15.839999999999996 -2.7248575080922552E-034 + 15.899999999999999 -3.0533624999368759E-034 + 15.960000000000001 -3.2363768799795944E-034 + 16.019999999999996 -3.2210572296660599E-034 + 16.079999999999998 -2.9563705450715099E-034 + 16.140000000000001 -2.3974953528113205E-034 + 16.200000000000003 -1.5109769600136102E-034 + 16.259999999999991 -2.8029466862497559E-035 + 16.319999999999993 1.2884154947324470E-034 + 16.379999999999995 3.1611740069277238E-034 + 16.439999999999998 5.2717290622531514E-034 + 16.500000000000000 7.5181927082011245E-034 + 16.560000000000002 9.7617007282240353E-034 + 16.620000000000005 1.1828430242939699E-033 + 16.679999999999993 1.3513463923587535E-033 + 16.739999999999995 1.4589029093589029E-033 + 16.799999999999997 1.4816146937869072E-033 + 16.859999999999999 1.3960219409334476E-033 + 16.920000000000002 1.1810067538593749E-033 + 16.980000000000004 8.2000089314531456E-034 + 17.039999999999992 3.0339086935583001E-034 + 17.099999999999994 -3.6900764879194490E-034 + 17.159999999999997 -1.1855835135420943E-033 + 17.219999999999999 -2.1208666727811161E-033 + 17.280000000000001 -3.1339946990805485E-033 + 17.340000000000003 -4.1680109269807216E-033 + 17.399999999999991 -5.1501487974423355E-033 + 17.459999999999994 -5.9934053728480652E-033 + 17.519999999999996 -6.5995572288127757E-033 + 17.579999999999998 -6.8637485444281152E-033 + 17.640000000000001 -6.6807003133478398E-033 + 17.700000000000003 -5.9524494385104791E-033 + 17.759999999999991 -4.5974202108664393E-033 + 17.819999999999993 -2.5604886074894700E-033 + 17.879999999999995 1.7650654737988383E-034 + 17.939999999999998 3.5844102959454736E-033 + 18.000000000000000 7.5774507178539270E-033 + 18.060000000000002 1.2005833923482731E-032 + 18.120000000000005 1.6651279804269980E-032 + 18.179999999999993 2.1226507436333437E-032 + 18.239999999999995 2.5379635807353056E-032 + 18.299999999999997 2.8704348464444050E-032 + 18.359999999999999 3.0756427787653293E-032 + 18.420000000000002 3.1076967027596538E-032 + 18.480000000000004 2.9222127778104208E-032 + 18.539999999999992 2.4798825458611520E-032 + 18.599999999999994 1.7505119726619115E-032 + 18.659999999999997 7.1736066434556150E-033 + 18.719999999999999 -6.1847966311963705E-033 + 18.780000000000001 -2.2339535370390512E-032 + 18.840000000000003 -4.0805222746099841E-032 + 18.899999999999991 -6.0816426749505241E-032 + 18.959999999999994 -8.1316580949938471E-032 + 19.019999999999996 -1.0096499029999816E-031 + 19.079999999999998 -1.1816562525659511E-031 + 19.140000000000001 -1.3112061123119635E-031 + 19.200000000000003 -1.3791028029385397E-031 + 19.259999999999991 -1.3660018782972568E-031 + 19.319999999999993 -1.2537359688228065E-031 + 19.379999999999995 -1.0268605403408310E-031 + 19.439999999999998 -6.7436039971384769E-032 + 19.500000000000000 -1.9143511296952525E-032 + 19.560000000000002 4.1874409146835513E-032 + 19.620000000000005 1.1434338298263128E-031 + 19.679999999999993 1.9590210897887891E-031 + 19.739999999999995 2.8301864284083766E-031 + 19.799999999999997 3.7096864088635913E-031 + 19.859999999999999 4.5389091128637921E-031 + 19.920000000000002 5.2493351614424050E-031 + 19.980000000000004 5.7650021060537760E-031 + 20.039999999999992 6.0060262823352897E-031 + 20.099999999999994 5.8931724513249006E-031 + 20.159999999999997 5.3533878927266820E-031 + 20.219999999999999 4.3261389062440262E-031 + 20.280000000000001 2.7702898881621568E-031 + 20.340000000000003 6.7118051483012775E-032 + 20.399999999999991 -1.9525331507625318E-031 + 20.459999999999994 -5.0427874534994532E-031 + 20.519999999999996 -8.4973383161316018E-031 + 20.579999999999998 -1.2166906713088508E-030 + 20.640000000000001 -1.5854855613511119E-030 + 20.700000000000003 -1.9319936534714911E-030 + 20.759999999999991 -2.2282603467039140E-030 + 20.819999999999993 -2.4435213145795716E-030 + 20.879999999999995 -2.5456265776554188E-030 + 20.939999999999998 -2.5028593526018105E-030 + 21.000000000000000 -2.2861143824456957E-030 + 21.060000000000002 -1.8713665280742082E-030 + 21.120000000000005 -1.2423287350541429E-030 + 21.179999999999993 -3.9316700856925382E-031 + 21.239999999999995 6.6889496781185090E-031 + 21.299999999999997 1.9212718288417167E-030 + 21.359999999999999 3.3242259033241070E-030 + 21.420000000000002 4.8198113495447814E-030 + 21.480000000000004 6.3317702076435127E-030 + 21.539999999999992 7.7665859871841235E-030 + 21.599999999999994 9.0158588623233012E-030 + 21.659999999999997 9.9601235178910728E-030 + 21.719999999999999 1.0474155846093429E-029 + 21.780000000000001 1.0433734994786187E-029 + 21.840000000000003 9.7237248361480513E-030 + 21.899999999999991 8.2472220914144859E-030 + 21.959999999999994 5.9354192025236676E-030 + 22.019999999999996 2.7576929706171870E-030 + 22.079999999999998 -1.2686614195938636E-030 + 22.140000000000001 -6.0697379577300662E-030 + 22.200000000000003 -1.1508111241543642E-029 + 22.259999999999991 -1.7378502547259363E-029 + 22.319999999999993 -2.3406784327185864E-029 + 22.379999999999995 -2.9253060319049395E-029 + 22.439999999999998 -3.4519397749558953E-029 + 22.500000000000000 -3.8762674774673986E-029 + 22.560000000000002 -4.1512727800385717E-029 + 22.619999999999990 -4.2295720046103150E-029 + 22.679999999999993 -4.0662315449774460E-029 + 22.739999999999995 -3.6219853424837121E-029 + 22.799999999999997 -2.8667361528988907E-029 + 22.859999999999999 -1.7831811807704848E-029 + 22.920000000000002 -3.7036593213837288E-030 + 22.980000000000004 1.3530592813434898E-029 + 23.039999999999992 3.3461330157184425E-029 + 23.099999999999994 5.5436938470433625E-029 + 23.159999999999997 7.8555730969454901E-029 + 23.219999999999999 1.0167122657989419E-028 + 23.280000000000001 1.2341297662543309E-028 + 23.340000000000003 1.4222452459103281E-028 + 23.399999999999991 1.5641958823399820E-028 + 23.459999999999994 1.6425638303742323E-028 + 23.519999999999996 1.6402916548512729E-028 + 23.579999999999998 1.5417480463521275E-028 + 23.640000000000001 1.3339085213100731E-028 + 23.700000000000003 1.0076043318096295E-028 + 23.759999999999991 5.5877874380749736E-029 + 23.819999999999993 -1.0319943445035644E-030 + 23.879999999999995 -6.9008994855011268E-029 + 23.939999999999998 -1.4627572772555476E-028 + 24.000000000000000 -2.3018765182289004E-028 + 24.060000000000002 -3.1722360383828219E-028 + 24.119999999999990 -4.0302457948861184E-028 + 24.179999999999993 -4.8248714297838502E-028 + 24.239999999999995 -5.4991591256905898E-028 + 24.299999999999997 -5.9923717648848682E-028 + 24.359999999999999 -6.2427173780994854E-028 + 24.420000000000002 -6.1906296807145650E-028 + 24.480000000000004 -5.7825070152818293E-028 + 24.539999999999992 -4.9747817651942873E-028 + 24.599999999999994 -3.7381543537361360E-028 + 24.659999999999997 -2.0617803353714405E-028 + 24.719999999999999 4.2826214117119659E-030 + 24.780000000000001 2.5384417257494255E-028 + 24.840000000000003 5.3596120801207580E-028 + 24.899999999999991 8.4112435718568260E-028 + 24.959999999999994 1.1568574501700275E-027 + 25.019999999999996 1.4678764495429790E-027 + 25.079999999999998 1.7564290198046978E-027 + 25.140000000000001 2.0028268704141827E-027 + 25.200000000000003 2.1861743164685454E-027 + 25.259999999999991 2.2852880086530664E-027 + 25.319999999999993 2.2797878251493086E-027 + 25.379999999999995 2.1513310636009485E-027 + 25.439999999999998 1.8849457876913110E-027 + 25.500000000000000 1.4704100296174735E-027 + 25.560000000000002 9.0360891673401721E-028 + 25.619999999999990 1.8779390737151450E-028 + 25.679999999999993 -6.6533803135915513E-028 + 25.739999999999995 -1.6348346223936877E-027 + 25.799999999999997 -2.6900323522415439E-027 + 25.859999999999999 -3.7905385732414805E-027 + 25.920000000000002 -4.8867223391048420E-027 + 25.980000000000004 -5.9207745504302330E-027 + 26.039999999999992 -6.8283671528065983E-027 + 26.099999999999994 -7.5409264036835956E-027 + 26.159999999999997 -7.9884991121098086E-027 + 26.219999999999999 -8.1031554981521918E-027 + 26.280000000000001 -7.8228344673959858E-027 + 26.340000000000003 -7.0955076530286361E-027 + 26.399999999999991 -5.8834890736503614E-027 + 26.459999999999994 -4.1676935084671818E-027 + 26.519999999999996 -1.9516125154979584E-027 + 26.579999999999998 7.3524183094363498E-028 + 26.640000000000001 3.8346854394072351E-027 + 26.700000000000003 7.2582660285761891E-027 + 26.759999999999991 1.0886968400669831E-026 + 26.819999999999993 1.4572434143106258E-026 + 26.879999999999995 1.8139867693644256E-026 + 26.939999999999998 2.1392742149352626E-026 + 27.000000000000000 2.4119332179873121E-026 + 27.060000000000002 2.6101016386742421E-026 + 27.119999999999990 2.7122193987440621E-026 + 27.179999999999993 2.6981556145718426E-026 + 27.239999999999995 2.5504323048697921E-026 + 27.299999999999997 2.2554980711987214E-026 + 27.359999999999999 1.8049935818724346E-026 + 27.420000000000002 1.1969426370706611E-026 + 27.480000000000004 4.3679749792883187E-027 + 27.539999999999992 -4.6173576815101443E-027 + 27.599999999999994 -1.4761665839171041E-026 + 27.659999999999997 -2.5750531240297708E-026 + 27.719999999999999 -3.7182601717576497E-026 + 27.780000000000001 -4.8576881254813855E-026 + 27.840000000000003 -5.9385051020556586E-026 + 27.899999999999991 -6.9008868538380512E-026 + 27.959999999999994 -7.6822503367926043E-026 + 28.019999999999996 -8.2199328759816829E-026 + 28.079999999999998 -8.4542419525478299E-026 + 28.140000000000001 -8.3317744057421456E-026 + 28.200000000000003 -7.8088647922499624E-026 + 28.259999999999991 -6.8550121981961355E-026 + 28.319999999999993 -5.4560987441101595E-026 + 28.379999999999995 -3.6172181394290912E-026 + 28.439999999999998 -1.3649051818791263E-026 + 28.500000000000000 1.2514159242571375E-026 + 28.560000000000002 4.1589474324558197E-026 + 28.619999999999990 7.2621398891755984E-026 + 28.679999999999993 1.0444537508793559E-025 + 28.739999999999995 1.3571892910263926E-025 + 28.799999999999997 1.6496556023386762E-025 + 28.859999999999999 1.9063062558796516E-025 + 28.920000000000002 2.1114775730223871E-025 + 28.980000000000004 2.2501353429858801E-025 + 29.039999999999992 2.3086757617182208E-025 + 29.099999999999994 2.2757416791857678E-025 + 29.159999999999997 2.1430164262879364E-025 + 29.219999999999999 1.9059451936943982E-025 + 29.280000000000001 1.5643395208570312E-025 + 29.340000000000003 1.1228179356351562E-025 + 29.399999999999991 5.9103821932387370E-026 + 29.459999999999994 -1.6313113527347193E-027 + 29.519999999999996 -6.7980236313981550E-026 + 29.579999999999998 -1.3758150544082030E-025 + 29.640000000000001 -2.0774061671062702E-025 + 29.700000000000003 -2.7554173358873723E-025 + 29.759999999999991 -3.3798242219285111E-025 + 29.819999999999993 -3.9212609489012928E-025 + 29.879999999999995 -4.3526481128036616E-025 + 29.939999999999998 -4.6508354792114245E-025 + 30.000000000000000 -4.7981635944305902E-025 + 30.060000000000002 -4.7838281493726648E-025 + 30.119999999999990 -4.6049440987119288E-025 + 30.179999999999993 -4.2671992866117230E-025 + 30.239999999999995 -3.7850024785841762E-025 + 30.299999999999997 -3.1810533731940445E-025 + 30.359999999999999 -2.4852871017129053E-025 + 30.420000000000002 -1.7331786065782436E-025 + 30.480000000000004 -9.6343844444986568E-026 + 30.539999999999992 -2.1517453586609783E-026 + 30.599999999999994 4.7536112932751519E-026 + 30.659999999999997 1.0782658928493707E-025 + 30.719999999999999 1.5735073147817307E-025 + 30.780000000000001 1.9542178983111947E-025 + 30.840000000000003 2.2294827105626404E-025 + 30.899999999999991 2.4263257270913032E-025 + 30.959999999999994 2.5905983514251626E-025 + 31.019999999999996 2.7865072921935206E-025 + 31.079999999999998 3.0945488707316758E-025 + 31.140000000000001 3.6076885569055577E-025 + 31.200000000000003 4.4257170912125153E-025 + 31.259999999999991 5.6478128963990654E-025 + 31.319999999999993 7.3634751674216568E-025 + 31.379999999999995 9.6421173614660934E-025 + 31.439999999999998 1.2521767334091604E-024 + 31.500000000000000 1.5997454944170740E-024 + 31.560000000000002 2.0009993157601179E-024 + 31.619999999999990 2.4435989218522424E-024 + 31.679999999999993 2.9079969696082352E-024 + 31.739999999999995 3.3669590550896660E-024 + 31.799999999999997 3.7854840525496541E-024 + 31.859999999999999 4.1212124435531592E-024 + 31.920000000000002 4.3253949777840307E-024 + 31.980000000000004 4.3444788412766027E-024 + 32.039999999999992 4.1223356615981844E-024 + 32.099999999999994 3.6031312631180676E-024 + 32.159999999999997 2.7347898947058303E-024 + 32.219999999999999 1.4729747336187736E-024 + 32.280000000000001 -2.1454586937911767E-025 + 32.340000000000003 -2.3433240597162725E-024 + 32.399999999999991 -4.9076578052824258E-024 + 32.459999999999994 -7.8762811054766566E-024 + 32.519999999999996 -1.1188594067038782E-023 + 32.579999999999998 -1.4751749619058469E-023 + 32.640000000000001 -1.8438900293575317E-023 + 32.700000000000003 -2.2088922708285793E-023 + 32.759999999999991 -2.5507893435032930E-023 + 32.819999999999993 -2.8472552276460437E-023 + 32.879999999999995 -3.0735935314987045E-023 + 32.939999999999998 -3.2035259928166683E-023 + 33.000000000000000 -3.2102064130116788E-023 + 33.060000000000002 -3.0674462113280910E-023 + 33.119999999999990 -2.7511283257079801E-023 + 33.179999999999993 -2.2407700616489926E-023 + 33.239999999999995 -1.5211839155018251E-023 + 33.299999999999997 -5.8417080276771369E-024 + 33.359999999999999 5.6982884335973870E-024 + 33.420000000000002 1.9302130717666849E-023 + 33.480000000000004 3.4749194126796587E-023 + 33.539999999999992 5.1694414280006792E-023 + 33.599999999999994 6.9662589143921393E-023 + 33.659999999999997 8.8047715218905609E-023 + 33.719999999999999 1.0611817209583447E-022 + 33.780000000000001 1.2302834009223177E-022 + 33.840000000000003 1.3783718542846740E-022 + 33.899999999999991 1.4953393243313086E-022 + 33.959999999999994 1.5707075498687940E-022 + 34.019999999999996 1.5940205477723268E-022 + 34.079999999999998 1.5552955003304736E-022 + 34.140000000000001 1.4455206141296988E-022 + 34.200000000000003 1.2571848428667422E-022 + 34.259999999999991 9.8482171232740214E-023 + 34.319999999999993 6.2554609521572805E-023 + 34.379999999999995 1.7956066637344066E-023 + 34.439999999999998 -3.4939326619243885E-023 + 34.500000000000000 -9.5366502007767726E-023 + 34.560000000000002 -1.6214306317460153E-022 + 34.619999999999990 -2.3365596127712258E-022 + 34.679999999999993 -3.0786314073646304E-022 + 34.739999999999995 -3.8231239378714607E-022 + 34.799999999999997 -4.5417831152373561E-022 + 34.859999999999999 -5.2031833930829564E-022 + 34.920000000000002 -5.7734781270614840E-022 + 34.980000000000004 -6.2173352075176858E-022 + 35.039999999999992 -6.4990437366754019E-022 + 35.099999999999994 -6.5837683175087211E-022 + 35.159999999999997 -6.4389240612700335E-022 + 35.219999999999999 -6.0356335271136944E-022 + 35.280000000000001 -5.3502259061609068E-022 + 35.340000000000003 -4.3657271930104739E-022 + 35.399999999999991 -3.0732928920175686E-022 + 35.459999999999994 -1.4735263299753280E-022 + 35.519999999999996 4.2236839737555732E-023 + 35.579999999999998 2.5916576797908660E-022 + 35.640000000000001 4.9994176524717955E-022 + 35.700000000000003 7.5981895669198621E-022 + 35.759999999999991 1.0327994763722147E-021 + 35.819999999999993 1.3116733515769174E-021 + 35.879999999999995 1.5880990980595156E-021 + 35.939999999999998 1.8527271517965641E-021 + 36.000000000000000 2.0953646562063087E-021 + 36.060000000000002 2.3051823655658752E-021 + 36.119999999999990 2.4709605503543385E-021 + 36.179999999999993 2.5813727940059166E-021 + 36.239999999999995 2.6253005583782671E-021 + 36.299999999999997 2.5921768548327913E-021 + 36.359999999999999 2.4723533939854303E-021 + 36.420000000000002 2.2574817876864162E-021 + 36.479999999999990 1.9409053649751945E-021 + 36.539999999999992 1.5180525185128370E-021 + 36.599999999999994 9.8682358576244947E-022 + 36.659999999999997 3.4796233762061853E-022 + 36.719999999999999 -3.9459755739370533E-022 + 36.780000000000001 -1.2334199935176501E-021 + 36.840000000000003 -2.1573014219311491E-021 + 36.899999999999991 -3.1510622661921894E-021 + 36.959999999999994 -4.1954095839661919E-021 + 37.019999999999996 -5.2668862215262374E-021 + 37.079999999999998 -6.3379146054725188E-021 + 37.140000000000001 -7.3769596332703655E-021 + 37.200000000000003 -8.3488203503576318E-021 + 37.259999999999991 -9.2150669073123544E-021 + 37.319999999999993 -9.9346357706018814E-021 + 37.379999999999995 -1.0464604815028391E-020 + 37.439999999999998 -1.0761147067163399E-020 + 37.500000000000000 -1.0780679443608459E-020 + 37.560000000000002 -1.0481203874071700E-020 + 37.619999999999990 -9.8238365487484130E-021 + 37.679999999999993 -8.7745148719351852E-021 + 37.739999999999995 -7.3058626173436984E-021 + 37.799999999999997 -5.3991739312847693E-021 + 37.859999999999999 -3.0464796910754530E-021 + 37.920000000000002 -2.5264130601425709E-022 + 37.979999999999990 2.9626029616091662E-021 + 38.039999999999992 6.5627091469354484E-021 + 38.099999999999994 1.0492614055158792E-020 + 38.159999999999997 1.4677330686494699E-020 + 38.219999999999999 1.9020971775999606E-020 + 38.280000000000001 2.3406284820678803E-020 + 38.340000000000003 2.7694838949736109E-020 + 38.399999999999991 3.1727947769066593E-020 + 38.459999999999994 3.5328414150793018E-020 + 38.519999999999996 3.8303208769649161E-020 + 38.579999999999998 4.0447076194060616E-020 + 38.640000000000001 4.1547166671144540E-020 + 38.700000000000003 4.1388606229093803E-020 + 38.759999999999991 3.9761027984669036E-020 + 38.819999999999993 3.6465921227096508E-020 + 38.879999999999995 3.1324686498160253E-020 + 38.939999999999998 2.4187206178877364E-020 + 39.000000000000000 1.4940686261258467E-020 + 39.060000000000002 3.5185068900893252E-021 + 39.119999999999990 -1.0091231696306335E-020 + 39.179999999999993 -2.5837872706591537E-020 + 39.239999999999995 -4.3601357517945729E-020 + 39.299999999999997 -6.3186891400679455E-020 + 39.359999999999999 -8.4321344984221310E-020 + 39.420000000000002 -1.0665204251367296E-019 + 39.479999999999990 -1.2974795897536290E-019 + 39.539999999999992 -1.5310400055854583E-019 + 39.599999999999994 -1.7614833564926198E-019 + 39.659999999999997 -1.9825317981768194E-019 + 39.719999999999999 -2.1874899721336065E-019 + 39.780000000000001 -2.3694226383136099E-019 + 39.840000000000003 -2.5213664814451820E-019 + 39.899999999999991 -2.6365724987975193E-019 + 39.959999999999994 -2.7087769692687530E-019 + 40.019999999999996 -2.7324968411043146E-019 + 40.079999999999998 -2.7033414093094787E-019 + 40.140000000000001 -2.6183328403555144E-019 + 40.200000000000003 -2.4762281212015512E-019 + 40.259999999999991 -2.2778317023980879E-019 + 40.319999999999993 -2.0262860320510701E-019 + 40.379999999999995 -1.7273301238944438E-019 + 40.439999999999998 -1.3895103815079156E-019 + 40.500000000000000 -1.0243323673410908E-019 + 40.560000000000002 -6.4633714909856959E-020 + 40.619999999999990 -2.7309085877267375E-020 + 40.679999999999993 7.4929356206042395E-021 + 40.739999999999995 3.7456274522521370E-020 + 40.799999999999997 6.0031935996297156E-020 + 40.859999999999999 7.2487054327243766E-020 + 40.920000000000002 7.1968050733829739E-020 + 40.979999999999990 5.5578520812483876E-020 + 41.039999999999992 2.0471968771345237E-020 + 41.099999999999994 -3.6041307935160145E-020 + 41.159999999999997 -1.1637369839246391E-019 + 41.219999999999999 -2.2252797453248938E-019 + 41.280000000000001 -3.5595478860820087E-019 + 41.340000000000003 -5.1740304203856377E-019 + 41.399999999999991 -7.0676553038985137E-019 + 41.459999999999994 -9.2292493421621989E-019 + 41.519999999999996 -1.1636030581897613E-018 + 41.579999999999998 -1.4252186607913370E-018 + 41.640000000000001 -1.7027596930119819E-018 + 41.700000000000003 -1.9896742476661501E-018 + 41.759999999999991 -2.2777862168296621E-018 + 41.819999999999993 -2.5572404075399892E-018 + 41.879999999999995 -2.8164805660072374E-018 + 41.939999999999998 -3.0422670454978246E-018 + 42.000000000000000 -3.2197333685816347E-018 + 42.060000000000002 -3.3324850629131557E-018 + 42.119999999999990 -3.3627395057721259E-018 + 42.179999999999993 -3.2915050913879728E-018 + 42.239999999999995 -3.0987916446553358E-018 + 42.299999999999997 -2.7638520284513320E-018 + 42.359999999999999 -2.2654342394673373E-018 + 42.420000000000002 -1.5820403495583257E-018 + 42.479999999999990 -6.9217282316594356E-019 + 42.539999999999992 4.2545145912739410E-019 + 42.599999999999994 1.7917350279489961E-018 + 42.659999999999997 3.4271076367942424E-018 + 42.719999999999999 5.3515338495018992E-018 + 42.780000000000001 7.5846448811398207E-018 + 42.840000000000003 1.0146017425724413E-017 + 42.899999999999991 1.3055623078255772E-017 + 42.959999999999994 1.6334498904404330E-017 + 43.019999999999996 2.0005610717730071E-017 + 43.079999999999998 2.4094985874316749E-017 + 43.140000000000001 2.8633114266559275E-017 + 43.200000000000003 3.3656605919999012E-017 + 43.259999999999991 3.9210171126981468E-017 + 43.319999999999993 4.5348903072723525E-017 + 43.379999999999995 5.2140824789403315E-017 + 43.439999999999998 5.9669834348426231E-017 + 43.500000000000000 6.8038860956767854E-017 + 43.560000000000002 7.7373404190996509E-017 + 43.619999999999990 8.7825330393229971E-017 + 43.679999999999993 9.9576980083275889E-017 + 43.739999999999995 1.1284553387871677E-016 + 43.799999999999997 1.2788765550198049E-016 + 43.859999999999999 1.4500436872668146E-016 + 43.920000000000002 1.6454616759451131E-016 + 43.979999999999990 1.8691841611389226E-016 + 44.039999999999992 2.1258680769778183E-016 + 44.099999999999994 2.4208300129830578E-016 + 44.159999999999997 2.7601055035246682E-016 + 44.219999999999999 3.1505068797547579E-016 + 44.280000000000001 3.5996834423548064E-016 + 44.340000000000003 4.1161802412069622E-016 + 44.399999999999991 4.7094953560595806E-016 + 44.459999999999994 5.3901389716892124E-016 + 44.519999999999996 6.1696820291270981E-016 + 44.579999999999998 7.0608108217303553E-016 + 44.640000000000001 8.0773683317991671E-016 + 44.700000000000003 9.2343906278845295E-016 + 44.759999999999991 1.0548131575589598E-015 + 44.819999999999993 1.2036088088243263E-015 + 44.879999999999995 1.3716997560418900E-015 + 44.939999999999998 1.5610821587355837E-015 + 45.000000000000000 1.7738730828997144E-015 + 45.060000000000002 2.0123048479250232E-015 + 45.119999999999990 2.2787182066165598E-015 + 45.179999999999993 2.5755535793363171E-015 + 45.239999999999995 2.9053381033049351E-015 + 45.299999999999997 3.2706727746891244E-015 + 45.359999999999999 3.6742133769070203E-015 + 45.420000000000002 4.1186520698349115E-015 + 45.479999999999990 4.6066912563611390E-015 + 45.539999999999992 5.1410188403661785E-015 + 45.599999999999994 5.7242771537129534E-015 + 45.659999999999997 6.3590294608130864E-015 + 45.719999999999999 7.0477206003346166E-015 + 45.780000000000001 7.7926378648971735E-015 + 45.840000000000003 8.5958608064606413E-015 + 45.899999999999991 9.4592081751476997E-015 + 45.959999999999994 1.0384184140423902E-014 + 46.019999999999996 1.1371907185876639E-014 + 46.079999999999998 1.2423037655983360E-014 + 46.140000000000001 1.3537687335847647E-014 + 46.200000000000003 1.4715326025968902E-014 + 46.259999999999991 1.5954654496695953E-014 + 46.319999999999993 1.7253476330460158E-014 + 46.379999999999995 1.8608534709245852E-014 + 46.439999999999998 2.0015319437212443E-014 + 46.500000000000000 2.1467842445120290E-014 + 46.560000000000002 2.2958371257643850E-014 + 46.619999999999990 2.4477101291635189E-014 + 46.679999999999993 2.6011781319847932E-014 + 46.739999999999995 2.7547262706516702E-014 + 46.799999999999997 2.9064967102825261E-014 + 46.859999999999999 3.0542241226234083E-014 + 46.920000000000002 3.1951628698253777E-014 + 46.979999999999990 3.3259996971577167E-014 + 47.039999999999992 3.4427521208169061E-014 + 47.099999999999994 3.5406469622162999E-014 + 47.159999999999997 3.6139851011774518E-014 + 47.219999999999999 3.6559820425400701E-014 + 47.280000000000001 3.6585802230660452E-014 + 47.340000000000003 3.6122400955888247E-014 + 47.399999999999991 3.5056946318883584E-014 + 47.459999999999994 3.3256740580155833E-014 + 47.519999999999996 3.0565874195144133E-014 + 47.579999999999998 2.6801638869503273E-014 + 47.640000000000001 2.1750434024550137E-014 + 47.700000000000003 1.5163157886723542E-014 + 47.759999999999991 6.7500329371250264E-015 + 47.819999999999993 -3.8252539365197426E-015 + 47.879999999999995 -1.6952185647561406E-014 + 47.939999999999998 -3.3080692218734226E-014 + 48.000000000000000 -5.2729352501183026E-014 + 48.060000000000002 -7.6494778683799598E-014 + 48.119999999999990 -1.0506161540158155E-013 + 48.179999999999993 -1.3921404820040492E-013 + 48.239999999999995 -1.7984839166969566E-013 + 48.299999999999997 -2.2798709708593955E-013 + 48.359999999999999 -2.8479426129295495E-013 + 48.420000000000002 -3.5159269286687894E-013 + 48.479999999999990 -4.2988258290336664E-013 + 48.539999999999992 -5.2136269603440209E-013 + 48.599999999999994 -6.2795258615823918E-013 + 48.659999999999997 -7.5181805787551230E-013 + 48.719999999999999 -8.9539831475132273E-013 + 48.780000000000001 -1.0614358374342916E-012 + 48.840000000000003 -1.2530097571361451E-012 + 48.899999999999991 -1.4735710277871266E-012 + 48.959999999999994 -1.7269812369737846E-012 + 49.019999999999996 -2.0175551886750951E-012 + 49.079999999999998 -2.3501068322166902E-012 + 49.140000000000001 -2.7299994143869669E-012 + 49.200000000000003 -3.1631992046938825E-012 + 49.259999999999991 -3.6563335625188253E-012 + 49.319999999999993 -4.2167562887594937E-012 + 49.379999999999995 -4.8526128040887762E-012 + 49.439999999999998 -5.5729143737260647E-012 + 49.500000000000000 -6.3876196203880601E-012 + 49.560000000000002 -7.3077150431772829E-012 + 49.619999999999990 -8.3453101207221500E-012 + 49.679999999999993 -9.5137330049112033E-012 + 49.739999999999995 -1.0827635982084210E-011 + 49.799999999999997 -1.2303101694029933E-011 + 49.859999999999999 -1.3957768476374771E-011 + 49.920000000000002 -1.5810948294636415E-011 + 49.979999999999990 -1.7883762544871900E-011 + 50.039999999999992 -2.0199287241298027E-011 + 50.099999999999994 -2.2782687439471031E-011 + 50.159999999999997 -2.5661384912687706E-011 + 50.219999999999999 -2.8865213020625573E-011 + 50.280000000000001 -3.2426571373355675E-011 + 50.340000000000003 -3.6380632280196871E-011 + 50.399999999999991 -4.0765478671008078E-011 + 50.459999999999994 -4.5622320226564526E-011 + 50.519999999999996 -5.0995641852912905E-011 + 50.579999999999998 -5.6933415389875779E-011 + 50.640000000000001 -6.3487266802951811E-011 + 50.700000000000003 -7.0712672594072856E-011 + 50.759999999999991 -7.8669078529123743E-011 + 50.819999999999993 -8.7420125842187990E-011 + 50.879999999999995 -9.7033732490423116E-011 + 50.939999999999998 -1.0758224512588406E-010 + 51.000000000000000 -1.1914248586186039E-010 + 51.060000000000002 -1.3179584222238949E-010 + 51.119999999999990 -1.4562823496628181E-010 + 51.179999999999993 -1.6073007992032040E-010 + 51.239999999999995 -1.7719616541961391E-010 + 51.299999999999997 -1.9512537594542081E-010 + 51.359999999999999 -2.1462046417902116E-010 + 51.420000000000002 -2.3578755119401998E-010 + 51.479999999999990 -2.5873550928312944E-010 + 51.539999999999992 -2.8357523941567301E-010 + 51.599999999999994 -3.1041876315810729E-010 + 51.659999999999997 -3.3937788368757808E-010 + 51.719999999999999 -3.7056277999002202E-010 + 51.780000000000001 -4.0408027284314268E-010 + 51.840000000000003 -4.4003149837393977E-010 + 51.899999999999991 -4.7850950967882627E-010 + 51.959999999999994 -5.1959598734562153E-010 + 52.019999999999996 -5.6335770238196976E-010 + 52.079999999999998 -6.0984222262542598E-010 + 52.140000000000001 -6.5907287217094301E-010 + 52.200000000000003 -7.1104283621381586E-010 + 52.259999999999991 -7.6570837192819421E-010 + 52.319999999999993 -8.2298078586840044E-010 + 52.379999999999995 -8.8271753096877520E-010 + 52.439999999999998 -9.4471145521832368E-010 + 52.500000000000000 -1.0086788606233777E-009 + 52.560000000000002 -1.0742458008938487E-009 + 52.619999999999990 -1.1409321173623599E-009 + 52.679999999999993 -1.2081333388989645E-009 + 52.739999999999995 -1.2751002601663363E-009 + 52.799999999999997 -1.3409158370139221E-009 + 52.859999999999999 -1.4044686699176150E-009 + 52.920000000000002 -1.4644229994366531E-009 + 52.979999999999990 -1.5191848815520790E-009 + 53.039999999999992 -1.5668644671682387E-009 + 53.099999999999994 -1.6052326377937714E-009 + 53.159999999999997 -1.6316728451982164E-009 + 53.219999999999999 -1.6431267111865239E-009 + 53.280000000000001 -1.6360336475017877E-009 + 53.339999999999989 -1.6062622700623214E-009 + 53.399999999999991 -1.5490340802213793E-009 + 53.459999999999994 -1.4588385128739409E-009 + 53.519999999999996 -1.3293376242827376E-009 + 53.579999999999998 -1.1532608571325721E-009 + 53.640000000000001 -9.2228617749829560E-010 + 53.700000000000003 -6.2690907094343211E-010 + 53.759999999999991 -2.5629435549475535E-010 + 53.819999999999993 2.0188091226161111E-010 + 53.879999999999995 7.6161079694632480E-010 + 53.939999999999998 1.4387598421685739E-009 + 54.000000000000000 2.2512846034755651E-009 + 54.060000000000002 3.2194738292761662E-009 + 54.119999999999990 4.3662229422607294E-009 + 54.179999999999993 5.7173311313041669E-009 + 54.239999999999995 7.3018270209475707E-009 + 54.299999999999997 9.1523306921957935E-009 + 54.359999999999999 1.1305460665629538E-008 + 54.420000000000002 1.3802266341111180E-008 + 54.479999999999990 1.6688713250763743E-008 + 54.539999999999992 2.0016223671141315E-008 + 54.599999999999994 2.3842246729363426E-008 + 54.659999999999997 2.8230909611416304E-008 + 54.719999999999999 3.3253712418843296E-008 + 54.780000000000001 3.8990316314372111E-008 + 54.839999999999989 4.5529383519536688E-008 + 54.899999999999991 5.2969489758166542E-008 + 54.959999999999994 6.1420151618760872E-008 + 55.019999999999996 7.1002921498941987E-008 + 55.079999999999998 8.1852636814495753E-008 + 55.140000000000001 9.4118666722385726E-008 + 55.200000000000003 1.0796643228600317E-007 + 55.259999999999991 1.2357893820707484E-007 + 55.319999999999993 1.4115848224467359E-007 + 55.379999999999995 1.6092856244672300E-007 + 55.439999999999998 1.8313585195839086E-007 + 55.500000000000000 2.0805250827372209E-007 + 55.560000000000002 2.3597838518724176E-007 + 55.619999999999990 2.6724385839120108E-007 + 55.679999999999993 3.0221265782519263E-007 + 55.739999999999995 3.4128463196585998E-007 + 55.799999999999997 3.8489943367618235E-007 + 55.859999999999999 4.3353994499870194E-007 + 55.920000000000002 4.8773637413539750E-007 + 55.979999999999990 5.4807025031570608E-007 + 56.039999999999992 6.1517896245019396E-007 + 56.099999999999994 6.8976100459471850E-007 + 56.159999999999997 7.7258109089439589E-007 + 56.219999999999999 8.6447613610350773E-007 + 56.280000000000001 9.6636089443361395E-007 + 56.339999999999989 1.0792354737903383E-006 + 56.399999999999991 1.2041918985078313E-006 + 56.459999999999994 1.3424218121525565E-006 + 56.519999999999996 1.4952253007056095E-006 + 56.579999999999998 1.6640196002124545E-006 + 56.640000000000001 1.8503479687862380E-006 + 56.700000000000003 2.0558914721995432E-006 + 56.759999999999991 2.2824785041184348E-006 + 56.819999999999993 2.5320971189600993E-006 + 56.879999999999995 2.8069085233508701E-006 + 56.939999999999998 3.1092591444763930E-006 + 57.000000000000000 3.4416953549949561E-006 + 57.060000000000002 3.8069787093967544E-006 + 57.119999999999990 4.2081035208786295E-006 + 57.179999999999993 4.6483126942331735E-006 + 57.239999999999995 5.1311157536833546E-006 + 57.299999999999997 5.6603116499822051E-006 + 57.359999999999999 6.2400070392332231E-006 + 57.420000000000002 6.8746385641976330E-006 + 57.479999999999990 7.5689952668455679E-006 + 57.539999999999992 8.3282456158828744E-006 + 57.599999999999994 9.1579641120836323E-006 + 57.659999999999997 1.0064156619102563E-005 + 57.719999999999999 1.1053291504475803E-005 + 57.780000000000001 1.2132326071697978E-005 + 57.839999999999989 1.3308748013088490E-005 + 57.899999999999991 1.4590601561868829E-005 + 57.959999999999994 1.5986525487043865E-005 + 58.019999999999996 1.7505793190262179E-005 + 58.079999999999998 1.9158343961799573E-005 + 58.140000000000001 2.0954838399655253E-005 + 58.200000000000003 2.2906689204910120E-005 + 58.259999999999991 2.5026105657911955E-005 + 58.319999999999993 2.7326154004996038E-005 + 58.379999999999995 2.9820792981475476E-005 + 58.439999999999998 3.2524931381557642E-005 + 58.500000000000000 3.5454469319439292E-005 + 58.560000000000002 3.8626373709644487E-005 + 58.619999999999990 4.2058721148824992E-005 + 58.679999999999993 4.5770741236426314E-005 + 58.739999999999995 4.9782908497339816E-005 + 58.799999999999997 5.4116995508595095E-005 + 58.859999999999999 5.8796112116452716E-005 + 58.920000000000002 6.3844807145990839E-005 + 58.979999999999990 6.9289101552484907E-005 + 59.039999999999992 7.5156577908741922E-005 + 59.099999999999994 8.1476456167065077E-005 + 59.159999999999997 8.8279634920282378E-005 + 59.219999999999999 9.5598808077966536E-005 + 59.280000000000001 1.0346848571185998E-004 + 59.339999999999989 1.1192512138982451E-004 + 59.399999999999991 1.2100713326950143E-004 + 59.459999999999994 1.3075501411895417E-004 + 59.519999999999996 1.4121140877055763E-004 + 59.579999999999998 1.5242115884857310E-004 + 59.640000000000001 1.6443143081731846E-004 + 59.700000000000003 1.7729172148638436E-004 + 59.759999999999991 1.9105397428951398E-004 + 59.819999999999993 2.0577267527436307E-004 + 59.879999999999995 2.2150483929941157E-004 + 59.939999999999998 2.3831017758006175E-004 + 60.000000000000000 2.5625107926821199E-004 + 60.060000000000002 2.7539270494365608E-004 + 60.119999999999990 2.9580309093601515E-004 + 60.179999999999993 3.1755310750071128E-004 + 60.239999999999995 3.4071658703511780E-004 + 60.299999999999997 3.6537037436425184E-004 + 60.359999999999999 3.9159431212609449E-004 + 60.420000000000002 4.1947141042755954E-004 + 60.479999999999990 4.4908755368170691E-004 + 60.539999999999992 4.8053195493873499E-004 + 60.599999999999994 5.1389685676869810E-004 + 60.659999999999997 5.4927761618073798E-004 + 60.719999999999999 5.8677278730875492E-004 + 60.780000000000001 6.2648401887335369E-004 + 60.839999999999989 6.6851609070485820E-004 + 60.899999999999991 7.1297679775772374E-004 + 60.959999999999994 7.5997700853414529E-004 + 61.019999999999996 8.0963054634955857E-004 + 61.079999999999998 8.6205413034056908E-004 + 61.140000000000001 9.1736741516799459E-004 + 61.200000000000003 9.7569270738972992E-004 + 61.259999999999991 1.0371548691737028E-003 + 61.319999999999993 1.1018813874054461E-003 + 61.379999999999995 1.1700021136586266E-003 + 61.439999999999998 1.2416490976245506E-003 + 61.500000000000000 1.3169564073763974E-003 + 61.560000000000002 1.3960601042607270E-003 + 61.619999999999990 1.4790977668446106E-003 + 61.679999999999993 1.5662085232973255E-003 + 61.739999999999995 1.6575326713577890E-003 + 61.799999999999997 1.7532114506938756E-003 + 61.859999999999999 1.8533867963317113E-003 + 61.920000000000002 1.9582011769936308E-003 + 61.979999999999990 2.0677968413231173E-003 + 62.039999999999992 2.1823163278340287E-003 + 62.099999999999994 2.3019010508538913E-003 + 62.159999999999997 2.4266918904778632E-003 + 62.219999999999999 2.5568281924516173E-003 + 62.280000000000001 2.6924476682774869E-003 + 62.339999999999989 2.8336859617244777E-003 + 62.399999999999991 2.9806758737613995E-003 + 62.459999999999994 3.1335475896142346E-003 + 62.519999999999996 3.2924279086852821E-003 + 62.579999999999998 3.4574386789170868E-003 + 62.640000000000001 3.6286984535363570E-003 + 62.700000000000003 3.8063207778917230E-003 + 62.759999999999991 3.9904126912349873E-003 + 62.819999999999993 4.1810764414002104E-003 + 62.879999999999995 4.3784073793992394E-003 + 62.939999999999998 4.5824930652289568E-003 + 63.000000000000000 4.7934138805548424E-003 + 63.060000000000002 5.0112426249604089E-003 + 63.119999999999990 5.2360423654678146E-003 + 63.179999999999993 5.4678679598220998E-003 + 63.239999999999995 5.7067629266822108E-003 + 63.299999999999997 5.9527607359976670E-003 + 63.359999999999999 6.2058846349792992E-003 + 63.420000000000002 6.4661458073301519E-003 + 63.479999999999990 6.7335428933316460E-003 + 63.539999999999992 7.0080626718363867E-003 + 63.599999999999994 7.2896781666606895E-003 + 63.659999999999997 7.5783473676577342E-003 + 63.719999999999999 7.8740159878141845E-003 + 63.780000000000001 8.1766152003419981E-003 + 63.839999999999989 8.4860585777603911E-003 + 63.899999999999991 8.8022445310132202E-003 + 63.959999999999994 9.1250577884901731E-003 + 64.019999999999996 9.4543654249415170E-003 + 64.079999999999998 9.7900158250213802E-003 + 64.140000000000001 1.0131841815750385E-002 + 64.200000000000003 1.0479659818683866E-002 + 64.259999999999991 1.0833266805394780E-002 + 64.319999999999993 1.1192441327840431E-002 + 64.379999999999995 1.1556945201832054E-002 + 64.439999999999998 1.1926520907911674E-002 + 64.500000000000000 1.2300894583728546E-002 + 64.560000000000002 1.2679771255018202E-002 + 64.619999999999990 1.3062838872634182E-002 + 64.679999999999993 1.3449766824685508E-002 + 64.739999999999995 1.3840206771053140E-002 + 64.799999999999997 1.4233791212601633E-002 + 64.859999999999999 1.4630134404968118E-002 + 64.920000000000002 1.5028833005694473E-002 + 64.979999999999990 1.5429469765895411E-002 + 65.039999999999992 1.5831607158686319E-002 + 65.099999999999994 1.6234790095613016E-002 + 65.159999999999997 1.6638550925865990E-002 + 65.219999999999999 1.7042404527511722E-002 + 65.280000000000001 1.7445850911109693E-002 + 65.339999999999989 1.7848375362801996E-002 + 65.399999999999991 1.8249451963948188E-002 + 65.459999999999994 1.8648541735557800E-002 + 65.519999999999996 1.9045091652734453E-002 + 65.579999999999998 1.9438538601316183E-002 + 65.640000000000001 1.9828311385836340E-002 + 65.700000000000003 2.0213828236182837E-002 + 65.759999999999991 2.0594498856930838E-002 + 65.819999999999993 2.0969730595420750E-002 + 65.879999999999995 2.1338917031069483E-002 + 65.939999999999998 2.1701454780874173E-002 + 66.000000000000000 2.2056733377015064E-002 + 66.060000000000002 2.2404140402549042E-002 + 66.119999999999990 2.2743065429960956E-002 + 66.179999999999993 2.3072896893160742E-002 + 66.239999999999995 2.3393023503471728E-002 + 66.299999999999997 2.3702841465297872E-002 + 66.359999999999999 2.4001748253458393E-002 + 66.420000000000002 2.4289146986811633E-002 + 66.479999999999990 2.4564453061582132E-002 + 66.539999999999992 2.4827086756568556E-002 + 66.599999999999994 2.5076480122807474E-002 + 66.659999999999997 2.5312076526962893E-002 + 66.719999999999999 2.5533332810147046E-002 + 66.780000000000001 2.5739722361305492E-002 + 66.839999999999989 2.5930733283055517E-002 + 66.899999999999991 2.6105872569422005E-002 + 66.959999999999994 2.6264663410286541E-002 + 67.019999999999996 2.6406648943354608E-002 + 67.079999999999998 2.6531398450392027E-002 + 67.140000000000001 2.6638500714681809E-002 + 67.199999999999989 2.6727569208076316E-002 + 67.259999999999991 2.6798242023811255E-002 + 67.319999999999993 2.6850183155709719E-002 + 67.379999999999995 2.6883085441657899E-002 + 67.439999999999998 2.6896666017776058E-002 + 67.500000000000000 2.6890678876546531E-002 + 67.560000000000002 2.6864902680875338E-002 + 67.619999999999990 2.6819144331763689E-002 + 67.679999999999993 2.6753245857061094E-002 + 67.739999999999995 2.6667083860932271E-002 + 67.799999999999997 2.6560561962758505E-002 + 67.859999999999999 2.6433622459103169E-002 + 67.920000000000002 2.6286236873146154E-002 + 67.979999999999990 2.6118414202374370E-002 + 68.039999999999992 2.5930193881648265E-002 + 68.099999999999994 2.5721651962109161E-002 + 68.159999999999997 2.5492899818958945E-002 + 68.219999999999999 2.5244078594854273E-002 + 68.280000000000001 2.4975368321275719E-002 + 68.339999999999989 2.4686980386384935E-002 + 68.399999999999991 2.4379159483370244E-002 + 68.459999999999994 2.4052185302468585E-002 + 68.519999999999996 2.3706369232832567E-002 + 68.579999999999998 2.3342050633783668E-002 + 68.640000000000001 2.2959606294922989E-002 + 68.699999999999989 2.2559439645011267E-002 + 68.759999999999991 2.2141984924995591E-002 + 68.819999999999993 2.1707706402146632E-002 + 68.879999999999995 2.1257093526829925E-002 + 68.939999999999998 2.0790663040840759E-002 + 69.000000000000000 2.0308958088591910E-002 + 69.060000000000002 1.9812545247756563E-002 + 69.119999999999990 1.9302013734253075E-002 + 69.179999999999993 1.8777977253494449E-002 + 69.239999999999995 1.8241067543177308E-002 + 69.299999999999997 1.7691934728234354E-002 + 69.359999999999999 1.7131248004687807E-002 + 69.420000000000002 1.6559691618786343E-002 + 69.479999999999990 1.5977965840470083E-002 + 69.539999999999992 1.5386780395463366E-002 + 69.599999999999994 1.4786859920350590E-002 + 69.659999999999997 1.4178936021163322E-002 + 69.719999999999999 1.3563749692151848E-002 + 69.780000000000001 1.2942048589974298E-002 + 69.839999999999989 1.2314583995883288E-002 + 69.899999999999991 1.1682110093988351E-002 + 69.959999999999994 1.1045384844377238E-002 + 70.019999999999996 1.0405162171948616E-002 + 70.079999999999998 9.7621976540943432E-003 + 70.140000000000001 9.1172415586780412E-003 + 70.199999999999989 8.4710408218337530E-003 + 70.259999999999991 7.8243357235200390E-003 + 70.319999999999993 7.1778568569098415E-003 + 70.379999999999995 6.5323281432622645E-003 + 70.439999999999998 5.8884613224540827E-003 + 70.500000000000000 5.2469566250290282E-003 + 70.560000000000002 4.6085010475447243E-003 + 70.619999999999990 3.9737665274065821E-003 + 70.679999999999993 3.3434106057878732E-003 + 70.739999999999995 2.7180726574285059E-003 + 70.799999999999997 2.0983750317529215E-003 + 70.859999999999999 1.4849210605005379E-003 + 70.920000000000002 8.7829422111395912E-004 + 70.979999999999990 2.7905780036074305E-004 + 71.039999999999992 -3.1224698394610072E-004 + 71.099999999999994 -8.9510007316342445E-004 + 71.159999999999997 -1.4690047629740527E-003 + 71.219999999999999 -2.0334876738978751E-003 + 71.280000000000001 -2.5880995407253494E-003 + 71.339999999999989 -3.1324137086545917E-003 + 71.399999999999991 -3.6660288588948489E-003 + 71.459999999999994 -4.1885691220434505E-003 + 71.519999999999996 -4.6996830330658075E-003 + 71.579999999999998 -5.1990440509032112E-003 + 71.640000000000001 -5.6863511920878544E-003 + 71.699999999999989 -6.1613290540653313E-003 + 71.759999999999991 -6.6237250189777512E-003 + 71.819999999999993 -7.0733143349893798E-003 + 71.879999999999995 -7.5098950277073650E-003 + 71.939999999999998 -7.9332899744204155E-003 + 72.000000000000000 -8.3433463149684122E-003 + 72.060000000000002 -8.7399356459281676E-003 + 72.119999999999990 -9.1229512299801988E-003 + 72.179999999999993 -9.4923115643926002E-003 + 72.239999999999995 -9.8479558053599422E-003 + 72.299999999999997 -1.0189844098633286E-002 + 72.359999999999999 -1.0517960988861973E-002 + 72.420000000000002 -1.0832308251846686E-002 + 72.479999999999990 -1.1132908444617369E-002 + 72.539999999999992 -1.1419805364495180E-002 + 72.599999999999994 -1.1693059116252437E-002 + 72.659999999999997 -1.1952747839142925E-002 + 72.719999999999999 -1.2198966377567198E-002 + 72.780000000000001 -1.2431827432025179E-002 + 72.839999999999989 -1.2651457814656462E-002 + 72.899999999999991 -1.2857999827690999E-002 + 72.959999999999994 -1.3051609075456829E-002 + 73.019999999999996 -1.3232454605351048E-002 + 73.079999999999998 -1.3400716178319632E-002 + 73.140000000000001 -1.3556587034756830E-002 + 73.199999999999989 -1.3700270968046343E-002 + 73.259999999999991 -1.3831979029421617E-002 + 73.319999999999993 -1.3951934055553700E-002 + 73.379999999999995 -1.4060366589604417E-002 + 73.439999999999998 -1.4157514467068463E-002 + 73.500000000000000 -1.4243621838805943E-002 + 73.560000000000002 -1.4318938372918763E-002 + 73.619999999999990 -1.4383721030468326E-002 + 73.679999999999993 -1.4438230105521371E-002 + 73.739999999999995 -1.4482729622468569E-002 + 73.799999999999997 -1.4517487094382378E-002 + 73.859999999999999 -1.4542773477104623E-002 + 73.920000000000002 -1.4558860726732282E-002 + 73.979999999999990 -1.4566022154829755E-002 + 74.039999999999992 -1.4564533671849943E-002 + 74.099999999999994 -1.4554669322202295E-002 + 74.159999999999997 -1.4536705079601048E-002 + 74.219999999999999 -1.4510914951789123E-002 + 74.280000000000001 -1.4477574383510723E-002 + 74.339999999999989 -1.4436953977628607E-002 + 74.399999999999991 -1.4389323747180341E-002 + 74.459999999999994 -1.4334953751784184E-002 + 74.519999999999996 -1.4274108895534966E-002 + 74.579999999999998 -1.4207051972717698E-002 + 74.640000000000001 -1.4134042980831180E-002 + 74.699999999999989 -1.4055337867706965E-002 + 74.759999999999991 -1.3971190103544657E-002 + 74.819999999999993 -1.3881848304373562E-002 + 74.879999999999995 -1.3787557169652768E-002 + 74.939999999999998 -1.3688557314546823E-002 + 75.000000000000000 -1.3585086249762747E-002 + 75.060000000000002 -1.3477374199397782E-002 + 75.119999999999990 -1.3365649891707989E-002 + 75.179999999999993 -1.3250134156255824E-002 + 75.239999999999995 -1.3131044972957360E-002 + 75.299999999999997 -1.3008595459787635E-002 + 75.359999999999999 -1.2882992371947266E-002 + 75.420000000000002 -1.2754439182730998E-002 + 75.479999999999990 -1.2623132702645139E-002 + 75.539999999999992 -1.2489264573591802E-002 + 75.599999999999994 -1.2353024607622330E-002 + 75.659999999999997 -1.2214592726338437E-002 + 75.719999999999999 -1.2074147551438298E-002 + 75.780000000000001 -1.1931860720641488E-002 + 75.839999999999989 -1.1787899014078380E-002 + 75.899999999999991 -1.1642425157452202E-002 + 75.959999999999994 -1.1495595210826421E-002 + 76.019999999999996 -1.1347563044214769E-002 + 76.079999999999998 -1.1198476126680255E-002 + 76.140000000000001 -1.1048476414210003E-002 + 76.199999999999989 -1.0897701297706791E-002 + 76.259999999999991 -1.0746285047591342E-002 + 76.319999999999993 -1.0594355155815971E-002 + 76.379999999999995 -1.0442035987002224E-002 + 76.439999999999998 -1.0289447204472457E-002 + 76.500000000000000 -1.0136704295440132E-002 + 76.560000000000002 -9.9839177413500214E-003 + 76.619999999999990 -9.8311937093102306E-003 + 76.679999999999993 -9.6786354116936840E-003 + 76.739999999999995 -9.5263405077234964E-003 + 76.799999999999997 -9.3744034699519193E-003 + 76.859999999999999 -9.2229149055721472E-003 + 76.920000000000002 -9.0719617359933807E-003 + 76.979999999999990 -8.9216261475392154E-003 + 77.039999999999992 -8.7719872056983665E-003 + 77.099999999999994 -8.6231216490093108E-003 + 77.159999999999997 -8.4751025304431044E-003 + 77.219999999999999 -8.3279972244395296E-003 + 77.280000000000001 -8.1818713977227196E-003 + 77.339999999999989 -8.0367885442499953E-003 + 77.399999999999991 -7.8928070625183429E-003 + 77.459999999999994 -7.7499834207856054E-003 + 77.519999999999996 -7.6083704578264579E-003 + 77.579999999999998 -7.4680191256579140E-003 + 77.640000000000001 -7.3289758342772165E-003 + 77.699999999999989 -7.1912858921446806E-003 + 77.759999999999991 -7.0549909856406677E-003 + 77.819999999999993 -6.9201304942872223E-003 + 77.879999999999995 -6.7867416835778027E-003 + 77.939999999999998 -6.6548585476749866E-003 + 78.000000000000000 -6.5245123790267194E-003 + 78.060000000000002 -6.3957332883217604E-003 + 78.119999999999990 -6.2685484224912361E-003 + 78.179999999999993 -6.1429834871935375E-003 + 78.239999999999995 -6.0190610834968718E-003 + 78.299999999999997 -5.8968027598726939E-003 + 78.359999999999999 -5.7762276809357402E-003 + 78.420000000000002 -5.6573538324266306E-003 + 78.479999999999990 -5.5401962544470666E-003 + 78.539999999999992 -5.4247693190592724E-003 + 78.599999999999994 -5.3110847678609309E-003 + 78.659999999999997 -5.1991538737111752E-003 + 78.719999999999999 -5.0889853108193901E-003 + 78.780000000000001 -4.9805870292351792E-003 + 78.839999999999989 -4.8739652574411969E-003 + 78.899999999999991 -4.7691245602542098E-003 + 78.959999999999994 -4.6660693033175301E-003 + 79.019999999999996 -4.5648009670598323E-003 + 79.079999999999998 -4.4653208583149825E-003 + 79.140000000000001 -4.3676291676092473E-003 + 79.199999999999989 -4.2717244018977939E-003 + 79.259999999999991 -4.1776044822904156E-003 + 79.319999999999993 -4.0852656957620871E-003 + 79.379999999999995 -3.9947039760293221E-003 + 79.439999999999998 -3.9059139270860290E-003 + 79.500000000000000 -3.8188894219996217E-003 + 79.560000000000002 -3.7336231405237226E-003 + 79.619999999999990 -3.6501073128899866E-003 + 79.679999999999993 -3.5683328182185428E-003 + 79.739999999999995 -3.4882903909908723E-003 + 79.799999999999997 -3.4099694858507955E-003 + 79.859999999999999 -3.3333591379486414E-003 + 79.920000000000002 -3.2584476342743429E-003 + 79.979999999999990 -3.1852227632829786E-003 + 80.039999999999992 -3.1136714996586878E-003 + 80.099999999999994 -3.0437799479909721E-003 + 80.159999999999997 -2.9755343718312018E-003 + 80.219999999999999 -2.9089199973683388E-003 + 80.280000000000001 -2.8439217806078528E-003 + 80.340000000000003 -2.7805241169592612E-003 + 80.400000000000006 -2.7187109254778437E-003 + 80.460000000000008 -2.6584657831978348E-003 + 80.519999999999982 -2.5997713128793421E-003 + 80.579999999999984 -2.5426105408114770E-003 + 80.639999999999986 -2.4869656475919825E-003 + 80.699999999999989 -2.4328184955844808E-003 + 80.759999999999991 -2.3801506272131730E-003 + 80.819999999999993 -2.3289431131729163E-003 + 80.879999999999995 -2.2791770339781834E-003 + 80.939999999999998 -2.2308327357831101E-003 + 81.000000000000000 -2.1838904919479264E-003 + 81.060000000000002 -2.1383306036572075E-003 + 81.120000000000005 -2.0941324961580381E-003 + 81.180000000000007 -2.0512760661875948E-003 + 81.240000000000009 -2.0097406107742800E-003 + 81.299999999999983 -1.9695052277607424E-003 + 81.359999999999985 -1.9305490582528777E-003 + 81.419999999999987 -1.8928510203853940E-003 + 81.479999999999990 -1.8563897681139997E-003 + 81.539999999999992 -1.8211441400380259E-003 + 81.599999999999994 -1.7870928626064605E-003 + 81.659999999999997 -1.7542145100826368E-003 + 81.719999999999999 -1.7224877518183584E-003 + 81.780000000000001 -1.6918912076159917E-003 + 81.840000000000003 -1.6624034688599151E-003 + 81.900000000000006 -1.6340033242103595E-003 + 81.960000000000008 -1.6066692435692100E-003 + 82.019999999999982 -1.5803801606833437E-003 + 82.079999999999984 -1.5551146428906463E-003 + 82.139999999999986 -1.5308516995996115E-003 + 82.199999999999989 -1.5075702330464304E-003 + 82.259999999999991 -1.4852493258221829E-003 + 82.319999999999993 -1.4638680144657599E-003 + 82.379999999999995 -1.4434054329660012E-003 + 82.439999999999998 -1.4238410480763258E-003 + 82.500000000000000 -1.4051542388194664E-003 + 82.560000000000002 -1.3873243895160430E-003 + 82.620000000000005 -1.3703313821544613E-003 + 82.680000000000007 -1.3541549613946705E-003 + 82.740000000000009 -1.3387751100515425E-003 + 82.799999999999983 -1.3241719192823836E-003 + 82.859999999999985 -1.3103258138461981E-003 + 82.919999999999987 -1.2972173113374845E-003 + 82.979999999999990 -1.2848268886175190E-003 + 83.039999999999992 -1.2731355791256464E-003 + 83.099999999999994 -1.2621242909899068E-003 + 83.159999999999997 -1.2517742243518283E-003 + 83.219999999999999 -1.2420668376888642E-003 + 83.280000000000001 -1.2329835871302203E-003 + 83.340000000000003 -1.2245063910674586E-003 + 83.400000000000006 -1.2166170636903550E-003 + 83.460000000000008 -1.2092977721766098E-003 + 83.519999999999982 -1.2025308632359704E-003 + 83.579999999999984 -1.1962987199432137E-003 + 83.639999999999986 -1.1905839805578717E-003 + 83.699999999999989 -1.1853695553334623E-003 + 83.759999999999991 -1.1806383922775378E-003 + 83.819999999999993 -1.1763737071096851E-003 + 83.879999999999995 -1.1725590230772800E-003 + 83.939999999999998 -1.1691777717919305E-003 + 84.000000000000000 -1.1662136965465528E-003 + 84.060000000000002 -1.1636506580641214E-003 + 84.120000000000005 -1.1614727926256058E-003 + 84.180000000000007 -1.1596641837191867E-003 + 84.240000000000009 -1.1582093636612061E-003 + 84.299999999999983 -1.1570928462767438E-003 + 84.359999999999985 -1.1562991845177650E-003 + 84.419999999999987 -1.1558133748236770E-003 + 84.479999999999990 -1.1556203200351104E-003 + 84.539999999999992 -1.1557051304159798E-003 + 84.599999999999994 -1.1560533199583881E-003 + 84.659999999999997 -1.1566501350773009E-003 + 84.719999999999999 -1.1574812096453219E-003 + 84.780000000000001 -1.1585326087847597E-003 + 84.840000000000003 -1.1597900589021379E-003 + 84.900000000000006 -1.1612398590544804E-003 + 84.960000000000008 -1.1628685104361292E-003 + 85.019999999999982 -1.1646625792911221E-003 + 85.079999999999984 -1.1666088271543021E-003 + 85.139999999999986 -1.1686944412556965E-003 + 85.199999999999989 -1.1709066035429365E-003 + 85.259999999999991 -1.1732328931455959E-003 + 85.319999999999993 -1.1756612015201401E-003 + 85.379999999999995 -1.1781794117875586E-003 + 85.439999999999998 -1.1807757700492720E-003 + 85.500000000000000 -1.1834388686296909E-003 + 85.560000000000002 -1.1861575459655254E-003 + 85.620000000000005 -1.1889206389739996E-003 + 85.680000000000007 -1.1917174439393038E-003 + 85.740000000000009 -1.1945376374837015E-003 + 85.799999999999983 -1.1973708157418605E-003 + 85.859999999999985 -1.2002072240827649E-003 + 85.919999999999987 -1.2030371459123444E-003 + 85.979999999999990 -1.2058510925067284E-003 + 86.039999999999992 -1.2086401924093371E-003 + 86.099999999999994 -1.2113954432736618E-003 + 86.159999999999997 -1.2141083168561355E-003 + 86.219999999999999 -1.2167707397327627E-003 + 86.280000000000001 -1.2193747613422224E-003 + 86.340000000000003 -1.2219127771155654E-003 + 86.400000000000006 -1.2243776058360888E-003 + 86.460000000000008 -1.2267624074727662E-003 + 86.519999999999982 -1.2290605106921343E-003 + 86.579999999999984 -1.2312656576477332E-003 + 86.639999999999986 -1.2333719395336772E-003 + 86.699999999999989 -1.2353738590973272E-003 + 86.759999999999991 -1.2372659002044880E-003 + 86.819999999999993 -1.2390432971607710E-003 + 86.879999999999995 -1.2407011823340308E-003 + 86.939999999999998 -1.2422352778253425E-003 + 87.000000000000000 -1.2436414788268070E-003 + 87.060000000000002 -1.2449158739975578E-003 + 87.120000000000005 -1.2460550503987904E-003 + 87.180000000000007 -1.2470556583601732E-003 + 87.240000000000009 -1.2479146298854282E-003 + 87.299999999999983 -1.2486293240342890E-003 + 87.359999999999985 -1.2491972214981109E-003 + 87.419999999999987 -1.2496162417929859E-003 + 87.479999999999990 -1.2498845707353276E-003 + 87.539999999999992 -1.2500004729285509E-003 + 87.599999999999994 -1.2499626647092417E-003 + 87.659999999999997 -1.2497698851799864E-003 + 87.719999999999999 -1.2494213296768435E-003 + 87.780000000000001 -1.2489164389391392E-003 + 87.840000000000003 -1.2482548944344873E-003 + 87.900000000000006 -1.2474367182697464E-003 + 87.960000000000008 -1.2464620351099163E-003 + 88.019999999999982 -1.2453312318106747E-003 + 88.079999999999984 -1.2440449153127563E-003 + 88.139999999999986 -1.2426043272762163E-003 + 88.199999999999989 -1.2410102917910322E-003 + 88.259999999999991 -1.2392642079662908E-003 + 88.319999999999993 -1.2373677688595783E-003 + 88.379999999999995 -1.2353226450859478E-003 + 88.439999999999998 -1.2331308589763252E-003 + 88.500000000000000 -1.2307945725123159E-003 + 88.560000000000002 -1.2283161778910633E-003 + 88.620000000000005 -1.2256981375436227E-003 + 88.680000000000007 -1.2229430298968725E-003 + 88.740000000000009 -1.2200539410090203E-003 + 88.799999999999983 -1.2170336593723841E-003 + 88.859999999999985 -1.2138854587809267E-003 + 88.919999999999987 -1.2106126312319966E-003 + 88.979999999999990 -1.2072185763512084E-003 + 89.039999999999992 -1.2037068500765705E-003 + 89.099999999999994 -1.2000810707896189E-003 + 89.159999999999997 -1.1963450429940646E-003 + 89.219999999999999 -1.1925027114629565E-003 + 89.280000000000001 -1.1885580036192504E-003 + 89.340000000000003 -1.1845150104219811E-003 + 89.400000000000006 -1.1803778895260392E-003 + 89.460000000000008 -1.1761511235472578E-003 + 89.519999999999982 -1.1718389113125345E-003 + 89.579999999999984 -1.1674457769547937E-003 + 89.639999999999986 -1.1629761526028644E-003 + 89.699999999999989 -1.1584345360508919E-003 + 89.759999999999991 -1.1538256404776031E-003 + 89.819999999999993 -1.1491541942249279E-003 + 89.879999999999995 -1.1444245561183994E-003 + 89.939999999999998 -1.1396416072065659E-003 + 90.000000000000000 -1.1348098519052769E-003 + 90.060000000000002 -1.1299339258735099E-003 + 90.120000000000005 -1.1250185383011109E-003 + 90.180000000000007 -1.1200681847827645E-003 + 90.240000000000009 -1.1150873717422924E-003 + 90.299999999999983 -1.1100804286601617E-003 + 90.359999999999985 -1.1050518938802167E-003 + 90.419999999999987 -1.1000060210437580E-003 + 90.479999999999990 -1.0949469634521345E-003 + 90.539999999999992 -1.0898788860197097E-003 + 90.599999999999994 -1.0848058936610730E-003 + 90.659999999999997 -1.0797319736603678E-003 + 90.719999999999999 -1.0746610112052463E-003 + 90.780000000000001 -1.0695968412012045E-003 + 90.840000000000003 -1.0645431030209744E-003 + 90.900000000000006 -1.0595033182057114E-003 + 90.960000000000008 -1.0544811553557685E-003 + 91.019999999999982 -1.0494799182928407E-003 + 91.079999999999984 -1.0445028695952206E-003 + 91.139999999999986 -1.0395530487648883E-003 + 91.199999999999989 -1.0346336257127497E-003 + 91.259999999999991 -1.0297473199179980E-003 + 91.319999999999993 -1.0248968918554406E-003 + 91.379999999999995 -1.0200849933750266E-003 + 91.439999999999998 -1.0153138008257376E-003 + 91.500000000000000 -1.0105856903680885E-003 + 91.560000000000002 -1.0059027622616097E-003 + 91.620000000000005 -1.0012667442034016E-003 + 91.680000000000007 -9.9667926315805773E-004 + 91.739999999999981 -9.9214196957691570E-004 + 91.799999999999983 -9.8765616699638195E-004 + 91.859999999999985 -9.8322318328057786E-004 + 91.919999999999987 -9.7884413128936608E-004 + 91.979999999999990 -9.7451999928112830E-004 + 92.039999999999992 -9.7025155503288802E-004 + 92.099999999999994 -9.6603955108066312E-004 + 92.159999999999997 -9.6188467465731545E-004 + 92.219999999999999 -9.5778747677062134E-004 + 92.280000000000001 -9.5374849494197231E-004 + 92.340000000000003 -9.4976803734804862E-004 + 92.400000000000006 -9.4584653781419864E-004 + 92.460000000000008 -9.4198415307021968E-004 + 92.519999999999982 -9.3818117503554949E-004 + 92.579999999999984 -9.3443762936248052E-004 + 92.639999999999986 -9.3075362299200421E-004 + 92.699999999999989 -9.2712911136699793E-004 + 92.759999999999991 -9.2356410429091150E-004 + 92.819999999999993 -9.2005840139085997E-004 + 92.879999999999995 -9.1661191268819781E-004 + 92.939999999999998 -9.1322432619933916E-004 + 93.000000000000000 -9.0989545278189507E-004 + 93.060000000000002 -9.0662496244956208E-004 + 93.120000000000005 -9.0341262983059634E-004 + 93.180000000000007 -9.0025819894757838E-004 + 93.239999999999981 -8.9716136505194380E-004 + 93.299999999999983 -8.9412197829831345E-004 + 93.359999999999985 -8.9113988311417672E-004 + 93.419999999999987 -8.8821498425970295E-004 + 93.479999999999990 -8.8534725046600566E-004 + 93.539999999999992 -8.8253673947367246E-004 + 93.599999999999994 -8.7978369653287649E-004 + 93.659999999999997 -8.7708839562267800E-004 + 93.719999999999999 -8.7445128327631565E-004 + 93.780000000000001 -8.7187285673239259E-004 + 93.840000000000003 -8.6935392104633578E-004 + 93.900000000000006 -8.6689524186445643E-004 + 93.960000000000008 -8.6449779836239875E-004 + 94.019999999999982 -8.6216279716426968E-004 + 94.079999999999984 -8.5989149301494050E-004 + 94.139999999999986 -8.5768534186622843E-004 + 94.199999999999989 -8.5554603873709480E-004 + 94.259999999999991 -8.5347542758671519E-004 + 94.319999999999993 -8.5147552748584339E-004 + 94.379999999999995 -8.4954858891795541E-004 + 94.439999999999998 -8.4769711115227294E-004 + 94.500000000000000 -8.4592375428965824E-004 + 94.560000000000002 -8.4423148080180796E-004 + 94.620000000000005 -8.4262339262704895E-004 + 94.680000000000007 -8.4110291291796804E-004 + 94.739999999999981 -8.3967380236499767E-004 + 94.799999999999983 -8.3834003380384029E-004 + 94.859999999999985 -8.3710581711533534E-004 + 94.919999999999987 -8.3597575497759355E-004 + 94.979999999999990 -8.3495461233449458E-004 + 95.039999999999992 -8.3404759399653369E-004 + 95.099999999999994 -8.3326003684881171E-004 + 95.159999999999997 -8.3259772630421482E-004 + 95.219999999999999 -8.3206671175313908E-004 + 95.280000000000001 -8.3167328096513029E-004 + 95.340000000000003 -8.3142406114636975E-004 + 95.400000000000006 -8.3132598226346225E-004 + 95.460000000000008 -8.3138631824122118E-004 + 95.519999999999982 -8.3161257379813164E-004 + 95.579999999999984 -8.3201257376334990E-004 + 95.639999999999986 -8.3259451343466791E-004 + 95.699999999999989 -8.3336668350156024E-004 + 95.759999999999991 -8.3433781354958934E-004 + 95.819999999999993 -8.3551691294518615E-004 + 95.879999999999995 -8.3691319382850869E-004 + 95.939999999999998 -8.3853622432403913E-004 + 96.000000000000000 -8.4039577489600052E-004 + 96.060000000000002 -8.4250188947297157E-004 + 96.120000000000005 -8.4486489316345983E-004 + 96.180000000000007 -8.4749537681943414E-004 + 96.239999999999981 -8.5040412140839020E-004 + 96.299999999999983 -8.5360219778573610E-004 + 96.359999999999985 -8.5710088691594007E-004 + 96.419999999999987 -8.6091171097650923E-004 + 96.479999999999990 -8.6504627855879339E-004 + 96.539999999999992 -8.6951648592113219E-004 + 96.599999999999994 -8.7433441246948375E-004 + 96.659999999999997 -8.7951215811435445E-004 + 96.719999999999999 -8.8506217958055197E-004 + 96.780000000000001 -8.9099674942074900E-004 + 96.840000000000003 -8.9732841233195956E-004 + 96.900000000000006 -9.0406961959418517E-004 + 96.960000000000008 -9.1123297726940949E-004 + 97.019999999999982 -9.1883093153817498E-004 + 97.079999999999984 -9.2687607269344640E-004 + 97.139999999999986 -9.3538068911494879E-004 + 97.199999999999989 -9.4435709913969510E-004 + 97.259999999999991 -9.5381739802391789E-004 + 97.319999999999993 -9.6377343085649904E-004 + 97.379999999999995 -9.7423689938410242E-004 + 97.439999999999998 -9.8521924427411034E-004 + 97.500000000000000 -9.9673143733494370E-004 + 97.560000000000002 -1.0087843032514480E-003 + 97.620000000000005 -1.0213880866307796E-003 + 97.680000000000007 -1.0345525661376526E-003 + 97.739999999999981 -1.0482872864962180E-003 + 97.799999999999983 -1.0626010701216436E-003 + 97.859999999999985 -1.0775021766617843E-003 + 97.919999999999987 -1.0929983174505162E-003 + 97.979999999999990 -1.1090966134095421E-003 + 98.039999999999992 -1.1258032021079158E-003 + 98.099999999999994 -1.1431237089491958E-003 + 98.159999999999997 -1.1610627310478154E-003 + 98.219999999999999 -1.1796240909582932E-003 + 98.280000000000001 -1.1988106679290725E-003 + 98.340000000000003 -1.2186245554294134E-003 + 98.400000000000006 -1.2390664156534078E-003 + 98.460000000000008 -1.2601361057786116E-003 + 98.519999999999982 -1.2818321599434278E-003 + 98.579999999999984 -1.3041520343644406E-003 + 98.639999999999986 -1.3270919162920423E-003 + 98.699999999999989 -1.3506465600779229E-003 + 98.759999999999991 -1.3748096388190461E-003 + 98.819999999999993 -1.3995732941956285E-003 + 98.879999999999995 -1.4249282163508283E-003 + 98.939999999999998 -1.4508635697366992E-003 + 99.000000000000000 -1.4773672746283570E-003 + 99.060000000000002 -1.5044255129756110E-003 + 99.120000000000005 -1.5320230622585574E-003 + 99.180000000000007 -1.5601428994655709E-003 + 99.239999999999981 -1.5887665778805652E-003 + 99.299999999999983 -1.6178739614528710E-003 + 99.359999999999985 -1.6474434558939387E-003 + 99.419999999999987 -1.6774516934613616E-003 + 99.479999999999990 -1.7078736313610224E-003 + 99.539999999999992 -1.7386826229730378E-003 + 99.599999999999994 -1.7698502379492238E-003 + 99.659999999999997 -1.8013465573677495E-003 + 99.719999999999999 -1.8331400784327503E-003 + 99.780000000000001 -1.8651974170102628E-003 + 99.840000000000003 -1.8974838069663062E-003 + 99.900000000000006 -1.9299625143619178E-003 + 99.960000000000008 -1.9625957362191344E-003 + 100.01999999999998 -1.9953440291811328E-003 + 100.07999999999998 -2.0281663842569831E-003 + 100.13999999999999 -2.0610201958394356E-003 + 100.19999999999999 -2.0938619632619913E-003 + 100.25999999999999 -2.1266463589863557E-003 + 100.31999999999999 -2.1593270455226446E-003 + 100.38000000000000 -2.1918565990939384E-003 + 100.44000000000000 -2.2241861897715725E-003 + 100.50000000000000 -2.2562662712643415E-003 + 100.56000000000000 -2.2880462609580509E-003 + 100.62000000000000 -2.3194747759229849E-003 + 100.68000000000001 -2.3504992170964877E-003 + 100.73999999999998 -2.3810670493244631E-003 + 100.79999999999998 -2.4111243450049536E-003 + 100.85999999999999 -2.4406176627314448E-003 + 100.91999999999999 -2.4694924727618290E-003 + 100.97999999999999 -2.4976940875220139E-003 + 101.03999999999999 -2.5251678288807258E-003 + 101.09999999999999 -2.5518592492525943E-003 + 101.16000000000000 -2.5777135212685302E-003 + 101.22000000000000 -2.6026764971942670E-003 + 101.28000000000000 -2.6266938437574032E-003 + 101.34000000000000 -2.6497120101850640E-003 + 101.40000000000001 -2.6716783684063257E-003 + 101.46000000000001 -2.6925405440250041E-003 + 101.51999999999998 -2.7122472875610328E-003 + 101.57999999999998 -2.7307482863112333E-003 + 101.63999999999999 -2.7479946666144135E-003 + 101.69999999999999 -2.7639381120796616E-003 + 101.75999999999999 -2.7785326533486220E-003 + 101.81999999999999 -2.7917330337937449E-003 + 101.88000000000000 -2.8034960934298623E-003 + 101.94000000000000 -2.8137800588653962E-003 + 102.00000000000000 -2.8225456103387419E-003 + 102.06000000000000 -2.8297549155465321E-003 + 102.12000000000000 -2.8353725787691009E-003 + 102.18000000000001 -2.8393650525380871E-003 + 102.23999999999998 -2.8417014685077186E-003 + 102.29999999999998 -2.8423532115330751E-003 + 102.35999999999999 -2.8412943811991637E-003 + 102.41999999999999 -2.8385011228190134E-003 + 102.47999999999999 -2.8339528511873630E-003 + 102.53999999999999 -2.8276315906342639E-003 + 102.59999999999999 -2.8195218073788536E-003 + 102.66000000000000 -2.8096113819546481E-003 + 102.72000000000000 -2.7978908664439031E-003 + 102.78000000000000 -2.7843535048595724E-003 + 102.84000000000000 -2.7689962476320881E-003 + 102.90000000000001 -2.7518186510161933E-003 + 102.96000000000001 -2.7328233453126740E-003 + 103.01999999999998 -2.7120161200292875E-003 + 103.07999999999998 -2.6894058852727732E-003 + 103.13999999999999 -2.6650044636555271E-003 + 103.19999999999999 -2.6388271663064728E-003 + 103.25999999999999 -2.6108921087999010E-003 + 103.31999999999999 -2.5812207821480971E-003 + 103.38000000000000 -2.5498371799854672E-003 + 103.44000000000000 -2.5167684928116430E-003 + 103.50000000000000 -2.4820448194103621E-003 + 103.56000000000000 -2.4456992258894998E-003 + 103.62000000000000 -2.4077676232309416E-003 + 103.68000000000001 -2.3682887708326591E-003 + 103.73999999999998 -2.3273039541346803E-003 + 103.79999999999998 -2.2848566921680352E-003 + 103.85999999999999 -2.2409934621703963E-003 + 103.91999999999999 -2.1957629999696808E-003 + 103.97999999999999 -2.1492162057053800E-003 + 104.03999999999999 -2.1014063649838636E-003 + 104.09999999999999 -2.0523883035963998E-003 + 104.16000000000000 -2.0022192403083695E-003 + 104.22000000000000 -1.9509578002649929E-003 + 104.28000000000000 -1.8986644632705400E-003 + 104.34000000000000 -1.8454010590619569E-003 + 104.40000000000001 -1.7912307958944415E-003 + 104.46000000000001 -1.7362180439098305E-003 + 104.51999999999998 -1.6804283163138140E-003 + 104.57999999999998 -1.6239277443935046E-003 + 104.63999999999999 -1.5667835012549707E-003 + 104.69999999999999 -1.5090631220532570E-003 + 104.75999999999999 -1.4508348352518573E-003 + 104.81999999999999 -1.3921669483110940E-003 + 104.88000000000000 -1.3331277358632561E-003 + 104.94000000000000 -1.2737858347878976E-003 + 105.00000000000000 -1.2142096041700280E-003 + 105.06000000000000 -1.1544668918208527E-003 + 105.12000000000000 -1.0946251491205821E-003 + 105.18000000000001 -1.0347514456787018E-003 + 105.23999999999998 -9.7491198255722185E-004 + 105.29999999999998 -9.1517213153828039E-004 + 105.35999999999999 -8.5559618946807656E-004 + 105.41999999999999 -7.9624738371584787E-004 + 105.47999999999999 -7.3718784168363559E-004 + 105.53999999999999 -6.7847815467621318E-004 + 105.59999999999999 -6.2017750736125476E-004 + 105.66000000000000 -5.6234357540325096E-004 + 105.72000000000000 -5.0503226062754514E-004 + 105.78000000000000 -4.4829782702735768E-004 + 105.84000000000000 -3.9219261944037587E-004 + 105.90000000000001 -3.3676706954745305E-004 + 105.96000000000001 -2.8206962987316559E-004 + 106.01999999999998 -2.2814667575875248E-004 + 106.07999999999998 -1.7504246714916959E-004 + 106.13999999999999 -1.2279917171578868E-004 + 106.19999999999999 -7.1456709284347931E-005 + 106.25999999999999 -2.1052744716610703E-005 + 106.31999999999999 2.8377291542727480E-005 + 106.38000000000000 7.6800187296758693E-005 + 106.44000000000000 1.2418508350517773E-004 + 106.50000000000000 1.7050336893426578E-004 + 106.56000000000000 2.1572869436412923E-004 + 106.62000000000000 2.5983701521136289E-004 + 106.68000000000001 3.0280652859677472E-004 + 106.73999999999998 3.4461764637891315E-004 + 106.79999999999998 3.8525294079462741E-004 + 106.85999999999999 4.2469721820079752E-004 + 106.91999999999999 4.6293738336667815E-004 + 106.97999999999999 4.9996241721683948E-004 + 107.03999999999999 5.3576339153642728E-004 + 107.09999999999999 5.7033326314555744E-004 + 107.16000000000000 6.0366703848485214E-004 + 107.22000000000000 6.3576150629895468E-004 + 107.28000000000000 6.6661538796018965E-004 + 107.34000000000000 6.9622909050440554E-004 + 107.40000000000001 7.2460486131111878E-004 + 107.46000000000001 7.5174644487161293E-004 + 107.51999999999998 7.7765918358096910E-004 + 107.57999999999998 8.0235004190610355E-004 + 107.63999999999999 8.2582736030968715E-004 + 107.69999999999999 8.4810086907616950E-004 + 107.75999999999999 8.6918147129740769E-004 + 107.81999999999999 8.8908145659245222E-004 + 107.88000000000000 9.0781417555937406E-004 + 107.94000000000000 9.2539416322757323E-004 + 108.00000000000000 9.4183690189935168E-004 + 108.06000000000000 9.5715872235482250E-004 + 108.12000000000000 9.7137701589268262E-004 + 108.18000000000001 9.8450961091142968E-004 + 108.23999999999998 9.9657521138036653E-004 + 108.29999999999998 1.0075933994865493E-003 + 108.35999999999999 1.0175840647944274E-003 + 108.41999999999999 1.0265676755914230E-003 + 108.47999999999999 1.0345650772824711E-003 + 108.53999999999999 1.0415977429820463E-003 + 108.59999999999999 1.0476873252374386E-003 + 108.66000000000000 1.0528556115067854E-003 + 108.72000000000000 1.0571249763477446E-003 + 108.78000000000000 1.0605176435294023E-003 + 108.84000000000000 1.0630562568647531E-003 + 108.90000000000001 1.0647635301583832E-003 + 108.96000000000001 1.0656621982453563E-003 + 109.01999999999998 1.0657750126043543E-003 + 109.07999999999998 1.0651250362624736E-003 + 109.13999999999999 1.0637349491126947E-003 + 109.19999999999999 1.0616277206674960E-003 + 109.25999999999999 1.0588259561996336E-003 + 109.31999999999999 1.0553523941210358E-003 + 109.38000000000000 1.0512295505370251E-003 + 109.44000000000000 1.0464798426257943E-003 + 109.50000000000000 1.0411255714134185E-003 + 109.56000000000000 1.0351887256821817E-003 + 109.62000000000000 1.0286912343663971E-003 + 109.68000000000001 1.0216547521318636E-003 + 109.73999999999998 1.0141007534867042E-003 + 109.79999999999998 1.0060503190180000E-003 + 109.85999999999999 9.9752427778291241E-004 + 109.91999999999999 9.8854326293724331E-004 + 109.97999999999999 9.7912757657625396E-004 + 110.03999999999999 9.6929731163835492E-004 + 110.09999999999999 9.5907221082755728E-004 + 110.16000000000000 9.4847168944566331E-004 + 110.22000000000000 9.3751483802677533E-004 + 110.28000000000000 9.2622052072538767E-004 + 110.34000000000000 9.1460726300045822E-004 + 110.40000000000001 9.0269326138503415E-004 + 110.46000000000001 8.9049652849203741E-004 + 110.51999999999998 8.7803457121908850E-004 + 110.57999999999998 8.6532477950728326E-004 + 110.63999999999999 8.5238416668506286E-004 + 110.69999999999999 8.3922944209214689E-004 + 110.75999999999999 8.2587708155727204E-004 + 110.81999999999999 8.1234321357890834E-004 + 110.88000000000000 7.9864365531046380E-004 + 110.94000000000000 7.8479387711217173E-004 + 111.00000000000000 7.7080923015725178E-004 + 111.06000000000000 7.5670453063368160E-004 + 111.12000000000000 7.4249442255912269E-004 + 111.18000000000001 7.2819320423666634E-004 + 111.23999999999998 7.1381487645847416E-004 + 111.29999999999998 6.9937309222993255E-004 + 111.35999999999999 6.8488125327680256E-004 + 111.41999999999999 6.7035236611142767E-004 + 111.47999999999999 6.5579928533739519E-004 + 111.53999999999999 6.4123436398978034E-004 + 111.59999999999999 6.2666975955673440E-004 + 111.66000000000000 6.1211728043637228E-004 + 111.72000000000000 5.9758848419371510E-004 + 111.78000000000000 5.8309454440659916E-004 + 111.84000000000000 5.6864642721841875E-004 + 111.90000000000001 5.5425472650312872E-004 + 111.96000000000001 5.3992974129253850E-004 + 112.01999999999998 5.2568160831178773E-004 + 112.07999999999998 5.1152006338790984E-004 + 112.13999999999999 4.9745456230735382E-004 + 112.19999999999999 4.8349423848342518E-004 + 112.25999999999999 4.6964799800163360E-004 + 112.31999999999999 4.5592439262744718E-004 + 112.38000000000000 4.4233168285450202E-004 + 112.44000000000000 4.2887786163938477E-004 + 112.50000000000000 4.1557055551288600E-004 + 112.56000000000000 4.0241716870133661E-004 + 112.62000000000000 3.8942468434230963E-004 + 112.68000000000001 3.7659986788871909E-004 + 112.73999999999998 3.6394911687550864E-004 + 112.79999999999998 3.5147848535913674E-004 + 112.85999999999999 3.3919376733049770E-004 + 112.91999999999999 3.2710034961423154E-004 + 112.97999999999999 3.1520335939008590E-004 + 113.03999999999999 3.0350756416074195E-004 + 113.09999999999999 2.9201744447608701E-004 + 113.16000000000000 2.8073708717618639E-004 + 113.22000000000000 2.6967036645283180E-004 + 113.28000000000000 2.5882076900892218E-004 + 113.34000000000000 2.4819144844841066E-004 + 113.40000000000001 2.3778529200550985E-004 + 113.46000000000001 2.2760487770605387E-004 + 113.51999999999998 2.1765242178824667E-004 + 113.57999999999998 2.0792986454086661E-004 + 113.63999999999999 1.9843885953492417E-004 + 113.69999999999999 1.8918070510326809E-004 + 113.75999999999999 1.8015643027394188E-004 + 113.81999999999999 1.7136673801026870E-004 + 113.88000000000000 1.6281204783552206E-004 + 113.94000000000000 1.5449243731312820E-004 + 114.00000000000000 1.4640772396830231E-004 + 114.06000000000000 1.3855741968396280E-004 + 114.12000000000000 1.3094072726579730E-004 + 114.18000000000001 1.2355658013729276E-004 + 114.23999999999998 1.1640361774174777E-004 + 114.29999999999998 1.0948020884815499E-004 + 114.35999999999999 1.0278444860539109E-004 + 114.41999999999999 9.6314194345937875E-005 + 114.47999999999999 9.0067038323139587E-005 + 114.53999999999999 8.4040347070658497E-005 + 114.59999999999999 7.8231275120543674E-005 + 114.66000000000000 7.2636749704225255E-005 + 114.72000000000000 6.7253523120151148E-005 + 114.78000000000000 6.2078155834750890E-005 + 114.84000000000000 5.7107056579260070E-005 + 114.90000000000001 5.2336467219686695E-005 + 114.96000000000001 4.7762514577203677E-005 + 115.01999999999998 4.3381190678456433E-005 + 115.07999999999998 3.9188385887185295E-005 + 115.13999999999999 3.5179900977416619E-005 + 115.19999999999999 3.1351445410208979E-005 + 115.25999999999999 2.7698668129530784E-005 + 115.31999999999999 2.4217152708199522E-005 + 115.38000000000000 2.0902440056729514E-005 + 115.44000000000000 1.7750029287688199E-005 + 115.50000000000000 1.4755396248042177E-005 + 115.56000000000000 1.1913993022392674E-005 + 115.62000000000000 9.2212606338344697E-006 + 115.68000000000001 6.6726394761846150E-006 + 115.73999999999998 4.2635777496468297E-006 + 115.79999999999998 1.9895364271777201E-006 + 115.85999999999999 -1.5399851576426305E-007 + 115.91999999999999 -2.1715068546877293E-006 + 115.97999999999999 -4.0674261694780169E-006 + 116.03999999999999 -5.8461382446461100E-006 + 116.09999999999999 -7.5119622628144992E-006 + 116.16000000000000 -9.0691453233347249E-006 + 116.22000000000000 -1.0521846524053153E-005 + 116.28000000000000 -1.1874132718514535E-005 + 116.34000000000000 -1.3129964947838860E-005 + 116.40000000000001 -1.4293193306401136E-005 + 116.46000000000001 -1.5367541405334990E-005 + 116.51999999999998 -1.6356609144617770E-005 + 116.57999999999998 -1.7263861015985652E-005 + 116.63999999999999 -1.8092622698689621E-005 + 116.69999999999999 -1.8846084056079353E-005 + 116.75999999999999 -1.9527291072742506E-005 + 116.81999999999999 -2.0139155150497462E-005 + 116.88000000000000 -2.0684449226233917E-005 + 116.94000000000000 -2.1165816543174226E-005 + 117.00000000000000 -2.1585772379921269E-005 + 117.06000000000000 -2.1946716399924300E-005 + 117.12000000000000 -2.2250933058591245E-005 + 117.18000000000001 -2.2500599558723488E-005 + 117.23999999999998 -2.2697795860458414E-005 + 117.29999999999998 -2.2844510271148327E-005 + 117.35999999999999 -2.2942642630650887E-005 + 117.41999999999999 -2.2994010272453238E-005 + 117.47999999999999 -2.3000352899682133E-005 + 117.53999999999999 -2.2963336364980184E-005 + 117.59999999999999 -2.2884551188259629E-005 + 117.66000000000000 -2.2765517250454186E-005 + 117.72000000000000 -2.2607682890211747E-005 + 117.78000000000000 -2.2412427908219927E-005 + 117.84000000000000 -2.2181059772189487E-005 + 117.90000000000001 -2.1914821129038246E-005 + 117.96000000000001 -2.1614884833553050E-005 + 118.01999999999998 -2.1282358631607708E-005 + 118.07999999999998 -2.0918289432481236E-005 + 118.13999999999999 -2.0523669224716059E-005 + 118.19999999999999 -2.0099436542050669E-005 + 118.25999999999999 -1.9646484604143616E-005 + 118.31999999999999 -1.9165675959879783E-005 + 118.38000000000000 -1.8657842347925286E-005 + 118.44000000000000 -1.8123796405357663E-005 + 118.50000000000000 -1.7564348691315574E-005 + 118.56000000000000 -1.6980307934511074E-005 + 118.62000000000000 -1.6372494300768026E-005 + 118.68000000000001 -1.5741752535924652E-005 + 118.73999999999998 -1.5088954806958516E-005 + 118.79999999999998 -1.4415012379531663E-005 + 118.85999999999999 -1.3720877470272506E-005 + 118.91999999999999 -1.3007552914848061E-005 + 118.97999999999999 -1.2276088555328193E-005 + 119.03999999999999 -1.1527590543274075E-005 + 119.09999999999999 -1.0763214194415426E-005 + 119.16000000000000 -9.9841685039538640E-006 + 119.22000000000000 -9.1917117572266285E-006 + 119.28000000000000 -8.3871505356199864E-006 + 119.34000000000000 -7.5718353703228443E-006 + 119.40000000000001 -6.7471592333047965E-006 + 119.46000000000001 -5.9145529940671837E-006 + 119.51999999999998 -5.0754822821476817E-006 + 119.57999999999998 -4.2314471543766997E-006 + 119.63999999999999 -3.3839786287082547E-006 + 119.69999999999999 -2.5346383588306245E-006 + 119.75999999999999 -1.6850189875159050E-006 + 119.81999999999999 -8.3674336192050652E-007 + 119.88000000000000 8.5315197628358494E-009 + 119.94000000000000 8.4911586172448389E-007 + 120.00000000000000 1.6832813402686544E-006 + 120.06000000000000 2.5092627486720362E-006 + 120.12000000000000 3.3252543931294404E-006 + 120.18000000000001 4.1294080839418155E-006 + 120.23999999999998 4.9198348438969318E-006 + 120.29999999999998 5.6946024829396534E-006 + 120.35999999999999 6.4517400236814325E-006 + 120.41999999999999 7.1892385695647518E-006 + 120.47999999999999 7.9050579270585777E-006 + 120.53999999999999 8.5971322925459018E-006 + 120.59999999999999 9.2633769116658110E-006 + 120.66000000000000 9.9016982017862974E-006 + 120.72000000000000 1.0510000383865055E-005 + 120.78000000000000 1.1086201765230823E-005 + 120.84000000000000 1.1628239987270380E-005 + 120.90000000000001 1.2134086409356508E-005 + 120.95999999999998 1.2601755912132808E-005 + 121.01999999999998 1.3029318466059156E-005 + 121.07999999999998 1.3414904560794487E-005 + 121.13999999999999 1.3756718738016950E-005 + 121.19999999999999 1.4053042165395298E-005 + 121.25999999999999 1.4302240137873555E-005 + 121.31999999999999 1.4502769498317224E-005 + 121.38000000000000 1.4653176961822651E-005 + 121.44000000000000 1.4752108034467762E-005 + 121.50000000000000 1.4798304296302775E-005 + 121.56000000000000 1.4790604790050518E-005 + 121.62000000000000 1.4727953563883369E-005 + 121.68000000000001 1.4609395296141335E-005 + 121.73999999999998 1.4434080330411005E-005 + 121.79999999999998 1.4201267240678249E-005 + 121.85999999999999 1.3910327746338912E-005 + 121.91999999999999 1.3560751225381733E-005 + 121.97999999999999 1.3152150015698232E-005 + 122.03999999999999 1.2684264667025210E-005 + 122.09999999999999 1.2156971371781629E-005 + 122.16000000000000 1.1570287076336057E-005 + 122.22000000000000 1.0924373640423306E-005 + 122.28000000000000 1.0219547225957925E-005 + 122.34000000000000 9.4562788549595301E-006 + 122.40000000000001 8.6351956247888606E-006 + 122.45999999999998 7.7570810678880614E-006 + 122.51999999999998 6.8228768401177310E-006 + 122.57999999999998 5.8336737135543699E-006 + 122.63999999999999 4.7907099241748112E-006 + 122.69999999999999 3.6953628715312513E-006 + 122.75999999999999 2.5491403464851977E-006 + 122.81999999999999 1.3536677465421368E-006 + 122.88000000000000 1.1068123934395401E-007 + 122.94000000000000 -1.1779864104196619E-006 + 123.00000000000000 -2.5104132369339604E-006 + 123.06000000000000 -3.8846025129346490E-006 + 123.12000000000000 -5.2984893182367073E-006 + 123.18000000000001 -6.7499516623656776E-006 + 123.23999999999998 -8.2368160031876993E-006 + 123.29999999999998 -9.7568629267674509E-006 + 123.35999999999999 -1.1307836171670797E-005 + 123.41999999999999 -1.2887443140746593E-005 + 123.47999999999999 -1.4493362561898156E-005 + 123.53999999999999 -1.6123239915627781E-005 + 123.59999999999999 -1.7774704825087993E-005 + 123.66000000000000 -1.9445360149068538E-005 + 123.72000000000000 -2.1132798614837577E-005 + 123.78000000000000 -2.2834602001034107E-005 + 123.84000000000000 -2.4548350989067437E-005 + 123.90000000000001 -2.6271629075864049E-005 + 123.95999999999998 -2.8002037174338593E-005 + 124.01999999999998 -2.9737197730656969E-005 + 124.07999999999998 -3.1474778092055356E-005 + 124.13999999999999 -3.3212478308581273E-005 + 124.19999999999999 -3.4948062874378723E-005 + 124.25999999999999 -3.6679368265325291E-005 + 124.31999999999999 -3.8404299817761221E-005 + 124.38000000000000 -4.0120859870414450E-005 + 124.44000000000000 -4.1827143776923490E-005 + 124.50000000000000 -4.3521342485089753E-005 + 124.56000000000000 -4.5201761397342998E-005 + 124.62000000000000 -4.6866803648254967E-005 + 124.68000000000001 -4.8514990178052172E-005 + 124.73999999999998 -5.0144949133548014E-005 + 124.79999999999998 -5.1755410841896231E-005 + 124.85999999999999 -5.3345214026561832E-005 + 124.91999999999999 -5.4913295020999656E-005 + 124.97999999999999 -5.6458680135645700E-005 + 125.03999999999999 -5.7980490049325267E-005 + 125.09999999999999 -5.9477932446440996E-005 + 125.16000000000000 -6.0950296586001016E-005 + 125.22000000000000 -6.2396945879524205E-005 + 125.28000000000000 -6.3817328609698415E-005 + 125.34000000000000 -6.5210961456614540E-005 + 125.40000000000001 -6.6577430682609337E-005 + 125.45999999999998 -6.7916402229738522E-005 + 125.51999999999998 -6.9227617241011835E-005 + 125.57999999999998 -7.0510881150380838E-005 + 125.63999999999999 -7.1766080508265070E-005 + 125.69999999999999 -7.2993176316250090E-005 + 125.75999999999999 -7.4192215548930142E-005 + 125.81999999999999 -7.5363318868307332E-005 + 125.88000000000000 -7.6506690402981288E-005 + 125.94000000000000 -7.7622605636012759E-005 + 126.00000000000000 -7.8711440407705678E-005 + 126.06000000000000 -7.9773632291510135E-005 + 126.12000000000000 -8.0809685782503001E-005 + 126.18000000000001 -8.1820186150692435E-005 + 126.23999999999998 -8.2805786568137044E-005 + 126.29999999999998 -8.3767198215386026E-005 + 126.35999999999999 -8.4705190663143649E-005 + 126.41999999999999 -8.5620567651119168E-005 + 126.47999999999999 -8.6514187460327282E-005 + 126.53999999999999 -8.7386942089320570E-005 + 126.59999999999999 -8.8239741344659970E-005 + 126.66000000000000 -8.9073511264624135E-005 + 126.72000000000000 -8.9889202307832141E-005 + 126.78000000000000 -9.0687746077840371E-005 + 126.84000000000000 -9.1470109172622728E-005 + 126.90000000000001 -9.2237223140015801E-005 + 126.95999999999998 -9.2990035999906048E-005 + 127.01999999999998 -9.3729477657423214E-005 + 127.07999999999998 -9.4456452369932209E-005 + 127.13999999999999 -9.5171861244648204E-005 + 127.19999999999999 -9.5876582924154572E-005 + 127.25999999999999 -9.6571478589907052E-005 + 127.31999999999999 -9.7257392941167567E-005 + 127.38000000000000 -9.7935159209200338E-005 + 127.44000000000000 -9.8605571212565836E-005 + 127.50000000000000 -9.9269414610773558E-005 + 127.56000000000000 -9.9927423955073718E-005 + 127.62000000000000 -1.0058031992519396E-004 + 127.68000000000001 -1.0122876558615301E-004 + 127.73999999999998 -1.0187339663927717E-004 + 127.79999999999998 -1.0251478622345978E-004 + 127.85999999999999 -1.0315346495104818E-004 + 127.91999999999999 -1.0378987650978868E-004 + 127.97999999999999 -1.0442440092210803E-004 + 128.03999999999999 -1.0505733310615843E-004 + 128.09999999999999 -1.0568890136119183E-004 + 128.16000000000000 -1.0631923301740025E-004 + 128.22000000000000 -1.0694836155065379E-004 + 128.28000000000000 -1.0757623228093269E-004 + 128.34000000000000 -1.0820268812847380E-004 + 128.40000000000001 -1.0882747397958302E-004 + 128.45999999999998 -1.0945025476047033E-004 + 128.51999999999998 -1.1007058692566331E-004 + 128.57999999999998 -1.1068793075469400E-004 + 128.63999999999999 -1.1130166937623823E-004 + 128.69999999999999 -1.1191109320356160E-004 + 128.75999999999999 -1.1251539222084302E-004 + 128.81999999999999 -1.1311367831140646E-004 + 128.88000000000000 -1.1370498113375277E-004 + 128.94000000000000 -1.1428823429415907E-004 + 129.00000000000000 -1.1486228729277971E-004 + 129.06000000000000 -1.1542588084736117E-004 + 129.12000000000000 -1.1597767820684903E-004 + 129.18000000000001 -1.1651623909395162E-004 + 129.23999999999998 -1.1704001958561284E-004 + 129.29999999999998 -1.1754737964125550E-004 + 129.35999999999999 -1.1803656442545567E-004 + 129.41999999999999 -1.1850573072608589E-004 + 129.47999999999999 -1.1895293818103432E-004 + 129.53999999999999 -1.1937614361173245E-004 + 129.59999999999999 -1.1977322647151634E-004 + 129.66000000000000 -1.2014198592757149E-004 + 129.72000000000000 -1.2048013910114431E-004 + 129.78000000000000 -1.2078534644234469E-004 + 129.84000000000000 -1.2105522780412120E-004 + 129.90000000000001 -1.2128734624901280E-004 + 129.95999999999998 -1.2147925315276644E-004 + 130.01999999999998 -1.2162846434284938E-004 + 130.07999999999998 -1.2173250551354059E-004 + 130.13999999999999 -1.2178885773366555E-004 + 130.19999999999999 -1.2179505016953334E-004 + 130.25999999999999 -1.2174860461959597E-004 + 130.31999999999999 -1.2164706120492945E-004 + 130.38000000000000 -1.2148796053578249E-004 + 130.44000000000000 -1.2126889279253686E-004 + 130.50000000000000 -1.2098745695923405E-004 + 130.56000000000000 -1.2064127136081077E-004 + 130.62000000000000 -1.2022799105983495E-004 + 130.68000000000001 -1.1974530144195390E-004 + 130.73999999999998 -1.1919092289024421E-004 + 130.79999999999998 -1.1856262398149127E-004 + 130.85999999999999 -1.1785823185693695E-004 + 130.91999999999999 -1.1707561400501964E-004 + 130.97999999999999 -1.1621271195013047E-004 + 131.03999999999999 -1.1526756305185637E-004 + 131.09999999999999 -1.1423826836853771E-004 + 131.16000000000000 -1.1312305471015631E-004 + 131.22000000000000 -1.1192024798604999E-004 + 131.28000000000000 -1.1062829229494255E-004 + 131.34000000000000 -1.0924578275102929E-004 + 131.40000000000001 -1.0777145052483904E-004 + 131.45999999999998 -1.0620417549569692E-004 + 131.51999999999998 -1.0454298849597389E-004 + 131.57999999999998 -1.0278709340978099E-004 + 131.63999999999999 -1.0093584872173823E-004 + 131.69999999999999 -9.8988807308473254E-005 + 131.75999999999999 -9.6945666715435912E-005 + 131.81999999999999 -9.4806315511576189E-005 + 131.88000000000000 -9.2570799357553256E-005 + 131.94000000000000 -9.0239352714042843E-005 + 132.00000000000000 -8.7812373459236049E-005 + 132.06000000000000 -8.5290437033251133E-005 + 132.12000000000000 -8.2674286867043698E-005 + 132.18000000000001 -7.9964837610348427E-005 + 132.23999999999998 -7.7163187330483800E-005 + 132.29999999999998 -7.4270593466928424E-005 + 132.35999999999999 -7.1288504145704444E-005 + 132.41999999999999 -6.8218536884567501E-005 + 132.47999999999999 -6.5062489547831738E-005 + 132.53999999999999 -6.1822333499331075E-005 + 132.59999999999999 -5.8500230609299823E-005 + 132.66000000000000 -5.5098514951257579E-005 + 132.72000000000000 -5.1619703927759122E-005 + 132.78000000000000 -4.8066497017156052E-005 + 132.84000000000000 -4.4441771437777689E-005 + 132.90000000000001 -4.0748592449770852E-005 + 132.95999999999998 -3.6990190559408486E-005 + 133.01999999999998 -3.3169988085369886E-005 + 133.07999999999998 -2.9291565334768719E-005 + 133.13999999999999 -2.5358682187084613E-005 + 133.19999999999999 -2.1375257985228525E-005 + 133.25999999999999 -1.7345371910533668E-005 + 133.31999999999999 -1.3273255304442185E-005 + 133.38000000000000 -9.1632888201533033E-006 + 133.44000000000000 -5.0199830958523891E-006 + 133.50000000000000 -8.4797721302422726E-007 + 133.56000000000000 3.3479739835939972E-006 + 133.62000000000000 7.5630123359882789E-006 + 133.68000000000001 1.1792199813562152E-005 + 133.73999999999998 1.6030510416857313E-005 + 133.79999999999998 2.0272868498577484E-005 + 133.85999999999999 2.4514149213602743E-005 + 133.91999999999999 2.8749199847515237E-005 + 133.97999999999999 3.2972849671497808E-005 + 134.03999999999999 3.7179930287604530E-005 + 134.09999999999999 4.1365284875832696E-005 + 134.16000000000000 4.5523778464222864E-005 + 134.22000000000000 4.9650324372081896E-005 + 134.28000000000000 5.3739876431567791E-005 + 134.34000000000000 5.7787456824424291E-005 + 134.40000000000001 6.1788152051828646E-005 + 134.45999999999998 6.5737124425928420E-005 + 134.51999999999998 6.9629634443326075E-005 + 134.57999999999998 7.3461020280578141E-005 + 134.63999999999999 7.7226744684038171E-005 + 134.69999999999999 8.0922370051087994E-005 + 134.75999999999999 8.4543596957409333E-005 + 134.81999999999999 8.8086253557407434E-005 + 134.88000000000000 9.1546294637475368E-005 + 134.94000000000000 9.4919847440237955E-005 + 135.00000000000000 9.8203215526222786E-005 + 135.06000000000000 1.0139285289822443E-004 + 135.12000000000000 1.0448542774955136E-004 + 135.18000000000001 1.0747778920026535E-004 + 135.23999999999998 1.1036701569212494E-004 + 135.29999999999998 1.1315039024087653E-004 + 135.35999999999999 1.1582542569038776E-004 + 135.41999999999999 1.1838987285762724E-004 + 135.47999999999999 1.2084171200253717E-004 + 135.53999999999999 1.2317917047073449E-004 + 135.59999999999999 1.2540068696351823E-004 + 135.66000000000000 1.2750496414776349E-004 + 135.72000000000000 1.2949092242013030E-004 + 135.78000000000000 1.3135770213045818E-004 + 135.84000000000000 1.3310466768865466E-004 + 135.90000000000001 1.3473139226032833E-004 + 135.95999999999998 1.3623767063716428E-004 + 136.01999999999998 1.3762346322513121E-004 + 136.07999999999998 1.3888896028609285E-004 + 136.13999999999999 1.4003449185123442E-004 + 136.19999999999999 1.4106056558148123E-004 + 136.25999999999999 1.4196788001478444E-004 + 136.31999999999999 1.4275727206376385E-004 + 136.38000000000000 1.4342973712405842E-004 + 136.44000000000000 1.4398639007262871E-004 + 136.50000000000000 1.4442853469933195E-004 + 136.56000000000000 1.4475755275147875E-004 + 136.62000000000000 1.4497499983916120E-004 + 136.68000000000001 1.4508249799761430E-004 + 136.73999999999998 1.4508184473493939E-004 + 136.79999999999998 1.4497488616838596E-004 + 136.85999999999999 1.4476360563617626E-004 + 136.91999999999999 1.4445006908052165E-004 + 136.97999999999999 1.4403642614396089E-004 + 137.03999999999999 1.4352489917242057E-004 + 137.09999999999999 1.4291778426915152E-004 + 137.16000000000000 1.4221746113004876E-004 + 137.22000000000000 1.4142632192078031E-004 + 137.28000000000000 1.4054687000655434E-004 + 137.34000000000000 1.3958160112520371E-004 + 137.40000000000001 1.3853307561743469E-004 + 137.45999999999998 1.3740388062011277E-004 + 137.51999999999998 1.3619661884463631E-004 + 137.57999999999998 1.3491392397109187E-004 + 137.63999999999999 1.3355844036303815E-004 + 137.69999999999999 1.3213280877712421E-004 + 137.75999999999999 1.3063968317638370E-004 + 137.81999999999999 1.2908169122623995E-004 + 137.88000000000000 1.2746146045909538E-004 + 137.94000000000000 1.2578160732266419E-004 + 138.00000000000000 1.2404472089772489E-004 + 138.06000000000000 1.2225336817398889E-004 + 138.12000000000000 1.2041008961403266E-004 + 138.18000000000001 1.1851739179896718E-004 + 138.23999999999998 1.1657775060157135E-004 + 138.29999999999998 1.1459362347185407E-004 + 138.35999999999999 1.1256742088046870E-004 + 138.41999999999999 1.1050154829820902E-004 + 138.47999999999999 1.0839838448544225E-004 + 138.53999999999999 1.0626027815968259E-004 + 138.59999999999999 1.0408958035090772E-004 + 138.66000000000000 1.0188860863810861E-004 + 138.72000000000000 9.9659700006818396E-005 + 138.78000000000000 9.7405164682470101E-005 + 138.84000000000000 9.5127302135440513E-005 + 138.90000000000001 9.2828423156852264E-005 + 138.95999999999998 9.0510820801872595E-005 + 139.01999999999998 8.8176777709275320E-005 + 139.07999999999998 8.5828560508718655E-005 + 139.13999999999999 8.3468412785748272E-005 + 139.19999999999999 8.1098552920465640E-005 + 139.25999999999999 7.8721176107873558E-005 + 139.31999999999999 7.6338435620157256E-005 + 139.38000000000000 7.3952450968717623E-005 + 139.44000000000000 7.1565276252342369E-005 + 139.50000000000000 6.9178947447181888E-005 + 139.56000000000000 6.6795423859004739E-005 + 139.62000000000000 6.4416632142194887E-005 + 139.68000000000001 6.2044437029092864E-005 + 139.73999999999998 5.9680660596189869E-005 + 139.79999999999998 5.7327063283983517E-005 + 139.85999999999999 5.4985354461822025E-005 + 139.91999999999999 5.2657200541767363E-005 + 139.97999999999999 5.0344212379742635E-005 + 140.03999999999999 4.8047948996231014E-005 + 140.09999999999999 4.5769909694426980E-005 + 140.16000000000000 4.3511535177718274E-005 + 140.22000000000000 4.1274207528883928E-005 + 140.28000000000000 3.9059234761152975E-005 + 140.34000000000000 3.6867848708852564E-005 + 140.40000000000001 3.4701207026080292E-005 + 140.45999999999998 3.2560368146527071E-005 + 140.51999999999998 3.0446300118208710E-005 + 140.57999999999998 2.8359869361448807E-005 + 140.63999999999999 2.6301842678978677E-005 + 140.69999999999999 2.4272881142153962E-005 + 140.75999999999999 2.2273540694494293E-005 + 140.81999999999999 2.0304271486848601E-005 + 140.88000000000000 1.8365433248699718E-005 + 140.94000000000000 1.6457288237703604E-005 + 141.00000000000000 1.4580013569249954E-005 + 141.06000000000000 1.2733711677923324E-005 + 141.12000000000000 1.0918416138965517E-005 + 141.18000000000001 9.1341019425051247E-006 + 141.23999999999998 7.3806953817323214E-006 + 141.29999999999998 5.6580773777931435E-006 + 141.35999999999999 3.9660956939530522E-006 + 141.41999999999999 2.3045667599826871E-006 + 141.47999999999999 6.7328099603008414E-007 + 141.53999999999999 -9.2799576233739348E-007 + 141.59999999999999 -2.4995192522777619E-006 + 141.66000000000000 -4.0415683179795798E-006 + 141.72000000000000 -5.5544433607528279E-006 + 141.78000000000000 -7.0384672892998427E-006 + 141.84000000000000 -8.4939866124240489E-006 + 141.90000000000001 -9.9213695258160746E-006 + 141.95999999999998 -1.1321004554868209E-005 + 142.01999999999998 -1.2693297058515058E-005 + 142.07999999999998 -1.4038667379454517E-005 + 142.13999999999999 -1.5357541866665072E-005 + 142.19999999999999 -1.6650349393821951E-005 + 142.25999999999999 -1.7917507397002860E-005 + 142.31999999999999 -1.9159419723614152E-005 + 142.38000000000000 -2.0376460935707012E-005 + 142.44000000000000 -2.1568968575962904E-005 + 142.50000000000000 -2.2737233606514096E-005 + 142.56000000000000 -2.3881493471411907E-005 + 142.62000000000000 -2.5001918365088979E-005 + 142.68000000000001 -2.6098609316104120E-005 + 142.73999999999998 -2.7171589906357664E-005 + 142.79999999999998 -2.8220803558806796E-005 + 142.85999999999999 -2.9246107405811703E-005 + 142.91999999999999 -3.0247277203143046E-005 + 142.97999999999999 -3.1223999977087553E-005 + 143.03999999999999 -3.2175877737716246E-005 + 143.09999999999999 -3.3102434764086571E-005 + 143.16000000000000 -3.4003112295482306E-005 + 143.22000000000000 -3.4877264357522314E-005 + 143.28000000000000 -3.5724180389168330E-005 + 143.34000000000000 -3.6543068609426733E-005 + 143.40000000000001 -3.7333062615736885E-005 + 143.45999999999998 -3.8093231202347512E-005 + 143.51999999999998 -3.8822564558469786E-005 + 143.57999999999998 -3.9519985776009316E-005 + 143.63999999999999 -4.0184351938093895E-005 + 143.69999999999999 -4.0814440764327068E-005 + 143.75999999999999 -4.1408966153992179E-005 + 143.81999999999999 -4.1966572231051834E-005 + 143.88000000000000 -4.2485826409137015E-005 + 143.94000000000000 -4.2965226997134800E-005 + 144.00000000000000 -4.3403197700512216E-005 + 144.06000000000000 -4.3798094282010255E-005 + 144.12000000000000 -4.4148198339994010E-005 + 144.18000000000001 -4.4451717492898602E-005 + 144.23999999999998 -4.4706795439803884E-005 + 144.29999999999998 -4.4911502429605452E-005 + 144.35999999999999 -4.5063839898759806E-005 + 144.41999999999999 -4.5161749420262443E-005 + 144.47999999999999 -4.5203114909695895E-005 + 144.53999999999999 -4.5185753210246197E-005 + 144.59999999999999 -4.5107434072054370E-005 + 144.66000000000000 -4.4965885584564347E-005 + 144.72000000000000 -4.4758786631219033E-005 + 144.78000000000000 -4.4483795049016383E-005 + 144.84000000000000 -4.4138530415597251E-005 + 144.90000000000001 -4.3720599491945880E-005 + 144.95999999999998 -4.3227600668862731E-005 + 145.01999999999998 -4.2657127639783076E-005 + 145.07999999999998 -4.2006774802446415E-005 + 145.13999999999999 -4.1274158573495980E-005 + 145.19999999999999 -4.0456907324168109E-005 + 145.25999999999999 -3.9552671763558161E-005 + 145.31999999999999 -3.8559133385340128E-005 + 145.38000000000000 -3.7474009349517506E-005 + 145.44000000000000 -3.6295045483951651E-005 + 145.50000000000000 -3.5020037508373991E-005 + 145.56000000000000 -3.3646806900567999E-005 + 145.62000000000000 -3.2173229658100600E-005 + 145.68000000000001 -3.0597217380847635E-005 + 145.73999999999998 -2.8916729879073889E-005 + 145.79999999999998 -2.7129773127164028E-005 + 145.85999999999999 -2.5234414085523872E-005 + 145.91999999999999 -2.3228774590052156E-005 + 145.97999999999999 -2.1111038959650628E-005 + 146.03999999999999 -1.8879464238099971E-005 + 146.09999999999999 -1.6532388977589803E-005 + 146.16000000000000 -1.4068245198255434E-005 + 146.22000000000000 -1.1485561025916885E-005 + 146.28000000000000 -8.7829807345449177E-006 + 146.34000000000000 -5.9592657580220020E-006 + 146.40000000000001 -3.0133098931173846E-006 + 146.45999999999998 5.5854893934692945E-008 + 146.51999999999998 3.2490488321281915E-006 + 146.57999999999998 6.5669432841652939E-006 + 146.63999999999999 1.0010056759370306E-005 + 146.69999999999999 1.3578751093685709E-005 + 146.75999999999999 1.7273233760982727E-005 + 146.81999999999999 2.1093560253796897E-005 + 146.88000000000000 2.5039634032115809E-005 + 146.94000000000000 2.9111217043984598E-005 + 147.00000000000000 3.3307934315567206E-005 + 147.06000000000000 3.7629274426881496E-005 + 147.12000000000000 4.2074600706799350E-005 + 147.18000000000001 4.6643147949851623E-005 + 147.23999999999998 5.1334037516101967E-005 + 147.29999999999998 5.6146266910637412E-005 + 147.35999999999999 6.1078725729761931E-005 + 147.41999999999999 6.6130190651845282E-005 + 147.47999999999999 7.1299323997961960E-005 + 147.53999999999999 7.6584673770299479E-005 + 147.59999999999999 8.1984680737708736E-005 + 147.66000000000000 8.7497670472610177E-005 + 147.72000000000000 9.3121857638203042E-005 + 147.78000000000000 9.8855359697914833E-005 + 147.84000000000000 1.0469618713274478E-004 + 147.90000000000001 1.1064222637499671E-004 + 147.95999999999998 1.1669129677702533E-004 + 148.01999999999998 1.2284111420023813E-004 + 148.07999999999998 1.2908931560919420E-004 + 148.13999999999999 1.3543346415891588E-004 + 148.19999999999999 1.4187106380439499E-004 + 148.25999999999999 1.4839954111954833E-004 + 148.31999999999999 1.5501627734878818E-004 + 148.38000000000000 1.6171862116311312E-004 + 148.44000000000000 1.6850386402940981E-004 + 148.50000000000000 1.7536925864211969E-004 + 148.56000000000000 1.8231203449663242E-004 + 148.62000000000000 1.8932938626087215E-004 + 148.68000000000001 1.9641845883558071E-004 + 148.73999999999998 2.0357635978662648E-004 + 148.79999999999998 2.1080017575879822E-004 + 148.85999999999999 2.1808692711181398E-004 + 148.91999999999999 2.2543360799485071E-004 + 148.97999999999999 2.3283710597898818E-004 + 149.03999999999999 2.4029432131051186E-004 + 149.09999999999999 2.4780203615079697E-004 + 149.16000000000000 2.5535696135775375E-004 + 149.22000000000000 2.6295574041015950E-004 + 149.28000000000000 2.7059491894135457E-004 + 149.34000000000000 2.7827098630790650E-004 + 149.40000000000001 2.8598032705722237E-004 + 149.45999999999998 2.9371920854462613E-004 + 149.51999999999998 3.0148382331327759E-004 + 149.57999999999998 3.0927019056427465E-004 + 149.63999999999999 3.1707425694589510E-004 + 149.69999999999999 3.2489184761530819E-004 + 149.75999999999999 3.3271864843979570E-004 + 149.81999999999999 3.4055016236651402E-004 + 149.88000000000000 3.4838176340551300E-004 + 149.94000000000000 3.5620868937436304E-004 + 150.00000000000000 3.6402599524926573E-004 + 150.06000000000000 3.7182852224076625E-004 + 150.12000000000000 3.7961095774480263E-004 + 150.18000000000001 3.8736782657301268E-004 + 150.23999999999998 3.9509340132685386E-004 + 150.29999999999998 4.0278183535975522E-004 + 150.35999999999999 4.1042700958949607E-004 + 150.41999999999999 4.1802265273864600E-004 + 150.47999999999999 4.2556225254368306E-004 + 150.53999999999999 4.3303917884521720E-004 + 150.59999999999999 4.4044654182461793E-004 + 150.66000000000000 4.4777731145445392E-004 + 150.72000000000000 4.5502421716956147E-004 + 150.78000000000000 4.6217983882890706E-004 + 150.84000000000000 4.6923660498804332E-004 + 150.90000000000001 4.7618674337012682E-004 + 150.95999999999998 4.8302234725668082E-004 + 151.01999999999998 4.8973528842446144E-004 + 151.07999999999998 4.9631735189961039E-004 + 151.13999999999999 5.0276020777085617E-004 + 151.19999999999999 5.0905536794642518E-004 + 151.25999999999999 5.1519421909990658E-004 + 151.31999999999999 5.2116807656092917E-004 + 151.38000000000000 5.2696812613387738E-004 + 151.44000000000000 5.3258557976361941E-004 + 151.50000000000000 5.3801154568969679E-004 + 151.56000000000000 5.4323717486693540E-004 + 151.62000000000000 5.4825349123040971E-004 + 151.68000000000001 5.5305165225357736E-004 + 151.73999999999998 5.5762279528541339E-004 + 151.79999999999998 5.6195823994570598E-004 + 151.85999999999999 5.6604936786852232E-004 + 151.91999999999999 5.6988766292735888E-004 + 151.97999999999999 5.7346480045060368E-004 + 152.03999999999999 5.7677259483614022E-004 + 152.09999999999999 5.7980310292594245E-004 + 152.16000000000000 5.8254856299354339E-004 + 152.22000000000000 5.8500153819169317E-004 + 152.28000000000000 5.8715480377249268E-004 + 152.34000000000000 5.8900154272997090E-004 + 152.40000000000001 5.9053519759649396E-004 + 152.45999999999998 5.9174951702397650E-004 + 152.51999999999998 5.9263861851515482E-004 + 152.57999999999998 5.9319700972189587E-004 + 152.63999999999999 5.9341967559575033E-004 + 152.69999999999999 5.9330187482563366E-004 + 152.75999999999999 5.9283952415746467E-004 + 152.81999999999999 5.9202876599200223E-004 + 152.88000000000000 5.9086644444171575E-004 + 152.94000000000000 5.8934984031012560E-004 + 153.00000000000000 5.8747678412119676E-004 + 153.06000000000000 5.8524553174777838E-004 + 153.12000000000000 5.8265502628426183E-004 + 153.17999999999998 5.7970480758003367E-004 + 153.23999999999998 5.7639483689279794E-004 + 153.29999999999998 5.7272585717494534E-004 + 153.35999999999999 5.6869913196739099E-004 + 153.41999999999999 5.6431651186733783E-004 + 153.47999999999999 5.5958058223384258E-004 + 153.53999999999999 5.5449434514194963E-004 + 153.59999999999999 5.4906157177227893E-004 + 153.66000000000000 5.4328664744274821E-004 + 153.72000000000000 5.3717448708479997E-004 + 153.78000000000000 5.3073078434803344E-004 + 153.84000000000000 5.2396163973180429E-004 + 153.90000000000001 5.1687381840112307E-004 + 153.95999999999998 5.0947471959454703E-004 + 154.01999999999998 5.0177229485789618E-004 + 154.07999999999998 4.9377506935849172E-004 + 154.13999999999999 4.8549205809053788E-004 + 154.19999999999999 4.7693287690387255E-004 + 154.25999999999999 4.6810763047492731E-004 + 154.31999999999999 4.5902693335280180E-004 + 154.38000000000000 4.4970180669681275E-004 + 154.44000000000000 4.4014380789048719E-004 + 154.50000000000000 4.3036482516413800E-004 + 154.56000000000000 4.2037721207322534E-004 + 154.62000000000000 4.1019362104993928E-004 + 154.67999999999998 3.9982709354734723E-004 + 154.73999999999998 3.8929093488230995E-004 + 154.79999999999998 3.7859871364102096E-004 + 154.85999999999999 3.6776422853100979E-004 + 154.91999999999999 3.5680149824435806E-004 + 154.97999999999999 3.4572474368783451E-004 + 155.03999999999999 3.3454827305288553E-004 + 155.09999999999999 3.2328654994123865E-004 + 155.16000000000000 3.1195413962412127E-004 + 155.22000000000000 3.0056559130236333E-004 + 155.28000000000000 2.8913550127490937E-004 + 155.34000000000000 2.7767842181562806E-004 + 155.40000000000001 2.6620889565393132E-004 + 155.45999999999998 2.5474138623660531E-004 + 155.51999999999998 2.4329020800134535E-004 + 155.57999999999998 2.3186956148849388E-004 + 155.63999999999999 2.2049341181290779E-004 + 155.69999999999999 2.0917553723236873E-004 + 155.75999999999999 1.9792948318532425E-004 + 155.81999999999999 1.8676849513593860E-004 + 155.88000000000000 1.7570546965627460E-004 + 155.94000000000000 1.6475302505775179E-004 + 156.00000000000000 1.5392334841277331E-004 + 156.06000000000000 1.4322828393867782E-004 + 156.12000000000000 1.3267922364628451E-004 + 156.17999999999998 1.2228713161982306E-004 + 156.23999999999998 1.1206251772377726E-004 + 156.29999999999998 1.0201540754624421E-004 + 156.35999999999999 9.2155375388682840E-005 + 156.41999999999999 8.2491463001401291E-005 + 156.47999999999999 7.3032232265963422E-005 + 156.53999999999999 6.3785735922099057E-005 + 156.59999999999999 5.4759499868932070E-005 + 156.66000000000000 4.5960538262959582E-005 + 156.72000000000000 3.7395341194338899E-005 + 156.78000000000000 2.9069872869398941E-005 + 156.84000000000000 2.0989577705109921E-005 + 156.90000000000001 1.3159372087696616E-005 + 156.95999999999998 5.5836573686198527E-006 + 157.01999999999998 -1.7336904368667663E-006 + 157.07999999999998 -8.7892970163682434E-006 + 157.13999999999999 -1.5580299159457318E-005 + 157.19999999999999 -2.2104321465776799E-005 + 157.25999999999999 -2.8359483468460145E-005 + 157.31999999999999 -3.4344374538790209E-005 + 157.38000000000000 -4.0058035451662359E-005 + 157.44000000000000 -4.5499954910151324E-005 + 157.50000000000000 -5.0670042703471091E-005 + 157.56000000000000 -5.5568625482133610E-005 + 157.62000000000000 -6.0196398915267428E-005 + 157.67999999999998 -6.4554428449142530E-005 + 157.73999999999998 -6.8644119044269900E-005 + 157.79999999999998 -7.2467194866003497E-005 + 157.85999999999999 -7.6025692538524701E-005 + 157.91999999999999 -7.9321918215307535E-005 + 157.97999999999999 -8.2358419153203289E-005 + 158.03999999999999 -8.5137994944610445E-005 + 158.09999999999999 -8.7663643063445664E-005 + 158.16000000000000 -8.9938554182444257E-005 + 158.22000000000000 -9.1966087534262790E-005 + 158.28000000000000 -9.3749741133814868E-005 + 158.34000000000000 -9.5293143598843642E-005 + 158.40000000000001 -9.6600037091441670E-005 + 158.45999999999998 -9.7674239102578272E-005 + 158.51999999999998 -9.8519643974181553E-005 + 158.57999999999998 -9.9140167695176745E-005 + 158.63999999999999 -9.9539781177108077E-005 + 158.69999999999999 -9.9722455234370862E-005 + 158.75999999999999 -9.9692161212328690E-005 + 158.81999999999999 -9.9452850042988400E-005 + 158.88000000000000 -9.9008435643379130E-005 + 158.94000000000000 -9.8362804276363856E-005 + 159.00000000000000 -9.7519794203223260E-005 + 159.06000000000000 -9.6483171678357136E-005 + 159.12000000000000 -9.5256665875397041E-005 + 159.17999999999998 -9.3843931343847234E-005 + 159.23999999999998 -9.2248558159770493E-005 + 159.29999999999998 -9.0474068516326932E-005 + 159.35999999999999 -8.8523934655840129E-005 + 159.41999999999999 -8.6401547661639849E-005 + 159.47999999999999 -8.4110245608695633E-005 + 159.53999999999999 -8.1653306743893617E-005 + 159.59999999999999 -7.9033949322874014E-005 + 159.66000000000000 -7.6255343995776045E-005 + 159.72000000000000 -7.3320595462632554E-005 + 159.78000000000000 -7.0232759126499523E-005 + 159.84000000000000 -6.6994841981396947E-005 + 159.90000000000001 -6.3609811452243446E-005 + 159.95999999999998 -6.0080587025468343E-005 + 160.01999999999998 -5.6410034681803067E-005 + 160.07999999999998 -5.2601004515362693E-005 + 160.13999999999999 -4.8656306446020431E-005 + 160.19999999999999 -4.4578733137250120E-005 + 160.25999999999999 -4.0371064477489974E-005 + 160.31999999999999 -3.6036077287808557E-005 + 160.38000000000000 -3.1576549668644006E-005 + 160.44000000000000 -2.6995286763062387E-005 + 160.50000000000000 -2.2295112927699180E-005 + 160.56000000000000 -1.7478898527068932E-005 + 160.62000000000000 -1.2549560737846960E-005 + 160.67999999999998 -7.5100809300014751E-006 + 160.73999999999998 -2.3635085194889167E-006 + 160.79999999999998 2.8870246727264461E-006 + 160.85999999999999 8.2382997390112058E-006 + 160.91999999999999 1.3687003945880484E-005 + 160.97999999999999 1.9229727085149732E-005 + 161.03999999999999 2.4862948104783146E-005 + 161.09999999999999 3.0583036305070219E-005 + 161.16000000000000 3.6386244576812328E-005 + 161.22000000000000 4.2268706310449942E-005 + 161.28000000000000 4.8226431819166296E-005 + 161.34000000000000 5.4255301103301934E-005 + 161.40000000000001 6.0351058378899214E-005 + 161.45999999999998 6.6509307347733143E-005 + 161.51999999999998 7.2725511446000045E-005 + 161.57999999999998 7.8994979914741049E-005 + 161.63999999999999 8.5312867917689065E-005 + 161.69999999999999 9.1674157556945508E-005 + 161.75999999999999 9.8073668914605233E-005 + 161.81999999999999 1.0450605494737767E-004 + 161.88000000000000 1.1096579350606734E-004 + 161.94000000000000 1.1744717978911589E-004 + 162.00000000000000 1.2394434954932689E-004 + 162.06000000000000 1.3045126092560392E-004 + 162.12000000000000 1.3696168762221335E-004 + 162.17999999999998 1.4346925862297351E-004 + 162.23999999999998 1.4996743530107327E-004 + 162.29999999999998 1.5644952214874519E-004 + 162.35999999999999 1.6290869458972601E-004 + 162.41999999999999 1.6933796874372896E-004 + 162.47999999999999 1.7573026911645910E-004 + 162.53999999999999 1.8207838861904329E-004 + 162.59999999999999 1.8837500410910779E-004 + 162.66000000000000 1.9461271296068191E-004 + 162.72000000000000 2.0078402774334025E-004 + 162.78000000000000 2.0688137231180613E-004 + 162.84000000000000 2.1289709249813302E-004 + 162.90000000000001 2.1882348344359816E-004 + 162.95999999999998 2.2465277124370932E-004 + 163.01999999999998 2.3037719101398152E-004 + 163.07999999999998 2.3598890991839271E-004 + 163.13999999999999 2.4148005490116640E-004 + 163.19999999999999 2.4684278732652596E-004 + 163.25999999999999 2.5206924153135763E-004 + 163.31999999999999 2.5715160844959112E-004 + 163.38000000000000 2.6208205532065351E-004 + 163.44000000000000 2.6685291260004006E-004 + 163.50000000000000 2.7145644018383063E-004 + 163.56000000000000 2.7588514543682412E-004 + 163.62000000000000 2.8013154025110056E-004 + 163.67999999999998 2.8418832127128301E-004 + 163.73999999999998 2.8804836167406706E-004 + 163.79999999999998 2.9170466053600219E-004 + 163.85999999999999 2.9515044734123420E-004 + 163.91999999999999 2.9837921868713495E-004 + 163.97999999999999 3.0138465377442346E-004 + 164.03999999999999 3.0416073635660057E-004 + 164.09999999999999 3.0670172542017151E-004 + 164.16000000000000 3.0900222049166969E-004 + 164.22000000000000 3.1105709685964671E-004 + 164.28000000000000 3.1286158407046604E-004 + 164.34000000000000 3.1441130974180193E-004 + 164.40000000000001 3.1570222236208893E-004 + 164.45999999999998 3.1673071293112542E-004 + 164.51999999999998 3.1749356042432524E-004 + 164.57999999999998 3.1798790691631574E-004 + 164.63999999999999 3.1821136864419963E-004 + 164.69999999999999 3.1816199487977201E-004 + 164.75999999999999 3.1783820847183433E-004 + 164.81999999999999 3.1723894110912370E-004 + 164.88000000000000 3.1636354596426550E-004 + 164.94000000000000 3.1521186057892060E-004 + 165.00000000000000 3.1378409987994709E-004 + 165.06000000000000 3.1208099385454918E-004 + 165.12000000000000 3.1010376453337730E-004 + 165.17999999999998 3.0785399659754908E-004 + 165.23999999999998 3.0533381044178028E-004 + 165.29999999999998 3.0254577094367846E-004 + 165.35999999999999 2.9949287064197811E-004 + 165.41999999999999 2.9617859696378984E-004 + 165.47999999999999 2.9260689312083277E-004 + 165.53999999999999 2.8878210435481517E-004 + 165.59999999999999 2.8470904864549146E-004 + 165.66000000000000 2.8039303796694793E-004 + 165.72000000000000 2.7583973134485474E-004 + 165.78000000000000 2.7105524689253135E-004 + 165.84000000000000 2.6604611484571316E-004 + 165.90000000000001 2.6081920075853341E-004 + 165.95999999999998 2.5538181200352209E-004 + 166.01999999999998 2.4974154311174421E-004 + 166.07999999999998 2.4390632948169511E-004 + 166.13999999999999 2.3788448447927457E-004 + 166.19999999999999 2.3168448731357766E-004 + 166.25999999999999 2.2531512017604332E-004 + 166.31999999999999 2.1878539239618763E-004 + 166.38000000000000 2.1210452489512185E-004 + 166.44000000000000 2.0528190432585609E-004 + 166.50000000000000 1.9832704579018223E-004 + 166.56000000000000 1.9124962516064837E-004 + 166.62000000000000 1.8405937994195594E-004 + 166.67999999999998 1.7676614214089166E-004 + 166.73999999999998 1.6937984343629660E-004 + 166.79999999999998 1.6191039400815949E-004 + 166.85999999999999 1.5436776615211035E-004 + 166.91999999999999 1.4676192828322500E-004 + 166.97999999999999 1.3910281661690040E-004 + 167.03999999999999 1.3140035090967642E-004 + 167.09999999999999 1.2366439945806732E-004 + 167.16000000000000 1.1590475442570318E-004 + 167.22000000000000 1.0813113477367457E-004 + 167.28000000000000 1.0035310905186065E-004 + 167.34000000000000 9.2580157510808241E-005 + 167.40000000000001 8.4821599065249725E-005 + 167.45999999999998 7.7086578409360406E-005 + 167.51999999999998 6.9384035798665246E-005 + 167.57999999999998 6.1722722285878273E-005 + 167.63999999999999 5.4111159169197283E-005 + 167.69999999999999 4.6557609218281930E-005 + 167.75999999999999 3.9070089626846543E-005 + 167.81999999999999 3.1656348411631912E-005 + 167.88000000000000 2.4323840806147601E-005 + 167.94000000000000 1.7079748535083093E-005 + 168.00000000000000 9.9309430741649320E-006 + 168.06000000000000 2.8840028290895388E-006 + 168.12000000000000 -4.0548005601278004E-006 + 168.17999999999998 -1.0879502799944345E-005 + 168.23999999999998 -1.7584446313653102E-005 + 168.29999999999998 -2.4164284242153843E-005 + 168.35999999999999 -3.0613979438602806E-005 + 168.41999999999999 -3.6928799767961604E-005 + 168.47999999999999 -4.3104333215362366E-005 + 168.53999999999999 -4.9136471242939336E-005 + 168.59999999999999 -5.5021422438413027E-005 + 168.66000000000000 -6.0755706027586625E-005 + 168.72000000000000 -6.6336157894500422E-005 + 168.78000000000000 -7.1759911372475983E-005 + 168.84000000000000 -7.7024431592232777E-005 + 168.90000000000001 -8.2127473695023956E-005 + 168.95999999999998 -8.7067097276690268E-005 + 169.01999999999998 -9.1841680519928580E-005 + 169.07999999999998 -9.6449858758086056E-005 + 169.13999999999999 -1.0089058798162878E-004 + 169.19999999999999 -1.0516309569542600E-004 + 169.25999999999999 -1.0926686315986785E-004 + 169.31999999999999 -1.1320164690872832E-004 + 169.38000000000000 -1.1696744866822401E-004 + 169.44000000000000 -1.2056450958539244E-004 + 169.50000000000000 -1.2399330920923171E-004 + 169.56000000000000 -1.2725454660340724E-004 + 169.62000000000000 -1.3034915454953851E-004 + 169.67999999999998 -1.3327824809576699E-004 + 169.73999999999998 -1.3604315513024719E-004 + 169.79999999999998 -1.3864540825008352E-004 + 169.85999999999999 -1.4108674583656255E-004 + 169.91999999999999 -1.4336906198822026E-004 + 169.97999999999999 -1.4549443184738438E-004 + 170.03999999999999 -1.4746512546581718E-004 + 170.09999999999999 -1.4928356806317370E-004 + 170.16000000000000 -1.5095234334742424E-004 + 170.22000000000000 -1.5247421739016174E-004 + 170.28000000000000 -1.5385203528684140E-004 + 170.34000000000000 -1.5508882765782357E-004 + 170.40000000000001 -1.5618773191232430E-004 + 170.45999999999998 -1.5715195358150140E-004 + 170.51999999999998 -1.5798484732404519E-004 + 170.57999999999998 -1.5868982449047134E-004 + 170.63999999999999 -1.5927036207162237E-004 + 170.69999999999999 -1.5972998679201534E-004 + 170.75999999999999 -1.6007228166761868E-004 + 170.81999999999999 -1.6030086006232338E-004 + 170.88000000000000 -1.6041933553137189E-004 + 170.94000000000000 -1.6043136182745374E-004 + 171.00000000000000 -1.6034059671580432E-004 + 171.06000000000000 -1.6015068581456943E-004 + 171.12000000000000 -1.5986525578884144E-004 + 171.17999999999998 -1.5948794282992379E-004 + 171.23999999999998 -1.5902232288509169E-004 + 171.29999999999998 -1.5847197920291166E-004 + 171.35999999999999 -1.5784045406767730E-004 + 171.41999999999999 -1.5713127252569542E-004 + 171.47999999999999 -1.5634791209026617E-004 + 171.53999999999999 -1.5549379396488964E-004 + 171.59999999999999 -1.5457233550098795E-004 + 171.66000000000000 -1.5358687130504508E-004 + 171.72000000000000 -1.5254069563515142E-004 + 171.78000000000000 -1.5143705851230308E-004 + 171.84000000000000 -1.5027912403512407E-004 + 171.90000000000001 -1.4907001911730936E-004 + 171.95999999999998 -1.4781281456256279E-004 + 172.01999999999998 -1.4651050309569537E-004 + 172.07999999999998 -1.4516601500067327E-004 + 172.13999999999999 -1.4378217964628012E-004 + 172.19999999999999 -1.4236178679900233E-004 + 172.25999999999999 -1.4090751778945789E-004 + 172.31999999999999 -1.3942201359802136E-004 + 172.38000000000000 -1.3790778927761055E-004 + 172.44000000000000 -1.3636730145839815E-004 + 172.50000000000000 -1.3480294419249692E-004 + 172.56000000000000 -1.3321698679337178E-004 + 172.62000000000000 -1.3161164467422816E-004 + 172.67999999999998 -1.2998904354683300E-004 + 172.73999999999998 -1.2835122434624082E-004 + 172.79999999999998 -1.2670016451256041E-004 + 172.85999999999999 -1.2503774452948048E-004 + 172.91999999999999 -1.2336578035666810E-004 + 172.97999999999999 -1.2168604461663999E-004 + 173.03999999999999 -1.2000021029215895E-004 + 173.09999999999999 -1.1830990625220606E-004 + 173.16000000000000 -1.1661672455642355E-004 + 173.22000000000000 -1.1492220129711156E-004 + 173.28000000000000 -1.1322781601132326E-004 + 173.34000000000000 -1.1153502988510388E-004 + 173.40000000000001 -1.0984524645385369E-004 + 173.45999999999998 -1.0815984813417951E-004 + 173.51999999999998 -1.0648018320665985E-004 + 173.57999999999998 -1.0480756357686161E-004 + 173.63999999999999 -1.0314325664138766E-004 + 173.69999999999999 -1.0148850326461404E-004 + 173.75999999999999 -9.9844507623987510E-005 + 173.81999999999999 -9.8212428069961179E-005 + 173.88000000000000 -9.6593375133552180E-005 + 173.94000000000000 -9.4988420411755396E-005 + 174.00000000000000 -9.3398588229036677E-005 + 174.06000000000000 -9.1824856317548656E-005 + 174.12000000000000 -9.0268151238551180E-005 + 174.17999999999998 -8.8729366861073635E-005 + 174.23999999999998 -8.7209353960166121E-005 + 174.29999999999998 -8.5708903848940557E-005 + 174.35999999999999 -8.4228806651747223E-005 + 174.41999999999999 -8.2769806628559919E-005 + 174.47999999999999 -8.1332620870412753E-005 + 174.53999999999999 -7.9917954410046641E-005 + 174.59999999999999 -7.8526477245413341E-005 + 174.66000000000000 -7.7158855565107295E-005 + 174.72000000000000 -7.5815729245117382E-005 + 174.78000000000000 -7.4497726091012675E-005 + 174.84000000000000 -7.3205429234775884E-005 + 174.90000000000001 -7.1939409815287652E-005 + 174.95999999999998 -7.0700201282018082E-005 + 175.01999999999998 -6.9488305525506176E-005 + 175.07999999999998 -6.8304168010391287E-005 + 175.13999999999999 -6.7148190959907502E-005 + 175.19999999999999 -6.6020718614150887E-005 + 175.25999999999999 -6.4922019101274652E-005 + 175.31999999999999 -6.3852323218237397E-005 + 175.38000000000000 -6.2811779827053198E-005 + 175.44000000000000 -6.1800494277917367E-005 + 175.50000000000000 -6.0818497588632183E-005 + 175.56000000000000 -5.9865762280593401E-005 + 175.62000000000000 -5.8942224893046825E-005 + 175.67999999999998 -5.8047767980296200E-005 + 175.73999999999998 -5.7182240795945597E-005 + 175.79999999999998 -5.6345455045938061E-005 + 175.85999999999999 -5.5537195739897347E-005 + 175.91999999999999 -5.4757229550207596E-005 + 175.97999999999999 -5.4005295215628848E-005 + 176.03999999999999 -5.3281122928168791E-005 + 176.09999999999999 -5.2584421243406344E-005 + 176.16000000000000 -5.1914873811206604E-005 + 176.22000000000000 -5.1272148529827753E-005 + 176.28000000000000 -5.0655884649715308E-005 + 176.34000000000000 -5.0065697809735338E-005 + 176.40000000000001 -4.9501171864294978E-005 + 176.45999999999998 -4.8961852481066553E-005 + 176.51999999999998 -4.8447253964174559E-005 + 176.57999999999998 -4.7956853986910796E-005 + 176.63999999999999 -4.7490092791078750E-005 + 176.69999999999999 -4.7046384162413133E-005 + 176.75999999999999 -4.6625100504870182E-005 + 176.81999999999999 -4.6225604513227533E-005 + 176.88000000000000 -4.5847229830217591E-005 + 176.94000000000000 -4.5489297601935721E-005 + 177.00000000000000 -4.5151132275079177E-005 + 177.06000000000000 -4.4832048237078083E-005 + 177.12000000000000 -4.4531378758833214E-005 + 177.17999999999998 -4.4248457535175607E-005 + 177.23999999999998 -4.3982638781158868E-005 + 177.29999999999998 -4.3733297732515464E-005 + 177.35999999999999 -4.3499830350804985E-005 + 177.41999999999999 -4.3281648611159215E-005 + 177.47999999999999 -4.3078183374557736E-005 + 177.53999999999999 -4.2888884980858459E-005 + 177.59999999999999 -4.2713219547141171E-005 + 177.66000000000000 -4.2550660629963146E-005 + 177.72000000000000 -4.2400684676941127E-005 + 177.78000000000000 -4.2262780842307808E-005 + 177.84000000000000 -4.2136430119562794E-005 + 177.90000000000001 -4.2021121104821812E-005 + 177.95999999999998 -4.1916329197163408E-005 + 178.01999999999998 -4.1821535432618644E-005 + 178.07999999999998 -4.1736209180292094E-005 + 178.13999999999999 -4.1659811024990867E-005 + 178.19999999999999 -4.1591802403353331E-005 + 178.25999999999999 -4.1531633687403447E-005 + 178.31999999999999 -4.1478753591760383E-005 + 178.38000000000000 -4.1432608333610773E-005 + 178.44000000000000 -4.1392639124801551E-005 + 178.50000000000000 -4.1358290063781872E-005 + 178.56000000000000 -4.1328998675552643E-005 + 178.62000000000000 -4.1304203624266167E-005 + 178.67999999999998 -4.1283351372256694E-005 + 178.73999999999998 -4.1265891979918488E-005 + 178.79999999999998 -4.1251278074107416E-005 + 178.85999999999999 -4.1238968454498257E-005 + 178.91999999999999 -4.1228436158071220E-005 + 178.97999999999999 -4.1219170217246215E-005 + 179.03999999999999 -4.1210669126085147E-005 + 179.09999999999999 -4.1202452350798749E-005 + 179.16000000000000 -4.1194055323739228E-005 + 179.22000000000000 -4.1185039824252158E-005 + 179.28000000000000 -4.1174997414190434E-005 + 179.34000000000000 -4.1163537118424470E-005 + 179.40000000000001 -4.1150297215382281E-005 + 179.45999999999998 -4.1134951280884614E-005 + 179.51999999999998 -4.1117184631996750E-005 + 179.57999999999998 -4.1096717291749449E-005 + 179.63999999999999 -4.1073290790805583E-005 + 179.69999999999999 -4.1046661562044200E-005 + 179.75999999999999 -4.1016618684377772E-005 + 179.81999999999999 -4.0982959570275325E-005 + 179.88000000000000 -4.0945509551377182E-005 + 179.94000000000000 -4.0904103644689653E-005 + 180.00000000000000 -4.0858597734394107E-005 + 180.06000000000000 -4.0808873691614444E-005 + 180.12000000000000 -4.0754833431178065E-005 + 180.17999999999998 -4.0696408213234962E-005 + 180.23999999999998 -4.0633551367368268E-005 + 180.29999999999998 -4.0566256108605004E-005 + 180.35999999999999 -4.0494553554988003E-005 + 180.41999999999999 -4.0418505832700587E-005 + 180.47999999999999 -4.0338227914337155E-005 + 180.53999999999999 -4.0253875959061643E-005 + 180.59999999999999 -4.0165643667156371E-005 + 180.66000000000000 -4.0073771804149678E-005 + 180.72000000000000 -3.9978539012014522E-005 + 180.78000000000000 -3.9880256591972243E-005 + 180.84000000000000 -3.9779273952809093E-005 + 180.90000000000001 -3.9675955971561130E-005 + 180.95999999999998 -3.9570691436057046E-005 + 181.01999999999998 -3.9463874471912056E-005 + 181.07999999999998 -3.9355908926195578E-005 + 181.13999999999999 -3.9247196166369219E-005 + 181.19999999999999 -3.9138132136578389E-005 + 181.25999999999999 -3.9029096098334892E-005 + 181.31999999999999 -3.8920456128163458E-005 + 181.38000000000000 -3.8812566077464709E-005 + 181.44000000000000 -3.8705754792568524E-005 + 181.50000000000000 -3.8600337847489449E-005 + 181.56000000000000 -3.8496601272227624E-005 + 181.62000000000000 -3.8394824427284184E-005 + 181.67999999999998 -3.8295255521150583E-005 + 181.73999999999998 -3.8198129062185007E-005 + 181.79999999999998 -3.8103662477648413E-005 + 181.85999999999999 -3.8012050082550765E-005 + 181.91999999999999 -3.7923465526249889E-005 + 181.97999999999999 -3.7838067322378411E-005 + 182.03999999999999 -3.7755984470281710E-005 + 182.09999999999999 -3.7677330044744767E-005 + 182.16000000000000 -3.7602190543771418E-005 + 182.22000000000000 -3.7530637777407588E-005 + 182.28000000000000 -3.7462710460738026E-005 + 182.34000000000000 -3.7398431795506946E-005 + 182.39999999999998 -3.7337800789486634E-005 + 182.45999999999998 -3.7280804755227093E-005 + 182.51999999999998 -3.7227407457680627E-005 + 182.57999999999998 -3.7177561290540556E-005 + 182.63999999999999 -3.7131214742683671E-005 + 182.69999999999999 -3.7088296367763367E-005 + 182.75999999999999 -3.7048740927657364E-005 + 182.81999999999999 -3.7012470082377515E-005 + 182.88000000000000 -3.6979404862618114E-005 + 182.94000000000000 -3.6949458892385145E-005 + 183.00000000000000 -3.6922540939420085E-005 + 183.06000000000000 -3.6898550776579548E-005 + 183.12000000000000 -3.6877373015476383E-005 + 183.17999999999998 -3.6858884087363117E-005 + 183.23999999999998 -3.6842934932752999E-005 + 183.29999999999998 -3.6829359952266503E-005 + 183.35999999999999 -3.6817970479572474E-005 + 183.41999999999999 -3.6808548724421469E-005 + 183.47999999999999 -3.6800858005087795E-005 + 183.53999999999999 -3.6794641309165529E-005 + 183.59999999999999 -3.6789625563567801E-005 + 183.66000000000000 -3.6785517221847336E-005 + 183.72000000000000 -3.6782020969495815E-005 + 183.78000000000000 -3.6778847642954205E-005 + 183.84000000000000 -3.6775709823738768E-005 + 183.89999999999998 -3.6772342150208027E-005 + 183.95999999999998 -3.6768501332204778E-005 + 184.01999999999998 -3.6763975126443012E-005 + 184.07999999999998 -3.6758578906705555E-005 + 184.13999999999999 -3.6752166832962257E-005 + 184.19999999999999 -3.6744629295063446E-005 + 184.25999999999999 -3.6735886776670832E-005 + 184.31999999999999 -3.6725892541791409E-005 + 184.38000000000000 -3.6714625578404814E-005 + 184.44000000000000 -3.6702073733605920E-005 + 184.50000000000000 -3.6688237578322600E-005 + 184.56000000000000 -3.6673119104026337E-005 + 184.62000000000000 -3.6656711094550853E-005 + 184.67999999999998 -3.6638989538457458E-005 + 184.73999999999998 -3.6619910595784448E-005 + 184.79999999999998 -3.6599405502370512E-005 + 184.85999999999999 -3.6577373895900330E-005 + 184.91999999999999 -3.6553689219699840E-005 + 184.97999999999999 -3.6528197539787919E-005 + 185.03999999999999 -3.6500720620770636E-005 + 185.09999999999999 -3.6471056535527186E-005 + 185.16000000000000 -3.6438989471481779E-005 + 185.22000000000000 -3.6404294926925552E-005 + 185.28000000000000 -3.6366742766076899E-005 + 185.34000000000000 -3.6326111137620859E-005 + 185.39999999999998 -3.6282177539251349E-005 + 185.45999999999998 -3.6234733899888925E-005 + 185.51999999999998 -3.6183595664786860E-005 + 185.57999999999998 -3.6128590336816659E-005 + 185.63999999999999 -3.6069561658163334E-005 + 185.69999999999999 -3.6006383658985895E-005 + 185.75999999999999 -3.5938942818448361E-005 + 185.81999999999999 -3.5867146771267829E-005 + 185.88000000000000 -3.5790925032452927E-005 + 185.94000000000000 -3.5710224708204391E-005 + 186.00000000000000 -3.5625013223256812E-005 + 186.06000000000000 -3.5535268748594286E-005 + 186.12000000000000 -3.5440993860614893E-005 + 186.17999999999998 -3.5342204454160648E-005 + 186.23999999999998 -3.5238929847802621E-005 + 186.29999999999998 -3.5131226001674663E-005 + 186.35999999999999 -3.5019159970398634E-005 + 186.41999999999999 -3.4902823440685605E-005 + 186.47999999999999 -3.4782318673150564E-005 + 186.53999999999999 -3.4657775767668417E-005 + 186.59999999999999 -3.4529343023400355E-005 + 186.66000000000000 -3.4397189612140567E-005 + 186.72000000000000 -3.4261504364952238E-005 + 186.78000000000000 -3.4122494610789916E-005 + 186.84000000000000 -3.3980392033484977E-005 + 186.89999999999998 -3.3835452553700857E-005 + 186.95999999999998 -3.3687950918240727E-005 + 187.01999999999998 -3.3538188987946369E-005 + 187.07999999999998 -3.3386489287155959E-005 + 187.13999999999999 -3.3233207414896841E-005 + 187.19999999999999 -3.3078720294453725E-005 + 187.25999999999999 -3.2923438724385742E-005 + 187.31999999999999 -3.2767797969296143E-005 + 187.38000000000000 -3.2612264581768162E-005 + 187.44000000000000 -3.2457326870086409E-005 + 187.50000000000000 -3.2303502909299171E-005 + 187.56000000000000 -3.2151323931759384E-005 + 187.62000000000000 -3.2001334043008438E-005 + 187.67999999999998 -3.1854085780470980E-005 + 187.73999999999998 -3.1710134200086814E-005 + 187.79999999999998 -3.1570015630037437E-005 + 187.85999999999999 -3.1434255382281712E-005 + 187.91999999999999 -3.1303349213140049E-005 + 187.97999999999999 -3.1177753709916720E-005 + 188.03999999999999 -3.1057889471904291E-005 + 188.09999999999999 -3.0944128647847841E-005 + 188.16000000000000 -3.0836794638314921E-005 + 188.22000000000000 -3.0736153344233184E-005 + 188.28000000000000 -3.0642427226874201E-005 + 188.34000000000000 -3.0555784001520417E-005 + 188.39999999999998 -3.0476352280659739E-005 + 188.45999999999998 -3.0404220753026504E-005 + 188.51999999999998 -3.0339442795145997E-005 + 188.57999999999998 -3.0282045464334482E-005 + 188.63999999999999 -3.0232037958501876E-005 + 188.69999999999999 -3.0189411555753756E-005 + 188.75999999999999 -3.0154145421704070E-005 + 188.81999999999999 -3.0126205654931682E-005 + 188.88000000000000 -3.0105551318231418E-005 + 188.94000000000000 -3.0092128948580339E-005 + 189.00000000000000 -3.0085867517452464E-005 + 189.06000000000000 -3.0086677939134355E-005 + 189.12000000000000 -3.0094445823361423E-005 + 189.17999999999998 -3.0109026641239114E-005 + 189.23999999999998 -3.0130236780045757E-005 + 189.29999999999998 -3.0157854528583188E-005 + 189.35999999999999 -3.0191615014803390E-005 + 189.41999999999999 -3.0231208629342994E-005 + 189.47999999999999 -3.0276279162496582E-005 + 189.53999999999999 -3.0326433394655261E-005 + 189.59999999999999 -3.0381240040654016E-005 + 189.66000000000000 -3.0440238989022138E-005 + 189.72000000000000 -3.0502946869740360E-005 + 189.78000000000000 -3.0568867248222735E-005 + 189.84000000000000 -3.0637506936272519E-005 + 189.89999999999998 -3.0708367665821716E-005 + 189.95999999999998 -3.0780974430680791E-005 + 190.01999999999998 -3.0854864017007618E-005 + 190.07999999999998 -3.0929607426599296E-005 + 190.13999999999999 -3.1004798017820197E-005 + 190.19999999999999 -3.1080063308782588E-005 + 190.25999999999999 -3.1155062686329776E-005 + 190.31999999999999 -3.1229481906187104E-005 + 190.38000000000000 -3.1303024756881632E-005 + 190.44000000000000 -3.1375425254103528E-005 + 190.50000000000000 -3.1446425553822639E-005 + 190.56000000000000 -3.1515778635746874E-005 + 190.62000000000000 -3.1583250223270542E-005 + 190.67999999999998 -3.1648597099812647E-005 + 190.73999999999998 -3.1711579986115295E-005 + 190.79999999999998 -3.1771956860503082E-005 + 190.85999999999999 -3.1829478576005251E-005 + 190.91999999999999 -3.1883895470314699E-005 + 190.97999999999999 -3.1934954310932675E-005 + 191.03999999999999 -3.1982397219532609E-005 + 191.09999999999999 -3.2025973495660378E-005 + 191.16000000000000 -3.2065434685525475E-005 + 191.22000000000000 -3.2100537055127896E-005 + 191.28000000000000 -3.2131052087028634E-005 + 191.34000000000000 -3.2156759441596146E-005 + 191.39999999999998 -3.2177453675398471E-005 + 191.45999999999998 -3.2192936207007595E-005 + 191.51999999999998 -3.2203030375212853E-005 + 191.57999999999998 -3.2207574042707132E-005 + 191.63999999999999 -3.2206413291117620E-005 + 191.69999999999999 -3.2199409834899078E-005 + 191.75999999999999 -3.2186438168056898E-005 + 191.81999999999999 -3.2167386682937730E-005 + 191.88000000000000 -3.2142144312114543E-005 + 191.94000000000000 -3.2110622740632379E-005 + 192.00000000000000 -3.2072736830530103E-005 + 192.06000000000000 -3.2028405648391504E-005 + 192.12000000000000 -3.1977559306707145E-005 + 192.17999999999998 -3.1920131512102619E-005 + 192.23999999999998 -3.1856065220495428E-005 + 192.29999999999998 -3.1785308896683929E-005 + 192.35999999999999 -3.1707809709034176E-005 + 192.41999999999999 -3.1623524419248165E-005 + 192.47999999999999 -3.1532407414425746E-005 + 192.53999999999999 -3.1434428776760101E-005 + 192.59999999999999 -3.1329560400667255E-005 + 192.66000000000000 -3.1217777692181055E-005 + 192.72000000000000 -3.1099073019762459E-005 + 192.78000000000000 -3.0973458617929728E-005 + 192.84000000000000 -3.0840968839728349E-005 + 192.89999999999998 -3.0701658345971329E-005 + 192.95999999999998 -3.0555626994243845E-005 + 193.01999999999998 -3.0403008204707100E-005 + 193.07999999999998 -3.0243984164791964E-005 + 193.13999999999999 -3.0078795989044970E-005 + 193.19999999999999 -2.9907738649733284E-005 + 193.25999999999999 -2.9731168600980661E-005 + 193.31999999999999 -2.9549510183675354E-005 + 193.38000000000000 -2.9363243707100615E-005 + 193.44000000000000 -2.9172917034131772E-005 + 193.50000000000000 -2.8979128665072240E-005 + 193.56000000000000 -2.8782527782187847E-005 + 193.62000000000000 -2.8583808253133825E-005 + 193.67999999999998 -2.8383694773202592E-005 + 193.73999999999998 -2.8182935884125214E-005 + 193.79999999999998 -2.7982301753136632E-005 + 193.85999999999999 -2.7782566316370557E-005 + 193.91999999999999 -2.7584509851000525E-005 + 193.97999999999999 -2.7388913784898385E-005 + 194.03999999999999 -2.7196555255057267E-005 + 194.09999999999999 -2.7008214513412838E-005 + 194.16000000000000 -2.6824671347887732E-005 + 194.22000000000000 -2.6646712748472105E-005 + 194.28000000000000 -2.6475142470423642E-005 + 194.34000000000000 -2.6310780948772820E-005 + 194.39999999999998 -2.6154480524031072E-005 + 194.45999999999998 -2.6007125880141177E-005 + 194.51999999999998 -2.5869644335771596E-005 + 194.57999999999998 -2.5743002660774955E-005 + 194.63999999999999 -2.5628213333754321E-005 + 194.69999999999999 -2.5526329450336900E-005 + 194.75999999999999 -2.5438443867036387E-005 + 194.81999999999999 -2.5365676425681261E-005 + 194.88000000000000 -2.5309168815536458E-005 + 194.94000000000000 -2.5270073886819220E-005 + 195.00000000000000 -2.5249541828899169E-005 + 195.06000000000000 -2.5248709160793456E-005 + 195.12000000000000 -2.5268691128294815E-005 + 195.17999999999998 -2.5310568831210457E-005 + 195.23999999999998 -2.5375385753609228E-005 + 195.29999999999998 -2.5464139376196449E-005 + 195.35999999999999 -2.5577789771506869E-005 + 195.41999999999999 -2.5717252323824084E-005 + 195.47999999999999 -2.5883410842004608E-005 + 195.53999999999999 -2.6077121751514264E-005 + 195.59999999999999 -2.6299225491938628E-005 + 195.66000000000000 -2.6550558366192826E-005 + 195.72000000000000 -2.6831964863570898E-005 + 195.78000000000000 -2.7144305611965039E-005 + 195.84000000000000 -2.7488473099210895E-005 + 195.89999999999998 -2.7865396601526226E-005 + 195.95999999999998 -2.8276052302255265E-005 + 196.01999999999998 -2.8721462759009028E-005 + 196.07999999999998 -2.9202701666372373E-005 + 196.13999999999999 -2.9720892714237673E-005 + 196.19999999999999 -3.0277206782043167E-005 + 196.25999999999999 -3.0872859678450075E-005 + 196.31999999999999 -3.1509102002224598E-005 + 196.38000000000000 -3.2187210321853211E-005 + 196.44000000000000 -3.2908491094857770E-005 + 196.50000000000000 -3.3674270750196666E-005 + 196.56000000000000 -3.4485882385574370E-005 + 196.62000000000000 -3.5344674536082141E-005 + 196.67999999999998 -3.6252003689135367E-005 + 196.73999999999998 -3.7209231698066422E-005 + 196.79999999999998 -3.8217729120366754E-005 + 196.85999999999999 -3.9278880122761704E-005 + 196.91999999999999 -4.0394083837684218E-005 + 196.97999999999999 -4.1564750804446233E-005 + 197.03999999999999 -4.2792311490768284E-005 + 197.09999999999999 -4.4078215294283886E-005 + 197.16000000000000 -4.5423937579722155E-005 + 197.22000000000000 -4.6830974924565161E-005 + 197.28000000000000 -4.8300851214550006E-005 + 197.34000000000000 -4.9835099675963534E-005 + 197.39999999999998 -5.1435286858120873E-005 + 197.45999999999998 -5.3102976412310103E-005 + 197.51999999999998 -5.4839751182018485E-005 + 197.57999999999998 -5.6647191014392429E-005 + 197.63999999999999 -5.8526863667617622E-005 + 197.69999999999999 -6.0480329984279014E-005 + 197.75999999999999 -6.2509129612308103E-005 + 197.81999999999999 -6.4614757519315181E-005 + 197.88000000000000 -6.6798677919143503E-005 + 197.94000000000000 -6.9062317311863238E-005 + 198.00000000000000 -7.1407019290575962E-005 + 198.06000000000000 -7.3834065105167444E-005 + 198.12000000000000 -7.6344677261679762E-005 + 198.17999999999998 -7.8939962131411025E-005 + 198.23999999999998 -8.1620945427759824E-005 + 198.29999999999998 -8.4388540275534996E-005 + 198.35999999999999 -8.7243552306170082E-005 + 198.41999999999999 -9.0186657367714672E-005 + 198.47999999999999 -9.3218408064571812E-005 + 198.53999999999999 -9.6339208334371781E-005 + 198.59999999999999 -9.9549330012932771E-005 + 198.66000000000000 -1.0284889894330219E-004 + 198.72000000000000 -1.0623789423507830E-004 + 198.78000000000000 -1.0971615043507835E-004 + 198.84000000000000 -1.1328333594734178E-004 + 198.89999999999998 -1.1693897782508015E-004 + 198.95999999999998 -1.2068243410308458E-004 + 199.01999999999998 -1.2451293097470498E-004 + 199.07999999999998 -1.2842950114488639E-004 + 199.13999999999999 -1.3243106282529897E-004 + 199.19999999999999 -1.3651633133748993E-004 + 199.25999999999999 -1.4068385224919193E-004 + 199.31999999999999 -1.4493199700873010E-004 + 199.38000000000000 -1.4925896674450559E-004 + 199.44000000000000 -1.5366273217850128E-004 + 199.50000000000000 -1.5814108974670078E-004 + 199.56000000000000 -1.6269158917998027E-004 + 199.62000000000000 -1.6731153636493235E-004 + 199.67999999999998 -1.7199803679454273E-004 + 199.73999999999998 -1.7674792689748053E-004 + 199.79999999999998 -1.8155779444123914E-004 + 199.85999999999999 -1.8642397753357651E-004 + 199.91999999999999 -1.9134252490486439E-004 + 199.97999999999999 -1.9630927129206754E-004 + 200.03999999999999 -2.0131978954909273E-004 + 200.09999999999999 -2.0636941877537237E-004 + 200.16000000000000 -2.1145324831220653E-004 + 200.22000000000000 -2.1656615250515663E-004 + 200.28000000000000 -2.2170279094975423E-004 + 200.34000000000000 -2.2685761788281253E-004 + 200.39999999999998 -2.3202486784192652E-004 + 200.45999999999998 -2.3719861633070684E-004 + 200.51999999999998 -2.4237273718596657E-004 + 200.57999999999998 -2.4754090089057685E-004 + 200.63999999999999 -2.5269662301407849E-004 + 200.69999999999999 -2.5783325879641616E-004 + 200.75999999999999 -2.6294397005222661E-004 + 200.81999999999999 -2.6802169267257686E-004 + 200.88000000000000 -2.7305920947073755E-004 + 200.94000000000000 -2.7804911111455380E-004 + 201.00000000000000 -2.8298387062120788E-004 + 201.06000000000000 -2.8785569292137935E-004 + 201.12000000000000 -2.9265664105725911E-004 + 201.17999999999998 -2.9737865726820655E-004 + 201.23999999999998 -3.0201348297557063E-004 + 201.29999999999998 -3.0655282045240786E-004 + 201.35999999999999 -3.1098815779214079E-004 + 201.41999999999999 -3.1531095928828771E-004 + 201.47999999999999 -3.1951261572608637E-004 + 201.53999999999999 -3.2358453272384407E-004 + 201.59999999999999 -3.2751802014925895E-004 + 201.66000000000000 -3.3130448577728221E-004 + 201.72000000000000 -3.3493530221368330E-004 + 201.78000000000000 -3.3840199561403599E-004 + 201.84000000000000 -3.4169612710612283E-004 + 201.89999999999998 -3.4480934683503867E-004 + 201.95999999999998 -3.4773345223738624E-004 + 202.01999999999998 -3.5046043312836133E-004 + 202.07999999999998 -3.5298240451712645E-004 + 202.13999999999999 -3.5529164760069381E-004 + 202.19999999999999 -3.5738064634011291E-004 + 202.25999999999999 -3.5924213685857836E-004 + 202.31999999999999 -3.6086906861961351E-004 + 202.38000000000000 -3.6225463171434208E-004 + 202.44000000000000 -3.6339229832616675E-004 + 202.50000000000000 -3.6427582399822946E-004 + 202.56000000000000 -3.6489931465524876E-004 + 202.62000000000000 -3.6525719188229783E-004 + 202.67999999999998 -3.6534423578563118E-004 + 202.73999999999998 -3.6515561412843131E-004 + 202.79999999999998 -3.6468694380623051E-004 + 202.85999999999999 -3.6393420780101224E-004 + 202.91999999999999 -3.6289388153659956E-004 + 202.97999999999999 -3.6156286010206623E-004 + 203.03999999999999 -3.5993859670053156E-004 + 203.09999999999999 -3.5801897071558136E-004 + 203.16000000000000 -3.5580238113273372E-004 + 203.22000000000000 -3.5328780262323841E-004 + 203.28000000000000 -3.5047466839739329E-004 + 203.34000000000000 -3.4736299725630871E-004 + 203.39999999999998 -3.4395327376157540E-004 + 203.45999999999998 -3.4024661119205535E-004 + 203.51999999999998 -3.3624465868907066E-004 + 203.57999999999998 -3.3194953544396955E-004 + 203.63999999999999 -3.2736402530888782E-004 + 203.69999999999999 -3.2249133880961334E-004 + 203.75999999999999 -3.1733535308328160E-004 + 203.81999999999999 -3.1190043838192396E-004 + 203.88000000000000 -3.0619149092087446E-004 + 203.94000000000000 -3.0021400668177350E-004 + 204.00000000000000 -2.9397389516363701E-004 + 204.06000000000000 -2.8747767243605699E-004 + 204.12000000000000 -2.8073225370566749E-004 + 204.17999999999998 -2.7374510237128456E-004 + 204.23999999999998 -2.6652411628184529E-004 + 204.29999999999998 -2.5907756415635664E-004 + 204.35999999999999 -2.5141418282875305E-004 + 204.41999999999999 -2.4354307715582509E-004 + 204.47999999999999 -2.3547368647150430E-004 + 204.53999999999999 -2.2721583593824805E-004 + 204.59999999999999 -2.1877960668014097E-004 + 204.66000000000000 -2.1017540800346722E-004 + 204.72000000000000 -2.0141390114984884E-004 + 204.78000000000000 -1.9250599157321499E-004 + 204.84000000000000 -1.8346280725231609E-004 + 204.89999999999998 -1.7429570846599739E-004 + 204.95999999999998 -1.6501619868600014E-004 + 205.01999999999998 -1.5563596896568262E-004 + 205.07999999999998 -1.4616683308475188E-004 + 205.13999999999999 -1.3662072175857804E-004 + 205.19999999999999 -1.2700965560913960E-004 + 205.25999999999999 -1.1734570532033473E-004 + 205.31999999999999 -1.0764099053760546E-004 + 205.38000000000000 -9.7907613874379291E-005 + 205.44000000000000 -8.8157643140771721E-005 + 205.50000000000000 -7.8403069695035307E-005 + 205.56000000000000 -6.8655803950985116E-005 + 205.62000000000000 -5.8927617892639398E-005 + 205.67999999999998 -4.9230109453378335E-005 + 205.73999999999998 -3.9574705502738001E-005 + 205.79999999999998 -2.9972603086325339E-005 + 205.85999999999999 -2.0434766757591242E-005 + 205.91999999999999 -1.0971899033863494E-005 + 205.97999999999999 -1.5944209484366672E-006 + 206.03999999999999 7.6875342896052608E-006 + 206.09999999999999 1.6864141826157853E-005 + 206.16000000000000 2.5925895979611213E-005 + 206.22000000000000 3.4863617545808945E-005 + 206.28000000000000 4.3668469407931581E-005 + 206.34000000000000 5.2331969070674893E-005 + 206.39999999999998 6.0845969708995012E-005 + 206.45999999999998 6.9202722404272313E-005 + 206.51999999999998 7.7394846558668880E-005 + 206.57999999999998 8.5415338209623374E-005 + 206.63999999999999 9.3257615633544392E-005 + 206.69999999999999 1.0091549569807047E-004 + 206.75999999999999 1.0838322838247899E-004 + 206.81999999999999 1.1565548016257575E-004 + 206.88000000000000 1.2272738110789738E-004 + 206.94000000000000 1.2959446617710239E-004 + 207.00000000000000 1.3625274346446817E-004 + 207.06000000000000 1.4269868846270725E-004 + 207.12000000000000 1.4892918913204210E-004 + 207.17999999999998 1.5494157925435693E-004 + 207.23999999999998 1.6073365921952630E-004 + 207.29999999999998 1.6630361481445268E-004 + 207.35999999999999 1.7165009852609237E-004 + 207.41999999999999 1.7677213183176722E-004 + 207.47999999999999 1.8166915715937755E-004 + 207.53999999999999 1.8634100013128436E-004 + 207.59999999999999 1.9078784470348965E-004 + 207.66000000000000 1.9501026978569207E-004 + 207.72000000000000 1.9900919940426870E-004 + 207.78000000000000 2.0278587447252237E-004 + 207.84000000000000 2.0634188941855375E-004 + 207.89999999999998 2.0967915668622261E-004 + 207.95999999999998 2.1279991140798156E-004 + 208.01999999999998 2.1570669385354710E-004 + 208.07999999999998 2.1840231421524220E-004 + 208.13999999999999 2.2088987742984405E-004 + 208.19999999999999 2.2317273111511577E-004 + 208.25999999999999 2.2525447973682051E-004 + 208.31999999999999 2.2713894798932541E-004 + 208.38000000000000 2.2883017616390973E-004 + 208.44000000000000 2.3033238700579032E-004 + 208.50000000000000 2.3165001284410872E-004 + 208.56000000000000 2.3278761075103490E-004 + 208.62000000000000 2.3374989105561013E-004 + 208.68000000000001 2.3454167684837740E-004 + 208.74000000000001 2.3516789680449727E-004 + 208.80000000000001 2.3563357084915344E-004 + 208.86000000000001 2.3594377490825815E-004 + 208.92000000000002 2.3610368104055608E-004 + 208.98000000000002 2.3611847422169165E-004 + 209.03999999999996 2.3599337664355051E-004 + 209.09999999999997 2.3573367060653909E-004 + 209.15999999999997 2.3534461708903670E-004 + 209.21999999999997 2.3483148041043993E-004 + 209.27999999999997 2.3419953274844379E-004 + 209.33999999999997 2.3345399034804609E-004 + 209.39999999999998 2.3260004663115644E-004 + 209.45999999999998 2.3164284602069835E-004 + 209.51999999999998 2.3058747073348329E-004 + 209.57999999999998 2.2943892126461019E-004 + 209.63999999999999 2.2820211841835907E-004 + 209.69999999999999 2.2688189058464237E-004 + 209.75999999999999 2.2548292781584029E-004 + 209.81999999999999 2.2400984653710580E-004 + 209.88000000000000 2.2246713204434509E-004 + 209.94000000000000 2.2085915139199205E-004 + 210.00000000000000 2.1919014904766621E-004 + 210.06000000000000 2.1746424669534948E-004 + 210.12000000000000 2.1568543930451978E-004 + 210.18000000000001 2.1385762314661018E-004 + 210.24000000000001 2.1198456889911377E-004 + 210.30000000000001 2.1006994255774695E-004 + 210.36000000000001 2.0811728605165595E-004 + 210.42000000000002 2.0613003533277537E-004 + 210.48000000000002 2.0411153317209121E-004 + 210.53999999999996 2.0206498638190702E-004 + 210.59999999999997 1.9999351263367819E-004 + 210.65999999999997 1.9790010630270230E-004 + 210.71999999999997 1.9578763549391479E-004 + 210.77999999999997 1.9365885026693350E-004 + 210.83999999999997 1.9151635699269295E-004 + 210.89999999999998 1.8936266349849960E-004 + 210.95999999999998 1.8720015411355690E-004 + 211.01999999999998 1.8503106503199167E-004 + 211.07999999999998 1.8285751578177436E-004 + 211.13999999999999 1.8068149004571619E-004 + 211.19999999999999 1.7850490378536698E-004 + 211.25999999999999 1.7632952217032054E-004 + 211.31999999999999 1.7415704427371456E-004 + 211.38000000000000 1.7198908254476196E-004 + 211.44000000000000 1.6982714352681627E-004 + 211.50000000000000 1.6767270280327242E-004 + 211.56000000000000 1.6552715085324835E-004 + 211.62000000000000 1.6339184697777121E-004 + 211.68000000000001 1.6126807748270602E-004 + 211.74000000000001 1.5915708714186552E-004 + 211.80000000000001 1.5706009502838969E-004 + 211.86000000000001 1.5497822730188357E-004 + 211.92000000000002 1.5291259742392446E-004 + 211.98000000000002 1.5086425188857075E-004 + 212.03999999999996 1.4883414988147835E-004 + 212.09999999999997 1.4682322398312710E-004 + 212.15999999999997 1.4483232360511911E-004 + 212.21999999999997 1.4286221222859321E-004 + 212.27999999999997 1.4091358897712616E-004 + 212.33999999999997 1.3898710785017004E-004 + 212.39999999999998 1.3708334469060779E-004 + 212.45999999999998 1.3520280334764658E-004 + 212.51999999999998 1.3334591918569839E-004 + 212.57999999999998 1.3151308744038825E-004 + 212.63999999999999 1.2970466920159091E-004 + 212.69999999999999 1.2792095481150540E-004 + 212.75999999999999 1.2616223948752679E-004 + 212.81999999999999 1.2442872594954041E-004 + 212.88000000000000 1.2272062380390951E-004 + 212.94000000000000 1.2103811657405340E-004 + 213.00000000000000 1.1938134951786193E-004 + 213.06000000000000 1.1775043587022610E-004 + 213.12000000000000 1.1614545044327404E-004 + 213.18000000000001 1.1456645288829475E-004 + 213.24000000000001 1.1301344131041789E-004 + 213.30000000000001 1.1148638221411596E-004 + 213.36000000000001 1.0998520714335054E-004 + 213.42000000000002 1.0850979960983150E-004 + 213.48000000000002 1.0705999250293686E-004 + 213.53999999999996 1.0563559627989139E-004 + 213.59999999999997 1.0423637066891215E-004 + 213.65999999999997 1.0286205827716668E-004 + 213.71999999999997 1.0151236421436391E-004 + 213.77999999999997 1.0018697579363390E-004 + 213.83999999999997 9.8885566877285821E-005 + 213.89999999999998 9.7607810088838609E-005 + 213.95999999999998 9.6353371936482932E-005 + 214.01999999999998 9.5121906861979173E-005 + 214.07999999999998 9.3913080332807240E-005 + 214.13999999999999 9.2726553572951889E-005 + 214.19999999999999 9.1561998269383267E-005 + 214.25999999999999 9.0419086876083126E-005 + 214.31999999999999 8.9297481300891417E-005 + 214.38000000000000 8.8196855370149244E-005 + 214.44000000000000 8.7116855713984125E-005 + 214.50000000000000 8.6057136593450749E-005 + 214.56000000000000 8.5017345275459444E-005 + 214.62000000000000 8.3997115248178299E-005 + 214.68000000000001 8.2996068222727275E-005 + 214.74000000000001 8.2013826707874143E-005 + 214.80000000000001 8.1050003168333100E-005 + 214.86000000000001 8.0104212267530407E-005 + 214.92000000000002 7.9176088289185047E-005 + 214.98000000000002 7.8265248856658584E-005 + 215.03999999999996 7.7371346908239915E-005 + 215.09999999999997 7.6494032813640222E-005 + 215.15999999999997 7.5632989634624503E-005 + 215.21999999999997 7.4787909364548941E-005 + 215.27999999999997 7.3958519985246971E-005 + 215.33999999999997 7.3144560918293180E-005 + 215.39999999999998 7.2345780045177200E-005 + 215.45999999999998 7.1561938636430735E-005 + 215.51999999999998 7.0792808361950873E-005 + 215.57999999999998 7.0038180951041514E-005 + 215.63999999999999 6.9297820773200094E-005 + 215.69999999999999 6.8571511458631975E-005 + 215.75999999999999 6.7859014517994326E-005 + 215.81999999999999 6.7160085622228126E-005 + 215.88000000000000 6.6474471570604466E-005 + 215.94000000000000 6.5801907082674993E-005 + 216.00000000000000 6.5142106574748193E-005 + 216.06000000000000 6.4494780547797481E-005 + 216.12000000000000 6.3859621888396614E-005 + 216.18000000000001 6.3236309889909431E-005 + 216.24000000000001 6.2624526217821516E-005 + 216.30000000000001 6.2023934549955474E-005 + 216.36000000000001 6.1434193422224575E-005 + 216.42000000000002 6.0854948309449288E-005 + 216.48000000000002 6.0285845187948284E-005 + 216.53999999999996 5.9726514427541774E-005 + 216.59999999999997 5.9176580107648100E-005 + 216.65999999999997 5.8635668625421113E-005 + 216.71999999999997 5.8103386430666338E-005 + 216.77999999999997 5.7579341771021334E-005 + 216.83999999999997 5.7063128074079017E-005 + 216.89999999999998 5.6554346748471815E-005 + 216.95999999999998 5.6052593750722408E-005 + 217.01999999999998 5.5557475659659931E-005 + 217.07999999999998 5.5068596162153303E-005 + 217.13999999999999 5.4585583226871698E-005 + 217.19999999999999 5.4108068678542736E-005 + 217.25999999999999 5.3635710069648984E-005 + 217.31999999999999 5.3168180746984921E-005 + 217.38000000000000 5.2705183573065926E-005 + 217.44000000000000 5.2246440218677172E-005 + 217.50000000000000 5.1791690937283827E-005 + 217.56000000000000 5.1340696926671084E-005 + 217.62000000000000 5.0893232549105354E-005 + 217.68000000000001 5.0449084911248325E-005 + 217.74000000000001 5.0008045321173761E-005 + 217.80000000000001 4.9569908740444615E-005 + 217.86000000000001 4.9134466315893215E-005 + 217.92000000000002 4.8701513411487803E-005 + 217.98000000000002 4.8270829075586623E-005 + 218.03999999999996 4.7842196569186147E-005 + 218.09999999999997 4.7415397698628260E-005 + 218.15999999999997 4.6990212866122457E-005 + 218.21999999999997 4.6566428821975550E-005 + 218.27999999999997 4.6143851837311967E-005 + 218.33999999999997 4.5722306028778728E-005 + 218.39999999999998 4.5301646900185748E-005 + 218.45999999999998 4.4881763071342969E-005 + 218.51999999999998 4.4462581957680256E-005 + 218.57999999999998 4.4044074658798756E-005 + 218.63999999999999 4.3626259014861736E-005 + 218.69999999999999 4.3209192017592255E-005 + 218.75999999999999 4.2792975432008047E-005 + 218.81999999999999 4.2377745982399657E-005 + 218.88000000000000 4.1963664588058906E-005 + 218.94000000000000 4.1550917660061790E-005 + 219.00000000000000 4.1139700076504417E-005 + 219.06000000000000 4.0730205412981178E-005 + 219.12000000000000 4.0322625172889542E-005 + 219.18000000000001 3.9917126381381615E-005 + 219.24000000000001 3.9513866843863446E-005 + 219.30000000000001 3.9112973627155679E-005 + 219.36000000000001 3.8714539547146289E-005 + 219.42000000000002 3.8318638273772616E-005 + 219.48000000000002 3.7925312531704008E-005 + 219.53999999999996 3.7534585617956306E-005 + 219.59999999999997 3.7146466177781781E-005 + 219.65999999999997 3.6760945931580915E-005 + 219.71999999999997 3.6378015272542640E-005 + 219.77999999999997 3.5997658763332812E-005 + 219.83999999999997 3.5619874124661596E-005 + 219.89999999999998 3.5244665142121323E-005 + 219.95999999999998 3.4872043201492033E-005 + 220.01999999999998 3.4502036877461882E-005 + 220.07999999999998 3.4134682962523851E-005 + 220.13999999999999 3.3770027724472400E-005 + 220.19999999999999 3.3408125008148624E-005 + 220.25999999999999 3.3049031799358904E-005 + 220.31999999999999 3.2692804243179348E-005 + 220.38000000000000 3.2339498024901053E-005 + 220.44000000000000 3.1989158126414491E-005 + 220.50000000000000 3.1641818782013819E-005 + 220.56000000000000 3.1297506474224256E-005 + 220.62000000000000 3.0956234658952209E-005 + 220.68000000000001 3.0618008114974076E-005 + 220.74000000000001 3.0282816372935587E-005 + 220.80000000000001 2.9950639098626166E-005 + 220.86000000000001 2.9621452166270948E-005 + 220.92000000000002 2.9295222738755066E-005 + 220.98000000000002 2.8971912387119162E-005 + 221.03999999999996 2.8651483562739896E-005 + 221.09999999999997 2.8333896672434363E-005 + 221.15999999999997 2.8019108777483186E-005 + 221.21999999999997 2.7707079337765928E-005 + 221.27999999999997 2.7397771349025416E-005 + 221.33999999999997 2.7091146566297109E-005 + 221.39999999999998 2.6787170976437760E-005 + 221.45999999999998 2.6485816505143318E-005 + 221.51999999999998 2.6187058582226203E-005 + 221.57999999999998 2.5890886230518947E-005 + 221.63999999999999 2.5597298840855063E-005 + 221.69999999999999 2.5306309388251744E-005 + 221.75999999999999 2.5017957477251111E-005 + 221.81999999999999 2.4732304664666145E-005 + 221.88000000000000 2.4449439650975398E-005 + 221.94000000000000 2.4169482990734882E-005 + 222.00000000000000 2.3892589028642581E-005 + 222.06000000000000 2.3618947855020008E-005 + 222.12000000000000 2.3348782690659010E-005 + 222.18000000000001 2.3082344797841144E-005 + 222.24000000000001 2.2819917890377400E-005 + 222.30000000000001 2.2561806620763831E-005 + 222.36000000000001 2.2308335038218513E-005 + 222.42000000000002 2.2059838039728124E-005 + 222.48000000000002 2.1816656533253129E-005 + 222.53999999999996 2.1579129971726200E-005 + 222.59999999999997 2.1347594855973992E-005 + 222.65999999999997 2.1122376622096281E-005 + 222.71999999999997 2.0903790520802606E-005 + 222.77999999999997 2.0692143840621401E-005 + 222.83999999999997 2.0487733225721687E-005 + 222.89999999999998 2.0290847553743901E-005 + 222.95999999999998 2.0101775467090365E-005 + 223.01999999999998 1.9920814522419601E-005 + 223.07999999999998 1.9748267902155952E-005 + 223.13999999999999 1.9584453581457212E-005 + 223.19999999999999 1.9429715485176964E-005 + 223.25999999999999 1.9284420238131224E-005 + 223.31999999999999 1.9148964635554171E-005 + 223.38000000000000 1.9023775392578704E-005 + 223.44000000000000 1.8909305426719121E-005 + 223.50000000000000 1.8806035050860173E-005 + 223.56000000000000 1.8714471313276212E-005 + 223.62000000000000 1.8635136940209992E-005 + 223.68000000000001 1.8568568400941822E-005 + 223.74000000000001 1.8515312720538126E-005 + 223.80000000000001 1.8475919594708685E-005 + 223.86000000000001 1.8450942025337000E-005 + 223.92000000000002 1.8440926490668818E-005 + 223.98000000000002 1.8446425350714814E-005 + 224.03999999999996 1.8467985133450297E-005 + 224.09999999999997 1.8506155762333616E-005 + 224.15999999999997 1.8561497850698893E-005 + 224.21999999999997 1.8634580504855321E-005 + 224.27999999999997 1.8725993715401443E-005 + 224.33999999999997 1.8836355939239245E-005 + 224.39999999999998 1.8966312361957390E-005 + 224.45999999999998 1.9116549242255922E-005 + 224.51999999999998 1.9287791629191117E-005 + 224.57999999999998 1.9480810279754216E-005 + 224.63999999999999 1.9696419238420183E-005 + 224.69999999999999 1.9935476037195860E-005 + 224.75999999999999 2.0198882817451556E-005 + 224.81999999999999 2.0487579662208670E-005 + 224.88000000000000 2.0802544317516680E-005 + 224.94000000000000 2.1144782012810074E-005 + 225.00000000000000 2.1515333388626804E-005 + 225.06000000000000 2.1915259548286972E-005 + 225.12000000000000 2.2345645651993912E-005 + 225.18000000000001 2.2807600081428843E-005 + 225.24000000000001 2.3302254743342196E-005 + 225.30000000000001 2.3830768323720984E-005 + 225.36000000000001 2.4394322462812431E-005 + 225.42000000000002 2.4994133899630206E-005 + 225.48000000000002 2.5631451267057270E-005 + 225.53999999999996 2.6307564508885103E-005 + 225.59999999999997 2.7023802641544793E-005 + 225.65999999999997 2.7781545267582185E-005 + 225.71999999999997 2.8582212130598133E-005 + 225.77999999999997 2.9427271857479004E-005 + 225.83999999999997 3.0318238601097735E-005 + 225.89999999999998 3.1256666776936772E-005 + 225.95999999999998 3.2244149624197924E-005 + 226.01999999999998 3.3282323883570019E-005 + 226.07999999999998 3.4372840256057681E-005 + 226.13999999999999 3.5517377626833909E-005 + 226.19999999999999 3.6717634843495123E-005 + 226.25999999999999 3.7975314011951161E-005 + 226.31999999999999 3.9292131665449257E-005 + 226.38000000000000 4.0669796267197042E-005 + 226.44000000000000 4.2110016736690262E-005 + 226.50000000000000 4.3614496072699655E-005 + 226.56000000000000 4.5184934728523966E-005 + 226.62000000000000 4.6823016164806610E-005 + 226.68000000000001 4.8530407906047187E-005 + 226.74000000000001 5.0308764228820120E-005 + 226.80000000000001 5.2159728998338407E-005 + 226.86000000000001 5.4084919847419059E-005 + 226.92000000000002 5.6085922390236798E-005 + 226.98000000000002 5.8164298955663814E-005 + 227.03999999999996 6.0321582357795363E-005 + 227.09999999999997 6.2559255551738620E-005 + 227.15999999999997 6.4878761716768922E-005 + 227.21999999999997 6.7281493050910533E-005 + 227.27999999999997 6.9768766850725986E-005 + 227.33999999999997 7.2341861580695031E-005 + 227.39999999999998 7.5001963428928631E-005 + 227.45999999999998 7.7750195769116175E-005 + 227.51999999999998 8.0587600765188837E-005 + 227.57999999999998 8.3515127269370243E-005 + 227.63999999999999 8.6533634948199819E-005 + 227.69999999999999 8.9643904200282473E-005 + 227.75999999999999 9.2846601562965889E-005 + 227.81999999999999 9.6142291458814740E-005 + 227.88000000000000 9.9531426810929257E-005 + 227.94000000000000 1.0301433130883887E-004 + 228.00000000000000 1.0659121324108669E-004 + 228.06000000000000 1.1026213592052200E-004 + 228.12000000000000 1.1402700754870074E-004 + 228.18000000000001 1.1788557748338425E-004 + 228.24000000000001 1.2183743438504172E-004 + 228.30000000000001 1.2588198528133655E-004 + 228.36000000000001 1.3001841677696494E-004 + 228.42000000000002 1.3424575815343894E-004 + 228.48000000000002 1.3856278919643380E-004 + 228.53999999999996 1.4296810328156192E-004 + 228.59999999999997 1.4746009940415234E-004 + 228.65999999999997 1.5203692164118704E-004 + 228.71999999999997 1.5669651195246770E-004 + 228.77999999999997 1.6143661596060803E-004 + 228.83999999999997 1.6625474009161799E-004 + 228.89999999999998 1.7114818573631027E-004 + 228.95999999999998 1.7611406660353587E-004 + 229.01999999999998 1.8114926975739301E-004 + 229.07999999999998 1.8625046355665812E-004 + 229.13999999999999 1.9141411047755112E-004 + 229.19999999999999 1.9663646695528366E-004 + 229.25999999999999 2.0191355006965626E-004 + 229.31999999999999 2.0724114799565527E-004 + 229.38000000000000 2.1261481518913640E-004 + 229.44000000000000 2.1802987616043555E-004 + 229.50000000000000 2.2348135640432888E-004 + 229.56000000000000 2.2896405275807459E-004 + 229.62000000000000 2.3447248607767936E-004 + 229.68000000000001 2.4000089920951913E-004 + 229.74000000000001 2.4554328128123531E-004 + 229.80000000000001 2.5109337431865737E-004 + 229.86000000000001 2.5664462517163824E-004 + 229.92000000000002 2.6219027884077153E-004 + 229.97999999999996 2.6772334065321748E-004 + 230.03999999999996 2.7323660628997330E-004 + 230.09999999999997 2.7872270893254929E-004 + 230.15999999999997 2.8417413081650443E-004 + 230.21999999999997 2.8958313923095570E-004 + 230.27999999999997 2.9494197934264101E-004 + 230.33999999999997 3.0024268575316290E-004 + 230.39999999999998 3.0547730193463790E-004 + 230.45999999999998 3.1063778222911395E-004 + 230.51999999999998 3.1571599875900865E-004 + 230.57999999999998 3.2070377095914752E-004 + 230.63999999999999 3.2559295383223139E-004 + 230.69999999999999 3.3037530445656992E-004 + 230.75999999999999 3.3504263482593186E-004 + 230.81999999999999 3.3958672049649787E-004 + 230.88000000000000 3.4399934052970133E-004 + 230.94000000000000 3.4827234424108551E-004 + 231.00000000000000 3.5239756591410118E-004 + 231.06000000000000 3.5636695432634586E-004 + 231.12000000000000 3.6017250403346402E-004 + 231.18000000000001 3.6380632676806957E-004 + 231.24000000000001 3.6726066471642053E-004 + 231.30000000000001 3.7052795955870148E-004 + 231.36000000000001 3.7360075786881287E-004 + 231.42000000000002 3.7647187375991497E-004 + 231.47999999999996 3.7913438983530671E-004 + 231.53999999999996 3.8158159145131249E-004 + 231.59999999999997 3.8380710391408752E-004 + 231.65999999999997 3.8580482782645805E-004 + 231.71999999999997 3.8756903238702919E-004 + 231.77999999999997 3.8909432758726080E-004 + 231.83999999999997 3.9037566103649230E-004 + 231.89999999999998 3.9140844563195911E-004 + 231.95999999999998 3.9218837055426291E-004 + 232.01999999999998 3.9271158731039895E-004 + 232.07999999999998 3.9297469404687220E-004 + 232.13999999999999 3.9297465236800855E-004 + 232.19999999999999 3.9270888319254402E-004 + 232.25999999999999 3.9217526188779496E-004 + 232.31999999999999 3.9137210600979753E-004 + 232.38000000000000 3.9029817414384504E-004 + 232.44000000000000 3.8895277767470515E-004 + 232.50000000000000 3.8733563669562758E-004 + 232.56000000000000 3.8544704727744105E-004 + 232.62000000000000 3.8328775151902025E-004 + 232.68000000000001 3.8085905442790911E-004 + 232.74000000000001 3.7816274072318892E-004 + 232.80000000000001 3.7520116009701282E-004 + 232.86000000000001 3.7197716274370871E-004 + 232.92000000000002 3.6849413600546299E-004 + 232.97999999999996 3.6475603027999541E-004 + 233.03999999999996 3.6076724201372846E-004 + 233.09999999999997 3.5653269064558733E-004 + 233.15999999999997 3.5205783823815469E-004 + 233.21999999999997 3.4734864263684097E-004 + 233.27999999999997 3.4241148609842240E-004 + 233.33999999999997 3.3725330714325200E-004 + 233.39999999999998 3.3188141562671562E-004 + 233.45999999999998 3.2630364915359010E-004 + 233.51999999999998 3.2052823607802469E-004 + 233.57999999999998 3.1456384292299943E-004 + 233.63999999999999 3.0841955528034746E-004 + 233.69999999999999 3.0210475393649937E-004 + 233.75999999999999 2.9562932162987789E-004 + 233.81999999999999 2.8900343552348433E-004 + 233.88000000000000 2.8223758052103631E-004 + 233.94000000000000 2.7534260608957125E-004 + 234.00000000000000 2.6832962610800516E-004 + 234.06000000000000 2.6121002441250181E-004 + 234.12000000000000 2.5399542629432267E-004 + 234.18000000000001 2.4669768210433524E-004 + 234.24000000000001 2.3932880573880526E-004 + 234.30000000000001 2.3190097547351183E-004 + 234.36000000000001 2.2442654561234901E-004 + 234.42000000000002 2.1691792736195639E-004 + 234.47999999999996 2.0938767629700115E-004 + 234.53999999999996 2.0184838342190021E-004 + 234.59999999999997 1.9431269814543359E-004 + 234.65999999999997 1.8679328869270165E-004 + 234.71999999999997 1.7930283918543560E-004 + 234.77999999999997 1.7185401044023135E-004 + 234.83999999999997 1.6445940628436351E-004 + 234.89999999999998 1.5713158023256422E-004 + 234.95999999999998 1.4988298630988321E-004 + 235.01999999999998 1.4272598249344474E-004 + 235.07999999999998 1.3567276970017888E-004 + 235.13999999999999 1.2873538588524411E-004 + 235.19999999999999 1.2192565701776029E-004 + 235.25999999999999 1.1525518744114912E-004 + 235.31999999999999 1.0873534325759698E-004 + 235.38000000000000 1.0237718184164943E-004 + 235.44000000000000 9.6191470179493864E-005 + 235.50000000000000 9.0188631229557134E-005 + 235.56000000000000 8.4378748511921171E-005 + 235.62000000000000 7.8771523931861866E-005 + 235.68000000000001 7.3376282172212120E-005 + 235.74000000000001 6.8201942498811479E-005 + 235.80000000000001 6.3257024981596511E-005 + 235.86000000000001 5.8549622158461114E-005 + 235.92000000000002 5.4087411095613564E-005 + 235.97999999999996 4.9877637280225122E-005 + 236.03999999999996 4.5927113788959791E-005 + 236.09999999999997 4.2242205775277920E-005 + 236.15999999999997 3.8828829357517004E-005 + 236.21999999999997 3.5692432635220302E-005 + 236.27999999999997 3.2838005168924479E-005 + 236.33999999999997 3.0270031884666026E-005 + 236.39999999999998 2.7992504055694586E-005 + 236.45999999999998 2.6008896979350932E-005 + 236.51999999999998 2.4322163617455988E-005 + 236.57999999999998 2.2934702038652405E-005 + 236.63999999999999 2.1848360430155948E-005 + 236.69999999999999 2.1064420793393863E-005 + 236.75999999999999 2.0583596379607437E-005 + 236.81999999999999 2.0406016787820944E-005 + 236.88000000000000 2.0531252928892661E-005 + 236.94000000000000 2.0958288348479003E-005 + 237.00000000000000 2.1685554677950895E-005 + 237.06000000000000 2.2710922097331350E-005 + 237.12000000000000 2.4031720667346228E-005 + 237.18000000000001 2.5644748590759300E-005 + 237.24000000000001 2.7546286469633243E-005 + 237.30000000000001 2.9732117235817963E-005 + 237.36000000000001 3.2197526744894593E-005 + 237.42000000000002 3.4937325943161358E-005 + 237.47999999999996 3.7945849954949342E-005 + 237.53999999999996 4.1216970307153052E-005 + 237.59999999999997 4.4744103858222333E-005 + 237.65999999999997 4.8520220843172447E-005 + 237.71999999999997 5.2537837130475117E-005 + 237.77999999999997 5.6789037000745622E-005 + 237.83999999999997 6.1265454097607393E-005 + 237.89999999999998 6.5958309498515610E-005 + 237.95999999999998 7.0858395498413511E-005 + 238.01999999999998 7.5956097725033499E-005 + 238.07999999999998 8.1241419129609549E-005 + 238.13999999999999 8.6703979435711557E-005 + 238.19999999999999 9.2333046946269421E-005 + 238.25999999999999 9.8117550369455138E-005 + 238.31999999999999 1.0404611872100004E-004 + 238.38000000000000 1.1010709809139614E-004 + 238.44000000000000 1.1628856807959736E-004 + 238.50000000000000 1.2257837122311077E-004 + 238.56000000000000 1.2896415215189373E-004 + 238.62000000000000 1.3543336870552340E-004 + 238.68000000000001 1.4197328229220821E-004 + 238.74000000000001 1.4857104000113788E-004 + 238.80000000000001 1.5521365750017618E-004 + 238.86000000000001 1.6188804263360195E-004 + 238.92000000000002 1.6858098314484398E-004 + 238.97999999999996 1.7527923521845146E-004 + 239.03999999999996 1.8196946653457400E-004 + 239.09999999999997 1.8863833204675791E-004 + 239.15999999999997 1.9527245226759297E-004 + 239.21999999999997 2.0185845449289868E-004 + 239.27999999999997 2.0838299968450514E-004 + 239.33999999999997 2.1483279481540789E-004 + 239.39999999999998 2.2119463458317238E-004 + 239.45999999999998 2.2745542123861362E-004 + 239.51999999999998 2.3360220162685005E-004 + 239.57999999999998 2.3962218213370969E-004 + 239.63999999999999 2.4550277707839651E-004 + 239.69999999999999 2.5123160810192654E-004 + 239.75999999999999 2.5679652956137999E-004 + 239.81999999999999 2.6218576369358153E-004 + 239.88000000000000 2.6738770772482564E-004 + 239.94000000000000 2.7239113019446163E-004 + 240.00000000000000 2.7718514621931015E-004 + 240.06000000000000 2.8175921656687421E-004 + 240.12000000000000 2.8610317824693415E-004 + 240.18000000000001 2.9020726287878971E-004 + 240.24000000000001 2.9406210023281791E-004 + 240.30000000000001 2.9765877175183368E-004 + 240.36000000000001 3.0098882235549005E-004 + 240.42000000000002 3.0404418082697715E-004 + 240.47999999999996 3.0681733402577007E-004 + 240.53999999999996 3.0930126795684887E-004 + 240.59999999999997 3.1148946326187404E-004 + 240.65999999999997 3.1337595865285254E-004 + 240.71999999999997 3.1495530501928908E-004 + 240.77999999999997 3.1622271729180989E-004 + 240.83999999999997 3.1717390331391804E-004 + 240.89999999999998 3.1780526718913892E-004 + 240.95999999999998 3.1811375802805582E-004 + 241.01999999999998 3.1809691537894655E-004 + 241.07999999999998 3.1775296491956426E-004 + 241.13999999999999 3.1708070184709088E-004 + 241.19999999999999 3.1607956735454017E-004 + 241.25999999999999 3.1474959511918610E-004 + 241.31999999999999 3.1309143167356705E-004 + 241.38000000000000 3.1110634421169399E-004 + 241.44000000000000 3.0879620289604444E-004 + 241.50000000000000 3.0616345494574002E-004 + 241.56000000000000 3.0321117415252303E-004 + 241.62000000000000 2.9994301093442090E-004 + 241.68000000000001 2.9636317815034973E-004 + 241.74000000000001 2.9247646314540003E-004 + 241.80000000000001 2.8828828519909783E-004 + 241.86000000000001 2.8380454661164117E-004 + 241.92000000000002 2.7903176274293474E-004 + 241.97999999999996 2.7397690734668362E-004 + 242.03999999999996 2.6864752092306478E-004 + 242.09999999999997 2.6305163056030166E-004 + 242.15999999999997 2.5719778355044010E-004 + 242.21999999999997 2.5109489393149268E-004 + 242.27999999999997 2.4475236223490824E-004 + 242.33999999999997 2.3817993888730686E-004 + 242.39999999999998 2.3138776552667189E-004 + 242.45999999999998 2.2438628507113570E-004 + 242.51999999999998 2.1718624449785996E-004 + 242.57999999999998 2.0979866695029312E-004 + 242.63999999999999 2.0223482057015165E-004 + 242.69999999999999 1.9450617135964097E-004 + 242.75999999999999 1.8662436950404412E-004 + 242.81999999999999 1.7860124150486140E-004 + 242.88000000000000 1.7044874685871565E-004 + 242.94000000000000 1.6217897685227004E-004 + 243.00000000000000 1.5380408196388211E-004 + 243.06000000000000 1.4533633993104176E-004 + 243.12000000000000 1.3678805507735315E-004 + 243.18000000000001 1.2817157146304724E-004 + 243.24000000000001 1.1949922093874480E-004 + 243.30000000000001 1.1078334224614179E-004 + 243.36000000000001 1.0203619614250657E-004 + 243.42000000000002 9.3269980087500907E-005 + 243.47999999999996 8.4496762477775971E-005 + 243.53999999999996 7.5728468736370997E-005 + 243.59999999999997 6.6976839426799166E-005 + 243.65999999999997 5.8253402184721473E-005 + 243.71999999999997 4.9569431410972788E-005 + 243.77999999999997 4.0935930607096368E-005 + 243.83999999999997 3.2363604657484525E-005 + 243.89999999999998 2.3862830208077611E-005 + 243.95999999999998 1.5443653747875392E-005 + 244.01999999999998 7.1157531443157222E-006 + 244.07999999999998 -1.1115561159520157E-006 + 244.13999999999999 -9.2293394672873585E-006 + 244.19999999999999 -1.7229037540966884E-005 + 244.25999999999999 -2.5102487126176610E-005 + 244.31999999999999 -3.2841910587305041E-005 + 244.38000000000000 -4.0439927033096206E-005 + 244.44000000000000 -4.7889546776592273E-005 + 244.50000000000000 -5.5184187405170164E-005 + 244.56000000000000 -6.2317662816743975E-005 + 244.62000000000000 -6.9284200968423648E-005 + 244.68000000000001 -7.6078435527796864E-005 + 244.74000000000001 -8.2695418563119962E-005 + 244.80000000000001 -8.9130630470442098E-005 + 244.86000000000001 -9.5379973543771582E-005 + 244.92000000000002 -1.0143977086562276E-004 + 244.97999999999996 -1.0730677738668286E-004 + 245.03999999999996 -1.1297818031905866E-004 + 245.09999999999997 -1.1845159291357161E-004 + 245.15999999999997 -1.2372505051355906E-004 + 245.21999999999997 -1.2879699001583006E-004 + 245.27999999999997 -1.3366626104638970E-004 + 245.33999999999997 -1.3833209755083646E-004 + 245.39999999999998 -1.4279411960339158E-004 + 245.45999999999998 -1.4705230428956628E-004 + 245.51999999999998 -1.5110698906981322E-004 + 245.57999999999998 -1.5495885124484801E-004 + 245.63999999999999 -1.5860889487119998E-004 + 245.69999999999999 -1.6205844049820977E-004 + 245.75999999999999 -1.6530911157884798E-004 + 245.81999999999999 -1.6836280544184842E-004 + 245.88000000000000 -1.7122171836635668E-004 + 245.94000000000000 -1.7388830960139744E-004 + 246.00000000000000 -1.7636528146723569E-004 + 246.06000000000000 -1.7865560234704776E-004 + 246.12000000000000 -1.8076245506322387E-004 + 246.18000000000001 -1.8268922170341055E-004 + 246.24000000000001 -1.8443948702190428E-004 + 246.30000000000001 -1.8601702619552222E-004 + 246.36000000000001 -1.8742577016965490E-004 + 246.42000000000002 -1.8866979773695687E-004 + 246.47999999999996 -1.8975328598858446E-004 + 246.53999999999996 -1.9068055030174196E-004 + 246.59999999999997 -1.9145598349411112E-004 + 246.65999999999997 -1.9208404995838205E-004 + 246.71999999999997 -1.9256929398665587E-004 + 246.77999999999997 -1.9291629118615676E-004 + 246.83999999999997 -1.9312968357987508E-004 + 246.89999999999998 -1.9321414282902461E-004 + 246.95999999999998 -1.9317434897808057E-004 + 247.01999999999998 -1.9301503459905804E-004 + 247.07999999999998 -1.9274093516410918E-004 + 247.13999999999999 -1.9235681320772455E-004 + 247.19999999999999 -1.9186742012520621E-004 + 247.25999999999999 -1.9127755536836821E-004 + 247.31999999999999 -1.9059195274341199E-004 + 247.38000000000000 -1.8981537926563466E-004 + 247.44000000000000 -1.8895253971232506E-004 + 247.50000000000000 -1.8800809819516709E-004 + 247.56000000000000 -1.8698668408667976E-004 + 247.62000000000000 -1.8589280855643874E-004 + 247.68000000000001 -1.8473094200542625E-004 + 247.74000000000001 -1.8350541961355840E-004 + 247.80000000000001 -1.8222046362390449E-004 + 247.86000000000001 -1.8088018280847153E-004 + 247.92000000000002 -1.7948856775115048E-004 + 247.97999999999996 -1.7804945491085676E-004 + 248.03999999999996 -1.7656653461370890E-004 + 248.09999999999997 -1.7504340950795654E-004 + 248.15999999999997 -1.7348352000492624E-004 + 248.21999999999997 -1.7189017103117721E-004 + 248.27999999999997 -1.7026657340304813E-004 + 248.33999999999997 -1.6861583646318265E-004 + 248.39999999999998 -1.6694095780664278E-004 + 248.45999999999998 -1.6524482964284733E-004 + 248.51999999999998 -1.6353026159398524E-004 + 248.57999999999998 -1.6179996205921285E-004 + 248.63999999999999 -1.6005656808122475E-004 + 248.69999999999999 -1.5830259820469357E-004 + 248.75999999999999 -1.5654044757407799E-004 + 248.81999999999999 -1.5477241684736537E-004 + 248.88000000000000 -1.5300069204877420E-004 + 248.94000000000000 -1.5122732316550085E-004 + 249.00000000000000 -1.4945422232365594E-004 + 249.06000000000000 -1.4768317571535230E-004 + 249.12000000000000 -1.4591582047653173E-004 + 249.18000000000001 -1.4415366288503452E-004 + 249.24000000000001 -1.4239803003608147E-004 + 249.30000000000001 -1.4065017101539231E-004 + 249.36000000000001 -1.3891118265103221E-004 + 249.42000000000002 -1.3718205886001429E-004 + 249.47999999999996 -1.3546367439547634E-004 + 249.53999999999996 -1.3375683179359815E-004 + 249.59999999999997 -1.3206225190146424E-004 + 249.65999999999997 -1.3038056694323922E-004 + 249.71999999999997 -1.2871237968837255E-004 + 249.77999999999997 -1.2705823036925155E-004 + 249.83999999999997 -1.2541861012571980E-004 + 249.89999999999998 -1.2379396616448964E-004 + 249.95999999999998 -1.2218471581468696E-004 + 250.01999999999998 -1.2059121344865956E-004 + 250.07999999999998 -1.1901377930000339E-004 + 250.13999999999999 -1.1745267489178735E-004 + 250.19999999999999 -1.1590812693077315E-004 + 250.25999999999999 -1.1438029368025331E-004 + 250.31999999999999 -1.1286928921401425E-004 + 250.38000000000000 -1.1137517117044462E-004 + 250.44000000000000 -1.0989794540994682E-004 + 250.50000000000000 -1.0843756880742600E-004 + 250.56000000000000 -1.0699395669047346E-004 + 250.62000000000000 -1.0556698376391070E-004 + 250.68000000000001 -1.0415649144435432E-004 + 250.74000000000001 -1.0276229676042372E-004 + 250.80000000000001 -1.0138421595193917E-004 + 250.86000000000001 -1.0002203166095992E-004 + 250.92000000000002 -9.8675536665090608E-005 + 250.97999999999996 -9.7344513370240817E-005 + 251.03999999999996 -9.6028754876517560E-005 + 251.09999999999997 -9.4728046642823371E-005 + 251.15999999999997 -9.3442172714423158E-005 + 251.21999999999997 -9.2170941466673359E-005 + 251.27999999999997 -9.0914144819995938E-005 + 251.33999999999997 -8.9671575723154049E-005 + 251.39999999999998 -8.8443041341861365E-005 + 251.45999999999998 -8.7228335143442213E-005 + 251.51999999999998 -8.6027251838156660E-005 + 251.57999999999998 -8.4839583095532354E-005 + 251.63999999999999 -8.3665123230119583E-005 + 251.69999999999999 -8.2503664664302485E-005 + 251.75999999999999 -8.1355001820388847E-005 + 251.81999999999999 -8.0218937437542899E-005 + 251.88000000000000 -7.9095258093229650E-005 + 251.94000000000000 -7.7983787058899054E-005 diff --git a/seisflows/tests/test_data/test_solver/mainsolver b/seisflows/tests/test_data/test_solver/mainsolver new file mode 120000 index 00000000..0f301668 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/mainsolver @@ -0,0 +1 @@ +001 \ No newline at end of file diff --git a/seisflows/tests/test_data/test_solver/sources/CMTSOLUTION_001 b/seisflows/tests/test_data/test_solver/sources/CMTSOLUTION_001 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/sources/CMTSOLUTION_001 @@ -0,0 +1 @@ + diff --git a/seisflows/tests/test_data/test_solver/sources/CMTSOLUTION_002 b/seisflows/tests/test_data/test_solver/sources/CMTSOLUTION_002 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/sources/CMTSOLUTION_002 @@ -0,0 +1 @@ + diff --git a/seisflows/tests/test_data/test_solver/sources/SOURCE_001 b/seisflows/tests/test_data/test_solver/sources/SOURCE_001 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/sources/SOURCE_001 @@ -0,0 +1 @@ + diff --git a/seisflows/tests/test_data/test_solver/sources/SOURCE_002 b/seisflows/tests/test_data/test_solver/sources/SOURCE_002 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/seisflows/tests/test_data/test_solver/sources/SOURCE_002 @@ -0,0 +1 @@ + diff --git a/seisflows/tests/test_data/test_tools/test_file_formats/proc000000_rho_vp_vs.dat b/seisflows/tests/test_data/test_tools/test_file_formats/proc000000_rho_vp_vs.dat new file mode 100644 index 00000000..1d964709 --- /dev/null +++ b/seisflows/tests/test_data/test_tools/test_file_formats/proc000000_rho_vp_vs.dat @@ -0,0 +1,3 @@ + 0.00000E+0000 0.00000E+0000 0.26000E+0004 0.58000E+0004 0.35000E+0004 + 0.20721E+0004 0.00000E+0000 0.26000E+0004 0.58000E+0004 0.35000E+0004 + 0.60000E+0004 0.00000E+0000 0.26000E+0004 0.58000E+0004 0.35000E+0004 diff --git a/seisflows/tests/test_data/test_tools/test_file_formats/proc000000_vp.bin b/seisflows/tests/test_data/test_tools/test_file_formats/proc000000_vp.bin new file mode 100644 index 00000000..250dae68 Binary files /dev/null and b/seisflows/tests/test_data/test_tools/test_file_formats/proc000000_vp.bin differ diff --git a/seisflows/tests/test_data/test_tools/test_file_formats/proc000000_vs.bin b/seisflows/tests/test_data/test_tools/test_file_formats/proc000000_vs.bin new file mode 100644 index 00000000..3474f705 Binary files /dev/null and b/seisflows/tests/test_data/test_tools/test_file_formats/proc000000_vs.bin differ diff --git a/seisflows/tests/test_data/workdir/error_sf3.txt b/seisflows/tests/test_data/workdir/error_sf3.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows/tests/test_data/workdir/output_sf3.txt b/seisflows/tests/test_data/workdir/output_sf3.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows/tests/test_data/workdir/parameters.yaml b/seisflows/tests/test_data/workdir/parameters.yaml deleted file mode 100644 index e69de29b..00000000 diff --git a/seisflows/tests/test_modules.py b/seisflows/tests/test_modules.py deleted file mode 100644 index 9b8dad04..00000000 --- a/seisflows/tests/test_modules.py +++ /dev/null @@ -1,177 +0,0 @@ -""" -General test suite for all SeisFlows modules. Defines required parameters and -functions for each of the modules, tests importing each of the modules and that -each of the required parameters and functions exist. A sort of first-pass test -which makes sure the package is set up correctly. -""" -import os -import sys -import shutil -import pytest -from unittest.mock import patch -from seisflows import config -from seisflows.seisflows import SeisFlows, return_modules - - -# Define dictionary dictating the bare-minimum SeisFlows structure. -# Each subclass will be checked to see if it meets these requirements which -# ensure that the package will work as intended. The required functions are -# determined by whether or not other submodules call for these functions, e.g., -# an inversion workflow will call solver.eval_func() -required_structure = { - "system": { - "parameters": [], - "functions": ["required", "check", "setup", "submit", "run", - "taskid", "checkpoint"] - }, - "preprocess": { - "parameters": [], - "functions": ["required", "check", "setup", "prepare_eval_grad", - "sum_residuals", "finalize"] - }, - "solver": { - "parameters": ["MATERIALS", "DENSITY", "ATTENUATION"], - "functions": ["required", "check", "setup", "generate_data", - "generate_mesh", "eval_func", "eval_grad", "load", - "save", "merge", "split", "source_names", "parameters"] - }, - "postprocess": { - "parameters": [], - "functions": ["check", "setup", "write_gradient"] - }, - "optimize": { - "parameters": [], - "functions": ["setup", "check", "compute_direction", - "initialize_search", "update_search", - "finalize_search", "retry_status", - "restart", "save", "load"] - }, - "workflow": { - "parameters": ["CASE"], - "functions": ["check", "main", "checkpoint"] - }, -} - -# Just make sure that the structure here is dictated by the Config -assert(set(required_structure.keys()) == set(config.NAMES)) - -# Define some re-used paths -TEST_DIR = os.path.join(config.ROOT_DIR, "tests") -REPO_DIR = os.path.abspath(os.path.join(config.ROOT_DIR, "..")) - - -@pytest.fixture -def copy_par_file(tmpdir): - """ - Copy the template parameter file into the temporary test directory - :rtype: str - :return: location of the parameter file - """ - src = os.path.join(TEST_DIR, "test_data", "test_filled_parameters.yaml") - dst = os.path.join(tmpdir, "parameters.yaml") - shutil.copy(src, dst) - - -@pytest.fixture -def sfinit(tmpdir, copy_par_file): - """ - Re-used function that will initate a SeisFlows working environment in - sys modules - :return: - """ - copy_par_file - os.chdir(tmpdir) - with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - sf._register(force=True) - config.init_seisflows(check=False) - - return sf - - -def test_import(sfinit): - """ - Test code by importing all available classes for this module. - If any of these fails then the module itself has some code error - (e.g., syntax errors, inheritance errors). - """ - sfinit - for name in config.NAMES: - modules = return_modules()[name] - for package, module_list in modules.items(): - for module in module_list: - config.custom_import(name, module)() - - -def test_required_parameters_exist(sfinit): - """ - Ensure that the required parameters are set in all the classes/subclasses - That is, that the parameters defined above in REQUIRED_PARAMETERS have been - defined by each SYSTEM class - """ - sfinit - for name in config.NAMES: - for package, module_list in return_modules()[name].items(): - for module in module_list: - loaded_module = config.custom_import(name, module)() - sf_pp = loaded_module.required - # Check that required parameters are set - for req_par in required_structure[name]["parameters"]: - assert(req_par in sf_pp.parameters.keys()), \ - f"{req_par} is a required parameter for module: " \ - f"{name}.{module}" - - -def test_required_functions_exist(sfinit): - """ - Make sure that the named, required functions exist within the class - Do not execute just make sure they're defined, because they will be - expected by other modules - """ - sfinit - for name in config.NAMES: - for package, module_list in return_modules()[name].items(): - for module in module_list: - loaded_module = config.custom_import(name, module)() - # Check that required parameters are set - for func in required_structure[name]["functions"]: - assert(func in dir(loaded_module)), \ - f"{func} is a required function for module: " \ - f"{name}.{module}" - - -def test_setup(sfinit, modules): - """ - Test the expected behavior of each of the rqeuired functions. - - Setup: make sure that setup creates the necessary directory structure - - :param sfinit: - :param modules: - :return: - """ - return - sf = sfinit - PATH = sys.modules["seisflows_paths"] - SETUP_CREATES = [PATH.SCRATCH, PATH.SYSTEM, PATH.OUTPUT] - - for package, module_list in modules.items(): - for module in module_list: - loaded_module = config.custom_import(MODULE, module)() - - # Make sure these don't already exist - for path_ in SETUP_CREATES: - assert(not os.path.exists(path_)) - - loaded_module.setup() - - # Check that the minimum required directories were created - for path_ in SETUP_CREATES: - assert(os.path.exists(path_)) - - # Remove created paths so we can check the next module - for path_ in SETUP_CREATES: - if os.path.isdir(path_): - shutil.rmtree(path_) - else: - os.remove(path_) \ No newline at end of file diff --git a/seisflows/tests/test_optimize.py b/seisflows/tests/test_optimize.py new file mode 100644 index 00000000..cf157cda --- /dev/null +++ b/seisflows/tests/test_optimize.py @@ -0,0 +1,452 @@ +""" +Test the optimization module by setting up a Rosenbrock optimization problem +and running line search +""" +import os +import pytest +import numpy as np +import matplotlib.pyplot as plt +from seisflows.tools.config import Dict +from seisflows.tools.model import Model +from seisflows.tools.math import angle +from seisflows.optimize.gradient import Gradient +from seisflows.optimize.LBFGS import LBFGS +from seisflows.optimize.NLCG import NLCG + + +def rosenbrock_objective_function(x): + """ + Rosenbrock objective function used to test the optimization module. + The Rosenbrock is defined mathematically as: + + f(x,y) = (a-x)^2 + b(y-x^2)^2 + + where the global minimum is at (x,y) == (a, a^2) + and typical constant values are: a==1, b==100 + + https://en.wikipedia.org/wiki/Rosenbrock_function + + :type x: np.array + :param x: input model [x, y] to feed into the objective function + :rtype: float + :return: misfit value for the given input model + """ + return (1 - x[0]) ** 2 + 100 * (-x[0] ** 2 + x[1]) ** 2 + + +def rosenbrock_gradient(x): + """ + Define the gradient of the Rosenbrock function, i.e., the gradient of the + `rosenbrock_objective_function` + + :type x: np.array + :param x: input model [x, y] to feed into the gradient of the obj function + :rtype: np.array + :return: gradient vector of the Rosenbrock function + """ + return np.array([-2 * (1 - x[0]) - 400 * x[0] * (-x[0] ** 2 + x[1]), + 200 * (- x[0] ** 2 + x[1])]) + + +@pytest.fixture +def setup_optimization_vectors(tmpdir): + """ + Create vectors required for a Rosenbrock optimization problem to be used + to test the line search and optimization algorithms. + + .. note:: + The optimization module requires a model (m_new), corresponding + misfit of that model (f_new), the gradient of that misfit + function (g_new) and a search direction (p_new; calculated by each + individual optimization sub-class) + """ + m_init = Model() + m_init.model = Dict(x=[np.array([-1.2, 1])]) # Starting guess for Rosenbrock + m_init.save(path=os.path.join(tmpdir, "m_new.npz")) + + # Calculate the misfit and save as a text file + misfit = rosenbrock_objective_function(x=m_init.vector) + np.savetxt(os.path.join(tmpdir, "f_new.txt"), [misfit]) + + # Calcualte the gradient and save as a Model + gradient = rosenbrock_gradient(x=m_init.vector) + g_new = m_init.copy() + g_new.update(vector=gradient) + g_new.save(path=os.path.join(tmpdir, "g_new.npz")) + + +def test_gradient_compute_direction(tmpdir, setup_optimization_vectors): + """ + Ensure that gradient computes the correct search direction. The gradient + vector created by the Rosenbrock function is expected to be [-215.6, -88.] + """ + optimize = Gradient(path_optimize=tmpdir) + + # Check that setup created the correct gradient vector + g_new = optimize.load_vector("g_new") + assert(g_new.vector.sum() == pytest.approx(-303.59, 3)) + + # Gradient descent search direction is just the negative gradient + p_new = optimize.compute_direction() + assert(p_new.vector.sum() == pytest.approx(303.59, 3)) + + +def test_gradient_initialize_search(tmpdir, setup_optimization_vectors): + """ + Test that the optimization module properly initializes the line search by + providing a new model and misfit value. + + Initialize search requres 4 vectors to properly intialize the search, + they are 'm_new' (model), 'g_new' (gradient), 'p_new' (search direciton_ + and 'f_new' (misfit) + """ + optimize = Gradient(path_optimize=tmpdir) + p_new = optimize.compute_direction() + p_new.save(path=os.path.join(tmpdir, "p_new")) + + m_try, alpha = optimize.initialize_search() + + assert(m_try.vector[0] == pytest.approx(-1.14, 3)) + assert(m_try.vector[1] == pytest.approx(1.02, 3)) + assert(alpha == pytest.approx(2.789e-4, 4)) + + +def test_gradient_update_line_search(tmpdir, setup_optimization_vectors): + """ + Ensure that updating the line search works as advertised, i.e., we get a + status on how the line search should proceed + """ + optimize = Gradient(path_optimize=tmpdir) + p_new = optimize.compute_direction() + p_new.save(path=os.path.join(tmpdir, "p_new")) + + m_try, alpha = optimize.initialize_search() + optimize.save_vector("m_try", m_try) + optimize.save_vector("alpha", alpha) + + f_try = rosenbrock_objective_function(m_try.vector) + np.savetxt(os.path.join(tmpdir, "f_try.txt"), [f_try]) + + m_try, status, status = optimize.update_line_search() + assert(status == "TRY") + assert(optimize._line_search.step_count == 1) + assert(optimize._line_search.func_vals[1] == f_try) + + +def test_bracket_line_search(tmpdir, setup_optimization_vectors): + """ + Run a small optimization problem to try to reduce the Rosenbrock + objective function using the Bracket'ing line search method. Checks that the + line search only takes a few steps and that the reduced misfit value is + as expected. + """ + optimize = Gradient(path_optimize=tmpdir, path_output=tmpdir, + line_search_method="bracket", step_count_max=100) + + # Make sure the initial misfit is high + assert(optimize.load_vector("f_new") == pytest.approx(24.2, 1)) + + # Calculate the initial search direction which is just the inverse gradient + p_new = optimize.compute_direction() + p_new.save(path=os.path.join(tmpdir, "p_new")) + + # Saves trial model 'm_try' and corresponding step length 'alpha' + m_try, alpha = optimize.initialize_search() + optimize.save_vector("m_try", m_try) + optimize.save_vector("alpha", alpha) + + def line_search(): + """Each line search evaluation requires calculating a new model and + corresponding misfit value""" + m_try = optimize.load_vector("m_try") + f_try = rosenbrock_objective_function(m_try.vector) + np.savetxt(os.path.join(tmpdir, "f_try.txt"), [f_try]) + + m_try, alpha, status = optimize.update_line_search() + optimize.save_vector("m_try", m_try) + optimize.save_vector("alpha", alpha) + return status + + # Run a line search until acceptable misfit reduction + while True: + status = line_search() + if status == "PASS": + break + + assert(status == "PASS") # pass + assert(optimize.step_count == 4) # Took 4 steps to reduce misfit + # Make sure we have reduced the final misfit + assert(min(optimize._line_search.func_vals) == pytest.approx(4.22, 3)) + + # Change model names and reset line search + optimize.finalize_search() + + # Check that the final model + m_new = optimize.load_vector("m_new") + m_old = optimize.load_vector("m_old") + m_angle = angle(m_new.vector, m_old.vector) + assert(m_angle == pytest.approx(0.3, 2)) + + +def test_optimize_checkpoint_reload(tmpdir): + """ + Checkpointing is used to store the status of the optimization module + in the case of a failed or re-started workflow. Test that this works as + advertised + """ + rand_val = 123 + optimize = Gradient(path_optimize=tmpdir) + optimize._line_search.step_count = rand_val + optimize.checkpoint() + + new_optimize = Gradient(path_optimize=tmpdir) + new_optimize.load_checkpoint() + assert(new_optimize.step_count == rand_val) + + +def test_optimize_attempt_line_search_restart(tmpdir, + setup_optimization_vectors): + """ + Make sure we can tell when we're supposed to attempt a line search restart, + i.e., when the gradient and search direction are the same + """ + optimize = Gradient(path_optimize=tmpdir) + p_new = optimize.compute_direction() + p_new.save(path=os.path.join(tmpdir, "p_new")) + + # this query requires 'g_new' and 'p_new' + assert(optimize.attempt_line_search_restart() == False) + + p_new.update(vector=np.array([-99.99, -99.99])) + p_new.save(path=os.path.join(tmpdir, "p_new")) + assert(optimize.attempt_line_search_restart() == True) + + +def test_line_search_recover_from_failure(tmpdir, setup_optimization_vectors): + """ + Run a small optimization problem to try to reduce the Rosenbrock + objective function using the Bracket'ing line search method. Simulate a job + failure during the line search, and attempts to recover the line search + from a checkpointed state, mimicing a real life inversion where a line + search might fail a job (forward simulation), and we do not want to have to + run the line search from the beginning. + """ + optimize = Gradient(path_optimize=tmpdir, path_output=tmpdir, + line_search_method="bracket", step_count_max=100) + + # Make sure the initial misfit is high + assert(optimize.load_vector("f_new") == pytest.approx(24.2, 1)) + + # Calculate the initial search direction which is just the inverse gradient + p_new = optimize.compute_direction() + p_new.save(path=os.path.join(tmpdir, "p_new")) + + # Saves trial model 'm_try' and corresponding step length 'alpha' + m_try, alpha = optimize.initialize_search() + optimize.save_vector("m_try", m_try) + optimize.save_vector("alpha", alpha) + + def line_search(_optimize, allow_break=True): + """Each line search evaluation requires calculating a new model and + corresponding misfit value. Simulate a break at a given step count""" + m_try = _optimize.load_vector("m_try") + f_try = rosenbrock_objective_function(m_try.vector) + + # Line search is most likely to break at the function evaluation + # break mimics a job failure on cluster, before `f_try` has been saved + if allow_break and _optimize.step_count == 3: + return "BREAK" + + np.savetxt(os.path.join(tmpdir, "f_try.txt"), [f_try]) + + m_try, alpha, status = _optimize.update_line_search() + _optimize.save_vector("m_try", m_try) + _optimize.save_vector("alpha", alpha) + return status + + # Run a line search until the line search breaks + while True: + status = line_search(optimize, allow_break=True) + if status == "PASS": + break + elif status == "BREAK": + optimize.checkpoint() + break + + # Try to restart the line search by re-instantiating from a checkpoint with + # a newly instantiated optimization module + optimize_restarted = Gradient(path_optimize=tmpdir, path_output=tmpdir, + line_search_method="bracket", + step_count_max=100) + optimize_restarted.load_checkpoint() + assert(optimize_restarted.step_count == 3) + while True: + status = line_search(optimize_restarted, allow_break=False) + if status == "PASS": + break + + # The rest of this is copied from `test_bracket_line_search` which completes + # a successful line search. So if these values are the same then we know + # we have successfully restarted a line search + assert(status == "PASS") # pass + assert(optimize_restarted.step_count == 4) # Took 4 steps to reduce misfit + # Make sure we have reduced the final misfit + assert(min(optimize_restarted._line_search.func_vals) == + pytest.approx(4.22, 3)) + + # Change model names and reset line search + optimize_restarted.finalize_search() + + # Check that the final model + m_new = optimize_restarted.load_vector("m_new") + m_old = optimize_restarted.load_vector("m_old") + m_angle = angle(m_new.vector, m_old.vector) + assert(m_angle == pytest.approx(0.3, 2)) + + +def _test_inversion_optimization_problem_general(optimize, iterations=250): + """ + Rather than run a single line search evaluation, which all the previous + tests have done, we want to run a inversion workflow to find a best fitting + model. To do this we essentially have to mimic the inversion workflow, but + with barebones functions. + + This function is written to be general, other tests should populate the + `optimize` input parameter with instantiated Optimization modules. + + .. note:: + We do not save `m_try` to disk each time it is evaluated because it is + small. However in real workflows, `m_try` must be saved to disk rather + than passed in memory because it is likely to be a large vector. + + .. note:: + This replaces `workflow.test_optimize` from original code + + :type optimize: module + :param optimize: specific SeisFlows optimization module to test + :type iterations: int + :param iterations: number of iterations to run. defaults to 250 + """ + m_init = Model() + m_init.model = Dict(x=[np.array([-1.2, 1])]) # Initial guess for Rosenbrock + optimize.save_vector("m_new", m_init) + + m_true = m_init.copy() + m_true.update(vector=np.array([1., 1.])) # Rosenbrock global minimum + + # N allowable iterations, but reaching global min. will stop inversion + inversion_status = "DNF" # finished + for iteration in range(iterations): + # Step 1: Evaluate the objective function for given model 'm_new' + m_new = optimize.load_vector("m_new") + f_new = rosenbrock_objective_function(x=m_new.vector) + optimize.save_vector("f_new", f_new) + # Step 2: Evaluate the gradient of the objective function + gradient = rosenbrock_gradient(x=m_new.vector) + g_new = m_new.copy() + g_new.update(vector=gradient) + optimize.save_vector("g_new", g_new) + # Step 3: Compute the search direction using the gradient + p_new = optimize.compute_direction() + optimize.save_vector("p_new", p_new) + # Step 4a: Set up the line search with a trial model `m_try` + m_try, alpha = optimize.initialize_search() + optimize.save_vector("alpha", alpha) + # Step 4b: Run the line search w/ various trial models 'til lower misfit + while True: + f_try = rosenbrock_objective_function(m_try.vector) + optimize.save_vector("f_try", f_try) + # Will look for the previously saved 'alpha' value + m_try, alpha, status = optimize.update_line_search() + if status == "PASS": + break + elif status == "FAIL": + return optimize, status + else: + optimize.save_vector("alpha", alpha) + optimize.save_vector("m_try", m_try) + # Set up for the next iteration, most importantly `m_try` -> `m_new` + optimize.finalize_search() + + # Figure out how far the updated model is from global minimum + m_diff = np.linalg.norm(m_new.vector - m_true.vector) + m_diff /= np.linalg.norm(m_new.vector) + if m_diff < 1e-3: + inversion_status = "FIN" # finished + break + + return optimize, inversion_status + + +def test_inversion_optimization_problem_with_gradient( + tmpdir, setup_optimization_vectors): + """Wrapper function to test the Gradient descent optimization problem""" + gradient = Gradient(path_optimize=tmpdir, path_output=tmpdir, + step_count_max=40) + optimize, status = _test_inversion_optimization_problem_general(gradient) + + # Just check a few of the stats file outputs to make sure this runs right + assert(os.path.exists(optimize.path._stats_file)) + stats = np.genfromtxt(optimize.path._stats_file, delimiter=",", names=True) + assert(status == "DNF") # Did Not Finish + assert(len(stats) == 250.) # Fails to reach global minimum + assert(stats["misfit"].min() == pytest.approx(0.1638, 3)) + assert(stats["if_restarted"].sum() == 0.) + + # Make plot in the tmpdir incase we need to debug the misfit reduction + if True: + plt.plot(stats["misfit"], "go-", markersize=2) + plt.title("Gradient descent misfit; Rosenbrock problem") + plt.xlabel("Iteration") + plt.ylabel("Misfit") + plt.axhline(1e-3, c="k") + plt.savefig(os.path.join(tmpdir, "gradient_misfit.png")) + + +def test_inversion_optimization_problem_with_LBFGS( # NOQA + tmpdir, setup_optimization_vectors): + """Wrapper function to test the L-BFGS descent optimization problem""" + lbfgs = LBFGS(path_optimize=tmpdir, path_output=tmpdir, + line_search_method="backtrack") + os.mkdir(lbfgs.path._LBFGS) + optimize, status = _test_inversion_optimization_problem_general(lbfgs) + + # Just check a few of the stats file outputs to make sure this runs right + assert(os.path.exists(optimize.path._stats_file)) + stats = np.genfromtxt(optimize.path._stats_file, delimiter=",", names=True) + assert(status == "FIN") + assert(len(stats) == 53.) # reaches global min. in 95 iterations + assert(stats["misfit"].min() == pytest.approx(1.043e-7, 3)) + assert(stats["if_restarted"].sum() == 1.) # 1 restart + + if True: + plt.plot(stats["misfit"], "ro-", markersize=2) + plt.title("L-BFGS misfit; Rosenbrock problem") + plt.xlabel("Iteration") + plt.ylabel("Misfit") + plt.axhline(1e-3, c="k") + plt.savefig(os.path.join(tmpdir, "lbfgs_misfit.png")) + + +def test_inversion_optimization_problem_with_NLCG( # NOQA + tmpdir, setup_optimization_vectors): + # NLCG will need more step counts + nlcg = NLCG(path_optimize=tmpdir, path_output=tmpdir, + step_count_max=40) + optimize, status = _test_inversion_optimization_problem_general(nlcg) + + # Just check a few of the stats file outputs to make sure this runs right + assert(os.path.exists(optimize.path._stats_file)) + stats = np.genfromtxt(optimize.path._stats_file, delimiter=",", names=True) + assert(status == "FIN") + assert(len(stats) == 46.) # Fails to reach global minimum + assert(stats["misfit"].min()) == pytest.approx(3.693E-5, 3) + assert(stats["if_restarted"].sum() == 1.) + + if True: + plt.plot(stats["misfit"], "bo-", markersize=2) + plt.title("NLCG misfit; Rosenbrock problem") + plt.xlabel("Iteration") + plt.ylabel("Misfit") + plt.axhline(1e-3, c="k") + plt.savefig(os.path.join(tmpdir, "nlcg_misfit.png")) diff --git a/seisflows/tests/test_preprocess.py b/seisflows/tests/test_preprocess.py index 7fb418d1..957ceea3 100644 --- a/seisflows/tests/test_preprocess.py +++ b/seisflows/tests/test_preprocess.py @@ -1,153 +1,209 @@ """ -Test suite for the SeisFlows system module, which controls interaction with -various compute systems +Test the ability of the Solver module to interact with various versions of +SPECFEM """ import os -import sys -import shutil +import numpy as np import pytest -from unittest.mock import patch -from seisflows import config -from seisflows.seisflows import SeisFlows, return_modules +from glob import glob +from seisflows import ROOT_DIR +from seisflows.tools import unix +from seisflows.preprocess.default import Default +from seisflows.preprocess.pyaflowa import Pyaflowa -# The module that we're testing, allows for copy-pasting these test suites -MODULE = "preprocess" +TEST_DATA = os.path.join(ROOT_DIR, "tests", "test_data", "test_preprocess") +TEST_SOLVER = os.path.join(ROOT_DIR, "tests", "test_data", "test_solver") -# Ensures that these parameters are always defined, even when using subclasses -REQUIRED_PARAMETERS = [] -REQUIRED_FUNCTIONS = ["required", "check", "setup", "prepare_eval_grad", - "sum_residuals", "finalize"] -# Define some re-used paths -TEST_DIR = os.path.join(config.ROOT_DIR, "tests") -REPO_DIR = os.path.abspath(os.path.join(config.ROOT_DIR, "..")) - - -@pytest.fixture -def copy_par_file(tmpdir): +def test_default_read(): """ - Copy the template parameter file into the temporary test directory - :rtype: str - :return: location of the parameter file + Test that we can read SPECFEM generated synthetics with the preprocess mod. """ - src = os.path.join(TEST_DIR, "test_data", "test_filled_parameters.yaml") - dst = os.path.join(tmpdir, "parameters.yaml") - shutil.copy(src, dst) + # If new data formats are added to preprocess, they need to be tested + tested_data_formats = ["ASCII", "SU"] + preprocess = Default() + assert(set(tested_data_formats) == set(preprocess._acceptable_data_formats)) + + preprocess = Default(data_format="ascii") + st1 = preprocess.read(os.path.join(TEST_DATA, "AA.S0001.BXY.semd")) + + preprocess = Default(data_format="su") + st2 = preprocess.read(os.path.join(TEST_DATA, "Uy_file_single_d.su")) + + assert(st1[0].stats.npts == st2[0].stats.npts) -@pytest.fixture -def modules(): +def test_default_write(tmpdir): """ - Return a list of subclasses that falls under the System module + Make sure we can write both data formats """ - return return_modules()[MODULE] + # If new data formats are added to preprocess, they need to be tested + tested_data_formats = ["ASCII", "SU"] + preprocess = Default() + assert(set(tested_data_formats) == set(preprocess._acceptable_data_formats)) + preprocess = Default(data_format="ascii") + st1 = preprocess.read(os.path.join(TEST_DATA, "AA.S0001.BXY.semd")) + preprocess.write(st1, fid=os.path.join(tmpdir, "test_stream_ascii")) -@pytest.fixture -def sfinit(tmpdir, copy_par_file): + preprocess.data_format = "SU" + preprocess.write(st1, fid=os.path.join(tmpdir, "test_stream_su")) + + +def test_default_initialize_adjoint_traces(tmpdir): """ - Re-used function that will initate a SeisFlows working environment in - sys modules - :return: + Make sure we can write empty adjoint sources expected by SPECFEM """ - # Ensure that there is not a currently active working state - config.flush() + preprocess = Default(data_format="ascii") + data_filenames = glob(os.path.join(TEST_DATA, "*semd")) + preprocess.initialize_adjoint_traces(data_filenames=data_filenames, + output=tmpdir) - copy_par_file - os.chdir(tmpdir) - with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - sf._register(force=True) - config.init_seisflows(check=False) + preprocess.data_format = "SU" + data_filenames = glob(os.path.join(TEST_DATA, "*su")) + preprocess.initialize_adjoint_traces(data_filenames=data_filenames, + output=tmpdir) - return sf + assert(len(glob(os.path.join(tmpdir, "*"))) == 2) + for fid in glob(os.path.join(tmpdir, "*")): + assert(fid.endswith(".adj")) -def test_default_check(sfinit): +def test_default_quantify_misfit(tmpdir): """ - Test seisflows.preprocess.default.check() - - :param sfinit: - :param modules: - :return: + Quantify misfit with some example data """ - sfinit - PAR = sys.modules["seisflows_parameters"] - preprocess = sys.modules["seisflows_preprocess"] + preprocess = Default(data_format="ascii", misfit="waveform", + adjoint="waveform", path_preprocess=tmpdir, + path_solver=TEST_SOLVER, source_prefix="SOURCE", + ntask=2, + ) + preprocess.setup() - # Make sure that the check statement catches incorrectly set parameters - incorrect_parameters = { - "NORMALIZE": ["JNORML3"], - "MUTE": ["not_mute"], - "FILTER": "bondpass", - "FORMAT": "not_an_acceptable_format" - } - for key, val in incorrect_parameters.items(): - og_val = PAR[key] - print(key) - with pytest.raises(AssertionError): - PAR.force_set(key, val) - preprocess.check() - PAR.force_set(key, og_val) + preprocess.quantify_misfit( + source_name="001", + save_residuals=os.path.join(tmpdir, "residuals_ascii"), + save_adjsrcs=tmpdir + ) - # Make sure that parameters set to inappropriate values throw assertions - correct_parameters = { - "FILTER": "BANDPASS", - "WORKFLOW": "INVERSION", - "MIN_FREQ": 1, - } - for key, val in correct_parameters.items(): - PAR.force_set(key, val) + # !!! throws a segy error because data are not in the right format + # preprocess.data_format = "SU" + # preprocess.quantify_misfit( + # source_name="001", + # save_residuals=os.path.join(tmpdir, "residuals_su"), + # save_adjsrcs=tmpdir + # ) - incorrect_values = { - "MAX_FREQ": -1, - } - for key, val in incorrect_values.items(): - og_val = PAR[key] - with pytest.raises(AssertionError): - PAR.force_set(key, val) - preprocess.check() - PAR.force_set(key, og_val) + assert(len(glob(os.path.join(tmpdir, "*"))) == 3) + residuals = open(os.path.join(tmpdir, "residuals_ascii")).readlines() + assert(len(residuals) == 2) + assert(float(residuals[0]) == pytest.approx(0.0269, 3)) -def test_default_setup(sfinit): +def test_pyaflowa_setup(tmpdir): """ - Ensure that default setup correctly sets up the preprocessing machinery + Test setup procedure for SeisFlows which internalizes some workflow + information that is crucial for later tasks """ - sf = sfinit - PAR = sys.modules["seisflows_parameters"] - preprocess = sys.modules["seisflows_preprocess"] + pyaflowa = Pyaflowa( + workdir=tmpdir, + path_specfem_data=os.path.join(TEST_SOLVER, "mainsolver", "DATA"), + path_solver=os.path.join(TEST_SOLVER, "mainsolver"), + source_prefix="SOURCE", + ntask=2, + components="Y", + ) - # Make sure that preprocess machinery is set up empty - assert(preprocess.misfit is None) - assert(preprocess.adjoint is None) - assert(preprocess.reader is None) - assert(preprocess.writer is None) + assert(pyaflowa._station_codes == []) + assert(pyaflowa._source_names == []) + + pyaflowa.setup() + + assert(len(pyaflowa._station_codes) == 2) + assert(pyaflowa._station_codes[0] == "AA.S000000.*.*") + assert(len(pyaflowa._source_names) == pyaflowa._ntask) + assert(pyaflowa._source_names[0] == "001") + assert(pyaflowa._config.component_list == ["Y"]) - # Set some default parameters to run setup - misfit_name = "waveform" - io_name = "ascii" - PAR.force_set("MISFIT", misfit_name) - PAR.force_set("FORMAT", io_name) - preprocess.setup() - assert(preprocess.misfit.__name__ == misfit_name) - assert(preprocess.adjoint.__name__ == misfit_name) - assert(preprocess.reader.__name__ == io_name) - assert(preprocess.writer.__name__ == io_name) - - -# def test_default_prepare_eval_grad(tmpdir, sfinit): -# """ -# Ensure that prepare_eval_grad writes out adjoint traces and auxiliary files -# """ -# sfinit -# PAR = sys.modules["seisflows_parameters"] -# preprocess = sys.modules["seisflows_preprocess"] -# -# cwd = tmpdir -# taskid = 0 -# filenames = [] -# preprocess.prepare_eval_grad(cwd=cwd, taskid=taskid, filenames=filenames) -# pytest.set_trace() +def test_pyaflowa_setup_quantify_misfit(tmpdir): + """ + Test Config setup that is used to control `quantify_misfit` function + """ + pyaflowa = Pyaflowa( + workdir=tmpdir, + path_specfem_data=os.path.join(TEST_SOLVER, "mainsolver", "DATA"), + path_solver=TEST_SOLVER, source_prefix="SOURCE", ntask=1, + data_case="synthetic", components="Y", fix_windows="ITER", + ) + pyaflowa.setup() + config = pyaflowa._setup_quantify_misfit(source_name="001", iteration=1, + step_count=1) + assert(config.eval_tag == "i01s01") + # Data specific time series values calculated by function + assert(config.start_pad == 48) + assert(config.end_pad == 299.94) + + +def test_pyaflowa_check_fixed_windows(): + """ + Test that misfit window bool returner always returns how we want it to. + """ + pf = Pyaflowa(fix_windows=True) + assert (pf._check_fixed_windows(iteration=99, step_count=99)[0]) + pf = Pyaflowa(fix_windows="ITER") + assert (not pf._check_fixed_windows(iteration=1, step_count=0)[0]) + assert (pf._check_fixed_windows(iteration=1, step_count=1)[0]) + pf = Pyaflowa(fix_windows="ONCE", start=5) + assert (not pf._check_fixed_windows(iteration=5, step_count=0)[0]) + assert (pf._check_fixed_windows(iteration=5, step_count=1)[0]) + assert (pf._check_fixed_windows(iteration=6, step_count=0)[0]) + + +def test_pyaflowa_line_search(tmpdir): + """ + Test that the Pyaflowa preprocess class can quantify misfit over the course + of a few evaluations (a line search) and run its finalization task + Essentially an integration test testing the entire preprocessing module + works as a whole + """ + pyaflowa = Pyaflowa( + workdir=tmpdir, + path_specfem_data=os.path.join(TEST_SOLVER, "mainsolver", "DATA"), + path_output=os.path.join(tmpdir, "output"), + path_solver=TEST_SOLVER, source_prefix="SOURCE", ntask=2, + data_case="synthetic", components="Y", fix_windows="ITER", + export_datasets=True, export_figures=True, export_log_files=True, + ) + pyaflowa.setup() + unix.mkdir(pyaflowa.path.output) # usually done by other modules setup + save_residuals = os.path.join(tmpdir, f"residuals.txt") + for source_name in pyaflowa._source_names: + for step_count in range(3): + # Ignore any outputs, just want to run misfit quantification + # misfit will not be reducing but thats okay + pyaflowa.quantify_misfit(source_name=source_name, + iteration=1, step_count=step_count, + save_residuals=save_residuals, + save_adjsrcs=tmpdir) + + pyaflowa.finalize() + + # Check that final residuals file is the same + residuals = np.loadtxt(save_residuals) + assert(pyaflowa.sum_residuals(residuals) == 6.045) + + # Check that atleast one adjoint sources are not zero + adjsrcs = glob(os.path.join(tmpdir, "*.adj")) + data = np.loadtxt(adjsrcs[0]) + assert(data[:, 1].any()) # assert that adjoint sourcse are not zero + + # Just check file count to see that finalize did what it's supposed to do + # since finalize just moves and collects files + assert(len(glob(os.path.join(pyaflowa.path.output, "pyaflowa", + "figures", "*"))) == 1) + assert(len(glob(os.path.join(pyaflowa.path.output, "pyaflowa", + "logs", "*"))) == 6) + assert(len(glob(os.path.join(pyaflowa.path.output, "pyaflowa", + "datasets", "*.csv"))) == 2) diff --git a/seisflows/tests/test_seisflows.py b/seisflows/tests/test_seisflows.py index 098c9ac6..49d862f1 100644 --- a/seisflows/tests/test_seisflows.py +++ b/seisflows/tests/test_seisflows.py @@ -1,8 +1,6 @@ """ Test suite for the SeisFlows command line interface tool and the underlying parser class, ensures that the command line tool works as expected - -!!! TO DO: Finish tests from 'edit' onwards """ import os import io @@ -13,128 +11,86 @@ import subprocess from unittest.mock import patch -from seisflows import logger -from seisflows.seisflows import sfparser, SeisFlows -from seisflows.config import save, Dict, ROOT_DIR, NAMES, CFGPATHS -from seisflows.tools.wrappers import loadyaml +from seisflows import ROOT_DIR +from seisflows.tools import msg +from seisflows.seisflows import SeisFlows +from seisflows.tools.config import load_yaml, Dict TEST_DIR = os.path.join(ROOT_DIR, "tests") @pytest.fixture -def filled_par_file(): - """A parameter file that is completely filled out and can be read in""" - return os.path.join(TEST_DIR, "test_data", "test_filled_parameters.yaml") - - -@pytest.fixture -def conf_par_file(): - """A par file that has been configured but requires user-defined values""" - return os.path.join(TEST_DIR, "test_data", "test_conf_parameters.yaml") - - -@pytest.fixture -def setup_par_file(): - """A barebones par file that only contains module names""" - return os.path.join(TEST_DIR, "test_data", "test_setup_parameters.yaml") - - -@pytest.fixture -def copy_par_file(tmpdir, filled_par_file): +def par_file(tmpdir): """ - Copy the template parameter file into the temporary test directory - :rtype: str - :return: location of the parameter file + Create a template parameter file """ - src = filled_par_file - dst = os.path.join(tmpdir, "parameters.yaml") - shutil.copy(src, dst) + fid = os.path.join(tmpdir, "parameters.yaml") + with open(fid, "w") as f: + f.write(msg.base_parameter_file) + return fid @pytest.fixture -def par_file_dict(filled_par_file): +def par_file_dict(): """ - Return the test parameter file as a dictionary object + Return default parameter file parameters as a dictionary object + :rtype: seisflows.config.Dict :return: dictionary of parameters """ - return Dict(loadyaml(filled_par_file)) + par_file = Dict(workflow="forward", system="workstation", + solver="specfem2d", preprocess="default", + optimize="gradient") + return par_file -def test_call_seisflows(tmpdir, par_file_dict, copy_par_file): +def test_call_seisflows(par_file, par_file_dict): """ Test calling the 'par' command from command line and inside a python environemnt. Check that case-insensitivity is also honored Check against the actual value coming from the parameter file Also tests the seisflows 'par' command """ - copy_par_file - os.chdir(tmpdir) - check_val = par_file_dict.LINESEARCH + check_val = par_file_dict.workflow # Mock argv to match the actual scenario in which SeisFlows will be called with patch.object(sys, "argv", ["seisflows"]): - for name in ["linesearch", "LINESEARCH", "LineSearch"]: - # From the command line - cmd_line_arg = ["seisflows", "par", name] + for name in ["Workflow", "WORKFLOW", "WorkFlow"]: + # $ seisflows par workflow -p path/to/parameters.yaml + cmd_line_arg = ["seisflows", "-p", par_file, "par", name] out = subprocess.run(cmd_line_arg, capture_output=True, universal_newlines=True) - assert(out.stdout.strip() == f"{name.upper()}: {check_val}") + assert(out.stdout.strip() == f"{name.lower()}: {check_val}") # Test from inside a Python environment; we need to redirect stdout # to make sure the print statement is working as expected f = io.StringIO() with contextlib.redirect_stdout(f): - sf = SeisFlows() + sf = SeisFlows(parameter_file=par_file) sf(command="par", parameter=name) stdout = f.getvalue() - assert(stdout.strip() == f"{name.upper()}: {check_val}") + assert(stdout.strip() == f"{name.lower()}: {check_val}") -def test_edited_parameter_file_name(tmpdir, par_file_dict, filled_par_file): +def test_edited_parameter_file_name(tmpdir, par_file, par_file_dict): """ Similar test as call_seisflows but just make sure that arbitrary naming of the parameter file still works """ + # Copy given parameter file with a weird name par_fid = "CRAZY_PARAMETER_NAME-0x123kd.yaml" - par_name = "linesearch" - - src = filled_par_file + src = par_file dst = os.path.join(tmpdir, par_fid) shutil.copy(src, dst) + check_key = "workflow" + check_val = par_file_dict[check_key] - os.chdir(tmpdir) - check_val = par_file_dict.LINESEARCH - cmd_line_arg = ["seisflows", "-p", par_fid, "par", par_name] + cmd_line_arg = ["seisflows", "-p", dst, "par", check_key] # Mock argv to match the actual scenario in which SeisFlows will be called with patch.object(sys, "argv", ["seisflows"]): out = subprocess.run(cmd_line_arg, capture_output=True, universal_newlines=True) - assert(out.stdout.strip() == f"{par_name.upper()}: {check_val}") - - -def test_register(tmpdir, par_file_dict, copy_par_file): - """ - Test that the register function, which reads in PATHS and PARAMETERS - works as expected, returning paths and parameters that we can read - """ - copy_par_file - os.chdir(tmpdir) - - with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - assert(sf._paths is None) - assert(sf._parameters is None) - sf._register(force=True) - - # Check that paths and parameters have been set in sys.modules - paths = sys.modules["seisflows_paths"] - parameters = sys.modules["seisflows_parameters"] - - # Check one or two parameters have been set correctly - assert(par_file_dict.LBFGSMAX == parameters.LBFGSMAX) - path_check_full = os.path.abspath(par_file_dict.PATHS["SCRATCH"]) - assert(path_check_full == paths.SCRATCH) + assert(out.stdout.strip() == f"{check_key.lower()}: {check_val}") def test_cmd_setup(tmpdir): @@ -155,9 +111,7 @@ def test_cmd_setup(tmpdir): # With symlinking sf.setup(symlink=True, overwrite=False) assert(os.path.exists(par_file)) - assert(os.path.exists( - os.path.join(tmpdir, "source_code", "seisflows")) - ) + # Edit the current par file in a noticeable way so we can check # if overwriting works in the next step test_phrase = "well this is rather unexpected...\n" @@ -174,262 +128,67 @@ def test_cmd_setup(tmpdir): assert(test_phrase not in text) -def test_cmd_init(tmpdir, copy_par_file): - """ - Test 'seisflows init' command which instantiates a working directory and - saves the active working state as pickle files - :return: - """ - os.chdir(tmpdir) - copy_par_file - - # Create necessary paths to get past some assertion errors - parameters = loadyaml("parameters.yaml") - paths = parameters.pop("PATHS") - - for key in ["MODEL_INIT", "MODEL_TRUE"]: - os.mkdir(paths[key]) - - with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - sf.init() - - for name in NAMES: - assert(os.path.exists(os.path.join(paths["OUTPUT"], - f"seisflows_{name}.p")) - ) - - -def test_cmd_submit(tmpdir): - """ - Test submit, also test the functionality of resume and restart which - are essentially wrappers for this call - :param tmpdir: - :return: - """ - pass - - -def test_cmd_clean(tmpdir): - """ - - :param tmpdir: - :return: - """ - os.chdir(tmpdir) - - # Create a bunch of files that match what should be deleted. Make them as - # directories even though some should be files because we just want to see - # if they get deleted or not - for path in CFGPATHS.values(): - os.mkdir(path) - - # Symlink the last file to make sure it still exists even if it matches - shutil.rmtree(path) - os.symlink(src=CFGPATHS.PAR_FILE, dst=path) - - with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - sf.clean(force=True) - - for fid in [path, CFGPATHS.PAR_FILE]: - assert(os.path.exists(fid)) - - -def test_config_logging(tmpdir, copy_par_file): - """ - Test logging configuration to make sure we can print to file - :param tmpdir: - :return: - """ - # Run init first to create a working state - os.chdir(tmpdir) - copy_par_file - - msg = "This is an example log that will be checked for test purposes" - with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - sf._register(force=True) - sf._config_logging() - logger.debug(msg) - - # Check that we created the log file and wrote the message in - assert(os.path.exists(CFGPATHS.LOGFILE)) - with open(CFGPATHS.LOGFILE, "r") as f: - lines = f.read() - assert(msg in lines) - assert("DEBUG" in lines) # levelname - assert("test_config_logging()" in lines) # funcName - - -def test_load_modules(tmpdir, copy_par_file): - """ - Test if module loading from sys.modules works - - :param tmpdir: - :return: - """ - # Run init first to create a working state - os.chdir(tmpdir) - copy_par_file - - # Create necessary paths to get past some assertion errors - parameters = loadyaml("parameters.yaml") - paths = parameters.pop("PATHS") - - for key in ["MODEL_INIT", "MODEL_TRUE"]: - os.mkdir(paths[key]) - - with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - sf.init() - - # Check a random parameter and then set it to something different - preprocess = sys.modules["seisflows_preprocess"] - assert(preprocess.misfit is None) - preprocess.misfit = 1 - - # See if we can load modules and restore previous working state which - # overwrites the previous operation - sf._load_modules() - assert(sys.modules["seisflows_preprocess"].misfit != 1) - - -def test_cmd_configure(tmpdir, setup_par_file, conf_par_file): +def test_cmd_configure(tmpdir, par_file): """ Test configuring a parameter file from a template par file - - .. note:: - I don't know exactly why, but this test needs to be run AFTER any other - test which runs seisflows.init(), otherwise the parameters are not - instantiated properly (you will hit a KeyError when trying to access - PAR). I think this is because of how seisflows.configure() registers - a relatively empty parameter file (only modules are defined), and this - gets saved into sys modules, affecting subsequent tests which end up - accessing sys.modules. I tried flushing sys.modules but it didn't work. - This behavior shouldn't get encountered in a real run because we - won't need to run init() and configure() in the same python - runtime environment, but I leave this warning here - wondering if I'll have to fix it at some point... -B """ os.chdir(tmpdir) - # Copy in the setup par file so we can configure it - src = setup_par_file - dst = os.path.join(tmpdir, "parameters.yaml") - shutil.copy(src, dst) - - # run seisflows init + # run seisflows configure with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - sf.configure(relative_paths=False) - - # Simple check that the configuration parameter file has the same number - # of lines as the one that has been created by configure - lines_conf = open(conf_par_file, "r").readlines() - lines_fill = open("parameters.yaml", "r").readlines() - assert (len(lines_conf) == len(lines_fill)) + sf = SeisFlows(workdir=tmpdir, parameter_file="parameters.yaml") + sf.configure() - # My attempt to flush sys.modules which did NOT work - # from seisflows.config import NAMES, PAR, PATH - # for name in NAMES: - # del sys.modules[f"seisflows_{name}"] - # del sys.modules[PAR] - # del sys.modules[PATH] + # Check some random values that were not in the template file + parameters = load_yaml(par_file) + assert("path_model_init" in parameters.keys()) + assert("smooth_h" in parameters.keys()) + assert("ntask" in parameters.keys()) -def test_cmd_par(tmpdir, copy_par_file): +def test_cmd_par(tmpdir, par_file): """ Make sure the 'par' command can print and edit the parameter file :param tmpdir: :return: """ - # Run init first to create a working state - os.chdir(tmpdir) - copy_par_file - - parameter = "begin" - expected_val = "1" - new_val = "2" + parameter = "workflow" + expected_val = "forward" + new_val = "migration" # testing the get option: seisflows par `parameter` with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() # Run this with subprocess so we can capture the print statement - cmd_line_arg = ["seisflows", "par", parameter] + cmd_line_arg = ["seisflows", "-p", par_file, "par", parameter] out = subprocess.run(cmd_line_arg, capture_output=True, universal_newlines=True) # Check that we printed out the correct value par, val = out.stdout.strip().split(":") - assert(par.upper() == parameter.upper()) - assert(int(val) == int(expected_val)) + assert(par.strip() == parameter) + assert(val.strip() == expected_val) # testing the set option: seisflows par `parameter` `value` with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() # Run this with subprocess so we can capture the print statement - cmd_line_arg = ["seisflows", "par", parameter, new_val] + cmd_line_arg = ["seisflows", "-p", par_file, "par", parameter, new_val] out1 = subprocess.run(cmd_line_arg, capture_output=True, universal_newlines=True) # Run this with subprocess so we can capture the print statement - cmd_line_arg = ["seisflows", "par", parameter] + cmd_line_arg = ["seisflows", "-p", par_file, "par", parameter] out2 = subprocess.run(cmd_line_arg, capture_output=True, universal_newlines=True) # Check that the changed print statement works par, vals = out1.stdout.strip().split(":") val_old, val_new = vals.strip().split(" -> ") - assert(par.upper() == parameter.upper()) - assert(int(val_old) == int(expected_val)) - assert(int(val_new) == int(new_val)) + assert(par.strip() == parameter) + assert(val_old.strip() == expected_val) + assert(val_new.strip() == new_val) # Check that we printed out the correctly changed value par, val = out2.stdout.strip().split(":") - assert(par.upper() == parameter.upper()) - assert(int(val) == int(new_val)) - -# def test_cmd_sempar(tmpdir): -# """ -# -# :param tmpdir: -# :return: -# """ -# pass -# -# -# def test_cmd_check(tmpdir): -# """ -# Very simple -# :param tmpdir: -# :return: -# """ -# pass -# -# -# def test_cmd_print(tmpdir): -# """ -# -# :param tmpdir: -# :return: -# """ -# pass -# -# -# def test_cmd_convert(tmpdir): -# """ -# -# :param tmpdir: -# :return: -# """ -# pass -# -# -# def test_cmd_validate(tmpdir): -# """ -# -# :param tmpdir: -# :return: -# """ -# pass + assert(par.strip() == parameter) + assert(val.strip() == new_val) + diff --git a/seisflows/tests/test_solver.py b/seisflows/tests/test_solver.py index c2facb2d..854435d7 100644 --- a/seisflows/tests/test_solver.py +++ b/seisflows/tests/test_solver.py @@ -1,132 +1,84 @@ """ -Test suite for the SeisFlows system module, which controls interaction with -various compute systems +Test the ability of the Solver module to interact with various versions of +SPECFEM """ import os -import sys -import shutil import pytest -from unittest.mock import patch -from seisflows import config -from seisflows.seisflows import SeisFlows, return_modules +from glob import glob +from seisflows import ROOT_DIR +from seisflows.tools.config import set_task_id +from seisflows.solver.specfem import Specfem -# The module that we're testing, allows for copy-pasting these test suites -MODULE = "solver" +TEST_DATA = os.path.join(ROOT_DIR, "tests", "test_data", "test_solver") -# Ensures that these parameters are always defined, even when using subclasses -REQUIRED_PARAMETERS = ["MATERIALS", "DENSITY", "ATTENUATION"] -# !!! TODO Figure out what solver functions are called from other modules -REQUIRED_FUNCTIONS = [] -# Define some re-used paths -TEST_DIR = os.path.join(config.ROOT_DIR, "tests") -REPO_DIR = os.path.abspath(os.path.join(config.ROOT_DIR, "..")) - - -@pytest.fixture -def copy_par_file(tmpdir): - """ - Copy the template parameter file into the temporary test directory - :rtype: str - :return: location of the parameter file - """ - src = os.path.join(TEST_DIR, "test_data", "test_filled_parameters.yaml") - dst = os.path.join(tmpdir, "parameters.yaml") - shutil.copy(src, dst) - - -@pytest.fixture -def modules(): - """ - Return a list of subclasses that falls under the System module - """ - return return_modules()[MODULE] - - -@pytest.fixture -def sfinit(tmpdir, copy_par_file): +def test_source_names(): """ - Re-used function that will initate a SeisFlows working environment in - sys modules - :return: + Check that source names are established correctly """ - copy_par_file - os.chdir(tmpdir) - with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - sf._register(force=True) - config.init_seisflows(check=False) + # Establish solver that looks for CMTSOLUTIONS with NTASK==1 + sources = os.path.join(TEST_DATA, "sources") + solver = Specfem(path_specfem_data=sources, source_prefix="CMTSOLUTION") + assert(len(solver.source_names) == 1) - return sf + # Set NTASK==2 to grab both source files + solver = Specfem(path_specfem_data=sources, source_prefix="CMTSOLUTION", + ntask=2) + source_names = glob(os.path.join(sources, "CMTSOLUTION*")) + source_names = [_.split("_")[-1] for _ in source_names] - -def test_import(sfinit, modules): - """ - Test code by importing all available classes for this module. - If any of these fails then the module itself has some code error - (e.g., syntax errors, inheritance errors). - """ - sfinit - for package, module_list in modules.items(): - for module in module_list: - config.custom_import(MODULE, module)() - - -def test_validate(sfinit, modules): - """ - Test out path and parameter validation, essentially checking that all - the paths and parameters are set properly - - .. note:: - This doesn't work because we have required parameters that are not - set in the default parameter file. We can run configure beforehand - but does that make sense? - :return: - """ - return - sfinit - for package, module_list in modules.items(): - for module in module_list: - loaded_module = config.custom_import(MODULE, module)() - from IPython import embed;embed() - loaded_module.required.validate() + assert(source_names == solver.source_names) -def test_required_parameters_exist(sfinit, modules): +def test_initialize_working_directory(tmpdir): """ - Ensure that the required parameters are set in all the classes/subclasses - That is, that the parameters defined above in REQUIRED_PARAMETERS have been - defined by each SYSTEM class + Test that data filenames are returned correctly """ - sfinit - for package, module_list in modules.items(): - for module in module_list: - loaded_module = config.custom_import(MODULE, module)() - sf_pp = loaded_module.required - # Check that required parameters are set - for req_par in REQUIRED_PARAMETERS: - assert(req_par in sf_pp.parameters.keys()), \ - f"{req_par} is a required parameter for module {MODULE}" - - -def test_required_functions_exist(sfinit, modules): + specfem_data = os.path.join(TEST_DATA, "mainsolver", "DATA") + specfem_bin = os.path.join(TEST_DATA, "mainsolver", "bin") + + solver = Specfem(path_specfem_data=specfem_data, + path_specfem_bin=specfem_bin, + source_prefix="SOURCE", workdir=tmpdir + ) + assert(not os.path.exists(solver.path.mainsolver)) + + # Set the environment task id so that the logger doesn't throw warnings + # about not finding the task id + set_task_id(0) + + # Generate the required directory structure + solver._initialize_working_directory( + cwd=os.path.join(solver.path.scratch, "001") + ) + + # Simple checks to make sure the directory structure was set up properly + assert(os.path.islink(solver.path.mainsolver)) + assert(os.path.exists(solver.cwd)) + assert(glob(os.path.join(solver.cwd, "*"))) + event_fid = os.path.join(solver.cwd, "DATA", "SOURCE") + assert(os.path.islink(event_fid)) + event_line = open(event_fid).readlines()[0].strip() + assert(event_line == "## Source 1") + + +def test_run_binary(tmpdir): """ - Make sure that the named, required functions exist within the class - Do not execute just make sure they're defined, because they will be - expected by other modules + Just run a known and intentially incorrect binary with the run binary + function to check that we can, and that error catching is working """ - sfinit - for package, module_list in modules.items(): - for module in module_list: - loaded_module = config.custom_import(MODULE, module)() - for func in REQUIRED_FUNCTIONS: - assert(func in dir(loaded_module)), \ - f"'{func}' is a required function in module: " \ - f"{MODULE}.{module}" - - -# ============================================================================== -# MODULE AND FUNCTION SPECIFIC TESTS TO FOLLOW -# ============================================================================== - + solver = Specfem() + solver._run_binary(executable="echo hello world", + stdout=os.path.join(tmpdir, "log.txt")) + + # Executables that don't exist will not run + with pytest.raises(SystemExit): + solver._run_binary(executable="gobbledigook", + stdout=os.path.join(tmpdir, "log.txt")) + + # Executables that do exist but error out (e.g., with invalid options) will + # also throw an error + with pytest.raises(SystemExit): + solver._run_binary(executable="ls -//daflkjeaf", + stdout=os.path.join(tmpdir, "log.txt")) diff --git a/seisflows/tests/test_system.py b/seisflows/tests/test_system.py index 28091412..30d2b182 100644 --- a/seisflows/tests/test_system.py +++ b/seisflows/tests/test_system.py @@ -1,103 +1,82 @@ """ -Test suite for the SeisFlows SYSTEM module, which controls interaction with -various compute systems +Test the system modules ability to run jobs """ import os -import sys -import shutil import pytest from glob import glob -from unittest.mock import patch -from seisflows import config -from seisflows.seisflows import SeisFlows +from seisflows.tools import unix +from seisflows.tools.config import get_task_id +from seisflows.system.workstation import Workstation +from seisflows.system.cluster import Cluster -TEST_DIR = os.path.join(config.ROOT_DIR, "tests") -REPO_DIR = os.path.abspath(os.path.join(config.ROOT_DIR, "..")) +def _test_function_a(tmpdir): + """ + A test function that simply prints, used to check run + """ + test_dir = os.path.join(tmpdir, "test_dir") + if not os.path.exists(test_dir): + unix.mkdir(test_dir) -@pytest.fixture -def copy_par_file(tmpdir): +def _test_function_b(tmpdir): """ - Copy the template parameter file into the temporary test directory - :rtype: str - :return: location of the parameter file + A test function that simply prints """ - src = os.path.join(TEST_DIR, "test_data", "test_filled_parameters.yaml") - dst = os.path.join(tmpdir, "parameters.yaml") - shutil.copy(src, dst) + idx = get_task_id() + test_fid = f"test_file_{idx:0>2}.txt" + test_file = os.path.join(tmpdir, "test_dir", test_fid) + print(f"making test file {test_file}") + open(test_file, "w").close() -@pytest.fixture -def sfinit(tmpdir, copy_par_file): +def test_workstation_run(tmpdir, ntask=26): """ - Re-used function that will initate a SeisFlows working environment in - sys modules - :return: + Make sure that Workstation run simply calls the functions in question """ - copy_par_file - os.chdir(tmpdir) - with patch.object(sys, "argv", ["seisflows"]): - sf = SeisFlows() - sf._register(force=True) - config.init_seisflows(check=False) + system = Workstation(workdir=tmpdir, path_system=tmpdir, ntask=ntask) + system.setup() # make required dir. structure + system.run(funcs=[_test_function_a, _test_function_b], tmpdir=tmpdir) - return sf + assert(len(glob(os.path.join(system.path.log_files, "*"))) == ntask) + assert(len(glob(os.path.join(tmpdir, "test_dir", "*"))) == ntask) -def test_setup(sfinit): +def test_workstation_run_single(tmpdir, ntask=26): """ - Make sure that system.base.setup() creates the desired directory structure - and log files. - - :param sfinit: - :param modules: - :return: + Make sure that Workstation run simply calls the functions only once """ - sf = sfinit - system = sys.modules["seisflows_system"] - PATH = sys.modules["seisflows_paths"] - - # Make empty text files to check that they will be copied into the logs dir - for fid in [system.output_log, system.error_log]: - open(fid, "w") - - for path in [PATH.SCRATCH, PATH.SYSTEM, PATH.OUTPUT]: - assert(not os.path.exists(path)) + system = Workstation(workdir=tmpdir, path_system=tmpdir, ntask=ntask) + system.setup() # make required dir. structure + system.run(funcs=[_test_function_a, _test_function_b], tmpdir=tmpdir, + single=True) - system.setup() - for path in [PATH.SCRATCH, PATH.SYSTEM, PATH.OUTPUT]: - assert(os.path.exists(path)) + assert(len(glob(os.path.join(system.path.log_files, "*"))) == 1) + assert(len(glob(os.path.join(tmpdir, "test_dir", "*"))) == 1) - # Both log files and the parameter file should have been copied - assert(len(glob(os.path.join("logs", "*"))) == 3) -def test_checkpoint(sfinit): +def test_cluster_run(tmpdir, ntask=26): """ - Check that output pickle files are created during a checkpoint and that - kwargs are saved + Make sure that Cluster run can pickle the tasks and run them with subprocess """ - sf = sfinit - system = sys.modules["seisflows_system"] - PATH = sys.modules["seisflows_paths"] - classname = "solver" - method = "eval_func" - system.checkpoint(path=PATH.OUTPUT, classname=classname, method=method, - kwargs={"test": 5} - ) - assert(os.path.exists(os.path.join(PATH.OUTPUT, "kwargs", - f"{classname}_{method}.p"))) - assert(len(glob(os.path.join(PATH.OUTPUT, "*.p"))) == len(config.NAMES)) - - -# SYSTEM.WORKSTATION -def test_run_system_workstation(sfinit): + system = Cluster(workdir=tmpdir, path_system=tmpdir, ntask=ntask) + system.setup() # make required dir. structure + system.run(funcs=[_test_function_a, _test_function_b], tmpdir=tmpdir) + + assert(len(glob(os.path.join(system.path.log_files, "*"))) == ntask) + assert(len(glob(os.path.join(tmpdir, "test_dir", "*"))) == ntask) + + +def test_cluster_run_single(tmpdir, ntask=26): """ - Ensure that workstation.run() simply runs a function as we would expect + Make sure that Cluster runs single tasks accetpably """ - sf = sfinit - system = sys.modules["seisflows_system"] - assert(type(system).__name__ == "Workstation") - # We don't care what the function does, just that we can call it - system.run(classname="system", method="taskid") + system = Cluster(workdir=tmpdir, path_system=tmpdir, ntask=ntask) + system.setup() # make required dir. structure + system.run(funcs=[_test_function_a, _test_function_b], tmpdir=tmpdir, + single=True) + + assert(len(glob(os.path.join(system.path.log_files, "*"))) == 1) + assert(len(glob(os.path.join(tmpdir, "test_dir", "*"))) == 1) + diff --git a/seisflows/tests/test_tools.py b/seisflows/tests/test_tools.py new file mode 100644 index 00000000..01c413c0 --- /dev/null +++ b/seisflows/tests/test_tools.py @@ -0,0 +1,78 @@ +""" +Test any of the utility functions defined in the Tools directory +""" +import os +import pytest +import numpy as np +from glob import glob +from seisflows import ROOT_DIR +from seisflows.tools.config import Dict +from seisflows.tools.model import Model +from seisflows.tools.config import custom_import + + +TEST_DIR = os.path.join(ROOT_DIR, "tests") + + +def test_specfem_model(tmpdir): + """ + Make sure we can dynamically load SPECFEM models in various formats + + TODO eventually we want to split this into multiple tests that test each + TODO of the IO formats (binary, adios etc.). Currently only testing binary. + """ + model_data = os.path.join(TEST_DIR, "test_data", "test_tools", + "test_file_formats") + + # Make sure that multiple acceptable file extensions throw error + with pytest.raises(AssertionError): + Model(path=model_data) + + # Check that model values are read in correctly + m = Model(path=model_data, fmt=".bin") + assert(m.ngll[0] == 40000) + assert(m.nproc == 1) + assert("vp" in m.model.keys()) + assert("vs" in m.model.keys()) + assert(m.model.vp[0][0] == 5800.) + assert(m.model.vs[0][0] == 3500.) + + assert(len(m.merge() == len(m.model.vs[0]) + len(m.model.vp[0]))) + assert(len(m.split()) == len(m.parameters)) + + # Check that saving and loading npz file works + m.save(path=os.path.join(tmpdir, "test.npz")) + m_new = Model(path=os.path.join(tmpdir, "test.npz")) + assert(m_new.ngll[0] == m.ngll[0]) + assert(m_new.fmt == m.fmt) + + # Check that writing fortran binary works + m.write(path=tmpdir) + assert(len(glob(os.path.join(tmpdir, f"*{m.fmt}"))) == 2) + + # Check that we can instantiate a model from an input vector + m = Model() + m.model = Dict(x=[np.array([-1.2, 1.])]) + assert(m.nproc == 1) + assert(m.ngll == [2]) + assert(m.parameters == ["x"]) + + +def test_custom_import(): + """ + Test that importing based on internal modules works for various inputs + :return: + """ + with pytest.raises(SystemExit): + custom_import() + with pytest.raises(SystemExit): + custom_import(name="NOT A VALID NAME") + + module = custom_import(name="optimize", module="LBFGS") + assert(module.__name__ == "LBFGS") + assert(module.__module__ == "seisflows.optimize.LBFGS") + + # Check one more to be safe + module = custom_import(name="preprocess", module="default") + assert(module.__name__ == "Default") + assert(module.__module__ == "seisflows.preprocess.default") \ No newline at end of file diff --git a/seisflows/tools/array.py b/seisflows/tools/array.py index 16291019..77b421d2 100644 --- a/seisflows/tools/array.py +++ b/seisflows/tools/array.py @@ -2,8 +2,6 @@ """ Tools useful for array manipulation in Seisflows """ -import os - import numpy as np import scipy.signal as _signal import scipy.interpolate as _interp @@ -86,13 +84,6 @@ def uniquerows(a, sort_array=False, return_index=False): return ua -def stack(*args): - """ - Column-wise stack arrays - """ - return np.column_stack(args) - - def gridsmooth(Z, span): """ Smooths values on 2D rectangular grid @@ -178,7 +169,7 @@ def mesh2grid(v, mesh): x = np.linspace(x.min(), x.max(), nx) z = np.linspace(z.min(), z.max(), nz) X, Z = np.meshgrid(x, z) - grid = stack(X.flatten(), Z.flatten()) + grid = np.column_stack(X.flatten(), Z.flatten()) # Interpolate to structured grid V = _interp.griddata(mesh, v, grid, 'linear') diff --git a/seisflows/tools/config.py b/seisflows/tools/config.py new file mode 100755 index 00000000..c7a7c0a6 --- /dev/null +++ b/seisflows/tools/config.py @@ -0,0 +1,408 @@ +#!/usr/bin/env python3 +""" +Seisflows configuration tools, containing core utilities that are called upon +throughout the Seisflows workflow. +""" +import dill +import logging +import os +import sys +import re +import yaml +import numpy as np +import traceback +from pkgutil import find_loader +from importlib import import_module + +from seisflows import logger, NAMES +from seisflows.tools import msg + +ENV_VARIABLES = ["SEISFLOWS_TASKID", "SLURM_ARRAY_TASK_ID"] + + +class Dict(dict): + """ + A dictionary replacement which allows for easier parameter access through + getting and setting attributes. Also has some functionality to make string + printing prettier + """ + def __str__(self): + """Pretty print dictionaries and first level nested dictionaries""" + str_ = "" + try: + longest_key = max([len(_) for _ in self.keys()]) + for key, val in self.items(): + str_ += f"{key:<{longest_key}}: {val}\n" + except ValueError: + pass + return str_ + + def __repr__(self): + """Pretty print when calling an instance of this object""" + return self.__str__() + + def __getattr__(self, key): + """Attribute-like access of the internal dictionary attributes""" + try: + return self[key] + except KeyError: + raise AttributeError(f"{key} not found in Dict") + + def __setattr__(self, key, val): + """Setting attributes can only be performed one time""" + self.__dict__[key] = val + + +class Null: + """ + A null object that always and reliably does nothing + """ + def __init__(self, *args, **kwargs): + pass + + def __call__(self, *args, **kwargs): + return self + + def __bool__(self): + return False + + def __nonzero__(self): + return False + + def __getattr__(self, key): + return self + + def __setattr__(self, key, val): + return self + + def __delattr__(self, key): + return self + + +def load_yaml(filename): + """ + Define how the PyYaml yaml loading function behaves. + Replaces None and inf strings with NoneType and numpy.inf respectively + + :type filename: str + :param filename: .yaml file to load in + :rtype: Dict + :return: Dictionary containing all parameters in a YAML file + """ + # work around PyYAML bugs + yaml.SafeLoader.add_implicit_resolver( + u'tag:yaml.org,2002:float', + re.compile(u'''^(?: + [-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+]?[0-9]+)? + |[-+]?(?:[0-9][0-9_]*)(?:[eE][-+]?[0-9]+) + |\\.[0-9_]+(?:[eE][-+][0-9]+)? + |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]* + |[-+]?\\.(?:inf|Inf|INF) + |\\.(?:nan|NaN|NAN))$''', re.X), + list(u'-+0123456789.')) + + with open(filename, 'r') as f: + mydict = Dict(yaml.safe_load(f)) + + if mydict is None: + mydict = Dict() + + # Replace 'None' and 'inf' values to match expectations + for key, val in mydict.items(): + if val == "None": + mydict[key] = None + if val == "inf": + mydict[key] = np.inf + + return mydict + + +def get_task_id(): + """ + Task IDs are assigned to each child process spawned by the system module + during a SeisFlows workflow. SeisFlows modules use this Task ID to keep + track of embarassingly parallel process, e.g., solver uses the Task ID to + determine which source is being considered. + + :rtype: int + :return: task id for given solver + """ + for env_var in ENV_VARIABLES: + _taskid = os.getenv(env_var) + if _taskid is not None: + return int(_taskid) + else: + logger.warning("Environment Task ID variable not found. Assigning 0") + return 0 + + +def set_task_id(task_id): + """ + Set the SEISFLOWS_TASKID in os environs for local workflows. If running + on HPC systems, running array jobs will assign the Task ID + + .. note:: + Mostly used for debugging/testing purposes as a way of mimicing + system.run() assigning task ids to child processes + + :type task_id: int + :param task_id: integer task id to assign to the current working environment + """ + os.environ["SEISFLOWS_TASKID"] = str(task_id) + + +def import_seisflows(workdir=os.getcwd(), parameter_file="parameters.yaml", + **kwargs): + """ + Standard SeisFlows workflow setup block which runs a number of setup + tasks including: loading a user-defined parameter file, configuring the + package-wide logger based on user-input path to log file and desired + verbosity, and instantiating all modules in a generic fashion based on user + choice. Returns the 'workflow' module, which contains all other submodules + as attributes. + + :type workdir: str + :param workdir: the current working directory in which to perform a + SeisFlows workflow. Defaults to the current working directory + :type parameter_file: str + :param parameter_file: the YAML formatted parameter file that is used to + instantiate each of the SeisFlows modules and run the workflow. This + should be created by the command line argument 'seisflows configure'. + Defaults to 'parameters.yaml' + :rtype: module + :return: instantiated 'workflow' module which contains all sub-modules which + have been instantiated with user-defined parameters + """ + # Read in parameters from file. Set up the logger + parameters = load_yaml(os.path.join(workdir, parameter_file)) + config_logger(level=parameters.log_level, + filename=parameters.path_output_log, + verbose=parameters.verbose, **kwargs) + + # Instantiate SeisFlows modules dynamically based on choices and parameters + # provided in the input parameter file + modules = Dict() + for name in NAMES[:]: + # Workflow is instantiated differently + if name == "workflow": + continue + modules[name] = custom_import(name, parameters[name])(**parameters) + + # Import workflow separately by providing all the instantiated modules to it + workflow = \ + custom_import("workflow", parameters["workflow"])(modules, **parameters) + + return workflow + + +def config_logger(level="DEBUG", filename=None, filemode="a", verbose=True, + stream_handler=True): + """ + Explicitely configure the logging module with some parameters defined + by the user in the System module. Instantiates a stream logger to write + to stdout, and a file logger which writes to `filename`. Two levels of + verbosity and three levels of log messages allow the user to determine + how much output they want to see. + + :type level: str + :param level: log level to be passed to logger, available are + 'CRITICAL', 'WARNING', 'INFO', 'DEBUG' + :type filename: str or None + :param filename: name of the log file to write log statements to. If None, + logs will be written to STDOUT ONLY, and `filemode` will not be used. + :type filemode: str + :param filemode: method for opening the log file. defaults to append 'a' + :type verbose: bool + :param verbose: if True, writes a more detailed log message stating the + type of log (warning, info, debug), and the class and method which + called the logger (e.g., seisflows.solver.specfem2d.save()). This + is much more useful for debugging but clutters up the log file. + if False, only write the time and message in the log statement. + """ + # Make sure that we don't already have handlers described, which may happen + # if this function gets run multiple times, and leads to duplicate logs + while logger.hasHandlers() and logger.handlers: + logger.removeHandler(logger.handlers[0]) + + # Two levels of verbosity on log level, triggered with PAR.VERBOSE + if verbose: + # More verbose logging statement for debugging + fmt_str = ( + "%(asctime)s | %(levelname)-5s | " + "%(filename)s -> %(funcName)s():L%(lineno)s\n" + "> %(message)s" + ) + else: + # Clean logging statement with only time and message + fmt_str = "%(asctime)s (%(levelname).1s) | %(message)s" + + # Instantiate logger during _register() as we now have user-defined pars + logger.setLevel(level) + formatter = logging.Formatter(fmt_str, datefmt="%Y-%m-%d %H:%M:%S") + + # Stream handler to print log statements to stdout. Sometimes we don't want + # this, e.g., on an HPC system having both stream and file will print + # double log messages to your log file + if stream_handler: + st_handler = logging.StreamHandler(sys.stdout) + st_handler.setFormatter(formatter) + logger.addHandler(st_handler) + + # File handler to print log statements to text file `filename` + if filename is not None: + file_handler = logging.FileHandler(filename, filemode) + file_handler.setFormatter(formatter) + logger.addHandler(file_handler) + + +def custom_import(name=None, module=None, classname=None): + """ + Imports SeisFlows module and extracts class that is the camelcase version + of the module name. Used to dynamically import sub-modules by name only, + avoiding the need to hardcode import statements. + + For example: + custom_import('workflow', 'inversion') + + imports 'seisflows.workflow.inversion' and, from this module, extracts + class 'Inversion'. + + :type name: str + :param name: component of the workflow to import, defined by `names`, + available: "system", "preprocess", "solver", + "postprocess", "optimize", "workflow" + :type module: module within the workflow component to call upon, e.g. + seisflows.workflow.inversion, where `inversion` is the module + :type classname: str + :param classname: the class to be called from the module. Usually this is + just the CamelCase version of the module, which will be defaulted to if + this parameter is set `None`, however allows for custom class naming. + Note: CamelCase class names following PEP-8 convention. + """ + # Parse input arguments for custom import + # Allow empty system to be called so that import error message can be thrown + if name is None: + print(msg.cli( + "Please check that 'custom_import' utility is being used as " + "follows: custom_import(name, module). The resulting full dotted " + "name 'seisflows.name.module' must correspond to a module " + "within this package.", header="custom import error", border="=")) + sys.exit(-1) + # Invalid `system` call + elif name not in NAMES: + print(msg.cli( + "Please check that the use of custom_import(name, module, class) " + "is implemented correctly, where name must be in the following:", + items=NAMES, header="custom import error", border="=")) + sys.exit(-1) + # Attempt to retrieve currently assigned classname from parameters + if module is None: + try: + module = sys.modules["seisflows_parameters"][name.upper()] + except KeyError: + return Null + # If this still returns nothing, then no module has been assigned + # likely the User has turned this module OFF + if module is None: + return Null + # If no method specified, convert classname to PEP-8 + if classname is None: + # Make a distinction for fully uppercase classnames, e.g. LBFGS + if module.isupper(): + classname = module.upper() + # If normal classname, convert to CamelCase + else: + classname = module.title().replace("_", "") + + # Check if modules exist, otherwise raise custom exception + _exists = False + full_dotted_name = ".".join(["seisflows", name, module]) + # find_loader() checks if the module exists or not + if not find_loader(full_dotted_name): + print(msg.cli(f"The following module was not found within the package: " + f"seisflows.{name}.{module}", + header="custom import error", border="=") + ) + sys.exit(-1) + + # If importing the module doesn't work, throw an error. Usually this happens + # when an external dependency isn't available, e.g., Pyatoa + try: + module = import_module(full_dotted_name) + except Exception as e: + print(msg.cli(f"Module could not be imported {full_dotted_name}", + items=[str(e)], header="custom import error", border="=")) + print(traceback.print_exc()) + sys.exit(-1) + + # Extract classname from module if possible + try: + return getattr(module, classname) + except AttributeError: + print(msg.cli(f"The following method was not found in the imported " + f"class: seisflows.{name}.{module}.{classname}")) + sys.exit(-1) + + +def pickle_function_list(functions, path=os.getcwd(), **kwargs): + """ + Save a list of functions and their keyword arguments as pickle files. + Return the names of the files. Used for running functions from spawned + processes during cluster runs. + + .. note:: + The idea here is that we need this list of functions to be + discoverable by a system separate to the one that defined them. To + do this we can pickle Python objects on disk, and have the new + system read in the pickle files and evaluate the objects. We use + 'dill' because Pickle can't serialize methods/functions + + :type functions: list of methods + :param functions: a list of functions that should be run in order. All + kwargs passed to run() will be passed into the functions. + :type path: str + :param path: path to save the pickle files. Defaults to current working + directory + :rtype: tuple of str + :return: (name of the pickle file containing the function, + name of the pickle file containing keyword arguments) + """ + # Save the instances that define the functions as a pickle object + func_names = "_".join([_.__name__ for _ in functions]) # unique identifier + fid_funcs_pickle = os.path.join(path, f"{func_names}.p") + + with open(fid_funcs_pickle, "wb") as f: + dill.dump(obj=functions, file=f) + + # Save the kwargs as a separate pickle object + fid_kwargs_pickle = os.path.join(path, f"{func_names}_kwargs.p") + with open(fid_kwargs_pickle, "wb") as f: + dill.dump(obj=kwargs, file=f) + + return fid_funcs_pickle, fid_kwargs_pickle + + +def number_fid(fid, i=0): + """ + Number a filename. Used to store old log files without overwriting them. + Premise is, if you have a file e.g., called: output.txt + This function would return incrementing filenames: + output_000.txt, output_001.txt, output_002.txt, ouput_003.txt ... + + .. note:: + Replace statement is catch-all, so we assume that there is only one + instance of the file extension in the entire path. + + :type fid: str + :param fid: path to the file that you want to increment + :type i: int + :param i: number to append to file id + :rtype: str + :return: filename with appended number. filename ONLY, will strip away + the original path location + """ + fid_only = os.path.basename(fid) + ext = os.path.splitext(fid_only)[-1] # e.g., .txt + new_ext = f"_{i:0>3}{ext}" # e.g., _000.txt + new_fid = fid_only.replace(ext, new_ext) + return new_fid diff --git a/seisflows/tools/err.py b/seisflows/tools/err.py deleted file mode 100644 index 2e984051..00000000 --- a/seisflows/tools/err.py +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env python3 -""" -Custom errors for Seisflows -""" - - -class ParameterError(ValueError): - """ - A new ValueError class which explains the Parameter's that threw the error - """ - def __init__(self, *args): - if len(args) == 0: - msg = "Bad parameter." - super(ParameterError, self).__init__(msg) - elif len(args) == 1: - msg = f"Bad parameter: {args[0]}" - super(ParameterError, self).__init__(msg) - elif args[1] not in args[0]: - msg = f"{args[1]} is not defined." - super(ParameterError, self).__init__(msg) - elif key in obj: - msg = f"{args[0]} has bad value: {args[1].__getattr__(args[0])}" - super(ParameterError, self).__init__(msg) - -class CheckError(ValueError): - """ - An error called by the Check functions within each module, that returns the - name of the class that raised the error, as well as the parameter in - question. - """ - def __init__(self, cls, par): - """ - CheckError simply returns a print message - """ - msg = f"{cls.__class__.__name__} requires parameter {par}" - super(CheckError, self).__init__(msg) - diff --git a/seisflows/tools/graphics.py b/seisflows/tools/graphics.py index b4660619..79048702 100644 --- a/seisflows/tools/graphics.py +++ b/seisflows/tools/graphics.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 """ -Visualization tools for Seisflows +Basic visualization tools for SeisFlows to visualize waveforms, models, etc. """ import numpy as np import matplotlib.pyplot as plt @@ -9,25 +9,103 @@ from obspy.core.stream import Stream -def plot_gll(x, y, z): +def plot_2d_contour(x, z, data, cmap="viridis", zero_midpoint=False): """ - Plots values on 2D unstructured GLL mesh + Plots values of a SPECEFM2D model/gradient on an unstructured grid + :type x: np.array :param x: x values of GLL mesh - :type y: np.array - :param y: y values of GLL mesh :type z: np.array :param z: z values of GLL mesh + :type data: np.array + :param data: D + :type cmap: str + :param cmap: matplotlib colormap to be applied to the contour plot. Defaults + to 'viridis' + :type zero_midpoint: bool + :param zero_midpoint: set 0 as the midpoint for the colorbar. Useful for + diverging colorscales (e.g., for gradients), where the neutral color + (e.g., white) is set at value=0 """ - r = (max(x) - min(x))/(max(y) - min(y)) + # Figure out aspect ratio of the figure + r = (max(x) - min(x))/(max(z) - min(z)) rx = r/np.sqrt(1 + r**2) ry = 1/np.sqrt(1 + r**2) - f = plt.figure(figsize=(10*rx, 10*ry)) - p = plt.tricontourf(x, y, z, 125) - plt.axis('image') + # Assign zero as the midpoint for things like gradients + if zero_midpoint: + abs_max_val = max(abs(data)) + vmin = -1 * abs_max_val + vmax = abs_max_val + else: + vmin, vmax = None, None + + f = plt.figure(figsize=(10 * rx, 10 * ry)) + p = plt.tricontourf(x, z, data, levels=125, cmap=cmap, vmin=vmin, vmax=vmax) + cbar = plt.colorbar(p, shrink=0.8, pad=0.025) # , format="%.2f") + plt.axis("image") + + return f, p, cbar + + +def plot_2d_image(x, z, data, cmap="viridis", zero_midpoint=False, resX=1000, resZ=1000): + """ + Plots values of a SPECEFM2D model/gradient by interpolating onto a regular grid + + :type x: np.array + :param x: x values of GLL mesh + :type z: np.array + :param z: z values of GLL mesh + :type data: np.array + :param data: D + :type cmap: str + :param cmap: matplotlib colormap to be applied to the contour plot. Defaults + to 'viridis' + :type zero_midpoint: bool + :param zero_midpoint: set 0 as the midpoint for the colorbar. Useful for + diverging colorscales (e.g., for gradients), where the neutral color + (e.g., white) is set at value=0 + :type resX: int + :param resX: number of points for the interpolation in x- direction (default=1000) + :type resZ: int + :param resZ: number of points for the interpolation in z- direction (default=1000) + """ + # Figure out aspect ratio of the figure + r = (max(x) - min(x))/(max(z) - min(z)) + rx = r/np.sqrt(1 + r**2) + ry = 1/np.sqrt(1 + r**2) - return f, p + # Assign zero as the midpoint for things like gradients + if zero_midpoint: + abs_max_val = max(abs(data)) + vmin = -1 * abs_max_val + vmax = abs_max_val + else: + vmin, vmax = None, None + + f = plt.figure(figsize=(10 * rx, 10 * ry)) + from scipy.interpolate import griddata + + # trick interpolation using the maximum values of z in case of concave topography. + # nan values helps interpolation act expectedly. + # Can be tested using the default specfem2D model: simple_topography_and_also_a_simple_fluid_layer + x = np.append(x, [min(x), max(x)]) + z = np.append(z, [max(z), max(z)]) + data = np.append(data, [np.nan, np.nan]) + + xi = np.linspace(min(x), max(x), resX) + zi = np.linspace(min(z), max(z), resZ) + X, Z = np.meshgrid(xi, zi) + V = griddata((x, z), data, (X, Z), method='linear') + im = plt.imshow(V, vmax=vmax, vmin=vmin, + extent=[x.min(), x.max(), z.min(), z.max()], + cmap=cmap, + origin='lower') + + cbar = plt.colorbar(im, shrink=0.8, pad=0.025) + plt.axis("image") + + return f, im, cbar def plot_vector(t, v, xlabel='', ylabel='', title=''): diff --git a/seisflows/tools/math.py b/seisflows/tools/math.py index dabe8c53..d7aaf33a 100644 --- a/seisflows/tools/math.py +++ b/seisflows/tools/math.py @@ -2,9 +2,13 @@ """ Mathematical tools for Seisflows """ +import sys import numpy as np from scipy.signal import hilbert as analytic +from seisflows import logger +from seisflows.tools import msg + def angle(x, y): """ @@ -148,8 +152,9 @@ def polynomial_fit(x, f): p = np.polyfit(x[i-1:i+2], f[i-1:i+2], 2) if p[0] <= 0: - # TODO Figure out why this exit condition is here - print(msg.cli("Polynomial line fitting returned a negative p[0] value")) + logger.critical(msg.cli("Polynomial line fitting returned a negative " + "p[0] value which signifies a negative misfit " + "and is not allowed.")) sys.exit(-1) return -p[1] / (2 * p[0]) diff --git a/seisflows/tools/model.py b/seisflows/tools/model.py new file mode 100644 index 00000000..3e444c74 --- /dev/null +++ b/seisflows/tools/model.py @@ -0,0 +1,609 @@ +#!/usr/bin/env python3 +""" +A Model class for interfacing with SPECFEM velocity models, used to read +models into memory, manipulate and write to disk. Also contains plotting +functions for SPECFEM2D models +""" +import os +import numpy as np +import matplotlib.pyplot as plt +from copy import deepcopy +from glob import glob +from seisflows import logger +from seisflows.tools import unix +from seisflows.tools.config import Dict +from seisflows.tools.math import poissons_ratio +from seisflows.tools.graphics import plot_2d_image +from seisflows.tools.specfem import read_fortran_binary, write_fortran_binary + + +class Model: + """ + A container for reading, storing and manipulating model/gradient/kernel + parameters from SPECFEM2D/3D/3D_GLOBE. + Stores metadata information alongside model data allowing models to be + converted to back and forth between vector representations required by the + optimization library. + Also contains utility functions to read/write itself so that models can be + saved alongside their metadata. + """ + # Dictate the parameters that Model can handle, which does not cover all + # files created by SPECFEM, which includes things like 'ibool', 'info' etc. + acceptable_parameters = ["vp", "vs", "rho", + "vpv", "vph", "vsv", "vsh", "eta"] + acceptable_parameters.extend([f"{_}_kernel" for _ in acceptable_parameters]) + + def __init__(self, path=None, fmt="", parameters=None): + """ + Model only needs path to model to determine model parameters. Format + `fmt` can be provided by the user or guessed based on available file + formats + + .. note:: + The `vector` representation is based completely on the `model` + attribute. In order to update the model based on vector manipulation + you must use the update() function. + + :type path: str + :param path: path to SPECFEM model/kernel/gradient files + :type fmt: str + :param fmt: expected format of the files (e.g., '.bin'), if None, will + attempt to guess based on the file extensions found in `path` + Available formats are: .bin, .dat + """ + self.path = path + self.fmt = fmt + self.model = None + self.coordinates = None + self._parameters = parameters + self._ngll = None + self._nproc = None + + # Load an existing model if a valid path is given + if self.path and os.path.exists(path): + # Read existing model from a previously saved .npz file + if os.path.splitext(path)[-1] == ".npz": + self.model, self.coordinates, self._ngll, self.fmt = \ + self.load(file=self.path) + _first_key = list(self.model.keys())[0] + self._nproc = len(self.model[_first_key]) + # Read a SPECFEM model from its native output files + else: + if not self.fmt: + self.fmt = self._guess_file_format() + self._nproc, self.available_parameters = \ + self._get_nproc_parameters() + self.model = self.read(parameters=parameters) + # Coordinates are only useful for SPECFEM2D models + try: + self.coordinates = self.read_coordinates_specfem2d() + except AssertionError: + pass + + # .sorted() enforces parameter order every time, otherwise things + # can get screwy if keys returns different each time + self._parameters = sorted(self.model.keys()) + else: + logger.warning("no/invalid `path` given, initializing empty Model") + + + @staticmethod + def fnfmt(i="*", val="*", ext="*"): + """ + Expected SPECFEM filename format with some checks to ensure that + wildcards and numbers are accepted. An example filename is: + 'proc000001_vs.bin' + + :type i: int or str + :param i: processor number or wildcard. If given as an integer, will be + converted to a 6 digit zero-leading value to match SPECFEM format + :type val: str + :param val: parameter value (e.g., 'vs') or wildcard + :type ext: str + :param ext: the file format (e.g., '.bin'). If NOT preceded by a '.' + will have one prepended + :rtype: str + :return: filename formatter for use in model manipulation + """ + if not ext.startswith("."): + ext = f".{ext}" + if isinstance(i, int): + filename_format = f"proc{i:0>6}_{val}{ext}" + else: + filename_format = f"proc{i}_{val}{ext}" + return filename_format + + @property + def parameters(self): + """ + Returns a list of parameters which defines the model. + """ + if not self._parameters: + self._parameters = list(self.model.keys()) + return self._parameters + + @property + def ngll(self): + """ + Provide the number of GLL (Gauss Lobatto Legendre) points per processor + chunk. Access hidden attribute `_ngll` in the case that the model + is very large, we only want to count the GLL points once. + + :rtype: list of float + :return: each float represents the number of GLL points for the chunk + number that corresponds to its index + """ + if not self._ngll: + self._update_ngll_from_model() + return self._ngll + + def _update_ngll_from_model(self): + """Convenience function to count NGLL points as length of data arrays + for each parameter processor chunk""" + self._ngll = [] + for proc in self.model[self.parameters[0]]: + self._ngll.append(len(proc)) + + @property + def nproc(self): + """ + Returns the number of processors that define the model/gradient/kernel. + + :rtype: int + :return: number of processors that define the model + """ + if not self._nproc: + self._nproc = len(self.model[self.parameters[0]]) + return self._nproc + + @property + def vector(self): + """ + Conveience property to access the merge() function which creates a + linear vector defining all model parameters + + :rtype: np.array + :return: a linear vector of all model parameters + """ + try: + return self.merge() + except TypeError as e: + raise TypeError("Model cannot merge files into continous " + "vector") from e + + def copy(self): + """Returns a deep copy of self so that models can be transferred""" + return deepcopy(self) + + def read(self, parameters=None): + """ + Utility function to load in SPECFEM models/kernels/gradients saved in + various formats. Will try to guess format of model. Assumes that models + are saved using the following filename format: + + proc{num}_{val}.{format} where `num` is usually a 6 digit number + representing the processor number (e.g., 000000), `val` is the parameter + value of the model/kernel/gradient and `format` is the format of the + file (e.g., bin) + + :type parameters: list of str + :param parameters: unique parameters to load model for, if None will load + all available parameters found in `path` + :rtype: Dict of np arrays + :return: Dictionary where keys correspond to model parameters and values + are vectors (np.arrays) representing the model + """ + if parameters is None: + parameters = self.available_parameters + else: + assert (set(parameters).union(set(self.available_parameters))), ( + f"user-chosen parameters not in available: " + f"{self.available_parameters}" + ) + + # Pick the correct read function based on the file format + load_fx = {".bin": self._read_model_fortran_binary, + ".dat": self._read_model_ascii, + ".adios": self._read_model_adios # TODO Check if this okay + }[self.fmt] + + # Create a dictionary object containing all parameters and their models + parameter_dict = Dict({key: [] for key in parameters}) + for parameter in parameters: + parameter_dict[parameter] = load_fx(parameter=parameter) + + return parameter_dict + + def read_coordinates_specfem2d(self): + """ + Attempt to read coordinate files from the given model definition. + This is only really useful for SPECFEM2D, where we can plot the + model, kernel and gradient using matplotlib. + + .. warning + This will NOT work for SPECEFM3D. When you get to 3D, the + coordinates don't match up one-to-one with the model values so you + need external viewing software (e.g., ParaView) to plot. + + :rtype: Dict + :return: a dictioanary with the X and Z coordinates read in from + a SPECFEM2D model, if applicable + """ + coordinates = {"x": [], "z": []} + if self.fmt == ".bin": + coordinates["x"] = self._read_model_fortran_binary(parameter="x") + coordinates["z"] = self._read_model_fortran_binary(parameter="z") + elif self.fmt == ".dat": + fids = glob(os.path.join(self.path, + self.fnfmt(val="*", ext=".dat"))) + for fid in sorted(fids): + coordinates["x"].append(np.loadtxt(fid).T[:, 0]) + coordinates["z"].append(np.loadtxt(fid).T[:, 0]) + + # Internal check for parameter validity by checking length of coord + # against length of model. If they're not the same, then it's not + # useful to store coordinates because they can't be used for plotting + assert (len(coordinates["x"]) == len(coordinates["z"])), \ + f"coordinate arrays do not match in length" + # Assuming all model parameters have the same length + assert (len(coordinates["x"]) == + len(self.model[list(self.model.keys())[0]])), \ + f"length of coordinates array does not match model length" + + return coordinates + + def merge(self, parameter=None): + """ + Convert dictionary representation `model` to vector representation `m` + where all parameters and processors are stored as a single 1D vector. + This vector representation is used by the optimization library during + model perturbation. + + :type parameter: str + :param parameter: single parameter to retrieve model vector from, + otherwise returns all parameters merged into single vector + :rtype: np.array + :return: vector representation of the model + """ + m = np.array([]) + if parameter is None: + parameters = self.parameters + else: + parameters = [parameter] + + for parameter in parameters: + for iproc in range(self.nproc): + m = np.append(m, self.model[parameter][iproc]) + + return m + + def write(self, path, fmt=None): + """ + Save a SPECFEM model/gradient/kernel vector loaded into memory back to + disk in the appropriate format expected by SPECFEM + """ + unix.mkdir(path) + if fmt is None: + assert (self.fmt is not None), f"must specifiy model format: `fmt`" + fmt = self.fmt + + # Pick the correct read function based on the file format + save_fx = {".bin": self._write_model_fortran_binary, + # ".dat": _write_model_ascii, + # ".adios": _write_model_adios # TODO Check if right + }[fmt] + + save_fx(path=path) + + def split(self, vector=None): + """ + Converts internal vector representation `m` to dictionary representation + `model`. Does this by separating the vector based on how it was + constructed, parameter-wise and processor-wise + + :type vector: np.array + :param vector: allow Model to split an input vector. If none given, + will split the internal vector representation + :rtype: Dict of np.array + :return: dictionary of model parameters split up by number of processors + """ + if vector is None: + vector = self.vector + + model = Dict({key: [] for key in self.parameters}) + for idim, key in enumerate(self.parameters): + for iproc in range(self.nproc): + imin = sum(self.ngll) * idim + sum(self.ngll[:iproc]) + imax = sum(self.ngll) * idim + sum(self.ngll[:iproc + 1]) + model[key].extend([vector[imin:imax]]) + + model[key] = np.array(model[key]) + return model + + def check(self, min_pr=-1., max_pr=0.5): + """ + Checks parameters in the model. If Vs and Vp present, checks poissons + ratio. Checks for negative velocity values. And prints out model + min/max values + """ + if "vs" in self.parameters and "vp" in self.parameters: + pr = poissons_ratio(vp=self.merge(parameter="vp"), + vs=self.merge(parameter="vs")) + if pr.min() < 0: + logger.warning("minimum poisson's ratio is negative") + if pr.max() < min_pr: + logger.warning(f"maximum poisson's ratio out of bounds: " + f"{pr.max():.2f} > {max_pr}") + if pr.min() > max_pr: + logger.warning(f"minimum poisson's ratio out of bounds: " + f"{pr.min():.2f} < {min_pr}") + + if "vs" in self.model and np.hstack(self.model.vs).min() < 0: + logger.warning(f"Vs minimum is negative {self.model.vs.min()}") + + if "vp" in self.model and np.hstack(self.model.vp).min() < 0: + logger.warning(f"Vp minimum is negative {self.model.vp.min()}") + + # Tell the User min and max values of the updated model + for key, vals in self.model.items(): + min_val = np.hstack(vals).min() + max_val = np.hstack(vals).max() + # Choose formatter based on the magnitude of the value + if min_val < 1 or max_val > 1E4: + parts = f"{min_val:.2E} <= {key} <= {max_val:.2E}" + else: + parts = f"{min_val:.2f} <= {key} <= {max_val:.2f}" + logger.info(parts) + + def save(self, path): + """ + Save instance attributes (model, vector, metadata) to disk as an + .npz array so that it can be loaded in at a later time for future use + """ + model = self.split() + if self.coordinates: + # Incase we have model parameters called 'x' or 'z', rename for save + model["x_coord"] = self.coordinates["x"] + model["z_coord"] = self.coordinates["z"] + + np.savez(file=path, fmt=self.fmt, **model) + + def load(self, file): + """ + Load in a previously saved .npz file containing model information + and re-create a Model instance matching the one that was `save`d + + :type file: str + :param file: .npz file to load data from. Must have been created by + Model.save() + :rtype: tuple (Dict, list, str) + :return: (Model Dictionary, ngll points for each slice, file format) + """ + model = Dict() + coords = Dict() + ngll = [] + data = np.load(file=file) + for i, key in enumerate(data.files): + if key == "fmt": + continue + # Special case where we are using SPECFEM2D and carry around coords + elif "coord" in key: + coords[key[0]] = data[key] # drop '_coord' suffix from `save` + else: + model[key] = data[key] + # Assign the number of GLL points per slice. Only needs to happen + # once because all model values should have same points/slice + if not ngll: + for array in model[key]: + ngll.append(len(array)) + + return model, coords, ngll, str(data["fmt"]) + + def update(self, model=None, vector=None): + """ + Update internal model/vector defitions. Because these two quantities + are tied to one another, updating one will update the other. This + function simply makes that easier. + """ + if model is not None: + self.model = model + elif vector is not None: + self.model = self.split(vector=vector) + + def plot2d(self, parameter, cmap=None, show=True, title="", save=None): + """ + Plot internal model parameters as a 2D image plot. + + .. warning:: + This is only available for SPECFEM2D models. SPECFEM3D model + coordinates do not match the model vectors (because the grids are + irregular) and cannot be visualized like this. + + :type parameter: str + :param parameter: chosen internal parameter value to plot. + :type cmap: str + :param cmap: colormap which match available matplotlib colormap. + If None, will choose default colormap based on parameter choice. + :type show: bool + :param show: show the figure after plotting + :type title: str + :param title: optional title to prepend to some values that are + provided by default. Useful for adding information about iteration, + step count etc. + :type save: str + :param save: if not None, full path to figure to save the output image + """ + assert (parameter in self._parameters), \ + f"chosen `parameter` must be in {self._parameters}" + + assert (self.coordinates is not None), ( + f"`plot2d` function requires model coordinates which are only " + f"available for solver SPECFEM2D" + ) + + # Choose default colormap based on parameter values + if cmap is None: + if "kernel" in parameter: + cmap = "seismic_r" + zero_midpoint = True + else: + cmap = "Spectral" + zero_midpoint = False + + # 'Merge' the coordinate matrices to get a vector representation + x, z = np.array([]), np.array([]) + for iproc in range(self.nproc): + x = np.append(x, self.coordinates["x"][iproc]) + z = np.append(z, self.coordinates["z"][iproc]) + data = self.merge(parameter=parameter) + + f, p, cbar = plot_2d_image(x=x, z=z, data=data, cmap=cmap, + zero_midpoint=zero_midpoint) + + # Set some figure labels based on information we know here + ax = plt.gca() + ax.set_xlabel("X [m]") + ax.set_ylabel("Z [m]") + # Allow User to title the figure, e.g., with iteration, step count etc. + _title = (f"{parameter.title()}_min = {data.min()};\n" + f"{parameter.title()}_max = {data.max()};\n" + f"{parameter.title()}_mean = {data.mean()}") + if title: + _title = f"{title}\n{_title}" + ax.set_title(_title) + cbar.ax.set_ylabel(parameter.title(), rotation=270, labelpad=15) + + if save: + plt.savefig(save) + if show: + plt.show() + + def _get_nproc_parameters(self): + """ + Get the number of processors and the available parameters from a list of + output SPECFEM model files. + + :rtype: tuple (int, list) + :return: (number of processors, list of available parameters in dir) + """ + fids = glob(os.path.join(self.path, self.fnfmt(val="*", ext=self.fmt))) + fids = [os.path.basename(_) for _ in fids] # drop full path + fids = [os.path.splitext(_)[0] for _ in fids] # drop extension + + if self.fmt == ".bin": + avail_par = list(set(["_".join(_.split("_")[1:]) for _ in fids])) + nproc = len(glob(os.path.join( + self.path, self.fnfmt(val=avail_par[0], ext=self.fmt))) + ) + elif self.fmt == ".dat": + # e.g., 'proc000000_rho_vp_vs' + _, *avail_par = fids[0].split("_") + nproc = len(fids) + 1 + else: + raise NotImplementedError(f"{self.fmt} is not yet supported by " + f"SeisFlows") + + # Remove any parameters not accepted by Model + avail_par = set(avail_par).intersection(set(self.acceptable_parameters)) + + return nproc, list(avail_par) + + def _guess_file_format(self): + """ + Guess the file format of model/kernel/gradient files if none provided by + the user. Does so by checking file formats against formats expected from + SPECFEM2D/3D/3D_GLOBE + + :rtype: str + :return: file format suffix with a leading '.' e.g., '.bin' + """ + acceptable_formats = {".bin", ".dat"} + + files = glob(os.path.join(self.path, "*")) + suffixes = set([os.path.splitext(_)[1] for _ in files]) + fmt = acceptable_formats.intersection(suffixes) + assert (len(fmt) == 1), ( + f"cannot guess model format, multiple matching acceptable formats " + f"found: {list(suffixes)}" + ) + return list(fmt)[0] # pulling single entry from set + + def _read_model_fortran_binary(self, parameter): + """ + Load Fortran binary models into disk. This is the preferred model format + for SeisFlows <-> SPECFEM interaction + + :type parameter: str + :param parameter: chosen parameter to load model for + :rtype: np.array + :return: vector of model values for given `parameter` + """ + array = [] + fids = glob(os.path.join( + self.path, self.fnfmt(val=parameter, ext=".bin")) + ) + for fid in sorted(fids): # make sure were going in numerical order + array.append(read_fortran_binary(fid)) + + # !!! Causes a visible deprecation warning from NumPy but setting + # !!! array type as 'object' causes problems with pickling and + # !!! merging arrays + array = np.array(array) + + return array + + def _read_model_adios(self, parameter): + """ + Load ADIOS models into disk + + :type parameter: str + :param parameter: chosen parameter to load model for + :rtype: np.array + :return: vector of model values for given `parameter` + """ + raise NotImplementedError("ADIOS file formats are not currently " + "implemented into SeisFlows") + + def _read_model_ascii(self, parameter): + """ + Load ASCII SPECFEM2D models into disk. ASCII models are generally saved + all in a single file with all parameters together as a N column ASCII file + where columns 1 and 2 are the coordinates of the mesh, and the remainder + columns are data corresponding to the filenames + e.g., proc000000_rho_vp_vs.dat, rho is column 3, vp is 4 etc. + + :type parameter: str + :param parameter: chosen parameter to load model for + :rtype: np.array + :return: vector of model values for given `parameter` + """ + fids = glob(os.path.join(self.path, self.fnfmt(val="*", ext=".dat"))) + _, *available_parameters = fids[0].split("_") + assert (parameter in available_parameters), ( + f"{parameter} not available for ASCII model" + ) + # +2 because first 2 columns are the X and Z coordinates in the mesh + array = [] + column_idx = available_parameters.index(parameter) + 2 + for fid in sorted(fids): + array.append(np.loadtxt(fid).T[:, column_idx]) + + return np.array(array) + + def _write_model_fortran_binary(self, path): + """ + Save a SPECFEM model back to Fortran binary format. + Data are written as single precision floating point numbers + + .. note:: + FORTRAN unformatted binaries are bounded by an INT*4 byte count. + This function mimics that behavior by tacking on the boundary data + as 'int32' at the top and bottom of the data array. + https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnc4/index.html + """ + for parameter in self.parameters: + for i, data in enumerate(self.model[parameter]): + filename = self.fnfmt(i=i, val=parameter, ext=".bin") + filepath = os.path.join(path, filename) + + write_fortran_binary(arr=data, filename=filepath) diff --git a/seisflows/tools/msg.py b/seisflows/tools/msg.py index f0b770e9..c1a647a5 100644 --- a/seisflows/tools/msg.py +++ b/seisflows/tools/msg.py @@ -155,105 +155,44 @@ def cli(text="", items=None, wraplen=80, header=None, border=None, hchar="/"): return output_str -def write_par_file_header(f, paths_or_parameters, name="", tabsize=4, - border="=", uline="/"): - """ - Re-usable function to write docstring comments inside the SeisFlows - parameter file. Used by seisflows.SeisFlows.configure() - - Headers look something like this - - # =========================== - # MODULE NAME - # /////////// - # PAR (type): - # description of par - # =========================== - PAR: val - - :type f: _io.TextIO - :param f: open text file to write to - :type paths_or_parameters: dict - :param paths_or_parameters: the paths or parameters that should be written - to the header - :type name: str - :param name: the name of the module that is being written, will be used as - the header of the docstring - :type tabsize: int - :param tabsize: how large to expand tab character '\t' as spaces - :type border: str - :param border: character to use as the header and footer border - :type uline: str - :param uline: how to underline the header - """ - # Some aesthetically pleasing dividers to separate sections - # Length 77 ensure that total line width is no more than 80 characters - # including the '#' and spaces - top = (f"\n# {border * 77}" - f"\n# {name.upper():^77}" - f"\n# {uline * len(name):^77}" - f"\n" - ) - bot = f"# {border * 77}\n" - - # Write top header, all parameters, types and descriptions, and then footer - f.write(top) - for key, attrs in paths_or_parameters.items(): - if "type" in attrs: - f.write(f"# {key} ({attrs['type']}):\n") - else: - f.write(f"# {key}:\n") - docstrs = wrap(attrs["docstr"], width=77 - tabsize, - break_long_words=False) - for line, docstr in enumerate(docstrs): - f.write(f"#\t{docstr}\n".expandtabs(tabsize=tabsize)) - f.write(bot) - - -def write_par_file_paths_pars(f, paths_or_parameters, indent=0, tabsize=4): - """ - Re-usable function to write paths or parameters in yaml format to the - SeisFlows parameter file. Used by seisflows.SeisFlows.configure() - - Parameters are written something like: - - PAR1: val1 - PAR2: val2 - Par3: - - val3a - - val3b - - val3c - - :type f: _io.TextIO - :param f: open text file to write to - :type paths_or_parameters: dict - :param paths_or_parameters: the paths or parameters that should be written - to the header - :type indent: int - :param indent: level of indentation to match yaml style. passed to - str.expandtabs(tabsize=`indent`) - :type tabsize: int - :param tabsize: how large to expand tab character '\t' as spaces - """ - for key, attrs in paths_or_parameters.items(): - # Lists need to be treated differently in yaml format - if isinstance(attrs["default"], list): - if len(attrs["default"]) == 0: - f.write(f"{key}: []\n") - else: - f.write(f"{key}:\n") - for val in attrs["default"]: - f.write(f"\t- {val}\n".expandtabs(tabsize=tabsize)) - else: - # Yaml saves NoneType values as 'null' or blank lines - if attrs["default"] is None: - f.write(f"\t{key}:\n".expandtabs(tabsize=indent)) - else: - f.write( - f"\t{key}: {attrs['default']}\n".expandtabs(tabsize=indent) - ) +# Template parameter file used for 'seisflows setup' to initiate a workflow +base_parameter_file = """ +# ////////////////////////////////////////////////////////////////////////////// +# +# SeisFlows YAML Parameter File +# +# ////////////////////////////////////////////////////////////////////////////// +# +# Modules correspond to the structure of the source code, and determine +# SeisFlows' behavior at runtime. Each module requires its own sub-parameters. +# +# .. rubric:: +# - Determine available options for modules by running: +# > seisflows print modules +# - Auto-fill with docstrings and default values (recommended) by running: +# > seisflows configure +# - Swap out module parameters for a configured parameter file by running: +# > seisflows swap {module} {name} (e.g., seisflows swap solver specfem3d) +# - To set values as NoneType, use: null +# - To set values as infinity, use: inf +# +# MODULES +# /////// +# workflow (str): The types and order of functions for running SeisFlows +# system (str): Computer architecture of the system being used +# solver (str): External numerical solver to use for waveform simulations +# preprocess (str): Preprocessing schema for waveform data +# optimize (str): Optimization algorithm for the inverse problem +# ============================================================================== +workflow: forward +system: workstation +solver: specfem2d +preprocess: default +optimize: gradient +""" +# SeisFlows 'Globe' logo in ASCII. Used for CLI print statements ascii_logo = """ @@@@@@@@@@@@@@@@@@@@@@@ diff --git a/seisflows/tools/specfem.py b/seisflows/tools/specfem.py index df518bbc..fe1dd9ea 100644 --- a/seisflows/tools/specfem.py +++ b/seisflows/tools/specfem.py @@ -3,81 +3,55 @@ i.e., SPECFEM2D/3D/3D_GLOBE """ import os -import sys import numpy as np -import subprocess - -from collections import defaultdict +from glob import glob +from seisflows import logger from seisflows.tools import msg -from seisflows.tools.math import poissons_ratio -from seisflows.tools.wrappers import iterable - - -class Minmax(defaultdict): - """ - Keeps track of min, max values of model or kernel - """ - def __init__(self): - super(Minmax, self).__init__(lambda: [+np.inf, -np.inf]) - - def update(self, keys, vals): - for key, val in _zip(keys, vals): - if min(val) < self.dict[key][0]: - self.dict[key][0] = min(val) - if max(val) > self.dict[key][1]: - self.dict[key][1] = max(val) - - def __call__(self, key): - return self.dict[key] -class Container(defaultdict): +def check_source_names(path_specfem_data, source_prefix, ntask=None): """ - Dictionary-like object for holding models or kernels + Determines names of sources by applying wildcard rule to user-supplied + input files. Source names are only provided up to PAR.NTASK and are + returned in alphabetical order. + + .. note:: + SeisFlows expects sources to be stored in the DATA/ directory with a + prefix and a source name, e.g., {source_prefix}_{source_name} which + would evaluate to something like CMTSOLUTION_001 + + :type path_specfem_data: str + :param path_specfem_data: path to a + :type source_prefix: str + :param source_prefix: type of SPECFEM input source, e.g., CMTSOLUTION + :type ntask: int + :parma ntask: if provided, curtails the list of sources up to `ntask`. If + None, returns all files found matching the wildcard + :rtype: list + :return: alphabetically ordered list of source names up to PAR.NTASK """ - def __init__(self): - super(Container, self).__init__(lambda: []) - self.minmax = Minmax() + wildcard = f"{source_prefix}_*" + fids = sorted(glob(os.path.join(path_specfem_data, wildcard))) + if not fids: + logger.warning( + msg.cli("No matching source files when searching PATH for the " + "given WILDCARD", + items=[f"PATH: {path_specfem_data}", + f"WILDCARD: {wildcard}"], + header="error") + ) + return + if ntask is not None: + assert(len(fids) >= ntask), ( + f"Number of requested tasks/events {ntask} exceeds number " + f"of available sources {len(fids)}" + ) + fids = fids[:ntask] + # Create internal definition of sources names by stripping prefixes + names = [os.path.basename(fid).split("_")[-1] for fid in fids] -def call_solver(mpiexec, executable, output="solver.log"): - """ - Calls MPI solver executable to run solver binaries, used by individual - processes to run the solver on system. If the external solver returns a - non-zero exit code (failure), this function will return a negative boolean. - - :type mpiexec: str - :param mpiexec: call to mpi. If None (e.g., serial run, defaults to ./) - :type executable: str - :param executable: executable function to call - :type output: str - :param output: where to redirect stdout - """ - # mpiexec is None when running in serial mode, so e.g., ./xmeshfem2D - if mpiexec is None: - exc_cmd = f"./{executable}" - # Otherwise mpiexec is system dependent (e.g., srun, mpirun) - else: - exc_cmd = f"{mpiexec} {executable}" - - try: - # Write solver stdout (log files) to text file - f = open(output, "w") - subprocess.run(exc_cmd, shell=True, check=True, stdout=f) - except (subprocess.CalledProcessError, OSError) as e: - print(msg.cli("The external numerical solver has returned a nonzero " - "exit code (failure). Consider stopping any currently " - "running jobs to avoid wasted computational resources. " - f"Check 'scratch/solver/mainsolver/{output}' for the " - f"solvers stdout log message. " - f"The failing command and error message are: ", - items=[f"exc: {exc_cmd}", f"err: {e}"], - header="external solver error", - border="=") - ) - sys.exit(-1) - finally: - f.close() + return names def getpar(key, file, delim="=", match_partial=False): @@ -169,9 +143,13 @@ def setpar(key, val, file, delim="=", match_partial=False): lines = open(file, "r").readlines() - # Replace value in place + # Replace value in place. We only want to replace the 'LAST' occurrence + # otherwise we risk replacing the actual key (e.g., 'data_case' == 'data') + # will replace 'data' twice with a normal .replace() if val_out != "": - lines[i] = lines[i].replace(val_out, str(val)) + line_reverse = lines[i][::-1].replace(val_out[::-1], str(val)[::-1], 1) + lines[i] = line_reverse[::-1] + # lines[i] = lines[i].replace(val_out, str(val)) else: # Special case where the initial parameter is empty so we just replace # the newline formatter at the end @@ -269,67 +247,57 @@ def setpar_vel_model(file, model): setpar(key="nbmodels", val=len(model), file=file) -def check_poissons_ratio(vp, vs, min_val=-1., max_val=0.5): +def read_fortran_binary(filename): """ - Check Poisson's ratio based on Vp and Vs model vectors. Exit SeisFlows if - Poisson's ratio is outside `min_val` or `max_val` which by default are - set internally by SPECFEM. Otherwise return the value - - :type vp: np.array - :param vp: P-wave velocity model vector - :type vs: np.array - :param vp: S-wave velocity model vector - :type min_val: float - :param min_val: minimum model-wide acceptable value for poissons ratio - :type max_val: float - :param max_val: maximum model-wide acceptable value for poissons ratio - :return: + Reads Fortran-style unformatted binary data into numpy array. + + .. note:: + The FORTRAN runtime system embeds the record boundaries in the data by + inserting an INTEGER*4 byte count at the beginning and end of each + unformatted sequential record during an unformatted sequential WRITE. + see: https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnc4/index.html + + :type filename: str + :param filename: full path to the Fortran unformatted binary file to read + :rtype: np.array + :return: numpy array with data with data read in as type Float32 """ - poissons = poissons_ratio(vp=vp, vs=vs) - pmin = poissons.min() - pmax = poissons.max() - if (pmin < min_val) or (pmax > max_val): - print(msg.cli(f"The Poisson's ratio of the given model is out of " - f"bounds with respect to the defined range " - f"({min_val}, {max_val}). " - f"The model bounds were found to be:", - items=[f"{pmin:.2f} < PR < {pmax:.2f}"], border="=", - header="Poisson's Ratio Error") - ) - sys.exit(-1) - return poissons - - -def _split(string, sep): - """ - Utility function to split a string by a given separation character or str - - :type string: str - :param string: string to split - :type sep: str - :param sep: substring to split by - """ - n = string.find(sep) - if n >= 0: - return string[:n], string[n + len(sep):] - else: - return string, '' + nbytes = os.path.getsize(filename) + with open(filename, "rb") as file: + # read size of record + file.seek(0) + n = np.fromfile(file, dtype="int32", count=1)[0] + + if n == nbytes - 8: + file.seek(4) + data = np.fromfile(file, dtype="float32") + return data[:-1] + else: + file.seek(0) + data = np.fromfile(file, dtype="float32") + return data -def _merge(*parts): - """ - Utility function to merge various strings together with no breaks +def write_fortran_binary(arr, filename): """ - return ' '.join(parts) - - -def _zip(keys, vals): + Writes Fortran style binary files. Data are written as single precision + floating point numbers. + + .. note:: + FORTRAN unformatted binaries are bounded by an INT*4 byte count. This + function mimics that behavior by tacking on the boundary data. + https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnc4/index.html + + :type arr: np.array + :param arr: data array to write as Fortran binary + :type filename: str + :param filename: full path to file that should be written in format + unformatted Fortran binary """ - Zip together keys and vals + buffer = np.array([4 * len(arr)], dtype="int32") + data = np.array(arr, dtype="float32") - :type keys: dict_keys - :param keys: keys - :type vals: dict_values - :param vals: values - """ - return zip(iterable(keys), iterable(vals)) + with open(filename, "wb") as file: + buffer.tofile(file) + data.tofile(file) + buffer.tofile(file) diff --git a/seisflows/tools/unix.py b/seisflows/tools/unix.py index 19cdb404..d8841b8c 100644 --- a/seisflows/tools/unix.py +++ b/seisflows/tools/unix.py @@ -8,8 +8,23 @@ import random import shutil import socket +import subprocess -from seisflows.tools.wrappers import iterable + +def _iterable(arg): + """ + Make an argument iterable. Allows for more generalized inputs to these + unix-style functions. + + :type arg: anything + :param arg: an argument to make iterable + :rtype: list + :return: iterable argument + """ + if not isinstance(arg, (list, tuple)): + return [arg] + else: + return arg def cat(src, dst=None): @@ -41,7 +56,7 @@ def cd(path): os.chdir(path) -def cp(src='', dst=''): +def cp(src, dst): """ Copy files @@ -52,7 +67,7 @@ def cp(src='', dst=''): """ if isinstance(src, (list, tuple)): if len(src) > 1: - assert os.path.isdir(dst), "unexpected type for unix.cp 'dst'" + assert os.path.isdir(dst), f"unix.cp 'dst' must be directory: {dst}" for sub in src: cp(sub, dst) return @@ -89,7 +104,7 @@ def ln(src, dst): >>> from seisflows.tools.unix import ln >>> ln("example_file", "path/to/sylink/new_filename") >>> # OR - >>> sln("example_file", "path/to/sylink/") + >>> ln("example_file", "path/to/sylink/") :type src: str :param src: path to file or directory to symlink @@ -136,7 +151,7 @@ def mkdir(dirs): """ time.sleep(2 * random.random()) # interval [0, 2]s - for dir_ in iterable(dirs): + for dir_ in _iterable(dirs): if not os.path.isdir(dir_): os.makedirs(dir_) @@ -174,7 +189,7 @@ def rename(old, new, names): :type names: list :param names: files to replace expressions in """ - for name in iterable(names): + for name in _iterable(names): if name.find(old) >= 0: os.rename(name, name.replace(old, new)) @@ -183,7 +198,7 @@ def rm(path): """ Remove files or directories """ - for name in iterable(path): + for name in _iterable(path): if os.path.isfile(name) or os.path.islink(name): os.remove(name) elif os.path.isdir(name): @@ -224,7 +239,7 @@ def touch(filename, times=None): def which(name): """ - Shows the full path of shell commands + Shows the full path of shell commands and executables :type name: str :param name: name of shell command to check @@ -245,3 +260,36 @@ def isexe(file): else: return None + +def nproc(): + """ + Get the number of processors available. Same as calling 'nproc' from + Linux command line. + + TODO replace all instances of nproc() with os.cpu_count() + + + :rtype: int + :return: number of processors + :raises EnvironmentError: if nproc cannot be determined + """ + _nproc = os.cpu_count() + + # Method 1 calls 'nproc'. May fail and return '' if 'nproc' not avail. + if not _nproc: + _nproc = subprocess.run("nproc", shell=True, text=True, + stdout=subprocess.PIPE).stdout.strip() + # Method 2 checks /proc/cpuinfo + if not _nproc: + if os.path.exists("/proc/cpuinfo"): + processors = 0 + lines = open("/proc/cpuinfo", "r").readlines() + for line in lines: + if line.startswith("processor"): + processors += 1 + if processors: + _nproc = processors + if not _nproc: + raise EnvironmentError("Could not access 'nproc' information on system") + + return int(_nproc) diff --git a/seisflows/tools/wrappers.py b/seisflows/tools/wrappers.py deleted file mode 100644 index ded1c204..00000000 --- a/seisflows/tools/wrappers.py +++ /dev/null @@ -1,308 +0,0 @@ -""" -Wrappers of commonly used functions to reduce line count and provide an -aesthetically similar look in SeisFlows. Mostly concerend with file -manipulation, but also math and calling functions as well. -""" -import os -import re -import time -import yaml -import json -import pickle -import subprocess -import numpy as np -from importlib import import_module -from pkgutil import find_loader - -from seisflows.tools import msg - - -class Struct(dict): - """ - Revised dictionary structure - """ - def __init__(self, *args, **kwargs): - super(Struct, self).__init__(*args, **kwargs) - self.__dict__ = self - - -def diff(list1, list2): - """ - Difference between unique elements of lists - - :type list1: list - :param list1: first list - :type list2: list - :param list2: second list - """ - c = set(list1).union(set(list2)) - d = set(list1).intersection(set(list2)) - - return list(c - d) - - -def divides(i, j): - """ - Return True if `j` divides `i`. - - Bryant: I don't think this works in python3? - - :type i: int - :type j :int - """ - if j == 0: - return False - elif i % j: - return False - else: - return True - - -def exists(names): - """ - Wrapper for os.path.exists that also works on lists - - :type names: list or str - :param names: list of names to check existnce - """ - for name in iterable(names): - if not name: - return False - elif not isinstance(name, str): - raise TypeError - elif not os.path.exists(name): - return False - else: - return True - - -def findpath(name): - """ - Resolves absolute path of module - - :type name: str - :param name: absolute path of str - """ - path = import_module(name).__file__ - - # Adjust file extension - path = re.sub('.pyc$', '.py', path) - - # Strip trailing "__init__.py" - path = re.sub('__init__.py$', '', path) - - return path - - -def iterable(arg): - """ - Make an argument iterable - - :param arg: an argument to make iterable - :type: list - :return: iterable argument - """ - if not isinstance(arg, (list, tuple)): - return [arg] - else: - return arg - - -def module_exists(name): - """ - Determine if a module loader exists - - :type name: str - :param name: name of module - """ - return find_loader(name) - - -def package_exists(name): - """ - Determine if a package exists - - :type name: str - :param name: name of package - """ - return find_loader(name) - - -def pkgpath(name): - """ - Path to Seisflows package - - :type name: str - :param name: name of package - """ - for path in import_module('seisflows').__path__: - if os.path.join(name, 'seisflows') in path: - return path - - -def timestamp(): - """ - Return a timestamp for current time - """ - return time.strftime('%H:%M:%S') - - -def loadyaml(filename): - """ - Define how the PyYaml yaml loading function behaves. - Replaces None and inf strings with NoneType and numpy.inf respectively - - :type filename: str - :param filename: .yaml file to load in - """ - # work around PyYAML bugs - yaml.SafeLoader.add_implicit_resolver( - u'tag:yaml.org,2002:float', - re.compile(u'''^(?: - [-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+]?[0-9]+)? - |[-+]?(?:[0-9][0-9_]*)(?:[eE][-+]?[0-9]+) - |\\.[0-9_]+(?:[eE][-+][0-9]+)? - |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]* - |[-+]?\\.(?:inf|Inf|INF) - |\\.(?:nan|NaN|NAN))$''', re.X), - list(u'-+0123456789.')) - - with open(filename, 'r') as f: - mydict = yaml.safe_load(f) - - if mydict is None: - mydict = dict() - - # Replace 'None' and 'inf' values to match expectations - for key, val in mydict.items(): - if val == "None": - mydict[key] = None - if val == "inf": - mydict[key] = np.inf - - return mydict - - -def getset(arg): - """ - Return a set object - - :type arg: None, str or list - :param arg: argument to turn into a set - :rtype: set - :return: a set of the given argument - """ - if not arg: - return set() - elif isinstance(arg, str): - return set([arg]) - else: - return set(arg) - - -def parse_null(dictionary): - """ - Remove null, None or '' values from a dictionary - - :type dictionary: dict - :param dictionary: dict of parameters to parse - :rtype: dict - :return: dictionary that has been sanitized of all null values - """ - # Copy the dictionary to get around deleting keys while iterating - parsed_dict = dict(dictionary) - for key, item in dictionary.items(): - # Search for all None and "" items, ignore bools, 0's etc. - if not item and isinstance(item, (type(None), str)): - del parsed_dict[key] - - return parsed_dict - - -def loadtxt(filename): - """ - Load scalar from text file - """ - return float(np.loadtxt(filename)) - - -def savetxt(filename, v): - """ - Save scalar to text file - """ - np.savetxt(filename, [v], '%11.6e') - - -def number_fid(fid, i=0): - """ - Number a filename. Used to store old log files without overwriting them. - Premise is, if you have a file e.g., called: output.txt - This function would return incrementing filenames: - output_000.txt, output_001.txt, output_002.txt, ouput_003.txt ... - - .. note:: - Replace statement is catch all so we assume that there is only one \ - instance of the file extension in the entire path. - - :type fid: str - :param fid: path to the file that you want to increment - :type i: int - :param i: number to append to file id - :rtype: str - :return: filename with appended number. filename ONLY, will strip away - the original path location - """ - fid_only = os.path.basename(fid) - ext = os.path.splitext(fid_only)[-1] # e.g., .txt - new_ext = f"_{i:0>3}{ext}" # e.g., _000.txt - new_fid = fid_only.replace(ext, new_ext) - return new_fid - - -def nproc(): - """ - Get the number of processors available - - :rtype: int - :return: number of processors - """ - try: - return _nproc_method1() - except EnvironmentError: - return _nproc_method2() - - -def _nproc_method1(): - """ - Used subprocess to determine the number of processeors available - - :rtype: int - :return: number of processors - """ - # Check if the command `nproc` works - if not subprocess.getstatusoutput('nproc')[0] == 0: - raise EnvironmentError - - num_proc = int(subprocess.getstatusoutput('nproc')[1]) - - return num_proc - - -def _nproc_method2(): - """ - Get number of processors using /proc/cpuinfo - - Bryant: This doesnt work? - - :rtype: int - :return: number of processors - """ - if not os.path.exists('/proc/cpuinfo'): - raise EnvironmentError - - stdout = subprocess.check_output( - "cat /proc/cpuinfo | awk '/^processor/{print $3}'", shell=True) - num_proc = len(stdout.split('\n')) - - return num_proc - diff --git a/seisflows/workflow/base.py b/seisflows/workflow/base.py deleted file mode 100644 index ede9639f..00000000 --- a/seisflows/workflow/base.py +++ /dev/null @@ -1,227 +0,0 @@ -#!/usr/bin/env python3 -""" -This is the Base class for seisflows.workflow. -It contains mandatory functions that must be called by subclasses -""" -import sys -import logging - -from seisflows.tools import msg -from seisflows.tools.wrappers import exists -from seisflows.config import save, SeisFlowsPathsParameters - - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] - - -class Base: - """ - Workflow abstract base class - """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - """ - pass - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters() - - sf.par("CASE", required=True, par_type=str, - docstr="Type of inversion, available: " - "['data': real data inversion, " - "'synthetic': synthetic-synthetic inversion]") - - sf.par("RESUME_FROM", required=False, par_type=str, - docstr="Name of task to resume inversion from") - - sf.par("STOP_AFTER", required=False, par_type=str, - docstr="Name of task to stop inversion after finishing") - - sf.par("SAVEMODEL", required=False, default=True, par_type=bool, - docstr="Save final model files after each iteration") - - sf.par("SAVEGRADIENT", required=False, default=True, par_type=bool, - docstr="Save gradient files after each iteration") - - sf.par("SAVEKERNELS", required=False, default=False, par_type=bool, - docstr="Save event kernel files after each iteration") - - sf.par("SAVETRACES", required=False, default=False, par_type=bool, - docstr="Save waveform traces after each iteration") - - sf.par("SAVERESIDUALS", required=False, default=False, par_type=bool, - docstr="Save waveform residuals after each iteration") - - sf.par("SAVEAS", required=False, default="binary", par_type=str, - docstr="Format to save models, gradients, kernels. " - "Available: " - "['binary': save files in native SPECFEM .bin format, " - "'vector': save files as NumPy .npy files, " - "'both': save as both binary and vectors]") - - sf.path("MODEL_INIT", required=True, - docstr="location of the initial model to be used for workflow") - - sf.path("MODEL_TRUE", required=False, - docstr="Target model to be used for PAR.CASE == 'synthetic'") - - sf.path("DATA", required=False, default=None, - docstr="path to data available to workflow") - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths. Must be implemented by sub-class - """ - if validate: - self.required.validate() - - if PAR.CASE.upper() == "SYNTHETIC": - assert exists(PATH.MODEL_TRUE), \ - "CASE == SYNTHETIC requires PATH.MODEL_TRUE" - - if not exists(PATH.DATA): - assert "MODEL_TRUE" in PATH, f"DATA or MODEL_TRUE must exist" - - def main(self, return_flow=False): - """ - Execution of a workflow is equal to stepping through workflow.main() - - An example main() script is provided below which details the requisite - parts. This function will NOT execute as it is written in pseudocode. - - :type return_flow: bool - :param return_flow: for CLI tool, simply returns the flow function - rather than running the workflow. Used for print statements etc. - """ - self.logger.warning("The current definition of workflow.main() will " - "NOT execute, it must be overwritten by a " - "subclass") - - # The FLOW function defines a list of functions to execute IN ORDER - flow = (self.func1, - self.func2, - # ... - self.funcN - ) - - # REQUIRED: CLI command `seisflows print flow` needs this for output - if return_flow: - return flow - - # Allow User to start the workflow mid-FLOW, in the event that a - # previous workflow errored, or if the User had previously stopped - # a workflow to look at results and they want to pick up where - # they left off - start, stop = self.check_stop_resume_cond(flow) - - self.logger.info(msg.mjr("BEGINNING EXAMPLE WORKFLOW")) - - # Iterate through the `FLOW` to step through workflow.main() - for func in flow[start:stop]: - func() - - # If an multi-iteration workflow is run, `FLOW` will be executed - # repeatedly, so reset start and stop for subsequent iterations - start, stop = 0, -1 - - self.logger.info(msg.mjr("FINISHED EXAMPLE WORKFLOW")) - - def check_stop_resume_cond(self, flow): - """ - Chek the stop after and resume from conditions - - Allow the main() function to resume a workflow from a given flow - argument, or stop the workflow after a given argument. In the event - that a previous workflow errored, or if the User had previously - stopped a workflow to look at results and they want to pick up where - they left off. - - Late check: Exits the workflow if RESUME_FROM or STOP_AFTER arguments - do not match any of the given flow arguments. - - :type flow: tuple of functions - :param flow: an ordered list of functions that will be - :rtype: tuple of int - :return: (start, stop) indices of the `flow` input dictating where the - list should be begun and ended. If RESUME_FROM and STOP_AFTER - conditions are NOT given by the user, start and stop will be 0 and - -1 respectively, meaning we should execute the ENTIRE list - """ - fxnames = [func.__name__ for func in flow] - - # Default values which dictate that flow will execute in its entirety - start_idx = None - stop_idx = None - - # Overwrite start_idx if RESUME_FROM given, exit condition if no match - if PAR.RESUME_FROM: - try: - start_idx = fxnames.index(PAR.RESUME_FROM) - fx_name = flow[start_idx].__name__ - self.logger.info( - msg.mnr(f"WORKFLOW WILL RESUME FROM FUNC: '{fx_name}'") - ) - except ValueError: - self.logger.info( - msg.cli(f"{PAR.RESUME_FROM} does not correspond to any FLOW " - f"functions. Please check that PAR.RESUME_FROM " - f"matches one of the functions listed out in " - f"`seisflows print flow`.", header="error", - border="=") - ) - sys.exit(-1) - - # Overwrite stop_idx if STOP_AFTER provided, exit condition if no match - if PAR.STOP_AFTER: - try: - stop_idx = fxnames.index(PAR.STOP_AFTER) - fx_name = flow[stop_idx].__name__ - stop_idx += 1 # increment to stop AFTER, due to python indexing - self.logger.info( - msg.mnr(f"WORKFLOW WILL STOP AFTER FUNC: '{fx_name}'") - ) - except ValueError: - self.logger.info( - msg.cli(f"{PAR.STOP_AFTER} does not correspond to any FLOW " - f"functions. Please check that PAR.STOP_AFTER " - f"matches one of the functions listed out in " - f"`seisflows print flow`.", header="error", - border="=") - ) - sys.exit(-1) - - # Make sure stop after doesn't come before resume_from, otherwise none - # of the flow will execute - if PAR.STOP_AFTER and PAR.RESUME_FROM: - if stop_idx <= start_idx: - self.logger.info( - msg.cli(f"PAR.STOP_AFTER=='{PAR.STOP_AFTER}' is called " - f"before PAR.RESUME_FROM=='{PAR.RESUME_FROM}' in " - f"the FLOW functions. Please adjust accordingly " - f"and rerun.", header="error", border="=") - ) - sys.exit(-1) - - return start_idx, stop_idx - - @staticmethod - def checkpoint(): - """ - Writes information to disk so workflow can be resumed following a break - """ - save() - - diff --git a/seisflows/workflow/forward.py b/seisflows/workflow/forward.py new file mode 100644 index 00000000..ff01910d --- /dev/null +++ b/seisflows/workflow/forward.py @@ -0,0 +1,427 @@ +#!/usr/bin/env python3 +""" +The simplest simulation workflow you can run is a large number of forward +simulations to generate synthetics from a velocity model. Therefore the +Forward class represents the BASE workflow. All other workflows will build off +of the scaffolding defined by the Forward class. +""" +import os +from time import asctime + +from seisflows import logger +from seisflows.tools import msg, unix +from seisflows.tools.config import Dict +from seisflows.tools.model import Model + + +class Forward: + """ + Forward Workflow + ---------------- + Defines foundational structure for Workflow module. When used standalone + is in charge of running forward solver in parallel and (optionally) + calculating data-synthetic misfit and adjoint sources. + + Parameters + ---------- + :type modules: list of module + :param modules: instantiated SeisFlows modules which should have been + generated by the function `seisflows.config.import_seisflows` with a + parameter file generated by seisflows.configure + :type data_case: str + :param data_case: How to address 'data' in the workflow, available options: + 'data': real data will be provided by the user in + `path_data/{source_name}` in the same format that the solver will + produce synthetics (controlled by `solver.format`) OR + synthetic': 'data' will be generated as synthetic seismograms using + a target model provided in `path_model_true`. If None, workflow will + not attempt to generate data. + :type stop_after: str + :param stop_after: optional name of task in task list (use + `seisflows print tasks` to get task list for given workflow) to stop + workflow after, allowing user to prematurely stop a workflow to explore + intermediate results or debug. + :type export_traces: bool + :param export_traces: export all waveforms that are generated by the + external solver to `path_output`. If False, solver traces stored in + scratch may be discarded at any time in the workflow + :type export_residuals: bool + :param export_residuals: export all residuals (data-synthetic misfit) that + are generated by the external solver to `path_output`. If False, + residuals stored in scratch may be discarded at any time in the + workflow + + Paths + ----- + :type workdir: str + :param workdir: working directory in which to perform a SeisFlows workflow. + SeisFlows internal directory structure will be created here. Default cwd + :type path_output: str + :param path_output: path to directory used for permanent storage on disk. + Results and exported scratch files are saved here. + :type path_data: str + :param path_data: path to any externally stored data required by the solver + :type path_state_file: str + :param path_state_file: path to a text file used to track the current + status of a workflow (i.e., what functions have already been completed), + used for checkpointing and resuming workflows + :type path_model_init: str + :param path_model_init: path to the starting model used to calculate the + initial misfit. Must match the expected `solver_io` format. + :type path_model_true: str + :param path_model_true: path to a target model if `case`=='synthetic' and + a set of synthetic 'observations' are required for workflow. + :type path_eval_grad: str + :param path_eval_grad: scratch path to store files for gradient evaluation, + including models, kernels, gradient and residuals. + *** + """ + def __init__(self, modules=None, data_case="data", stop_after=None, + export_traces=False, export_residuals=False, + workdir=os.getcwd(), path_output=None, path_data=None, + path_state_file=None, path_model_init=None, + path_model_true=None, path_eval_grad=None, **kwargs): + """ + Set default forward workflow parameters + + :type modules: list + :param modules: list of sub-modules that will be established as class + attributes by the setup() function. Should not need to be set by the + user + """ + # Keep modules hidden so that seisflows configure doesnt count them + # as 'parameters' + self._modules = modules + + self.data_case = data_case + self.stop_after = stop_after + self.export_traces = export_traces + self.export_residuals = export_residuals + + self.path = Dict( + workdir=workdir, + scratch=os.path.join(workdir, "scratch"), + eval_grad=path_eval_grad or + os.path.join(workdir, "scratch", "eval_grad"), + output=path_output or os.path.join(workdir, "output"), + model_init=path_model_init, + model_true=path_model_true, + state_file=path_state_file or + os.path.join(workdir, "sfstate.txt"), + data=path_data, + ) + + self._required_modules = ["system", "solver"] + self._acceptable_data_cases = ["data", "synthetic"] + self._optional_modules = ["preprocess"] + + # Read in any existing state file which keeps track of workflow tasks + self._states = {} + if os.path.exists(self.path.state_file): + for line in open(self.path.state_file, "r").readlines(): + if line.startswith("#"): + continue + key, val = line.strip().split(":") + self._states[key] = val.strip() + + @property + def task_list(self): + """ + USER-DEFINED TASK LIST. This property defines a list of class methods + that take NO INPUT and have NO RETURN STATEMENTS. This defines your + linear workflow, i.e., these tasks are to be run in order from start to + finish to complete a workflow. + + This excludes 'check' (which is run during 'import_seisflows') and + 'setup' which should be run separately + + .. note:: + For workflows that require an iterative approach (e.g. inversion), + this task list will be looped over, so ensure that any setup and + teardown tasks (run once per workflow, not once per iteration) are + not included. + + :rtype: list + :return: list of methods to call in order during a workflow + """ + return [self.evaluate_initial_misfit] + + def check(self): + """ + Check that workflow has required modules. Run their respective checks + """ + # Check that required modules have been instantiated + for req_mod in self._required_modules: + assert(self._modules[req_mod]), ( + f"'{req_mod}' is a required module for workflow " + f"'{self.__class__.__name__}'" + ) + # Make sure that the modules are actually instances (not e.g., str) + assert(hasattr(self._modules[req_mod], "__class__")), \ + f"workflow attribute {req_mod} must be an instance" + + # Run check function of these modules + self._modules[req_mod].check() + + # Tell the user whether optional modules are instantiated + for opt_mod in self._optional_modules: + if self._modules[opt_mod]: + self._modules[opt_mod].check() + else: + logger.warning(f"optional module '{opt_mod}' has not been " + f"instantiated, some functionality of the " + f"'{self.__class__.__name__}' workflow may be " + f"skipped") + + # If we are using the preprocessing module, we must have either + # 1) real data located in `path.data`, or 2) a target model to generate + # synthetic data, locaed in `path.model_true` + if self.data_case is not None and self._modules.preprocess: + assert(self.data_case.lower() in self._acceptable_data_cases), \ + f"`data_case` must be in {self._acceptable_data_cases}" + if self.data_case.lower() == "data": + assert(self.path.data is not None and + os.path.exists(self.path.data)), \ + f"importing data with `data_case`=='data' requires " \ + f"'path_data' to exist" + elif self.data_case.lower() == "synthetic": + assert(self.path.model_true is not None and + os.path.exists(self.path.model_true)), \ + f"creating data with `data_case`=='synthetic' requires " \ + f"'path_model_true' to exist and point to a target model" + else: + logger.warning(f"`workflow.data_case` is None, SeisFlows will not " + f"be able to find data for data-synthetic comparison" + ) + + if self.stop_after is not None: + _task_names = [task.__name__ for task in self.task_list] + assert(self.stop_after in _task_names), \ + f"workflow parameter `stop_after` must match {_task_names}" + + def setup(self): + """ + Assigns modules as attributes of the workflow. I.e., `self.solver` to + access the solver module (or `workflow.solver` from outside class) + + Makes required path structure for the workflow, runs setup functions + for all the required modules of this workflow. + """ + logger.info(msg.mjr(f"SETTING UP {self.__class__.__name__.upper()} " + f"WORKFLOW")) + + # Create the desired directory structure + for path in self.path.values(): + if path is not None and not os.path.splitext(path)[-1]: + unix.mkdir(path) + + # Run setup() for each of the required modules + for req_mod in self._required_modules: + logger.debug( + f"running setup for module " + f"'{req_mod}.{self._modules[req_mod].__class__.__name__}'" + ) + self._modules[req_mod].setup() + + # Run setup() for each of the instantiated modules + for opt_mod in self._optional_modules: + if self._modules[opt_mod] and opt_mod not in self._required_modules: + logger.debug( + f"running setup for module " + f"'{opt_mod}.{self._modules[opt_mod].__class__.__name__}'" + ) + self._modules[opt_mod].setup() + + # Generate the state file to keep track of task completion + if not os.path.exists(self.path.state_file): + with open(self.path.state_file, "w") as f: + f.write(f"# SeisFlows State File\n") + f.write(f"# {asctime()}\n") + f.write(f"# Acceptable states: 'completed', 'failed', " + f"'pending'\n") + f.write(f"# =======================================\n") + + # Distribute modules to the class namespace. We don't do this at init + # incase _modules was set as NoneType + self.solver = self._modules.solver # NOQA + self.system = self._modules.system # NOQA + self.preprocess = self._modules.preprocess # NOQA + + def checkpoint(self): + """ + Saves active SeisFlows working state to disk as a text files such that + the workflow can be resumed following a crash, pause or termination of + workflow. + """ + # Grab State file header values + with open(self.path.state_file, "r") as f: + lines = f.readlines() + + with open(self.path.state_file, "w") as f: + # Rewrite header values + for line in lines: + if line.startswith("#"): + f.write(line) + for key, val in self._states.items(): + f.write(f"{key}: {val}\n") + + def run(self): + """ + Call the Task List in order to 'run' the workflow. Contains logic for + to keep track of completed tasks and avoids re-running tasks that have + previously been completed (e.g., if you are restarting your workflow) + """ + logger.info(msg.mjr(f"RUNNING {self.__class__.__name__.upper()} " + f"WORKFLOW")) + + for func in self.task_list: + # Skip over functions which have already been completed + if (func.__name__ in self._states.keys()) and ( + self._states[func.__name__] == "completed"): + logger.info(f"'{func.__name__}' has already been run, skipping") + continue + # Otherwise attempt to run functions that have failed or are + # encountered for the first time + else: + try: + func() + self._states[func.__name__] = "completed" + self.checkpoint() + except Exception as e: + self._states[func.__name__] = "failed" + self.checkpoint() + raise + # Allow user to prematurely stop a workflow after a given task + if self.stop_after and func.__name__ == self.stop_after: + logger.info(f"stop workflow at `stop_after`: {self.stop_after}") + break + + self.checkpoint() + + def evaluate_initial_misfit(self): + """ + Evaluate the initial model misfit. This requires setting up 'data' + before generating synthetics, which is either copied from user-supplied + directory or running forward simulations with a target model. Forward + simulations are then run and prepocessing compares data-synthetic misfit + + .. note:: + This is run altogether on system to save on queue time waits, + because we are potentially running two simulations back to back. + """ + logger.info(msg.mnr("EVALUATING MISFIT FOR INITIAL MODEL")) + + # Load in the initial model and check its poissons ratio + if self.path.model_init: + logger.info("checking initial model parameters") + _model = Model(os.path.join(self.path.model_init)) + _model.check() + if self.path.model_true: + logger.info("checking true/target model parameters") + _model = Model(os.path.join(self.path.model_true)) + _model.check() + + # If no preprocessing module, than all of the additional functions for + # working with `data` are unncessary. + if self.preprocess: + run_list = [self.prepare_data_for_solver, + self.run_forward_simulations, + self.evaluate_objective_function] + else: + run_list = [self.run_forward_simulations] + + self.system.run(run_list, path_model=self.path.model_init, + save_residuals=os.path.join(self.path.eval_grad, + "residuals.txt") + ) + + def prepare_data_for_solver(self, **kwargs): + """ + Determines how to provide data to each of the solvers. Either by copying + data in from a user-provided path, or generating synthetic 'data' using + a target model. + + .. note :: + Must be run by system.run() so that solvers are assigned individual + task ids and working directories + """ + logger.info(f"preparing observation data for source " + f"{self.solver.source_name}") + + if self.data_case == "data": + logger.info(f"copying data from `path_data`") + src = os.path.join(self.path.data, self.solver.source_name, "*") + dst = os.path.join(self.solver.cwd, "traces", "obs", "") + unix.cp(src, dst) + elif self.data_case == "synthetic": + # Figure out where to export waveform files to, if requested + if self.export_traces: + export_traces = os.path.join(self.path.output, + self.solver.source_name, "obs") + else: + export_traces = False + + # Run the forward solver with target model and save traces the 'obs' + logger.info(f"running forward simulation w/ target model for " + f"{self.solver.source_name}") + self.solver.import_model(path_model=self.path.model_true) + self.solver.forward_simulation( + save_traces=os.path.join(self.solver.cwd, "traces", "obs"), + export_traces=export_traces + ) + + def run_forward_simulations(self, path_model, **kwargs): + """ + Performs forward simulation for a single given event. + + .. note:: + if PAR.PREPROCESS == None, will not perform misfit quantification + + .. note:: + Must be run by system.run() so that solvers are assigned individual + task ids/ working directories. + """ + assert(os.path.exists(path_model)), \ + f"Model path for objective function does not exist" + + logger.info(f"evaluating objective function for source " + f"{self.solver.source_name}") + logger.debug(f"running forward simulation with " + f"'{self.solver.__class__.__name__}'") + + # Figure out where to export waveform files to, if requested + # path will look like: 'output/solver/001/syn/NN.SSS.BXY.semd' + if self.export_traces: + export_traces = os.path.join(self.path.output, "solver", + self.solver.source_name, "syn") + else: + export_traces = False + + # Run the forward simulation with the given input model + self.solver.import_model(path_model=path_model) + self.solver.forward_simulation( + save_traces=os.path.join(self.solver.cwd, "traces", "syn"), + export_traces=export_traces + ) + + def evaluate_objective_function(self, save_residuals=False, **kwargs): + """ + Uses the preprocess module to evaluate the misfit/objective function + given synthetics generated during forward simulations + + .. note:: + Must be run by system.run() so that solvers are assigned individual + task ids/ working directories. + """ + if self.preprocess is None: + logger.debug("no preprocessing module selected, will not evaluate " + "objective function") + return + + logger.debug(f"quantifying misfit with " + f"'{self.preprocess.__class__.__name__}'") + self.preprocess.quantify_misfit( + source_name=self.solver.source_name, + save_adjsrcs=os.path.join(self.solver.cwd, "traces", "adj"), + save_residuals=save_residuals + ) diff --git a/seisflows/workflow/inversion.py b/seisflows/workflow/inversion.py index 441fbcb5..c2ab9326 100644 --- a/seisflows/workflow/inversion.py +++ b/seisflows/workflow/inversion.py @@ -1,440 +1,486 @@ #!/usr/bin/env python3 """ -This is the base class seisflows.workflow.Inversion - -This is a main Seisflows class, it controls the main workflow. +A seismic inversion (a.k.a full waveform inversion, adjoint tomography, full +waveform tomography) perturbs seismic velocity models by minimizing objective +functions defining differences between observed and synthetic waveforms. + +This seismic inversion workflow performs a linear set of tasks involving: + +1) Generating synthetic seismograms using an external numerical solver +2) Calculating time-dependent misfit (adjoint sources) between data + (or other synthetics) and synthetics +3) Using adjoint sources to generate misfit kernels defining volumetric + perturbations sensitive to data-synthetic misfit +4) Smoothing and summing misfit kernels into a single gradient +5) Perturbing the starting model with the gradient to reduce misfit defined by + the objective function during a line search + +The Inversion workflow runs the above tasks in a loop (iterations) while +exporting updated models, kernels and/or gradients to disk. """ import os import sys -import logging import numpy as np -from glob import glob -from seisflows.config import custom_import, CFGPATHS +from seisflows import logger +from seisflows.workflow.migration import Migration from seisflows.tools import msg, unix -from seisflows.config import save, SeisFlowsPathsParameters - -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] +from seisflows.tools.model import Model -system = sys.modules["seisflows_system"] -solver = sys.modules["seisflows_solver"] -optimize = sys.modules["seisflows_optimize"] -preprocess = sys.modules["seisflows_preprocess"] -postprocess = sys.modules["seisflows_postprocess"] - -class Inversion(custom_import("workflow", "base")): +class Inversion(Migration): """ - Waveform inversion base class - - Peforms iterative nonlinear inversion and provides a base class on top - of which specialized strategies can be implemented. - - To allow customization, the inversion workflow is divided into generic - methods such as "initialize", "finalize", "evaluate_function", - "evaluate_gradient", which can be easily overloaded. - - Calls to forward and adjoint solvers are abstracted through the "solver" - interface so that various forward modeling packages canf be used - interchangeably. - - Commands for running in serial or parallel on a workstation or cluster - are abstracted through the "system" interface. + Inversion Workflow + ------------------ + Peforms iterative nonlinear inversion using the machinery of the Forward + and Migration workflows, as well as a built-in optimization library. + + Parameters + ---------- + :type start: int + :param start: start inversion workflow at this iteration. 1 <= start <= inf + :type end: int + :param end: end inversion workflow at this iteration. start <= end <= inf + :type iteration: int + :param iteration: The current iteration of the workflow. If NoneType, takes + the value of `start` (i.e., first iteration of the workflow). User can + also set between `start` and `end` to resume a failed workflow. + :type thrifty: bool + :param thrifty: a thrifty inversion skips the costly intialization step + (i.e., forward simulations and misfit quantification) if the final + forward simulations from the previous iterations line search can be + used in the current one. Requires L-BFGS optimization. + :type export_model: bool + :param export_model: export best-fitting model from the line search to disk. + If False, new models can be discarded from scratch at any time. + + Paths + ----- + :type path_eval_func: str + :param path_eval_func: scratch path to store files for line search objective + function evaluations, including models, misfit and residuals + *** """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) - - def __init__(self): - """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. - """ - super().__init__() + __doc__ = Migration.__doc__ + __doc__ + + def __init__(self, modules=None, start=1, end=1, + thrifty=False, optimize="LBFGS", export_model=True, + path_eval_func=None, + **kwargs): + """ + Instantiate Inversion-specific parameters. Non-essential parameters are + listed here, rather than in the class docstring. + + :type optimize: str + :param optimize: Name of the optimization module chosen by the user. + This should be instantiated by default when using `import_seisflows` + Used to check that the correct module is set when performing a + `thrifty` inversion. + """ + super().__init__(**kwargs) + + self._modules = modules + self.start = start + self.end = end + self.export_model = export_model + self.thrifty = thrifty + + # Append an additional path for line search function evaluations + self.path["eval_func"] = path_eval_func or \ + os.path.join(self.path.workdir, "scratch", + "eval_func") + + # Internal attribute for keeping track of inversion + self._optimize_name = optimize + self._thrifty_status = False + self._required_modules = ["system", "solver", "preprocess", "optimize"] + + # Grab iteration from state file + if "iteration" in self._states: + self.iteration = int(self._states["iteration"]) + logger.debug(f"setting iteration=={self.iteration} from state file") + else: + self.iteration = start @property - def required(self): + def task_list(self): """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters(super().required) - - # Define the Parameters required by this module - sf.par("BEGIN", required=False, default=1, par_type=int, - docstr="First iteration of workflow, 1 <= BEGIN <= inf") - - sf.par("END", required=True, par_type=int, - docstr="Last iteration of workflow, BEGIN <= END <= inf") + USER-DEFINED TASK LIST. This property defines a list of class methods + that take NO INPUT and have NO RETURN STATEMENTS. This defines your + linear workflow, i.e., these tasks are to be run in order from start to + finish to complete a workflow. - # Define the Paths required by this module - sf.path("FUNC", required=False, - default=os.path.join(PATH.SCRATCH, "evalfunc"), - docstr="scratch path to store data related to function " - "evaluations") + This excludes 'check' (which is run during 'import_seisflows') and + 'setup' which should be run separately - sf.path("GRAD", required=False, - default=os.path.join(PATH.SCRATCH, "evalgrad"), - docstr="scratch path to store data related to gradient " - "evaluations") - - sf.path("HESS", required=False, - default=os.path.join(PATH.SCRATCH, "evalhess"), - docstr="scratch path to store data related to Hessian " - "evaluations") - - sf.path("OPTIMIZE", required=False, - default=os.path.join(PATH.SCRATCH, "optimize"), - docstr="scratch path to store data related to nonlinear " - "optimization") - - return sf + .. note:: + For workflows that require an iterative approach (e.g. inversion), + this task list will be looped over, so ensure that any setup and + teardown tasks (run once per workflow, not once per iteration) are + not included. - def check(self, validate=True): - """ - Checks parameters and paths + :rtype: list + :return: list of methods to call in order during a workflow """ - super().check(validate=False) - if validate: - self.required.validate() - - for required_path in ["SCRATCH", "OUTPUT", "LOCAL"]: - assert(required_path in PATH), \ - f"Inversion requires path {required_path}" + return [self.evaluate_initial_misfit, + self.run_adjoint_simulations, + self.postprocess_event_kernels, + self.evaluate_gradient_from_kernels, + self.initialize_line_search, + self.perform_line_search, + self.finalize_iteration + ] - assert(1 <= PAR.BEGIN <= PAR.END), \ - f"Incorrect BEGIN or END parameter: 1 <= {PAR.BEGIN} <= {PAR.END}" - - def main(self, return_flow=False): + def check(self): """ - This function controls the main SeisFlows workflow, and is submitted - to system by the call `seisflows submit` or `seisflows resume`. It - proceeds to evaluate a list of functions in order until a User defined - stop criteria is met. - - :type return_flow: bool - :param return_flow: for CLI tool, simply returns the flow function - rather than running the workflow. Used for print statements etc. + Checks inversion-specific parameters """ - # The workFLOW is a tuple of functions that can be called dynamic ally - flow = (self.setup, - self.initialize, - self.evaluate_gradient, - self.write_gradient, - self.compute_direction, - self.line_search, - self.finalize, - self.clean - ) - if return_flow: - return flow - - # Allow workflow resume from and stop after given flow functions - start, stop = self.check_stop_resume_cond(flow) + super().check() - # Run the workflow until from the current iteration until PAR.END - optimize.iter = PAR.BEGIN - self.logger.info(msg.mjr("STARTING INVERSION WORKFLOW")) - while True: - self.logger.info(msg.mnr(f"ITERATION {optimize.iter} / {PAR.END}")) + assert(1 <= self.start <= self.end), \ + f"Incorrect START or END parameter. Values must be in order: " \ + f"1 <= {self.start} <= {self.end}" - # Execute the functions within the flow - for func in flow[start:stop]: - func() + assert(self.start <= self.iteration <= self.end), \ + f"`workflow.iteration` must be between `start` and `end`" - # Finish. Assuming completion of all arguments in flow() - self.logger.info(msg.mjr(f"FINISHED FLOW EXECUTION")) - - # Reset flow for subsequent iterations - start, stop = None, None - - if optimize.iter >= PAR.END: - break + if self.iteration > 1: + assert(os.path.exists(self.path.eval_grad)), \ + f"scratch path `eval_grad` does not exist but should for a " \ + f"workflow with `iteration` >= 1" - optimize.iter += 1 - self.logger.info(msg.sub(f"INCREMENT ITERATION TO {optimize.iter}")) + if self.iteration >= self.end + 1: + logger.warning(f"current `iteration` is >= chosen `end` point. " + f"Inversion workflow will not `run`") - self.logger.info(msg.mjr("FINISHED INVERSION WORKFLOW")) + if self.thrifty: + assert(self._optimize_name == "LBFGS"), ( + f"a `thrifty` inversion requires the optimization module to be " + f"set as 'LBFGS'" + ) def setup(self): """ - Lays groundwork for inversion by running setup() functions for the + Assigns modules as attributes of the workflow. I.e., `self.solver` to + access the solver module (or `workflow.solver` from outside class) + + Lays groundwork for inversion by running setup() functions for the involved sub-modules, generating True model synthetic data if necessary, and generating the pre-requisite database files. - - .. note:: - This function should only be run one time, at the start of iter 1 - """ - # Iter check is done inside setup() so that we can include fx in FLOW - if optimize.iter == 1: - # Set up all the requisite modules from the master job - self.logger.info(msg.mnr("PERFORMING MODULE SETUP")) - preprocess.setup() - postprocess.setup() - optimize.setup() - - # Run solver.setup() in parallel - self.logger.info("setting up solver on system...") - system.run("solver", "setup") - - def initialize(self): """ - Generates synthetics via a forward simulation, calculates misfits - for the forward simulation. Writes misfit for use in optimization. - """ - self.logger.info(msg.mjr("INITIALIZING INVERSION")) - self.evaluate_function(path=PATH.GRAD, suffix="new") + super().setup() + + unix.mkdir(self.path.eval_func) + + self.optimize = self._modules.optimize # NOQA + # If optimization has been run before, re-load from checkpoint + self.optimize.load_checkpoint() + + def run(self): + """Call the forward.run() function iteratively, from `start` to `end`""" + while self.iteration < self.end + 1: + logger.info(msg.mnr(f"RUNNING ITERATION {self.iteration:0>2}")) + super().run() # Runs task list + # Assuming that if `stop_after` is used, that we are NOT iterating + if self.stop_after is None: + logger.info(msg.mnr(f"COMPLETE ITERATION {self.iteration:0>2}")) + self.iteration += 1 + logger.info(f"setting current iteration to: {self.iteration}") + # Set the state file to pending for new iteration + self._states = {key: "pending" for key in self._states} + self.checkpoint() + else: + break - def compute_direction(self): + def checkpoint(self): """ - Computes search direction + Add an additional line in the state file to keep track of iteration, """ - self.logger.info(msg.mnr("COMPUTING SEARCH DIRECTION")) - optimize.compute_direction() + super().checkpoint() + with open(self.path.state_file, "r") as f: + lines = f.readlines() + # Clear out the previous 'iteration' line and add in new + for i, line in enumerate(lines[:]): + if "iteration:" in line: + lines.pop(i) + break + lines.append(f"iteration: {self.iteration}") - def line_search(self): - """ - Conducts line search in given search direction + # Rewrite checkpoint file with new iteration line + with open(self.path.state_file, "w") as f: + f.writelines(lines) - Status codes: - status > 0 : finished - status == 0 : not finished - status < 0 : failed + def evaluate_objective_function(self, save_residuals=False, **kwargs): """ - # Calculate the initial step length based on optimization algorithm - if optimize.line_search.step_count == 0: - self.logger.info(msg.mjr(f"CONDUCTING LINE SEARCH " - f"({optimize.eval_str})") - ) - optimize.initialize_search() - - # Attempt a new trial step with the given step length - optimize.line_search.step_count += 1 - self.logger.info(msg.mnr(f"TRIAL STEP COUNT: {optimize.eval_str}")) - self.evaluate_function(path=PATH.FUNC, suffix="try") - - # Check the function evaluation against line search history - status = optimize.update_search() + Overwrite evaluate objective function to include MORE input parameters + specifying which evaluation in the inversion we are at. Also removes + the check for a preprocessing module because it is assumed we have a + preprocsesing module for an inversion workflow. - # Proceed based on the outcome of the line search - if status > 0: - self.logger.info("trial step successful") - # Save outcome of line search to disk; reset step to 0 for next iter - optimize.finalize_search() - return - elif status == 0: - self.logger.info("retrying with new trial step") - # Recursively call this function to attempt another trial step - self.line_search() - elif status < 0: - if optimize.retry_status(): - self.logger.info("line search failed. restarting line search") - # Reset the line search machinery; set step count to 0 - optimize.restart() - self.line_search() + .. note:: + Must be run by system.run() so that solvers are assigned individual + task ids/ working directories. + """ + logger.debug(f"quantifying misfit with " + f"'{self.preprocess.__class__.__name__}'") + + self.preprocess.quantify_misfit( + source_name=self.solver.source_name, + save_adjsrcs=os.path.join(self.solver.cwd, "traces", "adj"), + save_residuals=save_residuals, + iteration=self.iteration, + step_count=self.optimize.step_count, + ) + + def evaluate_initial_misfit(self): + """ + Overwrite `workflow.forward` to skip over initial misfit evaluation + (using `MODEL_INIT`) if we are past iteration 1. Additionally, sum + residuals output by preprocess module and save float to disk, to be + discoverable by the optimization library + """ + if self.iteration == 1: + super().evaluate_initial_misfit() + + # Expose the initial model to the optimization library + model = Model(self.path.model_init, + parameters=self.solver._parameters) + self.optimize.save_vector(name="m_new", m=model) + else: + # Thrifty inversion SKIPS initial misfit evaluation, re-using final + # model from previous line search. Can only happen mid-workflow + if self.thrifty and ( + self._thrifty_status or self.iteration == self.start): + logger.info(msg.mnr("THRIFTY INVERSION; SKIP MISFIT EVAL")) else: - self.logger.info("line search failed. aborting inversion.") - sys.exit(-1) - - def evaluate_function(self, path, suffix): - """ - Performs forward simulation, and evaluates the objective function - - :type path: str - :param path: path in the scratch directory to use for I/O - :type suffix: str - :param suffix: suffix to use for I/O - """ - self.logger.info(msg.sub("EVALUATE OBJECTIVE FUNCTION")) - - # Ensure that we are referencing the same tags as defined in OPTIMIZE - model_tag = getattr(optimize, f"m_{suffix}") - misfit_tag = getattr(optimize, f"f_{suffix}") - - self.write_model(path=path, tag=model_tag) - - self.logger.debug(f"evaluating objective function {PAR.NTASK} times " - f"on system...") - system.run("solver", "eval_func", path=path) - - self.write_misfit(path=path, tag=misfit_tag) - - def evaluate_gradient(self, path=None): - """ - Performs adjoint simulation to retrieve the gradient of the objective - """ - self.logger.info(msg.mnr("EVALUATING GRADIENT")) + logger.info(msg.mnr("EVALUATING MISFIT FOR MODEL `m_new`")) + # Previous line search will have saved `m_new` as the initial + # model, export in SPECFEM format to a path discoverable by all + # solvers + path_model = os.path.join(self.path.eval_grad, "model") + m_new = self.optimize.load_vector("m_new") + m_new.write(path=path_model) + + # Run forward simulation/misfit quantification with previous + # model + self.system.run( + [self.run_forward_simulations, + self.evaluate_objective_function], + path_model=path_model, + save_residuals=os.path.join(self.path.eval_grad, + "residuals.txt") + ) - self.logger.debug(f"evaluating gradient {PAR.NTASK} times on system...") - system.run("solver", "eval_grad", path=path or PATH.GRAD, - export_traces=PAR.SAVETRACES) + # Override function to sum residuals into the optimization library + residuals = np.loadtxt(os.path.join(self.path.eval_grad, + "residuals.txt")) + total_misfit = self.preprocess.sum_residuals(residuals) + self.optimize.save_vector(name="f_new", m=total_misfit) - def finalize(self): + def evaluate_gradient_from_kernels(self): """ - Saves results from current model update iteration and increment the - iteration number to set up for the next iteration. Finalization is - expected to the be LAST function in workflow.main()'s flow list. + Overwrite `workflow.migration` to convert the current model and the + gradient calculated by migration from their native SPECFEM model format + into optimization vectors that can be used for model updates. """ - self.logger.info(msg.mjr(f"FINALIZING ITERATION {optimize.iter}")) - - self.checkpoint() - preprocess.finalize() - - # Save files from scratch before discarding - if PAR.SAVEMODEL: - self.save_model() - - if PAR.SAVEGRADIENT: - self.save_gradient() - - if PAR.SAVEKERNELS: - self.save_kernels() + super().evaluate_gradient_from_kernels() - if PAR.SAVETRACES: - self.save_traces() - - if PAR.SAVERESIDUALS: - self.save_residuals() + # Rename kernels (K) and gradient (G) output files by iteration number + # so they don't get overwritten by future iterations. + src = os.path.join(self.path.output, "kernels") + dst = os.path.join(self.path.output, f"KERNELS_{self.iteration:0>2}") + if os.path.exists(src): + logger.debug(f"{src} -> {dst}") + unix.mv(src, dst) - def clean(self): - """ - Cleans directories in which function and gradient evaluations were - carried out - """ - self.logger.info(msg.mnr("CLEANING WORKDIR FOR NEXT ITERATION")) + src = os.path.join(self.path.output, "gradient") + dst = os.path.join(self.path.output, f"GRADIENT_{self.iteration:0>2}") + if os.path.exists(src): + logger.debug(f"{src} -> {dst}") + unix.mv(src, dst) - unix.rm(PATH.GRAD) - unix.rm(PATH.FUNC) - unix.mkdir(PATH.GRAD) - unix.mkdir(PATH.FUNC) + # Expose the gradient to the optimization library + gradient = Model(path=os.path.join(self.path.eval_grad, "gradient")) + self.optimize.save_vector(name="g_new", m=gradient) - def checkpoint(self): - """ - Writes information to disk so workflow can be resumed following a break + def initialize_line_search(self): """ - save() + Computes search direction using the optimization library and sets up + line search machinery to 'perform line search' by placing correct files + on disk for each of the modules to find. - def write_model(self, path, tag): - """ - Writes model in format expected by solver - - :type path: str - :param path: path to write the model to - :type src: str - :param src: name of the model to be saved, usually tagged as 'm' with - a suffix depending on where in the inversion we are. e.g., 'm_try'. - Expected that these tags are defined in OPTIMIZE module + Optimization module perturbs the current model (m_new) by the search + direction (p_new) to recover the trial model (m_try). This model is + then exposed on disk to the solver. """ - src = tag - dst = os.path.join(path, "model") - self.logger.debug(f"saving model '{src}' to:\n{dst}") - solver.save(solver.split(optimize.load(src)), dst) + logger.info(msg.mnr("RUNNING LINE SEARCH")) + logger.info(f"initializing " + f"'{self.optimize.line_search_method}'ing " + f"line search") - def write_gradient(self): - """ - Writes gradient in format expected by non-linear optimization library. - Calls the postprocess module, which will smooth/precondition gradient. - """ - self.logger.info(msg.mnr("POSTPROCESSING KERNELS")) - src = os.path.join(PATH.GRAD, "gradient") - dst = f"g_new" + # 'p' is the search direction used to perturb the initial model + p_new = self.optimize.compute_direction() + if sum(p_new.vector) == 0: + logger.critical(msg.cli( + "Search direction vector 'p' is 0, meaning no model update can " + "take place. Please check your gradient and waveform misfits. " + "SeisFlows exiting prior to start of line search.", border="=", + header="line search error") + ) + sys.exit(-1) + self.optimize.save_vector(name="p_new", m=p_new) - postprocess.write_gradient(PATH.GRAD) - parts = solver.load(src, suffix="_kernel") + # Scale search direction with step length alpha generate a model update + m_try, alpha = self.optimize.initialize_search() + self.optimize.save_vector(name="m_try", m=m_try) + self.optimize.save_vector(name="alpha", m=alpha) + self.optimize.checkpoint() - optimize.save(dst, solver.merge(parts)) + # Expose model `m_try` to the solver by placing it in eval_func dir. + m_try.write(path=os.path.join(self.path.eval_func, "model")) - def write_misfit(self, path, tag): - """ - Writes misfit in format expected by nonlinear optimization library. - Collects all misfit values within the given residuals directory and sums - them in a manner chosen by the preprocess class. - - :type path: str - :param path: path to write the misfit to - :type tag: str - :param tag: name of the model to be saved, usually tagged as 'f' with - a suffix depending on where in the inversion we are. e.g., 'f_try'. - Expected that these tags are defined in OPTIMIZE module + def perform_line_search(self): """ - self.logger.info("summing residuals with preprocess module") - src = glob(os.path.join(path, "residuals", "*")) - dst = tag - total_misfit = preprocess.sum_residuals(src) + Conducts line search in given search direction until the objective + function is reduced acceptably, or the line search fails due to + user-defined limit criteria. - self.logger.debug(f"saving misfit {total_misfit:.3E} to tag '{dst}'") - optimize.savetxt(dst, total_misfit) + .. note:: + Starts on step_count == 1 because step_count == 0 will be the + misfit of the starting model - def save_gradient(self): + Status codes: + status > 0 : finished + status == 0 : not finished + status < 0 : failed """ - Save the gradient vector. Allows saving numpy array or standard - Fortran .bin files + logger.info(msg.sub(f"LINE SEARCH STEP COUNT " + f"{self.optimize.step_count + 1:0>2}")) - Saving as a vector saves on file count, but requires numpy and seisflows - functions to read - """ - dst = os.path.join(PATH.OUTPUT, f"gradient_{optimize.iter:04d}") + # Run fwd solver with the model 'm_try'. Corresponding misfit is 'f_try' + self._evaluate_line_search_misfit() - if PAR.SAVEAS in ["binary", "both"]: - src = os.path.join(PATH.GRAD, "gradient") - unix.mv(src, dst) - if PAR.SAVEAS in ["vector", "both"]: - src = os.path.join(PATH.OPTIMIZE, optimize.g_old) - unix.cp(src, dst + ".npy") + # Increment step count, calculate new step length/model, check misfit + m_try, alpha, status = self.optimize.update_line_search() + self.optimize.checkpoint() - self.logger.debug(f"saving gradient to path:\n{dst}") - - def save_model(self): - """ - Save the model vector. Allows saving numpy array or standard - Fortran .bin files - - Saving as a vector saves on file count, but requires numpy and seisflows - functions to read - """ - src = optimize.m_new - dst = os.path.join(PATH.OUTPUT, f"model_{optimize.iter:04d}") + # Proceed based on the outcome of the line search + if status.upper() == "PASS": + # Save outcome of line search to disk; reset step to 0 for next iter + logger.info("trial step successful. finalizing line search") - self.logger.debug(f"saving model '{src}' to path:\n{dst}") + # Save new model (m_try) and step length (alpha) for records + self.optimize.save_vector("alpha", alpha) + self.optimize.save_vector("m_try", m_try) + del m_try # clear potentially large model vector from memory - if PAR.SAVEAS in ["binary", "both"]: - solver.save(solver.split(optimize.load(src)), dst) - if PAR.SAVEAS in ["vector", "both"]: - np.save(file=dst, arr=optimize.load(src)) + self.optimize.finalize_search() + self.optimize.checkpoint() + return + elif status.upper() == "TRY": + logger.info("trial step unsuccessful. re-attempting line search") + + # Save new model (m_try) and step length (alpha) for new trial step + self.optimize.save_vector("alpha", alpha) + self.optimize.save_vector("m_try", m_try) + del m_try # clear potentially large model vector from memory + + # Checkpoint and re-run line search evaluation + self.optimize.checkpoint() + self.perform_line_search() # RECURSIVE CALL + elif status.upper() == "FAIL": + # Check if we are able to restart line search w/ new parameters + if self.optimize.attempt_line_search_restart(): + logger.info("line search has failed. restarting " + "optimization algorithm and line search.") + # Reset the line search machinery; set step count to 0 + self.optimize.restart() + self.optimize.checkpoint() + self.perform_line_search() # RECURSIVE CALL + # If we can't then line search has failed. Abort workflow + else: + logger.critical( + msg.cli("Line search has failed to reduce the misfit and " + "has run out of fallback options. Aborting " + "inversion.", border="=", + header="line search failed") + ) + sys.exit(-1) - def save_kernels(self): + def _evaluate_line_search_misfit(self): + """Convenience fuinction to wrap forward solver and misfit calc""" + self.system.run( + [self.run_forward_simulations, + self.evaluate_objective_function], + path_model=os.path.join(self.path.eval_func, "model"), + save_residuals=os.path.join(self.path.eval_func, "residuals.txt") + ) + residuals = np.loadtxt(os.path.join(self.path.eval_func, + "residuals.txt")) + total_misfit = self.preprocess.sum_residuals(residuals) + logger.debug(f"misfit for trial model (f_try) == {total_misfit:.2E}") + self.optimize.save_vector(name="f_try", m=total_misfit) + + def finalize_iteration(self): """ - Save the kernel vector as a Fortran binary file on disk + Cleans directories in which function and gradient evaluations were + carried out. Contains some logic to consider whether or not to continue + with a thrifty inversion. """ - src = os.path.join(PATH.GRAD, "kernels") - dst = os.path.join(PATH.OUTPUT, f"kernels_{optimize.iter:04d}") + logger.info(msg.sub("CLEANING WORKDIR FOR NEXT ITERATION")) - self.logger.debug(f"saving kernels to path:\n{dst}") + # Export scratch files to output if requested + if self.export_model: + model = self.optimize.load_vector("m_new") + model.write(path=os.path.join(self.path.output, + f"MODEL_{self.iteration:0>2}"), + ) - unix.mv(src, dst) + # Update optimization + self.optimize.checkpoint() - def save_traces(self): - """ - Save the waveform traces to disk. - - !!! This doesn't work? Traces are not saved to PATH.GRAD so src does - !!! not exist - """ - src = os.path.join(PATH.GRAD, "traces") - dst = os.path.join(PATH.OUTPUT, f"traces_{optimize.iter:04d}") + # Clear out the scratch directory + self._thrifty_status = self._update_thrifty_status() + if self._thrifty_status: + unix.rm(self.path.eval_grad) + # Eval func model now defines the current model 'm_new' + unix.mv(self.path.eval_func, self.path.eval_grad) + unix.mkdir(self.path.eval_func) + else: + unix.rm(self.path.eval_grad) + unix.rm(self.path.eval_func) - self.logger.debug(f"saving traces to path:\n{dst}") + unix.mkdir(self.path.eval_grad) + unix.mkdir(self.path.eval_func) - unix.mv(src, dst) + self.preprocess.finalize() - def save_residuals(self): + def _update_thrifty_status(self): """ - Save the residuals to disk - """ - src = os.path.join(PATH.GRAD, "residuals") - dst = os.path.join(PATH.OUTPUT, f"residuals_{optimize.iter:04d}") - - self.logger.debug(f"saving residuals to path:\n{dst}") + Determine if line search forward simulation can be carried over to the + next iteration. Checks criteria related to the current iteration and + its position relative to the start and end of the workflow. - unix.mv(src, dst) + .. note:: + Resumed, failed workflows will not re-load `_thrifty_status` so + initial misfit will always be evaluated in that case. + """ + if self.iteration == self.start: + logger.info("thrifty inversion encountering first iteration, " + "defaulting to standard inversion workflow") + _thrifty_status = False + elif self.optimize._restarted: # NOQA + logger.info("optimization has been restarted, defaulting to " + "standard inversion workflow") + _thrifty_status = False + elif self.iteration == self.end: + logger.info("thrifty inversion encountering final iteration, " + "defaulting to inversion workflow") + _thrifty_status = False + else: + logger.info("acceptable conditions for thrifty inverison, " + "continuing with thrifty inversion") + _thrifty_status = True + + return _thrifty_status diff --git a/seisflows/workflow/migration.py b/seisflows/workflow/migration.py index 04798159..0aaac21b 100644 --- a/seisflows/workflow/migration.py +++ b/seisflows/workflow/migration.py @@ -1,166 +1,230 @@ #!/usr/bin/env python3 """ -This is the base class seisflows.workflow.migration - -This is a main Seisflows class, it controls the main workflow. +Seismic migration performs a 'time-reverse migration', or backprojection. +In the terminology of seismic imaging, we are running a forward and adjoint +simulation to derive the gradient of the objective function. This workflow +sets up the machinery to derive a scaled, smoothed gradient from an initial +model + +.. warning:: + Misfit kernels require large amounts of disk space for storage. + Setting `export_kernel`==True when PAR.NTASK is large and model files + are large may lead to large file overhead. + +.. note:: + Migration workflow includes an option to mask the gradient. While both + masking and preconditioning involve scaling the gradient, they are + fundamentally different operations: masking is ad hoc, preconditioning + is a change of variables; For more info, see Modrak & Tromp 2016 GJI """ import os import sys -import logging - -from seisflows.tools import unix, msg -from seisflows.tools.wrappers import exists -from seisflows.config import custom_import, SeisFlowsPathsParameters - +import shutil +from glob import glob +from seisflows import logger +from seisflows.tools import msg, unix +from seisflows.tools.model import Model +from seisflows.workflow.forward import Forward -PAR = sys.modules["seisflows_parameters"] -PATH = sys.modules["seisflows_paths"] -system = sys.modules["seisflows_system"] -solver = sys.modules["seisflows_solver"] -preprocess = sys.modules["seisflows_preprocess"] -postprocess = sys.modules["seisflows_postprocess"] - - -class Migration(custom_import("workflow", "base")): +class Migration(Forward): """ - Migration base class. - - Performs the workflow of an inversion up to the postprocessing. In the - terminology of seismic exploration, implements a 'reverse time migration'. + Migration Workflow + ------------------ + Run forward and adjoint solver to produce event-dependent misfit kernels. + Sum and postprocess kernels to produce gradient. In seismic exploration + this is 'reverse time migration'. + + Parameters + ---------- + :type export_gradient: bool + :param export_gradient: export the gradient after it has been generated + in the scratch directory. If False, gradient can be discarded from + scratch at any time in the workflow + :type export_kernels: bool + :param export_kernels: export each sources event kernels after they have + been generated in the scratch directory. If False, gradient can be + discarded from scratch at any time in the workflow + + Paths + ----- + :type path_mask: str + :param path_mask: optional path to a masking function which is used to + mask out or scale parts of the gradient. The user-defined mask must + match the file format of the input model (e.g., .bin files). + *** """ - # Class-specific logger accessed using self.logger - logger = logging.getLogger(__name__).getChild(__qualname__) + __doc__ = Forward.__doc__ + __doc__ - def __init__(self): + def __init__(self, modules=None, path_mask=None, export_gradient=True, + export_kernels=False, **kwargs): """ - These parameters should not be set by the user. - Attributes are initialized as NoneTypes for clarity and docstrings. + Instantiate Migration-specific parameters + :type modules: list + :param modules: list of sub-modules that will be established as class + attributes by the setup() function. Should not need to be set by the + user """ - super().__init__() + super().__init__(**kwargs) - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - """ - sf = SeisFlowsPathsParameters(super().required) + self._modules = modules + self.export_gradient = export_gradient + self.export_kernels = export_kernels - return sf + self.path["mask"] = path_mask - def main(self, return_flow=False): - """s - Migrates seismic data to generate sensitivity kernels + # Overwriting base class required modules list + self._required_modules = ["system", "solver", "preprocess"] - :type return_flow: bool - :param return_flow: for CLI tool, simply returns the flow function - rather than running the workflow. Used for print statements etc. - """ - flow = (self.setup, - self.generate_synthetics, - self.backproject, - self.process_kernels, - self.finalize, + @property + def task_list(self): + """ + USER-DEFINED TASK LIST. This property defines a list of class methods + that take NO INPUT and have NO RETURN STATEMENTS. This defines your + linear workflow, i.e., these tasks are to be run in order from start to + finish to complete a workflow. + + This excludes 'check' (which is run during 'import_seisflows') and + 'setup' which should be run separately + + .. note:: + For workflows that require an iterative approach (e.g. inversion), + this task list will be looped over, so ensure that any setup and + teardown tasks (run once per workflow, not once per iteration) are + not included. + + :rtype: list + :return: list of methods to call in order during a workflow + """ + return [self.evaluate_initial_misfit, + self.run_adjoint_simulations, + self.postprocess_event_kernels, + self.evaluate_gradient_from_kernels + ] + + def run_adjoint_simulations(self): + """ + Performs adjoint simulations for a single given event. File manipulation + to ensure kernels are discoverable by other modules + """ + def run_adjoint_simulation(): + """Adjoint simulation function to be run by system.run()""" + if self.export_kernels: + export_kernels = os.path.join(self.path.output, "kernels", + self.solver.source_name) + else: + export_kernels = False + + logger.info(f"running adjoint simulation for source " + f"{self.solver.source_name}") + # Run adjoint simulations on system. Make kernels discoverable in + # path `eval_grad`. Optionally export those kernels + self.solver.adjoint_simulation( + save_kernels=os.path.join(self.path.eval_grad, "kernels", + self.solver.source_name, ""), + export_kernels=export_kernels + ) + + logger.info(msg.mnr("EVALUATING EVENT KERNELS W/ ADJOINT SIMULATIONS")) + self.system.run([run_adjoint_simulation]) + + def postprocess_event_kernels(self): + """ + Combine/sum NTASK event kernels into a single volumetric kernel and + then (optionally) smooth the output misfit kernel by convolving with + a 3D Gaussian function with user-defined horizontal and vertical + half-widths. + """ + def combine_event_kernels(): + """Combine event kernels into a misfit kernel""" + logger.info("combining event kernels into single misfit kernel") + self.solver.combine( + input_path=os.path.join(self.path.eval_grad, "kernels"), + output_path=os.path.join(self.path.eval_grad, "misfit_kernel") + ) + + def smooth_misfit_kernel(): + """Smooth the output misfit kernel""" + if self.solver.smooth_h > 0. or self.solver.smooth_v > 0.: + logger.info( + f"smoothing misfit kernel: " + f"H={self.solver.smooth_h}; V={self.solver.smooth_v}" + ) + # Make a distinction that we have a pre- and post-smoothed kern. + unix.mv( + src=os.path.join(self.path.eval_grad, "misfit_kernel"), + dst=os.path.join(self.path.eval_grad, "mk_nosmooth") + ) + self.solver.smooth( + input_path=os.path.join(self.path.eval_grad, "mk_nosmooth"), + output_path=os.path.join(self.path.eval_grad, + "misfit_kernel") ) - if return_flow: - return flow - - # Allow workflow resume from and stop after given flow functions - start, stop = self.check_stop_resume_cond(flow) - - # Run each argument in flow - self.logger.info(msg.mjr("STARTING MIGRATION WORKFLOW")) - for func in flow[start:stop]: - func() - self.logger.info(msg.mjr("FINISHED MIGRATION WORKFLOW")) - - def setup(self): - """ - Sets up the SeisFlows modules for the Migration - """ - # Set up all the requisite modules from the master job - self.logger.info(msg.mnr("PERFORMING MODULE SETUP")) - preprocess.setup() - postprocess.setup() - system.run("solver", "setup") - - def generate_synthetics(self): - """ - Performs forward simulation, and evaluates the objective function - """ - self.logger.info(msg.sub("PREPARING VELOCITY MODEL")) - src = os.path.join(PATH.OUTPUT, "model_init") - dst = os.path.join(PATH.SCRATCH, "model") - - assert os.path.exists(src) - unix.cp(src, dst) - - self.logger.info(msg.sub("EVALUATE OBJECTIVE FUNCTION")) - system.run("solver", "eval_func", path=PATH.SCRATCH, - write_residuals=True) - - def backproject(self): - """ - Backproject or create kernels by running adjoint simulations - """ - self.logger.info(msg.sub("BACKPROJECT / EVALUATE GRADIENT")) - system.run("solver", "eval_grad", path=PATH.SCRATCH, - export_traces=PAR.SAVETRACES) - - def process_kernels(self): - """ - Backproject to create kernels from synthetics - """ - system.run("postprocess", "process_kernels", single=True, - path=os.path.join(PATH.SCRATCH, "kernels"), - parameters=solver.parameters) - - try: - # TODO Figure out a better method for running this try except - system.run("postprocess", "process_kernels", single=True, - path=os.path.join(PATH.SCRATCH, "kernels"), - parameters=["rhop"]) - except: - pass - - def finalize(self): - """ - Saves results from current model update iteration - """ - self.logger.info(msg.mnr("FINALIZING MIGRATION WORKFLOW")) - - if PAR.SAVETRACES: - self.save_traces() - if PAR.SAVEKERNELS: - self.save_kernels() - else: - self.save_kernels_sum() - def save_kernels_sum(self): - """ - Same summed kernels into the output directory - """ - src = os.path.join(PATH.SCRATCH, "kernels", "sum") - dst = os.path.join(PATH.OUTPUT, "kernels") - unix.mkdir(dst) - unix.cp(src, dst) + # Make sure were in a clean scratch eval_grad directory + tags = ["misfit_kernel", "mk_nosmooth"] + for tag in tags: + scratch_path = os.path.join(self.path.eval_grad, tag) + if os.path.exists(scratch_path): + shutil.rmtree(scratch_path) + + logger.info(msg.mnr("GENERATING/PROCESSING MISFIT KERNEL")) + self.system.run([combine_event_kernels, smooth_misfit_kernel], + single=True) + + def evaluate_gradient_from_kernels(self): + """ + Generates the 'gradient' from the 'misfit kernel'. This involves + scaling the gradient by the model vector (log dm --> dm) and applying + an optional mask function to the gradient. + """ + logger.info("scaling gradient to absolute model perturbations") + + # Check that kernel files exist before attempting to manipulate + misfit_kernel_path = os.path.join(self.path.eval_grad, "misfit_kernel") + if not glob(os.path.join(misfit_kernel_path, "*")): + logger.critical(msg.cli( + "directory 'scratch/eval_grad/misfit_kernel' is empty but " + "should contain summed kernels. Please check " + "'scratch/solver/mainsolver' log files to see if the " + "`xcombine` and `xsmooth` operations completed successfully", + header="missing kernels error", border="=") + ) + sys.exit(-1) + gradient = Model(path=misfit_kernel_path) - def save_kernels(self): - """ - Save individual kernels into the output directory - """ - src = os.path.join(PATH.SCRATCH, "kernels") - dst = PATH.OUTPUT + # Set model: we only need to access parameters which will be updated + # Assuming that the model in the solver also generated the kernels + dst = os.path.join(self.path.eval_grad, "model") + unix.rm(dst) unix.mkdir(dst) - unix.cp(src, dst) - - def save_traces(self): - """ - Save waveform traces into the output directory - """ - src = os.path.join(PATH.SCRATCH, "traces") - dst = PATH.OUTPUT - unix.cp(src, dst) + for src in self.solver.model_files: + unix.ln(src, dst=os.path.join(dst, os.path.basename(src))) + + # Read in new model that will have been generated by `setup` or by + # optimization library + model = Model(path=dst) + + # Merge to vector and convert to absolute perturbations: + # log dm --> dm (see Eq.13 Tromp et al 2005) + gradient.update(vector=gradient.vector * model.vector) + gradient.write(path=os.path.join(self.path.eval_grad, "gradient")) + + # Apply an optional mask to the gradient + if self.path.mask: + logger.info("applying mask function to gradient") + mask = Model(path=self.path.mask) + unix.mv(src=os.path.join(self.path.eval_grad, "gradient"), + dst=os.path.join(self.path.eval_grad, "gradient_nomask")) + + gradient.update(vector=gradient.vector * mask.vector) + gradient.write(path=os.path.join(self.path.eval_grad, "gradient")) + + # Export gradient to disk + if self.export_gradient: + logger.info("exporting gradient to disk") + src = os.path.join(self.path.eval_grad, "gradient") + dst = os.path.join(self.path.output, "gradient") + unix.cp(src, dst) diff --git a/seisflows/workflow/test.py b/seisflows/workflow/test.py deleted file mode 100644 index 3f96fc96..00000000 --- a/seisflows/workflow/test.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python3 -""" -This is a SeisFlows Test class which is used to test out the underlying -machinery before running an actual workflow. Contains simple functions used to -make sure that all parts of the package are working as expected. -""" -import os -import sys -import time -import logging -from seisflows.tools import msg -from seisflows.config import SeisFlowsPathsParameters, custom_import - -# Required SeisFlows configuration -PAR = sys.modules['seisflows_parameters'] -PATH = sys.modules['seisflows_paths'] - -# The number of loaded modules depends on the module this Base class belongs to -system = sys.modules["seisflows_system"] -solver = sys.modules["seisflows_solver"] -optimize = sys.modules["seisflows_optimize"] -preprocess = sys.modules["seisflows_preprocess"] -postprocess = sys.modules["seisflows_postprocess"] - - -class Test(custom_import("workflow", "base")): - """ - This is a template Base class - """ - # Class-specific logger accessed using self.logger - # When this logger is called, e.g., self.logger.info("text"), the logging - # package will know exactly which module, class and function the log - # statement has been sent from, extraordinarily helpful for debugging. - logger = logging.getLogger(__name__).getChild(__qualname__) - - @property - def required(self): - """ - A hard definition of paths and parameters required by this class, - alongside their necessity for the class and their string explanations. - - :rtype: seisflows.config.SeisFlowsPathsParameters - :return: Paths and parameters that define the given class - - """ - sf = SeisFlowsPathsParameters(super().required) - - return sf - - def check(self, validate=True): - """ - Checks parameters and paths. The validate function ensures that all - required paths and parameters are accounted for, and that all - optional paths and parameters are set to user-defined or default values. - - :type validate: bool - :param validate: set required paths and parameters into sys.modules - """ - # The validate statement is used internally to set required paths - # and parameters into sys.modules. Default values are stored for - # optional terms - if validate: - self.required.validate() - - def main(self, return_flow=False): - """ - This controls the main testing workflow - """ - FLOW = [self.test_system] - if return_flow: - return FLOW - - for func in FLOW: - func() - - def test_function(self): - """ - A simple function that can be called by system.run() - """ - print(f"Hello world, from taskid {system.taskid()}") - - def test_system(self): - """ - This is an example test function which can take any number of args - or kwargs. The base class is responsible for setting all of the - necessary functions - """ - system.run(classname="workflow", method="test_function") - # Wait a bit for system to catch up - time.sleep(3) - system.run(classname="workflow", method="test_function", single=True) - - diff --git a/seisflows/workflow/test_flow.py b/seisflows/workflow/test_flow.py new file mode 100644 index 00000000..4cea0c73 --- /dev/null +++ b/seisflows/workflow/test_flow.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python3 +""" +This is a SeisFlows Test workflow class which is used to test out the underlying +machinery for a given set of modules, before submitting a full workflow. Used +for debugging and development, as well as ensuring that SeisFlows is in working +order before committing a large number of compute resources. +""" +import os +import time +import sys +from glob import glob +from seisflows import logger +from seisflows.tools import unix, msg +from seisflows.tools.config import Dict, get_task_id + + +class TestFlow: + """ + TestFlow Workflow + ----------------- + Test individual sub-modules in a 'live' testing environment in order to + ensure SeisFlows works appropriately given an established system and solver. + + .. note:: + You do not need to set System parameters `ntask`, `nproc`, `tasktime`, + `walltime`. These will be overwritten by the setup task. + + Parameters + ---------- + + Paths + ----- + :type workdir: str + :param workdir: working directory in which to perform a SeisFlows workflow. + SeisFlows internal directory structure will be created here. Default cwd + :type path_output: str + :param path_output: path to directory used for permanent storage on disk. + Results and expored scratch files are saved here. + *** + """ + def __init__(self, modules=None, workdir=os.getcwd(), path_output=None, + **kwargs): + """Test workflow""" + self._modules = modules + + self.path = Dict( + workdir=workdir, + scratch=os.path.join(workdir, "scratch"), + output=path_output or os.path.join(workdir, "output") + ) + + @property + def task_list(self): + """ + A task list which includes tests for most of the modules depending on + whether they're included in the module list or not. + """ + _task_list = [] + if not self.system: + logger.warning("No `system` module chosen, skipping system tests") + else: + _task_list.append(self.test_system_print_hello_world) + _task_list.append(self.test_system_wait_ten_seconds_then_fail) + + return _task_list + + def check(self): + """ + Run check functions for all underlying modules + """ + logger.info("running check for test workflow") + for name, module in self._modules.items(): + if module: + module.check() + + def setup(self): + """ + Creates required directory structure + """ + logger.info("running setup for test workflow") + for path in [self.path.workdir, self.path.scratch, self.path.output]: + unix.mkdir(path) + + for name, module in self._modules.items(): + if module: + module.setup() + + # Assign modules to internal attributes, some may be Null + self.system = self._modules["system"] + self.solver = self._modules["solver"] + self.preprocess = self._modules["preprocess"] + self.optimize = self._modules["optimize"] + + # Force some internal module variables to keep testing lightweight + logger.info("overwriting internal System parameters from given values") + self.system.ntask = 3 + self.system.nproc = 1 + self.system.tasktime = .25 # 15 seconds + self.system.walltime = 2.5 # 2.5 minutes + + def run(self): + """ + Run through the task list which should consist of various test functions + which are meant to ensure SeisFlows works in a live working environment + without committing a large number of resources + """ + logger.info(msg.mjr("RUNNING TEST WORKFLOW")) + + for func in self.task_list: + func() + + logger.info(msg.mjr("FINISHED TEST WORKFLOW")) + + def test_system_print_hello_world(self): + """ + Use the system to run a simple print function which names the currently + running task id to check that task id printing works. Check that the + output log messages show the correct task id and log statement + """ + logger.info("running system test for job array submission") + + def _test_function(): + print(f"hello world from task id: {get_task_id()}") + + # Clear the log files dir. as this is how we will check results + unix.rm(self.system.path.log_files) + unix.mkdir(self.system.path.log_files) + + # Run an array job + self.system.run(funcs=[_test_function], single=False) + + time.sleep(5) # give the system a second to catch up + + # Check the results of the run + log_files = glob(os.path.join(self.system.path.log_files, "*_*")) + assert(len(log_files) == self.system.ntask), \ + f"number of log files does not match expected number of tasks" + + for i, fid in enumerate(sorted(log_files)): + with open(fid, "r") as f: + assert(f"hello world from task id: {i}" in f.read()), \ + f"log file '{fid}' does not show correct log message" + + logger.info("job array submission system test finished successfully") + + + def test_system_wait_ten_seconds_then_fail(self): + """ + Simple wait function to be called by system run, used to test + job status check function which monitors job queue. Throw in a job + failure at the end of the function to check that system exit works + """ + logger.info("running system test for job queue monitoring and " + "job failure catching") + + def _test_function(): + for i in range(1, 11): + time.sleep(1) + print(f"Task ID {get_task_id()} waited {i} sec.") + + sys.exit(-1) # intentional job failure + + # Clear the log files dir. as this is how we will check results + unix.rm(self.system.path.log_files) + unix.mkdir(self.system.path.log_files) + + # Catch the system exit exception that is thrown when job fails + try: + self.system.run(funcs=[_test_function], single=True) + logger.critical("job was expected to fail but did not") + except SystemExit: + logger.info("job failure catch was successful") + pass + + # Check the log file for job failure + log_files = glob(os.path.join(self.system.path.log_files, "*_*")) + assert(len(log_files) == 1), f"only one log file expected" + + logger.info("job queue and fail system test finished successfully") + diff --git a/setup.py b/setup.py index cee8ca75..a23b051e 100644 --- a/setup.py +++ b/setup.py @@ -1,18 +1,19 @@ from setuptools import setup, find_packages setup(name="seisflows", - version="1.0.0", - description="SeisFlows3: A seismic inversion package", - url="https://github.com/seisflows/seisflows", + version="2.1.0", + description="SeisFlows: A seismic inversion package", + url="https://github.com/adjtomo/seisflows", author="Seisflows Development Team", packages=find_packages(), entry_points={ "console_scripts": ["seisflows=seisflows.seisflows:main",]}, license="GPL", install_requires=[ - "obspy>=1.2.2", + "obspy>=1.3.0", "pyyaml>=5.3.1", - "IPython>=7.31.1" + "IPython>=7.31.1", + "dill>=0.3.5.1", ], zip_save=False )